mesa/glsl: add bitmask to track stages a program was linked against
authorTimothy Arceri <timothy.arceri@collabora.com>
Mon, 31 Oct 2016 10:16:50 +0000 (21:16 +1100)
committerTimothy Arceri <timothy.arceri@collabora.com>
Wed, 30 Nov 2016 03:13:52 +0000 (14:13 +1100)
This will be used to enable us to store the current gl_program
rather than gl_shader_program in the gl_pipline_object allowing
us to simplify handing of validation.

Also we should not be depending on _LinkedShader for this information
as it may contain shaders from a failed linking attempt rather than
the current program still in use.

We could also use this mask to iterate over the stages during linking
with _mesa_bit_scan() rather then the current method of NULL checking
each stage.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/compiler/glsl/linker.cpp
src/mesa/main/mtypes.h

index 6f54f75ae1e1a581db47bcedcc71e77e9b76be5f..d26517ace2985e45298b7352a22a3521a454415f 100644 (file)
@@ -4889,6 +4889,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
          }
 
          prog->_LinkedShaders[stage] = sh;
+         prog->data->linked_stages |= 1 << stage;
       }
    }
 
index 26b19653cb8229b9175decd5b4d3b170fc80f33c..250877dd6b6e4dfe74e76a22922c47f2c38e50a7 100644 (file)
@@ -2652,6 +2652,9 @@ struct gl_shader_program_data
    GLboolean LinkStatus;   /**< GL_LINK_STATUS */
    GLboolean Validated;
    GLchar *InfoLog;
+
+   /* Mask of stages this program was linked against */
+   unsigned linked_stages;
 };
 
 /**