summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2016-11-22 13:10:18 +1100
committerTimothy Arceri <[email protected]>2017-01-19 17:05:26 +1100
commit5c93d274231ad36934c5338747ce14b95231031d (patch)
treecac5930dbde74297ae41d9769d1ec103f8daf2ee /src
parent4cd709e2bcea479a723b4741de59b448b1c6c48f (diff)
mesa/glsl/i965: set and use tcs vertices_out directly
Reviewed-by: Lionel Landwerlin <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/compiler/glsl/linker.cpp24
-rw-r--r--src/mesa/drivers/dri/i965/brw_tcs.c6
-rw-r--r--src/mesa/main/shaderapi.c6
3 files changed, 15 insertions, 21 deletions
diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index dea78384a38..7073eac9d91 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.tess.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,16 +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.tess.tcs_vertices_out != 0 &&
+ gl_prog->info.tess.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.tess.tcs_vertices_out,
shader->info.TessCtrl.VerticesOut);
return;
}
- linked_shader->info.TessCtrl.VerticesOut =
+ gl_prog->info.tess.tcs_vertices_out =
shader->info.TessCtrl.VerticesOut;
}
}
@@ -1700,7 +1700,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.tess.tcs_vertices_out == 0) {
linker_error(prog, "tessellation control shader didn't declare "
"vertices out layout qualifier\n");
return;
@@ -2218,7 +2218,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 +2431,7 @@ resize_tes_inputs(struct gl_context *ctx,
* known until draw time.
*/
const int num_vertices = tcs
- ? tcs->info.TessCtrl.VerticesOut
+ ? tcs->Program->info.tess.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 bbba7496fa6..cafa4b4b411 100644
--- a/src/mesa/drivers/dri/i965/brw_tcs.c
+++ b/src/mesa/drivers/dri/i965/brw_tcs.c
@@ -380,10 +380,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.tess.tcs_vertices_out;
struct brw_program *btep;
if (tes) {
diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index 00577dc3595..3502cb2ee60 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -823,7 +823,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.tess.tcs_vertices_out;
}
return;
case GL_TESS_GEN_MODE:
@@ -2209,10 +2209,6 @@ _mesa_copy_linked_program_data(const struct gl_shader_program *src,
dst->ClipDistanceArraySize = src->Vert.ClipDistanceArraySize;
dst->CullDistanceArraySize = src->Vert.CullDistanceArraySize;
break;
- case MESA_SHADER_TESS_CTRL: {
- dst->info.tess.tcs_vertices_out = dst_sh->info.TessCtrl.VerticesOut;
- break;
- }
case MESA_SHADER_TESS_EVAL: {
dst->info.tess.primitive_mode = dst_sh->info.TessEval.PrimitiveMode;
dst->info.tess.spacing = dst_sh->info.TessEval.Spacing;