glsl: Keep track of the early_fragment_tests flag in gl_shader.
authorFrancisco Jerez <currojerez@riseup.net>
Wed, 28 Jan 2015 15:42:37 +0000 (17:42 +0200)
committerFrancisco Jerez <currojerez@riseup.net>
Mon, 4 May 2015 14:44:17 +0000 (17:44 +0300)
And rename _mesa_glsl_parse_state::early_fragment_tests to
fs_early_fragment_tests for consistency with other FS-specific flags in the
same struct.

Reviewed-by: Matt Turner <mattst88@gmail.com>
src/glsl/ast_type.cpp
src/glsl/glsl_parser_extras.cpp
src/glsl/glsl_parser_extras.h
src/glsl/linker.cpp
src/mesa/main/mtypes.h

index 34c2b735a9ffd331e85db7600fb34d405dfd27d4..1bcf6a2e81f98511ca1e369224b184634b8392d6 100644 (file)
@@ -342,7 +342,7 @@ ast_type_qualifier::merge_in_qualifier(YYLTYPE *loc,
    }
 
    if (q.flags.q.early_fragment_tests) {
-      state->early_fragment_tests = true;
+      state->fs_early_fragment_tests = true;
    }
 
    if (create_gs_ast) {
index 0aa3c54fc8ba120348fcd9016856d828a024e278..a8ba89eda3ab05b13b144b8587b8c453c98ce480 100644 (file)
@@ -212,7 +212,7 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
    this->gs_input_size = 0;
    this->in_qualifier = new(this) ast_type_qualifier();
    this->out_qualifier = new(this) ast_type_qualifier();
-   this->early_fragment_tests = false;
+   this->fs_early_fragment_tests = false;
    memset(this->atomic_counter_offsets, 0,
           sizeof(this->atomic_counter_offsets));
    this->allow_extension_directive_midshader =
@@ -1418,6 +1418,7 @@ set_shader_inout_layout(struct gl_shader *shader,
       assert(!state->fs_redeclares_gl_fragcoord);
       assert(!state->fs_pixel_center_integer);
       assert(!state->fs_origin_upper_left);
+      assert(!state->fs_early_fragment_tests);
    }
 
    switch (shader->Stage) {
@@ -1460,6 +1461,7 @@ set_shader_inout_layout(struct gl_shader *shader,
       shader->origin_upper_left = state->fs_origin_upper_left;
       shader->ARB_fragment_coord_conventions_enable =
          state->ARB_fragment_coord_conventions_enable;
+      shader->EarlyFragmentTests = state->fs_early_fragment_tests;
       break;
 
    default:
index dae7864fdaf3f2f518e4198d1f344a1e77cedfd6..3c47aab7b3621f27ce2f7684ac09e6edec80d448 100644 (file)
@@ -510,7 +510,7 @@ struct _mesa_glsl_parse_state {
     */
    unsigned gs_input_size;
 
-   bool early_fragment_tests;
+   bool fs_early_fragment_tests;
 
    /** Atomic counter offsets by binding */
    unsigned atomic_counter_offsets[MAX_COMBINED_ATOMIC_BUFFERS];
index 21fde94442d59ca0265ba8968affa6ce27fe14b8..330fae004b3b7898d6ec53971deb3a5eeace3176 100644 (file)
@@ -1413,6 +1413,8 @@ link_fs_input_layout_qualifiers(struct gl_shader_program *prog,
          linked_shader->origin_upper_left = shader->origin_upper_left;
          linked_shader->pixel_center_integer = shader->pixel_center_integer;
       }
+
+      linked_shader->EarlyFragmentTests |= shader->EarlyFragmentTests;
    }
 }
 
index fb4143086dda830b9217357d6dec64a4a6e24467..b67fc0c1914cea93a4d2b392b384b42e0d140c1c 100644 (file)
@@ -2498,6 +2498,12 @@ struct gl_shader
     */
    GLuint NumImages;
 
+   /**
+    * Whether early fragment tests are enabled as defined by
+    * ARB_shader_image_load_store.
+    */
+   bool EarlyFragmentTests;
+
    /**
     * Compute shader state from ARB_compute_shader layout qualifiers.
     */