From: Dave Airlie <airl...@redhat.com>

This in theory should reduce the number of calculations for this register
per draw.
---
 src/amd/vulkan/radv_private.h  |  2 ++
 src/amd/vulkan/si_cmd_buffer.c | 11 +++++++++++
 2 files changed, 13 insertions(+)

diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index c88f1ff..8f60d9b 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -775,6 +775,8 @@ struct radv_cmd_state {
        uint32_t                                      descriptors_dirty;
        uint32_t                                      trace_id;
        uint32_t                                      last_ia_multi_vgt_param;
+       bool last_draw_instanced, last_draw_indirect, 
last_multi_instances_smaller_than_primgroup, ia_set_once;
+       
 };
 
 struct radv_cmd_pool {
diff --git a/src/amd/vulkan/si_cmd_buffer.c b/src/amd/vulkan/si_cmd_buffer.c
index 3464def..9b65b45 100644
--- a/src/amd/vulkan/si_cmd_buffer.c
+++ b/src/amd/vulkan/si_cmd_buffer.c
@@ -700,6 +700,17 @@ si_get_ia_multi_vgt_param(struct radv_cmd_buffer 
*cmd_buffer,
 
        multi_instances_smaller_than_primgroup = indirect_draw || 
instance_less_than_primgroup_size;
 
+       if (cmd_buffer->state.ia_set_once &&
+           cmd_buffer->state.last_draw_instanced == instanced_draw &&
+           cmd_buffer->state.last_draw_indirect == indirect_draw &&
+           cmd_buffer->state.last_multi_instances_smaller_than_primgroup == 
multi_instances_smaller_than_primgroup)
+               return cmd_buffer->state.last_ia_multi_vgt_param;
+
+       cmd_buffer->state.ia_set_once = true;
+       cmd_buffer->state.last_draw_instanced = instanced_draw;
+       cmd_buffer->state.last_draw_indirect = indirect_draw;
+       cmd_buffer->state.last_multi_instances_smaller_than_primgroup = 
multi_instances_smaller_than_primgroup;
+
        ia_switch_on_eoi = 
cmd_buffer->state.pipeline->graphics.tess_ia_switch_on_eoi;
        partial_vs_wave = 
cmd_buffer->state.pipeline->graphics.tess_partial_vs_wave;
        partial_es_wave = cmd_buffer->state.pipeline->graphics.partial_es_wave;
-- 
2.9.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to