HLSL: add error for expected comparison sampler in SampleCmp* ops

This adds an error message if a non-comparison sampler is used with
comparison sampling methods.  There's no functional change for correct shaders.
This commit is contained in:
steve-lunarg 2017-04-21 09:54:53 -06:00
parent 32a385e9d7
commit 3cbc32f472
6 changed files with 224 additions and 0 deletions

View file

@ -0,0 +1,96 @@
hlsl.samplecmp.negative.frag
ERROR: 0:9: '' : expected: SamplerComparisonState
ERROR: 1 compilation errors. No code generated.
Shader version: 500
gl_FragCoord origin is upper left
ERROR: node is still EOpNull!
0:7 Function Definition: @main( ( temp 4-component vector of float)
0:7 Function Parameters:
0:? Sequence
0:8 texture ( temp float)
0:8 Construct combined texture-sampler ( temp sampler2DShadow)
0:8 'g_shadowTex' ( uniform texture2D)
0:8 'g_shadowSamplerComp' ( uniform sampler)
0:8 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
0:? 0.000000
0:? 0.000000
0:8 Constant:
0:8 0.000000
0:9 ERROR: Bad aggregation op
( temp float)
0:9 'g_shadowTex' ( uniform texture2D)
0:9 'g_shadowSampler' ( uniform sampler)
0:? Constant:
0:? 0.000000
0:? 0.000000
0:9 Constant:
0:9 0.000000
0:11 Branch: Return with expression
0:11 Constant:
0:11 0.000000
0:11 0.000000
0:11 0.000000
0:11 0.000000
0:7 Function Definition: main( ( temp void)
0:7 Function Parameters:
0:? Sequence
0:7 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:7 Function Call: @main( ( temp 4-component vector of float)
0:? Linker Objects
0:? 'g_shadowTex' ( uniform texture2D)
0:? 'g_shadowSampler' ( uniform sampler)
0:? 'g_shadowSamplerComp' ( uniform sampler)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
Shader version: 500
gl_FragCoord origin is upper left
ERROR: node is still EOpNull!
0:7 Function Definition: @main( ( temp 4-component vector of float)
0:7 Function Parameters:
0:? Sequence
0:8 texture ( temp float)
0:8 Construct combined texture-sampler ( temp sampler2DShadow)
0:8 'g_shadowTex' ( uniform texture2D)
0:8 'g_shadowSamplerComp' ( uniform sampler)
0:8 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
0:? 0.000000
0:? 0.000000
0:8 Constant:
0:8 0.000000
0:9 ERROR: Bad aggregation op
( temp float)
0:9 'g_shadowTex' ( uniform texture2D)
0:9 'g_shadowSampler' ( uniform sampler)
0:? Constant:
0:? 0.000000
0:? 0.000000
0:9 Constant:
0:9 0.000000
0:11 Branch: Return with expression
0:11 Constant:
0:11 0.000000
0:11 0.000000
0:11 0.000000
0:11 0.000000
0:7 Function Definition: main( ( temp void)
0:7 Function Parameters:
0:? Sequence
0:7 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:7 Function Call: @main( ( temp 4-component vector of float)
0:? Linker Objects
0:? 'g_shadowTex' ( uniform texture2D)
0:? 'g_shadowSampler' ( uniform sampler)
0:? 'g_shadowSamplerComp' ( uniform sampler)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
SPIR-V is not generated for failed compile or link

View file

@ -0,0 +1,80 @@
hlsl.samplecmp.negative2.frag
ERROR: 0:7: '' : expected: SamplerComparisonState
ERROR: 1 compilation errors. No code generated.
Shader version: 500
gl_FragCoord origin is upper left
ERROR: node is still EOpNull!
0:6 Function Definition: @main( ( temp 4-component vector of float)
0:6 Function Parameters:
0:? Sequence
0:7 ERROR: Bad aggregation op
( temp 4-component vector of float)
0:7 'g_shadowTex' ( uniform texture2D)
0:7 'g_shadowSampler' ( uniform sampler)
0:? Constant:
0:? 0.000000
0:? 0.000000
0:7 Constant:
0:7 0.000000
0:? Constant:
0:? 0 (const int)
0:? 0 (const int)
0:9 Branch: Return with expression
0:9 Constant:
0:9 0.000000
0:9 0.000000
0:9 0.000000
0:9 0.000000
0:6 Function Definition: main( ( temp void)
0:6 Function Parameters:
0:? Sequence
0:6 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:6 Function Call: @main( ( temp 4-component vector of float)
0:? Linker Objects
0:? 'g_shadowTex' ( uniform texture2D)
0:? 'g_shadowSampler' ( uniform sampler)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
Shader version: 500
gl_FragCoord origin is upper left
ERROR: node is still EOpNull!
0:6 Function Definition: @main( ( temp 4-component vector of float)
0:6 Function Parameters:
0:? Sequence
0:7 ERROR: Bad aggregation op
( temp 4-component vector of float)
0:7 'g_shadowTex' ( uniform texture2D)
0:7 'g_shadowSampler' ( uniform sampler)
0:? Constant:
0:? 0.000000
0:? 0.000000
0:7 Constant:
0:7 0.000000
0:? Constant:
0:? 0 (const int)
0:? 0 (const int)
0:9 Branch: Return with expression
0:9 Constant:
0:9 0.000000
0:9 0.000000
0:9 0.000000
0:9 0.000000
0:6 Function Definition: main( ( temp void)
0:6 Function Parameters:
0:? Sequence
0:6 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:6 Function Call: @main( ( temp 4-component vector of float)
0:? Linker Objects
0:? 'g_shadowTex' ( uniform texture2D)
0:? 'g_shadowSampler' ( uniform sampler)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
SPIR-V is not generated for failed compile or link

View file

@ -0,0 +1,12 @@
Texture2D g_shadowTex;
SamplerState g_shadowSampler;
SamplerComparisonState g_shadowSamplerComp;
float4 main() : SV_Target0
{
g_shadowTex.SampleCmp(g_shadowSamplerComp, float2(0,0), 0); // OK
g_shadowTex.SampleCmp(g_shadowSampler, float2(0,0), 0); // ERROR (should be comparison sampler)
return 0;
}

View file

@ -0,0 +1,10 @@
Texture2D g_shadowTex;
SamplerState g_shadowSampler;
float4 main() : SV_Target0
{
g_shadowTex.GatherCmpRed(g_shadowSampler, float2(0,0), 0, int2(0,0)); // ERROR (should be comparison sampler)
return 0;
}