https://github.com/inbelic updated https://github.com/llvm/llvm-project/pull/140305
>From 94c9f29325d0609b896ac127bb6279aecc1fd36a Mon Sep 17 00:00:00 2001 From: Finn Plummer <canadienf...@gmail.com> Date: Fri, 16 May 2025 19:53:17 +0000 Subject: [PATCH 1/7] pre-req: add keywords --- .../clang/Lex/HLSLRootSignatureTokenKinds.def | 27 +++++++++++++++++++ .../Lex/LexHLSLRootSignatureTest.cpp | 21 +++++++++++++-- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Lex/HLSLRootSignatureTokenKinds.def b/clang/include/clang/Lex/HLSLRootSignatureTokenKinds.def index 9b47ec57f541b..1814ac4aeae5f 100644 --- a/clang/include/clang/Lex/HLSLRootSignatureTokenKinds.def +++ b/clang/include/clang/Lex/HLSLRootSignatureTokenKinds.def @@ -56,6 +56,12 @@ #ifndef TEXTURE_ADDRESS_MODE_ENUM #define TEXTURE_ADDRESS_MODE_ENUM(NAME, LIT) ENUM(NAME, LIT) #endif +#ifndef COMPARISON_FUNC_ENUM +#define COMPARISON_FUNC_ENUM(NAME, LIT) ENUM(NAME, LIT) +#endif +#ifndef STATIC_BORDER_COLOR_ENUM +#define STATIC_BORDER_COLOR_ENUM(NAME, LIT) ENUM(NAME, LIT) +#endif // General Tokens: TOK(invalid, "invalid identifier") @@ -109,6 +115,8 @@ KEYWORD(addressU) KEYWORD(addressV) KEYWORD(addressW) KEYWORD(maxAnisotropy) +KEYWORD(comparisonFunc) +KEYWORD(borderColor) KEYWORD(minLOD) KEYWORD(maxLOD) @@ -161,6 +169,25 @@ TEXTURE_ADDRESS_MODE_ENUM(Clamp, "TEXTURE_ADDRESS_CLAMP") TEXTURE_ADDRESS_MODE_ENUM(Border, "TEXTURE_ADDRESS_BORDER") TEXTURE_ADDRESS_MODE_ENUM(MirrorOnce, "TEXTURE_ADDRESS_MIRRORONCE") +// Comparison Func Enums: +COMPARISON_FUNC_ENUM(Never, "COMPARISON_NEVER") +COMPARISON_FUNC_ENUM(Less, "COMPARISON_LESS") +COMPARISON_FUNC_ENUM(Equal, "COMPARISON_EQUAL") +COMPARISON_FUNC_ENUM(LessEqual, "COMPARISON_LESS_EQUAL") +COMPARISON_FUNC_ENUM(Greater, "COMPARISON_GREATER") +COMPARISON_FUNC_ENUM(NotEqual, "COMPARISON_NOT_EQUAL") +COMPARISON_FUNC_ENUM(GreaterEqual, "COMPARISON_GREATER_EQUAL") +COMPARISON_FUNC_ENUM(Always, "COMPARISON_ALWAYS") + +// Static Border Color Enums: +STATIC_BORDER_COLOR_ENUM(TransparentBlack, "STATIC_BORDER_COLOR_TRANSPARENT_BLACK") +STATIC_BORDER_COLOR_ENUM(OpaqueBlack, "STATIC_BORDER_COLOR_OPAQUE_BLACK") +STATIC_BORDER_COLOR_ENUM(OpaqueWhite, "STATIC_BORDER_COLOR_OPAQUE_WHITE") +STATIC_BORDER_COLOR_ENUM(OpaqueBlackUint, "STATIC_BORDER_COLOR_OPAQUE_BLACK_UINT") +STATIC_BORDER_COLOR_ENUM(OpaqueWhiteUint, "STATIC_BORDER_COLOR_OPAQUE_WHITE_UINT") + +#undef STATIC_BORDER_COLOR_ENUM +#undef COMPARISON_FUNC_ENUM #undef TEXTURE_ADDRESS_MODE_ENUM #undef SHADER_VISIBILITY_ENUM #undef DESCRIPTOR_RANGE_FLAG_ENUM diff --git a/clang/unittests/Lex/LexHLSLRootSignatureTest.cpp b/clang/unittests/Lex/LexHLSLRootSignatureTest.cpp index f0f22ccc29e9f..0e0b1373c9915 100644 --- a/clang/unittests/Lex/LexHLSLRootSignatureTest.cpp +++ b/clang/unittests/Lex/LexHLSLRootSignatureTest.cpp @@ -136,8 +136,10 @@ TEST_F(LexHLSLRootSignatureTest, ValidLexAllTokensTest) { space visibility flags numDescriptors offset - mipLODBias addressU addressV addressW - maxAnisotropy minLOD maxLOD + addressU addressV addressW + mipLODBias maxAnisotropy + comparisonFunc borderColor + minLOD maxLOD unbounded DESCRIPTOR_RANGE_OFFSET_APPEND @@ -175,6 +177,21 @@ TEST_F(LexHLSLRootSignatureTest, ValidLexAllTokensTest) { TEXTURE_ADDRESS_CLAMP TEXTURE_ADDRESS_BORDER TEXTURE_ADDRESS_MIRRORONCE + + comparison_never + comparison_less + comparison_equal + comparison_less_equal + comparison_greater + comparison_not_equal + comparison_greater_equal + comparison_always + + STATIC_BORDER_COLOR_TRANSPARENT_BLACK + STATIC_BORDER_COLOR_OPAQUE_BLACK + STATIC_BORDER_COLOR_OPAQUE_WHITE + STATIC_BORDER_COLOR_OPAQUE_BLACK_UINT + STATIC_BORDER_COLOR_OPAQUE_WHITE_UINT )cc"; auto TokLoc = SourceLocation(); hlsl::RootSignatureLexer Lexer(Source, TokLoc); >From 469c0397dcfdd01f2dcfda93e79e4f05602ec826 Mon Sep 17 00:00:00 2001 From: Finn Plummer <canadienf...@gmail.com> Date: Fri, 16 May 2025 20:00:32 +0000 Subject: [PATCH 2/7] add parsing of comparisonfunc --- .../clang/Parse/ParseHLSLRootSignature.h | 2 + clang/lib/Parse/ParseHLSLRootSignature.cpp | 47 +++++++++++++++++++ .../Parse/ParseHLSLRootSignatureTest.cpp | 6 ++- .../llvm/Frontend/HLSL/HLSLRootSignature.h | 12 +++++ 4 files changed, 66 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Parse/ParseHLSLRootSignature.h b/clang/include/clang/Parse/ParseHLSLRootSignature.h index d436265b8b37a..04282d3f686b0 100644 --- a/clang/include/clang/Parse/ParseHLSLRootSignature.h +++ b/clang/include/clang/Parse/ParseHLSLRootSignature.h @@ -116,6 +116,7 @@ class RootSignatureParser { std::optional<llvm::hlsl::rootsig::TextureAddressMode> AddressV; std::optional<llvm::hlsl::rootsig::TextureAddressMode> AddressW; std::optional<uint32_t> MaxAnisotropy; + std::optional<llvm::hlsl::rootsig::ComparisonFunc> ComparisonFunc; std::optional<float> MinLOD; std::optional<float> MaxLOD; }; @@ -130,6 +131,7 @@ class RootSignatureParser { std::optional<llvm::hlsl::rootsig::ShaderVisibility> parseShaderVisibility(); std::optional<llvm::hlsl::rootsig::TextureAddressMode> parseTextureAddressMode(); + std::optional<llvm::hlsl::rootsig::ComparisonFunc> parseComparisonFunc(); std::optional<llvm::hlsl::rootsig::RootDescriptorFlags> parseRootDescriptorFlags(); std::optional<llvm::hlsl::rootsig::DescriptorRangeFlags> diff --git a/clang/lib/Parse/ParseHLSLRootSignature.cpp b/clang/lib/Parse/ParseHLSLRootSignature.cpp index e9373f9a82beb..0e2d67ccc31f1 100644 --- a/clang/lib/Parse/ParseHLSLRootSignature.cpp +++ b/clang/lib/Parse/ParseHLSLRootSignature.cpp @@ -392,6 +392,9 @@ std::optional<StaticSampler> RootSignatureParser::parseStaticSampler() { if (Params->MaxAnisotropy.has_value()) Sampler.MaxAnisotropy = Params->MaxAnisotropy.value(); + if (Params->ComparisonFunc.has_value()) + Sampler.ComparisonFunc= Params->ComparisonFunc.value(); + if (Params->MinLOD.has_value()) Sampler.MinLOD = Params->MinLOD.value(); @@ -769,6 +772,24 @@ RootSignatureParser::parseStaticSamplerParams() { Params.MaxAnisotropy = MaxAnisotropy; } + + // `comparisonFunc` `=` COMPARISON_FUNC + if (tryConsumeExpectedToken(TokenKind::kw_comparisonFunc)) { + if (Params.ComparisonFunc.has_value()) { + getDiags().Report(CurToken.TokLoc, diag::err_hlsl_rootsig_repeat_param) + << CurToken.TokKind; + return std::nullopt; + } + + if (consumeExpectedToken(TokenKind::pu_equal)) + return std::nullopt; + + auto ComparisonFunc = parseComparisonFunc(); + if (!ComparisonFunc.has_value()) + return std::nullopt; + Params.ComparisonFunc = ComparisonFunc; + } + // `minLOD` `=` NUMBER if (tryConsumeExpectedToken(TokenKind::kw_minLOD)) { if (Params.MinLOD.has_value()) { @@ -935,6 +956,32 @@ RootSignatureParser::parseTextureAddressMode() { return std::nullopt; } +std::optional<llvm::hlsl::rootsig::ComparisonFunc> +RootSignatureParser::parseComparisonFunc() { + assert(CurToken.TokKind == TokenKind::pu_equal && + "Expects to only be invoked starting at given keyword"); + + TokenKind Expected[] = { +#define COMPARISON_FUNC_ENUM(NAME, LIT) TokenKind::en_##NAME, +#include "clang/Lex/HLSLRootSignatureTokenKinds.def" + }; + + if (!tryConsumeExpectedToken(Expected)) + return std::nullopt; + + switch (CurToken.TokKind) { +#define COMPARISON_FUNC_ENUM(NAME, LIT) \ + case TokenKind::en_##NAME: \ + return ComparisonFunc::NAME; \ + break; +#include "clang/Lex/HLSLRootSignatureTokenKinds.def" + default: + llvm_unreachable("Switch for consumed enum token was not provided"); + } + + return std::nullopt; +} + std::optional<llvm::hlsl::rootsig::RootDescriptorFlags> RootSignatureParser::parseRootDescriptorFlags() { assert(CurToken.TokKind == TokenKind::pu_equal && diff --git a/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp b/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp index 6477b25550c4d..c8b4316ae7f88 100644 --- a/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp +++ b/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp @@ -230,7 +230,8 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) { minLOD = 4.2f, mipLODBias = 0.23e+3, addressW = TEXTURE_ADDRESS_CLAMP, addressV = TEXTURE_ADDRESS_BORDER, - maxLOD = 9000, addressU = TEXTURE_ADDRESS_MIRROR + maxLOD = 9000, addressU = TEXTURE_ADDRESS_MIRROR, + comparisonFunc = COMPARISON_NOT_EQUAL ) )cc"; @@ -259,6 +260,7 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) { ASSERT_EQ(std::get<StaticSampler>(Elem).AddressW, TextureAddressMode::Wrap); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MipLODBias, 0.f); ASSERT_EQ(std::get<StaticSampler>(Elem).MaxAnisotropy, 16u); + ASSERT_EQ(std::get<StaticSampler>(Elem).ComparisonFunc, ComparisonFunc::LessEqual); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MinLOD, 0.f); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MaxLOD, 3.402823466e+38f); @@ -272,6 +274,8 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) { ASSERT_EQ(std::get<StaticSampler>(Elem).AddressW, TextureAddressMode::Clamp); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MipLODBias, 230.f); ASSERT_EQ(std::get<StaticSampler>(Elem).MaxAnisotropy, 3u); + ASSERT_EQ(std::get<StaticSampler>(Elem).ComparisonFunc, + ComparisonFunc::NotEqual); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MinLOD, 4.2f); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MaxLOD, 9000.f); diff --git a/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h b/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h index bb0a0d158a980..fc41245c20bc9 100644 --- a/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h +++ b/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h @@ -84,6 +84,17 @@ enum class TextureAddressMode { MirrorOnce = 5 }; +enum class ComparisonFunc : unsigned { + Never = 1, + Less = 2, + Equal = 3, + LessEqual = 4, + Greater = 5, + NotEqual = 6, + GreaterEqual = 7, + Always = 8 +}; + // Definitions of the in-memory data layout structures // Models the different registers: bReg | tReg | uReg | sReg @@ -170,6 +181,7 @@ struct StaticSampler { TextureAddressMode AddressW = TextureAddressMode::Wrap; float MipLODBias = 0.f; uint32_t MaxAnisotropy = 16; + ComparisonFunc ComparisonFunc = ComparisonFunc::LessEqual; float MinLOD = 0.f; float MaxLOD = std::numeric_limits<float>::max(); }; >From 79bb0f608685401c49c7c3003e68f58b0506e94d Mon Sep 17 00:00:00 2001 From: Finn Plummer <canadienf...@gmail.com> Date: Fri, 16 May 2025 20:24:34 +0000 Subject: [PATCH 3/7] add parsing of borderColor --- .../clang/Parse/ParseHLSLRootSignature.h | 3 ++ clang/lib/Parse/ParseHLSLRootSignature.cpp | 47 +++++++++++++++++++ .../Parse/ParseHLSLRootSignatureTest.cpp | 5 +- .../llvm/Frontend/HLSL/HLSLRootSignature.h | 9 ++++ 4 files changed, 63 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Parse/ParseHLSLRootSignature.h b/clang/include/clang/Parse/ParseHLSLRootSignature.h index 04282d3f686b0..77b208106265e 100644 --- a/clang/include/clang/Parse/ParseHLSLRootSignature.h +++ b/clang/include/clang/Parse/ParseHLSLRootSignature.h @@ -117,6 +117,7 @@ class RootSignatureParser { std::optional<llvm::hlsl::rootsig::TextureAddressMode> AddressW; std::optional<uint32_t> MaxAnisotropy; std::optional<llvm::hlsl::rootsig::ComparisonFunc> ComparisonFunc; + std::optional<llvm::hlsl::rootsig::StaticBorderColor> BorderColor; std::optional<float> MinLOD; std::optional<float> MaxLOD; }; @@ -132,6 +133,8 @@ class RootSignatureParser { std::optional<llvm::hlsl::rootsig::TextureAddressMode> parseTextureAddressMode(); std::optional<llvm::hlsl::rootsig::ComparisonFunc> parseComparisonFunc(); + std::optional<llvm::hlsl::rootsig::StaticBorderColor> + parseStaticBorderColor(); std::optional<llvm::hlsl::rootsig::RootDescriptorFlags> parseRootDescriptorFlags(); std::optional<llvm::hlsl::rootsig::DescriptorRangeFlags> diff --git a/clang/lib/Parse/ParseHLSLRootSignature.cpp b/clang/lib/Parse/ParseHLSLRootSignature.cpp index 0e2d67ccc31f1..814cf574a4b45 100644 --- a/clang/lib/Parse/ParseHLSLRootSignature.cpp +++ b/clang/lib/Parse/ParseHLSLRootSignature.cpp @@ -395,6 +395,9 @@ std::optional<StaticSampler> RootSignatureParser::parseStaticSampler() { if (Params->ComparisonFunc.has_value()) Sampler.ComparisonFunc= Params->ComparisonFunc.value(); + if (Params->BorderColor.has_value()) + Sampler.BorderColor= Params->BorderColor.value(); + if (Params->MinLOD.has_value()) Sampler.MinLOD = Params->MinLOD.value(); @@ -790,6 +793,24 @@ RootSignatureParser::parseStaticSamplerParams() { Params.ComparisonFunc = ComparisonFunc; } + + // `borderColor` `=` STATIC_BORDER_COLOR + if (tryConsumeExpectedToken(TokenKind::kw_borderColor)) { + if (Params.BorderColor.has_value()) { + getDiags().Report(CurToken.TokLoc, diag::err_hlsl_rootsig_repeat_param) + << CurToken.TokKind; + return std::nullopt; + } + + if (consumeExpectedToken(TokenKind::pu_equal)) + return std::nullopt; + + auto BorderColor = parseStaticBorderColor(); + if (!BorderColor.has_value()) + return std::nullopt; + Params.BorderColor = BorderColor; + } + // `minLOD` `=` NUMBER if (tryConsumeExpectedToken(TokenKind::kw_minLOD)) { if (Params.MinLOD.has_value()) { @@ -982,6 +1003,32 @@ RootSignatureParser::parseComparisonFunc() { return std::nullopt; } +std::optional<llvm::hlsl::rootsig::StaticBorderColor> +RootSignatureParser::parseStaticBorderColor() { + assert(CurToken.TokKind == TokenKind::pu_equal && + "Expects to only be invoked starting at given keyword"); + + TokenKind Expected[] = { +#define STATIC_BORDER_COLOR_ENUM(NAME, LIT) TokenKind::en_##NAME, +#include "clang/Lex/HLSLRootSignatureTokenKinds.def" + }; + + if (!tryConsumeExpectedToken(Expected)) + return std::nullopt; + + switch (CurToken.TokKind) { +#define STATIC_BORDER_COLOR_ENUM(NAME, LIT) \ + case TokenKind::en_##NAME: \ + return StaticBorderColor::NAME; \ + break; +#include "clang/Lex/HLSLRootSignatureTokenKinds.def" + default: + llvm_unreachable("Switch for consumed enum token was not provided"); + } + + return std::nullopt; +} + std::optional<llvm::hlsl::rootsig::RootDescriptorFlags> RootSignatureParser::parseRootDescriptorFlags() { assert(CurToken.TokKind == TokenKind::pu_equal && diff --git a/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp b/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp index c8b4316ae7f88..b41ea529e926b 100644 --- a/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp +++ b/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp @@ -231,7 +231,8 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) { addressW = TEXTURE_ADDRESS_CLAMP, addressV = TEXTURE_ADDRESS_BORDER, maxLOD = 9000, addressU = TEXTURE_ADDRESS_MIRROR, - comparisonFunc = COMPARISON_NOT_EQUAL + comparisonFunc = COMPARISON_NOT_EQUAL, + borderColor = STATIC_BORDER_COLOR_OPAQUE_BLACK_UINT ) )cc"; @@ -261,6 +262,7 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) { ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MipLODBias, 0.f); ASSERT_EQ(std::get<StaticSampler>(Elem).MaxAnisotropy, 16u); ASSERT_EQ(std::get<StaticSampler>(Elem).ComparisonFunc, ComparisonFunc::LessEqual); + ASSERT_EQ(std::get<StaticSampler>(Elem).BorderColor, StaticBorderColor::OpaqueWhite); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MinLOD, 0.f); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MaxLOD, 3.402823466e+38f); @@ -276,6 +278,7 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) { ASSERT_EQ(std::get<StaticSampler>(Elem).MaxAnisotropy, 3u); ASSERT_EQ(std::get<StaticSampler>(Elem).ComparisonFunc, ComparisonFunc::NotEqual); + ASSERT_EQ(std::get<StaticSampler>(Elem).BorderColor, StaticBorderColor::OpaqueBlackUint); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MinLOD, 4.2f); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MaxLOD, 9000.f); diff --git a/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h b/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h index fc41245c20bc9..0fc0ddbded168 100644 --- a/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h +++ b/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h @@ -95,6 +95,14 @@ enum class ComparisonFunc : unsigned { 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 @@ -182,6 +190,7 @@ struct StaticSampler { float MipLODBias = 0.f; uint32_t MaxAnisotropy = 16; ComparisonFunc ComparisonFunc = ComparisonFunc::LessEqual; + StaticBorderColor BorderColor = StaticBorderColor::OpaqueWhite; float MinLOD = 0.f; float MaxLOD = std::numeric_limits<float>::max(); }; >From 6a30a6bdbabe7bd8d76006b96480b0fa314bd6f4 Mon Sep 17 00:00:00 2001 From: Finn Plummer <canadienf...@gmail.com> Date: Fri, 16 May 2025 20:25:55 +0000 Subject: [PATCH 4/7] clang format --- clang/lib/Parse/ParseHLSLRootSignature.cpp | 14 ++++++-------- .../unittests/Parse/ParseHLSLRootSignatureTest.cpp | 9 ++++++--- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/clang/lib/Parse/ParseHLSLRootSignature.cpp b/clang/lib/Parse/ParseHLSLRootSignature.cpp index 814cf574a4b45..65c55a31e2b01 100644 --- a/clang/lib/Parse/ParseHLSLRootSignature.cpp +++ b/clang/lib/Parse/ParseHLSLRootSignature.cpp @@ -393,10 +393,10 @@ std::optional<StaticSampler> RootSignatureParser::parseStaticSampler() { Sampler.MaxAnisotropy = Params->MaxAnisotropy.value(); if (Params->ComparisonFunc.has_value()) - Sampler.ComparisonFunc= Params->ComparisonFunc.value(); + Sampler.ComparisonFunc = Params->ComparisonFunc.value(); if (Params->BorderColor.has_value()) - Sampler.BorderColor= Params->BorderColor.value(); + Sampler.BorderColor = Params->BorderColor.value(); if (Params->MinLOD.has_value()) Sampler.MinLOD = Params->MinLOD.value(); @@ -775,7 +775,6 @@ RootSignatureParser::parseStaticSamplerParams() { Params.MaxAnisotropy = MaxAnisotropy; } - // `comparisonFunc` `=` COMPARISON_FUNC if (tryConsumeExpectedToken(TokenKind::kw_comparisonFunc)) { if (Params.ComparisonFunc.has_value()) { @@ -793,7 +792,6 @@ RootSignatureParser::parseStaticSamplerParams() { Params.ComparisonFunc = ComparisonFunc; } - // `borderColor` `=` STATIC_BORDER_COLOR if (tryConsumeExpectedToken(TokenKind::kw_borderColor)) { if (Params.BorderColor.has_value()) { @@ -991,9 +989,9 @@ RootSignatureParser::parseComparisonFunc() { return std::nullopt; switch (CurToken.TokKind) { -#define COMPARISON_FUNC_ENUM(NAME, LIT) \ +#define COMPARISON_FUNC_ENUM(NAME, LIT) \ case TokenKind::en_##NAME: \ - return ComparisonFunc::NAME; \ + return ComparisonFunc::NAME; \ break; #include "clang/Lex/HLSLRootSignatureTokenKinds.def" default: @@ -1017,9 +1015,9 @@ RootSignatureParser::parseStaticBorderColor() { return std::nullopt; switch (CurToken.TokKind) { -#define STATIC_BORDER_COLOR_ENUM(NAME, LIT) \ +#define STATIC_BORDER_COLOR_ENUM(NAME, LIT) \ case TokenKind::en_##NAME: \ - return StaticBorderColor::NAME; \ + return StaticBorderColor::NAME; \ break; #include "clang/Lex/HLSLRootSignatureTokenKinds.def" default: diff --git a/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp b/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp index b41ea529e926b..cd2b8df35c135 100644 --- a/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp +++ b/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp @@ -261,8 +261,10 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) { ASSERT_EQ(std::get<StaticSampler>(Elem).AddressW, TextureAddressMode::Wrap); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MipLODBias, 0.f); ASSERT_EQ(std::get<StaticSampler>(Elem).MaxAnisotropy, 16u); - ASSERT_EQ(std::get<StaticSampler>(Elem).ComparisonFunc, ComparisonFunc::LessEqual); - ASSERT_EQ(std::get<StaticSampler>(Elem).BorderColor, StaticBorderColor::OpaqueWhite); + ASSERT_EQ(std::get<StaticSampler>(Elem).ComparisonFunc, + ComparisonFunc::LessEqual); + ASSERT_EQ(std::get<StaticSampler>(Elem).BorderColor, + StaticBorderColor::OpaqueWhite); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MinLOD, 0.f); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MaxLOD, 3.402823466e+38f); @@ -278,7 +280,8 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) { ASSERT_EQ(std::get<StaticSampler>(Elem).MaxAnisotropy, 3u); ASSERT_EQ(std::get<StaticSampler>(Elem).ComparisonFunc, ComparisonFunc::NotEqual); - ASSERT_EQ(std::get<StaticSampler>(Elem).BorderColor, StaticBorderColor::OpaqueBlackUint); + ASSERT_EQ(std::get<StaticSampler>(Elem).BorderColor, + StaticBorderColor::OpaqueBlackUint); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MinLOD, 4.2f); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MaxLOD, 9000.f); >From c8e334e43865d021ee06c0c2dfa67abd9ad50bea Mon Sep 17 00:00:00 2001 From: Finn Plummer <canadienf...@gmail.com> Date: Thu, 29 May 2025 22:57:10 +0000 Subject: [PATCH 5/7] self-review: rename ComparisonFunc members to avoid name abiguitity --- clang/include/clang/Parse/ParseHLSLRootSignature.h | 2 +- clang/lib/Parse/ParseHLSLRootSignature.cpp | 12 ++++++------ clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp | 4 ++-- llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/clang/include/clang/Parse/ParseHLSLRootSignature.h b/clang/include/clang/Parse/ParseHLSLRootSignature.h index 77b208106265e..8052df1c568dd 100644 --- a/clang/include/clang/Parse/ParseHLSLRootSignature.h +++ b/clang/include/clang/Parse/ParseHLSLRootSignature.h @@ -116,7 +116,7 @@ class RootSignatureParser { std::optional<llvm::hlsl::rootsig::TextureAddressMode> AddressV; std::optional<llvm::hlsl::rootsig::TextureAddressMode> AddressW; std::optional<uint32_t> MaxAnisotropy; - std::optional<llvm::hlsl::rootsig::ComparisonFunc> ComparisonFunc; + std::optional<llvm::hlsl::rootsig::ComparisonFunc> CompFunc; std::optional<llvm::hlsl::rootsig::StaticBorderColor> BorderColor; std::optional<float> MinLOD; std::optional<float> MaxLOD; diff --git a/clang/lib/Parse/ParseHLSLRootSignature.cpp b/clang/lib/Parse/ParseHLSLRootSignature.cpp index 65c55a31e2b01..eb0ebee2e6ce9 100644 --- a/clang/lib/Parse/ParseHLSLRootSignature.cpp +++ b/clang/lib/Parse/ParseHLSLRootSignature.cpp @@ -392,8 +392,8 @@ std::optional<StaticSampler> RootSignatureParser::parseStaticSampler() { if (Params->MaxAnisotropy.has_value()) Sampler.MaxAnisotropy = Params->MaxAnisotropy.value(); - if (Params->ComparisonFunc.has_value()) - Sampler.ComparisonFunc = Params->ComparisonFunc.value(); + if (Params->CompFunc.has_value()) + Sampler.CompFunc = Params->CompFunc.value(); if (Params->BorderColor.has_value()) Sampler.BorderColor = Params->BorderColor.value(); @@ -777,7 +777,7 @@ RootSignatureParser::parseStaticSamplerParams() { // `comparisonFunc` `=` COMPARISON_FUNC if (tryConsumeExpectedToken(TokenKind::kw_comparisonFunc)) { - if (Params.ComparisonFunc.has_value()) { + if (Params.CompFunc.has_value()) { getDiags().Report(CurToken.TokLoc, diag::err_hlsl_rootsig_repeat_param) << CurToken.TokKind; return std::nullopt; @@ -786,10 +786,10 @@ RootSignatureParser::parseStaticSamplerParams() { if (consumeExpectedToken(TokenKind::pu_equal)) return std::nullopt; - auto ComparisonFunc = parseComparisonFunc(); - if (!ComparisonFunc.has_value()) + auto CompFunc = parseComparisonFunc(); + if (!CompFunc.has_value()) return std::nullopt; - Params.ComparisonFunc = ComparisonFunc; + Params.CompFunc = CompFunc; } // `borderColor` `=` STATIC_BORDER_COLOR diff --git a/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp b/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp index cd2b8df35c135..26a8b5d900f91 100644 --- a/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp +++ b/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp @@ -261,7 +261,7 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) { ASSERT_EQ(std::get<StaticSampler>(Elem).AddressW, TextureAddressMode::Wrap); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MipLODBias, 0.f); ASSERT_EQ(std::get<StaticSampler>(Elem).MaxAnisotropy, 16u); - ASSERT_EQ(std::get<StaticSampler>(Elem).ComparisonFunc, + ASSERT_EQ(std::get<StaticSampler>(Elem).CompFunc, ComparisonFunc::LessEqual); ASSERT_EQ(std::get<StaticSampler>(Elem).BorderColor, StaticBorderColor::OpaqueWhite); @@ -278,7 +278,7 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) { ASSERT_EQ(std::get<StaticSampler>(Elem).AddressW, TextureAddressMode::Clamp); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MipLODBias, 230.f); ASSERT_EQ(std::get<StaticSampler>(Elem).MaxAnisotropy, 3u); - ASSERT_EQ(std::get<StaticSampler>(Elem).ComparisonFunc, + ASSERT_EQ(std::get<StaticSampler>(Elem).CompFunc, ComparisonFunc::NotEqual); ASSERT_EQ(std::get<StaticSampler>(Elem).BorderColor, StaticBorderColor::OpaqueBlackUint); diff --git a/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h b/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h index 0fc0ddbded168..7c8ddef4144e6 100644 --- a/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h +++ b/llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h @@ -189,7 +189,7 @@ struct StaticSampler { TextureAddressMode AddressW = TextureAddressMode::Wrap; float MipLODBias = 0.f; uint32_t MaxAnisotropy = 16; - ComparisonFunc ComparisonFunc = ComparisonFunc::LessEqual; + ComparisonFunc CompFunc = ComparisonFunc::LessEqual; StaticBorderColor BorderColor = StaticBorderColor::OpaqueWhite; float MinLOD = 0.f; float MaxLOD = std::numeric_limits<float>::max(); >From 0f943c85012fee76b213f19c3c2a9b4324d9f916 Mon Sep 17 00:00:00 2001 From: Finn Plummer <canadienf...@gmail.com> Date: Thu, 29 May 2025 23:02:08 +0000 Subject: [PATCH 6/7] format --- clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp b/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp index 26a8b5d900f91..5330355596356 100644 --- a/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp +++ b/clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp @@ -261,8 +261,7 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) { ASSERT_EQ(std::get<StaticSampler>(Elem).AddressW, TextureAddressMode::Wrap); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MipLODBias, 0.f); ASSERT_EQ(std::get<StaticSampler>(Elem).MaxAnisotropy, 16u); - ASSERT_EQ(std::get<StaticSampler>(Elem).CompFunc, - ComparisonFunc::LessEqual); + ASSERT_EQ(std::get<StaticSampler>(Elem).CompFunc, ComparisonFunc::LessEqual); ASSERT_EQ(std::get<StaticSampler>(Elem).BorderColor, StaticBorderColor::OpaqueWhite); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MinLOD, 0.f); @@ -278,8 +277,7 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) { ASSERT_EQ(std::get<StaticSampler>(Elem).AddressW, TextureAddressMode::Clamp); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MipLODBias, 230.f); ASSERT_EQ(std::get<StaticSampler>(Elem).MaxAnisotropy, 3u); - ASSERT_EQ(std::get<StaticSampler>(Elem).CompFunc, - ComparisonFunc::NotEqual); + ASSERT_EQ(std::get<StaticSampler>(Elem).CompFunc, ComparisonFunc::NotEqual); ASSERT_EQ(std::get<StaticSampler>(Elem).BorderColor, StaticBorderColor::OpaqueBlackUint); ASSERT_FLOAT_EQ(std::get<StaticSampler>(Elem).MinLOD, 4.2f); >From 91f161b2a503647e36f72a6156fce288429daf43 Mon Sep 17 00:00:00 2001 From: Finn Plummer <canadienf...@gmail.com> Date: Fri, 30 May 2025 17:28:36 +0000 Subject: [PATCH 7/7] fix cherry-pick typo: token order --- clang/unittests/Lex/LexHLSLRootSignatureTest.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/clang/unittests/Lex/LexHLSLRootSignatureTest.cpp b/clang/unittests/Lex/LexHLSLRootSignatureTest.cpp index 0e0b1373c9915..943a31a08604c 100644 --- a/clang/unittests/Lex/LexHLSLRootSignatureTest.cpp +++ b/clang/unittests/Lex/LexHLSLRootSignatureTest.cpp @@ -136,9 +136,8 @@ TEST_F(LexHLSLRootSignatureTest, ValidLexAllTokensTest) { space visibility flags numDescriptors offset - addressU addressV addressW - mipLODBias maxAnisotropy - comparisonFunc borderColor + mipLODBias addressU addressV addressW + maxAnisotropy comparisonFunc borderColor minLOD maxLOD unbounded _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits