Mesa (master): mesa/glsl: add bitmask to track stages a program was linked against

Timothy Arceri tarceri at kemper.freedesktop.org
Wed Nov 30 03:26:40 UTC 2016


Module: Mesa
Branch: master
Commit: 34953f8907fddd0d2b27d276580a1d3223047987
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=34953f8907fddd0d2b27d276580a1d3223047987

Author: Timothy Arceri <timothy.arceri at collabora.com>
Date:   Mon Oct 31 21:16:50 2016 +1100

mesa/glsl: add bitmask to track stages a program was linked against

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 at intel.com>

---

 src/compiler/glsl/linker.cpp | 1 +
 src/mesa/main/mtypes.h       | 3 +++
 2 files changed, 4 insertions(+)

diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index 6f54f75..d26517a 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -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;
       }
    }
 
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 26b1965..250877d 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -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;
 };
 
 /**




More information about the mesa-commit mailing list