Skip to content

Commit 28c7adf

Browse files
committed
[HLSL][RootSignature] Add space, visibility enums to StaticSampler
1 parent 845bc88 commit 28c7adf

File tree

4 files changed

+52
-1
lines changed

4 files changed

+52
-1
lines changed

clang/include/clang/Parse/ParseHLSLRootSignature.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ class RootSignatureParser {
121121
std::optional<llvm::hlsl::rootsig::StaticBorderColor> BorderColor;
122122
std::optional<float> MinLOD;
123123
std::optional<float> MaxLOD;
124+
std::optional<uint32_t> Space;
125+
std::optional<llvm::hlsl::rootsig::ShaderVisibility> Visibility;
124126
};
125127
std::optional<ParsedStaticSamplerParams> parseStaticSamplerParams();
126128

clang/lib/Parse/ParseHLSLRootSignature.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,12 @@ std::optional<StaticSampler> RootSignatureParser::parseStaticSampler() {
411411
if (Params->MaxLOD.has_value())
412412
Sampler.MaxLOD = Params->MaxLOD.value();
413413

414+
if (Params->Space.has_value())
415+
Sampler.Space= Params->Space.value();
416+
417+
if (Params->Visibility.has_value())
418+
Sampler.Visibility= Params->Visibility.value();
419+
414420
if (consumeExpectedToken(TokenKind::pu_r_paren,
415421
diag::err_hlsl_unexpected_end_of_params,
416422
/*param of=*/TokenKind::kw_StaticSampler))
@@ -866,6 +872,40 @@ RootSignatureParser::parseStaticSamplerParams() {
866872
return std::nullopt;
867873
Params.MaxLOD = MaxLOD;
868874
}
875+
876+
// `space` `=` POS_INT
877+
if (tryConsumeExpectedToken(TokenKind::kw_space)) {
878+
if (Params.Space.has_value()) {
879+
getDiags().Report(CurToken.TokLoc, diag::err_hlsl_rootsig_repeat_param)
880+
<< CurToken.TokKind;
881+
return std::nullopt;
882+
}
883+
884+
if (consumeExpectedToken(TokenKind::pu_equal))
885+
return std::nullopt;
886+
887+
auto Space = parseUIntParam();
888+
if (!Space.has_value())
889+
return std::nullopt;
890+
Params.Space = Space;
891+
}
892+
893+
// `visibility` `=` SHADER_VISIBILITY
894+
if (tryConsumeExpectedToken(TokenKind::kw_visibility)) {
895+
if (Params.Visibility.has_value()) {
896+
getDiags().Report(CurToken.TokLoc, diag::err_hlsl_rootsig_repeat_param)
897+
<< CurToken.TokKind;
898+
return std::nullopt;
899+
}
900+
901+
if (consumeExpectedToken(TokenKind::pu_equal))
902+
return std::nullopt;
903+
904+
auto Visibility = parseShaderVisibility();
905+
if (!Visibility.has_value())
906+
return std::nullopt;
907+
Params.Visibility = Visibility;
908+
}
869909
} while (tryConsumeExpectedToken(TokenKind::pu_comma));
870910

871911
return Params;

clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,8 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseDTClausesTest) {
226226
TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) {
227227
const llvm::StringLiteral Source = R"cc(
228228
StaticSampler(s0),
229-
StaticSampler(s0, maxAnisotropy = 3,
229+
StaticSampler(s0, maxAnisotropy = 3, space = 4,
230+
visibility = SHADER_VISIBILITY_DOMAIN,
230231
minLOD = 4.2f, mipLODBias = 0.23e+3,
231232
addressW = TEXTURE_ADDRESS_CLAMP,
232233
addressV = TEXTURE_ADDRESS_BORDER,
@@ -269,6 +270,9 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) {
269270
StaticBorderColor::OpaqueWhite);
270271
ASSERT_EQ(std::get<StaticSampler>(Elem).MinLOD, 0.f);
271272
ASSERT_EQ(std::get<StaticSampler>(Elem).MaxLOD, 3.402823466e+38f);
273+
ASSERT_EQ(std::get<StaticSampler>(Elem).Space, 0u);
274+
ASSERT_EQ(std::get<StaticSampler>(Elem).Visibility,
275+
ShaderVisibility::All);
272276

273277
// Check values can be set as expected
274278
Elem = Elements[1];
@@ -288,6 +292,9 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) {
288292
StaticBorderColor::OpaqueBlackUint);
289293
ASSERT_EQ(std::get<StaticSampler>(Elem).MinLOD, 4.2f);
290294
ASSERT_EQ(std::get<StaticSampler>(Elem).MaxLOD, 9000.f);
295+
ASSERT_EQ(std::get<StaticSampler>(Elem).Space, 4u);
296+
ASSERT_EQ(std::get<StaticSampler>(Elem).Visibility,
297+
ShaderVisibility::Domain);
291298

292299
ASSERT_TRUE(Consumer->isSatisfied());
293300
}

llvm/include/llvm/Frontend/HLSL/HLSLRootSignature.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,8 @@ struct StaticSampler {
236236
StaticBorderColor BorderColor = StaticBorderColor::OpaqueWhite;
237237
float MinLOD = 0.f;
238238
float MaxLOD = 3.402823466e+38f; // FLT_MAX
239+
uint32_t Space = 0;
240+
ShaderVisibility Visibility = ShaderVisibility::All;
239241
};
240242

241243
/// Models RootElement : RootFlags | RootConstants | RootParam

0 commit comments

Comments
 (0)