Skip to content

Commit 9485f9e

Browse files
authored
[Bug] Add COMPARISON_NONE; fix the error message related to it (microsoft#8245)
### Bug Description Regarding the sampler descriptions, I found two issues: 1. D3D12_COMPARISON_FUNC_NONE should be added; it is a valid value for the non-comparison samplers. 2. The error message should be revised; the original one shows "**Unexpected texture address mode value**", which is confusing. ### Comments 1. D3D12_COMPARISON_FUNC_NONE is a valid enumerator. It's listed in d3d12.h. 2. I verified this value by PIX; the result shown below confirmed my expectation. <img width="491" height="335" alt="image" src="https://github.com/user-attachments/assets/ebaf3b97-b62e-4892-b9d9-80e4241998c3" />
1 parent 4f398bf commit 9485f9e

5 files changed

Lines changed: 13 additions & 5 deletions

File tree

include/dxc/DxilRootSignature/DxilRootSignature.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ static const uint32_t DxilMapAnisotropy = 16;
5555

5656
// Enumerations and flags.
5757
enum class DxilComparisonFunc : unsigned {
58+
None = 0,
5859
Never = 1,
5960
Less = 2,
6061
Equal = 3,

tools/clang/lib/Parse/HLSLRootSignature.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -232,8 +232,8 @@ void RootSignatureTokenizer::ReadNextToken(uint32_t BufferIdx) {
232232
break;
233233

234234
case 'C':
235-
bKW = KW(CBV) || KW(comparisonFunc) || KW(COMPARISON_NEVER) ||
236-
KW(COMPARISON_LESS) || KW(COMPARISON_EQUAL) ||
235+
bKW = KW(CBV) || KW(comparisonFunc) || KW(COMPARISON_NONE) ||
236+
KW(COMPARISON_NEVER) || KW(COMPARISON_LESS) || KW(COMPARISON_EQUAL) ||
237237
KW(COMPARISON_LESS_EQUAL) || KW(COMPARISON_GREATER) ||
238238
KW(COMPARISON_NOT_EQUAL) || KW(COMPARISON_GREATER_EQUAL) ||
239239
KW(COMPARISON_ALWAYS) || KW(CBV_SRV_UAV_HEAP_DIRECTLY_INDEXED);
@@ -1613,6 +1613,9 @@ HRESULT RootSignatureParser::ParseComparisonFunction(
16131613
Token = m_pTokenizer->GetToken();
16141614

16151615
switch (Token.GetType()) {
1616+
case TokenType::COMPARISON_NONE:
1617+
ComparisonFunc = DxilComparisonFunc::None;
1618+
break;
16161619
case TokenType::COMPARISON_NEVER:
16171620
ComparisonFunc = DxilComparisonFunc::Never;
16181621
break;
@@ -1639,7 +1642,7 @@ HRESULT RootSignatureParser::ParseComparisonFunction(
16391642
break;
16401643
default:
16411644
IFC(Error(ERR_RS_UNEXPECTED_TOKEN,
1642-
"Unexpected texture address mode value: '%s'.", Token.GetStr()));
1645+
"Unexpected comparison function value: '%s'.", Token.GetStr()));
16431646
}
16441647

16451648
Cleanup:
@@ -1672,8 +1675,8 @@ RootSignatureParser::ParseBorderColor(DxilStaticBorderColor &BorderColor) {
16721675
BorderColor = DxilStaticBorderColor::OpaqueWhiteUint;
16731676
break;
16741677
default:
1675-
IFC(Error(ERR_RS_UNEXPECTED_TOKEN,
1676-
"Unexpected texture address mode value: '%s'.", Token.GetStr()));
1678+
IFC(Error(ERR_RS_UNEXPECTED_TOKEN, "Unexpected border color value: '%s'.",
1679+
Token.GetStr()));
16771680
}
16781681

16791682
Cleanup:

tools/clang/lib/Parse/HLSLRootSignature.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ class RootSignatureTokenizer {
139139

140140
// Comparison function
141141
comparisonFunc,
142+
COMPARISON_NONE,
142143
COMPARISON_NEVER,
143144
COMPARISON_LESS,
144145
COMPARISON_EQUAL,

tools/clang/unittests/HLSL/FunctionTest.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,8 @@ TEST_F(FunctionTest, ParseRootSignature) {
681681
// MaxAnisotropy
682682
TestHLSLRootSignatureCase("StaticSampler(s2, maxAnisotropy=2)", S_OK);
683683
// Comparison function
684+
TestHLSLRootSignatureCase(
685+
"StaticSampler(ComparisonFunc = COMPARISON_NONE, s2)", S_OK);
684686
TestHLSLRootSignatureCase(
685687
"StaticSampler(ComparisonFunc = COMPARISON_NEVER, s2)", S_OK);
686688
TestHLSLRootSignatureCase(

tools/clang/unittests/HLSLExec/ShaderOpTest.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1704,6 +1704,7 @@ static const ParserEnumValue TEXTURE_ADDRESS_MODE_TABLE[] = {
17041704
};
17051705

17061706
static const ParserEnumValue COMPARISON_FUNC_TABLE[] = {
1707+
{L"NONE", D3D12_COMPARISON_FUNC_NONE},
17071708
{L"NEVER", D3D12_COMPARISON_FUNC_NEVER},
17081709
{L"LESS", D3D12_COMPARISON_FUNC_LESS},
17091710
{L"EQUAL", D3D12_COMPARISON_FUNC_EQUAL},

0 commit comments

Comments
 (0)