Mesa (main): pvr: Implement vkCmdDraw API.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jul 13 10:41:31 UTC 2022
Module: Mesa
Branch: main
Commit: 1df16b5f225447e17986b271539c107247c395f2
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1df16b5f225447e17986b271539c107247c395f2
Author: Rajnesh Kanwal <rajnesh.kanwal at imgtec.com>
Date: Wed Jun 29 12:16:44 2022 +0100
pvr: Implement vkCmdDraw API.
Signed-off-by: Rajnesh Kanwal <rajnesh.kanwal at imgtec.com>
Reviewed-by: Frank Binns <frank.binns at imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17487>
---
src/imagination/vulkan/pvr_cmd_buffer.c | 44 +++++++++++++++++++++++++--------
1 file changed, 34 insertions(+), 10 deletions(-)
diff --git a/src/imagination/vulkan/pvr_cmd_buffer.c b/src/imagination/vulkan/pvr_cmd_buffer.c
index 834ccb3bd45..7e93391a1c1 100644
--- a/src/imagination/vulkan/pvr_cmd_buffer.c
+++ b/src/imagination/vulkan/pvr_cmd_buffer.c
@@ -3068,15 +3068,6 @@ void pvr_CmdDispatchIndirect(VkCommandBuffer commandBuffer,
assert(!"Unimplemented");
}
-void pvr_CmdDraw(VkCommandBuffer commandBuffer,
- uint32_t vertexCount,
- uint32_t instanceCount,
- uint32_t firstVertex,
- uint32_t firstInstance)
-{
- assert(!"Unimplemented");
-}
-
static void
pvr_update_draw_state(struct pvr_cmd_buffer_state *const state,
const struct pvr_cmd_buffer_draw_state *const draw_state)
@@ -4580,6 +4571,39 @@ static void pvr_emit_vdm_index_list(struct pvr_cmd_buffer *cmd_buffer,
/* TODO: See if we need list_words[5-9]. */
}
+void pvr_CmdDraw(VkCommandBuffer commandBuffer,
+ uint32_t vertexCount,
+ uint32_t instanceCount,
+ uint32_t firstVertex,
+ uint32_t firstInstance)
+{
+ PVR_FROM_HANDLE(pvr_cmd_buffer, cmd_buffer, commandBuffer);
+ struct pvr_cmd_buffer_state *state = &cmd_buffer->state;
+ struct pvr_cmd_buffer_draw_state draw_state;
+ VkResult result;
+
+ PVR_CHECK_COMMAND_BUFFER_BUILDING_STATE(cmd_buffer);
+
+ draw_state.base_vertex = firstVertex;
+ draw_state.base_instance = firstInstance;
+ draw_state.draw_indirect = false;
+ draw_state.draw_indexed = false;
+ 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->gfx_pipeline->input_asm_state.topology,
+ firstVertex,
+ vertexCount,
+ 0U,
+ 0U,
+ instanceCount);
+}
+
void pvr_CmdDrawIndexed(VkCommandBuffer commandBuffer,
uint32_t indexCount,
uint32_t instanceCount,
@@ -4598,7 +4622,7 @@ void pvr_CmdDrawIndexed(VkCommandBuffer commandBuffer,
draw_state.base_instance = firstInstance;
draw_state.draw_indirect = false;
draw_state.draw_indexed = true;
- pvr_update_draw_state(&cmd_buffer->state, &draw_state);
+ pvr_update_draw_state(state, &draw_state);
result = pvr_validate_draw_state(cmd_buffer);
if (result != VK_SUCCESS)
More information about the mesa-commit
mailing list