--- src/compiler/glsl/linker.cpp | 25 ++++++++++++------------- src/mesa/drivers/dri/i965/brw_tcs.c | 6 ++---- src/mesa/main/shaderapi.c | 6 +----- 3 files changed, 15 insertions(+), 22 deletions(-)
diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp index 0c81ced..9f86aae 100644 --- a/src/compiler/glsl/linker.cpp +++ b/src/compiler/glsl/linker.cpp @@ -1659,15 +1659,15 @@ link_xfb_stride_layout_qualifiers(struct gl_context *ctx, */ static void link_tcs_out_layout_qualifiers(struct gl_shader_program *prog, - struct gl_linked_shader *linked_shader, + struct gl_program *gl_prog, struct gl_shader **shader_list, unsigned num_shaders) { - linked_shader->info.TessCtrl.VerticesOut = 0; - - if (linked_shader->Stage != MESA_SHADER_TESS_CTRL) + if (gl_prog->info.stage != MESA_SHADER_TESS_CTRL) return; + gl_prog->info.tcs.vertices_out = 0; + /* From the GLSL 4.0 spec (chapter 4.3.8.2): * * "All tessellation control shader layout declarations in a program @@ -1682,17 +1682,16 @@ link_tcs_out_layout_qualifiers(struct gl_shader_program *prog, struct gl_shader *shader = shader_list[i]; if (shader->info.TessCtrl.VerticesOut != 0) { - if (linked_shader->info.TessCtrl.VerticesOut != 0 && - linked_shader->info.TessCtrl.VerticesOut != - shader->info.TessCtrl.VerticesOut) { + if (gl_prog->info.tcs.vertices_out != 0 && + gl_prog->info.tcs.vertices_out != + (unsigned) shader->info.TessCtrl.VerticesOut) { linker_error(prog, "tessellation control shader defined with " "conflicting output vertex count (%d and %d)\n", - linked_shader->info.TessCtrl.VerticesOut, + gl_prog->info.tcs.vertices_out, shader->info.TessCtrl.VerticesOut); return; } - linked_shader->info.TessCtrl.VerticesOut = - shader->info.TessCtrl.VerticesOut; + gl_prog->info.tcs.vertices_out = shader->info.TessCtrl.VerticesOut; } } @@ -1700,7 +1699,7 @@ link_tcs_out_layout_qualifiers(struct gl_shader_program *prog, * since we already know we're in the right type of shader program * for doing it. */ - if (linked_shader->info.TessCtrl.VerticesOut == 0) { + if (gl_prog->info.tcs.vertices_out == 0) { linker_error(prog, "tessellation control shader didn't declare " "vertices out layout qualifier\n"); return; @@ -2218,7 +2217,7 @@ link_intrastage_shaders(void *mem_ctx, clone_ir_list(mem_ctx, linked->ir, main->ir); link_fs_inout_layout_qualifiers(prog, linked, shader_list, num_shaders); - link_tcs_out_layout_qualifiers(prog, linked, shader_list, num_shaders); + link_tcs_out_layout_qualifiers(prog, gl_prog, shader_list, num_shaders); link_tes_in_layout_qualifiers(prog, linked, shader_list, num_shaders); link_gs_inout_layout_qualifiers(prog, linked, shader_list, num_shaders); link_cs_input_layout_qualifiers(prog, linked, shader_list, num_shaders); @@ -2431,7 +2430,7 @@ resize_tes_inputs(struct gl_context *ctx, * known until draw time. */ const int num_vertices = tcs - ? tcs->info.TessCtrl.VerticesOut + ? tcs->Program->info.tcs.vertices_out : ctx->Const.MaxPatchVertices; array_resize_visitor input_resize_visitor(num_vertices, prog, diff --git a/src/mesa/drivers/dri/i965/brw_tcs.c b/src/mesa/drivers/dri/i965/brw_tcs.c index 9e9d9eb..27a53e3 100644 --- a/src/mesa/drivers/dri/i965/brw_tcs.c +++ b/src/mesa/drivers/dri/i965/brw_tcs.c @@ -392,10 +392,8 @@ brw_tcs_precompile(struct gl_context *ctx, brw_setup_tex_for_precompile(brw, &key.tex, prog); /* Guess that the input and output patches have the same dimensionality. */ - if (brw->gen < 8) { - key.input_vertices = shader_prog-> - _LinkedShaders[MESA_SHADER_TESS_CTRL]->info.TessCtrl.VerticesOut; - } + if (brw->gen < 8) + key.input_vertices = prog->info.tcs.vertices_out; struct brw_program *btep; if (tes) { diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 1de6d89..442e1a8 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -821,7 +821,7 @@ get_programiv(struct gl_context *ctx, GLuint program, GLenum pname, break; if (check_tcs_query(ctx, shProg)) { *params = shProg->_LinkedShaders[MESA_SHADER_TESS_CTRL]-> - info.TessCtrl.VerticesOut; + Program->info.tcs.vertices_out; } return; case GL_TESS_GEN_MODE: @@ -2203,10 +2203,6 @@ _mesa_copy_linked_program_data(const struct gl_shader_program *src, dst->info.separate_shader = src->SeparateShader; switch (dst_sh->Stage) { - case MESA_SHADER_TESS_CTRL: { - dst->info.tcs.vertices_out = dst_sh->info.TessCtrl.VerticesOut; - break; - } case MESA_SHADER_TESS_EVAL: { dst->info.tes.primitive_mode = dst_sh->info.TessEval.PrimitiveMode; dst->info.tes.spacing = dst_sh->info.TessEval.Spacing; -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev