GLSL: Fix post-depth coverage for ESSL.

ESSL does not support `GL_ARB_post_depth_coverage`. There, we must use
`GL_EXT_post_depth_coverage`. I've added this as a fallback for desktop
as well.

Note that `GL_EXT_post_depth_coverage` also requires the fragment shader
to set `early_fragment_tests` explicitly, while
`GL_ARB_post_depth_coverage` does not. It doesn't really matter either
way, since `SPV_KHR_post_depth_coverage` *also* requires both execution
modes to be explicitly set.
This commit is contained in:
Chip Davis 2019-08-02 21:02:05 -05:00
parent 3ccfbce264
commit 5fe1ecc324
6 changed files with 62 additions and 0 deletions

View File

@ -0,0 +1,14 @@
#version 310 es
#extension GL_EXT_post_depth_coverage : require
#extension GL_OES_sample_variables : require
precision mediump float;
precision highp int;
layout(early_fragment_tests, post_depth_coverage) in;
layout(location = 0) out vec4 FragColor;
void main()
{
FragColor = vec4(float(gl_SampleMaskIn[0]));
}

View File

@ -1,5 +1,9 @@
#version 450
#if defined(GL_ARB_post_depth_coverge)
#extension GL_ARB_post_depth_coverage : require
#else
#extension GL_EXT_post_depth_coverage : require
#endif
layout(early_fragment_tests, post_depth_coverage) in;
layout(location = 0) out vec4 FragColor;

View File

@ -0,0 +1,14 @@
#version 310 es
#extension GL_EXT_post_depth_coverage : require
#extension GL_OES_sample_variables : require
precision mediump float;
precision highp int;
layout(early_fragment_tests, post_depth_coverage) in;
layout(location = 0) out vec4 FragColor;
void main()
{
FragColor = vec4(float(gl_SampleMaskIn[0]));
}

View File

@ -1,5 +1,9 @@
#version 450
#if defined(GL_ARB_post_depth_coverge)
#extension GL_ARB_post_depth_coverage : require
#else
#extension GL_EXT_post_depth_coverage : require
#endif
layout(early_fragment_tests, post_depth_coverage) in;
layout(location = 0) out vec4 FragColor;

View File

@ -0,0 +1,13 @@
#version 310 es
#extension GL_EXT_post_depth_coverage : require
#extension GL_OES_sample_variables : require
precision mediump float;
layout(early_fragment_tests, post_depth_coverage) in;
layout(location = 0) out vec4 FragColor;
void main()
{
FragColor = vec4(gl_SampleMaskIn[0]);
}

View File

@ -640,6 +640,19 @@ void CompilerGLSL::emit_header()
statement("#endif");
}
}
else if (ext == "GL_ARB_post_depth_coverage")
{
if (options.es)
statement("#extension GL_EXT_post_depth_coverage : require");
else
{
statement("#if defined(GL_ARB_post_depth_coverge)");
statement("#extension GL_ARB_post_depth_coverage : require");
statement("#else");
statement("#extension GL_EXT_post_depth_coverage : require");
statement("#endif");
}
}
else
statement("#extension ", ext, " : require");
}