https://github.com/joaosaffran updated https://github.com/llvm/llvm-project/pull/138318
>From b2bfb0257cfd424dafbc9a46542528ade42a17ad Mon Sep 17 00:00:00 2001 From: joaosaffran <joao.saff...@microsoft.com> Date: Fri, 2 May 2025 00:42:56 +0000 Subject: [PATCH 1/4] refactoring root signature dxcontainer yaml representation --- .../include/llvm/ObjectYAML/DXContainerYAML.h | 96 +++---------------- llvm/lib/ObjectYAML/DXContainerEmitter.cpp | 41 ++++---- llvm/lib/ObjectYAML/DXContainerYAML.cpp | 82 +++++++++------- .../RootSignature-MultipleParameters.yaml | 11 --- 4 files changed, 83 insertions(+), 147 deletions(-) diff --git a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h index 9cf0f8df1debf..d8d025fe4294b 100644 --- a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h +++ b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h @@ -26,6 +26,7 @@ #include <cstdint> #include <optional> #include <string> +#include <variant> #include <vector> namespace llvm { @@ -112,98 +113,23 @@ struct DescriptorTableYaml { SmallVector<DescriptorRangeYaml> Ranges; }; + +using ParameterData = std::variant< +RootConstantsYaml, +RootDescriptorYaml, +DescriptorTableYaml +>; + struct RootParameterYamlDesc { uint32_t Type; uint32_t Visibility; uint32_t Offset; + ParameterData Data; + RootParameterYamlDesc(){}; RootParameterYamlDesc(uint32_t T) : Type(T) { - switch (T) { - - case llvm::to_underlying(dxbc::RootParameterType::Constants32Bit): - Constants = RootConstantsYaml(); - break; - case llvm::to_underlying(dxbc::RootParameterType::CBV): - case llvm::to_underlying(dxbc::RootParameterType::SRV): - case llvm::to_underlying(dxbc::RootParameterType::UAV): - Descriptor = RootDescriptorYaml(); - break; - case llvm::to_underlying(dxbc::RootParameterType::DescriptorTable): - Table = DescriptorTableYaml(); - break; - } - } - - ~RootParameterYamlDesc() { - switch (Type) { - - case llvm::to_underlying(dxbc::RootParameterType::Constants32Bit): - Constants.~RootConstantsYaml(); - break; - case llvm::to_underlying(dxbc::RootParameterType::CBV): - case llvm::to_underlying(dxbc::RootParameterType::SRV): - case llvm::to_underlying(dxbc::RootParameterType::UAV): - Descriptor.~RootDescriptorYaml(); - break; - case llvm::to_underlying(dxbc::RootParameterType::DescriptorTable): - Table.~DescriptorTableYaml(); - break; - } + } - - RootParameterYamlDesc(const RootParameterYamlDesc &Other) - : Type(Other.Type), Visibility(Other.Visibility), Offset(Other.Offset) { - // Initialize the appropriate union member based on Type - switch (Type) { - case llvm::to_underlying(dxbc::RootParameterType::Constants32Bit): - // Placement new to construct the union member - new (&Constants) RootConstantsYaml(Other.Constants); - break; - case llvm::to_underlying(dxbc::RootParameterType::CBV): - case llvm::to_underlying(dxbc::RootParameterType::SRV): - case llvm::to_underlying(dxbc::RootParameterType::UAV): - new (&Descriptor) RootDescriptorYaml(Other.Descriptor); - break; - case llvm::to_underlying(dxbc::RootParameterType::DescriptorTable): - new (&Table) DescriptorTableYaml(Other.Table); - break; - } - } - - RootParameterYamlDesc &operator=(const RootParameterYamlDesc &Other) { - if (this != &Other) { - // First, destroy the current union member - this->~RootParameterYamlDesc(); - - // Copy the basic members - Type = Other.Type; - Visibility = Other.Visibility; - Offset = Other.Offset; - - // Initialize the new union member based on the Type from 'other' - switch (Type) { - case llvm::to_underlying(dxbc::RootParameterType::Constants32Bit): - new (&Constants) RootConstantsYaml(Other.Constants); - break; - case llvm::to_underlying(dxbc::RootParameterType::CBV): - case llvm::to_underlying(dxbc::RootParameterType::SRV): - case llvm::to_underlying(dxbc::RootParameterType::UAV): - new (&Descriptor) RootDescriptorYaml(Other.Descriptor); - break; - case llvm::to_underlying(dxbc::RootParameterType::DescriptorTable): - new (&Table) DescriptorTableYaml(Other.Table); - break; - } - } - return *this; - } - - // ToDo: Fix this (Already have a follow up PR with it) - union { - RootConstantsYaml Constants; - RootDescriptorYaml Descriptor; - }; - DescriptorTableYaml Table; }; struct RootSignatureYamlDesc { diff --git a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp index 6336a42c8e4ae..c2c0188a959b0 100644 --- a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp +++ b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp @@ -15,11 +15,13 @@ #include "llvm/BinaryFormat/DXContainer.h" #include "llvm/MC/DXContainerPSVInfo.h" #include "llvm/MC/DXContainerRootSignature.h" +#include "llvm/ObjectYAML/DXContainerYAML.h" #include "llvm/ObjectYAML/ObjectYAML.h" #include "llvm/ObjectYAML/yaml2obj.h" #include "llvm/Support/Errc.h" #include "llvm/Support/Error.h" #include "llvm/Support/raw_ostream.h" +#include <variant> using namespace llvm; @@ -278,33 +280,35 @@ void DXContainerWriter::writeParts(raw_ostream &OS) { auto Header = dxbc::RootParameterHeader{Param.Type, Param.Visibility, Param.Offset}; - switch (Param.Type) { - case llvm::to_underlying(dxbc::RootParameterType::Constants32Bit): + if(std::holds_alternative<DXContainerYAML::RootConstantsYaml>(Param.Data)){ + auto ConstantYaml = std::get<DXContainerYAML::RootConstantsYaml>(Param.Data); + dxbc::RootConstants Constants; - Constants.Num32BitValues = Param.Constants.Num32BitValues; - Constants.RegisterSpace = Param.Constants.RegisterSpace; - Constants.ShaderRegister = Param.Constants.ShaderRegister; + Constants.Num32BitValues = ConstantYaml.Num32BitValues; + Constants.RegisterSpace = ConstantYaml.RegisterSpace; + Constants.ShaderRegister = ConstantYaml.ShaderRegister; RS.ParametersContainer.addParameter(Header, Constants); - break; - case llvm::to_underlying(dxbc::RootParameterType::SRV): - case llvm::to_underlying(dxbc::RootParameterType::UAV): - case llvm::to_underlying(dxbc::RootParameterType::CBV): + } else if (std::holds_alternative<DXContainerYAML::RootDescriptorYaml>(Param.Data)){ + auto DescriptorYaml = std::get<DXContainerYAML::RootDescriptorYaml>(Param.Data); + if (RS.Version == 1) { dxbc::RST0::v0::RootDescriptor Descriptor; - Descriptor.RegisterSpace = Param.Descriptor.RegisterSpace; - Descriptor.ShaderRegister = Param.Descriptor.ShaderRegister; + auto DescriptorYaml = std::get<DXContainerYAML::RootDescriptorYaml>(Param.Data); + Descriptor.RegisterSpace = DescriptorYaml.RegisterSpace; + Descriptor.ShaderRegister = DescriptorYaml.ShaderRegister; RS.ParametersContainer.addParameter(Header, Descriptor); } else { dxbc::RST0::v1::RootDescriptor Descriptor; - Descriptor.RegisterSpace = Param.Descriptor.RegisterSpace; - Descriptor.ShaderRegister = Param.Descriptor.ShaderRegister; - Descriptor.Flags = Param.Descriptor.getEncodedFlags(); + Descriptor.RegisterSpace = DescriptorYaml.RegisterSpace; + Descriptor.ShaderRegister = DescriptorYaml.ShaderRegister; + Descriptor.Flags = DescriptorYaml.getEncodedFlags(); RS.ParametersContainer.addParameter(Header, Descriptor); } - break; - case llvm::to_underlying(dxbc::RootParameterType::DescriptorTable): { + }else if (std::holds_alternative<DXContainerYAML::DescriptorTableYaml>(Param.Data)) { mcdxbc::DescriptorTable Table; - for (const auto &R : Param.Table.Ranges) { + auto TableYaml = std::get<DXContainerYAML::DescriptorTableYaml>(Param.Data); + + for (const auto &R : TableYaml.Ranges) { if (RS.Version == 1) { dxbc::RST0::v0::DescriptorRange Range; Range.RangeType = R.RangeType; @@ -327,8 +331,7 @@ void DXContainerWriter::writeParts(raw_ostream &OS) { } } RS.ParametersContainer.addParameter(Header, Table); - } break; - default: + } else { // Handling invalid parameter type edge case RS.ParametersContainer.addInfo(Header, -1); } diff --git a/llvm/lib/ObjectYAML/DXContainerYAML.cpp b/llvm/lib/ObjectYAML/DXContainerYAML.cpp index c0a90dd50925c..3fea73c0da447 100644 --- a/llvm/lib/ObjectYAML/DXContainerYAML.cpp +++ b/llvm/lib/ObjectYAML/DXContainerYAML.cpp @@ -76,10 +76,11 @@ DXContainerYAML::RootSignatureYamlDesc::create( return std::move(E); auto Constants = *ConstantsOrErr; - - NewP.Constants.Num32BitValues = Constants.Num32BitValues; - NewP.Constants.ShaderRegister = Constants.ShaderRegister; - NewP.Constants.RegisterSpace = Constants.RegisterSpace; + RootConstantsYaml ConstantYaml; + ConstantYaml.Num32BitValues = Constants.Num32BitValues; + ConstantYaml.ShaderRegister = Constants.ShaderRegister; + ConstantYaml.RegisterSpace = Constants.RegisterSpace; + NewP.Data = ConstantYaml; } else if (auto *RDV = dyn_cast<object::DirectX::RootDescriptorView>(&ParamView)) { llvm::Expected<dxbc::RST0::v1::RootDescriptor> DescriptorOrErr = @@ -87,25 +88,28 @@ DXContainerYAML::RootSignatureYamlDesc::create( if (Error E = DescriptorOrErr.takeError()) return std::move(E); auto Descriptor = *DescriptorOrErr; - NewP.Descriptor.ShaderRegister = Descriptor.ShaderRegister; - NewP.Descriptor.RegisterSpace = Descriptor.RegisterSpace; + RootDescriptorYaml YamlDescriptor; + YamlDescriptor.ShaderRegister = Descriptor.ShaderRegister; + YamlDescriptor.RegisterSpace = Descriptor.RegisterSpace; if (Version > 1) { #define ROOT_DESCRIPTOR_FLAG(Num, Val) \ - NewP.Descriptor.Val = \ + YamlDescriptor.Val = \ (Descriptor.Flags & \ llvm::to_underlying(dxbc::RootDescriptorFlag::Val)) > 0; #include "llvm/BinaryFormat/DXContainerConstants.def" } + NewP.Data = YamlDescriptor; } else if (auto *TDV = dyn_cast<object::DirectX::DescriptorTableView< - dxbc::RST0::v1::DescriptorRange>>(&ParamView)) { + dxbc::RST0::v0::DescriptorRange>>(&ParamView)) { llvm::Expected< - object::DirectX::DescriptorTable<dxbc::RST0::v1::DescriptorRange>> + object::DirectX::DescriptorTable<dxbc::RST0::v0::DescriptorRange>> TableOrErr = TDV->read(); if (Error E = TableOrErr.takeError()) return std::move(E); auto Table = *TableOrErr; - NewP.Table.NumRanges = Table.NumRanges; - NewP.Table.RangesOffset = Table.RangesOffset; + DescriptorTableYaml YamlTable; + YamlTable.NumRanges = Table.NumRanges; + YamlTable.RangesOffset = Table.RangesOffset; for (const auto &R : Table) { DescriptorRangeYaml NewR; @@ -116,22 +120,21 @@ DXContainerYAML::RootSignatureYamlDesc::create( NewR.BaseShaderRegister = R.BaseShaderRegister; NewR.RegisterSpace = R.RegisterSpace; NewR.RangeType = R.RangeType; -#define DESCRIPTOR_RANGE_FLAG(Num, Val) \ - NewR.Val = \ - (R.Flags & llvm::to_underlying(dxbc::DescriptorRangeFlag::Val)) > 0; -#include "llvm/BinaryFormat/DXContainerConstants.def" - NewP.Table.Ranges.push_back(NewR); + + YamlTable.Ranges.push_back(NewR); } + NewP.Data = YamlTable; } else if (auto *TDV = dyn_cast<object::DirectX::DescriptorTableView< - dxbc::RST0::v0::DescriptorRange>>(&ParamView)) { + dxbc::RST0::v1::DescriptorRange>>(&ParamView)) { llvm::Expected< - object::DirectX::DescriptorTable<dxbc::RST0::v0::DescriptorRange>> + object::DirectX::DescriptorTable<dxbc::RST0::v1::DescriptorRange>> TableOrErr = TDV->read(); if (Error E = TableOrErr.takeError()) return std::move(E); auto Table = *TableOrErr; - NewP.Table.NumRanges = Table.NumRanges; - NewP.Table.RangesOffset = Table.RangesOffset; + DescriptorTableYaml YamlTable; + YamlTable.NumRanges = Table.NumRanges; + YamlTable.RangesOffset = Table.RangesOffset; for (const auto &R : Table) { DescriptorRangeYaml NewR; @@ -142,9 +145,13 @@ DXContainerYAML::RootSignatureYamlDesc::create( NewR.BaseShaderRegister = R.BaseShaderRegister; NewR.RegisterSpace = R.RegisterSpace; NewR.RangeType = R.RangeType; - - NewP.Table.Ranges.push_back(NewR); +#define DESCRIPTOR_RANGE_FLAG(Num, Val) \ + NewR.Val = \ + (R.Flags & llvm::to_underlying(dxbc::DescriptorRangeFlag::Val)) > 0; +#include "llvm/BinaryFormat/DXContainerConstants.def" + YamlTable.Ranges.push_back(NewR); } + NewP.Data = YamlTable; } RootSigDesc.Parameters.push_back(NewP); @@ -394,18 +401,29 @@ void MappingTraits<llvm::DXContainerYAML::RootParameterYamlDesc>::mapping( IO.mapRequired("ShaderVisibility", P.Visibility); switch (P.Type) { - case llvm::to_underlying(dxbc::RootParameterType::Constants32Bit): - IO.mapRequired("Constants", P.Constants); - break; + case llvm::to_underlying(dxbc::RootParameterType::Constants32Bit): { + DXContainerYAML::RootConstantsYaml Constants; + if(IO.outputting()) + Constants = std::get<DXContainerYAML::RootConstantsYaml>(P.Data); + IO.mapRequired("Constants", Constants); + P.Data = Constants; + } break; case llvm::to_underlying(dxbc::RootParameterType::CBV): case llvm::to_underlying(dxbc::RootParameterType::SRV): - case llvm::to_underlying(dxbc::RootParameterType::UAV): - IO.mapRequired("Descriptor", P.Descriptor); - break; - case llvm::to_underlying(dxbc::RootParameterType::DescriptorTable): - IO.mapRequired("Table", P.Table); - break; - break; + case llvm::to_underlying(dxbc::RootParameterType::UAV):{ + DXContainerYAML::RootDescriptorYaml Descriptor; + if(IO.outputting()) + Descriptor = std::get<DXContainerYAML::RootDescriptorYaml>(P.Data); + IO.mapRequired("Descriptor", Descriptor); + P.Data = Descriptor; + } break; + case llvm::to_underlying(dxbc::RootParameterType::DescriptorTable): { + DXContainerYAML::DescriptorTableYaml Table; + if(IO.outputting()) + Table = std::get<DXContainerYAML::DescriptorTableYaml>(P.Data); + IO.mapRequired("Table", Table); + P.Data = Table; + } break; } } diff --git a/llvm/test/ObjectYAML/DXContainer/RootSignature-MultipleParameters.yaml b/llvm/test/ObjectYAML/DXContainer/RootSignature-MultipleParameters.yaml index 50cf7950be8aa..756de8ff12578 100644 --- a/llvm/test/ObjectYAML/DXContainer/RootSignature-MultipleParameters.yaml +++ b/llvm/test/ObjectYAML/DXContainer/RootSignature-MultipleParameters.yaml @@ -37,17 +37,6 @@ Parts: ShaderRegister: 31 RegisterSpace: 32 DATA_STATIC_WHILE_SET_AT_EXECUTE: true - - ParameterType: 0 # SRV - ShaderVisibility: 3 # Domain - Table: - NumRanges: 1 - Ranges: - - RangeType: 0 - NumDescriptors: 41 - BaseShaderRegister: 42 - RegisterSpace: 43 - OffsetInDescriptorsFromTableStart: -1 - DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS: true AllowInputAssemblerInputLayout: true DenyGeometryShaderRootAccess: true >From 9ee29646ab571e052b4f31294fd4e0eb45c05832 Mon Sep 17 00:00:00 2001 From: joaosaffran <joao.saff...@microsoft.com> Date: Fri, 2 May 2025 18:41:39 +0000 Subject: [PATCH 2/4] clean up --- llvm/lib/ObjectYAML/DXContainerEmitter.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp index c2c0188a959b0..738012b40608a 100644 --- a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp +++ b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp @@ -293,7 +293,6 @@ void DXContainerWriter::writeParts(raw_ostream &OS) { if (RS.Version == 1) { dxbc::RST0::v0::RootDescriptor Descriptor; - auto DescriptorYaml = std::get<DXContainerYAML::RootDescriptorYaml>(Param.Data); Descriptor.RegisterSpace = DescriptorYaml.RegisterSpace; Descriptor.ShaderRegister = DescriptorYaml.ShaderRegister; RS.ParametersContainer.addParameter(Header, Descriptor); >From 2527580a3f2722b3c5619d45cd1c4cc4aba64e6b Mon Sep 17 00:00:00 2001 From: joaosaffran <joao.saff...@microsoft.com> Date: Fri, 2 May 2025 22:10:47 +0000 Subject: [PATCH 3/4] fix test --- .../include/llvm/ObjectYAML/DXContainerYAML.h | 12 +++-------- llvm/lib/ObjectYAML/DXContainerEmitter.cpp | 20 ++++++++++++------- llvm/lib/ObjectYAML/DXContainerYAML.cpp | 12 +++++------ .../RootSignature-MultipleParameters.yaml | 14 ++++++++++++- 4 files changed, 35 insertions(+), 23 deletions(-) diff --git a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h index d8d025fe4294b..549cf0b791e28 100644 --- a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h +++ b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h @@ -113,12 +113,8 @@ struct DescriptorTableYaml { SmallVector<DescriptorRangeYaml> Ranges; }; - -using ParameterData = std::variant< -RootConstantsYaml, -RootDescriptorYaml, -DescriptorTableYaml ->; +using ParameterData = + std::variant<RootConstantsYaml, RootDescriptorYaml, DescriptorTableYaml>; struct RootParameterYamlDesc { uint32_t Type; @@ -127,9 +123,7 @@ struct RootParameterYamlDesc { ParameterData Data; RootParameterYamlDesc(){}; - RootParameterYamlDesc(uint32_t T) : Type(T) { - - } + RootParameterYamlDesc(uint32_t T) : Type(T) {} }; struct RootSignatureYamlDesc { diff --git a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp index 738012b40608a..9f31f4efdeab7 100644 --- a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp +++ b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp @@ -280,16 +280,20 @@ void DXContainerWriter::writeParts(raw_ostream &OS) { auto Header = dxbc::RootParameterHeader{Param.Type, Param.Visibility, Param.Offset}; - if(std::holds_alternative<DXContainerYAML::RootConstantsYaml>(Param.Data)){ - auto ConstantYaml = std::get<DXContainerYAML::RootConstantsYaml>(Param.Data); + if (std::holds_alternative<DXContainerYAML::RootConstantsYaml>( + Param.Data)) { + auto ConstantYaml = + std::get<DXContainerYAML::RootConstantsYaml>(Param.Data); dxbc::RootConstants Constants; Constants.Num32BitValues = ConstantYaml.Num32BitValues; Constants.RegisterSpace = ConstantYaml.RegisterSpace; Constants.ShaderRegister = ConstantYaml.ShaderRegister; RS.ParametersContainer.addParameter(Header, Constants); - } else if (std::holds_alternative<DXContainerYAML::RootDescriptorYaml>(Param.Data)){ - auto DescriptorYaml = std::get<DXContainerYAML::RootDescriptorYaml>(Param.Data); + } else if (std::holds_alternative<DXContainerYAML::RootDescriptorYaml>( + Param.Data)) { + auto DescriptorYaml = + std::get<DXContainerYAML::RootDescriptorYaml>(Param.Data); if (RS.Version == 1) { dxbc::RST0::v0::RootDescriptor Descriptor; @@ -301,11 +305,13 @@ void DXContainerWriter::writeParts(raw_ostream &OS) { Descriptor.RegisterSpace = DescriptorYaml.RegisterSpace; Descriptor.ShaderRegister = DescriptorYaml.ShaderRegister; Descriptor.Flags = DescriptorYaml.getEncodedFlags(); - RS.ParametersContainer.addParameter(Header, Descriptor); + RS.ParametersContainer.addParameter(Header, Descriptor); } - }else if (std::holds_alternative<DXContainerYAML::DescriptorTableYaml>(Param.Data)) { + } else if (std::holds_alternative<DXContainerYAML::DescriptorTableYaml>( + Param.Data)) { mcdxbc::DescriptorTable Table; - auto TableYaml = std::get<DXContainerYAML::DescriptorTableYaml>(Param.Data); + auto TableYaml = + std::get<DXContainerYAML::DescriptorTableYaml>(Param.Data); for (const auto &R : TableYaml.Ranges) { if (RS.Version == 1) { diff --git a/llvm/lib/ObjectYAML/DXContainerYAML.cpp b/llvm/lib/ObjectYAML/DXContainerYAML.cpp index 3fea73c0da447..8a578a838a249 100644 --- a/llvm/lib/ObjectYAML/DXContainerYAML.cpp +++ b/llvm/lib/ObjectYAML/DXContainerYAML.cpp @@ -93,7 +93,7 @@ DXContainerYAML::RootSignatureYamlDesc::create( YamlDescriptor.RegisterSpace = Descriptor.RegisterSpace; if (Version > 1) { #define ROOT_DESCRIPTOR_FLAG(Num, Val) \ - YamlDescriptor.Val = \ + YamlDescriptor.Val = \ (Descriptor.Flags & \ llvm::to_underlying(dxbc::RootDescriptorFlag::Val)) > 0; #include "llvm/BinaryFormat/DXContainerConstants.def" @@ -403,24 +403,24 @@ void MappingTraits<llvm::DXContainerYAML::RootParameterYamlDesc>::mapping( switch (P.Type) { case llvm::to_underlying(dxbc::RootParameterType::Constants32Bit): { DXContainerYAML::RootConstantsYaml Constants; - if(IO.outputting()) + if (IO.outputting()) Constants = std::get<DXContainerYAML::RootConstantsYaml>(P.Data); IO.mapRequired("Constants", Constants); P.Data = Constants; } break; case llvm::to_underlying(dxbc::RootParameterType::CBV): case llvm::to_underlying(dxbc::RootParameterType::SRV): - case llvm::to_underlying(dxbc::RootParameterType::UAV):{ + case llvm::to_underlying(dxbc::RootParameterType::UAV): { DXContainerYAML::RootDescriptorYaml Descriptor; - if(IO.outputting()) + if (IO.outputting()) Descriptor = std::get<DXContainerYAML::RootDescriptorYaml>(P.Data); IO.mapRequired("Descriptor", Descriptor); P.Data = Descriptor; } break; case llvm::to_underlying(dxbc::RootParameterType::DescriptorTable): { DXContainerYAML::DescriptorTableYaml Table; - if(IO.outputting()) - Table = std::get<DXContainerYAML::DescriptorTableYaml>(P.Data); + if (IO.outputting()) + Table = std::get<DXContainerYAML::DescriptorTableYaml>(P.Data); IO.mapRequired("Table", Table); P.Data = Table; } break; diff --git a/llvm/test/ObjectYAML/DXContainer/RootSignature-MultipleParameters.yaml b/llvm/test/ObjectYAML/DXContainer/RootSignature-MultipleParameters.yaml index 756de8ff12578..e7cd3096c1a3f 100644 --- a/llvm/test/ObjectYAML/DXContainer/RootSignature-MultipleParameters.yaml +++ b/llvm/test/ObjectYAML/DXContainer/RootSignature-MultipleParameters.yaml @@ -14,7 +14,7 @@ Parts: Size: 200 RootSignature: Version: 2 - NumRootParameters: 3 + NumRootParameters: 4 RootParametersOffset: 24 NumStaticSamplers: 0 StaticSamplersOffset: 60 @@ -37,6 +37,18 @@ Parts: ShaderRegister: 31 RegisterSpace: 32 DATA_STATIC_WHILE_SET_AT_EXECUTE: true + - ParameterType: 0 + ShaderVisibility: 3 + Table: + NumRanges: 1 + RangesOffset: 116 + Ranges: + - RangeType: 0 + NumDescriptors: 41 + BaseShaderRegister: 42 + RegisterSpace: 43 + OffsetInDescriptorsFromTableStart: -1 + DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS: true AllowInputAssemblerInputLayout: true DenyGeometryShaderRootAccess: true >From c3a46da551382a5494f1ccd5bffa24886fe527a4 Mon Sep 17 00:00:00 2001 From: joaosaffran <joao.saff...@microsoft.com> Date: Fri, 2 May 2025 22:18:20 +0000 Subject: [PATCH 4/4] copy test --- .../RootSignature-MultipleParameters.yaml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/llvm/test/ObjectYAML/DXContainer/RootSignature-MultipleParameters.yaml b/llvm/test/ObjectYAML/DXContainer/RootSignature-MultipleParameters.yaml index e7cd3096c1a3f..50cf7950be8aa 100644 --- a/llvm/test/ObjectYAML/DXContainer/RootSignature-MultipleParameters.yaml +++ b/llvm/test/ObjectYAML/DXContainer/RootSignature-MultipleParameters.yaml @@ -14,7 +14,7 @@ Parts: Size: 200 RootSignature: Version: 2 - NumRootParameters: 4 + NumRootParameters: 3 RootParametersOffset: 24 NumStaticSamplers: 0 StaticSamplersOffset: 60 @@ -37,16 +37,15 @@ Parts: ShaderRegister: 31 RegisterSpace: 32 DATA_STATIC_WHILE_SET_AT_EXECUTE: true - - ParameterType: 0 - ShaderVisibility: 3 + - ParameterType: 0 # SRV + ShaderVisibility: 3 # Domain Table: - NumRanges: 1 - RangesOffset: 116 + NumRanges: 1 Ranges: - - RangeType: 0 - NumDescriptors: 41 + - RangeType: 0 + NumDescriptors: 41 BaseShaderRegister: 42 - RegisterSpace: 43 + RegisterSpace: 43 OffsetInDescriptorsFromTableStart: -1 DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS: true AllowInputAssemblerInputLayout: true _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits