From 11fdc2cd3420aa1541cc4c3c733e9a878308eb55 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 30 Oct 2017 17:12:05 +0100 Subject: [PATCH] radv: bail out when binding the same index buffer DOW3 appears to hit this path. Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen --- src/amd/vulkan/radv_cmd_buffer.c | 9 +++++++++ src/amd/vulkan/radv_private.h | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 12fd70f..00ed718 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -2281,6 +2281,15 @@ void radv_CmdBindIndexBuffer( RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer); RADV_FROM_HANDLE(radv_buffer, index_buffer, buffer); + if (cmd_buffer->state.index_buffer == index_buffer && + cmd_buffer->state.index_offset == offset && + cmd_buffer->state.index_type == indexType) { + /* No state changes. */ + return; + } + + cmd_buffer->state.index_buffer = index_buffer; + cmd_buffer->state.index_offset = offset; cmd_buffer->state.index_type = indexType; /* vk matches hw */ cmd_buffer->state.index_va = radv_buffer_get_va(index_buffer->bo); cmd_buffer->state.index_va += index_buffer->offset + offset; diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 381afb7..1b1fa93 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -815,9 +815,14 @@ struct radv_cmd_state { struct radv_descriptor_set * descriptors[MAX_SETS]; struct radv_attachment_state * attachments; VkRect2D render_area; + + /* Index buffer */ + struct radv_buffer *index_buffer; + uint64_t index_offset; uint32_t index_type; uint32_t max_index_count; uint64_t index_va; + int32_t last_primitive_reset_en; uint32_t last_primitive_reset_index; enum radv_cmd_flush_bits flush_bits; -- 2.7.4