--- 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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev