1919#include " llvm/BinaryFormat/DXContainer.h"
2020#include " llvm/Object/DXContainer.h"
2121#include " llvm/ObjectYAML/YAML.h"
22+ #include " llvm/Support/ErrorHandling.h"
2223#include " llvm/Support/YAMLTraits.h"
2324#include < array>
2425#include < cstdint>
@@ -74,6 +75,41 @@ struct ShaderHash {
7475};
7576
7677#define ROOT_ELEMENT_FLAG (Num, Val ) bool Val = false ;
78+
79+ struct RootConstantsYaml {
80+ uint32_t ShaderRegister;
81+ uint32_t RegisterSpace;
82+ uint32_t Num32BitValues;
83+ };
84+
85+ struct RootParameterYamlDesc {
86+ dxbc::RootParameterType Type;
87+ dxbc::ShaderVisibility Visibility;
88+ uint32_t Offset;
89+
90+ RootParameterYamlDesc () = default ;
91+ RootParameterYamlDesc (const object::DirectX::RootParameter &Parameter) {
92+ Type = Parameter.Header .ParameterType ;
93+ Visibility = Parameter.Header .ShaderVisibility ;
94+ Offset = Parameter.Header .ParameterOffset ;
95+ switch (Parameter.Header .ParameterType ) {
96+
97+ case dxbc::RootParameterType::Constants32Bit: {
98+ Constants.Num32BitValues = Parameter.Constants .Num32BitValues ;
99+ Constants.RegisterSpace = Parameter.Constants .RegisterSpace ;
100+ Constants.ShaderRegister = Parameter.Constants .ShaderRegister ;
101+ } break ;
102+ case dxbc::RootParameterType::Empty:
103+ llvm_unreachable (" Invalid Root Parameter Type. It should be verified "
104+ " before reaching here." );
105+ break ;
106+ }
107+ }
108+ union {
109+ RootConstantsYaml Constants;
110+ };
111+ };
112+
77113struct RootSignatureYamlDesc {
78114 RootSignatureYamlDesc () = default ;
79115 RootSignatureYamlDesc (const object::DirectX::RootSignature &Data);
@@ -82,7 +118,7 @@ struct RootSignatureYamlDesc {
82118 uint32_t NumStaticSamplers;
83119 uint32_t StaticSamplersOffset;
84120
85- SmallVector<dxbc::RootParameter > Parameters;
121+ SmallVector<RootParameterYamlDesc > Parameters;
86122
87123 uint32_t getEncodedFlags ();
88124
@@ -192,7 +228,7 @@ LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DXContainerYAML::ResourceBindInfo)
192228LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DXContainerYAML::SignatureElement)
193229LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DXContainerYAML::PSVInfo::MaskVector)
194230LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DXContainerYAML::SignatureParameter)
195- LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::dxbc::RootParameter )
231+ LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DXContainerYAML::RootParameterYamlDesc )
196232LLVM_YAML_DECLARE_ENUM_TRAITS(llvm::dxbc::PSV::SemanticKind)
197233LLVM_YAML_DECLARE_ENUM_TRAITS(llvm::dxbc::PSV::ComponentType)
198234LLVM_YAML_DECLARE_ENUM_TRAITS(llvm::dxbc::PSV::InterpolationMode)
@@ -267,12 +303,12 @@ template <> struct MappingTraits<DXContainerYAML::RootSignatureYamlDesc> {
267303 DXContainerYAML::RootSignatureYamlDesc &RootSignature);
268304};
269305
270- template <> struct MappingTraits <dxbc::RootParameter > {
271- static void mapping (IO &IO, dxbc::RootParameter &P);
306+ template <> struct MappingTraits <llvm::DXContainerYAML::RootParameterYamlDesc > {
307+ static void mapping (IO &IO, llvm::DXContainerYAML::RootParameterYamlDesc &P);
272308};
273309
274- template <> struct MappingTraits <dxbc::RootConstants > {
275- static void mapping (IO &IO, dxbc::RootConstants &C);
310+ template <> struct MappingTraits <llvm::DXContainerYAML::RootConstantsYaml > {
311+ static void mapping (IO &IO, llvm::DXContainerYAML::RootConstantsYaml &C);
276312};
277313
278314} // namespace yaml
0 commit comments