radv: don't reset vertex state params on pipeline bind if reg layout matches
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Thu, 28 Jan 2021 16:52:42 +0000 (11:52 -0500)
committerMarge Bot <eric+marge@anholt.net>
Wed, 31 Mar 2021 13:54:24 +0000 (13:54 +0000)
this is unnecessary since the locations will match

Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8788>

src/amd/vulkan/radv_cmd_buffer.c

index 511f3ca..53d9f87 100644 (file)
@@ -4428,6 +4428,12 @@ void radv_CmdBindPipeline(
                        return;
                radv_mark_descriptor_sets_dirty(cmd_buffer, pipelineBindPoint);
 
+               bool vtx_emit_count_changed = !pipeline ||
+                                             !cmd_buffer->state.pipeline ||
+                                             cmd_buffer->state.pipeline->graphics.vtx_emit_num !=
+                                             pipeline->graphics.vtx_emit_num ||
+                                             cmd_buffer->state.pipeline->graphics.vtx_base_sgpr !=
+                                             pipeline->graphics.vtx_base_sgpr;
                cmd_buffer->state.pipeline = pipeline;
                if (!pipeline)
                        break;
@@ -4436,9 +4442,11 @@ void radv_CmdBindPipeline(
                cmd_buffer->push_constant_stages |= pipeline->active_stages;
 
                /* the new vertex shader might not have the same user regs */
-               cmd_buffer->state.last_first_instance = -1;
-               cmd_buffer->state.last_vertex_offset = -1;
-               cmd_buffer->state.last_drawid = -1;
+               if (vtx_emit_count_changed) {
+                       cmd_buffer->state.last_first_instance = -1;
+                       cmd_buffer->state.last_vertex_offset = -1;
+                       cmd_buffer->state.last_drawid = -1;
+               }
 
                /* Prefetch all pipeline shaders at first draw time. */
                cmd_buffer->state.prefetch_L2_mask |= RADV_PREFETCH_SHADERS;