From 8adb678cbb5effc1a578a41a9490fdbc9e22cd0a Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Mon, 13 Jan 2025 21:57:03 +0000 Subject: [PATCH 01/29] adding rootsignature to obj2yaml --- llvm/include/llvm/BinaryFormat/DXContainer.h | 9 +++++++ .../BinaryFormat/DXContainerConstants.def | 1 + llvm/include/llvm/Object/DXContainer.h | 7 +++++ .../include/llvm/ObjectYAML/DXContainerYAML.h | 16 +++++++++++ llvm/lib/Object/DXContainer.cpp | 14 ++++++++++ llvm/lib/ObjectYAML/DXContainerEmitter.cpp | 8 ++++++ llvm/lib/ObjectYAML/DXContainerYAML.cpp | 11 ++++++++ .../RootSignatures/FlagsElement.ll | 27 +++++++++++++++++++ llvm/tools/obj2yaml/dxcontainer2yaml.cpp | 8 ++++++ 9 files changed, 101 insertions(+) create mode 100644 llvm/test/CodeGen/DirectX/ContainerData/RootSignatures/FlagsElement.ll diff --git a/llvm/include/llvm/BinaryFormat/DXContainer.h b/llvm/include/llvm/BinaryFormat/DXContainer.h index 21e28d546286e..3907d88df43b0 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainer.h +++ b/llvm/include/llvm/BinaryFormat/DXContainer.h @@ -63,6 +63,15 @@ struct ShaderHash { void swapBytes() { sys::swapByteOrder(Flags); } }; +struct RootSignatureDesc { + uint32_t Version; + uint32_t Flags; + void swapBytes() { + sys::swapByteOrder(Version); + sys::swapByteOrder(Flags); + } +}; + struct ContainerVersion { uint16_t Major; uint16_t Minor; diff --git a/llvm/include/llvm/BinaryFormat/DXContainerConstants.def b/llvm/include/llvm/BinaryFormat/DXContainerConstants.def index 1aacbb2f65b27..38b69228cd397 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainerConstants.def +++ b/llvm/include/llvm/BinaryFormat/DXContainerConstants.def @@ -4,6 +4,7 @@ CONTAINER_PART(DXIL) CONTAINER_PART(SFI0) CONTAINER_PART(HASH) CONTAINER_PART(PSV0) +CONTAINER_PART(RTS0) CONTAINER_PART(ISG1) CONTAINER_PART(OSG1) CONTAINER_PART(PSG1) diff --git a/llvm/include/llvm/Object/DXContainer.h b/llvm/include/llvm/Object/DXContainer.h index 19c83ba6c6e85..9159b9083b618 100644 --- a/llvm/include/llvm/Object/DXContainer.h +++ b/llvm/include/llvm/Object/DXContainer.h @@ -287,6 +287,7 @@ class DXContainer { std::optional ShaderFeatureFlags; std::optional Hash; std::optional PSVInfo; + std::optional RootSignature; DirectX::Signature InputSignature; DirectX::Signature OutputSignature; DirectX::Signature PatchConstantSignature; @@ -296,6 +297,7 @@ class DXContainer { Error parseDXILHeader(StringRef Part); Error parseShaderFeatureFlags(StringRef Part); Error parseHash(StringRef Part); + Error parseRootSignature(StringRef Part); Error parsePSVInfo(StringRef Part); Error parseSignature(StringRef Part, DirectX::Signature &Array); friend class PartIterator; @@ -382,6 +384,11 @@ class DXContainer { std::optional getShaderHash() const { return Hash; } + std::optional + getRootSignature() const { + return RootSignature; + } + const std::optional &getPSVInfo() const { return PSVInfo; }; diff --git a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h index 66ad057ab0e30..c4bf6bc4920cf 100644 --- a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h +++ b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h @@ -72,6 +72,16 @@ struct ShaderHash { std::vector Digest; }; + + +struct RootSignatureDesc { + RootSignatureDesc() = default; + RootSignatureDesc(const dxbc::RootSignatureDesc &Data); + + uint32_t Version; + uint32_t Flags; +}; + using ResourceFlags = dxbc::PSV::ResourceFlags; using ResourceBindInfo = dxbc::PSV::v2::ResourceBindInfo; @@ -159,6 +169,7 @@ struct Part { std::optional Hash; std::optional Info; std::optional Signature; + std::optional RootSignature; }; struct Object { @@ -241,6 +252,11 @@ template <> struct MappingTraits { static void mapping(IO &IO, llvm::DXContainerYAML::Signature &El); }; +template <> struct MappingTraits { + static void mapping(IO &IO, + DXContainerYAML::RootSignatureDesc &RootSignature); +}; + } // namespace yaml } // namespace llvm diff --git a/llvm/lib/Object/DXContainer.cpp b/llvm/lib/Object/DXContainer.cpp index 3b1a6203a1f8f..e6577192a92c7 100644 --- a/llvm/lib/Object/DXContainer.cpp +++ b/llvm/lib/Object/DXContainer.cpp @@ -10,6 +10,7 @@ #include "llvm/BinaryFormat/DXContainer.h" #include "llvm/Object/Error.h" #include "llvm/Support/Alignment.h" +#include "llvm/Support/ErrorHandling.h" #include "llvm/Support/FormatVariadic.h" using namespace llvm; @@ -92,6 +93,14 @@ Error DXContainer::parseHash(StringRef Part) { return Error::success(); } +Error DXContainer::parseRootSignature(StringRef Part) { + dxbc::RootSignatureDesc Desc; + if (Error Err = readStruct(Part, Part.begin(), Desc)) + return Err; + RootSignature = Desc; + return Error::success(); +} + Error DXContainer::parsePSVInfo(StringRef Part) { if (PSVInfo) return parseFailed("More than one PSV0 part is present in the file"); @@ -192,6 +201,11 @@ Error DXContainer::parsePartOffsets() { return Err; break; case dxbc::PartType::Unknown: + break; + case dxbc::PartType::RTS0: + if (Error Err = parseRootSignature(PartData)) + return Err; + break; } } diff --git a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp index 175f1a12f9314..22ac2b223ea53 100644 --- a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp +++ b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp @@ -261,6 +261,14 @@ void DXContainerWriter::writeParts(raw_ostream &OS) { } case dxbc::PartType::Unknown: break; // Skip any handling for unrecognized parts. + case dxbc::PartType::RTS0: + if (!P.RootSignature.has_value()) + continue; + dxbc::RootSignatureDesc RS = {P.RootSignature->Version, P.RootSignature->Flags}; + if (sys::IsBigEndianHost) + RS.swapBytes(); + OS.write(reinterpret_cast(&RS), sizeof(dxbc::RootSignatureDesc)); + break; } uint64_t BytesWritten = OS.tell() - DataStart; RollingOffset += BytesWritten; diff --git a/llvm/lib/ObjectYAML/DXContainerYAML.cpp b/llvm/lib/ObjectYAML/DXContainerYAML.cpp index 5dee1221b27c0..7bfd77acaecfb 100644 --- a/llvm/lib/ObjectYAML/DXContainerYAML.cpp +++ b/llvm/lib/ObjectYAML/DXContainerYAML.cpp @@ -45,6 +45,10 @@ DXContainerYAML::ShaderHash::ShaderHash(const dxbc::ShaderHash &Data) memcpy(Digest.data(), &Data.Digest[0], 16); } +DXContainerYAML::RootSignatureDesc::RootSignatureDesc(const dxbc::RootSignatureDesc &Data) + : Version(Data.Version), Flags(Data.Flags) { +} + DXContainerYAML::PSVInfo::PSVInfo() : Version(0) { memset(&Info, 0, sizeof(Info)); } @@ -188,6 +192,12 @@ void MappingTraits::mapping( IO.mapRequired("Parameters", S.Parameters); } +void MappingTraits::mapping( + IO &IO, DXContainerYAML::RootSignatureDesc &S) { + IO.mapRequired("Version", S.Version); + IO.mapRequired("Flags", S.Flags); +} + void MappingTraits::mapping(IO &IO, DXContainerYAML::Part &P) { IO.mapRequired("Name", P.Name); @@ -197,6 +207,7 @@ void MappingTraits::mapping(IO &IO, IO.mapOptional("Hash", P.Hash); IO.mapOptional("PSVInfo", P.Info); IO.mapOptional("Signature", P.Signature); + IO.mapOptional("RootSignature", P.RootSignature); } void MappingTraits::mapping( diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignatures/FlagsElement.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignatures/FlagsElement.ll new file mode 100644 index 0000000000000..402f03a4dd589 --- /dev/null +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignatures/FlagsElement.ll @@ -0,0 +1,27 @@ +; RUN: opt %s -dxil-embed -dxil-globals -S -o - | FileCheck %s +; RUN: llc %s --filetype=obj -o - | obj2yaml | FileCheck %s --check-prefix=DXC + +target triple = "dxil-unknown-shadermodel6.0-compute" + +; CHECK: @dx.rts0 = private constant [8 x i8] c"{{.*}}", section "RTS0", align 4 + + +define void @main() #0 { +entry: + ret void +} + +attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } + + +!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!2 = !{ ptr @main, !3 } ; function, root signature +!3 = !{ !4 } ; list of root signature elements +!4 = !{ !"RootFlags", i32 1 } ; 1 = allow_input_assembler_input_layout + + +; DXC: - Name: RTS0 +; DXC-NEXT: Size: 8 +; DXC-NEXT: RootSignature: +; DXC-NEXT: Version: 1.0 +; DXC-NEXT: Flags: AllowInputAssemblerInputLayout diff --git a/llvm/tools/obj2yaml/dxcontainer2yaml.cpp b/llvm/tools/obj2yaml/dxcontainer2yaml.cpp index 06966b1883586..90ee47cd46994 100644 --- a/llvm/tools/obj2yaml/dxcontainer2yaml.cpp +++ b/llvm/tools/obj2yaml/dxcontainer2yaml.cpp @@ -7,9 +7,11 @@ //===----------------------------------------------------------------------===// #include "obj2yaml.h" +#include "llvm/BinaryFormat/DXContainer.h" #include "llvm/Object/DXContainer.h" #include "llvm/ObjectYAML/DXContainerYAML.h" #include "llvm/Support/Error.h" +#include "llvm/Support/ErrorHandling.h" #include @@ -153,6 +155,12 @@ dumpDXContainer(MemoryBufferRef Source) { break; case dxbc::PartType::Unknown: break; + case dxbc::PartType::RTS0: + std::optional RS = Container.getRootSignature(); + if (RS && RS.has_value()) + NewPart.RootSignature = DXContainerYAML::RootSignatureDesc(*RS); + break; + break; } } From ba78f21112999d704bef4e0605a51de8f2add813 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Mon, 13 Jan 2025 22:31:14 +0000 Subject: [PATCH 02/29] adding test --- .../RootSignature-FlagsRootElement.yaml | 242 ++++++++++++++++++ 1 file changed, 242 insertions(+) create mode 100644 llvm/test/ObjectYAML/DXContainer/RootSignature-FlagsRootElement.yaml diff --git a/llvm/test/ObjectYAML/DXContainer/RootSignature-FlagsRootElement.yaml b/llvm/test/ObjectYAML/DXContainer/RootSignature-FlagsRootElement.yaml new file mode 100644 index 0000000000000..5435c432a073e --- /dev/null +++ b/llvm/test/ObjectYAML/DXContainer/RootSignature-FlagsRootElement.yaml @@ -0,0 +1,242 @@ +# RUN: yaml2obj %s | obj2yaml | FileCheck %s +--- !dxcontainer +Header: + Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ] + Version: + Major: 1 + Minor: 0 + FileSize: 1672 + PartCount: 7 + PartOffsets: [ 60, 1496, 1512, 1540, 1556, 1572, 1588 ] +Parts: + - Name: DXIL + Size: 1428 + Program: + MajorVersion: 6 + MinorVersion: 0 + ShaderKind: 5 + Size: 357 + DXILMajorVersion: 1 + DXILMinorVersion: 0 + DXILSize: 1404 + DXIL: [ 0x42, 0x43, 0xC0, 0xDE, 0x21, 0xC, 0x0, 0x0, 0x5C, + 0x1, 0x0, 0x0, 0xB, 0x82, 0x20, 0x0, 0x2, 0x0, + 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x7, 0x81, 0x23, + 0x91, 0x41, 0xC8, 0x4, 0x49, 0x6, 0x10, 0x32, + 0x39, 0x92, 0x1, 0x84, 0xC, 0x25, 0x5, 0x8, 0x19, + 0x1E, 0x4, 0x8B, 0x62, 0x80, 0x10, 0x45, 0x2, + 0x42, 0x92, 0xB, 0x42, 0x84, 0x10, 0x32, 0x14, + 0x38, 0x8, 0x18, 0x4B, 0xA, 0x32, 0x42, 0x88, + 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xA5, + 0x0, 0x19, 0x32, 0x42, 0xE4, 0x48, 0xE, 0x90, + 0x11, 0x22, 0xC4, 0x50, 0x41, 0x51, 0x81, 0x8C, + 0xE1, 0x83, 0xE5, 0x8A, 0x4, 0x21, 0x46, 0x6, + 0x89, 0x20, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0x32, + 0x22, 0x8, 0x9, 0x20, 0x64, 0x85, 0x4, 0x13, 0x22, + 0xA4, 0x84, 0x4, 0x13, 0x22, 0xE3, 0x84, 0xA1, + 0x90, 0x14, 0x12, 0x4C, 0x88, 0x8C, 0xB, 0x84, + 0x84, 0x4C, 0x10, 0x20, 0x73, 0x4, 0x8, 0xC1, + 0x65, 0xC3, 0x85, 0x2C, 0xE8, 0x3, 0x40, 0x14, + 0x91, 0x4E, 0xD1, 0x4A, 0x48, 0x44, 0x54, 0x11, + 0xC3, 0x9, 0x30, 0xC4, 0x18, 0x1, 0x30, 0x2, 0x50, + 0x82, 0x21, 0x1A, 0x8, 0x98, 0x23, 0x0, 0x3, 0x0, + 0x13, 0x14, 0x72, 0xC0, 0x87, 0x74, 0x60, 0x87, + 0x36, 0x68, 0x87, 0x79, 0x68, 0x3, 0x72, 0xC0, + 0x87, 0xD, 0xAE, 0x50, 0xE, 0x6D, 0xD0, 0xE, 0x7A, + 0x50, 0xE, 0x6D, 0x0, 0xF, 0x7A, 0x30, 0x7, 0x72, + 0xA0, 0x7, 0x73, 0x20, 0x7, 0x6D, 0x90, 0xE, 0x71, + 0xA0, 0x7, 0x73, 0x20, 0x7, 0x6D, 0x90, 0xE, 0x78, + 0xA0, 0x7, 0x78, 0xD0, 0x6, 0xE9, 0x10, 0x7, 0x76, + 0xA0, 0x7, 0x71, 0x60, 0x7, 0x6D, 0x90, 0xE, 0x73, + 0x20, 0x7, 0x7A, 0x30, 0x7, 0x72, 0xD0, 0x6, 0xE9, + 0x60, 0x7, 0x74, 0xA0, 0x7, 0x76, 0x40, 0x7, 0x6D, + 0x60, 0xE, 0x71, 0x60, 0x7, 0x7A, 0x10, 0x7, 0x76, + 0xD0, 0x6, 0xE6, 0x30, 0x7, 0x72, 0xA0, 0x7, 0x73, + 0x20, 0x7, 0x6D, 0x60, 0xE, 0x76, 0x40, 0x7, 0x7A, + 0x60, 0x7, 0x74, 0xD0, 0x6, 0xEE, 0x80, 0x7, 0x7A, + 0x10, 0x7, 0x76, 0xA0, 0x7, 0x73, 0x20, 0x7, 0x7A, + 0x60, 0x7, 0x74, 0x30, 0xE4, 0x21, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0xB, + 0x4, 0x6, 0x0, 0x0, 0x0, 0x32, 0x1E, 0x98, 0xC, + 0x19, 0x11, 0x4C, 0x90, 0x8C, 0x9, 0x26, 0x47, + 0xC6, 0x4, 0x43, 0xBA, 0x12, 0x28, 0x86, 0x11, + 0x80, 0x42, 0x0, 0x0, 0x79, 0x18, 0x0, 0x0, 0xCB, + 0x0, 0x0, 0x0, 0x33, 0x8, 0x80, 0x1C, 0xC4, 0xE1, + 0x1C, 0x66, 0x14, 0x1, 0x3D, 0x88, 0x43, 0x38, + 0x84, 0xC3, 0x8C, 0x42, 0x80, 0x7, 0x79, 0x78, + 0x7, 0x73, 0x98, 0x71, 0xC, 0xE6, 0x0, 0xF, 0xED, + 0x10, 0xE, 0xF4, 0x80, 0xE, 0x33, 0xC, 0x42, 0x1E, + 0xC2, 0xC1, 0x1D, 0xCE, 0xA1, 0x1C, 0x66, 0x30, + 0x5, 0x3D, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1B, + 0xCC, 0x3, 0x3D, 0xC8, 0x43, 0x3D, 0x8C, 0x3, + 0x3D, 0xCC, 0x78, 0x8C, 0x74, 0x70, 0x7, 0x7B, + 0x8, 0x7, 0x79, 0x48, 0x87, 0x70, 0x70, 0x7, 0x7A, + 0x70, 0x3, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, + 0x19, 0xCC, 0x11, 0xE, 0xEC, 0x90, 0xE, 0xE1, + 0x30, 0xF, 0x6E, 0x30, 0xF, 0xE3, 0xF0, 0xE, 0xF0, + 0x50, 0xE, 0x33, 0x10, 0xC4, 0x1D, 0xDE, 0x21, + 0x1C, 0xD8, 0x21, 0x1D, 0xC2, 0x61, 0x1E, 0x66, + 0x30, 0x89, 0x3B, 0xBC, 0x83, 0x3B, 0xD0, 0x43, + 0x39, 0xB4, 0x3, 0x3C, 0xBC, 0x83, 0x3C, 0x84, + 0x3, 0x3B, 0xCC, 0xF0, 0x14, 0x76, 0x60, 0x7, + 0x7B, 0x68, 0x7, 0x37, 0x68, 0x87, 0x72, 0x68, + 0x7, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, + 0x60, 0x7, 0x76, 0x28, 0x7, 0x76, 0xF8, 0x5, 0x76, + 0x78, 0x87, 0x77, 0x80, 0x87, 0x5F, 0x8, 0x87, + 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, + 0x81, 0x2C, 0xEE, 0xF0, 0xE, 0xEE, 0xE0, 0xE, + 0xF5, 0xC0, 0xE, 0xEC, 0x30, 0x3, 0x62, 0xC8, + 0xA1, 0x1C, 0xE4, 0xA1, 0x1C, 0xCC, 0xA1, 0x1C, + 0xE4, 0xA1, 0x1C, 0xDC, 0x61, 0x1C, 0xCA, 0x21, + 0x1C, 0xC4, 0x81, 0x1D, 0xCA, 0x61, 0x6, 0xD6, + 0x90, 0x43, 0x39, 0xC8, 0x43, 0x39, 0x98, 0x43, + 0x39, 0xC8, 0x43, 0x39, 0xB8, 0xC3, 0x38, 0x94, + 0x43, 0x38, 0x88, 0x3, 0x3B, 0x94, 0xC3, 0x2F, + 0xBC, 0x83, 0x3C, 0xFC, 0x82, 0x3B, 0xD4, 0x3, + 0x3B, 0xB0, 0xC3, 0xC, 0xC7, 0x69, 0x87, 0x70, + 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x7, + 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xA0, + 0x87, 0x19, 0xCE, 0x53, 0xF, 0xEE, 0x0, 0xF, 0xF2, + 0x50, 0xE, 0xE4, 0x90, 0xE, 0xE3, 0x40, 0xF, 0xE1, + 0x20, 0xE, 0xEC, 0x50, 0xE, 0x33, 0x20, 0x28, + 0x1D, 0xDC, 0xC1, 0x1E, 0xC2, 0x41, 0x1E, 0xD2, + 0x21, 0x1C, 0xDC, 0x81, 0x1E, 0xDC, 0xE0, 0x1C, + 0xE4, 0xE1, 0x1D, 0xEA, 0x1, 0x1E, 0x66, 0x18, + 0x51, 0x38, 0xB0, 0x43, 0x3A, 0x9C, 0x83, 0x3B, + 0xCC, 0x50, 0x24, 0x76, 0x60, 0x7, 0x7B, 0x68, + 0x7, 0x37, 0x60, 0x87, 0x77, 0x78, 0x7, 0x78, + 0x98, 0x51, 0x4C, 0xF4, 0x90, 0xF, 0xF0, 0x50, + 0xE, 0x33, 0x1E, 0x6A, 0x1E, 0xCA, 0x61, 0x1C, + 0xE8, 0x21, 0x1D, 0xDE, 0xC1, 0x1D, 0x7E, 0x1, + 0x1E, 0xE4, 0xA1, 0x1C, 0xCC, 0x21, 0x1D, 0xF0, + 0x61, 0x6, 0x54, 0x85, 0x83, 0x38, 0xCC, 0xC3, + 0x3B, 0xB0, 0x43, 0x3D, 0xD0, 0x43, 0x39, 0xFC, + 0xC2, 0x3C, 0xE4, 0x43, 0x3B, 0x88, 0xC3, 0x3B, + 0xB0, 0xC3, 0x8C, 0xC5, 0xA, 0x87, 0x79, 0x98, + 0x87, 0x77, 0x18, 0x87, 0x74, 0x8, 0x7, 0x7A, + 0x28, 0x7, 0x72, 0x98, 0x81, 0x5C, 0xE3, 0x10, + 0xE, 0xEC, 0xC0, 0xE, 0xE5, 0x50, 0xE, 0xF3, 0x30, + 0x23, 0xC1, 0xD2, 0x41, 0x1E, 0xE4, 0xE1, 0x17, + 0xD8, 0xE1, 0x1D, 0xDE, 0x1, 0x1E, 0x66, 0x48, + 0x19, 0x3B, 0xB0, 0x83, 0x3D, 0xB4, 0x83, 0x1B, + 0x84, 0xC3, 0x38, 0x8C, 0x43, 0x39, 0xCC, 0xC3, + 0x3C, 0xB8, 0xC1, 0x39, 0xC8, 0xC3, 0x3B, 0xD4, + 0x3, 0x3C, 0xCC, 0x48, 0xB4, 0x71, 0x8, 0x7, 0x76, + 0x60, 0x7, 0x71, 0x8, 0x87, 0x71, 0x58, 0x87, + 0x19, 0xDB, 0xC6, 0xE, 0xEC, 0x60, 0xF, 0xED, + 0xE0, 0x6, 0xF0, 0x20, 0xF, 0xE5, 0x30, 0xF, 0xE5, + 0x20, 0xF, 0xF6, 0x50, 0xE, 0x6E, 0x10, 0xE, 0xE3, + 0x30, 0xE, 0xE5, 0x30, 0xF, 0xF3, 0xE0, 0x6, 0xE9, + 0xE0, 0xE, 0xE4, 0x50, 0xE, 0xF8, 0x30, 0x23, + 0xE2, 0xEC, 0x61, 0x1C, 0xC2, 0x81, 0x1D, 0xD8, + 0xE1, 0x17, 0xEC, 0x21, 0x1D, 0xE6, 0x21, 0x1D, + 0xC4, 0x21, 0x1D, 0xD8, 0x21, 0x1D, 0xE8, 0x21, + 0x1F, 0x66, 0x20, 0x9D, 0x3B, 0xBC, 0x43, 0x3D, + 0xB8, 0x3, 0x39, 0x94, 0x83, 0x39, 0xCC, 0x58, + 0xBC, 0x70, 0x70, 0x7, 0x77, 0x78, 0x7, 0x7A, + 0x8, 0x7, 0x7A, 0x48, 0x87, 0x77, 0x70, 0x87, + 0x19, 0xCB, 0xE7, 0xE, 0xEF, 0x30, 0xF, 0xE1, + 0xE0, 0xE, 0xE9, 0x40, 0xF, 0xE9, 0xA0, 0xF, 0xE5, + 0x30, 0xC3, 0x1, 0x3, 0x73, 0xA8, 0x7, 0x77, 0x18, + 0x87, 0x5F, 0x98, 0x87, 0x70, 0x70, 0x87, 0x74, + 0xA0, 0x87, 0x74, 0xD0, 0x87, 0x72, 0x98, 0x81, + 0x84, 0x41, 0x39, 0xE0, 0xC3, 0x38, 0xB0, 0x43, + 0x3D, 0x90, 0x43, 0x39, 0xCC, 0x40, 0xC4, 0xA0, + 0x1D, 0xCA, 0xA1, 0x1D, 0xE0, 0x41, 0x1E, 0xDE, + 0xC1, 0x1C, 0x66, 0x24, 0x63, 0x30, 0xE, 0xE1, + 0xC0, 0xE, 0xEC, 0x30, 0xF, 0xE9, 0x40, 0xF, 0xE5, + 0x30, 0x43, 0x21, 0x83, 0x75, 0x18, 0x7, 0x73, + 0x48, 0x87, 0x5F, 0xA0, 0x87, 0x7C, 0x80, 0x87, + 0x72, 0x98, 0xB1, 0x94, 0x1, 0x3C, 0x8C, 0xC3, + 0x3C, 0x94, 0xC3, 0x38, 0xD0, 0x43, 0x3A, 0xBC, + 0x83, 0x3B, 0xCC, 0xC3, 0x8C, 0xC5, 0xC, 0x48, + 0x21, 0x15, 0x42, 0x61, 0x1E, 0xE6, 0x21, 0x1D, + 0xCE, 0xC1, 0x1D, 0x52, 0x81, 0x14, 0x66, 0x4C, + 0x67, 0x30, 0xE, 0xEF, 0x20, 0xF, 0xEF, 0xE0, + 0x6, 0xEF, 0x50, 0xF, 0xF4, 0x30, 0xF, 0xE9, 0x40, + 0xE, 0xE5, 0xE0, 0x6, 0xE6, 0x20, 0xF, 0xE1, 0xD0, + 0xE, 0xE5, 0x30, 0xA3, 0x40, 0x83, 0x76, 0x68, + 0x7, 0x79, 0x8, 0x87, 0x19, 0x52, 0x1A, 0xB8, + 0xC3, 0x3B, 0x84, 0x3, 0x3B, 0xA4, 0x43, 0x38, + 0xCC, 0x83, 0x1B, 0x84, 0x3, 0x39, 0x90, 0x83, + 0x3C, 0xCC, 0x3, 0x3C, 0x84, 0xC3, 0x38, 0x94, + 0x3, 0x0, 0x0, 0x0, 0x0, 0x79, 0x28, 0x0, 0x0, + 0x2A, 0x0, 0x0, 0x0, 0xC2, 0x3C, 0x90, 0x40, 0x86, + 0x10, 0x19, 0x32, 0xE2, 0x64, 0x90, 0x40, 0x46, + 0x2, 0x19, 0x23, 0x23, 0x46, 0x2, 0x13, 0x24, + 0xC6, 0x0, 0x13, 0x74, 0x12, 0xA9, 0xB7, 0x37, + 0x3A, 0x23, 0xB6, 0xB0, 0xB3, 0xB9, 0x23, 0x8C, + 0xCD, 0x1D, 0xA2, 0x2D, 0x2C, 0xCD, 0x6D, 0x8, + 0x42, 0x1, 0xC, 0x41, 0x38, 0x82, 0x21, 0x8, 0x87, + 0x30, 0x4, 0xE1, 0x18, 0x86, 0x20, 0x1C, 0xC4, + 0x18, 0x84, 0xA0, 0x18, 0x43, 0x90, 0x8C, 0x41, + 0x20, 0x94, 0x31, 0xC, 0x82, 0x71, 0x8C, 0x41, + 0x28, 0x8E, 0x31, 0xC, 0x45, 0x51, 0x8C, 0x41, + 0x40, 0x9C, 0x31, 0x14, 0xC4, 0x0, 0x0, 0x8F, + 0x89, 0xC8, 0xF0, 0x5C, 0xE4, 0xDE, 0xDE, 0xE8, + 0xE6, 0xD2, 0xCE, 0xDC, 0xC2, 0xE8, 0xEA, 0xE4, + 0xCA, 0xE6, 0x86, 0x12, 0x28, 0xC6, 0x21, 0xC3, + 0x73, 0x99, 0x43, 0xB, 0x23, 0x2B, 0x93, 0x6B, + 0x7A, 0x23, 0x2B, 0x63, 0x1B, 0x4A, 0xB0, 0x18, + 0x85, 0xC, 0xCF, 0xC5, 0xAE, 0x4C, 0x6E, 0x2E, + 0xED, 0xCD, 0x6D, 0x28, 0x1, 0x63, 0x1C, 0x32, + 0x3C, 0x97, 0x32, 0x37, 0x3A, 0xB9, 0x3C, 0xA8, + 0xB7, 0x34, 0x37, 0xBA, 0xB9, 0xA1, 0x4, 0xF, + 0x0, 0x0, 0x71, 0x20, 0x0, 0x0, 0x2, 0x0, 0x0, + 0x0, 0x6, 0x40, 0x30, 0x0, 0xD2, 0x0, 0x0, 0x0, + 0x61, 0x20, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x13, + 0x4, 0x1, 0x86, 0x3, 0x1, 0x0, 0x0, 0x2, 0x0, + 0x0, 0x0, 0x7, 0x50, 0x10, 0xCD, 0x14, 0x61, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ] + - Name: SFI0 + Size: 8 + - Name: HASH + Size: 20 + Hash: + IncludesSource: false + Digest: [ 0xCE, 0xA, 0x5B, 0x9C, 0xBF, 0x9A, 0xBB, 0x5, + 0x19, 0xC5, 0x96, 0x78, 0x49, 0x89, 0x5C, 0x6B ] + - Name: ISG1 + Size: 8 + Signature: + Parameters: [] + - Name: OSG1 + Size: 8 + Signature: + Parameters: [] + - Name: RTS0 + Size: 8 + RootSignature: + Version: 1 + Flags: 8 + - Name: PSV0 + Size: 76 + PSVInfo: + Version: 3 + ShaderStage: 5 + MinimumWaveLaneCount: 0 + MaximumWaveLaneCount: 4294967295 + UsesViewID: 0 + SigInputVectors: 0 + SigOutputVectors: [ 0, 0, 0, 0 ] + NumThreadsX: 1 + NumThreadsY: 1 + NumThreadsZ: 1 + EntryName: main + ResourceStride: 24 + Resources: [] + SigInputElements: [] + SigOutputElements: [] + SigPatchOrPrimElements: [] + InputOutputMap: + - [ ] + - [ ] + - [ ] + - [ ] + +# CHECK: - Name: RTS0 +# CHECK-NEXT: Size: 8 +# CHECK-NEXT: RootSignature: +# CHECK-NEXT: Version: 1 +# CHECK-NEXT: Flags: 8 From 0a54559969f272f574ca1be557157c8c9f5f1c06 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Mon, 13 Jan 2025 22:35:01 +0000 Subject: [PATCH 03/29] removing old test --- .../RootSignatures/FlagsElement.ll | 27 ------------------- 1 file changed, 27 deletions(-) delete mode 100644 llvm/test/CodeGen/DirectX/ContainerData/RootSignatures/FlagsElement.ll diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignatures/FlagsElement.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignatures/FlagsElement.ll deleted file mode 100644 index 402f03a4dd589..0000000000000 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignatures/FlagsElement.ll +++ /dev/null @@ -1,27 +0,0 @@ -; RUN: opt %s -dxil-embed -dxil-globals -S -o - | FileCheck %s -; RUN: llc %s --filetype=obj -o - | obj2yaml | FileCheck %s --check-prefix=DXC - -target triple = "dxil-unknown-shadermodel6.0-compute" - -; CHECK: @dx.rts0 = private constant [8 x i8] c"{{.*}}", section "RTS0", align 4 - - -define void @main() #0 { -entry: - ret void -} - -attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } - - -!dx.rootsignatures = !{!2} ; list of function/root signature pairs -!2 = !{ ptr @main, !3 } ; function, root signature -!3 = !{ !4 } ; list of root signature elements -!4 = !{ !"RootFlags", i32 1 } ; 1 = allow_input_assembler_input_layout - - -; DXC: - Name: RTS0 -; DXC-NEXT: Size: 8 -; DXC-NEXT: RootSignature: -; DXC-NEXT: Version: 1.0 -; DXC-NEXT: Flags: AllowInputAssemblerInputLayout From 557075fd17edfd8bfb40266bd70299cb27ee9632 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Mon, 13 Jan 2025 22:43:27 +0000 Subject: [PATCH 04/29] remove useless includes --- llvm/lib/Object/DXContainer.cpp | 1 - llvm/tools/obj2yaml/dxcontainer2yaml.cpp | 2 -- 2 files changed, 3 deletions(-) diff --git a/llvm/lib/Object/DXContainer.cpp b/llvm/lib/Object/DXContainer.cpp index e6577192a92c7..4ffa00f70bdb7 100644 --- a/llvm/lib/Object/DXContainer.cpp +++ b/llvm/lib/Object/DXContainer.cpp @@ -10,7 +10,6 @@ #include "llvm/BinaryFormat/DXContainer.h" #include "llvm/Object/Error.h" #include "llvm/Support/Alignment.h" -#include "llvm/Support/ErrorHandling.h" #include "llvm/Support/FormatVariadic.h" using namespace llvm; diff --git a/llvm/tools/obj2yaml/dxcontainer2yaml.cpp b/llvm/tools/obj2yaml/dxcontainer2yaml.cpp index 90ee47cd46994..6ae0a0859b48e 100644 --- a/llvm/tools/obj2yaml/dxcontainer2yaml.cpp +++ b/llvm/tools/obj2yaml/dxcontainer2yaml.cpp @@ -7,11 +7,9 @@ //===----------------------------------------------------------------------===// #include "obj2yaml.h" -#include "llvm/BinaryFormat/DXContainer.h" #include "llvm/Object/DXContainer.h" #include "llvm/ObjectYAML/DXContainerYAML.h" #include "llvm/Support/Error.h" -#include "llvm/Support/ErrorHandling.h" #include From e0d3dcd9d60a9955bb1cb0fd23dbd78bf0deddd3 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Tue, 14 Jan 2025 23:42:24 +0000 Subject: [PATCH 05/29] addressing comments --- llvm/include/llvm/BinaryFormat/DXContainer.h | 5 + .../BinaryFormat/DXContainerConstants.def | 19 ++ .../include/llvm/ObjectYAML/DXContainerYAML.h | 5 +- llvm/lib/Object/DXContainer.cpp | 3 + llvm/lib/ObjectYAML/DXContainerEmitter.cpp | 5 +- llvm/lib/ObjectYAML/DXContainerYAML.cpp | 26 +- .../RootSignature-FlagsRootElement.yaml | 259 ++---------------- 7 files changed, 85 insertions(+), 237 deletions(-) diff --git a/llvm/include/llvm/BinaryFormat/DXContainer.h b/llvm/include/llvm/BinaryFormat/DXContainer.h index 3907d88df43b0..0ada212511937 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainer.h +++ b/llvm/include/llvm/BinaryFormat/DXContainer.h @@ -161,6 +161,11 @@ enum class FeatureFlags : uint64_t { static_assert((uint64_t)FeatureFlags::NextUnusedBit <= 1ull << 63, "Shader flag bits exceed enum size."); +#define ROOT_ELEMENT_FLAG(Num, Val) Val = 1ull << Num, +enum class RootElementFlag : uint32_t { +#include "DXContainerConstants.def" +}; + PartType parsePartType(StringRef S); struct VertexPSVInfo { diff --git a/llvm/include/llvm/BinaryFormat/DXContainerConstants.def b/llvm/include/llvm/BinaryFormat/DXContainerConstants.def index 38b69228cd397..b351b9a01773c 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainerConstants.def +++ b/llvm/include/llvm/BinaryFormat/DXContainerConstants.def @@ -53,6 +53,25 @@ SHADER_FEATURE_FLAG(31, 36, NextUnusedBit, "Next reserved shader flag bit (not a #undef SHADER_FEATURE_FLAG #endif // SHADER_FEATURE_FLAG +#ifdef ROOT_ELEMENT_FLAG + + +ROOT_ELEMENT_FLAG(0, AllowInputAssemblerInputLayout) +ROOT_ELEMENT_FLAG(1, DenyVertexShaderRootAccess) +ROOT_ELEMENT_FLAG(2, DenyHullShaderRootAccess) +ROOT_ELEMENT_FLAG(3, DenyDomainShaderRootAccess) +ROOT_ELEMENT_FLAG(4, DenyGeometryShaderRootAccess) +ROOT_ELEMENT_FLAG(5, DenyPixelShaderRootAccess) +ROOT_ELEMENT_FLAG(6, AllowStreamOutput) +ROOT_ELEMENT_FLAG(7, LocalRootSignature) +ROOT_ELEMENT_FLAG(8, DenyAmplificationShaderRootAccess) +ROOT_ELEMENT_FLAG(9, DenyMeshShaderRootAccess) +ROOT_ELEMENT_FLAG(10, CBVSRVUAVHeapDirectlyIndexed) +ROOT_ELEMENT_FLAG(11, SamplerHeapDirectlyIndexed) +#undef ROOT_ELEMENT_FLAG +#endif // ROOT_ELEMENT_FLAG + + #ifdef DXIL_MODULE_FLAG // Only save DXIL module flags which not map to feature flags here. diff --git a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h index c4bf6bc4920cf..9b25c5c33e7ef 100644 --- a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h +++ b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h @@ -73,13 +73,14 @@ struct ShaderHash { }; - +#define ROOT_ELEMENT_FLAG(Num, Val) bool Val = false; struct RootSignatureDesc { RootSignatureDesc() = default; RootSignatureDesc(const dxbc::RootSignatureDesc &Data); + uint32_t getEncodedFlags(); uint32_t Version; - uint32_t Flags; +#include "llvm/BinaryFormat/DXContainerConstants.def" }; using ResourceFlags = dxbc::PSV::ResourceFlags; diff --git a/llvm/lib/Object/DXContainer.cpp b/llvm/lib/Object/DXContainer.cpp index 4ffa00f70bdb7..92956c580f9b2 100644 --- a/llvm/lib/Object/DXContainer.cpp +++ b/llvm/lib/Object/DXContainer.cpp @@ -8,6 +8,7 @@ #include "llvm/Object/DXContainer.h" #include "llvm/BinaryFormat/DXContainer.h" +#include "llvm/MC/DXContainerRootSignature.h" #include "llvm/Object/Error.h" #include "llvm/Support/Alignment.h" #include "llvm/Support/FormatVariadic.h" @@ -93,6 +94,8 @@ Error DXContainer::parseHash(StringRef Part) { } Error DXContainer::parseRootSignature(StringRef Part) { + if (RootSignature) + return parseFailed("More than one RTS0 part is present in the file"); dxbc::RootSignatureDesc Desc; if (Error Err = readStruct(Part, Part.begin(), Desc)) return Err; diff --git a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp index 22ac2b223ea53..e5561fe44375d 100644 --- a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp +++ b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp @@ -264,7 +264,10 @@ void DXContainerWriter::writeParts(raw_ostream &OS) { case dxbc::PartType::RTS0: if (!P.RootSignature.has_value()) continue; - dxbc::RootSignatureDesc RS = {P.RootSignature->Version, P.RootSignature->Flags}; + uint32_t Flags = P.RootSignature->getEncodedFlags(); + if (sys::IsBigEndianHost) + sys::swapByteOrder(Flags); + dxbc::RootSignatureDesc RS = {P.RootSignature->Version, Flags}; if (sys::IsBigEndianHost) RS.swapBytes(); OS.write(reinterpret_cast(&RS), sizeof(dxbc::RootSignatureDesc)); diff --git a/llvm/lib/ObjectYAML/DXContainerYAML.cpp b/llvm/lib/ObjectYAML/DXContainerYAML.cpp index 7bfd77acaecfb..d226a5b2e5942 100644 --- a/llvm/lib/ObjectYAML/DXContainerYAML.cpp +++ b/llvm/lib/ObjectYAML/DXContainerYAML.cpp @@ -15,6 +15,7 @@ #include "llvm/ADT/ScopeExit.h" #include "llvm/BinaryFormat/DXContainer.h" #include "llvm/Support/ScopedPrinter.h" +#include namespace llvm { @@ -29,6 +30,23 @@ DXContainerYAML::ShaderFeatureFlags::ShaderFeatureFlags(uint64_t FlagData) { #include "llvm/BinaryFormat/DXContainerConstants.def" } + +DXContainerYAML::RootSignatureDesc::RootSignatureDesc(const dxbc::RootSignatureDesc &Data): Version(Data.Version) { +#define ROOT_ELEMENT_FLAG(Num, Val) \ + Val = (Data.Flags & (uint32_t)dxbc::RootElementFlag::Val) > 0; +#include "llvm/BinaryFormat/DXContainerConstants.def" +} + + +uint32_t DXContainerYAML::RootSignatureDesc::getEncodedFlags() { + uint64_t Flag = 0; +#define ROOT_ELEMENT_FLAG(Num, Val) \ + if (Val) \ + Flag |= (uint32_t)dxbc::RootElementFlag::Val; +#include "llvm/BinaryFormat/DXContainerConstants.def" + return Flag; +} + uint64_t DXContainerYAML::ShaderFeatureFlags::getEncodedFlags() { uint64_t Flag = 0; #define SHADER_FEATURE_FLAG(Num, DxilModuleNum, Val, Str) \ @@ -45,10 +63,6 @@ DXContainerYAML::ShaderHash::ShaderHash(const dxbc::ShaderHash &Data) memcpy(Digest.data(), &Data.Digest[0], 16); } -DXContainerYAML::RootSignatureDesc::RootSignatureDesc(const dxbc::RootSignatureDesc &Data) - : Version(Data.Version), Flags(Data.Flags) { -} - DXContainerYAML::PSVInfo::PSVInfo() : Version(0) { memset(&Info, 0, sizeof(Info)); } @@ -195,7 +209,9 @@ void MappingTraits::mapping( void MappingTraits::mapping( IO &IO, DXContainerYAML::RootSignatureDesc &S) { IO.mapRequired("Version", S.Version); - IO.mapRequired("Flags", S.Flags); + #define ROOT_ELEMENT_FLAG(Num, Val) \ + IO.mapRequired(#Val, S.Val); + #include "llvm/BinaryFormat/DXContainerConstants.def" } void MappingTraits::mapping(IO &IO, diff --git a/llvm/test/ObjectYAML/DXContainer/RootSignature-FlagsRootElement.yaml b/llvm/test/ObjectYAML/DXContainer/RootSignature-FlagsRootElement.yaml index 5435c432a073e..2ed71091cacd4 100644 --- a/llvm/test/ObjectYAML/DXContainer/RootSignature-FlagsRootElement.yaml +++ b/llvm/test/ObjectYAML/DXContainer/RootSignature-FlagsRootElement.yaml @@ -6,237 +6,38 @@ Header: Version: Major: 1 Minor: 0 - FileSize: 1672 - PartCount: 7 - PartOffsets: [ 60, 1496, 1512, 1540, 1556, 1572, 1588 ] + PartCount: 1 + PartOffsets: [ 60 ] Parts: - - Name: DXIL - Size: 1428 - Program: - MajorVersion: 6 - MinorVersion: 0 - ShaderKind: 5 - Size: 357 - DXILMajorVersion: 1 - DXILMinorVersion: 0 - DXILSize: 1404 - DXIL: [ 0x42, 0x43, 0xC0, 0xDE, 0x21, 0xC, 0x0, 0x0, 0x5C, - 0x1, 0x0, 0x0, 0xB, 0x82, 0x20, 0x0, 0x2, 0x0, - 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x7, 0x81, 0x23, - 0x91, 0x41, 0xC8, 0x4, 0x49, 0x6, 0x10, 0x32, - 0x39, 0x92, 0x1, 0x84, 0xC, 0x25, 0x5, 0x8, 0x19, - 0x1E, 0x4, 0x8B, 0x62, 0x80, 0x10, 0x45, 0x2, - 0x42, 0x92, 0xB, 0x42, 0x84, 0x10, 0x32, 0x14, - 0x38, 0x8, 0x18, 0x4B, 0xA, 0x32, 0x42, 0x88, - 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xA5, - 0x0, 0x19, 0x32, 0x42, 0xE4, 0x48, 0xE, 0x90, - 0x11, 0x22, 0xC4, 0x50, 0x41, 0x51, 0x81, 0x8C, - 0xE1, 0x83, 0xE5, 0x8A, 0x4, 0x21, 0x46, 0x6, - 0x89, 0x20, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0x32, - 0x22, 0x8, 0x9, 0x20, 0x64, 0x85, 0x4, 0x13, 0x22, - 0xA4, 0x84, 0x4, 0x13, 0x22, 0xE3, 0x84, 0xA1, - 0x90, 0x14, 0x12, 0x4C, 0x88, 0x8C, 0xB, 0x84, - 0x84, 0x4C, 0x10, 0x20, 0x73, 0x4, 0x8, 0xC1, - 0x65, 0xC3, 0x85, 0x2C, 0xE8, 0x3, 0x40, 0x14, - 0x91, 0x4E, 0xD1, 0x4A, 0x48, 0x44, 0x54, 0x11, - 0xC3, 0x9, 0x30, 0xC4, 0x18, 0x1, 0x30, 0x2, 0x50, - 0x82, 0x21, 0x1A, 0x8, 0x98, 0x23, 0x0, 0x3, 0x0, - 0x13, 0x14, 0x72, 0xC0, 0x87, 0x74, 0x60, 0x87, - 0x36, 0x68, 0x87, 0x79, 0x68, 0x3, 0x72, 0xC0, - 0x87, 0xD, 0xAE, 0x50, 0xE, 0x6D, 0xD0, 0xE, 0x7A, - 0x50, 0xE, 0x6D, 0x0, 0xF, 0x7A, 0x30, 0x7, 0x72, - 0xA0, 0x7, 0x73, 0x20, 0x7, 0x6D, 0x90, 0xE, 0x71, - 0xA0, 0x7, 0x73, 0x20, 0x7, 0x6D, 0x90, 0xE, 0x78, - 0xA0, 0x7, 0x78, 0xD0, 0x6, 0xE9, 0x10, 0x7, 0x76, - 0xA0, 0x7, 0x71, 0x60, 0x7, 0x6D, 0x90, 0xE, 0x73, - 0x20, 0x7, 0x7A, 0x30, 0x7, 0x72, 0xD0, 0x6, 0xE9, - 0x60, 0x7, 0x74, 0xA0, 0x7, 0x76, 0x40, 0x7, 0x6D, - 0x60, 0xE, 0x71, 0x60, 0x7, 0x7A, 0x10, 0x7, 0x76, - 0xD0, 0x6, 0xE6, 0x30, 0x7, 0x72, 0xA0, 0x7, 0x73, - 0x20, 0x7, 0x6D, 0x60, 0xE, 0x76, 0x40, 0x7, 0x7A, - 0x60, 0x7, 0x74, 0xD0, 0x6, 0xEE, 0x80, 0x7, 0x7A, - 0x10, 0x7, 0x76, 0xA0, 0x7, 0x73, 0x20, 0x7, 0x7A, - 0x60, 0x7, 0x74, 0x30, 0xE4, 0x21, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0xB, - 0x4, 0x6, 0x0, 0x0, 0x0, 0x32, 0x1E, 0x98, 0xC, - 0x19, 0x11, 0x4C, 0x90, 0x8C, 0x9, 0x26, 0x47, - 0xC6, 0x4, 0x43, 0xBA, 0x12, 0x28, 0x86, 0x11, - 0x80, 0x42, 0x0, 0x0, 0x79, 0x18, 0x0, 0x0, 0xCB, - 0x0, 0x0, 0x0, 0x33, 0x8, 0x80, 0x1C, 0xC4, 0xE1, - 0x1C, 0x66, 0x14, 0x1, 0x3D, 0x88, 0x43, 0x38, - 0x84, 0xC3, 0x8C, 0x42, 0x80, 0x7, 0x79, 0x78, - 0x7, 0x73, 0x98, 0x71, 0xC, 0xE6, 0x0, 0xF, 0xED, - 0x10, 0xE, 0xF4, 0x80, 0xE, 0x33, 0xC, 0x42, 0x1E, - 0xC2, 0xC1, 0x1D, 0xCE, 0xA1, 0x1C, 0x66, 0x30, - 0x5, 0x3D, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1B, - 0xCC, 0x3, 0x3D, 0xC8, 0x43, 0x3D, 0x8C, 0x3, - 0x3D, 0xCC, 0x78, 0x8C, 0x74, 0x70, 0x7, 0x7B, - 0x8, 0x7, 0x79, 0x48, 0x87, 0x70, 0x70, 0x7, 0x7A, - 0x70, 0x3, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, - 0x19, 0xCC, 0x11, 0xE, 0xEC, 0x90, 0xE, 0xE1, - 0x30, 0xF, 0x6E, 0x30, 0xF, 0xE3, 0xF0, 0xE, 0xF0, - 0x50, 0xE, 0x33, 0x10, 0xC4, 0x1D, 0xDE, 0x21, - 0x1C, 0xD8, 0x21, 0x1D, 0xC2, 0x61, 0x1E, 0x66, - 0x30, 0x89, 0x3B, 0xBC, 0x83, 0x3B, 0xD0, 0x43, - 0x39, 0xB4, 0x3, 0x3C, 0xBC, 0x83, 0x3C, 0x84, - 0x3, 0x3B, 0xCC, 0xF0, 0x14, 0x76, 0x60, 0x7, - 0x7B, 0x68, 0x7, 0x37, 0x68, 0x87, 0x72, 0x68, - 0x7, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, - 0x60, 0x7, 0x76, 0x28, 0x7, 0x76, 0xF8, 0x5, 0x76, - 0x78, 0x87, 0x77, 0x80, 0x87, 0x5F, 0x8, 0x87, - 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, - 0x81, 0x2C, 0xEE, 0xF0, 0xE, 0xEE, 0xE0, 0xE, - 0xF5, 0xC0, 0xE, 0xEC, 0x30, 0x3, 0x62, 0xC8, - 0xA1, 0x1C, 0xE4, 0xA1, 0x1C, 0xCC, 0xA1, 0x1C, - 0xE4, 0xA1, 0x1C, 0xDC, 0x61, 0x1C, 0xCA, 0x21, - 0x1C, 0xC4, 0x81, 0x1D, 0xCA, 0x61, 0x6, 0xD6, - 0x90, 0x43, 0x39, 0xC8, 0x43, 0x39, 0x98, 0x43, - 0x39, 0xC8, 0x43, 0x39, 0xB8, 0xC3, 0x38, 0x94, - 0x43, 0x38, 0x88, 0x3, 0x3B, 0x94, 0xC3, 0x2F, - 0xBC, 0x83, 0x3C, 0xFC, 0x82, 0x3B, 0xD4, 0x3, - 0x3B, 0xB0, 0xC3, 0xC, 0xC7, 0x69, 0x87, 0x70, - 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x7, - 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xA0, - 0x87, 0x19, 0xCE, 0x53, 0xF, 0xEE, 0x0, 0xF, 0xF2, - 0x50, 0xE, 0xE4, 0x90, 0xE, 0xE3, 0x40, 0xF, 0xE1, - 0x20, 0xE, 0xEC, 0x50, 0xE, 0x33, 0x20, 0x28, - 0x1D, 0xDC, 0xC1, 0x1E, 0xC2, 0x41, 0x1E, 0xD2, - 0x21, 0x1C, 0xDC, 0x81, 0x1E, 0xDC, 0xE0, 0x1C, - 0xE4, 0xE1, 0x1D, 0xEA, 0x1, 0x1E, 0x66, 0x18, - 0x51, 0x38, 0xB0, 0x43, 0x3A, 0x9C, 0x83, 0x3B, - 0xCC, 0x50, 0x24, 0x76, 0x60, 0x7, 0x7B, 0x68, - 0x7, 0x37, 0x60, 0x87, 0x77, 0x78, 0x7, 0x78, - 0x98, 0x51, 0x4C, 0xF4, 0x90, 0xF, 0xF0, 0x50, - 0xE, 0x33, 0x1E, 0x6A, 0x1E, 0xCA, 0x61, 0x1C, - 0xE8, 0x21, 0x1D, 0xDE, 0xC1, 0x1D, 0x7E, 0x1, - 0x1E, 0xE4, 0xA1, 0x1C, 0xCC, 0x21, 0x1D, 0xF0, - 0x61, 0x6, 0x54, 0x85, 0x83, 0x38, 0xCC, 0xC3, - 0x3B, 0xB0, 0x43, 0x3D, 0xD0, 0x43, 0x39, 0xFC, - 0xC2, 0x3C, 0xE4, 0x43, 0x3B, 0x88, 0xC3, 0x3B, - 0xB0, 0xC3, 0x8C, 0xC5, 0xA, 0x87, 0x79, 0x98, - 0x87, 0x77, 0x18, 0x87, 0x74, 0x8, 0x7, 0x7A, - 0x28, 0x7, 0x72, 0x98, 0x81, 0x5C, 0xE3, 0x10, - 0xE, 0xEC, 0xC0, 0xE, 0xE5, 0x50, 0xE, 0xF3, 0x30, - 0x23, 0xC1, 0xD2, 0x41, 0x1E, 0xE4, 0xE1, 0x17, - 0xD8, 0xE1, 0x1D, 0xDE, 0x1, 0x1E, 0x66, 0x48, - 0x19, 0x3B, 0xB0, 0x83, 0x3D, 0xB4, 0x83, 0x1B, - 0x84, 0xC3, 0x38, 0x8C, 0x43, 0x39, 0xCC, 0xC3, - 0x3C, 0xB8, 0xC1, 0x39, 0xC8, 0xC3, 0x3B, 0xD4, - 0x3, 0x3C, 0xCC, 0x48, 0xB4, 0x71, 0x8, 0x7, 0x76, - 0x60, 0x7, 0x71, 0x8, 0x87, 0x71, 0x58, 0x87, - 0x19, 0xDB, 0xC6, 0xE, 0xEC, 0x60, 0xF, 0xED, - 0xE0, 0x6, 0xF0, 0x20, 0xF, 0xE5, 0x30, 0xF, 0xE5, - 0x20, 0xF, 0xF6, 0x50, 0xE, 0x6E, 0x10, 0xE, 0xE3, - 0x30, 0xE, 0xE5, 0x30, 0xF, 0xF3, 0xE0, 0x6, 0xE9, - 0xE0, 0xE, 0xE4, 0x50, 0xE, 0xF8, 0x30, 0x23, - 0xE2, 0xEC, 0x61, 0x1C, 0xC2, 0x81, 0x1D, 0xD8, - 0xE1, 0x17, 0xEC, 0x21, 0x1D, 0xE6, 0x21, 0x1D, - 0xC4, 0x21, 0x1D, 0xD8, 0x21, 0x1D, 0xE8, 0x21, - 0x1F, 0x66, 0x20, 0x9D, 0x3B, 0xBC, 0x43, 0x3D, - 0xB8, 0x3, 0x39, 0x94, 0x83, 0x39, 0xCC, 0x58, - 0xBC, 0x70, 0x70, 0x7, 0x77, 0x78, 0x7, 0x7A, - 0x8, 0x7, 0x7A, 0x48, 0x87, 0x77, 0x70, 0x87, - 0x19, 0xCB, 0xE7, 0xE, 0xEF, 0x30, 0xF, 0xE1, - 0xE0, 0xE, 0xE9, 0x40, 0xF, 0xE9, 0xA0, 0xF, 0xE5, - 0x30, 0xC3, 0x1, 0x3, 0x73, 0xA8, 0x7, 0x77, 0x18, - 0x87, 0x5F, 0x98, 0x87, 0x70, 0x70, 0x87, 0x74, - 0xA0, 0x87, 0x74, 0xD0, 0x87, 0x72, 0x98, 0x81, - 0x84, 0x41, 0x39, 0xE0, 0xC3, 0x38, 0xB0, 0x43, - 0x3D, 0x90, 0x43, 0x39, 0xCC, 0x40, 0xC4, 0xA0, - 0x1D, 0xCA, 0xA1, 0x1D, 0xE0, 0x41, 0x1E, 0xDE, - 0xC1, 0x1C, 0x66, 0x24, 0x63, 0x30, 0xE, 0xE1, - 0xC0, 0xE, 0xEC, 0x30, 0xF, 0xE9, 0x40, 0xF, 0xE5, - 0x30, 0x43, 0x21, 0x83, 0x75, 0x18, 0x7, 0x73, - 0x48, 0x87, 0x5F, 0xA0, 0x87, 0x7C, 0x80, 0x87, - 0x72, 0x98, 0xB1, 0x94, 0x1, 0x3C, 0x8C, 0xC3, - 0x3C, 0x94, 0xC3, 0x38, 0xD0, 0x43, 0x3A, 0xBC, - 0x83, 0x3B, 0xCC, 0xC3, 0x8C, 0xC5, 0xC, 0x48, - 0x21, 0x15, 0x42, 0x61, 0x1E, 0xE6, 0x21, 0x1D, - 0xCE, 0xC1, 0x1D, 0x52, 0x81, 0x14, 0x66, 0x4C, - 0x67, 0x30, 0xE, 0xEF, 0x20, 0xF, 0xEF, 0xE0, - 0x6, 0xEF, 0x50, 0xF, 0xF4, 0x30, 0xF, 0xE9, 0x40, - 0xE, 0xE5, 0xE0, 0x6, 0xE6, 0x20, 0xF, 0xE1, 0xD0, - 0xE, 0xE5, 0x30, 0xA3, 0x40, 0x83, 0x76, 0x68, - 0x7, 0x79, 0x8, 0x87, 0x19, 0x52, 0x1A, 0xB8, - 0xC3, 0x3B, 0x84, 0x3, 0x3B, 0xA4, 0x43, 0x38, - 0xCC, 0x83, 0x1B, 0x84, 0x3, 0x39, 0x90, 0x83, - 0x3C, 0xCC, 0x3, 0x3C, 0x84, 0xC3, 0x38, 0x94, - 0x3, 0x0, 0x0, 0x0, 0x0, 0x79, 0x28, 0x0, 0x0, - 0x2A, 0x0, 0x0, 0x0, 0xC2, 0x3C, 0x90, 0x40, 0x86, - 0x10, 0x19, 0x32, 0xE2, 0x64, 0x90, 0x40, 0x46, - 0x2, 0x19, 0x23, 0x23, 0x46, 0x2, 0x13, 0x24, - 0xC6, 0x0, 0x13, 0x74, 0x12, 0xA9, 0xB7, 0x37, - 0x3A, 0x23, 0xB6, 0xB0, 0xB3, 0xB9, 0x23, 0x8C, - 0xCD, 0x1D, 0xA2, 0x2D, 0x2C, 0xCD, 0x6D, 0x8, - 0x42, 0x1, 0xC, 0x41, 0x38, 0x82, 0x21, 0x8, 0x87, - 0x30, 0x4, 0xE1, 0x18, 0x86, 0x20, 0x1C, 0xC4, - 0x18, 0x84, 0xA0, 0x18, 0x43, 0x90, 0x8C, 0x41, - 0x20, 0x94, 0x31, 0xC, 0x82, 0x71, 0x8C, 0x41, - 0x28, 0x8E, 0x31, 0xC, 0x45, 0x51, 0x8C, 0x41, - 0x40, 0x9C, 0x31, 0x14, 0xC4, 0x0, 0x0, 0x8F, - 0x89, 0xC8, 0xF0, 0x5C, 0xE4, 0xDE, 0xDE, 0xE8, - 0xE6, 0xD2, 0xCE, 0xDC, 0xC2, 0xE8, 0xEA, 0xE4, - 0xCA, 0xE6, 0x86, 0x12, 0x28, 0xC6, 0x21, 0xC3, - 0x73, 0x99, 0x43, 0xB, 0x23, 0x2B, 0x93, 0x6B, - 0x7A, 0x23, 0x2B, 0x63, 0x1B, 0x4A, 0xB0, 0x18, - 0x85, 0xC, 0xCF, 0xC5, 0xAE, 0x4C, 0x6E, 0x2E, - 0xED, 0xCD, 0x6D, 0x28, 0x1, 0x63, 0x1C, 0x32, - 0x3C, 0x97, 0x32, 0x37, 0x3A, 0xB9, 0x3C, 0xA8, - 0xB7, 0x34, 0x37, 0xBA, 0xB9, 0xA1, 0x4, 0xF, - 0x0, 0x0, 0x71, 0x20, 0x0, 0x0, 0x2, 0x0, 0x0, - 0x0, 0x6, 0x40, 0x30, 0x0, 0xD2, 0x0, 0x0, 0x0, - 0x61, 0x20, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x13, - 0x4, 0x1, 0x86, 0x3, 0x1, 0x0, 0x0, 0x2, 0x0, - 0x0, 0x0, 0x7, 0x50, 0x10, 0xCD, 0x14, 0x61, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ] - - Name: SFI0 - Size: 8 - - Name: HASH - Size: 20 - Hash: - IncludesSource: false - Digest: [ 0xCE, 0xA, 0x5B, 0x9C, 0xBF, 0x9A, 0xBB, 0x5, - 0x19, 0xC5, 0x96, 0x78, 0x49, 0x89, 0x5C, 0x6B ] - - Name: ISG1 - Size: 8 - Signature: - Parameters: [] - - Name: OSG1 - Size: 8 - Signature: - Parameters: [] - Name: RTS0 Size: 8 RootSignature: Version: 1 - Flags: 8 - - Name: PSV0 - Size: 76 - PSVInfo: - Version: 3 - ShaderStage: 5 - MinimumWaveLaneCount: 0 - MaximumWaveLaneCount: 4294967295 - UsesViewID: 0 - SigInputVectors: 0 - SigOutputVectors: [ 0, 0, 0, 0 ] - NumThreadsX: 1 - NumThreadsY: 1 - NumThreadsZ: 1 - EntryName: main - ResourceStride: 24 - Resources: [] - SigInputElements: [] - SigOutputElements: [] - SigPatchOrPrimElements: [] - InputOutputMap: - - [ ] - - [ ] - - [ ] - - [ ] - -# CHECK: - Name: RTS0 -# CHECK-NEXT: Size: 8 -# CHECK-NEXT: RootSignature: -# CHECK-NEXT: Version: 1 -# CHECK-NEXT: Flags: 8 + AllowInputAssemblerInputLayout: true + DenyVertexShaderRootAccess: false + DenyHullShaderRootAccess: false + DenyDomainShaderRootAccess: false + DenyGeometryShaderRootAccess: false + DenyPixelShaderRootAccess: false + AllowStreamOutput: false + LocalRootSignature: false + DenyAmplificationShaderRootAccess: false + DenyMeshShaderRootAccess: false + CBVSRVUAVHeapDirectlyIndexed: false + SamplerHeapDirectlyIndexed: false +#CHECK: - Name: RTS0 +#CHECK-NEXT: Size: 8 +#CHECK-NEXT: RootSignature: +#CHECK-NEXT: Version: 1 +#CHECK-NEXT: AllowInputAssemblerInputLayout: true +#CHECK-NEXT: DenyVertexShaderRootAccess: false +#CHECK-NEXT: DenyHullShaderRootAccess: false +#CHECK-NEXT: DenyDomainShaderRootAccess: false +#CHECK-NEXT: DenyGeometryShaderRootAccess: false +#CHECK-NEXT: DenyPixelShaderRootAccess: false +#CHECK-NEXT: AllowStreamOutput: false +#CHECK-NEXT: LocalRootSignature: false +#CHECK-NEXT: DenyAmplificationShaderRootAccess: false +#CHECK-NEXT: DenyMeshShaderRootAccess: false +#CHECK-NEXT: CBVSRVUAVHeapDirectlyIndexed: false +#CHECK-NEXT: SamplerHeapDirectlyIndexed: false From 80587ddd3736472bfd3e089db35880762a2035b7 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Tue, 14 Jan 2025 23:47:46 +0000 Subject: [PATCH 06/29] updating test --- .../ObjectYAML/DXContainer/RootSignature-FlagsRootElement.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/llvm/test/ObjectYAML/DXContainer/RootSignature-FlagsRootElement.yaml b/llvm/test/ObjectYAML/DXContainer/RootSignature-FlagsRootElement.yaml index 2ed71091cacd4..8ce18d8e1aa4c 100644 --- a/llvm/test/ObjectYAML/DXContainer/RootSignature-FlagsRootElement.yaml +++ b/llvm/test/ObjectYAML/DXContainer/RootSignature-FlagsRootElement.yaml @@ -25,6 +25,7 @@ Parts: DenyMeshShaderRootAccess: false CBVSRVUAVHeapDirectlyIndexed: false SamplerHeapDirectlyIndexed: false + #CHECK: - Name: RTS0 #CHECK-NEXT: Size: 8 #CHECK-NEXT: RootSignature: From be3764d8748cf55c781cd3b98a5f616c9a09e5f0 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Wed, 15 Jan 2025 00:42:39 +0000 Subject: [PATCH 07/29] removing useless header --- llvm/lib/Object/DXContainer.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/llvm/lib/Object/DXContainer.cpp b/llvm/lib/Object/DXContainer.cpp index 92956c580f9b2..b7eff25ed7b33 100644 --- a/llvm/lib/Object/DXContainer.cpp +++ b/llvm/lib/Object/DXContainer.cpp @@ -8,7 +8,6 @@ #include "llvm/Object/DXContainer.h" #include "llvm/BinaryFormat/DXContainer.h" -#include "llvm/MC/DXContainerRootSignature.h" #include "llvm/Object/Error.h" #include "llvm/Support/Alignment.h" #include "llvm/Support/FormatVariadic.h" From 7582ca61409969ae247c116374bacbbdb4909fca Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Wed, 15 Jan 2025 17:30:00 +0000 Subject: [PATCH 08/29] fix formating --- llvm/include/llvm/BinaryFormat/DXContainer.h | 4 ++-- llvm/include/llvm/Object/DXContainer.h | 3 +-- llvm/include/llvm/ObjectYAML/DXContainerYAML.h | 1 - llvm/lib/ObjectYAML/DXContainerEmitter.cpp | 2 +- llvm/lib/ObjectYAML/DXContainerYAML.cpp | 15 +++++++-------- 5 files changed, 11 insertions(+), 14 deletions(-) diff --git a/llvm/include/llvm/BinaryFormat/DXContainer.h b/llvm/include/llvm/BinaryFormat/DXContainer.h index 0ada212511937..74003387a249e 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainer.h +++ b/llvm/include/llvm/BinaryFormat/DXContainer.h @@ -66,9 +66,9 @@ struct ShaderHash { struct RootSignatureDesc { uint32_t Version; uint32_t Flags; - void swapBytes() { + void swapBytes() { sys::swapByteOrder(Version); - sys::swapByteOrder(Flags); + sys::swapByteOrder(Flags); } }; diff --git a/llvm/include/llvm/Object/DXContainer.h b/llvm/include/llvm/Object/DXContainer.h index 9159b9083b618..8574a04027ce4 100644 --- a/llvm/include/llvm/Object/DXContainer.h +++ b/llvm/include/llvm/Object/DXContainer.h @@ -384,8 +384,7 @@ class DXContainer { std::optional getShaderHash() const { return Hash; } - std::optional - getRootSignature() const { + std::optional getRootSignature() const { return RootSignature; } diff --git a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h index 9b25c5c33e7ef..bb232543cd3b0 100644 --- a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h +++ b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h @@ -72,7 +72,6 @@ struct ShaderHash { std::vector Digest; }; - #define ROOT_ELEMENT_FLAG(Num, Val) bool Val = false; struct RootSignatureDesc { RootSignatureDesc() = default; diff --git a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp index e5561fe44375d..3ac539c8e0853 100644 --- a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp +++ b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp @@ -267,7 +267,7 @@ void DXContainerWriter::writeParts(raw_ostream &OS) { uint32_t Flags = P.RootSignature->getEncodedFlags(); if (sys::IsBigEndianHost) sys::swapByteOrder(Flags); - dxbc::RootSignatureDesc RS = {P.RootSignature->Version, Flags}; + dxbc::RootSignatureDesc RS = {P.RootSignature->Version, Flags}; if (sys::IsBigEndianHost) RS.swapBytes(); OS.write(reinterpret_cast(&RS), sizeof(dxbc::RootSignatureDesc)); diff --git a/llvm/lib/ObjectYAML/DXContainerYAML.cpp b/llvm/lib/ObjectYAML/DXContainerYAML.cpp index d226a5b2e5942..80f4587a06ff5 100644 --- a/llvm/lib/ObjectYAML/DXContainerYAML.cpp +++ b/llvm/lib/ObjectYAML/DXContainerYAML.cpp @@ -30,17 +30,17 @@ DXContainerYAML::ShaderFeatureFlags::ShaderFeatureFlags(uint64_t FlagData) { #include "llvm/BinaryFormat/DXContainerConstants.def" } - -DXContainerYAML::RootSignatureDesc::RootSignatureDesc(const dxbc::RootSignatureDesc &Data): Version(Data.Version) { -#define ROOT_ELEMENT_FLAG(Num, Val) \ +DXContainerYAML::RootSignatureDesc::RootSignatureDesc( + const dxbc::RootSignatureDesc &Data) + : Version(Data.Version) { +#define ROOT_ELEMENT_FLAG(Num, Val) \ Val = (Data.Flags & (uint32_t)dxbc::RootElementFlag::Val) > 0; #include "llvm/BinaryFormat/DXContainerConstants.def" } - uint32_t DXContainerYAML::RootSignatureDesc::getEncodedFlags() { uint64_t Flag = 0; -#define ROOT_ELEMENT_FLAG(Num, Val) \ +#define ROOT_ELEMENT_FLAG(Num, Val) \ if (Val) \ Flag |= (uint32_t)dxbc::RootElementFlag::Val; #include "llvm/BinaryFormat/DXContainerConstants.def" @@ -209,9 +209,8 @@ void MappingTraits::mapping( void MappingTraits::mapping( IO &IO, DXContainerYAML::RootSignatureDesc &S) { IO.mapRequired("Version", S.Version); - #define ROOT_ELEMENT_FLAG(Num, Val) \ - IO.mapRequired(#Val, S.Val); - #include "llvm/BinaryFormat/DXContainerConstants.def" +#define ROOT_ELEMENT_FLAG(Num, Val) IO.mapRequired(#Val, S.Val); +#include "llvm/BinaryFormat/DXContainerConstants.def" } void MappingTraits::mapping(IO &IO, From 6aaa0a5a0d8a9bf7bf6514ed4960ec9ef8bae9a4 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Wed, 15 Jan 2025 18:21:06 +0000 Subject: [PATCH 09/29] renaming test --- ...otSignature-FlagsRootElement.yaml => RootSignature-Flags.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename llvm/test/ObjectYAML/DXContainer/{RootSignature-FlagsRootElement.yaml => RootSignature-Flags.yaml} (100%) diff --git a/llvm/test/ObjectYAML/DXContainer/RootSignature-FlagsRootElement.yaml b/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml similarity index 100% rename from llvm/test/ObjectYAML/DXContainer/RootSignature-FlagsRootElement.yaml rename to llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml From 916b2f17afef4e7b79818596551df44c75a55016 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Thu, 16 Jan 2025 22:16:45 +0000 Subject: [PATCH 10/29] addressing pr comments --- llvm/include/llvm/BinaryFormat/DXContainer.h | 2 +- .../BinaryFormat/DXContainerConstants.def | 24 +++++++++---------- .../include/llvm/ObjectYAML/DXContainerYAML.h | 2 +- llvm/lib/Object/DXContainer.cpp | 1 - llvm/lib/ObjectYAML/DXContainerYAML.cpp | 6 ++--- llvm/tools/obj2yaml/dxcontainer2yaml.cpp | 3 +-- 6 files changed, 18 insertions(+), 20 deletions(-) diff --git a/llvm/include/llvm/BinaryFormat/DXContainer.h b/llvm/include/llvm/BinaryFormat/DXContainer.h index 74003387a249e..605281df31ed4 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainer.h +++ b/llvm/include/llvm/BinaryFormat/DXContainer.h @@ -161,7 +161,7 @@ enum class FeatureFlags : uint64_t { static_assert((uint64_t)FeatureFlags::NextUnusedBit <= 1ull << 63, "Shader flag bits exceed enum size."); -#define ROOT_ELEMENT_FLAG(Num, Val) Val = 1ull << Num, +#define ROOT_ELEMENT_FLAG(Num, Val, Str) Val = 1ull << Num, enum class RootElementFlag : uint32_t { #include "DXContainerConstants.def" }; diff --git a/llvm/include/llvm/BinaryFormat/DXContainerConstants.def b/llvm/include/llvm/BinaryFormat/DXContainerConstants.def index b351b9a01773c..a382cd714ce7f 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainerConstants.def +++ b/llvm/include/llvm/BinaryFormat/DXContainerConstants.def @@ -56,18 +56,18 @@ SHADER_FEATURE_FLAG(31, 36, NextUnusedBit, "Next reserved shader flag bit (not a #ifdef ROOT_ELEMENT_FLAG -ROOT_ELEMENT_FLAG(0, AllowInputAssemblerInputLayout) -ROOT_ELEMENT_FLAG(1, DenyVertexShaderRootAccess) -ROOT_ELEMENT_FLAG(2, DenyHullShaderRootAccess) -ROOT_ELEMENT_FLAG(3, DenyDomainShaderRootAccess) -ROOT_ELEMENT_FLAG(4, DenyGeometryShaderRootAccess) -ROOT_ELEMENT_FLAG(5, DenyPixelShaderRootAccess) -ROOT_ELEMENT_FLAG(6, AllowStreamOutput) -ROOT_ELEMENT_FLAG(7, LocalRootSignature) -ROOT_ELEMENT_FLAG(8, DenyAmplificationShaderRootAccess) -ROOT_ELEMENT_FLAG(9, DenyMeshShaderRootAccess) -ROOT_ELEMENT_FLAG(10, CBVSRVUAVHeapDirectlyIndexed) -ROOT_ELEMENT_FLAG(11, SamplerHeapDirectlyIndexed) +ROOT_ELEMENT_FLAG(0, AllowInputAssemblerInputLayout, "") +ROOT_ELEMENT_FLAG(1, DenyVertexShaderRootAccess, "") +ROOT_ELEMENT_FLAG(2, DenyHullShaderRootAccess, "") +ROOT_ELEMENT_FLAG(3, DenyDomainShaderRootAccess, "") +ROOT_ELEMENT_FLAG(4, DenyGeometryShaderRootAccess, "") +ROOT_ELEMENT_FLAG(5, DenyPixelShaderRootAccess, "") +ROOT_ELEMENT_FLAG(6, AllowStreamOutput, "") +ROOT_ELEMENT_FLAG(7, LocalRootSignature, "") +ROOT_ELEMENT_FLAG(8, DenyAmplificationShaderRootAccess, "") +ROOT_ELEMENT_FLAG(9, DenyMeshShaderRootAccess, "") +ROOT_ELEMENT_FLAG(10, CBVSRVUAVHeapDirectlyIndexed, "") +ROOT_ELEMENT_FLAG(11, SamplerHeapDirectlyIndexed, "") #undef ROOT_ELEMENT_FLAG #endif // ROOT_ELEMENT_FLAG diff --git a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h index bb232543cd3b0..755c81541e5db 100644 --- a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h +++ b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h @@ -72,7 +72,7 @@ struct ShaderHash { std::vector Digest; }; -#define ROOT_ELEMENT_FLAG(Num, Val) bool Val = false; +#define ROOT_ELEMENT_FLAG(Num, Val, Str) bool Val = false; struct RootSignatureDesc { RootSignatureDesc() = default; RootSignatureDesc(const dxbc::RootSignatureDesc &Data); diff --git a/llvm/lib/Object/DXContainer.cpp b/llvm/lib/Object/DXContainer.cpp index b7eff25ed7b33..160844f73669a 100644 --- a/llvm/lib/Object/DXContainer.cpp +++ b/llvm/lib/Object/DXContainer.cpp @@ -206,7 +206,6 @@ Error DXContainer::parsePartOffsets() { case dxbc::PartType::RTS0: if (Error Err = parseRootSignature(PartData)) return Err; - break; } } diff --git a/llvm/lib/ObjectYAML/DXContainerYAML.cpp b/llvm/lib/ObjectYAML/DXContainerYAML.cpp index 80f4587a06ff5..682216e5febec 100644 --- a/llvm/lib/ObjectYAML/DXContainerYAML.cpp +++ b/llvm/lib/ObjectYAML/DXContainerYAML.cpp @@ -33,14 +33,14 @@ DXContainerYAML::ShaderFeatureFlags::ShaderFeatureFlags(uint64_t FlagData) { DXContainerYAML::RootSignatureDesc::RootSignatureDesc( const dxbc::RootSignatureDesc &Data) : Version(Data.Version) { -#define ROOT_ELEMENT_FLAG(Num, Val) \ +#define ROOT_ELEMENT_FLAG(Num, Val, Str) \ Val = (Data.Flags & (uint32_t)dxbc::RootElementFlag::Val) > 0; #include "llvm/BinaryFormat/DXContainerConstants.def" } uint32_t DXContainerYAML::RootSignatureDesc::getEncodedFlags() { uint64_t Flag = 0; -#define ROOT_ELEMENT_FLAG(Num, Val) \ +#define ROOT_ELEMENT_FLAG(Num, Val, Str) \ if (Val) \ Flag |= (uint32_t)dxbc::RootElementFlag::Val; #include "llvm/BinaryFormat/DXContainerConstants.def" @@ -209,7 +209,7 @@ void MappingTraits::mapping( void MappingTraits::mapping( IO &IO, DXContainerYAML::RootSignatureDesc &S) { IO.mapRequired("Version", S.Version); -#define ROOT_ELEMENT_FLAG(Num, Val) IO.mapRequired(#Val, S.Val); +#define ROOT_ELEMENT_FLAG(Num, Val, Str) IO.mapRequired(#Val, S.Val); #include "llvm/BinaryFormat/DXContainerConstants.def" } diff --git a/llvm/tools/obj2yaml/dxcontainer2yaml.cpp b/llvm/tools/obj2yaml/dxcontainer2yaml.cpp index 6ae0a0859b48e..9588a8277dad7 100644 --- a/llvm/tools/obj2yaml/dxcontainer2yaml.cpp +++ b/llvm/tools/obj2yaml/dxcontainer2yaml.cpp @@ -155,10 +155,9 @@ dumpDXContainer(MemoryBufferRef Source) { break; case dxbc::PartType::RTS0: std::optional RS = Container.getRootSignature(); - if (RS && RS.has_value()) + if (RS.has_value()) NewPart.RootSignature = DXContainerYAML::RootSignatureDesc(*RS); break; - break; } } From d9bce0a1d80155b342726189e929dabb4ec3fb90 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Thu, 16 Jan 2025 22:20:18 +0000 Subject: [PATCH 11/29] adding str to ROOT_ELEMENT_FLAG --- .../BinaryFormat/DXContainerConstants.def | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/llvm/include/llvm/BinaryFormat/DXContainerConstants.def b/llvm/include/llvm/BinaryFormat/DXContainerConstants.def index a382cd714ce7f..300d0dd2797c9 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainerConstants.def +++ b/llvm/include/llvm/BinaryFormat/DXContainerConstants.def @@ -56,18 +56,18 @@ SHADER_FEATURE_FLAG(31, 36, NextUnusedBit, "Next reserved shader flag bit (not a #ifdef ROOT_ELEMENT_FLAG -ROOT_ELEMENT_FLAG(0, AllowInputAssemblerInputLayout, "") -ROOT_ELEMENT_FLAG(1, DenyVertexShaderRootAccess, "") -ROOT_ELEMENT_FLAG(2, DenyHullShaderRootAccess, "") -ROOT_ELEMENT_FLAG(3, DenyDomainShaderRootAccess, "") -ROOT_ELEMENT_FLAG(4, DenyGeometryShaderRootAccess, "") -ROOT_ELEMENT_FLAG(5, DenyPixelShaderRootAccess, "") -ROOT_ELEMENT_FLAG(6, AllowStreamOutput, "") -ROOT_ELEMENT_FLAG(7, LocalRootSignature, "") -ROOT_ELEMENT_FLAG(8, DenyAmplificationShaderRootAccess, "") -ROOT_ELEMENT_FLAG(9, DenyMeshShaderRootAccess, "") -ROOT_ELEMENT_FLAG(10, CBVSRVUAVHeapDirectlyIndexed, "") -ROOT_ELEMENT_FLAG(11, SamplerHeapDirectlyIndexed, "") +ROOT_ELEMENT_FLAG(0, AllowInputAssemblerInputLayout, "The app is opting in to using the Input Assembler") +ROOT_ELEMENT_FLAG(1, DenyVertexShaderRootAccess, "Denies the vertex shader access to the root signature.") +ROOT_ELEMENT_FLAG(2, DenyHullShaderRootAccess, "Denies the hull shader access to the root signature.") +ROOT_ELEMENT_FLAG(3, DenyDomainShaderRootAccess, "Denies the domain shader access to the root signature.") +ROOT_ELEMENT_FLAG(4, DenyGeometryShaderRootAccess, "Denies the geometry shader access to the root signature.") +ROOT_ELEMENT_FLAG(5, DenyPixelShaderRootAccess, "Denies the pixel shader access to the root signature.") +ROOT_ELEMENT_FLAG(6, AllowStreamOutput, "The app is opting in to using Stream Output.") +ROOT_ELEMENT_FLAG(7, LocalRootSignature, "The root signature is to be used with raytracing shaders to define resource bindings sourced from shader records in shader tables.") +ROOT_ELEMENT_FLAG(8, DenyAmplificationShaderRootAccess, "Denies the amplification shader access to the root signature.") +ROOT_ELEMENT_FLAG(9, DenyMeshShaderRootAccess, "Denies the mesh shader access to the root signature.") +ROOT_ELEMENT_FLAG(10, CBVSRVUAVHeapDirectlyIndexed, "The shaders are allowed to index the CBV/SRV/UAV descriptor heap directly, using the ResourceDescriptorHeap built-in variable.") +ROOT_ELEMENT_FLAG(11, SamplerHeapDirectlyIndexed, "The shaders are allowed to index the sampler descriptor heap directly, using the SamplerDescriptorHeap built-in variable.") #undef ROOT_ELEMENT_FLAG #endif // ROOT_ELEMENT_FLAG From e7676ed42376dea921f74a0f9c5f3d422235a08f Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Fri, 17 Jan 2025 07:28:09 +0000 Subject: [PATCH 12/29] formating --- llvm/lib/ObjectYAML/DXContainerYAML.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/llvm/lib/ObjectYAML/DXContainerYAML.cpp b/llvm/lib/ObjectYAML/DXContainerYAML.cpp index 682216e5febec..0351239cac2c1 100644 --- a/llvm/lib/ObjectYAML/DXContainerYAML.cpp +++ b/llvm/lib/ObjectYAML/DXContainerYAML.cpp @@ -33,14 +33,14 @@ DXContainerYAML::ShaderFeatureFlags::ShaderFeatureFlags(uint64_t FlagData) { DXContainerYAML::RootSignatureDesc::RootSignatureDesc( const dxbc::RootSignatureDesc &Data) : Version(Data.Version) { -#define ROOT_ELEMENT_FLAG(Num, Val, Str) \ +#define ROOT_ELEMENT_FLAG(Num, Val, Str) \ Val = (Data.Flags & (uint32_t)dxbc::RootElementFlag::Val) > 0; #include "llvm/BinaryFormat/DXContainerConstants.def" } uint32_t DXContainerYAML::RootSignatureDesc::getEncodedFlags() { uint64_t Flag = 0; -#define ROOT_ELEMENT_FLAG(Num, Val, Str) \ +#define ROOT_ELEMENT_FLAG(Num, Val, Str) \ if (Val) \ Flag |= (uint32_t)dxbc::RootElementFlag::Val; #include "llvm/BinaryFormat/DXContainerConstants.def" From a0cee57b8ea574a67704b3aa1a0b820c99820b57 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Sat, 18 Jan 2025 00:03:15 +0000 Subject: [PATCH 13/29] refactoring to follow llvm standards --- .../llvm/MC/DXContainerRootSignature.h | 27 +++++++++++++++++ llvm/include/llvm/Object/DXContainer.h | 23 +++++++++++++-- .../include/llvm/ObjectYAML/DXContainerYAML.h | 3 +- llvm/lib/MC/CMakeLists.txt | 1 + llvm/lib/MC/DXContainerRootSignature.cpp | 29 +++++++++++++++++++ llvm/lib/Object/DXContainer.cpp | 18 ++++++++++-- llvm/lib/ObjectYAML/DXContainerEmitter.cpp | 14 ++++----- llvm/lib/ObjectYAML/DXContainerYAML.cpp | 8 +++-- llvm/tools/obj2yaml/dxcontainer2yaml.cpp | 2 +- 9 files changed, 109 insertions(+), 16 deletions(-) create mode 100644 llvm/include/llvm/MC/DXContainerRootSignature.h create mode 100644 llvm/lib/MC/DXContainerRootSignature.cpp diff --git a/llvm/include/llvm/MC/DXContainerRootSignature.h b/llvm/include/llvm/MC/DXContainerRootSignature.h new file mode 100644 index 0000000000000..3926193697a49 --- /dev/null +++ b/llvm/include/llvm/MC/DXContainerRootSignature.h @@ -0,0 +1,27 @@ +//===- llvm/MC/DXContainerRootSignature.h - DXContainer RootSignature -*- C++ +//-------*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include +#include + +namespace llvm { + +class raw_ostream; + +namespace mcdxbc { +struct RootSignatureHeader { + uint32_t Version; + uint32_t Flags; + + void swapBytes(); + void write(raw_ostream &OS, + uint32_t Version = std::numeric_limits::max()); +}; +} // namespace mcdxbc +} // namespace llvm diff --git a/llvm/include/llvm/Object/DXContainer.h b/llvm/include/llvm/Object/DXContainer.h index 8574a04027ce4..0e93a0f1d9615 100644 --- a/llvm/include/llvm/Object/DXContainer.h +++ b/llvm/include/llvm/Object/DXContainer.h @@ -22,6 +22,8 @@ #include "llvm/Support/MemoryBufferRef.h" #include "llvm/TargetParser/Triple.h" #include +#include +#include #include namespace llvm { @@ -116,6 +118,23 @@ template struct ViewArray { }; namespace DirectX { + +class RootSignature { +private: + StringRef Data; + uint32_t Version; + uint32_t Flags; + +public: + RootSignature(StringRef Data) : Data(Data) {} + + Error parse(); + + uint32_t getVersion() const { return Version; } + + uint32_t getFlags() const { return Flags; } +}; + class PSVRuntimeInfo { using ResourceArray = ViewArray; @@ -287,7 +306,7 @@ class DXContainer { std::optional ShaderFeatureFlags; std::optional Hash; std::optional PSVInfo; - std::optional RootSignature; + std::optional RootSignature; DirectX::Signature InputSignature; DirectX::Signature OutputSignature; DirectX::Signature PatchConstantSignature; @@ -384,7 +403,7 @@ class DXContainer { std::optional getShaderHash() const { return Hash; } - std::optional getRootSignature() const { + std::optional getRootSignature() const { return RootSignature; } diff --git a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h index 755c81541e5db..eb514c1976759 100644 --- a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h +++ b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h @@ -17,6 +17,7 @@ #include "llvm/ADT/StringRef.h" #include "llvm/BinaryFormat/DXContainer.h" +#include "llvm/Object/DXContainer.h" #include "llvm/ObjectYAML/YAML.h" #include "llvm/Support/YAMLTraits.h" #include @@ -75,7 +76,7 @@ struct ShaderHash { #define ROOT_ELEMENT_FLAG(Num, Val, Str) bool Val = false; struct RootSignatureDesc { RootSignatureDesc() = default; - RootSignatureDesc(const dxbc::RootSignatureDesc &Data); + RootSignatureDesc(const object::DirectX::RootSignature &Data); uint32_t getEncodedFlags(); uint32_t Version; diff --git a/llvm/lib/MC/CMakeLists.txt b/llvm/lib/MC/CMakeLists.txt index e1d19196c8766..f49f14c848b90 100644 --- a/llvm/lib/MC/CMakeLists.txt +++ b/llvm/lib/MC/CMakeLists.txt @@ -1,6 +1,7 @@ add_llvm_component_library(LLVMMC ConstantPools.cpp DXContainerPSVInfo.cpp + DXContainerRootSignature.cpp ELFObjectWriter.cpp GOFFObjectWriter.cpp MCAsmBackend.cpp diff --git a/llvm/lib/MC/DXContainerRootSignature.cpp b/llvm/lib/MC/DXContainerRootSignature.cpp new file mode 100644 index 0000000000000..331d5131fce7b --- /dev/null +++ b/llvm/lib/MC/DXContainerRootSignature.cpp @@ -0,0 +1,29 @@ +//===- llvm/MC/DXContainerRootSignature.cpp - DXContainer RootSignature -*- C++ +//-------*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "llvm/MC/DXContainerRootSignature.h" +#include "llvm/Support/EndianStream.h" +#include "llvm/Support/SwapByteOrder.h" +#include + +using namespace llvm; +using namespace llvm::mcdxbc; + +void RootSignatureHeader::write(raw_ostream &OS, uint32_t Version) { + + uint32_t SizeInfo = sizeof(this); + // support::endian::write(OS, SizeInfo, llvm::endianness::little); + + if (sys::IsBigEndianHost) { + sys::swapByteOrder(Version); + sys::swapByteOrder(Flags); + } + + OS.write(reinterpret_cast(this), SizeInfo); +} diff --git a/llvm/lib/Object/DXContainer.cpp b/llvm/lib/Object/DXContainer.cpp index 160844f73669a..3d67a7bc0a566 100644 --- a/llvm/lib/Object/DXContainer.cpp +++ b/llvm/lib/Object/DXContainer.cpp @@ -95,8 +95,8 @@ Error DXContainer::parseHash(StringRef Part) { Error DXContainer::parseRootSignature(StringRef Part) { if (RootSignature) return parseFailed("More than one RTS0 part is present in the file"); - dxbc::RootSignatureDesc Desc; - if (Error Err = readStruct(Part, Part.begin(), Desc)) + DirectX::RootSignature Desc(Part); + if (Error Err = Desc.parse()) return Err; RootSignature = Desc; return Error::success(); @@ -242,6 +242,20 @@ void DXContainer::PartIterator::updateIteratorImpl(const uint32_t Offset) { IteratorState.Offset = Offset; } +Error DirectX::RootSignature::parse() { + const char *Current = Data.begin(); + dxbc::RootSignatureDesc Desc; + if (Error Err = readStruct(Data, Current, Desc)) + return Err; + + if (sys::IsBigEndianHost) + Desc.swapBytes(); + + Version = Desc.Version; + Flags = Desc.Flags; + return Error::success(); +} + Error DirectX::PSVRuntimeInfo::parse(uint16_t ShaderKind) { Triple::EnvironmentType ShaderStage = dxbc::getShaderStage(ShaderKind); diff --git a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp index 3ac539c8e0853..0504f6b88a7db 100644 --- a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp +++ b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp @@ -13,6 +13,7 @@ #include "llvm/BinaryFormat/DXContainer.h" #include "llvm/MC/DXContainerPSVInfo.h" +#include "llvm/MC/DXContainerRootSignature.h" #include "llvm/ObjectYAML/ObjectYAML.h" #include "llvm/ObjectYAML/yaml2obj.h" #include "llvm/Support/Errc.h" @@ -264,13 +265,12 @@ void DXContainerWriter::writeParts(raw_ostream &OS) { case dxbc::PartType::RTS0: if (!P.RootSignature.has_value()) continue; - uint32_t Flags = P.RootSignature->getEncodedFlags(); - if (sys::IsBigEndianHost) - sys::swapByteOrder(Flags); - dxbc::RootSignatureDesc RS = {P.RootSignature->Version, Flags}; - if (sys::IsBigEndianHost) - RS.swapBytes(); - OS.write(reinterpret_cast(&RS), sizeof(dxbc::RootSignatureDesc)); + + mcdxbc::RootSignatureHeader Header; + Header.Version = P.RootSignature->Version; + Header.Flags = P.RootSignature->getEncodedFlags(); + + Header.write(OS); break; } uint64_t BytesWritten = OS.tell() - DataStart; diff --git a/llvm/lib/ObjectYAML/DXContainerYAML.cpp b/llvm/lib/ObjectYAML/DXContainerYAML.cpp index 0351239cac2c1..aeae3d9f3958a 100644 --- a/llvm/lib/ObjectYAML/DXContainerYAML.cpp +++ b/llvm/lib/ObjectYAML/DXContainerYAML.cpp @@ -14,6 +14,7 @@ #include "llvm/ObjectYAML/DXContainerYAML.h" #include "llvm/ADT/ScopeExit.h" #include "llvm/BinaryFormat/DXContainer.h" +#include "llvm/Object/DXContainer.h" #include "llvm/Support/ScopedPrinter.h" #include @@ -31,10 +32,11 @@ DXContainerYAML::ShaderFeatureFlags::ShaderFeatureFlags(uint64_t FlagData) { } DXContainerYAML::RootSignatureDesc::RootSignatureDesc( - const dxbc::RootSignatureDesc &Data) - : Version(Data.Version) { + const object::DirectX::RootSignature &Data) + : Version(Data.getVersion()) { + uint32_t Flags = Data.getFlags(); #define ROOT_ELEMENT_FLAG(Num, Val, Str) \ - Val = (Data.Flags & (uint32_t)dxbc::RootElementFlag::Val) > 0; + Val = (Flags & (uint32_t)dxbc::RootElementFlag::Val) > 0; #include "llvm/BinaryFormat/DXContainerConstants.def" } diff --git a/llvm/tools/obj2yaml/dxcontainer2yaml.cpp b/llvm/tools/obj2yaml/dxcontainer2yaml.cpp index 9588a8277dad7..54a912d9438af 100644 --- a/llvm/tools/obj2yaml/dxcontainer2yaml.cpp +++ b/llvm/tools/obj2yaml/dxcontainer2yaml.cpp @@ -154,7 +154,7 @@ dumpDXContainer(MemoryBufferRef Source) { case dxbc::PartType::Unknown: break; case dxbc::PartType::RTS0: - std::optional RS = Container.getRootSignature(); + std::optional RS = Container.getRootSignature(); if (RS.has_value()) NewPart.RootSignature = DXContainerYAML::RootSignatureDesc(*RS); break; From 1e7a1fe405d911d478b8ecdb886a4db33b201500 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Mon, 27 Jan 2025 21:13:51 +0000 Subject: [PATCH 14/29] addressing comments --- llvm/include/llvm/BinaryFormat/DXContainer.h | 31 +++++++++++++++++++ .../BinaryFormat/DXContainerConstants.def | 25 ++++++++++++++- .../llvm/MC/DXContainerRootSignature.h | 3 +- llvm/include/llvm/Object/DXContainer.h | 3 ++ .../include/llvm/ObjectYAML/DXContainerYAML.h | 5 +++ llvm/lib/MC/DXContainerRootSignature.cpp | 16 +++------- llvm/lib/Object/DXContainer.cpp | 21 +++++++------ llvm/lib/ObjectYAML/DXContainerYAML.cpp | 5 +-- .../DXContainer/RootSignature-Flags.yaml | 26 ++-------------- 9 files changed, 86 insertions(+), 49 deletions(-) diff --git a/llvm/include/llvm/BinaryFormat/DXContainer.h b/llvm/include/llvm/BinaryFormat/DXContainer.h index 605281df31ed4..dbe1aee97b174 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainer.h +++ b/llvm/include/llvm/BinaryFormat/DXContainer.h @@ -13,10 +13,12 @@ #ifndef LLVM_BINARYFORMAT_DXCONTAINER_H #define LLVM_BINARYFORMAT_DXCONTAINER_H +#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/SwapByteOrder.h" #include "llvm/TargetParser/Triple.h" +#include #include namespace llvm { @@ -63,10 +65,39 @@ struct ShaderHash { void swapBytes() { sys::swapByteOrder(Flags); } }; +#define ROOT_PARAMETER(RootParameter) RootParameter, +enum class RootParameterType { +#include "DXContainerConstants.def" +}; + +#define SHADER_VISIBILITY(ShaderVisibility) ShaderVisibility, +enum class ShaderVisibilityFlag { +#include "DXContainerConstants.def" +}; + +struct RootConstants { + uint32_t ShaderRegister; + uint32_t RegisterSpace; + uint32_t Num32BitValues; +}; + +struct RootParameter { + RootParameterType ParameterType; + union { + RootConstants Constants; + }; + ShaderVisibilityFlag ShaderVisibility; +}; + struct RootSignatureDesc { + uint32_t Size; uint32_t Version; uint32_t Flags; + uint32_t NumParameters; + RootParameter *Parameters; + void swapBytes() { + sys::swapByteOrder(Size); sys::swapByteOrder(Version); sys::swapByteOrder(Flags); } diff --git a/llvm/include/llvm/BinaryFormat/DXContainerConstants.def b/llvm/include/llvm/BinaryFormat/DXContainerConstants.def index 300d0dd2797c9..2134c2375f6d3 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainerConstants.def +++ b/llvm/include/llvm/BinaryFormat/DXContainerConstants.def @@ -53,8 +53,31 @@ SHADER_FEATURE_FLAG(31, 36, NextUnusedBit, "Next reserved shader flag bit (not a #undef SHADER_FEATURE_FLAG #endif // SHADER_FEATURE_FLAG -#ifdef ROOT_ELEMENT_FLAG +#ifdef ROOT_PARAMETER + +ROOT_PARAMETER(DescriptorTable) +ROOT_PARAMETER(Constants32Bit) +ROOT_PARAMETER(CBV) +ROOT_PARAMETER(SRV) +ROOT_PARAMETER(UAV) +#undef ROOT_PARAMETER +#endif // ROOT_PARAMETER + + +#ifdef SHADER_VISIBILITY + +SHADER_VISIBILITY(All) +SHADER_VISIBILITY(Vertex) +SHADER_VISIBILITY(Hull) +SHADER_VISIBILITY(Domain) +SHADER_VISIBILITY(Geometry) +SHADER_VISIBILITY(Pixel) +SHADER_VISIBILITY(Amplification) +SHADER_VISIBILITY(Mesh) +#undef SHADER_VISIBILITY +#endif // SHADER_VISIBILITY +#ifdef ROOT_ELEMENT_FLAG ROOT_ELEMENT_FLAG(0, AllowInputAssemblerInputLayout, "The app is opting in to using the Input Assembler") ROOT_ELEMENT_FLAG(1, DenyVertexShaderRootAccess, "Denies the vertex shader access to the root signature.") diff --git a/llvm/include/llvm/MC/DXContainerRootSignature.h b/llvm/include/llvm/MC/DXContainerRootSignature.h index 3926193697a49..d83ae28ffd692 100644 --- a/llvm/include/llvm/MC/DXContainerRootSignature.h +++ b/llvm/include/llvm/MC/DXContainerRootSignature.h @@ -20,8 +20,7 @@ struct RootSignatureHeader { uint32_t Flags; void swapBytes(); - void write(raw_ostream &OS, - uint32_t Version = std::numeric_limits::max()); + void write(raw_ostream &OS); }; } // namespace mcdxbc } // namespace llvm diff --git a/llvm/include/llvm/Object/DXContainer.h b/llvm/include/llvm/Object/DXContainer.h index 0e93a0f1d9615..07a3c872ac83d 100644 --- a/llvm/include/llvm/Object/DXContainer.h +++ b/llvm/include/llvm/Object/DXContainer.h @@ -122,6 +122,7 @@ namespace DirectX { class RootSignature { private: StringRef Data; + uint32_t Size; uint32_t Version; uint32_t Flags; @@ -130,6 +131,8 @@ class RootSignature { Error parse(); + uint32_t getSize() const { return Size; } + uint32_t getVersion() const { return Version; } uint32_t getFlags() const { return Flags; } diff --git a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h index eb514c1976759..e9b318faee295 100644 --- a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h +++ b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h @@ -15,6 +15,7 @@ #ifndef LLVM_OBJECTYAML_DXCONTAINERYAML_H #define LLVM_OBJECTYAML_DXCONTAINERYAML_H +#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/BinaryFormat/DXContainer.h" #include "llvm/Object/DXContainer.h" @@ -79,7 +80,11 @@ struct RootSignatureDesc { RootSignatureDesc(const object::DirectX::RootSignature &Data); uint32_t getEncodedFlags(); + uint32_t Size; uint32_t Version; + uint32_t NumParameters; + SmallVector Parameters; + #include "llvm/BinaryFormat/DXContainerConstants.def" }; diff --git a/llvm/lib/MC/DXContainerRootSignature.cpp b/llvm/lib/MC/DXContainerRootSignature.cpp index 331d5131fce7b..0bb87c2cc3832 100644 --- a/llvm/lib/MC/DXContainerRootSignature.cpp +++ b/llvm/lib/MC/DXContainerRootSignature.cpp @@ -1,5 +1,4 @@ -//===- llvm/MC/DXContainerRootSignature.cpp - DXContainer RootSignature -*- C++ -//-------*-===// +//===- llvm/MC/DXContainerRootSignature.cpp - RootSignature -*- C++ -*-=======// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -15,15 +14,10 @@ using namespace llvm; using namespace llvm::mcdxbc; -void RootSignatureHeader::write(raw_ostream &OS, uint32_t Version) { +void RootSignatureHeader::write(raw_ostream &OS) { uint32_t SizeInfo = sizeof(this); - // support::endian::write(OS, SizeInfo, llvm::endianness::little); - - if (sys::IsBigEndianHost) { - sys::swapByteOrder(Version); - sys::swapByteOrder(Flags); - } - - OS.write(reinterpret_cast(this), SizeInfo); + support::endian::write(OS, SizeInfo, llvm::endianness::little); + support::endian::write(OS, Version, llvm::endianness::little); + support::endian::write(OS, Flags, llvm::endianness::little); } diff --git a/llvm/lib/Object/DXContainer.cpp b/llvm/lib/Object/DXContainer.cpp index 3d67a7bc0a566..ffb0b6884831b 100644 --- a/llvm/lib/Object/DXContainer.cpp +++ b/llvm/lib/Object/DXContainer.cpp @@ -10,6 +10,7 @@ #include "llvm/BinaryFormat/DXContainer.h" #include "llvm/Object/Error.h" #include "llvm/Support/Alignment.h" +#include "llvm/Support/Endian.h" #include "llvm/Support/FormatVariadic.h" using namespace llvm; @@ -95,10 +96,9 @@ Error DXContainer::parseHash(StringRef Part) { Error DXContainer::parseRootSignature(StringRef Part) { if (RootSignature) return parseFailed("More than one RTS0 part is present in the file"); - DirectX::RootSignature Desc(Part); - if (Error Err = Desc.parse()) + RootSignature = DirectX::RootSignature(Part); + if (Error Err = RootSignature->parse()) return Err; - RootSignature = Desc; return Error::success(); } @@ -244,15 +244,16 @@ void DXContainer::PartIterator::updateIteratorImpl(const uint32_t Offset) { Error DirectX::RootSignature::parse() { const char *Current = Data.begin(); - dxbc::RootSignatureDesc Desc; - if (Error Err = readStruct(Data, Current, Desc)) - return Err; - if (sys::IsBigEndianHost) - Desc.swapBytes(); + Size = support::endian::read(Current); + Current += sizeof(uint32_t); + + Version = support::endian::read(Current); + Current += sizeof(uint32_t); + + Flags = support::endian::read(Current); + Current += sizeof(uint32_t); - Version = Desc.Version; - Flags = Desc.Flags; return Error::success(); } diff --git a/llvm/lib/ObjectYAML/DXContainerYAML.cpp b/llvm/lib/ObjectYAML/DXContainerYAML.cpp index aeae3d9f3958a..f3febcb09400f 100644 --- a/llvm/lib/ObjectYAML/DXContainerYAML.cpp +++ b/llvm/lib/ObjectYAML/DXContainerYAML.cpp @@ -33,7 +33,7 @@ DXContainerYAML::ShaderFeatureFlags::ShaderFeatureFlags(uint64_t FlagData) { DXContainerYAML::RootSignatureDesc::RootSignatureDesc( const object::DirectX::RootSignature &Data) - : Version(Data.getVersion()) { + : Size(Data.getSize()), Version(Data.getVersion()) { uint32_t Flags = Data.getFlags(); #define ROOT_ELEMENT_FLAG(Num, Val, Str) \ Val = (Flags & (uint32_t)dxbc::RootElementFlag::Val) > 0; @@ -210,8 +210,9 @@ void MappingTraits::mapping( void MappingTraits::mapping( IO &IO, DXContainerYAML::RootSignatureDesc &S) { + IO.mapRequired("Size", S.Size); IO.mapRequired("Version", S.Version); -#define ROOT_ELEMENT_FLAG(Num, Val, Str) IO.mapRequired(#Val, S.Val); +#define ROOT_ELEMENT_FLAG(Num, Val, Str) IO.mapOptional(#Val, S.Val, false); #include "llvm/BinaryFormat/DXContainerConstants.def" } diff --git a/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml b/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml index 8ce18d8e1aa4c..6c0ccda2e4ca5 100644 --- a/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml +++ b/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml @@ -12,33 +12,13 @@ Parts: - Name: RTS0 Size: 8 RootSignature: + Size: 8 Version: 1 AllowInputAssemblerInputLayout: true - DenyVertexShaderRootAccess: false - DenyHullShaderRootAccess: false - DenyDomainShaderRootAccess: false - DenyGeometryShaderRootAccess: false - DenyPixelShaderRootAccess: false - AllowStreamOutput: false - LocalRootSignature: false - DenyAmplificationShaderRootAccess: false - DenyMeshShaderRootAccess: false - CBVSRVUAVHeapDirectlyIndexed: false - SamplerHeapDirectlyIndexed: false - + #CHECK: - Name: RTS0 #CHECK-NEXT: Size: 8 #CHECK-NEXT: RootSignature: +#CHECK-NEXT: Size: 8 #CHECK-NEXT: Version: 1 #CHECK-NEXT: AllowInputAssemblerInputLayout: true -#CHECK-NEXT: DenyVertexShaderRootAccess: false -#CHECK-NEXT: DenyHullShaderRootAccess: false -#CHECK-NEXT: DenyDomainShaderRootAccess: false -#CHECK-NEXT: DenyGeometryShaderRootAccess: false -#CHECK-NEXT: DenyPixelShaderRootAccess: false -#CHECK-NEXT: AllowStreamOutput: false -#CHECK-NEXT: LocalRootSignature: false -#CHECK-NEXT: DenyAmplificationShaderRootAccess: false -#CHECK-NEXT: DenyMeshShaderRootAccess: false -#CHECK-NEXT: CBVSRVUAVHeapDirectlyIndexed: false -#CHECK-NEXT: SamplerHeapDirectlyIndexed: false From 0ed658a364305f1e315fa9b0c4caf9bbf40f45d9 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Mon, 27 Jan 2025 22:04:58 +0000 Subject: [PATCH 15/29] clean up --- llvm/include/llvm/BinaryFormat/DXContainer.h | 2 -- llvm/include/llvm/MC/DXContainerRootSignature.h | 3 +-- llvm/include/llvm/Object/DXContainer.h | 2 -- llvm/include/llvm/ObjectYAML/DXContainerYAML.h | 1 - llvm/lib/ObjectYAML/DXContainerYAML.cpp | 1 - 5 files changed, 1 insertion(+), 8 deletions(-) diff --git a/llvm/include/llvm/BinaryFormat/DXContainer.h b/llvm/include/llvm/BinaryFormat/DXContainer.h index dbe1aee97b174..9268c28dbc69d 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainer.h +++ b/llvm/include/llvm/BinaryFormat/DXContainer.h @@ -13,12 +13,10 @@ #ifndef LLVM_BINARYFORMAT_DXCONTAINER_H #define LLVM_BINARYFORMAT_DXCONTAINER_H -#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/SwapByteOrder.h" #include "llvm/TargetParser/Triple.h" -#include #include namespace llvm { diff --git a/llvm/include/llvm/MC/DXContainerRootSignature.h b/llvm/include/llvm/MC/DXContainerRootSignature.h index d83ae28ffd692..23de2709088c6 100644 --- a/llvm/include/llvm/MC/DXContainerRootSignature.h +++ b/llvm/include/llvm/MC/DXContainerRootSignature.h @@ -1,5 +1,4 @@ -//===- llvm/MC/DXContainerRootSignature.h - DXContainer RootSignature -*- C++ -//-------*-===// +//===- llvm/MC/DXContainerRootSignature.h - RootSignature -*- C++ -*- ========// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. diff --git a/llvm/include/llvm/Object/DXContainer.h b/llvm/include/llvm/Object/DXContainer.h index 07a3c872ac83d..290fbd6999186 100644 --- a/llvm/include/llvm/Object/DXContainer.h +++ b/llvm/include/llvm/Object/DXContainer.h @@ -22,8 +22,6 @@ #include "llvm/Support/MemoryBufferRef.h" #include "llvm/TargetParser/Triple.h" #include -#include -#include #include namespace llvm { diff --git a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h index e9b318faee295..6b01f105a544b 100644 --- a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h +++ b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h @@ -15,7 +15,6 @@ #ifndef LLVM_OBJECTYAML_DXCONTAINERYAML_H #define LLVM_OBJECTYAML_DXCONTAINERYAML_H -#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/BinaryFormat/DXContainer.h" #include "llvm/Object/DXContainer.h" diff --git a/llvm/lib/ObjectYAML/DXContainerYAML.cpp b/llvm/lib/ObjectYAML/DXContainerYAML.cpp index f3febcb09400f..985546872a8b3 100644 --- a/llvm/lib/ObjectYAML/DXContainerYAML.cpp +++ b/llvm/lib/ObjectYAML/DXContainerYAML.cpp @@ -16,7 +16,6 @@ #include "llvm/BinaryFormat/DXContainer.h" #include "llvm/Object/DXContainer.h" #include "llvm/Support/ScopedPrinter.h" -#include namespace llvm { From 932062e69fd910b8432d49e11f614f2634f64e2f Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Thu, 30 Jan 2025 22:43:23 +0000 Subject: [PATCH 16/29] remove version --- llvm/include/llvm/MC/DXContainerRootSignature.h | 1 - llvm/include/llvm/Object/DXContainer.h | 3 --- llvm/include/llvm/ObjectYAML/DXContainerYAML.h | 1 - llvm/lib/MC/DXContainerRootSignature.cpp | 1 - llvm/lib/Object/DXContainer.cpp | 3 --- llvm/lib/ObjectYAML/DXContainerEmitter.cpp | 1 - llvm/lib/ObjectYAML/DXContainerYAML.cpp | 3 +-- llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml | 2 -- 8 files changed, 1 insertion(+), 14 deletions(-) diff --git a/llvm/include/llvm/MC/DXContainerRootSignature.h b/llvm/include/llvm/MC/DXContainerRootSignature.h index 23de2709088c6..20b4f5a4285f6 100644 --- a/llvm/include/llvm/MC/DXContainerRootSignature.h +++ b/llvm/include/llvm/MC/DXContainerRootSignature.h @@ -15,7 +15,6 @@ class raw_ostream; namespace mcdxbc { struct RootSignatureHeader { - uint32_t Version; uint32_t Flags; void swapBytes(); diff --git a/llvm/include/llvm/Object/DXContainer.h b/llvm/include/llvm/Object/DXContainer.h index 290fbd6999186..5f7737d2fa41d 100644 --- a/llvm/include/llvm/Object/DXContainer.h +++ b/llvm/include/llvm/Object/DXContainer.h @@ -121,7 +121,6 @@ class RootSignature { private: StringRef Data; uint32_t Size; - uint32_t Version; uint32_t Flags; public: @@ -131,8 +130,6 @@ class RootSignature { uint32_t getSize() const { return Size; } - uint32_t getVersion() const { return Version; } - uint32_t getFlags() const { return Flags; } }; diff --git a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h index 6b01f105a544b..9b3259f3bf6c6 100644 --- a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h +++ b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h @@ -80,7 +80,6 @@ struct RootSignatureDesc { uint32_t getEncodedFlags(); uint32_t Size; - uint32_t Version; uint32_t NumParameters; SmallVector Parameters; diff --git a/llvm/lib/MC/DXContainerRootSignature.cpp b/llvm/lib/MC/DXContainerRootSignature.cpp index 0bb87c2cc3832..4e085654a1e5e 100644 --- a/llvm/lib/MC/DXContainerRootSignature.cpp +++ b/llvm/lib/MC/DXContainerRootSignature.cpp @@ -18,6 +18,5 @@ void RootSignatureHeader::write(raw_ostream &OS) { uint32_t SizeInfo = sizeof(this); support::endian::write(OS, SizeInfo, llvm::endianness::little); - support::endian::write(OS, Version, llvm::endianness::little); support::endian::write(OS, Flags, llvm::endianness::little); } diff --git a/llvm/lib/Object/DXContainer.cpp b/llvm/lib/Object/DXContainer.cpp index ffb0b6884831b..6743911059cfd 100644 --- a/llvm/lib/Object/DXContainer.cpp +++ b/llvm/lib/Object/DXContainer.cpp @@ -248,9 +248,6 @@ Error DirectX::RootSignature::parse() { Size = support::endian::read(Current); Current += sizeof(uint32_t); - Version = support::endian::read(Current); - Current += sizeof(uint32_t); - Flags = support::endian::read(Current); Current += sizeof(uint32_t); diff --git a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp index 0504f6b88a7db..ada7383ea3c6b 100644 --- a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp +++ b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp @@ -267,7 +267,6 @@ void DXContainerWriter::writeParts(raw_ostream &OS) { continue; mcdxbc::RootSignatureHeader Header; - Header.Version = P.RootSignature->Version; Header.Flags = P.RootSignature->getEncodedFlags(); Header.write(OS); diff --git a/llvm/lib/ObjectYAML/DXContainerYAML.cpp b/llvm/lib/ObjectYAML/DXContainerYAML.cpp index 985546872a8b3..fd85d75dc32eb 100644 --- a/llvm/lib/ObjectYAML/DXContainerYAML.cpp +++ b/llvm/lib/ObjectYAML/DXContainerYAML.cpp @@ -32,7 +32,7 @@ DXContainerYAML::ShaderFeatureFlags::ShaderFeatureFlags(uint64_t FlagData) { DXContainerYAML::RootSignatureDesc::RootSignatureDesc( const object::DirectX::RootSignature &Data) - : Size(Data.getSize()), Version(Data.getVersion()) { + : Size(Data.getSize()) { uint32_t Flags = Data.getFlags(); #define ROOT_ELEMENT_FLAG(Num, Val, Str) \ Val = (Flags & (uint32_t)dxbc::RootElementFlag::Val) > 0; @@ -210,7 +210,6 @@ void MappingTraits::mapping( void MappingTraits::mapping( IO &IO, DXContainerYAML::RootSignatureDesc &S) { IO.mapRequired("Size", S.Size); - IO.mapRequired("Version", S.Version); #define ROOT_ELEMENT_FLAG(Num, Val, Str) IO.mapOptional(#Val, S.Val, false); #include "llvm/BinaryFormat/DXContainerConstants.def" } diff --git a/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml b/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml index 6c0ccda2e4ca5..6f10bd2f74b46 100644 --- a/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml +++ b/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml @@ -13,12 +13,10 @@ Parts: Size: 8 RootSignature: Size: 8 - Version: 1 AllowInputAssemblerInputLayout: true #CHECK: - Name: RTS0 #CHECK-NEXT: Size: 8 #CHECK-NEXT: RootSignature: #CHECK-NEXT: Size: 8 -#CHECK-NEXT: Version: 1 #CHECK-NEXT: AllowInputAssemblerInputLayout: true From 628937c1d268008ea8f7414e35f29171d207c5c9 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Thu, 30 Jan 2025 22:53:12 +0000 Subject: [PATCH 17/29] fix pr --- llvm/include/llvm/BinaryFormat/DXContainer.h | 28 ------------------- .../include/llvm/ObjectYAML/DXContainerYAML.h | 2 -- 2 files changed, 30 deletions(-) diff --git a/llvm/include/llvm/BinaryFormat/DXContainer.h b/llvm/include/llvm/BinaryFormat/DXContainer.h index 9268c28dbc69d..71a6d15e46a81 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainer.h +++ b/llvm/include/llvm/BinaryFormat/DXContainer.h @@ -63,40 +63,12 @@ struct ShaderHash { void swapBytes() { sys::swapByteOrder(Flags); } }; -#define ROOT_PARAMETER(RootParameter) RootParameter, -enum class RootParameterType { -#include "DXContainerConstants.def" -}; - -#define SHADER_VISIBILITY(ShaderVisibility) ShaderVisibility, -enum class ShaderVisibilityFlag { -#include "DXContainerConstants.def" -}; - -struct RootConstants { - uint32_t ShaderRegister; - uint32_t RegisterSpace; - uint32_t Num32BitValues; -}; - -struct RootParameter { - RootParameterType ParameterType; - union { - RootConstants Constants; - }; - ShaderVisibilityFlag ShaderVisibility; -}; - struct RootSignatureDesc { uint32_t Size; - uint32_t Version; uint32_t Flags; - uint32_t NumParameters; - RootParameter *Parameters; void swapBytes() { sys::swapByteOrder(Size); - sys::swapByteOrder(Version); sys::swapByteOrder(Flags); } }; diff --git a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h index 9b3259f3bf6c6..a82083fa18de6 100644 --- a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h +++ b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h @@ -80,8 +80,6 @@ struct RootSignatureDesc { uint32_t getEncodedFlags(); uint32_t Size; - uint32_t NumParameters; - SmallVector Parameters; #include "llvm/BinaryFormat/DXContainerConstants.def" }; From 1378c9fda2cbbd66267496b9ce8394cc29f9945c Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Fri, 31 Jan 2025 07:04:08 +0000 Subject: [PATCH 18/29] adding dxil-dis test --- .../DXContainer/RootSignature-Flags.yaml | 194 +++++++++++++++++- 1 file changed, 191 insertions(+), 3 deletions(-) diff --git a/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml b/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml index 6f10bd2f74b46..bcb04c2c9edd9 100644 --- a/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml +++ b/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml @@ -1,4 +1,6 @@ # RUN: yaml2obj %s | obj2yaml | FileCheck %s +# RUN: yaml2obj %s | dxil-dis | FileCheck %s --check-prefix=DXC + --- !dxcontainer Header: Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -6,17 +8,203 @@ Header: Version: Major: 1 Minor: 0 - PartCount: 1 - PartOffsets: [ 60 ] + PartCount: 2 + PartOffsets: [ 60, 1496 ] Parts: + - Name: DXIL + Size: 1428 + Program: + MajorVersion: 6 + MinorVersion: 0 + ShaderKind: 5 + Size: 357 + DXILMajorVersion: 1 + DXILMinorVersion: 0 + DXILSize: 1404 + DXIL: [ 0x42, 0x43, 0xC0, 0xDE, 0x21, 0xC, 0x0, 0x0, 0x5C, + 0x1, 0x0, 0x0, 0xB, 0x82, 0x20, 0x0, 0x2, 0x0, + 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x7, 0x81, 0x23, + 0x91, 0x41, 0xC8, 0x4, 0x49, 0x6, 0x10, 0x32, + 0x39, 0x92, 0x1, 0x84, 0xC, 0x25, 0x5, 0x8, 0x19, + 0x1E, 0x4, 0x8B, 0x62, 0x80, 0x10, 0x45, 0x2, + 0x42, 0x92, 0xB, 0x42, 0x84, 0x10, 0x32, 0x14, + 0x38, 0x8, 0x18, 0x4B, 0xA, 0x32, 0x42, 0x88, + 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xA5, + 0x0, 0x19, 0x32, 0x42, 0xE4, 0x48, 0xE, 0x90, + 0x11, 0x22, 0xC4, 0x50, 0x41, 0x51, 0x81, 0x8C, + 0xE1, 0x83, 0xE5, 0x8A, 0x4, 0x21, 0x46, 0x6, + 0x89, 0x20, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0x32, + 0x22, 0x8, 0x9, 0x20, 0x64, 0x85, 0x4, 0x13, 0x22, + 0xA4, 0x84, 0x4, 0x13, 0x22, 0xE3, 0x84, 0xA1, + 0x90, 0x14, 0x12, 0x4C, 0x88, 0x8C, 0xB, 0x84, + 0x84, 0x4C, 0x10, 0x20, 0x73, 0x4, 0x8, 0xC1, + 0x65, 0xC3, 0x85, 0x2C, 0xE8, 0x3, 0x40, 0x14, + 0x91, 0x4E, 0xD1, 0x4A, 0x48, 0x44, 0x54, 0x11, + 0xC3, 0x9, 0x30, 0xC4, 0x18, 0x1, 0x30, 0x2, 0x50, + 0x82, 0x21, 0x1A, 0x8, 0x98, 0x23, 0x0, 0x3, 0x0, + 0x13, 0x14, 0x72, 0xC0, 0x87, 0x74, 0x60, 0x87, + 0x36, 0x68, 0x87, 0x79, 0x68, 0x3, 0x72, 0xC0, + 0x87, 0xD, 0xAE, 0x50, 0xE, 0x6D, 0xD0, 0xE, 0x7A, + 0x50, 0xE, 0x6D, 0x0, 0xF, 0x7A, 0x30, 0x7, 0x72, + 0xA0, 0x7, 0x73, 0x20, 0x7, 0x6D, 0x90, 0xE, 0x71, + 0xA0, 0x7, 0x73, 0x20, 0x7, 0x6D, 0x90, 0xE, 0x78, + 0xA0, 0x7, 0x78, 0xD0, 0x6, 0xE9, 0x10, 0x7, 0x76, + 0xA0, 0x7, 0x71, 0x60, 0x7, 0x6D, 0x90, 0xE, 0x73, + 0x20, 0x7, 0x7A, 0x30, 0x7, 0x72, 0xD0, 0x6, 0xE9, + 0x60, 0x7, 0x74, 0xA0, 0x7, 0x76, 0x40, 0x7, 0x6D, + 0x60, 0xE, 0x71, 0x60, 0x7, 0x7A, 0x10, 0x7, 0x76, + 0xD0, 0x6, 0xE6, 0x30, 0x7, 0x72, 0xA0, 0x7, 0x73, + 0x20, 0x7, 0x6D, 0x60, 0xE, 0x76, 0x40, 0x7, 0x7A, + 0x60, 0x7, 0x74, 0xD0, 0x6, 0xEE, 0x80, 0x7, 0x7A, + 0x10, 0x7, 0x76, 0xA0, 0x7, 0x73, 0x20, 0x7, 0x7A, + 0x60, 0x7, 0x74, 0x30, 0xE4, 0x21, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0xB, + 0x4, 0x6, 0x0, 0x0, 0x0, 0x32, 0x1E, 0x98, 0xC, + 0x19, 0x11, 0x4C, 0x90, 0x8C, 0x9, 0x26, 0x47, + 0xC6, 0x4, 0x43, 0xBA, 0x12, 0x28, 0x86, 0x11, + 0x80, 0x42, 0x0, 0x0, 0x79, 0x18, 0x0, 0x0, 0xCB, + 0x0, 0x0, 0x0, 0x33, 0x8, 0x80, 0x1C, 0xC4, 0xE1, + 0x1C, 0x66, 0x14, 0x1, 0x3D, 0x88, 0x43, 0x38, + 0x84, 0xC3, 0x8C, 0x42, 0x80, 0x7, 0x79, 0x78, + 0x7, 0x73, 0x98, 0x71, 0xC, 0xE6, 0x0, 0xF, 0xED, + 0x10, 0xE, 0xF4, 0x80, 0xE, 0x33, 0xC, 0x42, 0x1E, + 0xC2, 0xC1, 0x1D, 0xCE, 0xA1, 0x1C, 0x66, 0x30, + 0x5, 0x3D, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1B, + 0xCC, 0x3, 0x3D, 0xC8, 0x43, 0x3D, 0x8C, 0x3, + 0x3D, 0xCC, 0x78, 0x8C, 0x74, 0x70, 0x7, 0x7B, + 0x8, 0x7, 0x79, 0x48, 0x87, 0x70, 0x70, 0x7, 0x7A, + 0x70, 0x3, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, + 0x19, 0xCC, 0x11, 0xE, 0xEC, 0x90, 0xE, 0xE1, + 0x30, 0xF, 0x6E, 0x30, 0xF, 0xE3, 0xF0, 0xE, 0xF0, + 0x50, 0xE, 0x33, 0x10, 0xC4, 0x1D, 0xDE, 0x21, + 0x1C, 0xD8, 0x21, 0x1D, 0xC2, 0x61, 0x1E, 0x66, + 0x30, 0x89, 0x3B, 0xBC, 0x83, 0x3B, 0xD0, 0x43, + 0x39, 0xB4, 0x3, 0x3C, 0xBC, 0x83, 0x3C, 0x84, + 0x3, 0x3B, 0xCC, 0xF0, 0x14, 0x76, 0x60, 0x7, + 0x7B, 0x68, 0x7, 0x37, 0x68, 0x87, 0x72, 0x68, + 0x7, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, + 0x60, 0x7, 0x76, 0x28, 0x7, 0x76, 0xF8, 0x5, 0x76, + 0x78, 0x87, 0x77, 0x80, 0x87, 0x5F, 0x8, 0x87, + 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, + 0x81, 0x2C, 0xEE, 0xF0, 0xE, 0xEE, 0xE0, 0xE, + 0xF5, 0xC0, 0xE, 0xEC, 0x30, 0x3, 0x62, 0xC8, + 0xA1, 0x1C, 0xE4, 0xA1, 0x1C, 0xCC, 0xA1, 0x1C, + 0xE4, 0xA1, 0x1C, 0xDC, 0x61, 0x1C, 0xCA, 0x21, + 0x1C, 0xC4, 0x81, 0x1D, 0xCA, 0x61, 0x6, 0xD6, + 0x90, 0x43, 0x39, 0xC8, 0x43, 0x39, 0x98, 0x43, + 0x39, 0xC8, 0x43, 0x39, 0xB8, 0xC3, 0x38, 0x94, + 0x43, 0x38, 0x88, 0x3, 0x3B, 0x94, 0xC3, 0x2F, + 0xBC, 0x83, 0x3C, 0xFC, 0x82, 0x3B, 0xD4, 0x3, + 0x3B, 0xB0, 0xC3, 0xC, 0xC7, 0x69, 0x87, 0x70, + 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x7, + 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xA0, + 0x87, 0x19, 0xCE, 0x53, 0xF, 0xEE, 0x0, 0xF, 0xF2, + 0x50, 0xE, 0xE4, 0x90, 0xE, 0xE3, 0x40, 0xF, 0xE1, + 0x20, 0xE, 0xEC, 0x50, 0xE, 0x33, 0x20, 0x28, + 0x1D, 0xDC, 0xC1, 0x1E, 0xC2, 0x41, 0x1E, 0xD2, + 0x21, 0x1C, 0xDC, 0x81, 0x1E, 0xDC, 0xE0, 0x1C, + 0xE4, 0xE1, 0x1D, 0xEA, 0x1, 0x1E, 0x66, 0x18, + 0x51, 0x38, 0xB0, 0x43, 0x3A, 0x9C, 0x83, 0x3B, + 0xCC, 0x50, 0x24, 0x76, 0x60, 0x7, 0x7B, 0x68, + 0x7, 0x37, 0x60, 0x87, 0x77, 0x78, 0x7, 0x78, + 0x98, 0x51, 0x4C, 0xF4, 0x90, 0xF, 0xF0, 0x50, + 0xE, 0x33, 0x1E, 0x6A, 0x1E, 0xCA, 0x61, 0x1C, + 0xE8, 0x21, 0x1D, 0xDE, 0xC1, 0x1D, 0x7E, 0x1, + 0x1E, 0xE4, 0xA1, 0x1C, 0xCC, 0x21, 0x1D, 0xF0, + 0x61, 0x6, 0x54, 0x85, 0x83, 0x38, 0xCC, 0xC3, + 0x3B, 0xB0, 0x43, 0x3D, 0xD0, 0x43, 0x39, 0xFC, + 0xC2, 0x3C, 0xE4, 0x43, 0x3B, 0x88, 0xC3, 0x3B, + 0xB0, 0xC3, 0x8C, 0xC5, 0xA, 0x87, 0x79, 0x98, + 0x87, 0x77, 0x18, 0x87, 0x74, 0x8, 0x7, 0x7A, + 0x28, 0x7, 0x72, 0x98, 0x81, 0x5C, 0xE3, 0x10, + 0xE, 0xEC, 0xC0, 0xE, 0xE5, 0x50, 0xE, 0xF3, 0x30, + 0x23, 0xC1, 0xD2, 0x41, 0x1E, 0xE4, 0xE1, 0x17, + 0xD8, 0xE1, 0x1D, 0xDE, 0x1, 0x1E, 0x66, 0x48, + 0x19, 0x3B, 0xB0, 0x83, 0x3D, 0xB4, 0x83, 0x1B, + 0x84, 0xC3, 0x38, 0x8C, 0x43, 0x39, 0xCC, 0xC3, + 0x3C, 0xB8, 0xC1, 0x39, 0xC8, 0xC3, 0x3B, 0xD4, + 0x3, 0x3C, 0xCC, 0x48, 0xB4, 0x71, 0x8, 0x7, 0x76, + 0x60, 0x7, 0x71, 0x8, 0x87, 0x71, 0x58, 0x87, + 0x19, 0xDB, 0xC6, 0xE, 0xEC, 0x60, 0xF, 0xED, + 0xE0, 0x6, 0xF0, 0x20, 0xF, 0xE5, 0x30, 0xF, 0xE5, + 0x20, 0xF, 0xF6, 0x50, 0xE, 0x6E, 0x10, 0xE, 0xE3, + 0x30, 0xE, 0xE5, 0x30, 0xF, 0xF3, 0xE0, 0x6, 0xE9, + 0xE0, 0xE, 0xE4, 0x50, 0xE, 0xF8, 0x30, 0x23, + 0xE2, 0xEC, 0x61, 0x1C, 0xC2, 0x81, 0x1D, 0xD8, + 0xE1, 0x17, 0xEC, 0x21, 0x1D, 0xE6, 0x21, 0x1D, + 0xC4, 0x21, 0x1D, 0xD8, 0x21, 0x1D, 0xE8, 0x21, + 0x1F, 0x66, 0x20, 0x9D, 0x3B, 0xBC, 0x43, 0x3D, + 0xB8, 0x3, 0x39, 0x94, 0x83, 0x39, 0xCC, 0x58, + 0xBC, 0x70, 0x70, 0x7, 0x77, 0x78, 0x7, 0x7A, + 0x8, 0x7, 0x7A, 0x48, 0x87, 0x77, 0x70, 0x87, + 0x19, 0xCB, 0xE7, 0xE, 0xEF, 0x30, 0xF, 0xE1, + 0xE0, 0xE, 0xE9, 0x40, 0xF, 0xE9, 0xA0, 0xF, 0xE5, + 0x30, 0xC3, 0x1, 0x3, 0x73, 0xA8, 0x7, 0x77, 0x18, + 0x87, 0x5F, 0x98, 0x87, 0x70, 0x70, 0x87, 0x74, + 0xA0, 0x87, 0x74, 0xD0, 0x87, 0x72, 0x98, 0x81, + 0x84, 0x41, 0x39, 0xE0, 0xC3, 0x38, 0xB0, 0x43, + 0x3D, 0x90, 0x43, 0x39, 0xCC, 0x40, 0xC4, 0xA0, + 0x1D, 0xCA, 0xA1, 0x1D, 0xE0, 0x41, 0x1E, 0xDE, + 0xC1, 0x1C, 0x66, 0x24, 0x63, 0x30, 0xE, 0xE1, + 0xC0, 0xE, 0xEC, 0x30, 0xF, 0xE9, 0x40, 0xF, 0xE5, + 0x30, 0x43, 0x21, 0x83, 0x75, 0x18, 0x7, 0x73, + 0x48, 0x87, 0x5F, 0xA0, 0x87, 0x7C, 0x80, 0x87, + 0x72, 0x98, 0xB1, 0x94, 0x1, 0x3C, 0x8C, 0xC3, + 0x3C, 0x94, 0xC3, 0x38, 0xD0, 0x43, 0x3A, 0xBC, + 0x83, 0x3B, 0xCC, 0xC3, 0x8C, 0xC5, 0xC, 0x48, + 0x21, 0x15, 0x42, 0x61, 0x1E, 0xE6, 0x21, 0x1D, + 0xCE, 0xC1, 0x1D, 0x52, 0x81, 0x14, 0x66, 0x4C, + 0x67, 0x30, 0xE, 0xEF, 0x20, 0xF, 0xEF, 0xE0, + 0x6, 0xEF, 0x50, 0xF, 0xF4, 0x30, 0xF, 0xE9, 0x40, + 0xE, 0xE5, 0xE0, 0x6, 0xE6, 0x20, 0xF, 0xE1, 0xD0, + 0xE, 0xE5, 0x30, 0xA3, 0x40, 0x83, 0x76, 0x68, + 0x7, 0x79, 0x8, 0x87, 0x19, 0x52, 0x1A, 0xB8, + 0xC3, 0x3B, 0x84, 0x3, 0x3B, 0xA4, 0x43, 0x38, + 0xCC, 0x83, 0x1B, 0x84, 0x3, 0x39, 0x90, 0x83, + 0x3C, 0xCC, 0x3, 0x3C, 0x84, 0xC3, 0x38, 0x94, + 0x3, 0x0, 0x0, 0x0, 0x0, 0x79, 0x28, 0x0, 0x0, + 0x2A, 0x0, 0x0, 0x0, 0xC2, 0x3C, 0x90, 0x40, 0x86, + 0x10, 0x19, 0x32, 0xE2, 0x64, 0x90, 0x40, 0x46, + 0x2, 0x19, 0x23, 0x23, 0x46, 0x2, 0x13, 0x24, + 0xC6, 0x0, 0x13, 0x74, 0x12, 0xA9, 0xB7, 0x37, + 0x3A, 0x23, 0xB6, 0xB0, 0xB3, 0xB9, 0x23, 0x8C, + 0xCD, 0x1D, 0xA2, 0x2D, 0x2C, 0xCD, 0x6D, 0x8, + 0x42, 0x1, 0xC, 0x41, 0x38, 0x82, 0x21, 0x8, 0x87, + 0x30, 0x4, 0xE1, 0x18, 0x86, 0x20, 0x1C, 0xC4, + 0x18, 0x84, 0xA0, 0x18, 0x43, 0x90, 0x8C, 0x41, + 0x20, 0x94, 0x31, 0xC, 0x82, 0x71, 0x8C, 0x41, + 0x28, 0x8E, 0x31, 0xC, 0x45, 0x51, 0x8C, 0x41, + 0x40, 0x9C, 0x31, 0x14, 0xC4, 0x0, 0x0, 0x8F, + 0x89, 0xC8, 0xF0, 0x5C, 0xE4, 0xDE, 0xDE, 0xE8, + 0xE6, 0xD2, 0xCE, 0xDC, 0xC2, 0xE8, 0xEA, 0xE4, + 0xCA, 0xE6, 0x86, 0x12, 0x28, 0xC6, 0x21, 0xC3, + 0x73, 0x99, 0x43, 0xB, 0x23, 0x2B, 0x93, 0x6B, + 0x7A, 0x23, 0x2B, 0x63, 0x1B, 0x4A, 0xB0, 0x18, + 0x85, 0xC, 0xCF, 0xC5, 0xAE, 0x4C, 0x6E, 0x2E, + 0xED, 0xCD, 0x6D, 0x28, 0x1, 0x63, 0x1C, 0x32, + 0x3C, 0x97, 0x32, 0x37, 0x3A, 0xB9, 0x3C, 0xA8, + 0xB7, 0x34, 0x37, 0xBA, 0xB9, 0xA1, 0x4, 0xF, + 0x0, 0x0, 0x71, 0x20, 0x0, 0x0, 0x2, 0x0, 0x0, + 0x0, 0x6, 0x40, 0x30, 0x0, 0xD2, 0x0, 0x0, 0x0, + 0x61, 0x20, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x13, + 0x4, 0x1, 0x86, 0x3, 0x1, 0x0, 0x0, 0x2, 0x0, + 0x0, 0x0, 0x7, 0x50, 0x10, 0xCD, 0x14, 0x61, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ] - Name: RTS0 Size: 8 RootSignature: Size: 8 AllowInputAssemblerInputLayout: true - + + + #CHECK: - Name: RTS0 #CHECK-NEXT: Size: 8 #CHECK-NEXT: RootSignature: #CHECK-NEXT: Size: 8 #CHECK-NEXT: AllowInputAssemblerInputLayout: true + +# DXC: !dx.rootsignatures = !{[[RS:![0-9]+]]} +# DXC: [[RS]] = !{void ()* @main, [[REL:![0-9]+]]} +# DXC: [[REL]] = !{[[RF:![0-9]+]]} +# DXC: [[RF]] = !{!"RootFlags", i32 1} From e3206c9daf0bb601cf03c490c23c483dd7a56e14 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Fri, 31 Jan 2025 22:53:06 +0000 Subject: [PATCH 19/29] adding compatibility test --- .../DXContainer/RootSignature-Flags.yaml | 191 +---------------- llvm/test/tools/dxil-dis/lit.local.cfg | 2 +- llvm/test/tools/dxil-dis/root-signature.yaml | 201 ++++++++++++++++++ 3 files changed, 204 insertions(+), 190 deletions(-) create mode 100644 llvm/test/tools/dxil-dis/root-signature.yaml diff --git a/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml b/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml index bcb04c2c9edd9..e3ca7347d52c7 100644 --- a/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml +++ b/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml @@ -1,5 +1,4 @@ # RUN: yaml2obj %s | obj2yaml | FileCheck %s -# RUN: yaml2obj %s | dxil-dis | FileCheck %s --check-prefix=DXC --- !dxcontainer Header: @@ -8,203 +7,17 @@ Header: Version: Major: 1 Minor: 0 - PartCount: 2 - PartOffsets: [ 60, 1496 ] + PartCount: 1 + PartOffsets: [ 60 ] Parts: - - Name: DXIL - Size: 1428 - Program: - MajorVersion: 6 - MinorVersion: 0 - ShaderKind: 5 - Size: 357 - DXILMajorVersion: 1 - DXILMinorVersion: 0 - DXILSize: 1404 - DXIL: [ 0x42, 0x43, 0xC0, 0xDE, 0x21, 0xC, 0x0, 0x0, 0x5C, - 0x1, 0x0, 0x0, 0xB, 0x82, 0x20, 0x0, 0x2, 0x0, - 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x7, 0x81, 0x23, - 0x91, 0x41, 0xC8, 0x4, 0x49, 0x6, 0x10, 0x32, - 0x39, 0x92, 0x1, 0x84, 0xC, 0x25, 0x5, 0x8, 0x19, - 0x1E, 0x4, 0x8B, 0x62, 0x80, 0x10, 0x45, 0x2, - 0x42, 0x92, 0xB, 0x42, 0x84, 0x10, 0x32, 0x14, - 0x38, 0x8, 0x18, 0x4B, 0xA, 0x32, 0x42, 0x88, - 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xA5, - 0x0, 0x19, 0x32, 0x42, 0xE4, 0x48, 0xE, 0x90, - 0x11, 0x22, 0xC4, 0x50, 0x41, 0x51, 0x81, 0x8C, - 0xE1, 0x83, 0xE5, 0x8A, 0x4, 0x21, 0x46, 0x6, - 0x89, 0x20, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0x32, - 0x22, 0x8, 0x9, 0x20, 0x64, 0x85, 0x4, 0x13, 0x22, - 0xA4, 0x84, 0x4, 0x13, 0x22, 0xE3, 0x84, 0xA1, - 0x90, 0x14, 0x12, 0x4C, 0x88, 0x8C, 0xB, 0x84, - 0x84, 0x4C, 0x10, 0x20, 0x73, 0x4, 0x8, 0xC1, - 0x65, 0xC3, 0x85, 0x2C, 0xE8, 0x3, 0x40, 0x14, - 0x91, 0x4E, 0xD1, 0x4A, 0x48, 0x44, 0x54, 0x11, - 0xC3, 0x9, 0x30, 0xC4, 0x18, 0x1, 0x30, 0x2, 0x50, - 0x82, 0x21, 0x1A, 0x8, 0x98, 0x23, 0x0, 0x3, 0x0, - 0x13, 0x14, 0x72, 0xC0, 0x87, 0x74, 0x60, 0x87, - 0x36, 0x68, 0x87, 0x79, 0x68, 0x3, 0x72, 0xC0, - 0x87, 0xD, 0xAE, 0x50, 0xE, 0x6D, 0xD0, 0xE, 0x7A, - 0x50, 0xE, 0x6D, 0x0, 0xF, 0x7A, 0x30, 0x7, 0x72, - 0xA0, 0x7, 0x73, 0x20, 0x7, 0x6D, 0x90, 0xE, 0x71, - 0xA0, 0x7, 0x73, 0x20, 0x7, 0x6D, 0x90, 0xE, 0x78, - 0xA0, 0x7, 0x78, 0xD0, 0x6, 0xE9, 0x10, 0x7, 0x76, - 0xA0, 0x7, 0x71, 0x60, 0x7, 0x6D, 0x90, 0xE, 0x73, - 0x20, 0x7, 0x7A, 0x30, 0x7, 0x72, 0xD0, 0x6, 0xE9, - 0x60, 0x7, 0x74, 0xA0, 0x7, 0x76, 0x40, 0x7, 0x6D, - 0x60, 0xE, 0x71, 0x60, 0x7, 0x7A, 0x10, 0x7, 0x76, - 0xD0, 0x6, 0xE6, 0x30, 0x7, 0x72, 0xA0, 0x7, 0x73, - 0x20, 0x7, 0x6D, 0x60, 0xE, 0x76, 0x40, 0x7, 0x7A, - 0x60, 0x7, 0x74, 0xD0, 0x6, 0xEE, 0x80, 0x7, 0x7A, - 0x10, 0x7, 0x76, 0xA0, 0x7, 0x73, 0x20, 0x7, 0x7A, - 0x60, 0x7, 0x74, 0x30, 0xE4, 0x21, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0xB, - 0x4, 0x6, 0x0, 0x0, 0x0, 0x32, 0x1E, 0x98, 0xC, - 0x19, 0x11, 0x4C, 0x90, 0x8C, 0x9, 0x26, 0x47, - 0xC6, 0x4, 0x43, 0xBA, 0x12, 0x28, 0x86, 0x11, - 0x80, 0x42, 0x0, 0x0, 0x79, 0x18, 0x0, 0x0, 0xCB, - 0x0, 0x0, 0x0, 0x33, 0x8, 0x80, 0x1C, 0xC4, 0xE1, - 0x1C, 0x66, 0x14, 0x1, 0x3D, 0x88, 0x43, 0x38, - 0x84, 0xC3, 0x8C, 0x42, 0x80, 0x7, 0x79, 0x78, - 0x7, 0x73, 0x98, 0x71, 0xC, 0xE6, 0x0, 0xF, 0xED, - 0x10, 0xE, 0xF4, 0x80, 0xE, 0x33, 0xC, 0x42, 0x1E, - 0xC2, 0xC1, 0x1D, 0xCE, 0xA1, 0x1C, 0x66, 0x30, - 0x5, 0x3D, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1B, - 0xCC, 0x3, 0x3D, 0xC8, 0x43, 0x3D, 0x8C, 0x3, - 0x3D, 0xCC, 0x78, 0x8C, 0x74, 0x70, 0x7, 0x7B, - 0x8, 0x7, 0x79, 0x48, 0x87, 0x70, 0x70, 0x7, 0x7A, - 0x70, 0x3, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, - 0x19, 0xCC, 0x11, 0xE, 0xEC, 0x90, 0xE, 0xE1, - 0x30, 0xF, 0x6E, 0x30, 0xF, 0xE3, 0xF0, 0xE, 0xF0, - 0x50, 0xE, 0x33, 0x10, 0xC4, 0x1D, 0xDE, 0x21, - 0x1C, 0xD8, 0x21, 0x1D, 0xC2, 0x61, 0x1E, 0x66, - 0x30, 0x89, 0x3B, 0xBC, 0x83, 0x3B, 0xD0, 0x43, - 0x39, 0xB4, 0x3, 0x3C, 0xBC, 0x83, 0x3C, 0x84, - 0x3, 0x3B, 0xCC, 0xF0, 0x14, 0x76, 0x60, 0x7, - 0x7B, 0x68, 0x7, 0x37, 0x68, 0x87, 0x72, 0x68, - 0x7, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, - 0x60, 0x7, 0x76, 0x28, 0x7, 0x76, 0xF8, 0x5, 0x76, - 0x78, 0x87, 0x77, 0x80, 0x87, 0x5F, 0x8, 0x87, - 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, - 0x81, 0x2C, 0xEE, 0xF0, 0xE, 0xEE, 0xE0, 0xE, - 0xF5, 0xC0, 0xE, 0xEC, 0x30, 0x3, 0x62, 0xC8, - 0xA1, 0x1C, 0xE4, 0xA1, 0x1C, 0xCC, 0xA1, 0x1C, - 0xE4, 0xA1, 0x1C, 0xDC, 0x61, 0x1C, 0xCA, 0x21, - 0x1C, 0xC4, 0x81, 0x1D, 0xCA, 0x61, 0x6, 0xD6, - 0x90, 0x43, 0x39, 0xC8, 0x43, 0x39, 0x98, 0x43, - 0x39, 0xC8, 0x43, 0x39, 0xB8, 0xC3, 0x38, 0x94, - 0x43, 0x38, 0x88, 0x3, 0x3B, 0x94, 0xC3, 0x2F, - 0xBC, 0x83, 0x3C, 0xFC, 0x82, 0x3B, 0xD4, 0x3, - 0x3B, 0xB0, 0xC3, 0xC, 0xC7, 0x69, 0x87, 0x70, - 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x7, - 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xA0, - 0x87, 0x19, 0xCE, 0x53, 0xF, 0xEE, 0x0, 0xF, 0xF2, - 0x50, 0xE, 0xE4, 0x90, 0xE, 0xE3, 0x40, 0xF, 0xE1, - 0x20, 0xE, 0xEC, 0x50, 0xE, 0x33, 0x20, 0x28, - 0x1D, 0xDC, 0xC1, 0x1E, 0xC2, 0x41, 0x1E, 0xD2, - 0x21, 0x1C, 0xDC, 0x81, 0x1E, 0xDC, 0xE0, 0x1C, - 0xE4, 0xE1, 0x1D, 0xEA, 0x1, 0x1E, 0x66, 0x18, - 0x51, 0x38, 0xB0, 0x43, 0x3A, 0x9C, 0x83, 0x3B, - 0xCC, 0x50, 0x24, 0x76, 0x60, 0x7, 0x7B, 0x68, - 0x7, 0x37, 0x60, 0x87, 0x77, 0x78, 0x7, 0x78, - 0x98, 0x51, 0x4C, 0xF4, 0x90, 0xF, 0xF0, 0x50, - 0xE, 0x33, 0x1E, 0x6A, 0x1E, 0xCA, 0x61, 0x1C, - 0xE8, 0x21, 0x1D, 0xDE, 0xC1, 0x1D, 0x7E, 0x1, - 0x1E, 0xE4, 0xA1, 0x1C, 0xCC, 0x21, 0x1D, 0xF0, - 0x61, 0x6, 0x54, 0x85, 0x83, 0x38, 0xCC, 0xC3, - 0x3B, 0xB0, 0x43, 0x3D, 0xD0, 0x43, 0x39, 0xFC, - 0xC2, 0x3C, 0xE4, 0x43, 0x3B, 0x88, 0xC3, 0x3B, - 0xB0, 0xC3, 0x8C, 0xC5, 0xA, 0x87, 0x79, 0x98, - 0x87, 0x77, 0x18, 0x87, 0x74, 0x8, 0x7, 0x7A, - 0x28, 0x7, 0x72, 0x98, 0x81, 0x5C, 0xE3, 0x10, - 0xE, 0xEC, 0xC0, 0xE, 0xE5, 0x50, 0xE, 0xF3, 0x30, - 0x23, 0xC1, 0xD2, 0x41, 0x1E, 0xE4, 0xE1, 0x17, - 0xD8, 0xE1, 0x1D, 0xDE, 0x1, 0x1E, 0x66, 0x48, - 0x19, 0x3B, 0xB0, 0x83, 0x3D, 0xB4, 0x83, 0x1B, - 0x84, 0xC3, 0x38, 0x8C, 0x43, 0x39, 0xCC, 0xC3, - 0x3C, 0xB8, 0xC1, 0x39, 0xC8, 0xC3, 0x3B, 0xD4, - 0x3, 0x3C, 0xCC, 0x48, 0xB4, 0x71, 0x8, 0x7, 0x76, - 0x60, 0x7, 0x71, 0x8, 0x87, 0x71, 0x58, 0x87, - 0x19, 0xDB, 0xC6, 0xE, 0xEC, 0x60, 0xF, 0xED, - 0xE0, 0x6, 0xF0, 0x20, 0xF, 0xE5, 0x30, 0xF, 0xE5, - 0x20, 0xF, 0xF6, 0x50, 0xE, 0x6E, 0x10, 0xE, 0xE3, - 0x30, 0xE, 0xE5, 0x30, 0xF, 0xF3, 0xE0, 0x6, 0xE9, - 0xE0, 0xE, 0xE4, 0x50, 0xE, 0xF8, 0x30, 0x23, - 0xE2, 0xEC, 0x61, 0x1C, 0xC2, 0x81, 0x1D, 0xD8, - 0xE1, 0x17, 0xEC, 0x21, 0x1D, 0xE6, 0x21, 0x1D, - 0xC4, 0x21, 0x1D, 0xD8, 0x21, 0x1D, 0xE8, 0x21, - 0x1F, 0x66, 0x20, 0x9D, 0x3B, 0xBC, 0x43, 0x3D, - 0xB8, 0x3, 0x39, 0x94, 0x83, 0x39, 0xCC, 0x58, - 0xBC, 0x70, 0x70, 0x7, 0x77, 0x78, 0x7, 0x7A, - 0x8, 0x7, 0x7A, 0x48, 0x87, 0x77, 0x70, 0x87, - 0x19, 0xCB, 0xE7, 0xE, 0xEF, 0x30, 0xF, 0xE1, - 0xE0, 0xE, 0xE9, 0x40, 0xF, 0xE9, 0xA0, 0xF, 0xE5, - 0x30, 0xC3, 0x1, 0x3, 0x73, 0xA8, 0x7, 0x77, 0x18, - 0x87, 0x5F, 0x98, 0x87, 0x70, 0x70, 0x87, 0x74, - 0xA0, 0x87, 0x74, 0xD0, 0x87, 0x72, 0x98, 0x81, - 0x84, 0x41, 0x39, 0xE0, 0xC3, 0x38, 0xB0, 0x43, - 0x3D, 0x90, 0x43, 0x39, 0xCC, 0x40, 0xC4, 0xA0, - 0x1D, 0xCA, 0xA1, 0x1D, 0xE0, 0x41, 0x1E, 0xDE, - 0xC1, 0x1C, 0x66, 0x24, 0x63, 0x30, 0xE, 0xE1, - 0xC0, 0xE, 0xEC, 0x30, 0xF, 0xE9, 0x40, 0xF, 0xE5, - 0x30, 0x43, 0x21, 0x83, 0x75, 0x18, 0x7, 0x73, - 0x48, 0x87, 0x5F, 0xA0, 0x87, 0x7C, 0x80, 0x87, - 0x72, 0x98, 0xB1, 0x94, 0x1, 0x3C, 0x8C, 0xC3, - 0x3C, 0x94, 0xC3, 0x38, 0xD0, 0x43, 0x3A, 0xBC, - 0x83, 0x3B, 0xCC, 0xC3, 0x8C, 0xC5, 0xC, 0x48, - 0x21, 0x15, 0x42, 0x61, 0x1E, 0xE6, 0x21, 0x1D, - 0xCE, 0xC1, 0x1D, 0x52, 0x81, 0x14, 0x66, 0x4C, - 0x67, 0x30, 0xE, 0xEF, 0x20, 0xF, 0xEF, 0xE0, - 0x6, 0xEF, 0x50, 0xF, 0xF4, 0x30, 0xF, 0xE9, 0x40, - 0xE, 0xE5, 0xE0, 0x6, 0xE6, 0x20, 0xF, 0xE1, 0xD0, - 0xE, 0xE5, 0x30, 0xA3, 0x40, 0x83, 0x76, 0x68, - 0x7, 0x79, 0x8, 0x87, 0x19, 0x52, 0x1A, 0xB8, - 0xC3, 0x3B, 0x84, 0x3, 0x3B, 0xA4, 0x43, 0x38, - 0xCC, 0x83, 0x1B, 0x84, 0x3, 0x39, 0x90, 0x83, - 0x3C, 0xCC, 0x3, 0x3C, 0x84, 0xC3, 0x38, 0x94, - 0x3, 0x0, 0x0, 0x0, 0x0, 0x79, 0x28, 0x0, 0x0, - 0x2A, 0x0, 0x0, 0x0, 0xC2, 0x3C, 0x90, 0x40, 0x86, - 0x10, 0x19, 0x32, 0xE2, 0x64, 0x90, 0x40, 0x46, - 0x2, 0x19, 0x23, 0x23, 0x46, 0x2, 0x13, 0x24, - 0xC6, 0x0, 0x13, 0x74, 0x12, 0xA9, 0xB7, 0x37, - 0x3A, 0x23, 0xB6, 0xB0, 0xB3, 0xB9, 0x23, 0x8C, - 0xCD, 0x1D, 0xA2, 0x2D, 0x2C, 0xCD, 0x6D, 0x8, - 0x42, 0x1, 0xC, 0x41, 0x38, 0x82, 0x21, 0x8, 0x87, - 0x30, 0x4, 0xE1, 0x18, 0x86, 0x20, 0x1C, 0xC4, - 0x18, 0x84, 0xA0, 0x18, 0x43, 0x90, 0x8C, 0x41, - 0x20, 0x94, 0x31, 0xC, 0x82, 0x71, 0x8C, 0x41, - 0x28, 0x8E, 0x31, 0xC, 0x45, 0x51, 0x8C, 0x41, - 0x40, 0x9C, 0x31, 0x14, 0xC4, 0x0, 0x0, 0x8F, - 0x89, 0xC8, 0xF0, 0x5C, 0xE4, 0xDE, 0xDE, 0xE8, - 0xE6, 0xD2, 0xCE, 0xDC, 0xC2, 0xE8, 0xEA, 0xE4, - 0xCA, 0xE6, 0x86, 0x12, 0x28, 0xC6, 0x21, 0xC3, - 0x73, 0x99, 0x43, 0xB, 0x23, 0x2B, 0x93, 0x6B, - 0x7A, 0x23, 0x2B, 0x63, 0x1B, 0x4A, 0xB0, 0x18, - 0x85, 0xC, 0xCF, 0xC5, 0xAE, 0x4C, 0x6E, 0x2E, - 0xED, 0xCD, 0x6D, 0x28, 0x1, 0x63, 0x1C, 0x32, - 0x3C, 0x97, 0x32, 0x37, 0x3A, 0xB9, 0x3C, 0xA8, - 0xB7, 0x34, 0x37, 0xBA, 0xB9, 0xA1, 0x4, 0xF, - 0x0, 0x0, 0x71, 0x20, 0x0, 0x0, 0x2, 0x0, 0x0, - 0x0, 0x6, 0x40, 0x30, 0x0, 0xD2, 0x0, 0x0, 0x0, - 0x61, 0x20, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x13, - 0x4, 0x1, 0x86, 0x3, 0x1, 0x0, 0x0, 0x2, 0x0, - 0x0, 0x0, 0x7, 0x50, 0x10, 0xCD, 0x14, 0x61, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ] - Name: RTS0 Size: 8 RootSignature: Size: 8 AllowInputAssemblerInputLayout: true - - #CHECK: - Name: RTS0 #CHECK-NEXT: Size: 8 #CHECK-NEXT: RootSignature: #CHECK-NEXT: Size: 8 #CHECK-NEXT: AllowInputAssemblerInputLayout: true - -# DXC: !dx.rootsignatures = !{[[RS:![0-9]+]]} -# DXC: [[RS]] = !{void ()* @main, [[REL:![0-9]+]]} -# DXC: [[REL]] = !{[[RF:![0-9]+]]} -# DXC: [[RF]] = !{!"RootFlags", i32 1} diff --git a/llvm/test/tools/dxil-dis/lit.local.cfg b/llvm/test/tools/dxil-dis/lit.local.cfg index 7b6819e0b406a..8fe45f696bff9 100644 --- a/llvm/test/tools/dxil-dis/lit.local.cfg +++ b/llvm/test/tools/dxil-dis/lit.local.cfg @@ -1,3 +1,3 @@ if not config.dxil_tests: config.unsupported = True -config.suffixes = [".ll"] +config.suffixes = [".ll", ".yaml"] diff --git a/llvm/test/tools/dxil-dis/root-signature.yaml b/llvm/test/tools/dxil-dis/root-signature.yaml new file mode 100644 index 0000000000000..2a11dd9b3fcee --- /dev/null +++ b/llvm/test/tools/dxil-dis/root-signature.yaml @@ -0,0 +1,201 @@ +# RUN: yaml2obj %s | dxil-dis | FileCheck %s + +--- !dxcontainer +Header: + Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ] + Version: + Major: 1 + Minor: 0 + PartCount: 2 + PartOffsets: [ 60, 1496 ] +Parts: + - Name: DXIL + Size: 1428 + Program: + MajorVersion: 6 + MinorVersion: 0 + ShaderKind: 5 + Size: 357 + DXILMajorVersion: 1 + DXILMinorVersion: 0 + DXILSize: 1404 + DXIL: [ 0x42, 0x43, 0xC0, 0xDE, 0x21, 0xC, 0x0, 0x0, 0x5C, + 0x1, 0x0, 0x0, 0xB, 0x82, 0x20, 0x0, 0x2, 0x0, + 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x7, 0x81, 0x23, + 0x91, 0x41, 0xC8, 0x4, 0x49, 0x6, 0x10, 0x32, + 0x39, 0x92, 0x1, 0x84, 0xC, 0x25, 0x5, 0x8, 0x19, + 0x1E, 0x4, 0x8B, 0x62, 0x80, 0x10, 0x45, 0x2, + 0x42, 0x92, 0xB, 0x42, 0x84, 0x10, 0x32, 0x14, + 0x38, 0x8, 0x18, 0x4B, 0xA, 0x32, 0x42, 0x88, + 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xA5, + 0x0, 0x19, 0x32, 0x42, 0xE4, 0x48, 0xE, 0x90, + 0x11, 0x22, 0xC4, 0x50, 0x41, 0x51, 0x81, 0x8C, + 0xE1, 0x83, 0xE5, 0x8A, 0x4, 0x21, 0x46, 0x6, + 0x89, 0x20, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0x32, + 0x22, 0x8, 0x9, 0x20, 0x64, 0x85, 0x4, 0x13, 0x22, + 0xA4, 0x84, 0x4, 0x13, 0x22, 0xE3, 0x84, 0xA1, + 0x90, 0x14, 0x12, 0x4C, 0x88, 0x8C, 0xB, 0x84, + 0x84, 0x4C, 0x10, 0x20, 0x73, 0x4, 0x8, 0xC1, + 0x65, 0xC3, 0x85, 0x2C, 0xE8, 0x3, 0x40, 0x14, + 0x91, 0x4E, 0xD1, 0x4A, 0x48, 0x44, 0x54, 0x11, + 0xC3, 0x9, 0x30, 0xC4, 0x18, 0x1, 0x30, 0x2, 0x50, + 0x82, 0x21, 0x1A, 0x8, 0x98, 0x23, 0x0, 0x3, 0x0, + 0x13, 0x14, 0x72, 0xC0, 0x87, 0x74, 0x60, 0x87, + 0x36, 0x68, 0x87, 0x79, 0x68, 0x3, 0x72, 0xC0, + 0x87, 0xD, 0xAE, 0x50, 0xE, 0x6D, 0xD0, 0xE, 0x7A, + 0x50, 0xE, 0x6D, 0x0, 0xF, 0x7A, 0x30, 0x7, 0x72, + 0xA0, 0x7, 0x73, 0x20, 0x7, 0x6D, 0x90, 0xE, 0x71, + 0xA0, 0x7, 0x73, 0x20, 0x7, 0x6D, 0x90, 0xE, 0x78, + 0xA0, 0x7, 0x78, 0xD0, 0x6, 0xE9, 0x10, 0x7, 0x76, + 0xA0, 0x7, 0x71, 0x60, 0x7, 0x6D, 0x90, 0xE, 0x73, + 0x20, 0x7, 0x7A, 0x30, 0x7, 0x72, 0xD0, 0x6, 0xE9, + 0x60, 0x7, 0x74, 0xA0, 0x7, 0x76, 0x40, 0x7, 0x6D, + 0x60, 0xE, 0x71, 0x60, 0x7, 0x7A, 0x10, 0x7, 0x76, + 0xD0, 0x6, 0xE6, 0x30, 0x7, 0x72, 0xA0, 0x7, 0x73, + 0x20, 0x7, 0x6D, 0x60, 0xE, 0x76, 0x40, 0x7, 0x7A, + 0x60, 0x7, 0x74, 0xD0, 0x6, 0xEE, 0x80, 0x7, 0x7A, + 0x10, 0x7, 0x76, 0xA0, 0x7, 0x73, 0x20, 0x7, 0x7A, + 0x60, 0x7, 0x74, 0x30, 0xE4, 0x21, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0xB, + 0x4, 0x6, 0x0, 0x0, 0x0, 0x32, 0x1E, 0x98, 0xC, + 0x19, 0x11, 0x4C, 0x90, 0x8C, 0x9, 0x26, 0x47, + 0xC6, 0x4, 0x43, 0xBA, 0x12, 0x28, 0x86, 0x11, + 0x80, 0x42, 0x0, 0x0, 0x79, 0x18, 0x0, 0x0, 0xCB, + 0x0, 0x0, 0x0, 0x33, 0x8, 0x80, 0x1C, 0xC4, 0xE1, + 0x1C, 0x66, 0x14, 0x1, 0x3D, 0x88, 0x43, 0x38, + 0x84, 0xC3, 0x8C, 0x42, 0x80, 0x7, 0x79, 0x78, + 0x7, 0x73, 0x98, 0x71, 0xC, 0xE6, 0x0, 0xF, 0xED, + 0x10, 0xE, 0xF4, 0x80, 0xE, 0x33, 0xC, 0x42, 0x1E, + 0xC2, 0xC1, 0x1D, 0xCE, 0xA1, 0x1C, 0x66, 0x30, + 0x5, 0x3D, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1B, + 0xCC, 0x3, 0x3D, 0xC8, 0x43, 0x3D, 0x8C, 0x3, + 0x3D, 0xCC, 0x78, 0x8C, 0x74, 0x70, 0x7, 0x7B, + 0x8, 0x7, 0x79, 0x48, 0x87, 0x70, 0x70, 0x7, 0x7A, + 0x70, 0x3, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, + 0x19, 0xCC, 0x11, 0xE, 0xEC, 0x90, 0xE, 0xE1, + 0x30, 0xF, 0x6E, 0x30, 0xF, 0xE3, 0xF0, 0xE, 0xF0, + 0x50, 0xE, 0x33, 0x10, 0xC4, 0x1D, 0xDE, 0x21, + 0x1C, 0xD8, 0x21, 0x1D, 0xC2, 0x61, 0x1E, 0x66, + 0x30, 0x89, 0x3B, 0xBC, 0x83, 0x3B, 0xD0, 0x43, + 0x39, 0xB4, 0x3, 0x3C, 0xBC, 0x83, 0x3C, 0x84, + 0x3, 0x3B, 0xCC, 0xF0, 0x14, 0x76, 0x60, 0x7, + 0x7B, 0x68, 0x7, 0x37, 0x68, 0x87, 0x72, 0x68, + 0x7, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, + 0x60, 0x7, 0x76, 0x28, 0x7, 0x76, 0xF8, 0x5, 0x76, + 0x78, 0x87, 0x77, 0x80, 0x87, 0x5F, 0x8, 0x87, + 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, + 0x81, 0x2C, 0xEE, 0xF0, 0xE, 0xEE, 0xE0, 0xE, + 0xF5, 0xC0, 0xE, 0xEC, 0x30, 0x3, 0x62, 0xC8, + 0xA1, 0x1C, 0xE4, 0xA1, 0x1C, 0xCC, 0xA1, 0x1C, + 0xE4, 0xA1, 0x1C, 0xDC, 0x61, 0x1C, 0xCA, 0x21, + 0x1C, 0xC4, 0x81, 0x1D, 0xCA, 0x61, 0x6, 0xD6, + 0x90, 0x43, 0x39, 0xC8, 0x43, 0x39, 0x98, 0x43, + 0x39, 0xC8, 0x43, 0x39, 0xB8, 0xC3, 0x38, 0x94, + 0x43, 0x38, 0x88, 0x3, 0x3B, 0x94, 0xC3, 0x2F, + 0xBC, 0x83, 0x3C, 0xFC, 0x82, 0x3B, 0xD4, 0x3, + 0x3B, 0xB0, 0xC3, 0xC, 0xC7, 0x69, 0x87, 0x70, + 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x7, + 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xA0, + 0x87, 0x19, 0xCE, 0x53, 0xF, 0xEE, 0x0, 0xF, 0xF2, + 0x50, 0xE, 0xE4, 0x90, 0xE, 0xE3, 0x40, 0xF, 0xE1, + 0x20, 0xE, 0xEC, 0x50, 0xE, 0x33, 0x20, 0x28, + 0x1D, 0xDC, 0xC1, 0x1E, 0xC2, 0x41, 0x1E, 0xD2, + 0x21, 0x1C, 0xDC, 0x81, 0x1E, 0xDC, 0xE0, 0x1C, + 0xE4, 0xE1, 0x1D, 0xEA, 0x1, 0x1E, 0x66, 0x18, + 0x51, 0x38, 0xB0, 0x43, 0x3A, 0x9C, 0x83, 0x3B, + 0xCC, 0x50, 0x24, 0x76, 0x60, 0x7, 0x7B, 0x68, + 0x7, 0x37, 0x60, 0x87, 0x77, 0x78, 0x7, 0x78, + 0x98, 0x51, 0x4C, 0xF4, 0x90, 0xF, 0xF0, 0x50, + 0xE, 0x33, 0x1E, 0x6A, 0x1E, 0xCA, 0x61, 0x1C, + 0xE8, 0x21, 0x1D, 0xDE, 0xC1, 0x1D, 0x7E, 0x1, + 0x1E, 0xE4, 0xA1, 0x1C, 0xCC, 0x21, 0x1D, 0xF0, + 0x61, 0x6, 0x54, 0x85, 0x83, 0x38, 0xCC, 0xC3, + 0x3B, 0xB0, 0x43, 0x3D, 0xD0, 0x43, 0x39, 0xFC, + 0xC2, 0x3C, 0xE4, 0x43, 0x3B, 0x88, 0xC3, 0x3B, + 0xB0, 0xC3, 0x8C, 0xC5, 0xA, 0x87, 0x79, 0x98, + 0x87, 0x77, 0x18, 0x87, 0x74, 0x8, 0x7, 0x7A, + 0x28, 0x7, 0x72, 0x98, 0x81, 0x5C, 0xE3, 0x10, + 0xE, 0xEC, 0xC0, 0xE, 0xE5, 0x50, 0xE, 0xF3, 0x30, + 0x23, 0xC1, 0xD2, 0x41, 0x1E, 0xE4, 0xE1, 0x17, + 0xD8, 0xE1, 0x1D, 0xDE, 0x1, 0x1E, 0x66, 0x48, + 0x19, 0x3B, 0xB0, 0x83, 0x3D, 0xB4, 0x83, 0x1B, + 0x84, 0xC3, 0x38, 0x8C, 0x43, 0x39, 0xCC, 0xC3, + 0x3C, 0xB8, 0xC1, 0x39, 0xC8, 0xC3, 0x3B, 0xD4, + 0x3, 0x3C, 0xCC, 0x48, 0xB4, 0x71, 0x8, 0x7, 0x76, + 0x60, 0x7, 0x71, 0x8, 0x87, 0x71, 0x58, 0x87, + 0x19, 0xDB, 0xC6, 0xE, 0xEC, 0x60, 0xF, 0xED, + 0xE0, 0x6, 0xF0, 0x20, 0xF, 0xE5, 0x30, 0xF, 0xE5, + 0x20, 0xF, 0xF6, 0x50, 0xE, 0x6E, 0x10, 0xE, 0xE3, + 0x30, 0xE, 0xE5, 0x30, 0xF, 0xF3, 0xE0, 0x6, 0xE9, + 0xE0, 0xE, 0xE4, 0x50, 0xE, 0xF8, 0x30, 0x23, + 0xE2, 0xEC, 0x61, 0x1C, 0xC2, 0x81, 0x1D, 0xD8, + 0xE1, 0x17, 0xEC, 0x21, 0x1D, 0xE6, 0x21, 0x1D, + 0xC4, 0x21, 0x1D, 0xD8, 0x21, 0x1D, 0xE8, 0x21, + 0x1F, 0x66, 0x20, 0x9D, 0x3B, 0xBC, 0x43, 0x3D, + 0xB8, 0x3, 0x39, 0x94, 0x83, 0x39, 0xCC, 0x58, + 0xBC, 0x70, 0x70, 0x7, 0x77, 0x78, 0x7, 0x7A, + 0x8, 0x7, 0x7A, 0x48, 0x87, 0x77, 0x70, 0x87, + 0x19, 0xCB, 0xE7, 0xE, 0xEF, 0x30, 0xF, 0xE1, + 0xE0, 0xE, 0xE9, 0x40, 0xF, 0xE9, 0xA0, 0xF, 0xE5, + 0x30, 0xC3, 0x1, 0x3, 0x73, 0xA8, 0x7, 0x77, 0x18, + 0x87, 0x5F, 0x98, 0x87, 0x70, 0x70, 0x87, 0x74, + 0xA0, 0x87, 0x74, 0xD0, 0x87, 0x72, 0x98, 0x81, + 0x84, 0x41, 0x39, 0xE0, 0xC3, 0x38, 0xB0, 0x43, + 0x3D, 0x90, 0x43, 0x39, 0xCC, 0x40, 0xC4, 0xA0, + 0x1D, 0xCA, 0xA1, 0x1D, 0xE0, 0x41, 0x1E, 0xDE, + 0xC1, 0x1C, 0x66, 0x24, 0x63, 0x30, 0xE, 0xE1, + 0xC0, 0xE, 0xEC, 0x30, 0xF, 0xE9, 0x40, 0xF, 0xE5, + 0x30, 0x43, 0x21, 0x83, 0x75, 0x18, 0x7, 0x73, + 0x48, 0x87, 0x5F, 0xA0, 0x87, 0x7C, 0x80, 0x87, + 0x72, 0x98, 0xB1, 0x94, 0x1, 0x3C, 0x8C, 0xC3, + 0x3C, 0x94, 0xC3, 0x38, 0xD0, 0x43, 0x3A, 0xBC, + 0x83, 0x3B, 0xCC, 0xC3, 0x8C, 0xC5, 0xC, 0x48, + 0x21, 0x15, 0x42, 0x61, 0x1E, 0xE6, 0x21, 0x1D, + 0xCE, 0xC1, 0x1D, 0x52, 0x81, 0x14, 0x66, 0x4C, + 0x67, 0x30, 0xE, 0xEF, 0x20, 0xF, 0xEF, 0xE0, + 0x6, 0xEF, 0x50, 0xF, 0xF4, 0x30, 0xF, 0xE9, 0x40, + 0xE, 0xE5, 0xE0, 0x6, 0xE6, 0x20, 0xF, 0xE1, 0xD0, + 0xE, 0xE5, 0x30, 0xA3, 0x40, 0x83, 0x76, 0x68, + 0x7, 0x79, 0x8, 0x87, 0x19, 0x52, 0x1A, 0xB8, + 0xC3, 0x3B, 0x84, 0x3, 0x3B, 0xA4, 0x43, 0x38, + 0xCC, 0x83, 0x1B, 0x84, 0x3, 0x39, 0x90, 0x83, + 0x3C, 0xCC, 0x3, 0x3C, 0x84, 0xC3, 0x38, 0x94, + 0x3, 0x0, 0x0, 0x0, 0x0, 0x79, 0x28, 0x0, 0x0, + 0x2A, 0x0, 0x0, 0x0, 0xC2, 0x3C, 0x90, 0x40, 0x86, + 0x10, 0x19, 0x32, 0xE2, 0x64, 0x90, 0x40, 0x46, + 0x2, 0x19, 0x23, 0x23, 0x46, 0x2, 0x13, 0x24, + 0xC6, 0x0, 0x13, 0x74, 0x12, 0xA9, 0xB7, 0x37, + 0x3A, 0x23, 0xB6, 0xB0, 0xB3, 0xB9, 0x23, 0x8C, + 0xCD, 0x1D, 0xA2, 0x2D, 0x2C, 0xCD, 0x6D, 0x8, + 0x42, 0x1, 0xC, 0x41, 0x38, 0x82, 0x21, 0x8, 0x87, + 0x30, 0x4, 0xE1, 0x18, 0x86, 0x20, 0x1C, 0xC4, + 0x18, 0x84, 0xA0, 0x18, 0x43, 0x90, 0x8C, 0x41, + 0x20, 0x94, 0x31, 0xC, 0x82, 0x71, 0x8C, 0x41, + 0x28, 0x8E, 0x31, 0xC, 0x45, 0x51, 0x8C, 0x41, + 0x40, 0x9C, 0x31, 0x14, 0xC4, 0x0, 0x0, 0x8F, + 0x89, 0xC8, 0xF0, 0x5C, 0xE4, 0xDE, 0xDE, 0xE8, + 0xE6, 0xD2, 0xCE, 0xDC, 0xC2, 0xE8, 0xEA, 0xE4, + 0xCA, 0xE6, 0x86, 0x12, 0x28, 0xC6, 0x21, 0xC3, + 0x73, 0x99, 0x43, 0xB, 0x23, 0x2B, 0x93, 0x6B, + 0x7A, 0x23, 0x2B, 0x63, 0x1B, 0x4A, 0xB0, 0x18, + 0x85, 0xC, 0xCF, 0xC5, 0xAE, 0x4C, 0x6E, 0x2E, + 0xED, 0xCD, 0x6D, 0x28, 0x1, 0x63, 0x1C, 0x32, + 0x3C, 0x97, 0x32, 0x37, 0x3A, 0xB9, 0x3C, 0xA8, + 0xB7, 0x34, 0x37, 0xBA, 0xB9, 0xA1, 0x4, 0xF, + 0x0, 0x0, 0x71, 0x20, 0x0, 0x0, 0x2, 0x0, 0x0, + 0x0, 0x6, 0x40, 0x30, 0x0, 0xD2, 0x0, 0x0, 0x0, + 0x61, 0x20, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x13, + 0x4, 0x1, 0x86, 0x3, 0x1, 0x0, 0x0, 0x2, 0x0, + 0x0, 0x0, 0x7, 0x50, 0x10, 0xCD, 0x14, 0x61, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ] + - Name: RTS0 + Size: 8 + RootSignature: + Size: 8 + AllowInputAssemblerInputLayout: true + +# CHECK: !dx.rootsignatures = !{[[RS:![0-9]+]]} +# CHECK: [[RS]] = !{void ()* @main, [[REL:![0-9]+]]} +# CHECK: [[REL]] = !{[[RF:![0-9]+]]} +# CHECK: [[RF]] = !{!"RootFlags", i32 1} From f93d42d1a38f86300b4ee3d2f33ed9ffeb470acc Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Mon, 3 Feb 2025 21:05:40 +0000 Subject: [PATCH 20/29] addressing test concerns --- .../llvm/MC/DXContainerRootSignature.h | 8 +- llvm/include/llvm/Object/DXContainer.h | 14 +- .../include/llvm/ObjectYAML/DXContainerYAML.h | 6 +- llvm/lib/MC/DXContainerRootSignature.cpp | 9 +- llvm/lib/Object/DXContainer.cpp | 18 +- llvm/lib/ObjectYAML/DXContainerYAML.cpp | 11 +- .../DXContainer/RootSignature-Flags.yaml | 22 +- llvm/test/tools/dxil-dis/root-signature.yaml | 201 ------------------ llvm/unittests/Object/DXContainerTest.cpp | 22 ++ .../ObjectYAML/DXContainerYAMLTest.cpp | 40 ++++ 10 files changed, 129 insertions(+), 222 deletions(-) delete mode 100644 llvm/test/tools/dxil-dis/root-signature.yaml diff --git a/llvm/include/llvm/MC/DXContainerRootSignature.h b/llvm/include/llvm/MC/DXContainerRootSignature.h index 20b4f5a4285f6..e1a9be5fc52d8 100644 --- a/llvm/include/llvm/MC/DXContainerRootSignature.h +++ b/llvm/include/llvm/MC/DXContainerRootSignature.h @@ -15,9 +15,13 @@ class raw_ostream; namespace mcdxbc { struct RootSignatureHeader { - uint32_t Flags; + uint32_t Version = 2; + uint32_t NumParameters = 0; + uint32_t RootParametersOffset = 0; + uint32_t NumStaticSamplers = 0; + uint32_t StaticSamplersOffset = 0; + uint32_t Flags = 0; - void swapBytes(); void write(raw_ostream &OS); }; } // namespace mcdxbc diff --git a/llvm/include/llvm/Object/DXContainer.h b/llvm/include/llvm/Object/DXContainer.h index 5f7737d2fa41d..47128f94e0968 100644 --- a/llvm/include/llvm/Object/DXContainer.h +++ b/llvm/include/llvm/Object/DXContainer.h @@ -120,16 +120,22 @@ namespace DirectX { class RootSignature { private: StringRef Data; - uint32_t Size; + uint32_t Version; + uint32_t NumParameters; + uint32_t RootParametersOffset; + uint32_t NumStaticSamplers; + uint32_t StaticSamplersOffset; uint32_t Flags; public: RootSignature(StringRef Data) : Data(Data) {} Error parse(); - - uint32_t getSize() const { return Size; } - + uint32_t getVersion() const { return Version; } + uint32_t getNumParameters() const { return NumParameters; } + uint32_t getRootParametersOffset() const { return RootParametersOffset; } + uint32_t getNumStaticSamplers() const { return NumStaticSamplers; } + uint32_t getStaticSamplersOffset() const { return StaticSamplersOffset; } uint32_t getFlags() const { return Flags; } }; diff --git a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h index a82083fa18de6..1f967114ea1eb 100644 --- a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h +++ b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h @@ -79,7 +79,11 @@ struct RootSignatureDesc { RootSignatureDesc(const object::DirectX::RootSignature &Data); uint32_t getEncodedFlags(); - uint32_t Size; + uint32_t Version; + uint32_t NumParameters; + uint32_t RootParametersOffset; + uint32_t NumStaticSamplers; + uint32_t StaticSamplersOffset; #include "llvm/BinaryFormat/DXContainerConstants.def" }; diff --git a/llvm/lib/MC/DXContainerRootSignature.cpp b/llvm/lib/MC/DXContainerRootSignature.cpp index 4e085654a1e5e..000d23f24d241 100644 --- a/llvm/lib/MC/DXContainerRootSignature.cpp +++ b/llvm/lib/MC/DXContainerRootSignature.cpp @@ -8,15 +8,16 @@ #include "llvm/MC/DXContainerRootSignature.h" #include "llvm/Support/EndianStream.h" -#include "llvm/Support/SwapByteOrder.h" -#include using namespace llvm; using namespace llvm::mcdxbc; void RootSignatureHeader::write(raw_ostream &OS) { - uint32_t SizeInfo = sizeof(this); - support::endian::write(OS, SizeInfo, llvm::endianness::little); + support::endian::write(OS, Version, llvm::endianness::little); + support::endian::write(OS, NumParameters, llvm::endianness::little); + support::endian::write(OS, RootParametersOffset, llvm::endianness::little); + support::endian::write(OS, NumStaticSamplers, llvm::endianness::little); + support::endian::write(OS, StaticSamplersOffset, llvm::endianness::little); support::endian::write(OS, Flags, llvm::endianness::little); } diff --git a/llvm/lib/Object/DXContainer.cpp b/llvm/lib/Object/DXContainer.cpp index 6743911059cfd..14179283f9807 100644 --- a/llvm/lib/Object/DXContainer.cpp +++ b/llvm/lib/Object/DXContainer.cpp @@ -245,7 +245,23 @@ void DXContainer::PartIterator::updateIteratorImpl(const uint32_t Offset) { Error DirectX::RootSignature::parse() { const char *Current = Data.begin(); - Size = support::endian::read(Current); + Version = support::endian::read(Current); + Current += sizeof(uint32_t); + + NumParameters = + support::endian::read(Current); + Current += sizeof(uint32_t); + + RootParametersOffset = + support::endian::read(Current); + Current += sizeof(uint32_t); + + NumStaticSamplers = + support::endian::read(Current); + Current += sizeof(uint32_t); + + StaticSamplersOffset = + support::endian::read(Current); Current += sizeof(uint32_t); Flags = support::endian::read(Current); diff --git a/llvm/lib/ObjectYAML/DXContainerYAML.cpp b/llvm/lib/ObjectYAML/DXContainerYAML.cpp index fd85d75dc32eb..522781c0d36ef 100644 --- a/llvm/lib/ObjectYAML/DXContainerYAML.cpp +++ b/llvm/lib/ObjectYAML/DXContainerYAML.cpp @@ -32,7 +32,10 @@ DXContainerYAML::ShaderFeatureFlags::ShaderFeatureFlags(uint64_t FlagData) { DXContainerYAML::RootSignatureDesc::RootSignatureDesc( const object::DirectX::RootSignature &Data) - : Size(Data.getSize()) { + : Version(Data.getVersion()), NumParameters(Data.getNumParameters()), + RootParametersOffset(Data.getRootParametersOffset()), + NumStaticSamplers(Data.getNumStaticSamplers()), + StaticSamplersOffset(Data.getStaticSamplersOffset()) { uint32_t Flags = Data.getFlags(); #define ROOT_ELEMENT_FLAG(Num, Val, Str) \ Val = (Flags & (uint32_t)dxbc::RootElementFlag::Val) > 0; @@ -209,7 +212,11 @@ void MappingTraits::mapping( void MappingTraits::mapping( IO &IO, DXContainerYAML::RootSignatureDesc &S) { - IO.mapRequired("Size", S.Size); + IO.mapRequired("Version", S.Version); + IO.mapRequired("NumParameters", S.NumParameters); + IO.mapRequired("RootParametersOffset", S.RootParametersOffset); + IO.mapRequired("NumStaticSamplers", S.NumStaticSamplers); + IO.mapRequired("StaticSamplersOffset", S.StaticSamplersOffset); #define ROOT_ELEMENT_FLAG(Num, Val, Str) IO.mapOptional(#Val, S.Val, false); #include "llvm/BinaryFormat/DXContainerConstants.def" } diff --git a/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml b/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml index e3ca7347d52c7..06814f660f283 100644 --- a/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml +++ b/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml @@ -11,13 +11,21 @@ Header: PartOffsets: [ 60 ] Parts: - Name: RTS0 - Size: 8 + Size: 24 RootSignature: - Size: 8 + Version: 2 + NumParameters: 0 + RootParametersOffset: 0 + NumStaticSamplers: 0 + StaticSamplersOffset: 0 AllowInputAssemblerInputLayout: true -#CHECK: - Name: RTS0 -#CHECK-NEXT: Size: 8 -#CHECK-NEXT: RootSignature: -#CHECK-NEXT: Size: 8 -#CHECK-NEXT: AllowInputAssemblerInputLayout: true +# CHECK: - Name: RTS0 +# CHECK-NEXT: Size: 24 +# CHECK-NEXT: RootSignature: +# CHECK-NEXT: Version: 2 +# CHECK-NEXT: NumParameters: 0 +# CHECK-NEXT: RootParametersOffset: 0 +# CHECK-NEXT: NumStaticSamplers: 0 +# CHECK-NEXT: StaticSamplersOffset: 0 +# CHECK-NEXT: AllowInputAssemblerInputLayout: true diff --git a/llvm/test/tools/dxil-dis/root-signature.yaml b/llvm/test/tools/dxil-dis/root-signature.yaml deleted file mode 100644 index 2a11dd9b3fcee..0000000000000 --- a/llvm/test/tools/dxil-dis/root-signature.yaml +++ /dev/null @@ -1,201 +0,0 @@ -# RUN: yaml2obj %s | dxil-dis | FileCheck %s - ---- !dxcontainer -Header: - Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ] - Version: - Major: 1 - Minor: 0 - PartCount: 2 - PartOffsets: [ 60, 1496 ] -Parts: - - Name: DXIL - Size: 1428 - Program: - MajorVersion: 6 - MinorVersion: 0 - ShaderKind: 5 - Size: 357 - DXILMajorVersion: 1 - DXILMinorVersion: 0 - DXILSize: 1404 - DXIL: [ 0x42, 0x43, 0xC0, 0xDE, 0x21, 0xC, 0x0, 0x0, 0x5C, - 0x1, 0x0, 0x0, 0xB, 0x82, 0x20, 0x0, 0x2, 0x0, - 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x7, 0x81, 0x23, - 0x91, 0x41, 0xC8, 0x4, 0x49, 0x6, 0x10, 0x32, - 0x39, 0x92, 0x1, 0x84, 0xC, 0x25, 0x5, 0x8, 0x19, - 0x1E, 0x4, 0x8B, 0x62, 0x80, 0x10, 0x45, 0x2, - 0x42, 0x92, 0xB, 0x42, 0x84, 0x10, 0x32, 0x14, - 0x38, 0x8, 0x18, 0x4B, 0xA, 0x32, 0x42, 0x88, - 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xA5, - 0x0, 0x19, 0x32, 0x42, 0xE4, 0x48, 0xE, 0x90, - 0x11, 0x22, 0xC4, 0x50, 0x41, 0x51, 0x81, 0x8C, - 0xE1, 0x83, 0xE5, 0x8A, 0x4, 0x21, 0x46, 0x6, - 0x89, 0x20, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0x32, - 0x22, 0x8, 0x9, 0x20, 0x64, 0x85, 0x4, 0x13, 0x22, - 0xA4, 0x84, 0x4, 0x13, 0x22, 0xE3, 0x84, 0xA1, - 0x90, 0x14, 0x12, 0x4C, 0x88, 0x8C, 0xB, 0x84, - 0x84, 0x4C, 0x10, 0x20, 0x73, 0x4, 0x8, 0xC1, - 0x65, 0xC3, 0x85, 0x2C, 0xE8, 0x3, 0x40, 0x14, - 0x91, 0x4E, 0xD1, 0x4A, 0x48, 0x44, 0x54, 0x11, - 0xC3, 0x9, 0x30, 0xC4, 0x18, 0x1, 0x30, 0x2, 0x50, - 0x82, 0x21, 0x1A, 0x8, 0x98, 0x23, 0x0, 0x3, 0x0, - 0x13, 0x14, 0x72, 0xC0, 0x87, 0x74, 0x60, 0x87, - 0x36, 0x68, 0x87, 0x79, 0x68, 0x3, 0x72, 0xC0, - 0x87, 0xD, 0xAE, 0x50, 0xE, 0x6D, 0xD0, 0xE, 0x7A, - 0x50, 0xE, 0x6D, 0x0, 0xF, 0x7A, 0x30, 0x7, 0x72, - 0xA0, 0x7, 0x73, 0x20, 0x7, 0x6D, 0x90, 0xE, 0x71, - 0xA0, 0x7, 0x73, 0x20, 0x7, 0x6D, 0x90, 0xE, 0x78, - 0xA0, 0x7, 0x78, 0xD0, 0x6, 0xE9, 0x10, 0x7, 0x76, - 0xA0, 0x7, 0x71, 0x60, 0x7, 0x6D, 0x90, 0xE, 0x73, - 0x20, 0x7, 0x7A, 0x30, 0x7, 0x72, 0xD0, 0x6, 0xE9, - 0x60, 0x7, 0x74, 0xA0, 0x7, 0x76, 0x40, 0x7, 0x6D, - 0x60, 0xE, 0x71, 0x60, 0x7, 0x7A, 0x10, 0x7, 0x76, - 0xD0, 0x6, 0xE6, 0x30, 0x7, 0x72, 0xA0, 0x7, 0x73, - 0x20, 0x7, 0x6D, 0x60, 0xE, 0x76, 0x40, 0x7, 0x7A, - 0x60, 0x7, 0x74, 0xD0, 0x6, 0xEE, 0x80, 0x7, 0x7A, - 0x10, 0x7, 0x76, 0xA0, 0x7, 0x73, 0x20, 0x7, 0x7A, - 0x60, 0x7, 0x74, 0x30, 0xE4, 0x21, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0xB, - 0x4, 0x6, 0x0, 0x0, 0x0, 0x32, 0x1E, 0x98, 0xC, - 0x19, 0x11, 0x4C, 0x90, 0x8C, 0x9, 0x26, 0x47, - 0xC6, 0x4, 0x43, 0xBA, 0x12, 0x28, 0x86, 0x11, - 0x80, 0x42, 0x0, 0x0, 0x79, 0x18, 0x0, 0x0, 0xCB, - 0x0, 0x0, 0x0, 0x33, 0x8, 0x80, 0x1C, 0xC4, 0xE1, - 0x1C, 0x66, 0x14, 0x1, 0x3D, 0x88, 0x43, 0x38, - 0x84, 0xC3, 0x8C, 0x42, 0x80, 0x7, 0x79, 0x78, - 0x7, 0x73, 0x98, 0x71, 0xC, 0xE6, 0x0, 0xF, 0xED, - 0x10, 0xE, 0xF4, 0x80, 0xE, 0x33, 0xC, 0x42, 0x1E, - 0xC2, 0xC1, 0x1D, 0xCE, 0xA1, 0x1C, 0x66, 0x30, - 0x5, 0x3D, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1B, - 0xCC, 0x3, 0x3D, 0xC8, 0x43, 0x3D, 0x8C, 0x3, - 0x3D, 0xCC, 0x78, 0x8C, 0x74, 0x70, 0x7, 0x7B, - 0x8, 0x7, 0x79, 0x48, 0x87, 0x70, 0x70, 0x7, 0x7A, - 0x70, 0x3, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, - 0x19, 0xCC, 0x11, 0xE, 0xEC, 0x90, 0xE, 0xE1, - 0x30, 0xF, 0x6E, 0x30, 0xF, 0xE3, 0xF0, 0xE, 0xF0, - 0x50, 0xE, 0x33, 0x10, 0xC4, 0x1D, 0xDE, 0x21, - 0x1C, 0xD8, 0x21, 0x1D, 0xC2, 0x61, 0x1E, 0x66, - 0x30, 0x89, 0x3B, 0xBC, 0x83, 0x3B, 0xD0, 0x43, - 0x39, 0xB4, 0x3, 0x3C, 0xBC, 0x83, 0x3C, 0x84, - 0x3, 0x3B, 0xCC, 0xF0, 0x14, 0x76, 0x60, 0x7, - 0x7B, 0x68, 0x7, 0x37, 0x68, 0x87, 0x72, 0x68, - 0x7, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, - 0x60, 0x7, 0x76, 0x28, 0x7, 0x76, 0xF8, 0x5, 0x76, - 0x78, 0x87, 0x77, 0x80, 0x87, 0x5F, 0x8, 0x87, - 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, - 0x81, 0x2C, 0xEE, 0xF0, 0xE, 0xEE, 0xE0, 0xE, - 0xF5, 0xC0, 0xE, 0xEC, 0x30, 0x3, 0x62, 0xC8, - 0xA1, 0x1C, 0xE4, 0xA1, 0x1C, 0xCC, 0xA1, 0x1C, - 0xE4, 0xA1, 0x1C, 0xDC, 0x61, 0x1C, 0xCA, 0x21, - 0x1C, 0xC4, 0x81, 0x1D, 0xCA, 0x61, 0x6, 0xD6, - 0x90, 0x43, 0x39, 0xC8, 0x43, 0x39, 0x98, 0x43, - 0x39, 0xC8, 0x43, 0x39, 0xB8, 0xC3, 0x38, 0x94, - 0x43, 0x38, 0x88, 0x3, 0x3B, 0x94, 0xC3, 0x2F, - 0xBC, 0x83, 0x3C, 0xFC, 0x82, 0x3B, 0xD4, 0x3, - 0x3B, 0xB0, 0xC3, 0xC, 0xC7, 0x69, 0x87, 0x70, - 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x7, - 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xA0, - 0x87, 0x19, 0xCE, 0x53, 0xF, 0xEE, 0x0, 0xF, 0xF2, - 0x50, 0xE, 0xE4, 0x90, 0xE, 0xE3, 0x40, 0xF, 0xE1, - 0x20, 0xE, 0xEC, 0x50, 0xE, 0x33, 0x20, 0x28, - 0x1D, 0xDC, 0xC1, 0x1E, 0xC2, 0x41, 0x1E, 0xD2, - 0x21, 0x1C, 0xDC, 0x81, 0x1E, 0xDC, 0xE0, 0x1C, - 0xE4, 0xE1, 0x1D, 0xEA, 0x1, 0x1E, 0x66, 0x18, - 0x51, 0x38, 0xB0, 0x43, 0x3A, 0x9C, 0x83, 0x3B, - 0xCC, 0x50, 0x24, 0x76, 0x60, 0x7, 0x7B, 0x68, - 0x7, 0x37, 0x60, 0x87, 0x77, 0x78, 0x7, 0x78, - 0x98, 0x51, 0x4C, 0xF4, 0x90, 0xF, 0xF0, 0x50, - 0xE, 0x33, 0x1E, 0x6A, 0x1E, 0xCA, 0x61, 0x1C, - 0xE8, 0x21, 0x1D, 0xDE, 0xC1, 0x1D, 0x7E, 0x1, - 0x1E, 0xE4, 0xA1, 0x1C, 0xCC, 0x21, 0x1D, 0xF0, - 0x61, 0x6, 0x54, 0x85, 0x83, 0x38, 0xCC, 0xC3, - 0x3B, 0xB0, 0x43, 0x3D, 0xD0, 0x43, 0x39, 0xFC, - 0xC2, 0x3C, 0xE4, 0x43, 0x3B, 0x88, 0xC3, 0x3B, - 0xB0, 0xC3, 0x8C, 0xC5, 0xA, 0x87, 0x79, 0x98, - 0x87, 0x77, 0x18, 0x87, 0x74, 0x8, 0x7, 0x7A, - 0x28, 0x7, 0x72, 0x98, 0x81, 0x5C, 0xE3, 0x10, - 0xE, 0xEC, 0xC0, 0xE, 0xE5, 0x50, 0xE, 0xF3, 0x30, - 0x23, 0xC1, 0xD2, 0x41, 0x1E, 0xE4, 0xE1, 0x17, - 0xD8, 0xE1, 0x1D, 0xDE, 0x1, 0x1E, 0x66, 0x48, - 0x19, 0x3B, 0xB0, 0x83, 0x3D, 0xB4, 0x83, 0x1B, - 0x84, 0xC3, 0x38, 0x8C, 0x43, 0x39, 0xCC, 0xC3, - 0x3C, 0xB8, 0xC1, 0x39, 0xC8, 0xC3, 0x3B, 0xD4, - 0x3, 0x3C, 0xCC, 0x48, 0xB4, 0x71, 0x8, 0x7, 0x76, - 0x60, 0x7, 0x71, 0x8, 0x87, 0x71, 0x58, 0x87, - 0x19, 0xDB, 0xC6, 0xE, 0xEC, 0x60, 0xF, 0xED, - 0xE0, 0x6, 0xF0, 0x20, 0xF, 0xE5, 0x30, 0xF, 0xE5, - 0x20, 0xF, 0xF6, 0x50, 0xE, 0x6E, 0x10, 0xE, 0xE3, - 0x30, 0xE, 0xE5, 0x30, 0xF, 0xF3, 0xE0, 0x6, 0xE9, - 0xE0, 0xE, 0xE4, 0x50, 0xE, 0xF8, 0x30, 0x23, - 0xE2, 0xEC, 0x61, 0x1C, 0xC2, 0x81, 0x1D, 0xD8, - 0xE1, 0x17, 0xEC, 0x21, 0x1D, 0xE6, 0x21, 0x1D, - 0xC4, 0x21, 0x1D, 0xD8, 0x21, 0x1D, 0xE8, 0x21, - 0x1F, 0x66, 0x20, 0x9D, 0x3B, 0xBC, 0x43, 0x3D, - 0xB8, 0x3, 0x39, 0x94, 0x83, 0x39, 0xCC, 0x58, - 0xBC, 0x70, 0x70, 0x7, 0x77, 0x78, 0x7, 0x7A, - 0x8, 0x7, 0x7A, 0x48, 0x87, 0x77, 0x70, 0x87, - 0x19, 0xCB, 0xE7, 0xE, 0xEF, 0x30, 0xF, 0xE1, - 0xE0, 0xE, 0xE9, 0x40, 0xF, 0xE9, 0xA0, 0xF, 0xE5, - 0x30, 0xC3, 0x1, 0x3, 0x73, 0xA8, 0x7, 0x77, 0x18, - 0x87, 0x5F, 0x98, 0x87, 0x70, 0x70, 0x87, 0x74, - 0xA0, 0x87, 0x74, 0xD0, 0x87, 0x72, 0x98, 0x81, - 0x84, 0x41, 0x39, 0xE0, 0xC3, 0x38, 0xB0, 0x43, - 0x3D, 0x90, 0x43, 0x39, 0xCC, 0x40, 0xC4, 0xA0, - 0x1D, 0xCA, 0xA1, 0x1D, 0xE0, 0x41, 0x1E, 0xDE, - 0xC1, 0x1C, 0x66, 0x24, 0x63, 0x30, 0xE, 0xE1, - 0xC0, 0xE, 0xEC, 0x30, 0xF, 0xE9, 0x40, 0xF, 0xE5, - 0x30, 0x43, 0x21, 0x83, 0x75, 0x18, 0x7, 0x73, - 0x48, 0x87, 0x5F, 0xA0, 0x87, 0x7C, 0x80, 0x87, - 0x72, 0x98, 0xB1, 0x94, 0x1, 0x3C, 0x8C, 0xC3, - 0x3C, 0x94, 0xC3, 0x38, 0xD0, 0x43, 0x3A, 0xBC, - 0x83, 0x3B, 0xCC, 0xC3, 0x8C, 0xC5, 0xC, 0x48, - 0x21, 0x15, 0x42, 0x61, 0x1E, 0xE6, 0x21, 0x1D, - 0xCE, 0xC1, 0x1D, 0x52, 0x81, 0x14, 0x66, 0x4C, - 0x67, 0x30, 0xE, 0xEF, 0x20, 0xF, 0xEF, 0xE0, - 0x6, 0xEF, 0x50, 0xF, 0xF4, 0x30, 0xF, 0xE9, 0x40, - 0xE, 0xE5, 0xE0, 0x6, 0xE6, 0x20, 0xF, 0xE1, 0xD0, - 0xE, 0xE5, 0x30, 0xA3, 0x40, 0x83, 0x76, 0x68, - 0x7, 0x79, 0x8, 0x87, 0x19, 0x52, 0x1A, 0xB8, - 0xC3, 0x3B, 0x84, 0x3, 0x3B, 0xA4, 0x43, 0x38, - 0xCC, 0x83, 0x1B, 0x84, 0x3, 0x39, 0x90, 0x83, - 0x3C, 0xCC, 0x3, 0x3C, 0x84, 0xC3, 0x38, 0x94, - 0x3, 0x0, 0x0, 0x0, 0x0, 0x79, 0x28, 0x0, 0x0, - 0x2A, 0x0, 0x0, 0x0, 0xC2, 0x3C, 0x90, 0x40, 0x86, - 0x10, 0x19, 0x32, 0xE2, 0x64, 0x90, 0x40, 0x46, - 0x2, 0x19, 0x23, 0x23, 0x46, 0x2, 0x13, 0x24, - 0xC6, 0x0, 0x13, 0x74, 0x12, 0xA9, 0xB7, 0x37, - 0x3A, 0x23, 0xB6, 0xB0, 0xB3, 0xB9, 0x23, 0x8C, - 0xCD, 0x1D, 0xA2, 0x2D, 0x2C, 0xCD, 0x6D, 0x8, - 0x42, 0x1, 0xC, 0x41, 0x38, 0x82, 0x21, 0x8, 0x87, - 0x30, 0x4, 0xE1, 0x18, 0x86, 0x20, 0x1C, 0xC4, - 0x18, 0x84, 0xA0, 0x18, 0x43, 0x90, 0x8C, 0x41, - 0x20, 0x94, 0x31, 0xC, 0x82, 0x71, 0x8C, 0x41, - 0x28, 0x8E, 0x31, 0xC, 0x45, 0x51, 0x8C, 0x41, - 0x40, 0x9C, 0x31, 0x14, 0xC4, 0x0, 0x0, 0x8F, - 0x89, 0xC8, 0xF0, 0x5C, 0xE4, 0xDE, 0xDE, 0xE8, - 0xE6, 0xD2, 0xCE, 0xDC, 0xC2, 0xE8, 0xEA, 0xE4, - 0xCA, 0xE6, 0x86, 0x12, 0x28, 0xC6, 0x21, 0xC3, - 0x73, 0x99, 0x43, 0xB, 0x23, 0x2B, 0x93, 0x6B, - 0x7A, 0x23, 0x2B, 0x63, 0x1B, 0x4A, 0xB0, 0x18, - 0x85, 0xC, 0xCF, 0xC5, 0xAE, 0x4C, 0x6E, 0x2E, - 0xED, 0xCD, 0x6D, 0x28, 0x1, 0x63, 0x1C, 0x32, - 0x3C, 0x97, 0x32, 0x37, 0x3A, 0xB9, 0x3C, 0xA8, - 0xB7, 0x34, 0x37, 0xBA, 0xB9, 0xA1, 0x4, 0xF, - 0x0, 0x0, 0x71, 0x20, 0x0, 0x0, 0x2, 0x0, 0x0, - 0x0, 0x6, 0x40, 0x30, 0x0, 0xD2, 0x0, 0x0, 0x0, - 0x61, 0x20, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x13, - 0x4, 0x1, 0x86, 0x3, 0x1, 0x0, 0x0, 0x2, 0x0, - 0x0, 0x0, 0x7, 0x50, 0x10, 0xCD, 0x14, 0x61, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ] - - Name: RTS0 - Size: 8 - RootSignature: - Size: 8 - AllowInputAssemblerInputLayout: true - -# CHECK: !dx.rootsignatures = !{[[RS:![0-9]+]]} -# CHECK: [[RS]] = !{void ()* @main, [[REL:![0-9]+]]} -# CHECK: [[REL]] = !{[[RF:![0-9]+]]} -# CHECK: [[RF]] = !{!"RootFlags", i32 1} diff --git a/llvm/unittests/Object/DXContainerTest.cpp b/llvm/unittests/Object/DXContainerTest.cpp index 5a2c852d6aef9..f80828f06bdd2 100644 --- a/llvm/unittests/Object/DXContainerTest.cpp +++ b/llvm/unittests/Object/DXContainerTest.cpp @@ -821,3 +821,25 @@ TEST(DXCFile, MalformedSignature) { "the end of the part data")); } } + +TEST(RootSignature, ParseRootFlags) { + uint8_t Buffer[] = { + 0x44, 0x58, 0x42, 0x43, 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, + 0x05, 0x39, 0xE1, 0xFE, 0x31, 0x20, 0xF0, 0xC1, 0x01, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x52, 0x54, 0x53, 0x30, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + }; + DXContainer C = + llvm::cantFail(DXContainer::create(getMemoryBuffer<180>(Buffer))); + + const auto &RS = C.getRootSignature(); + ASSERT_TRUE(RS.has_value()); + ASSERT_EQ(RS->getVersion(), 2); + ASSERT_EQ(RS->getNumParameters(), 0); + ASSERT_EQ(RS->getRootParametersOffset(), 0); + ASSERT_EQ(RS->getNumStaticSamplers(), 0); + ASSERT_EQ(RS->getStaticSamplersOffset(), 0); + ASSERT_EQ(RS->getFlags(), 0x01); +} diff --git a/llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp b/llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp index d4232295c8584..b18075bac96c7 100644 --- a/llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp +++ b/llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp @@ -15,6 +15,7 @@ #include "llvm/Support/raw_ostream.h" #include "llvm/Testing/Support/Error.h" #include "gtest/gtest.h" +#include using namespace llvm; using namespace llvm::object; @@ -107,3 +108,42 @@ TEST(DXCFile, ParseEmptyParts) { EXPECT_EQ(Storage.size(), 116u); EXPECT_TRUE(memcmp(Buffer, Storage.data(), 116) == 0); } + +TEST(RootSignature, ParseRootFlags) { + SmallString<128> Storage; + + // First read a fully explicit yaml with all sizes and offsets provided + ASSERT_TRUE(convert(Storage, R"(--- !dxcontainer + Header: + Hash: [ 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, 0x5, + 0x39, 0xE1, 0xFE, 0x31, 0x20, 0xF0, 0xC1 ] + Version: + Major: 1 + Minor: 0 + FileSize: 68 + PartCount: 1 + PartOffsets: [ 36 ] + Parts: + - Name: RTS0 + Size: 24 + RootSignature: + Version: 2 + NumParameters: 0 + RootParametersOffset: 24 + NumStaticSamplers: 0 + StaticSamplersOffset: 24 + AllowInputAssemblerInputLayout: true + )")); + + uint8_t Buffer[] = { + 0x44, 0x58, 0x42, 0x43, 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, + 0x05, 0x39, 0xE1, 0xFE, 0x31, 0x20, 0xF0, 0xC1, 0x01, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x52, 0x54, 0x53, 0x30, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + }; + + EXPECT_EQ(Storage.size(), 68u); + EXPECT_TRUE(memcmp(Buffer, Storage.data(), 68u) == 0); +} From 25e3f374698f06f2966aa433728e45c73c790034 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Mon, 3 Feb 2025 21:11:48 +0000 Subject: [PATCH 21/29] clean up --- llvm/test/tools/dxil-dis/lit.local.cfg | 2 +- llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/llvm/test/tools/dxil-dis/lit.local.cfg b/llvm/test/tools/dxil-dis/lit.local.cfg index 8fe45f696bff9..7b6819e0b406a 100644 --- a/llvm/test/tools/dxil-dis/lit.local.cfg +++ b/llvm/test/tools/dxil-dis/lit.local.cfg @@ -1,3 +1,3 @@ if not config.dxil_tests: config.unsupported = True -config.suffixes = [".ll", ".yaml"] +config.suffixes = [".ll"] diff --git a/llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp b/llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp index b18075bac96c7..eaa8049e8e7d9 100644 --- a/llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp +++ b/llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp @@ -15,7 +15,6 @@ #include "llvm/Support/raw_ostream.h" #include "llvm/Testing/Support/Error.h" #include "gtest/gtest.h" -#include using namespace llvm; using namespace llvm::object; From 751cbdcc76b5f6874f76765ef5ccdaaf7c58c449 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Tue, 4 Feb 2025 07:20:03 +0000 Subject: [PATCH 22/29] addressing comments --- llvm/include/llvm/BinaryFormat/DXContainer.h | 2 +- .../BinaryFormat/DXContainerConstants.def | 48 +++++-------------- .../include/llvm/ObjectYAML/DXContainerYAML.h | 5 +- llvm/lib/ObjectYAML/DXContainerEmitter.cpp | 5 ++ llvm/lib/ObjectYAML/DXContainerYAML.cpp | 6 +-- .../DXContainer/RootSignature-Flags.yaml | 18 +++---- .../ObjectYAML/DXContainerYAMLTest.cpp | 4 +- 7 files changed, 36 insertions(+), 52 deletions(-) diff --git a/llvm/include/llvm/BinaryFormat/DXContainer.h b/llvm/include/llvm/BinaryFormat/DXContainer.h index 71a6d15e46a81..b47cd2b5facd0 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainer.h +++ b/llvm/include/llvm/BinaryFormat/DXContainer.h @@ -162,7 +162,7 @@ enum class FeatureFlags : uint64_t { static_assert((uint64_t)FeatureFlags::NextUnusedBit <= 1ull << 63, "Shader flag bits exceed enum size."); -#define ROOT_ELEMENT_FLAG(Num, Val, Str) Val = 1ull << Num, +#define ROOT_ELEMENT_FLAG(Num, Val) Val = 1ull << Num, enum class RootElementFlag : uint32_t { #include "DXContainerConstants.def" }; diff --git a/llvm/include/llvm/BinaryFormat/DXContainerConstants.def b/llvm/include/llvm/BinaryFormat/DXContainerConstants.def index 2134c2375f6d3..e82c68bc0bda8 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainerConstants.def +++ b/llvm/include/llvm/BinaryFormat/DXContainerConstants.def @@ -53,44 +53,20 @@ SHADER_FEATURE_FLAG(31, 36, NextUnusedBit, "Next reserved shader flag bit (not a #undef SHADER_FEATURE_FLAG #endif // SHADER_FEATURE_FLAG -#ifdef ROOT_PARAMETER - -ROOT_PARAMETER(DescriptorTable) -ROOT_PARAMETER(Constants32Bit) -ROOT_PARAMETER(CBV) -ROOT_PARAMETER(SRV) -ROOT_PARAMETER(UAV) -#undef ROOT_PARAMETER -#endif // ROOT_PARAMETER - - -#ifdef SHADER_VISIBILITY - -SHADER_VISIBILITY(All) -SHADER_VISIBILITY(Vertex) -SHADER_VISIBILITY(Hull) -SHADER_VISIBILITY(Domain) -SHADER_VISIBILITY(Geometry) -SHADER_VISIBILITY(Pixel) -SHADER_VISIBILITY(Amplification) -SHADER_VISIBILITY(Mesh) -#undef SHADER_VISIBILITY -#endif // SHADER_VISIBILITY - #ifdef ROOT_ELEMENT_FLAG -ROOT_ELEMENT_FLAG(0, AllowInputAssemblerInputLayout, "The app is opting in to using the Input Assembler") -ROOT_ELEMENT_FLAG(1, DenyVertexShaderRootAccess, "Denies the vertex shader access to the root signature.") -ROOT_ELEMENT_FLAG(2, DenyHullShaderRootAccess, "Denies the hull shader access to the root signature.") -ROOT_ELEMENT_FLAG(3, DenyDomainShaderRootAccess, "Denies the domain shader access to the root signature.") -ROOT_ELEMENT_FLAG(4, DenyGeometryShaderRootAccess, "Denies the geometry shader access to the root signature.") -ROOT_ELEMENT_FLAG(5, DenyPixelShaderRootAccess, "Denies the pixel shader access to the root signature.") -ROOT_ELEMENT_FLAG(6, AllowStreamOutput, "The app is opting in to using Stream Output.") -ROOT_ELEMENT_FLAG(7, LocalRootSignature, "The root signature is to be used with raytracing shaders to define resource bindings sourced from shader records in shader tables.") -ROOT_ELEMENT_FLAG(8, DenyAmplificationShaderRootAccess, "Denies the amplification shader access to the root signature.") -ROOT_ELEMENT_FLAG(9, DenyMeshShaderRootAccess, "Denies the mesh shader access to the root signature.") -ROOT_ELEMENT_FLAG(10, CBVSRVUAVHeapDirectlyIndexed, "The shaders are allowed to index the CBV/SRV/UAV descriptor heap directly, using the ResourceDescriptorHeap built-in variable.") -ROOT_ELEMENT_FLAG(11, SamplerHeapDirectlyIndexed, "The shaders are allowed to index the sampler descriptor heap directly, using the SamplerDescriptorHeap built-in variable.") +ROOT_ELEMENT_FLAG(0, AllowInputAssemblerInputLayout) +ROOT_ELEMENT_FLAG(1, DenyVertexShaderRootAccess) +ROOT_ELEMENT_FLAG(2, DenyHullShaderRootAccess) +ROOT_ELEMENT_FLAG(3, DenyDomainShaderRootAccess) +ROOT_ELEMENT_FLAG(4, DenyGeometryShaderRootAccess) +ROOT_ELEMENT_FLAG(5, DenyPixelShaderRootAccess) +ROOT_ELEMENT_FLAG(6, AllowStreamOutput) +ROOT_ELEMENT_FLAG(7, LocalRootSignature) +ROOT_ELEMENT_FLAG(8, DenyAmplificationShaderRootAccess) +ROOT_ELEMENT_FLAG(9, DenyMeshShaderRootAccess) +ROOT_ELEMENT_FLAG(10, CBVSRVUAVHeapDirectlyIndexed) +ROOT_ELEMENT_FLAG(11, SamplerHeapDirectlyIndexed) #undef ROOT_ELEMENT_FLAG #endif // ROOT_ELEMENT_FLAG diff --git a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h index 1f967114ea1eb..0200f5cb196ff 100644 --- a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h +++ b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h @@ -73,18 +73,19 @@ struct ShaderHash { std::vector Digest; }; -#define ROOT_ELEMENT_FLAG(Num, Val, Str) bool Val = false; +#define ROOT_ELEMENT_FLAG(Num, Val) bool Val = false; struct RootSignatureDesc { RootSignatureDesc() = default; RootSignatureDesc(const object::DirectX::RootSignature &Data); - uint32_t getEncodedFlags(); uint32_t Version; uint32_t NumParameters; uint32_t RootParametersOffset; uint32_t NumStaticSamplers; uint32_t StaticSamplersOffset; + uint32_t getEncodedFlags(); + #include "llvm/BinaryFormat/DXContainerConstants.def" }; diff --git a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp index ada7383ea3c6b..b7d1c6558fa1f 100644 --- a/llvm/lib/ObjectYAML/DXContainerEmitter.cpp +++ b/llvm/lib/ObjectYAML/DXContainerEmitter.cpp @@ -268,6 +268,11 @@ void DXContainerWriter::writeParts(raw_ostream &OS) { mcdxbc::RootSignatureHeader Header; Header.Flags = P.RootSignature->getEncodedFlags(); + Header.Version = P.RootSignature->Version; + Header.NumParameters = P.RootSignature->NumParameters; + Header.RootParametersOffset = P.RootSignature->RootParametersOffset; + Header.NumStaticSamplers = P.RootSignature->NumStaticSamplers; + Header.StaticSamplersOffset = P.RootSignature->StaticSamplersOffset; Header.write(OS); break; diff --git a/llvm/lib/ObjectYAML/DXContainerYAML.cpp b/llvm/lib/ObjectYAML/DXContainerYAML.cpp index 522781c0d36ef..fdf87b05d1f43 100644 --- a/llvm/lib/ObjectYAML/DXContainerYAML.cpp +++ b/llvm/lib/ObjectYAML/DXContainerYAML.cpp @@ -37,14 +37,14 @@ DXContainerYAML::RootSignatureDesc::RootSignatureDesc( NumStaticSamplers(Data.getNumStaticSamplers()), StaticSamplersOffset(Data.getStaticSamplersOffset()) { uint32_t Flags = Data.getFlags(); -#define ROOT_ELEMENT_FLAG(Num, Val, Str) \ +#define ROOT_ELEMENT_FLAG(Num, Val) \ Val = (Flags & (uint32_t)dxbc::RootElementFlag::Val) > 0; #include "llvm/BinaryFormat/DXContainerConstants.def" } uint32_t DXContainerYAML::RootSignatureDesc::getEncodedFlags() { uint64_t Flag = 0; -#define ROOT_ELEMENT_FLAG(Num, Val, Str) \ +#define ROOT_ELEMENT_FLAG(Num, Val) \ if (Val) \ Flag |= (uint32_t)dxbc::RootElementFlag::Val; #include "llvm/BinaryFormat/DXContainerConstants.def" @@ -217,7 +217,7 @@ void MappingTraits::mapping( IO.mapRequired("RootParametersOffset", S.RootParametersOffset); IO.mapRequired("NumStaticSamplers", S.NumStaticSamplers); IO.mapRequired("StaticSamplersOffset", S.StaticSamplersOffset); -#define ROOT_ELEMENT_FLAG(Num, Val, Str) IO.mapOptional(#Val, S.Val, false); +#define ROOT_ELEMENT_FLAG(Num, Val) IO.mapOptional(#Val, S.Val, false); #include "llvm/BinaryFormat/DXContainerConstants.def" } diff --git a/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml b/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml index 06814f660f283..b0a3e6945f454 100644 --- a/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml +++ b/llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml @@ -14,18 +14,20 @@ Parts: Size: 24 RootSignature: Version: 2 - NumParameters: 0 - RootParametersOffset: 0 - NumStaticSamplers: 0 - StaticSamplersOffset: 0 + NumParameters: 1 + RootParametersOffset: 3 + NumStaticSamplers: 4 + StaticSamplersOffset: 5 AllowInputAssemblerInputLayout: true + DenyGeometryShaderRootAccess: true # CHECK: - Name: RTS0 # CHECK-NEXT: Size: 24 # CHECK-NEXT: RootSignature: # CHECK-NEXT: Version: 2 -# CHECK-NEXT: NumParameters: 0 -# CHECK-NEXT: RootParametersOffset: 0 -# CHECK-NEXT: NumStaticSamplers: 0 -# CHECK-NEXT: StaticSamplersOffset: 0 +# CHECK-NEXT: NumParameters: 1 +# CHECK-NEXT: RootParametersOffset: 3 +# CHECK-NEXT: NumStaticSamplers: 4 +# CHECK-NEXT: StaticSamplersOffset: 5 # CHECK-NEXT: AllowInputAssemblerInputLayout: true +# CHECK-NEXT: DenyGeometryShaderRootAccess: true diff --git a/llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp b/llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp index eaa8049e8e7d9..b48cd9ce53987 100644 --- a/llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp +++ b/llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp @@ -128,9 +128,9 @@ TEST(RootSignature, ParseRootFlags) { RootSignature: Version: 2 NumParameters: 0 - RootParametersOffset: 24 + RootParametersOffset: 0 NumStaticSamplers: 0 - StaticSamplersOffset: 24 + StaticSamplersOffset: 0 AllowInputAssemblerInputLayout: true )")); From 44532d6517e2664221104653482101f167aafd62 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Tue, 4 Feb 2025 19:19:36 +0000 Subject: [PATCH 23/29] adding fail test --- llvm/include/llvm/Object/DXContainer.h | 5 +-- llvm/lib/Object/DXContainer.cpp | 12 ++++-- llvm/unittests/Object/DXContainerTest.cpp | 51 +++++++++++++++-------- 3 files changed, 44 insertions(+), 24 deletions(-) diff --git a/llvm/include/llvm/Object/DXContainer.h b/llvm/include/llvm/Object/DXContainer.h index 47128f94e0968..c3a2f756bd683 100644 --- a/llvm/include/llvm/Object/DXContainer.h +++ b/llvm/include/llvm/Object/DXContainer.h @@ -119,7 +119,6 @@ namespace DirectX { class RootSignature { private: - StringRef Data; uint32_t Version; uint32_t NumParameters; uint32_t RootParametersOffset; @@ -128,9 +127,9 @@ class RootSignature { uint32_t Flags; public: - RootSignature(StringRef Data) : Data(Data) {} + RootSignature() {} - Error parse(); + Error parse(StringRef Data); uint32_t getVersion() const { return Version; } uint32_t getNumParameters() const { return NumParameters; } uint32_t getRootParametersOffset() const { return RootParametersOffset; } diff --git a/llvm/lib/Object/DXContainer.cpp b/llvm/lib/Object/DXContainer.cpp index 14179283f9807..91391b5144290 100644 --- a/llvm/lib/Object/DXContainer.cpp +++ b/llvm/lib/Object/DXContainer.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Object/DXContainer.h" +#include "llvm/ADT/StringRef.h" #include "llvm/BinaryFormat/DXContainer.h" #include "llvm/Object/Error.h" #include "llvm/Support/Alignment.h" @@ -96,8 +97,8 @@ Error DXContainer::parseHash(StringRef Part) { Error DXContainer::parseRootSignature(StringRef Part) { if (RootSignature) return parseFailed("More than one RTS0 part is present in the file"); - RootSignature = DirectX::RootSignature(Part); - if (Error Err = RootSignature->parse()) + RootSignature = DirectX::RootSignature(); + if (Error Err = RootSignature->parse(Part)) return Err; return Error::success(); } @@ -242,9 +243,14 @@ void DXContainer::PartIterator::updateIteratorImpl(const uint32_t Offset) { IteratorState.Offset = Offset; } -Error DirectX::RootSignature::parse() { +Error DirectX::RootSignature::parse(StringRef Data) { const char *Current = Data.begin(); + // Root Signature headers expects 6 integers to be present. + if (Data.size() < 6 * sizeof(uint32_t)) { + return parseFailed("Invalid data. Too small."); + } + Version = support::endian::read(Current); Current += sizeof(uint32_t); diff --git a/llvm/unittests/Object/DXContainerTest.cpp b/llvm/unittests/Object/DXContainerTest.cpp index f80828f06bdd2..bff58c036489f 100644 --- a/llvm/unittests/Object/DXContainerTest.cpp +++ b/llvm/unittests/Object/DXContainerTest.cpp @@ -823,23 +823,38 @@ TEST(DXCFile, MalformedSignature) { } TEST(RootSignature, ParseRootFlags) { - uint8_t Buffer[] = { - 0x44, 0x58, 0x42, 0x43, 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, - 0x05, 0x39, 0xE1, 0xFE, 0x31, 0x20, 0xF0, 0xC1, 0x01, 0x00, 0x00, 0x00, - 0x44, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x52, 0x54, 0x53, 0x30, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - }; - DXContainer C = - llvm::cantFail(DXContainer::create(getMemoryBuffer<180>(Buffer))); + { + uint8_t Buffer[] = { + 0x44, 0x58, 0x42, 0x43, 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, + 0x05, 0x39, 0xE1, 0xFE, 0x31, 0x20, 0xF0, 0xC1, 0x01, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x52, 0x54, 0x53, 0x30, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + }; + DXContainer C = + llvm::cantFail(DXContainer::create(getMemoryBuffer<180>(Buffer))); + + const auto &RS = C.getRootSignature(); + ASSERT_TRUE(RS.has_value()); + ASSERT_EQ(RS->getVersion(), 2); + ASSERT_EQ(RS->getNumParameters(), 0); + ASSERT_EQ(RS->getRootParametersOffset(), 0); + ASSERT_EQ(RS->getNumStaticSamplers(), 0); + ASSERT_EQ(RS->getStaticSamplersOffset(), 0); + ASSERT_EQ(RS->getFlags(), 0x01); + } - const auto &RS = C.getRootSignature(); - ASSERT_TRUE(RS.has_value()); - ASSERT_EQ(RS->getVersion(), 2); - ASSERT_EQ(RS->getNumParameters(), 0); - ASSERT_EQ(RS->getRootParametersOffset(), 0); - ASSERT_EQ(RS->getNumStaticSamplers(), 0); - ASSERT_EQ(RS->getStaticSamplersOffset(), 0); - ASSERT_EQ(RS->getFlags(), 0x01); + { + uint8_t Buffer[] = { + 0x44, 0x58, 0x42, 0x43, 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, + 0x6F, 0x05, 0x39, 0xE1, 0xFE, 0x31, 0x20, 0xF0, 0xC1, 0x01, 0x00, + 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, + 0x00, 0x00, 0x00, 0x52, 0x54, 0x53, 0x30, 0x18, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }; + EXPECT_THAT_EXPECTED(DXContainer::create(getMemoryBuffer<44>(Buffer)), + FailedWithMessage("Invalid data. Too small.")); + } } From ca21878831fe70976e4eeeec60e7a5300c2e1235 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Tue, 4 Feb 2025 19:26:29 +0000 Subject: [PATCH 24/29] adding comment --- llvm/include/llvm/BinaryFormat/DXContainerConstants.def | 2 ++ llvm/unittests/Object/DXContainerTest.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/llvm/include/llvm/BinaryFormat/DXContainerConstants.def b/llvm/include/llvm/BinaryFormat/DXContainerConstants.def index e82c68bc0bda8..39a0e7a5c8493 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainerConstants.def +++ b/llvm/include/llvm/BinaryFormat/DXContainerConstants.def @@ -53,6 +53,8 @@ SHADER_FEATURE_FLAG(31, 36, NextUnusedBit, "Next reserved shader flag bit (not a #undef SHADER_FEATURE_FLAG #endif // SHADER_FEATURE_FLAG + +// ROOT_ELEMENT_FLAG(bit offset for the flag, name). #ifdef ROOT_ELEMENT_FLAG ROOT_ELEMENT_FLAG(0, AllowInputAssemblerInputLayout) diff --git a/llvm/unittests/Object/DXContainerTest.cpp b/llvm/unittests/Object/DXContainerTest.cpp index bff58c036489f..8e20ae552c062 100644 --- a/llvm/unittests/Object/DXContainerTest.cpp +++ b/llvm/unittests/Object/DXContainerTest.cpp @@ -846,6 +846,7 @@ TEST(RootSignature, ParseRootFlags) { } { + // this parameter has the root signature definition missing some values. uint8_t Buffer[] = { 0x44, 0x58, 0x42, 0x43, 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, 0x05, 0x39, 0xE1, 0xFE, 0x31, 0x20, 0xF0, 0xC1, 0x01, 0x00, From 987901c6a74757e09345eeae172a1f4d23a39e0a Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Tue, 4 Feb 2025 23:24:59 +0000 Subject: [PATCH 25/29] adding few more tests --- llvm/include/llvm/BinaryFormat/DXContainer.h | 27 ++++++++++++------ llvm/include/llvm/Object/DXContainer.h | 1 + llvm/lib/Object/DXContainer.cpp | 17 +++++++++-- llvm/unittests/Object/DXContainerTest.cpp | 30 ++++++++++++++++++-- 4 files changed, 62 insertions(+), 13 deletions(-) diff --git a/llvm/include/llvm/BinaryFormat/DXContainer.h b/llvm/include/llvm/BinaryFormat/DXContainer.h index b47cd2b5facd0..4f48d0c41cf76 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainer.h +++ b/llvm/include/llvm/BinaryFormat/DXContainer.h @@ -14,9 +14,12 @@ #define LLVM_BINARYFORMAT_DXCONTAINER_H #include "llvm/ADT/StringRef.h" +#include "llvm/Object/Error.h" +#include "llvm/Support/Error.h" #include "llvm/Support/SwapByteOrder.h" #include "llvm/TargetParser/Triple.h" +#include #include namespace llvm { @@ -63,15 +66,6 @@ struct ShaderHash { void swapBytes() { sys::swapByteOrder(Flags); } }; -struct RootSignatureDesc { - uint32_t Size; - uint32_t Flags; - - void swapBytes() { - sys::swapByteOrder(Size); - sys::swapByteOrder(Flags); - } -}; struct ContainerVersion { uint16_t Major; @@ -556,6 +550,21 @@ struct ProgramSignatureElement { static_assert(sizeof(ProgramSignatureElement) == 32, "ProgramSignatureElement is misaligned"); +struct RootSignatureValidations { + + static Expected validateRootFlag(uint32_t Flags) { + if ((Flags & ~0x80000fff) != 0) + return llvm::make_error("Invalid flag"); + return Flags; + } + + static Expected validateVersion(uint32_t Version) { + if (Version < 1 || Version > 2) + return llvm::make_error("Invalid Version"); + return Version; + } +}; + } // namespace dxbc } // namespace llvm diff --git a/llvm/include/llvm/Object/DXContainer.h b/llvm/include/llvm/Object/DXContainer.h index c3a2f756bd683..e90c6866400e0 100644 --- a/llvm/include/llvm/Object/DXContainer.h +++ b/llvm/include/llvm/Object/DXContainer.h @@ -18,6 +18,7 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/BinaryFormat/DXContainer.h" +#include "llvm/Object/Error.h" #include "llvm/Support/Error.h" #include "llvm/Support/MemoryBufferRef.h" #include "llvm/TargetParser/Triple.h" diff --git a/llvm/lib/Object/DXContainer.cpp b/llvm/lib/Object/DXContainer.cpp index 91391b5144290..a9fbae8982024 100644 --- a/llvm/lib/Object/DXContainer.cpp +++ b/llvm/lib/Object/DXContainer.cpp @@ -12,7 +12,9 @@ #include "llvm/Object/Error.h" #include "llvm/Support/Alignment.h" #include "llvm/Support/Endian.h" +#include "llvm/Support/Error.h" #include "llvm/Support/FormatVariadic.h" +#include using namespace llvm; using namespace llvm::object; @@ -246,14 +248,20 @@ void DXContainer::PartIterator::updateIteratorImpl(const uint32_t Offset) { Error DirectX::RootSignature::parse(StringRef Data) { const char *Current = Data.begin(); + // Root Signature headers expects 6 integers to be present. if (Data.size() < 6 * sizeof(uint32_t)) { return parseFailed("Invalid data. Too small."); } - Version = support::endian::read(Current); + uint32_t VValue = support::endian::read(Current); Current += sizeof(uint32_t); + Expected MaybeVersion = dxbc::RootSignatureValidations::validateVersion(VValue); + if(Error E = MaybeVersion.takeError()) + return E; + Version = MaybeVersion.get(); + NumParameters = support::endian::read(Current); Current += sizeof(uint32_t); @@ -270,9 +278,14 @@ Error DirectX::RootSignature::parse(StringRef Data) { support::endian::read(Current); Current += sizeof(uint32_t); - Flags = support::endian::read(Current); + uint32_t FValue = support::endian::read(Current); Current += sizeof(uint32_t); + Expected MaybeFlag = dxbc::RootSignatureValidations::validateRootFlag(FValue); + if(Error E = MaybeFlag.takeError()) + return E; + Flags = MaybeFlag.get(); + return Error::success(); } diff --git a/llvm/unittests/Object/DXContainerTest.cpp b/llvm/unittests/Object/DXContainerTest.cpp index 8e20ae552c062..1433d5e7f2f08 100644 --- a/llvm/unittests/Object/DXContainerTest.cpp +++ b/llvm/unittests/Object/DXContainerTest.cpp @@ -833,7 +833,7 @@ TEST(RootSignature, ParseRootFlags) { 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, }; DXContainer C = - llvm::cantFail(DXContainer::create(getMemoryBuffer<180>(Buffer))); + llvm::cantFail(DXContainer::create(getMemoryBuffer<68>(Buffer))); const auto &RS = C.getRootSignature(); ASSERT_TRUE(RS.has_value()); @@ -855,7 +855,33 @@ TEST(RootSignature, ParseRootFlags) { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; - EXPECT_THAT_EXPECTED(DXContainer::create(getMemoryBuffer<44>(Buffer)), + EXPECT_THAT_EXPECTED(DXContainer::create(getMemoryBuffer<64>(Buffer)), FailedWithMessage("Invalid data. Too small.")); } + { + // Version has been changed to an invalid number. + uint8_t Buffer[] = { + 0x44, 0x58, 0x42, 0x43, 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, + 0x05, 0x39, 0xE1, 0xFE, 0x31, 0x20, 0xF0, 0xC1, 0x01, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x52, 0x54, 0x53, 0x30, 0x18, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + }; + EXPECT_THAT_EXPECTED(DXContainer::create(getMemoryBuffer<68>(Buffer)), + FailedWithMessage("Invalid Version")); + } + { + // Flag has been set to an invalid value + uint8_t Buffer[] = { + 0x44, 0x58, 0x42, 0x43, 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, + 0x05, 0x39, 0xE1, 0xFE, 0x31, 0x20, 0xF0, 0xC1, 0x01, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x52, 0x54, 0x53, 0x30, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xFF, + }; + EXPECT_THAT_EXPECTED(DXContainer::create(getMemoryBuffer<68>(Buffer)), + FailedWithMessage("Invalid flag")); + } } From 0fbe900a6d0d431c9267513901c90cd778ac61ed Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Tue, 4 Feb 2025 23:29:02 +0000 Subject: [PATCH 26/29] format --- llvm/include/llvm/BinaryFormat/DXContainer.h | 21 ++++++++++---------- llvm/lib/Object/DXContainer.cpp | 17 +++++++++------- llvm/unittests/Object/DXContainerTest.cpp | 4 ++-- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/llvm/include/llvm/BinaryFormat/DXContainer.h b/llvm/include/llvm/BinaryFormat/DXContainer.h index 4f48d0c41cf76..0d5caabd3471e 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainer.h +++ b/llvm/include/llvm/BinaryFormat/DXContainer.h @@ -66,7 +66,6 @@ struct ShaderHash { void swapBytes() { sys::swapByteOrder(Flags); } }; - struct ContainerVersion { uint16_t Major; uint16_t Minor; @@ -552,17 +551,17 @@ static_assert(sizeof(ProgramSignatureElement) == 32, struct RootSignatureValidations { - static Expected validateRootFlag(uint32_t Flags) { - if ((Flags & ~0x80000fff) != 0) - return llvm::make_error("Invalid flag"); - return Flags; - } + static Expected validateRootFlag(uint32_t Flags) { + if ((Flags & ~0x80000fff) != 0) + return llvm::make_error("Invalid flag"); + return Flags; + } - static Expected validateVersion(uint32_t Version) { - if (Version < 1 || Version > 2) - return llvm::make_error("Invalid Version"); - return Version; - } + static Expected validateVersion(uint32_t Version) { + if (Version < 1 || Version > 2) + return llvm::make_error("Invalid Version"); + return Version; + } }; } // namespace dxbc diff --git a/llvm/lib/Object/DXContainer.cpp b/llvm/lib/Object/DXContainer.cpp index a9fbae8982024..e4faed38c3e0a 100644 --- a/llvm/lib/Object/DXContainer.cpp +++ b/llvm/lib/Object/DXContainer.cpp @@ -248,17 +248,18 @@ void DXContainer::PartIterator::updateIteratorImpl(const uint32_t Offset) { Error DirectX::RootSignature::parse(StringRef Data) { const char *Current = Data.begin(); - // Root Signature headers expects 6 integers to be present. if (Data.size() < 6 * sizeof(uint32_t)) { return parseFailed("Invalid data. Too small."); } - uint32_t VValue = support::endian::read(Current); + uint32_t VValue = + support::endian::read(Current); Current += sizeof(uint32_t); - Expected MaybeVersion = dxbc::RootSignatureValidations::validateVersion(VValue); - if(Error E = MaybeVersion.takeError()) + Expected MaybeVersion = + dxbc::RootSignatureValidations::validateVersion(VValue); + if (Error E = MaybeVersion.takeError()) return E; Version = MaybeVersion.get(); @@ -278,11 +279,13 @@ Error DirectX::RootSignature::parse(StringRef Data) { support::endian::read(Current); Current += sizeof(uint32_t); - uint32_t FValue = support::endian::read(Current); + uint32_t FValue = + support::endian::read(Current); Current += sizeof(uint32_t); - Expected MaybeFlag = dxbc::RootSignatureValidations::validateRootFlag(FValue); - if(Error E = MaybeFlag.takeError()) + Expected MaybeFlag = + dxbc::RootSignatureValidations::validateRootFlag(FValue); + if (Error E = MaybeFlag.takeError()) return E; Flags = MaybeFlag.get(); diff --git a/llvm/unittests/Object/DXContainerTest.cpp b/llvm/unittests/Object/DXContainerTest.cpp index 1433d5e7f2f08..8489b05f8b331 100644 --- a/llvm/unittests/Object/DXContainerTest.cpp +++ b/llvm/unittests/Object/DXContainerTest.cpp @@ -868,7 +868,7 @@ TEST(RootSignature, ParseRootFlags) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, }; - EXPECT_THAT_EXPECTED(DXContainer::create(getMemoryBuffer<68>(Buffer)), + EXPECT_THAT_EXPECTED(DXContainer::create(getMemoryBuffer<68>(Buffer)), FailedWithMessage("Invalid Version")); } { @@ -881,7 +881,7 @@ TEST(RootSignature, ParseRootFlags) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xFF, }; - EXPECT_THAT_EXPECTED(DXContainer::create(getMemoryBuffer<68>(Buffer)), + EXPECT_THAT_EXPECTED(DXContainer::create(getMemoryBuffer<68>(Buffer)), FailedWithMessage("Invalid flag")); } } From b771aeac329152334ec10a0435b4f3e448ef934e Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Wed, 5 Feb 2025 20:21:43 +0000 Subject: [PATCH 27/29] cleanup --- llvm/include/llvm/BinaryFormat/DXContainer.h | 7 +++---- llvm/include/llvm/Object/DXContainer.h | 1 - llvm/lib/Object/DXContainer.cpp | 3 --- llvm/lib/ObjectYAML/DXContainerYAML.cpp | 1 - 4 files changed, 3 insertions(+), 9 deletions(-) diff --git a/llvm/include/llvm/BinaryFormat/DXContainer.h b/llvm/include/llvm/BinaryFormat/DXContainer.h index 0d5caabd3471e..c219aa819795e 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainer.h +++ b/llvm/include/llvm/BinaryFormat/DXContainer.h @@ -14,12 +14,11 @@ #define LLVM_BINARYFORMAT_DXCONTAINER_H #include "llvm/ADT/StringRef.h" -#include "llvm/Object/Error.h" +#include "llvm/Support/BinaryStreamError.h" #include "llvm/Support/Error.h" #include "llvm/Support/SwapByteOrder.h" #include "llvm/TargetParser/Triple.h" -#include #include namespace llvm { @@ -553,13 +552,13 @@ struct RootSignatureValidations { static Expected validateRootFlag(uint32_t Flags) { if ((Flags & ~0x80000fff) != 0) - return llvm::make_error("Invalid flag"); + return llvm::make_error("Invalid flag"); return Flags; } static Expected validateVersion(uint32_t Version) { if (Version < 1 || Version > 2) - return llvm::make_error("Invalid Version"); + return llvm::make_error("Invalid Version"); return Version; } }; diff --git a/llvm/include/llvm/Object/DXContainer.h b/llvm/include/llvm/Object/DXContainer.h index e90c6866400e0..c3a2f756bd683 100644 --- a/llvm/include/llvm/Object/DXContainer.h +++ b/llvm/include/llvm/Object/DXContainer.h @@ -18,7 +18,6 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/BinaryFormat/DXContainer.h" -#include "llvm/Object/Error.h" #include "llvm/Support/Error.h" #include "llvm/Support/MemoryBufferRef.h" #include "llvm/TargetParser/Triple.h" diff --git a/llvm/lib/Object/DXContainer.cpp b/llvm/lib/Object/DXContainer.cpp index e4faed38c3e0a..4a5f581808045 100644 --- a/llvm/lib/Object/DXContainer.cpp +++ b/llvm/lib/Object/DXContainer.cpp @@ -7,14 +7,11 @@ //===----------------------------------------------------------------------===// #include "llvm/Object/DXContainer.h" -#include "llvm/ADT/StringRef.h" #include "llvm/BinaryFormat/DXContainer.h" #include "llvm/Object/Error.h" #include "llvm/Support/Alignment.h" #include "llvm/Support/Endian.h" -#include "llvm/Support/Error.h" #include "llvm/Support/FormatVariadic.h" -#include using namespace llvm; using namespace llvm::object; diff --git a/llvm/lib/ObjectYAML/DXContainerYAML.cpp b/llvm/lib/ObjectYAML/DXContainerYAML.cpp index fdf87b05d1f43..0869fd4fa9785 100644 --- a/llvm/lib/ObjectYAML/DXContainerYAML.cpp +++ b/llvm/lib/ObjectYAML/DXContainerYAML.cpp @@ -14,7 +14,6 @@ #include "llvm/ObjectYAML/DXContainerYAML.h" #include "llvm/ADT/ScopeExit.h" #include "llvm/BinaryFormat/DXContainer.h" -#include "llvm/Object/DXContainer.h" #include "llvm/Support/ScopedPrinter.h" namespace llvm { From 74f722698fa3058dc2e6ad1bde6f4b22869a4a86 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Fri, 7 Feb 2025 18:26:44 +0000 Subject: [PATCH 28/29] addressing comments and fix tests --- llvm/include/llvm/BinaryFormat/DXContainer.h | 5 +++-- llvm/lib/Object/DXContainer.cpp | 6 +++--- llvm/unittests/Object/DXContainerTest.cpp | 18 ++++++++++++------ 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/llvm/include/llvm/BinaryFormat/DXContainer.h b/llvm/include/llvm/BinaryFormat/DXContainer.h index c219aa819795e..548760afc08e8 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainer.h +++ b/llvm/include/llvm/BinaryFormat/DXContainer.h @@ -552,13 +552,14 @@ struct RootSignatureValidations { static Expected validateRootFlag(uint32_t Flags) { if ((Flags & ~0x80000fff) != 0) - return llvm::make_error("Invalid flag"); + return llvm::make_error("Invalid Root Signature flag"); return Flags; } static Expected validateVersion(uint32_t Version) { if (Version < 1 || Version > 2) - return llvm::make_error("Invalid Version"); + return llvm::make_error( + "Invalid Root Signature Version"); return Version; } }; diff --git a/llvm/lib/Object/DXContainer.cpp b/llvm/lib/Object/DXContainer.cpp index 4a5f581808045..f28b096008b2f 100644 --- a/llvm/lib/Object/DXContainer.cpp +++ b/llvm/lib/Object/DXContainer.cpp @@ -246,9 +246,9 @@ Error DirectX::RootSignature::parse(StringRef Data) { const char *Current = Data.begin(); // Root Signature headers expects 6 integers to be present. - if (Data.size() < 6 * sizeof(uint32_t)) { - return parseFailed("Invalid data. Too small."); - } + if (Data.size() < 6 * sizeof(uint32_t)) + return parseFailed( + "Invalid root signature, insufficient space for header."); uint32_t VValue = support::endian::read(Current); diff --git a/llvm/unittests/Object/DXContainerTest.cpp b/llvm/unittests/Object/DXContainerTest.cpp index 8489b05f8b331..88a915f560e05 100644 --- a/llvm/unittests/Object/DXContainerTest.cpp +++ b/llvm/unittests/Object/DXContainerTest.cpp @@ -855,8 +855,10 @@ TEST(RootSignature, ParseRootFlags) { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; - EXPECT_THAT_EXPECTED(DXContainer::create(getMemoryBuffer<64>(Buffer)), - FailedWithMessage("Invalid data. Too small.")); + EXPECT_THAT_EXPECTED( + DXContainer::create(getMemoryBuffer<64>(Buffer)), + FailedWithMessage( + "Invalid root signature, insufficient space for header.")); } { // Version has been changed to an invalid number. @@ -868,8 +870,10 @@ TEST(RootSignature, ParseRootFlags) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, }; - EXPECT_THAT_EXPECTED(DXContainer::create(getMemoryBuffer<68>(Buffer)), - FailedWithMessage("Invalid Version")); + EXPECT_THAT_EXPECTED( + DXContainer::create(getMemoryBuffer<68>(Buffer)), + FailedWithMessage("Stream Error: An unspecified error has occurred. " + "Invalid Root Signature Version")); } { // Flag has been set to an invalid value @@ -881,7 +885,9 @@ TEST(RootSignature, ParseRootFlags) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xFF, }; - EXPECT_THAT_EXPECTED(DXContainer::create(getMemoryBuffer<68>(Buffer)), - FailedWithMessage("Invalid flag")); + EXPECT_THAT_EXPECTED( + DXContainer::create(getMemoryBuffer<68>(Buffer)), + FailedWithMessage("Stream Error: An unspecified error has occurred. " + "Invalid Root Signature flag")); } } From 69f581a7483ce3e5d8d5638ac842d550da2ff5bb Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Fri, 7 Feb 2025 20:06:00 +0000 Subject: [PATCH 29/29] making code clearer --- llvm/include/llvm/BinaryFormat/DXContainer.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/llvm/include/llvm/BinaryFormat/DXContainer.h b/llvm/include/llvm/BinaryFormat/DXContainer.h index 548760afc08e8..fbab066bf4517 100644 --- a/llvm/include/llvm/BinaryFormat/DXContainer.h +++ b/llvm/include/llvm/BinaryFormat/DXContainer.h @@ -557,10 +557,11 @@ struct RootSignatureValidations { } static Expected validateVersion(uint32_t Version) { - if (Version < 1 || Version > 2) - return llvm::make_error( - "Invalid Root Signature Version"); - return Version; + if (Version == 1 || Version == 2) + return Version; + + return llvm::make_error( + "Invalid Root Signature Version"); } };