glsl: enable early_fragment_tests implicitly with post_depth_coverage
authorIago Toral Quiroga <itoral@igalia.com>
Wed, 22 Feb 2017 08:06:31 +0000 (09:06 +0100)
committerIago Toral Quiroga <itoral@igalia.com>
Thu, 23 Feb 2017 10:21:44 +0000 (11:21 +0100)
From ARB_post_depth_coverage:

   "This extension allows the fragment shader to control whether values in
    gl_SampleMaskIn[] reflect the coverage after application of the early
    depth and stencil tests.  This feature can be enabled with the following
    layout qualifier in the fragment shader:

       layout(post_depth_coverage) in;

    Use of this feature implicitly enables early fragment tests."

And a bit later it also adds:

   "early_fragment_tests" requests that fragment tests be performed before
    fragment shader execution, as described in section 15.2.4 "Early Fragment
    Tests" of the OpenGL Specification. If neither this nor post_depth_coverage
    are declared, per-fragment tests will be performed after fragment shader
    execution."

Fixes:
GL45-CTS.post_depth_coverage_tests.PostDepthSampleMask

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/compiler/glsl/linker.cpp

index b6f8bc4212e7dcfe4cd94603cbe42254325ff098..7343e4ebe5eb662f8b5056a2e47440390b8b2d82 100644 (file)
@@ -1881,7 +1881,7 @@ link_fs_inout_layout_qualifiers(struct gl_shader_program *prog,
       }
 
       linked_shader->Program->info.fs.early_fragment_tests |=
-         shader->EarlyFragmentTests;
+         shader->EarlyFragmentTests || shader->PostDepthCoverage;
       linked_shader->Program->info.fs.inner_coverage |= shader->InnerCoverage;
       linked_shader->Program->info.fs.post_depth_coverage |=
          shader->PostDepthCoverage;