summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2021-01-26 18:27:00 -0800
committerMarge Bot <eric+marge@anholt.net>2021-01-29 01:24:14 +0000
commit97fbe2d45f989dc6197c206205347e53c97a81d6 (patch)
tree2d82f9ae6bfc952882f3a97f31428f8381cd86bd
parentfdbb5d4dd9af52d34ac8e87b02e4376b312785c2 (diff)
iris: Move VS draw parameter dirty flagging to iris_bind_vs_state
Now that we're looking at shader info system values rather than vs_prog_data, there's no reason we have to do this when updating the shader variants. We can simply check it when binding a new shader from the API point of view. Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8759>
-rw-r--r--src/gallium/drivers/iris/iris_program.c46
1 files changed, 23 insertions, 23 deletions
diff --git a/src/gallium/drivers/iris/iris_program.c b/src/gallium/drivers/iris/iris_program.c
index fe597b51913..acf4a8e3874 100644
--- a/src/gallium/drivers/iris/iris_program.c
+++ b/src/gallium/drivers/iris/iris_program.c
@@ -1220,29 +1220,6 @@ iris_update_compiled_vs(struct iris_context *ice)
IRIS_STAGE_DIRTY_CONSTANTS_VS;
shs->sysvals_need_upload = true;
- const struct shader_info *info = &ish->nir->info;
- const bool uses_draw_params =
- BITSET_TEST(info->system_values_read, SYSTEM_VALUE_FIRST_VERTEX) ||
- BITSET_TEST(info->system_values_read, SYSTEM_VALUE_BASE_INSTANCE);
- const bool uses_derived_draw_params =
- BITSET_TEST(info->system_values_read, SYSTEM_VALUE_DRAW_ID) ||
- BITSET_TEST(info->system_values_read, SYSTEM_VALUE_IS_INDEXED_DRAW);
- const bool needs_sgvs_element = uses_draw_params ||
- BITSET_TEST(info->system_values_read, SYSTEM_VALUE_INSTANCE_ID) ||
- BITSET_TEST(info->system_values_read,
- SYSTEM_VALUE_VERTEX_ID_ZERO_BASE);
-
- if (ice->state.vs_uses_draw_params != uses_draw_params ||
- ice->state.vs_uses_derived_draw_params != uses_derived_draw_params ||
- ice->state.vs_needs_edge_flag != ish->needs_edge_flag) {
- ice->state.dirty |= IRIS_DIRTY_VERTEX_BUFFERS |
- IRIS_DIRTY_VERTEX_ELEMENTS;
- }
- ice->state.vs_uses_draw_params = uses_draw_params;
- ice->state.vs_uses_derived_draw_params = uses_derived_draw_params;
- ice->state.vs_needs_sgvs_element = needs_sgvs_element;
- ice->state.vs_needs_edge_flag = ish->needs_edge_flag;
-
const struct brw_vue_prog_data *vue_prog_data =
(void *) shader->prog_data;
check_urb_size(ice, vue_prog_data->urb_entry_size, MESA_SHADER_VERTEX);
@@ -2525,6 +2502,29 @@ iris_bind_vs_state(struct pipe_context *ctx, void *state)
IRIS_DIRTY_RASTER |
IRIS_DIRTY_CC_VIEWPORT;
}
+
+ const bool uses_draw_params =
+ BITSET_TEST(info->system_values_read, SYSTEM_VALUE_FIRST_VERTEX) ||
+ BITSET_TEST(info->system_values_read, SYSTEM_VALUE_BASE_INSTANCE);
+ const bool uses_derived_draw_params =
+ BITSET_TEST(info->system_values_read, SYSTEM_VALUE_DRAW_ID) ||
+ BITSET_TEST(info->system_values_read, SYSTEM_VALUE_IS_INDEXED_DRAW);
+ const bool needs_sgvs_element = uses_draw_params ||
+ BITSET_TEST(info->system_values_read, SYSTEM_VALUE_INSTANCE_ID) ||
+ BITSET_TEST(info->system_values_read,
+ SYSTEM_VALUE_VERTEX_ID_ZERO_BASE);
+
+ if (ice->state.vs_uses_draw_params != uses_draw_params ||
+ ice->state.vs_uses_derived_draw_params != uses_derived_draw_params ||
+ ice->state.vs_needs_edge_flag != ish->needs_edge_flag) {
+ ice->state.dirty |= IRIS_DIRTY_VERTEX_BUFFERS |
+ IRIS_DIRTY_VERTEX_ELEMENTS;
+ }
+
+ ice->state.vs_uses_draw_params = uses_draw_params;
+ ice->state.vs_uses_derived_draw_params = uses_derived_draw_params;
+ ice->state.vs_needs_sgvs_element = needs_sgvs_element;
+ ice->state.vs_needs_edge_flag = ish->needs_edge_flag;
}
bind_shader_state((void *) ctx, state, MESA_SHADER_VERTEX);