Module: Mesa Branch: main Commit: 222f3c8a6d95e7115c43394990f8db30f6bbdb58 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=222f3c8a6d95e7115c43394990f8db30f6bbdb58
Author: Rajnesh Kanwal <[email protected]> Date: Thu Aug 11 10:59:17 2022 +0100 pvr: Implement vkCmdDrawIndexedIndirect API. Signed-off-by: Rajnesh Kanwal <[email protected]> Reviewed-by: Karmjit Mahil <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18486> --- src/imagination/vulkan/pvr_cmd_buffer.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/imagination/vulkan/pvr_cmd_buffer.c b/src/imagination/vulkan/pvr_cmd_buffer.c index b6c0773373d..3e7719d7cef 100644 --- a/src/imagination/vulkan/pvr_cmd_buffer.c +++ b/src/imagination/vulkan/pvr_cmd_buffer.c @@ -5150,7 +5150,36 @@ void pvr_CmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, uint32_t drawCount, uint32_t stride) { - assert(!"Unimplemented"); + const struct pvr_cmd_buffer_draw_state draw_state = { + .draw_indirect = true, + .draw_indexed = true, + }; + PVR_FROM_HANDLE(pvr_cmd_buffer, cmd_buffer, commandBuffer); + struct pvr_cmd_buffer_state *state = &cmd_buffer->state; + PVR_FROM_HANDLE(pvr_buffer, buffer, _buffer); + VkResult result; + + PVR_CHECK_COMMAND_BUFFER_BUILDING_STATE(cmd_buffer); + + pvr_update_draw_state(state, &draw_state); + + result = pvr_validate_draw_state(cmd_buffer); + if (result != VK_SUCCESS) + return; + + /* Write the VDM control stream for the primitive. */ + pvr_emit_vdm_index_list(cmd_buffer, + &state->current_sub_cmd->gfx, + state->gfx_pipeline->input_asm_state.topology, + 0, + 0, + 0, + 0, + 0, + buffer, + offset, + drawCount, + stride); } void pvr_CmdDrawIndirect(VkCommandBuffer commandBuffer,
