Mesa (master): radv: bail out when binding the same index buffer

Samuel Pitoiset hakzsam at kemper.freedesktop.org
Tue Oct 31 09:18:43 UTC 2017


Module: Mesa
Branch: master
Commit: 11fdc2cd3420aa1541cc4c3c733e9a878308eb55
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=11fdc2cd3420aa1541cc4c3c733e9a878308eb55

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Mon Oct 30 17:12:05 2017 +0100

radv: bail out when binding the same index buffer

DOW3 appears to hit this path.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

---

 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 12fd70f512..00ed7182a7 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 381afb777f..1b1fa93ee3 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;




More information about the mesa-commit mailing list