removing dependency of Object

This commit is contained in:
Joao Saffran 2025-08-20 10:15:37 -07:00
parent 8353fe0d0a
commit f3ecd8ae8c
6 changed files with 29 additions and 18 deletions

View File

@ -19,6 +19,18 @@ namespace llvm {
class raw_ostream; class raw_ostream;
namespace mcdxbc { namespace mcdxbc {
struct RootConstants {
uint32_t ShaderRegister;
uint32_t RegisterSpace;
uint32_t Num32BitValues;
};
struct RootDescriptor {
uint32_t ShaderRegister;
uint32_t RegisterSpace;
uint32_t Flags;
};
struct RootParameterInfo { struct RootParameterInfo {
dxbc::RootParameterType Type; dxbc::RootParameterType Type;
dxbc::ShaderVisibility Visibility; dxbc::ShaderVisibility Visibility;
@ -42,8 +54,8 @@ struct DescriptorTable {
struct RootParametersContainer { struct RootParametersContainer {
SmallVector<RootParameterInfo> ParametersInfo; SmallVector<RootParameterInfo> ParametersInfo;
SmallVector<dxbc::RTS0::v1::RootConstants> Constants; SmallVector<RootConstants> Constants;
SmallVector<dxbc::RTS0::v2::RootDescriptor> Descriptors; SmallVector<RootDescriptor> Descriptors;
SmallVector<DescriptorTable> Tables; SmallVector<DescriptorTable> Tables;
void addInfo(dxbc::RootParameterType Type, dxbc::ShaderVisibility Visibility, void addInfo(dxbc::RootParameterType Type, dxbc::ShaderVisibility Visibility,
@ -52,15 +64,14 @@ struct RootParametersContainer {
} }
void addParameter(dxbc::RootParameterType Type, void addParameter(dxbc::RootParameterType Type,
dxbc::ShaderVisibility Visibility, dxbc::ShaderVisibility Visibility, RootConstants Constant) {
dxbc::RTS0::v1::RootConstants Constant) {
addInfo(Type, Visibility, Constants.size()); addInfo(Type, Visibility, Constants.size());
Constants.push_back(Constant); Constants.push_back(Constant);
} }
void addParameter(dxbc::RootParameterType Type, void addParameter(dxbc::RootParameterType Type,
dxbc::ShaderVisibility Visibility, dxbc::ShaderVisibility Visibility,
dxbc::RTS0::v2::RootDescriptor Descriptor) { RootDescriptor Descriptor) {
addInfo(Type, Visibility, Descriptors.size()); addInfo(Type, Visibility, Descriptors.size());
Descriptors.push_back(Descriptor); Descriptors.push_back(Descriptor);
} }
@ -76,11 +87,11 @@ struct RootParametersContainer {
return Info; return Info;
} }
const dxbc::RTS0::v1::RootConstants &getConstant(size_t Index) const { const RootConstants &getConstant(size_t Index) const {
return Constants[Index]; return Constants[Index];
} }
const dxbc::RTS0::v2::RootDescriptor &getRootDescriptor(size_t Index) const { const RootDescriptor &getRootDescriptor(size_t Index) const {
return Descriptors[Index]; return Descriptors[Index];
} }

View File

@ -240,7 +240,7 @@ Error MetadataParser::parseRootConstants(mcdxbc::RootSignatureDesc &RSD,
if (auto E = Visibility.takeError()) if (auto E = Visibility.takeError())
return Error(std::move(E)); return Error(std::move(E));
dxbc::RTS0::v1::RootConstants Constants; mcdxbc::RootConstants Constants;
if (std::optional<uint32_t> Val = extractMdIntValue(RootConstantNode, 2)) if (std::optional<uint32_t> Val = extractMdIntValue(RootConstantNode, 2))
Constants.ShaderRegister = *Val; Constants.ShaderRegister = *Val;
else else
@ -294,7 +294,7 @@ Error MetadataParser::parseRootDescriptors(
if (auto E = Visibility.takeError()) if (auto E = Visibility.takeError())
return Error(std::move(E)); return Error(std::move(E));
dxbc::RTS0::v2::RootDescriptor Descriptor; mcdxbc::RootDescriptor Descriptor;
if (std::optional<uint32_t> Val = extractMdIntValue(RootDescriptorNode, 2)) if (std::optional<uint32_t> Val = extractMdIntValue(RootDescriptorNode, 2))
Descriptor.ShaderRegister = *Val; Descriptor.ShaderRegister = *Val;
else else
@ -544,7 +544,7 @@ Error MetadataParser::validateRootSignature(
case dxbc::RootParameterType::CBV: case dxbc::RootParameterType::CBV:
case dxbc::RootParameterType::UAV: case dxbc::RootParameterType::UAV:
case dxbc::RootParameterType::SRV: { case dxbc::RootParameterType::SRV: {
const dxbc::RTS0::v2::RootDescriptor &Descriptor = const mcdxbc::RootDescriptor &Descriptor =
RSD.ParametersContainer.getRootDescriptor(Info.Location); RSD.ParametersContainer.getRootDescriptor(Info.Location);
if (!hlsl::rootsig::verifyRegisterValue(Descriptor.ShaderRegister)) if (!hlsl::rootsig::verifyRegisterValue(Descriptor.ShaderRegister))
DeferredErrs = DeferredErrs =

View File

@ -97,7 +97,7 @@ void RootSignatureDesc::write(raw_ostream &OS) const {
const auto Info = ParametersContainer.getInfo(I); const auto Info = ParametersContainer.getInfo(I);
switch (Info.Type) { switch (Info.Type) {
case dxbc::RootParameterType::Constants32Bit: { case dxbc::RootParameterType::Constants32Bit: {
const dxbc::RTS0::v1::RootConstants &Constants = const mcdxbc::RootConstants &Constants =
ParametersContainer.getConstant(Info.Location); ParametersContainer.getConstant(Info.Location);
support::endian::write(BOS, Constants.ShaderRegister, support::endian::write(BOS, Constants.ShaderRegister,
llvm::endianness::little); llvm::endianness::little);
@ -110,7 +110,7 @@ void RootSignatureDesc::write(raw_ostream &OS) const {
case dxbc::RootParameterType::CBV: case dxbc::RootParameterType::CBV:
case dxbc::RootParameterType::SRV: case dxbc::RootParameterType::SRV:
case dxbc::RootParameterType::UAV: { case dxbc::RootParameterType::UAV: {
const dxbc::RTS0::v2::RootDescriptor &Descriptor = const mcdxbc::RootDescriptor &Descriptor =
ParametersContainer.getRootDescriptor(Info.Location); ParametersContainer.getRootDescriptor(Info.Location);
support::endian::write(BOS, Descriptor.ShaderRegister, support::endian::write(BOS, Descriptor.ShaderRegister,

View File

@ -288,7 +288,7 @@ void DXContainerWriter::writeParts(raw_ostream &OS) {
case dxbc::RootParameterType::Constants32Bit: { case dxbc::RootParameterType::Constants32Bit: {
const DXContainerYAML::RootConstantsYaml &ConstantYaml = const DXContainerYAML::RootConstantsYaml &ConstantYaml =
P.RootSignature->Parameters.getOrInsertConstants(L); P.RootSignature->Parameters.getOrInsertConstants(L);
dxbc::RTS0::v1::RootConstants Constants; mcdxbc::RootConstants Constants;
Constants.Num32BitValues = ConstantYaml.Num32BitValues; Constants.Num32BitValues = ConstantYaml.Num32BitValues;
Constants.RegisterSpace = ConstantYaml.RegisterSpace; Constants.RegisterSpace = ConstantYaml.RegisterSpace;
@ -302,7 +302,7 @@ void DXContainerWriter::writeParts(raw_ostream &OS) {
const DXContainerYAML::RootDescriptorYaml &DescriptorYaml = const DXContainerYAML::RootDescriptorYaml &DescriptorYaml =
P.RootSignature->Parameters.getOrInsertDescriptor(L); P.RootSignature->Parameters.getOrInsertDescriptor(L);
dxbc::RTS0::v2::RootDescriptor Descriptor; mcdxbc::RootDescriptor Descriptor;
Descriptor.RegisterSpace = DescriptorYaml.RegisterSpace; Descriptor.RegisterSpace = DescriptorYaml.RegisterSpace;
Descriptor.ShaderRegister = DescriptorYaml.ShaderRegister; Descriptor.ShaderRegister = DescriptorYaml.ShaderRegister;
if (RS.Version > 1) if (RS.Version > 1)

View File

@ -171,7 +171,7 @@ static void validateRootSignature(Module &M,
dxbc::RootParameterType ParamType = dxbc::RootParameterType(ParamInfo.Type); dxbc::RootParameterType ParamType = dxbc::RootParameterType(ParamInfo.Type);
switch (ParamType) { switch (ParamType) {
case dxbc::RootParameterType::Constants32Bit: { case dxbc::RootParameterType::Constants32Bit: {
dxbc::RTS0::v1::RootConstants Const = mcdxbc::RootConstants Const =
RSD.ParametersContainer.getConstant(ParamInfo.Location); RSD.ParametersContainer.getConstant(ParamInfo.Location);
Builder.trackBinding(dxil::ResourceClass::CBuffer, Const.RegisterSpace, Builder.trackBinding(dxil::ResourceClass::CBuffer, Const.RegisterSpace,
Const.ShaderRegister, Const.ShaderRegister, Const.ShaderRegister, Const.ShaderRegister,
@ -182,7 +182,7 @@ static void validateRootSignature(Module &M,
case dxbc::RootParameterType::SRV: case dxbc::RootParameterType::SRV:
case dxbc::RootParameterType::UAV: case dxbc::RootParameterType::UAV:
case dxbc::RootParameterType::CBV: { case dxbc::RootParameterType::CBV: {
dxbc::RTS0::v2::RootDescriptor Desc = mcdxbc::RootDescriptor Desc =
RSD.ParametersContainer.getRootDescriptor(ParamInfo.Location); RSD.ParametersContainer.getRootDescriptor(ParamInfo.Location);
Builder.trackBinding(toResourceClass(ParamInfo.Type), Desc.RegisterSpace, Builder.trackBinding(toResourceClass(ParamInfo.Type), Desc.RegisterSpace,
Desc.ShaderRegister, Desc.ShaderRegister, Desc.ShaderRegister, Desc.ShaderRegister,

View File

@ -182,7 +182,7 @@ PreservedAnalyses RootSignatureAnalysisPrinter::run(Module &M,
const uint32_t &Loc = Info.Location; const uint32_t &Loc = Info.Location;
switch (Info.Type) { switch (Info.Type) {
case dxbc::RootParameterType::Constants32Bit: { case dxbc::RootParameterType::Constants32Bit: {
const dxbc::RTS0::v1::RootConstants &Constants = const mcdxbc::RootConstants &Constants =
RS.ParametersContainer.getConstant(Loc); RS.ParametersContainer.getConstant(Loc);
OS << " Register Space: " << Constants.RegisterSpace << "\n" OS << " Register Space: " << Constants.RegisterSpace << "\n"
<< " Shader Register: " << Constants.ShaderRegister << "\n" << " Shader Register: " << Constants.ShaderRegister << "\n"
@ -192,7 +192,7 @@ PreservedAnalyses RootSignatureAnalysisPrinter::run(Module &M,
case dxbc::RootParameterType::CBV: case dxbc::RootParameterType::CBV:
case dxbc::RootParameterType::UAV: case dxbc::RootParameterType::UAV:
case dxbc::RootParameterType::SRV: { case dxbc::RootParameterType::SRV: {
const dxbc::RTS0::v2::RootDescriptor &Descriptor = const mcdxbc::RootDescriptor &Descriptor =
RS.ParametersContainer.getRootDescriptor(Loc); RS.ParametersContainer.getRootDescriptor(Loc);
OS << " Register Space: " << Descriptor.RegisterSpace << "\n" OS << " Register Space: " << Descriptor.RegisterSpace << "\n"
<< " Shader Register: " << Descriptor.ShaderRegister << "\n"; << " Shader Register: " << Descriptor.ShaderRegister << "\n";