From c319512e16f19bf1f558670981bbb4af510ba9f4 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Wed, 1 Jun 2016 00:08:55 -0700 Subject: [PATCH] i965: Use a uniform for gl_PatchVerticesIn in the TCS on Gen8+. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit We still need to recompile the passthrough shader when this value changes, as it also affects the output vertex count. But otherwise, we can eliminate recompiles on Gen8+. We probably want to do this for Gen7 as well, but that requires rewriting the input release code to use a loop, which is a trade-off I'd need to consider in more detail. Signed-off-by: Kenneth Graunke Reviewed-by: Alejandro Piñeiro Cc: mesa-stable@lists.freedesktop.org --- src/mesa/drivers/dri/i965/brw_context.c | 1 + src/mesa/drivers/dri/i965/brw_tcs.c | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index ea8e8fd..f7c7874 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -599,6 +599,7 @@ brw_initialize_context_constants(struct brw_context *brw) ctx->Const.MaxClipPlanes = 8; ctx->Const.LowerTessLevel = true; + ctx->Const.LowerTCSPatchVerticesIn = brw->gen >= 8; ctx->Const.LowerTESPatchVerticesIn = true; ctx->Const.PrimitiveRestartForPatches = true; diff --git a/src/mesa/drivers/dri/i965/brw_tcs.c b/src/mesa/drivers/dri/i965/brw_tcs.c index 7fc8eb4..8a5dd7e 100644 --- a/src/mesa/drivers/dri/i965/brw_tcs.c +++ b/src/mesa/drivers/dri/i965/brw_tcs.c @@ -337,7 +337,8 @@ brw_upload_tcs_prog(struct brw_context *brw, memset(&key, 0, sizeof(key)); - key.input_vertices = ctx->TessCtrlProgram.patch_vertices; + if (brw->gen < 8 || !tcp) + key.input_vertices = ctx->TessCtrlProgram.patch_vertices; key.outputs_written = per_vertex_slots; key.patch_outputs_written = per_patch_slots; @@ -389,7 +390,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. */ - key.input_vertices = shader_prog->TessCtrl.VerticesOut; + if (brw->gen < 8) + key.input_vertices = shader_prog->TessCtrl.VerticesOut; key.tes_primitive_mode = shader_prog->_LinkedShaders[MESA_SHADER_TESS_EVAL] ? -- 2.7.4