[Mesa-dev] [RFC PATCH 49/56] glsl: Analyze TES usage of gl_ClipDistance

Chris Forbes chrisf at ijw.co.nz
Sat Sep 20 18:41:29 PDT 2014


---
 src/glsl/linker.cpp    | 19 +++++++++++++++++++
 src/mesa/main/mtypes.h |  7 +++++++
 2 files changed, 26 insertions(+)

diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index 7721d78..1dde5cc 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -629,6 +629,17 @@ validate_vertex_shader_executable(struct gl_shader_program *prog,
                       &prog->Vert.ClipDistanceArraySize);
 }
 
+void
+validate_tess_eval_shader_executable(struct gl_shader_program *prog,
+                                     struct gl_shader *shader)
+{
+   if (shader == NULL)
+      return;
+
+   analyze_clip_usage(prog, shader, &prog->TessEval.UsesClipDistance,
+                      &prog->TessEval.ClipDistanceArraySize);
+}
+
 
 /**
  * Verify that a fragment shader executable meets all semantic requirements
@@ -2819,6 +2830,12 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
          case MESA_SHADER_VERTEX:
             validate_vertex_shader_executable(prog, sh);
             break;
+         case MESA_SHADER_TESS_CTRL:
+            /* nothing to be done */
+            break;
+         case MESA_SHADER_TESS_EVAL:
+            validate_tess_eval_shader_executable(prog, sh);
+            break;
          case MESA_SHADER_GEOMETRY:
             validate_geometry_shader_executable(prog, sh);
             break;
@@ -2835,6 +2852,8 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
 
    if (num_shaders[MESA_SHADER_GEOMETRY] > 0)
       prog->LastClipDistanceArraySize = prog->Geom.ClipDistanceArraySize;
+   else if (num_shaders[MESA_SHADER_TESS_EVAL] > 0)
+      prog->LastClipDistanceArraySize = prog->TessEval.ClipDistanceArraySize;
    else if (num_shaders[MESA_SHADER_VERTEX] > 0)
       prog->LastClipDistanceArraySize = prog->Vert.ClipDistanceArraySize;
    else
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index e3420f2..8e4bf6c 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2914,6 +2914,13 @@ struct gl_shader_program
       GLenum VertexOrder;
       /** 1 or 0 */
       int PointMode;
+      /**
+       * True if gl_ClipDistance is written to.  Copied into
+       * gl_geometry_program by _mesa_copy_linked_program_data().
+       */
+      GLboolean UsesClipDistance;
+      GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or
+                                         0 if not present. */
    } TessEval;
 
    /**
-- 
2.1.0



More information about the mesa-dev mailing list