diff options
3 files changed, 35 insertions, 0 deletions
diff --git a/source/slang/slang-ir-glsl-legalize.cpp b/source/slang/slang-ir-glsl-legalize.cpp index ae6521076..052b4fb29 100644 --- a/source/slang/slang-ir-glsl-legalize.cpp +++ b/source/slang/slang-ir-glsl-legalize.cpp @@ -324,6 +324,16 @@ GLSLSystemValueInfo* getGLSLSystemValueInfo( name = "gl_SampleMask[0]"; } } + else if(semanticName == "sv_innercoverage") + { + // uint in hlsl, bool in glsl + // https://www.khronos.org/registry/OpenGL/extensions/NV/NV_conservative_raster_underestimation.txt + + context->requireGLSLExtension(UnownedStringSlice::fromLiteral("GL_NV_conservative_raster_underestimation")); + + name = "gl_FragFullyCoveredNV"; + requiredType = builder->getBasicType(BaseType::Bool); + } else if(semanticName == "sv_depth") { // Float in hlsl & glsl diff --git a/tests/pipeline/rasterization/conservative-rasterization/inner-coverage.slang b/tests/pipeline/rasterization/conservative-rasterization/inner-coverage.slang new file mode 100644 index 000000000..fe77095df --- /dev/null +++ b/tests/pipeline/rasterization/conservative-rasterization/inner-coverage.slang @@ -0,0 +1,11 @@ +// inner-coverage.slang + +//TEST:CROSS_COMPILE:-target spirv -entry main -stage fragment + +[shader("fragment")] +void main( + uint innerCoverage : SV_InnerCoverage, + out float4 result : SV_Target) +{ + result = innerCoverage; +} diff --git a/tests/pipeline/rasterization/conservative-rasterization/inner-coverage.slang.glsl b/tests/pipeline/rasterization/conservative-rasterization/inner-coverage.slang.glsl new file mode 100644 index 000000000..1454d493f --- /dev/null +++ b/tests/pipeline/rasterization/conservative-rasterization/inner-coverage.slang.glsl @@ -0,0 +1,14 @@ +#version 450 + +#extension GL_NV_conservative_raster_underestimation : require + +layout(location = 0) +out vec4 _S1; + +void main() +{ + vec4 _S2; + _S2 = vec4(uint(gl_FragFullyCoveredNV)); + _S1 = _S2; + return; +} |
