From a01770b9c878b6b95875ef60146ce4ee5e4cfd54 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Sun, 7 Jul 2019 16:48:10 -0700 Subject: [PATCH] iris: Fix key->input_vertices for 8_PATCH TCS mode. We were failing to flag the program dirty when it changed. Also, we were unnecessarily setting key->input_vertices for SINGLE_PATCH mode, which would reduce program cache hits. Only set it if needed. --- src/gallium/drivers/iris/iris_draw.c | 7 +++++++ src/gallium/drivers/iris/iris_program.c | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/iris/iris_draw.c b/src/gallium/drivers/iris/iris_draw.c index 50c18774c70..5793dc15064 100644 --- a/src/gallium/drivers/iris/iris_draw.c +++ b/src/gallium/drivers/iris/iris_draw.c @@ -63,6 +63,9 @@ static void iris_update_draw_info(struct iris_context *ice, const struct pipe_draw_info *info) { + struct iris_screen *screen = (struct iris_screen *)ice->ctx.screen; + const struct brw_compiler *compiler = screen->compiler; + if (ice->state.prim_mode != info->mode) { ice->state.prim_mode = info->mode; ice->state.dirty |= IRIS_DIRTY_VF_TOPOLOGY; @@ -81,6 +84,10 @@ iris_update_draw_info(struct iris_context *ice, ice->state.vertices_per_patch = info->vertices_per_patch; ice->state.dirty |= IRIS_DIRTY_VF_TOPOLOGY; + /* 8_PATCH TCS needs this for key->input_vertices */ + if (compiler->use_tcs_8_patch) + ice->state.dirty |= IRIS_DIRTY_UNCOMPILED_TCS; + /* Flag constants dirty for gl_PatchVerticesIn if needed. */ const struct shader_info *tcs_info = iris_get_shader_info(ice, MESA_SHADER_TESS_CTRL); diff --git a/src/gallium/drivers/iris/iris_program.c b/src/gallium/drivers/iris/iris_program.c index 502cbebb024..8470b97a2e2 100644 --- a/src/gallium/drivers/iris/iris_program.c +++ b/src/gallium/drivers/iris/iris_program.c @@ -1173,6 +1173,7 @@ iris_update_compiled_tcs(struct iris_context *ice) struct iris_uncompiled_shader *tcs = ice->shaders.uncompiled[MESA_SHADER_TESS_CTRL]; struct iris_screen *screen = (struct iris_screen *)ice->ctx.screen; + const struct brw_compiler *compiler = screen->compiler; const struct gen_device_info *devinfo = &screen->devinfo; const struct shader_info *tes_info = @@ -1181,7 +1182,8 @@ iris_update_compiled_tcs(struct iris_context *ice) KEY_INIT_NO_ID(devinfo->gen), .base.program_string_id = tcs ? tcs->program_id : 0, .tes_primitive_mode = tes_info->tess.primitive_mode, - .input_vertices = ice->state.vertices_per_patch, + .input_vertices = + !tcs || compiler->use_tcs_8_patch ? ice->state.vertices_per_patch : 0, }; get_unified_tess_slots(ice, &key.outputs_written, &key.patch_outputs_written); -- 2.30.2