From 7bea0dd53609807541dde96b3548a1a1661122ec Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Thu, 26 Dec 2024 23:42:07 +0200 Subject: [PATCH] anv: fix index buffer size changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With vkCmdBindIndexBuffer2KHR only the provided size can change which currently fails to reprogram the index buffer properly. Signed-off-by: Lionel Landwerlin Fixes: 5c2aca456e ("anv: implement vkCmdBindIndexBuffer2KHR") Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/12376 Reviewed-by: Tapani Pälli (cherry picked from commit 5e4aeb3ad798a0ea3dee30e7942d71c49087b8ec) Part-of: --- .pick_status.json | 2 +- src/intel/vulkan/genX_cmd_buffer.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 5b8fbd04302..c9f784654ee 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1244,7 +1244,7 @@ "description": "anv: fix index buffer size changes", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "5c2aca456eebc8c3a219fe56adcf21a0b9675b4a", "notes": null diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index b4cc11a0cf2..8571e9fade4 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -6147,14 +6147,16 @@ void genX(CmdBindIndexBuffer2KHR)( cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_RESTART_INDEX; } + uint32_t index_size = buffer ? vk_buffer_range(&buffer->vk, offset, size) : 0; uint32_t index_type = vk_to_intel_index_type(indexType); if (cmd_buffer->state.gfx.index_buffer != buffer || cmd_buffer->state.gfx.index_type != index_type || - cmd_buffer->state.gfx.index_offset != offset) { + cmd_buffer->state.gfx.index_offset != offset || + cmd_buffer->state.gfx.index_size != index_size) { cmd_buffer->state.gfx.index_buffer = buffer; cmd_buffer->state.gfx.index_type = vk_to_intel_index_type(indexType); cmd_buffer->state.gfx.index_offset = offset; - cmd_buffer->state.gfx.index_size = buffer ? vk_buffer_range(&buffer->vk, offset, size) : 0; + cmd_buffer->state.gfx.index_size = index_size; cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_INDEX_BUFFER; } }