Skip to content

Commit c2dfcc1

Browse files
committed
add parsing of addressV and addressW
1 parent df5d04e commit c2dfcc1

File tree

4 files changed

+50
-0
lines changed

4 files changed

+50
-0
lines changed

clang/include/clang/Parse/ParseHLSLRootSignature.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ class RootSignatureParser {
113113
std::optional<llvm::hlsl::rootsig::Register> Reg;
114114
std::optional<float> MipLODBias;
115115
std::optional<llvm::hlsl::rootsig::TextureAddressMode> AddressU;
116+
std::optional<llvm::hlsl::rootsig::TextureAddressMode> AddressV;
117+
std::optional<llvm::hlsl::rootsig::TextureAddressMode> AddressW;
116118
std::optional<uint32_t> MaxAnisotropy;
117119
std::optional<float> MinLOD;
118120
std::optional<float> MaxLOD;

clang/lib/Parse/ParseHLSLRootSignature.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,12 @@ std::optional<StaticSampler> RootSignatureParser::parseStaticSampler() {
384384
if (Params->AddressU.has_value())
385385
Sampler.AddressU = Params->AddressU.value();
386386

387+
if (Params->AddressV.has_value())
388+
Sampler.AddressV = Params->AddressV.value();
389+
390+
if (Params->AddressW.has_value())
391+
Sampler.AddressW = Params->AddressW.value();
392+
387393
if (Params->MipLODBias.has_value())
388394
Sampler.MipLODBias = Params->MipLODBias.value();
389395

@@ -699,6 +705,40 @@ RootSignatureParser::parseStaticSamplerParams() {
699705
Params.AddressU = AddressU;
700706
}
701707

708+
// `addressV` `=` TEXTURE_ADDRESS
709+
if (tryConsumeExpectedToken(TokenKind::kw_addressV)) {
710+
if (Params.AddressV.has_value()) {
711+
getDiags().Report(CurToken.TokLoc, diag::err_hlsl_rootsig_repeat_param)
712+
<< CurToken.TokKind;
713+
return std::nullopt;
714+
}
715+
716+
if (consumeExpectedToken(TokenKind::pu_equal))
717+
return std::nullopt;
718+
719+
auto AddressV = parseTextureAddressMode();
720+
if (!AddressV.has_value())
721+
return std::nullopt;
722+
Params.AddressV = AddressV;
723+
}
724+
725+
// `addressW` `=` TEXTURE_ADDRESS
726+
if (tryConsumeExpectedToken(TokenKind::kw_addressW)) {
727+
if (Params.AddressW.has_value()) {
728+
getDiags().Report(CurToken.TokLoc, diag::err_hlsl_rootsig_repeat_param)
729+
<< CurToken.TokKind;
730+
return std::nullopt;
731+
}
732+
733+
if (consumeExpectedToken(TokenKind::pu_equal))
734+
return std::nullopt;
735+
736+
auto AddressW = parseTextureAddressMode();
737+
if (!AddressW.has_value())
738+
return std::nullopt;
739+
Params.AddressW = AddressW;
740+
}
741+
702742
// `mipLODBias` `=` NUMBER
703743
if (tryConsumeExpectedToken(TokenKind::kw_mipLODBias)) {
704744
if (Params.MipLODBias.has_value()) {

clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,8 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) {
228228
StaticSampler(s0),
229229
StaticSampler(s0, maxAnisotropy = 3,
230230
minLOD = 4.2f, mipLODBias = 0.23e+3,
231+
addressW = TEXTURE_ADDRESS_CLAMP,
232+
addressV = TEXTURE_ADDRESS_BORDER,
231233
maxLOD = 9000, addressU = TEXTURE_ADDRESS_MIRROR
232234
)
233235
)cc";
@@ -253,6 +255,8 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) {
253255
ASSERT_EQ(std::get<StaticSampler>(Elem).Reg.ViewType, RegisterType::SReg);
254256
ASSERT_EQ(std::get<StaticSampler>(Elem).Reg.Number, 0u);
255257
ASSERT_EQ(std::get<StaticSampler>(Elem).AddressU, TextureAddressMode::Wrap);
258+
ASSERT_EQ(std::get<StaticSampler>(Elem).AddressV, TextureAddressMode::Wrap);
259+
ASSERT_EQ(std::get<StaticSampler>(Elem).AddressW, TextureAddressMode::Wrap);
256260
ASSERT_EQ(std::get<StaticSampler>(Elem).MipLODBias, 0.f);
257261
ASSERT_EQ(std::get<StaticSampler>(Elem).MaxAnisotropy, 16u);
258262
ASSERT_EQ(std::get<StaticSampler>(Elem).MinLOD, 0.f);
@@ -264,6 +268,8 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseStaticSamplerTest) {
264268
ASSERT_EQ(std::get<StaticSampler>(Elem).Reg.ViewType, RegisterType::SReg);
265269
ASSERT_EQ(std::get<StaticSampler>(Elem).Reg.Number, 0u);
266270
ASSERT_EQ(std::get<StaticSampler>(Elem).AddressU, TextureAddressMode::Mirror);
271+
ASSERT_EQ(std::get<StaticSampler>(Elem).AddressV, TextureAddressMode::Border);
272+
ASSERT_EQ(std::get<StaticSampler>(Elem).AddressW, TextureAddressMode::Clamp);
267273
ASSERT_EQ(std::get<StaticSampler>(Elem).MipLODBias, 230.f);
268274
ASSERT_EQ(std::get<StaticSampler>(Elem).MaxAnisotropy, 3u);
269275
ASSERT_EQ(std::get<StaticSampler>(Elem).MinLOD, 4.2f);

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,8 @@ struct DescriptorTableClause {
169169
struct StaticSampler {
170170
Register Reg;
171171
TextureAddressMode AddressU = TextureAddressMode::Wrap;
172+
TextureAddressMode AddressV = TextureAddressMode::Wrap;
173+
TextureAddressMode AddressW = TextureAddressMode::Wrap;
172174
float MipLODBias = 0.f;
173175
uint32_t MaxAnisotropy = 16;
174176
float MinLOD = 0.f;

0 commit comments

Comments
 (0)