https://github.com/inbelic updated https://github.com/llvm/llvm-project/pull/143041
>From e9d782af7335af47b83db3bffcc6b91a6465ee6f Mon Sep 17 00:00:00 2001 From: Finn Plummer <canadienf...@gmail.com> Date: Thu, 5 Jun 2025 18:40:36 +0000 Subject: [PATCH 1/4] move defs to DXILABI --- .../llvm/Frontend/HLSL/HLSLRootSignature.h | 120 ------------------ llvm/include/llvm/Support/DXILABI.h | 120 ++++++++++++++++++ 2 files changed, 120 insertions(+), 120 deletions(-) diff --git a/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h b/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h index 2f028817b45b6..513aa8a358ac4 100644 --- a/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h +++ b/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h @@ -22,126 +22,6 @@ namespace llvm { namespace hlsl { namespace rootsig { -// Definition of the various enumerations and flags. The definitions of all -// values here correspond to their description in the d3d12.h header and are -// carried over from their values in DXC. For reference: -// https://learn.microsoft.com/en-us/windows/win32/api/d3d12/ - -enum class RootFlags : uint32_t { - None = 0, - AllowInputAssemblerInputLayout = 0x1, - DenyVertexShaderRootAccess = 0x2, - DenyHullShaderRootAccess = 0x4, - DenyDomainShaderRootAccess = 0x8, - DenyGeometryShaderRootAccess = 0x10, - DenyPixelShaderRootAccess = 0x20, - AllowStreamOutput = 0x40, - LocalRootSignature = 0x80, - DenyAmplificationShaderRootAccess = 0x100, - DenyMeshShaderRootAccess = 0x200, - CBVSRVUAVHeapDirectlyIndexed = 0x400, - SamplerHeapDirectlyIndexed = 0x800, - ValidFlags = 0x00000fff -}; - -enum class RootDescriptorFlags : unsigned { - None = 0, - DataVolatile = 0x2, - DataStaticWhileSetAtExecute = 0x4, - DataStatic = 0x8, - ValidFlags = 0xe, -}; - -enum class DescriptorRangeFlags : unsigned { - None = 0, - DescriptorsVolatile = 0x1, - DataVolatile = 0x2, - DataStaticWhileSetAtExecute = 0x4, - DataStatic = 0x8, - DescriptorsStaticKeepingBufferBoundsChecks = 0x10000, - ValidFlags = 0x1000f, - ValidSamplerFlags = DescriptorsVolatile, -}; - -enum class ShaderVisibility { - All = 0, - Vertex = 1, - Hull = 2, - Domain = 3, - Geometry = 4, - Pixel = 5, - Amplification = 6, - Mesh = 7, -}; - -// D3D12_FILTER enumeration: -// https://learn.microsoft.com/en-us/windows/win32/api/d3d12/ne-d3d12-d3d12_filter -enum class SamplerFilter { - MinMagMipPoint = 0, - MinMagPointMipLinear = 0x1, - MinPointMagLinearMipPoint = 0x4, - MinPointMagMipLinear = 0x5, - MinLinearMagMipPoint = 0x10, - MinLinearMagPointMipLinear = 0x11, - MinMagLinearMipPoint = 0x14, - MinMagMipLinear = 0x15, - Anisotropic = 0x55, - ComparisonMinMagMipPoint = 0x80, - ComparisonMinMagPointMipLinear = 0x81, - ComparisonMinPointMagLinearMipPoint = 0x84, - ComparisonMinPointMagMipLinear = 0x85, - ComparisonMinLinearMagMipPoint = 0x90, - ComparisonMinLinearMagPointMipLinear = 0x91, - ComparisonMinMagLinearMipPoint = 0x94, - ComparisonMinMagMipLinear = 0x95, - ComparisonAnisotropic = 0xd5, - MinimumMinMagMipPoint = 0x100, - MinimumMinMagPointMipLinear = 0x101, - MinimumMinPointMagLinearMipPoint = 0x104, - MinimumMinPointMagMipLinear = 0x105, - MinimumMinLinearMagMipPoint = 0x110, - MinimumMinLinearMagPointMipLinear = 0x111, - MinimumMinMagLinearMipPoint = 0x114, - MinimumMinMagMipLinear = 0x115, - MinimumAnisotropic = 0x155, - MaximumMinMagMipPoint = 0x180, - MaximumMinMagPointMipLinear = 0x181, - MaximumMinPointMagLinearMipPoint = 0x184, - MaximumMinPointMagMipLinear = 0x185, - MaximumMinLinearMagMipPoint = 0x190, - MaximumMinLinearMagPointMipLinear = 0x191, - MaximumMinMagLinearMipPoint = 0x194, - MaximumMinMagMipLinear = 0x195, - MaximumAnisotropic = 0x1d5 -}; - -enum class TextureAddressMode { - Wrap = 1, - Mirror = 2, - Clamp = 3, - Border = 4, - MirrorOnce = 5 -}; - -enum class ComparisonFunc : unsigned { - Never = 1, - Less = 2, - Equal = 3, - LessEqual = 4, - Greater = 5, - NotEqual = 6, - GreaterEqual = 7, - Always = 8 -}; - -enum class StaticBorderColor { - TransparentBlack = 0, - OpaqueBlack = 1, - OpaqueWhite = 2, - OpaqueBlackUint = 3, - OpaqueWhiteUint = 4 -}; - // Definitions of the in-memory data layout structures // Models the different registers: bReg | tReg | uReg | sReg diff --git a/llvm/include/llvm/Support/DXILABI.h b/llvm/include/llvm/Support/DXILABI.h index b479f7c73eba3..acd9e436ff8b9 100644 --- a/llvm/include/llvm/Support/DXILABI.h +++ b/llvm/include/llvm/Support/DXILABI.h @@ -99,6 +99,126 @@ enum class SamplerFeedbackType : uint32_t { const unsigned MinWaveSize = 4; const unsigned MaxWaveSize = 128; +// Definition of the various enumerations and flags. The definitions of all +// values here correspond to their description in the d3d12.h header and are +// carried over from their values in DXC. For reference: +// https://learn.microsoft.com/en-us/windows/win32/api/d3d12/ + +enum class RootFlags : uint32_t { + None = 0, + AllowInputAssemblerInputLayout = 0x1, + DenyVertexShaderRootAccess = 0x2, + DenyHullShaderRootAccess = 0x4, + DenyDomainShaderRootAccess = 0x8, + DenyGeometryShaderRootAccess = 0x10, + DenyPixelShaderRootAccess = 0x20, + AllowStreamOutput = 0x40, + LocalRootSignature = 0x80, + DenyAmplificationShaderRootAccess = 0x100, + DenyMeshShaderRootAccess = 0x200, + CBVSRVUAVHeapDirectlyIndexed = 0x400, + SamplerHeapDirectlyIndexed = 0x800, + ValidFlags = 0x00000fff +}; + +enum class RootDescriptorFlags : unsigned { + None = 0, + DataVolatile = 0x2, + DataStaticWhileSetAtExecute = 0x4, + DataStatic = 0x8, + ValidFlags = 0xe, +}; + +enum class DescriptorRangeFlags : unsigned { + None = 0, + DescriptorsVolatile = 0x1, + DataVolatile = 0x2, + DataStaticWhileSetAtExecute = 0x4, + DataStatic = 0x8, + DescriptorsStaticKeepingBufferBoundsChecks = 0x10000, + ValidFlags = 0x1000f, + ValidSamplerFlags = DescriptorsVolatile, +}; + +enum class ShaderVisibility { + All = 0, + Vertex = 1, + Hull = 2, + Domain = 3, + Geometry = 4, + Pixel = 5, + Amplification = 6, + Mesh = 7, +}; + +// D3D12_FILTER enumeration: +// https://learn.microsoft.com/en-us/windows/win32/api/d3d12/ne-d3d12-d3d12_filter +enum class SamplerFilter { + MinMagMipPoint = 0, + MinMagPointMipLinear = 0x1, + MinPointMagLinearMipPoint = 0x4, + MinPointMagMipLinear = 0x5, + MinLinearMagMipPoint = 0x10, + MinLinearMagPointMipLinear = 0x11, + MinMagLinearMipPoint = 0x14, + MinMagMipLinear = 0x15, + Anisotropic = 0x55, + ComparisonMinMagMipPoint = 0x80, + ComparisonMinMagPointMipLinear = 0x81, + ComparisonMinPointMagLinearMipPoint = 0x84, + ComparisonMinPointMagMipLinear = 0x85, + ComparisonMinLinearMagMipPoint = 0x90, + ComparisonMinLinearMagPointMipLinear = 0x91, + ComparisonMinMagLinearMipPoint = 0x94, + ComparisonMinMagMipLinear = 0x95, + ComparisonAnisotropic = 0xd5, + MinimumMinMagMipPoint = 0x100, + MinimumMinMagPointMipLinear = 0x101, + MinimumMinPointMagLinearMipPoint = 0x104, + MinimumMinPointMagMipLinear = 0x105, + MinimumMinLinearMagMipPoint = 0x110, + MinimumMinLinearMagPointMipLinear = 0x111, + MinimumMinMagLinearMipPoint = 0x114, + MinimumMinMagMipLinear = 0x115, + MinimumAnisotropic = 0x155, + MaximumMinMagMipPoint = 0x180, + MaximumMinMagPointMipLinear = 0x181, + MaximumMinPointMagLinearMipPoint = 0x184, + MaximumMinPointMagMipLinear = 0x185, + MaximumMinLinearMagMipPoint = 0x190, + MaximumMinLinearMagPointMipLinear = 0x191, + MaximumMinMagLinearMipPoint = 0x194, + MaximumMinMagMipLinear = 0x195, + MaximumAnisotropic = 0x1d5 +}; + +enum class TextureAddressMode { + Wrap = 1, + Mirror = 2, + Clamp = 3, + Border = 4, + MirrorOnce = 5 +}; + +enum class ComparisonFunc : unsigned { + Never = 1, + Less = 2, + Equal = 3, + LessEqual = 4, + Greater = 5, + NotEqual = 6, + GreaterEqual = 7, + Always = 8 +}; + +enum class StaticBorderColor { + TransparentBlack = 0, + OpaqueBlack = 1, + OpaqueWhite = 2, + OpaqueBlackUint = 3, + OpaqueWhiteUint = 4 +}; + } // namespace dxil } // namespace llvm >From f736b20eaa8e89685bce658f5a04326e893db3e6 Mon Sep 17 00:00:00 2001 From: Finn Plummer <canadienf...@gmail.com> Date: Thu, 5 Jun 2025 18:43:55 +0000 Subject: [PATCH 2/4] update comments --- llvm/include/llvm/Support/DXILABI.h | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/llvm/include/llvm/Support/DXILABI.h b/llvm/include/llvm/Support/DXILABI.h index acd9e436ff8b9..80c6b5041c96e 100644 --- a/llvm/include/llvm/Support/DXILABI.h +++ b/llvm/include/llvm/Support/DXILABI.h @@ -99,11 +99,12 @@ enum class SamplerFeedbackType : uint32_t { const unsigned MinWaveSize = 4; const unsigned MaxWaveSize = 128; -// Definition of the various enumerations and flags. The definitions of all -// values here correspond to their description in the d3d12.h header and are -// carried over from their values in DXC. For reference: +// Definition of the various d3d12.h enumerations and flags. The definitions of +// all values here correspond to their description in the d3d12.h header and +// are carried over from their values in DXC. For reference: // https://learn.microsoft.com/en-us/windows/win32/api/d3d12/ +// D3D12_ROOT_SIGNATURE_FLAGS enum class RootFlags : uint32_t { None = 0, AllowInputAssemblerInputLayout = 0x1, @@ -121,6 +122,7 @@ enum class RootFlags : uint32_t { ValidFlags = 0x00000fff }; +// D3D12_ROOT_DESCRIPTOR_FLAGS enum class RootDescriptorFlags : unsigned { None = 0, DataVolatile = 0x2, @@ -129,6 +131,7 @@ enum class RootDescriptorFlags : unsigned { ValidFlags = 0xe, }; +// D3D12_DESCRIPTOR_RANGE_FLAGS enum class DescriptorRangeFlags : unsigned { None = 0, DescriptorsVolatile = 0x1, @@ -140,6 +143,7 @@ enum class DescriptorRangeFlags : unsigned { ValidSamplerFlags = DescriptorsVolatile, }; +// D3D12_SHADER_VISIBILITY enum class ShaderVisibility { All = 0, Vertex = 1, @@ -151,8 +155,7 @@ enum class ShaderVisibility { Mesh = 7, }; -// D3D12_FILTER enumeration: -// https://learn.microsoft.com/en-us/windows/win32/api/d3d12/ne-d3d12-d3d12_filter +// D3D12_FILTER enum class SamplerFilter { MinMagMipPoint = 0, MinMagPointMipLinear = 0x1, @@ -192,6 +195,7 @@ enum class SamplerFilter { MaximumAnisotropic = 0x1d5 }; +// D3D12_TEXTURE_ADDRESS_MODE enum class TextureAddressMode { Wrap = 1, Mirror = 2, @@ -200,6 +204,7 @@ enum class TextureAddressMode { MirrorOnce = 5 }; +// D3D12_COMPARISON_FUNC enum class ComparisonFunc : unsigned { Never = 1, Less = 2, @@ -211,6 +216,7 @@ enum class ComparisonFunc : unsigned { Always = 8 }; +// D3D12_STATIC_BORDER_COLOR enum class StaticBorderColor { TransparentBlack = 0, OpaqueBlack = 1, >From ab9911c5b50023ace78e5dca7cd9850ae37bc586 Mon Sep 17 00:00:00 2001 From: Finn Plummer <canadienf...@gmail.com> Date: Thu, 5 Jun 2025 21:24:40 +0000 Subject: [PATCH 3/4] resolve namespacing --- .../clang/Parse/ParseHLSLRootSignature.h | 38 +++++++++---------- clang/lib/Parse/ParseHLSLRootSignature.cpp | 15 ++++---- .../Parse/ParseHLSLRootSignatureTest.cpp | 1 + .../llvm/Frontend/HLSL/HLSLRootSignature.h | 36 +++++++++--------- .../Frontend/HLSL/HLSLRootSignatureUtils.h | 2 +- .../Frontend/HLSL/HLSLRootSignatureUtils.cpp | 36 +++++++++--------- .../Frontend/HLSLRootSignatureDumpTest.cpp | 1 + 7 files changed, 66 insertions(+), 63 deletions(-) diff --git a/clang/include/clang/Parse/ParseHLSLRootSignature.h b/clang/include/clang/Parse/ParseHLSLRootSignature.h index afa2c4d8cfe50..066c43cc2be1e 100644 --- a/clang/include/clang/Parse/ParseHLSLRootSignature.h +++ b/clang/include/clang/Parse/ParseHLSLRootSignature.h @@ -71,7 +71,7 @@ class RootSignatureParser { // expected, or, there is a lexing error /// Root Element parse methods: - std::optional<llvm::hlsl::rootsig::RootFlags> parseRootFlags(); + std::optional<llvm::dxil::RootFlags> parseRootFlags(); std::optional<llvm::hlsl::rootsig::RootConstants> parseRootConstants(); std::optional<llvm::hlsl::rootsig::RootDescriptor> parseRootDescriptor(); std::optional<llvm::hlsl::rootsig::DescriptorTable> parseDescriptorTable(); @@ -86,15 +86,15 @@ class RootSignatureParser { std::optional<llvm::hlsl::rootsig::Register> Reg; std::optional<uint32_t> Num32BitConstants; std::optional<uint32_t> Space; - std::optional<llvm::hlsl::rootsig::ShaderVisibility> Visibility; + std::optional<llvm::dxil::ShaderVisibility> Visibility; }; std::optional<ParsedConstantParams> parseRootConstantParams(); struct ParsedRootDescriptorParams { std::optional<llvm::hlsl::rootsig::Register> Reg; std::optional<uint32_t> Space; - std::optional<llvm::hlsl::rootsig::ShaderVisibility> Visibility; - std::optional<llvm::hlsl::rootsig::RootDescriptorFlags> Flags; + std::optional<llvm::dxil::ShaderVisibility> Visibility; + std::optional<llvm::dxil::RootDescriptorFlags> Flags; }; std::optional<ParsedRootDescriptorParams> parseRootDescriptorParams(RootSignatureToken::Kind RegType); @@ -104,25 +104,25 @@ class RootSignatureParser { std::optional<uint32_t> NumDescriptors; std::optional<uint32_t> Space; std::optional<uint32_t> Offset; - std::optional<llvm::hlsl::rootsig::DescriptorRangeFlags> Flags; + std::optional<llvm::dxil::DescriptorRangeFlags> Flags; }; std::optional<ParsedClauseParams> parseDescriptorTableClauseParams(RootSignatureToken::Kind RegType); struct ParsedStaticSamplerParams { std::optional<llvm::hlsl::rootsig::Register> Reg; - std::optional<llvm::hlsl::rootsig::SamplerFilter> Filter; - std::optional<llvm::hlsl::rootsig::TextureAddressMode> AddressU; - std::optional<llvm::hlsl::rootsig::TextureAddressMode> AddressV; - std::optional<llvm::hlsl::rootsig::TextureAddressMode> AddressW; + std::optional<llvm::dxil::SamplerFilter> Filter; + std::optional<llvm::dxil::TextureAddressMode> AddressU; + std::optional<llvm::dxil::TextureAddressMode> AddressV; + std::optional<llvm::dxil::TextureAddressMode> AddressW; std::optional<float> MipLODBias; std::optional<uint32_t> MaxAnisotropy; - std::optional<llvm::hlsl::rootsig::ComparisonFunc> CompFunc; - std::optional<llvm::hlsl::rootsig::StaticBorderColor> BorderColor; + std::optional<llvm::dxil::ComparisonFunc> CompFunc; + std::optional<llvm::dxil::StaticBorderColor> BorderColor; std::optional<float> MinLOD; std::optional<float> MaxLOD; std::optional<uint32_t> Space; - std::optional<llvm::hlsl::rootsig::ShaderVisibility> Visibility; + std::optional<llvm::dxil::ShaderVisibility> Visibility; }; std::optional<ParsedStaticSamplerParams> parseStaticSamplerParams(); @@ -132,16 +132,16 @@ class RootSignatureParser { std::optional<float> parseFloatParam(); /// Parsing methods of various enums - std::optional<llvm::hlsl::rootsig::ShaderVisibility> parseShaderVisibility(); - std::optional<llvm::hlsl::rootsig::SamplerFilter> parseSamplerFilter(); - std::optional<llvm::hlsl::rootsig::TextureAddressMode> + std::optional<llvm::dxil::ShaderVisibility> parseShaderVisibility(); + std::optional<llvm::dxil::SamplerFilter> parseSamplerFilter(); + std::optional<llvm::dxil::TextureAddressMode> parseTextureAddressMode(); - std::optional<llvm::hlsl::rootsig::ComparisonFunc> parseComparisonFunc(); - std::optional<llvm::hlsl::rootsig::StaticBorderColor> + std::optional<llvm::dxil::ComparisonFunc> parseComparisonFunc(); + std::optional<llvm::dxil::StaticBorderColor> parseStaticBorderColor(); - std::optional<llvm::hlsl::rootsig::RootDescriptorFlags> + std::optional<llvm::dxil::RootDescriptorFlags> parseRootDescriptorFlags(); - std::optional<llvm::hlsl::rootsig::DescriptorRangeFlags> + std::optional<llvm::dxil::DescriptorRangeFlags> parseDescriptorRangeFlags(); /// Use NumericLiteralParser to convert CurToken.NumSpelling into a unsigned diff --git a/clang/lib/Parse/ParseHLSLRootSignature.cpp b/clang/lib/Parse/ParseHLSLRootSignature.cpp index e510302c3aae0..4e01b23a48572 100644 --- a/clang/lib/Parse/ParseHLSLRootSignature.cpp +++ b/clang/lib/Parse/ParseHLSLRootSignature.cpp @@ -11,6 +11,7 @@ #include "clang/Lex/LiteralSupport.h" using namespace llvm::hlsl::rootsig; +using namespace llvm::dxil; namespace clang { namespace hlsl { @@ -983,7 +984,7 @@ std::optional<float> RootSignatureParser::parseFloatParam() { return std::nullopt; } -std::optional<llvm::hlsl::rootsig::ShaderVisibility> +std::optional<::ShaderVisibility> RootSignatureParser::parseShaderVisibility() { assert(CurToken.TokKind == TokenKind::pu_equal && "Expects to only be invoked starting at given keyword"); @@ -1009,7 +1010,7 @@ RootSignatureParser::parseShaderVisibility() { return std::nullopt; } -std::optional<llvm::hlsl::rootsig::SamplerFilter> +std::optional<::SamplerFilter> RootSignatureParser::parseSamplerFilter() { assert(CurToken.TokKind == TokenKind::pu_equal && "Expects to only be invoked starting at given keyword"); @@ -1035,7 +1036,7 @@ RootSignatureParser::parseSamplerFilter() { return std::nullopt; } -std::optional<llvm::hlsl::rootsig::TextureAddressMode> +std::optional<::TextureAddressMode> RootSignatureParser::parseTextureAddressMode() { assert(CurToken.TokKind == TokenKind::pu_equal && "Expects to only be invoked starting at given keyword"); @@ -1061,7 +1062,7 @@ RootSignatureParser::parseTextureAddressMode() { return std::nullopt; } -std::optional<llvm::hlsl::rootsig::ComparisonFunc> +std::optional<::ComparisonFunc> RootSignatureParser::parseComparisonFunc() { assert(CurToken.TokKind == TokenKind::pu_equal && "Expects to only be invoked starting at given keyword"); @@ -1087,7 +1088,7 @@ RootSignatureParser::parseComparisonFunc() { return std::nullopt; } -std::optional<llvm::hlsl::rootsig::StaticBorderColor> +std::optional<::StaticBorderColor> RootSignatureParser::parseStaticBorderColor() { assert(CurToken.TokKind == TokenKind::pu_equal && "Expects to only be invoked starting at given keyword"); @@ -1113,7 +1114,7 @@ RootSignatureParser::parseStaticBorderColor() { return std::nullopt; } -std::optional<llvm::hlsl::rootsig::RootDescriptorFlags> +std::optional<::RootDescriptorFlags> RootSignatureParser::parseRootDescriptorFlags() { assert(CurToken.TokKind == TokenKind::pu_equal && "Expects to only be invoked starting at given keyword"); @@ -1152,7 +1153,7 @@ RootSignatureParser::parseRootDescriptorFlags() { return Flags; } -std::optional<llvm::hlsl::rootsig::DescriptorRangeFlags> +std::optional<::DescriptorRangeFlags> RootSignatureParser::parseDescriptorRangeFlags() { assert(CurToken.TokKind == TokenKind::pu_equal && "Expects to only be invoked starting at given keyword"); diff --git a/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp b/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp index 1e46ee35d5d49..67536440bbfec 100644 --- a/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp +++ b/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp @@ -25,6 +25,7 @@ #include "gtest/gtest.h" using namespace clang; +using namespace llvm::dxil; using namespace llvm::hlsl::rootsig; namespace { diff --git a/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h b/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h index 513aa8a358ac4..f73c12bba88a2 100644 --- a/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h +++ b/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h @@ -36,7 +36,7 @@ struct RootConstants { uint32_t Num32BitConstants; Register Reg; uint32_t Space = 0; - ShaderVisibility Visibility = ShaderVisibility::All; + dxil::ShaderVisibility Visibility = dxil::ShaderVisibility::All; }; enum class DescriptorType : uint8_t { SRV = 0, UAV, CBuffer }; @@ -45,17 +45,17 @@ struct RootDescriptor { DescriptorType Type; Register Reg; uint32_t Space = 0; - ShaderVisibility Visibility = ShaderVisibility::All; - RootDescriptorFlags Flags; + dxil::ShaderVisibility Visibility = dxil::ShaderVisibility::All; + dxil::RootDescriptorFlags Flags; void setDefaultFlags() { switch (Type) { case DescriptorType::CBuffer: case DescriptorType::SRV: - Flags = RootDescriptorFlags::DataStaticWhileSetAtExecute; + Flags = dxil::RootDescriptorFlags::DataStaticWhileSetAtExecute; break; case DescriptorType::UAV: - Flags = RootDescriptorFlags::DataVolatile; + Flags = dxil::RootDescriptorFlags::DataVolatile; break; } } @@ -63,7 +63,7 @@ struct RootDescriptor { // Models the end of a descriptor table and stores its visibility struct DescriptorTable { - ShaderVisibility Visibility = ShaderVisibility::All; + dxil::ShaderVisibility Visibility = dxil::ShaderVisibility::All; // Denotes that the previous NumClauses in the RootElement array // are the clauses in the table. uint32_t NumClauses = 0; @@ -79,19 +79,19 @@ struct DescriptorTableClause { uint32_t NumDescriptors = 1; uint32_t Space = 0; uint32_t Offset = DescriptorTableOffsetAppend; - DescriptorRangeFlags Flags; + dxil::DescriptorRangeFlags Flags; void setDefaultFlags() { switch (Type) { case ClauseType::CBuffer: case ClauseType::SRV: - Flags = DescriptorRangeFlags::DataStaticWhileSetAtExecute; + Flags = dxil::DescriptorRangeFlags::DataStaticWhileSetAtExecute; break; case ClauseType::UAV: - Flags = DescriptorRangeFlags::DataVolatile; + Flags = dxil::DescriptorRangeFlags::DataVolatile; break; case ClauseType::Sampler: - Flags = DescriptorRangeFlags::None; + Flags = dxil::DescriptorRangeFlags::None; break; } } @@ -99,18 +99,18 @@ struct DescriptorTableClause { struct StaticSampler { Register Reg; - SamplerFilter Filter = SamplerFilter::Anisotropic; - TextureAddressMode AddressU = TextureAddressMode::Wrap; - TextureAddressMode AddressV = TextureAddressMode::Wrap; - TextureAddressMode AddressW = TextureAddressMode::Wrap; + dxil::SamplerFilter Filter = dxil::SamplerFilter::Anisotropic; + dxil::TextureAddressMode AddressU = dxil::TextureAddressMode::Wrap; + dxil::TextureAddressMode AddressV = dxil::TextureAddressMode::Wrap; + dxil::TextureAddressMode AddressW = dxil::TextureAddressMode::Wrap; float MipLODBias = 0.f; uint32_t MaxAnisotropy = 16; - ComparisonFunc CompFunc = ComparisonFunc::LessEqual; - StaticBorderColor BorderColor = StaticBorderColor::OpaqueWhite; + dxil::ComparisonFunc CompFunc = dxil::ComparisonFunc::LessEqual; + dxil::StaticBorderColor BorderColor = dxil::StaticBorderColor::OpaqueWhite; float MinLOD = 0.f; float MaxLOD = std::numeric_limits<float>::max(); uint32_t Space = 0; - ShaderVisibility Visibility = ShaderVisibility::All; + dxil::ShaderVisibility Visibility = dxil::ShaderVisibility::All; }; /// Models RootElement : RootFlags | RootConstants | RootParam @@ -130,7 +130,7 @@ struct StaticSampler { /// RootElements in the array, and it holds a data member for the Visibility /// parameter. using RootElement = - std::variant<RootFlags, RootConstants, RootDescriptor, DescriptorTable, + std::variant<dxil::RootFlags, RootConstants, RootDescriptor, DescriptorTable, DescriptorTableClause, StaticSampler>; } // namespace rootsig diff --git a/llvm/include/llvm/Frontend/HLSL/HLSLRootSignatureUtils.h b/llvm/include/llvm/Frontend/HLSL/HLSLRootSignatureUtils.h index 6d959ad5bdc7f..865d8d3f5bf09 100644 --- a/llvm/include/llvm/Frontend/HLSL/HLSLRootSignatureUtils.h +++ b/llvm/include/llvm/Frontend/HLSL/HLSLRootSignatureUtils.h @@ -47,7 +47,7 @@ class MetadataBuilder { private: /// Define the various builders for the different metadata types - MDNode *BuildRootFlags(const RootFlags &Flags); + MDNode *BuildRootFlags(const dxil::RootFlags &Flags); MDNode *BuildRootConstants(const RootConstants &Constants); MDNode *BuildRootDescriptor(const RootDescriptor &Descriptor); MDNode *BuildDescriptorTable(const DescriptorTable &Table); diff --git a/llvm/lib/Frontend/HLSL/HLSLRootSignatureUtils.cpp b/llvm/lib/Frontend/HLSL/HLSLRootSignatureUtils.cpp index 765a3bcbed7e2..2cc6371479351 100644 --- a/llvm/lib/Frontend/HLSL/HLSLRootSignatureUtils.cpp +++ b/llvm/lib/Frontend/HLSL/HLSLRootSignatureUtils.cpp @@ -40,30 +40,30 @@ static raw_ostream &operator<<(raw_ostream &OS, const Register &Reg) { } static raw_ostream &operator<<(raw_ostream &OS, - const ShaderVisibility &Visibility) { + const dxil::ShaderVisibility &Visibility) { switch (Visibility) { - case ShaderVisibility::All: + case dxil::ShaderVisibility::All: OS << "All"; break; - case ShaderVisibility::Vertex: + case dxil::ShaderVisibility::Vertex: OS << "Vertex"; break; - case ShaderVisibility::Hull: + case dxil::ShaderVisibility::Hull: OS << "Hull"; break; - case ShaderVisibility::Domain: + case dxil::ShaderVisibility::Domain: OS << "Domain"; break; - case ShaderVisibility::Geometry: + case dxil::ShaderVisibility::Geometry: OS << "Geometry"; break; - case ShaderVisibility::Pixel: + case dxil::ShaderVisibility::Pixel: OS << "Pixel"; break; - case ShaderVisibility::Amplification: + case dxil::ShaderVisibility::Amplification: OS << "Amplification"; break; - case ShaderVisibility::Mesh: + case dxil::ShaderVisibility::Mesh: OS << "Mesh"; break; } @@ -91,7 +91,7 @@ static raw_ostream &operator<<(raw_ostream &OS, const ClauseType &Type) { } static raw_ostream &operator<<(raw_ostream &OS, - const DescriptorRangeFlags &Flags) { + const dxil::DescriptorRangeFlags &Flags) { bool FlagSet = false; unsigned Remaining = llvm::to_underlying(Flags); while (Remaining) { @@ -100,20 +100,20 @@ static raw_ostream &operator<<(raw_ostream &OS, if (FlagSet) OS << " | "; - switch (static_cast<DescriptorRangeFlags>(Bit)) { - case DescriptorRangeFlags::DescriptorsVolatile: + switch (static_cast<dxil::DescriptorRangeFlags>(Bit)) { + case dxil::DescriptorRangeFlags::DescriptorsVolatile: OS << "DescriptorsVolatile"; break; - case DescriptorRangeFlags::DataVolatile: + case dxil::DescriptorRangeFlags::DataVolatile: OS << "DataVolatile"; break; - case DescriptorRangeFlags::DataStaticWhileSetAtExecute: + case dxil::DescriptorRangeFlags::DataStaticWhileSetAtExecute: OS << "DataStaticWhileSetAtExecute"; break; - case DescriptorRangeFlags::DataStatic: + case dxil::DescriptorRangeFlags::DataStatic: OS << "DataStatic"; break; - case DescriptorRangeFlags::DescriptorsStaticKeepingBufferBoundsChecks: + case dxil::DescriptorRangeFlags::DescriptorsStaticKeepingBufferBoundsChecks: OS << "DescriptorsStaticKeepingBufferBoundsChecks"; break; default: @@ -182,7 +182,7 @@ template <class... Ts> OverloadedBuild(Ts...) -> OverloadedBuild<Ts...>; MDNode *MetadataBuilder::BuildRootSignature() { const auto Visitor = OverloadedBuild{ - [this](const RootFlags &Flags) -> MDNode * { + [this](const dxil::RootFlags &Flags) -> MDNode * { return BuildRootFlags(Flags); }, [this](const RootConstants &Constants) -> MDNode * { @@ -212,7 +212,7 @@ MDNode *MetadataBuilder::BuildRootSignature() { return MDNode::get(Ctx, GeneratedMetadata); } -MDNode *MetadataBuilder::BuildRootFlags(const RootFlags &Flags) { +MDNode *MetadataBuilder::BuildRootFlags(const dxil::RootFlags &Flags) { IRBuilder<> Builder(Ctx); Metadata *Operands[] = { MDString::get(Ctx, "RootFlags"), diff --git a/llvm/unittests/Frontend/HLSLRootSignatureDumpTest.cpp b/llvm/unittests/Frontend/HLSLRootSignatureDumpTest.cpp index 90e6cd0a80d6b..33fd1bc14925b 100644 --- a/llvm/unittests/Frontend/HLSLRootSignatureDumpTest.cpp +++ b/llvm/unittests/Frontend/HLSLRootSignatureDumpTest.cpp @@ -9,6 +9,7 @@ #include "llvm/Frontend/HLSL/HLSLRootSignatureUtils.h" #include "gtest/gtest.h" +using namespace llvm::dxil; using namespace llvm::hlsl::rootsig; namespace { >From d4248fbab63f55ebfd89bbec09d517be29f315ac Mon Sep 17 00:00:00 2001 From: Finn Plummer <canadienf...@gmail.com> Date: Thu, 5 Jun 2025 22:48:28 +0000 Subject: [PATCH 4/4] clang-format --- clang/include/clang/Parse/ParseHLSLRootSignature.h | 12 ++++-------- clang/lib/Parse/ParseHLSLRootSignature.cpp | 9 +++------ llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h | 4 ++-- llvm/lib/Frontend/HLSL/HLSLRootSignatureUtils.cpp | 3 ++- llvm/lib/Transforms/Utils/ModuleUtils.cpp | 2 +- 5 files changed, 12 insertions(+), 18 deletions(-) diff --git a/clang/include/clang/Parse/ParseHLSLRootSignature.h b/clang/include/clang/Parse/ParseHLSLRootSignature.h index 066c43cc2be1e..e769d657a0e7f 100644 --- a/clang/include/clang/Parse/ParseHLSLRootSignature.h +++ b/clang/include/clang/Parse/ParseHLSLRootSignature.h @@ -134,15 +134,11 @@ class RootSignatureParser { /// Parsing methods of various enums std::optional<llvm::dxil::ShaderVisibility> parseShaderVisibility(); std::optional<llvm::dxil::SamplerFilter> parseSamplerFilter(); - std::optional<llvm::dxil::TextureAddressMode> - parseTextureAddressMode(); + std::optional<llvm::dxil::TextureAddressMode> parseTextureAddressMode(); std::optional<llvm::dxil::ComparisonFunc> parseComparisonFunc(); - std::optional<llvm::dxil::StaticBorderColor> - parseStaticBorderColor(); - std::optional<llvm::dxil::RootDescriptorFlags> - parseRootDescriptorFlags(); - std::optional<llvm::dxil::DescriptorRangeFlags> - parseDescriptorRangeFlags(); + std::optional<llvm::dxil::StaticBorderColor> parseStaticBorderColor(); + std::optional<llvm::dxil::RootDescriptorFlags> parseRootDescriptorFlags(); + std::optional<llvm::dxil::DescriptorRangeFlags> parseDescriptorRangeFlags(); /// Use NumericLiteralParser to convert CurToken.NumSpelling into a unsigned /// 32-bit integer diff --git a/clang/lib/Parse/ParseHLSLRootSignature.cpp b/clang/lib/Parse/ParseHLSLRootSignature.cpp index 4e01b23a48572..5b58020ed9564 100644 --- a/clang/lib/Parse/ParseHLSLRootSignature.cpp +++ b/clang/lib/Parse/ParseHLSLRootSignature.cpp @@ -984,8 +984,7 @@ std::optional<float> RootSignatureParser::parseFloatParam() { return std::nullopt; } -std::optional<::ShaderVisibility> -RootSignatureParser::parseShaderVisibility() { +std::optional<::ShaderVisibility> RootSignatureParser::parseShaderVisibility() { assert(CurToken.TokKind == TokenKind::pu_equal && "Expects to only be invoked starting at given keyword"); @@ -1010,8 +1009,7 @@ RootSignatureParser::parseShaderVisibility() { return std::nullopt; } -std::optional<::SamplerFilter> -RootSignatureParser::parseSamplerFilter() { +std::optional<::SamplerFilter> RootSignatureParser::parseSamplerFilter() { assert(CurToken.TokKind == TokenKind::pu_equal && "Expects to only be invoked starting at given keyword"); @@ -1062,8 +1060,7 @@ RootSignatureParser::parseTextureAddressMode() { return std::nullopt; } -std::optional<::ComparisonFunc> -RootSignatureParser::parseComparisonFunc() { +std::optional<::ComparisonFunc> RootSignatureParser::parseComparisonFunc() { assert(CurToken.TokKind == TokenKind::pu_equal && "Expects to only be invoked starting at given keyword"); diff --git a/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h b/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h index f73c12bba88a2..2d1e62ea092f3 100644 --- a/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h +++ b/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h @@ -130,8 +130,8 @@ struct StaticSampler { /// RootElements in the array, and it holds a data member for the Visibility /// parameter. using RootElement = - std::variant<dxil::RootFlags, RootConstants, RootDescriptor, DescriptorTable, - DescriptorTableClause, StaticSampler>; + std::variant<dxil::RootFlags, RootConstants, RootDescriptor, + DescriptorTable, DescriptorTableClause, StaticSampler>; } // namespace rootsig } // namespace hlsl diff --git a/llvm/lib/Frontend/HLSL/HLSLRootSignatureUtils.cpp b/llvm/lib/Frontend/HLSL/HLSLRootSignatureUtils.cpp index 2cc6371479351..9cefcfb7a240f 100644 --- a/llvm/lib/Frontend/HLSL/HLSLRootSignatureUtils.cpp +++ b/llvm/lib/Frontend/HLSL/HLSLRootSignatureUtils.cpp @@ -113,7 +113,8 @@ static raw_ostream &operator<<(raw_ostream &OS, case dxil::DescriptorRangeFlags::DataStatic: OS << "DataStatic"; break; - case dxil::DescriptorRangeFlags::DescriptorsStaticKeepingBufferBoundsChecks: + case dxil::DescriptorRangeFlags:: + DescriptorsStaticKeepingBufferBoundsChecks: OS << "DescriptorsStaticKeepingBufferBoundsChecks"; break; default: diff --git a/llvm/lib/Transforms/Utils/ModuleUtils.cpp b/llvm/lib/Transforms/Utils/ModuleUtils.cpp index 596849ecab742..05470b5cdbfe6 100644 --- a/llvm/lib/Transforms/Utils/ModuleUtils.cpp +++ b/llvm/lib/Transforms/Utils/ModuleUtils.cpp @@ -11,8 +11,8 @@ //===----------------------------------------------------------------------===// #include "llvm/Transforms/Utils/ModuleUtils.h" -#include "llvm/Analysis/VectorUtils.h" #include "llvm/ADT/SmallString.h" +#include "llvm/Analysis/VectorUtils.h" #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/Function.h" #include "llvm/IR/IRBuilder.h" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits