From d070e31020f3900d1caf262694473a2ccfe24d12 Mon Sep 17 00:00:00 2001 From: Karmjit Mahil Date: Fri, 2 Jun 2023 17:19:06 +0100 Subject: [PATCH] pvr: Fix draw indirect page faults due to missing index list buffer Fixes: dEQP-VK.draw.renderpass.basic_draw.draw_indirect.* dEQP-VK.draw.renderpass.basic_draw.draw_indexed_indirect.* Signed-off-by: Karmjit Mahil Reviewed-by: Matt Coster Part-of: --- src/imagination/vulkan/pvr_cmd_buffer.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/imagination/vulkan/pvr_cmd_buffer.c b/src/imagination/vulkan/pvr_cmd_buffer.c index f1902aa41d1..06452f563b7 100644 --- a/src/imagination/vulkan/pvr_cmd_buffer.c +++ b/src/imagination/vulkan/pvr_cmd_buffer.c @@ -6380,7 +6380,17 @@ pvr_write_draw_indirect_vdm_stream(struct pvr_cmd_buffer *cmd_buffer, uint32_t pds_size; VkResult result; + /* TODO: Move this outside the loop and allocate all of them in one go? */ + result = pvr_cmd_buffer_alloc_mem(cmd_buffer, + cmd_buffer->device->heaps.general_heap, + DUMMY_VDM_CONTROL_STREAM_BLOCK_SIZE, + PVR_BO_ALLOC_FLAG_CPU_MAPPED, + &dummy_bo); + if (result != VK_SUCCESS) + return result; + pds_prog.increment_draw_id = (i != 0); + pds_prog.index_list_addr_buffer = dummy_bo->dev_addr.addr; if (state->draw_state.draw_indexed) { pvr_pds_generate_draw_elements_indirect(&pds_prog, @@ -6463,14 +6473,6 @@ pvr_write_draw_indirect_vdm_stream(struct pvr_cmd_buffer *cmd_buffer, list0.primitive_topology = PVRX(VDMCTRL_PRIMITIVE_TOPOLOGY_TRI_LIST); } - result = pvr_cmd_buffer_alloc_mem(cmd_buffer, - cmd_buffer->device->heaps.general_heap, - DUMMY_VDM_CONTROL_STREAM_BLOCK_SIZE, - PVR_BO_ALLOC_FLAG_CPU_MAPPED, - &dummy_bo); - if (result != VK_SUCCESS) - return result; - dummy_stream = pvr_bo_suballoc_get_map_addr(dummy_bo); /* For indexed draw cmds fill in the dummy's header (as it won't change