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