Module: Mesa
Branch: main
Commit: b98cfe9cb4ad87af194bc3948f8b864cee7f9073
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b98cfe9cb4ad87af194bc3948f8b864cee7f9073

Author: Boris Brezillon <[email protected]>
Date:   Wed Mar  9 13:04:43 2022 +0100

lavapipe: Re-use auto-generated vk_cmd_enqueue entrypoints

Re-use auto-generated vk_cmd_enqueue entrypoints instead of generating
our own version doing the same thing.  In order to effectively do this,
we also add an allow-list of which entrypoints lavapipe actually handles
to avoid issues where the autogenerated one stomps a vkCmdFoo2 wrapper.

Signed-off-by: Boris Brezillon <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15311>

---

 src/gallium/frontends/lavapipe/lvp_cmd_buffer.c |  51 ++++-----
 src/gallium/frontends/lavapipe/lvp_device.c     |   2 +
 src/gallium/frontends/lavapipe/lvp_execute.c    | 105 +++++++++++++++++-
 src/gallium/frontends/lavapipe/lvp_private.h    |   4 +-
 src/gallium/frontends/lavapipe/meson.build      |  13 +--
 src/vulkan/util/meson.build                     |   5 -
 src/vulkan/util/vk_commands_gen.py              | 136 ------------------------
 7 files changed, 130 insertions(+), 186 deletions(-)

diff --git a/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c 
b/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c
index 07b36b9f9d5..4c5e4ddb87e 100644
--- a/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c
+++ b/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c
@@ -47,9 +47,6 @@ static VkResult lvp_create_cmd_buffer(
    cmd_buffer->device = device;
    cmd_buffer->pool = pool;
 
-   cmd_buffer->queue.alloc = &pool->vk.alloc;
-   list_inithead(&cmd_buffer->queue.cmds);
-
    cmd_buffer->status = LVP_CMD_BUFFER_STATUS_INITIAL;
    if (pool) {
       list_addtail(&cmd_buffer->pool_link, &pool->cmd_buffers);
@@ -68,8 +65,6 @@ static VkResult lvp_reset_cmd_buffer(struct lvp_cmd_buffer 
*cmd_buffer)
 {
    vk_command_buffer_reset(&cmd_buffer->vk);
 
-   vk_free_queue(&cmd_buffer->queue);
-   list_inithead(&cmd_buffer->queue.cmds);
    cmd_buffer->status = LVP_CMD_BUFFER_STATUS_INITIAL;
    return VK_SUCCESS;
 }
@@ -123,8 +118,6 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_AllocateCommandBuffers(
 static void
 lvp_cmd_buffer_destroy(struct lvp_cmd_buffer *cmd_buffer)
 {
-   vk_free_queue(&cmd_buffer->queue);
-   list_del(&cmd_buffer->pool_link);
    vk_command_buffer_finish(&cmd_buffer->vk);
    vk_free(&cmd_buffer->pool->vk.alloc, cmd_buffer);
 }
@@ -278,19 +271,19 @@ VKAPI_ATTR void VKAPI_CALL lvp_CmdDrawMultiEXT(
 {
    LVP_FROM_HANDLE(lvp_cmd_buffer, cmd_buffer, commandBuffer);
 
-   struct vk_cmd_queue_entry *cmd = vk_zalloc(cmd_buffer->queue.alloc,
+   struct vk_cmd_queue_entry *cmd = vk_zalloc(cmd_buffer->vk.cmd_queue.alloc,
                                               sizeof(*cmd), 8,
                                               
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
    if (!cmd)
       return;
 
    cmd->type = VK_CMD_DRAW_MULTI_EXT;
-   list_addtail(&cmd->cmd_link, &cmd_buffer->queue.cmds);
+   list_addtail(&cmd->cmd_link, &cmd_buffer->vk.cmd_queue.cmds);
 
    cmd->u.draw_multi_ext.draw_count = drawCount;
    if (pVertexInfo) {
       unsigned i = 0;
-      cmd->u.draw_multi_ext.vertex_info = vk_zalloc(cmd_buffer->queue.alloc,
+      cmd->u.draw_multi_ext.vertex_info = 
vk_zalloc(cmd_buffer->vk.cmd_queue.alloc,
                                                     
sizeof(*cmd->u.draw_multi_ext.vertex_info) * drawCount,
                                                     8,
                                                     
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
@@ -313,20 +306,20 @@ VKAPI_ATTR void VKAPI_CALL lvp_CmdDrawMultiIndexedEXT(
 {
    LVP_FROM_HANDLE(lvp_cmd_buffer, cmd_buffer, commandBuffer);
 
-   struct vk_cmd_queue_entry *cmd = vk_zalloc(cmd_buffer->queue.alloc,
+   struct vk_cmd_queue_entry *cmd = vk_zalloc(cmd_buffer->vk.cmd_queue.alloc,
                                               sizeof(*cmd), 8,
                                               
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
    if (!cmd)
       return;
 
    cmd->type = VK_CMD_DRAW_MULTI_INDEXED_EXT;
-   list_addtail(&cmd->cmd_link, &cmd_buffer->queue.cmds);
+   list_addtail(&cmd->cmd_link, &cmd_buffer->vk.cmd_queue.cmds);
 
    cmd->u.draw_multi_indexed_ext.draw_count = drawCount;
 
    if (pIndexInfo) {
       unsigned i = 0;
-      cmd->u.draw_multi_indexed_ext.index_info = 
vk_zalloc(cmd_buffer->queue.alloc,
+      cmd->u.draw_multi_indexed_ext.index_info = 
vk_zalloc(cmd_buffer->vk.cmd_queue.alloc,
                                                            
sizeof(*cmd->u.draw_multi_indexed_ext.index_info) * drawCount,
                                                            8,
                                                            
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
@@ -343,7 +336,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_CmdDrawMultiIndexedEXT(
    cmd->u.draw_multi_indexed_ext.stride = stride;
 
    if (pVertexOffset) {
-      cmd->u.draw_multi_indexed_ext.vertex_offset = 
vk_zalloc(cmd_buffer->queue.alloc, 
sizeof(*cmd->u.draw_multi_indexed_ext.vertex_offset), 8, 
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
+      cmd->u.draw_multi_indexed_ext.vertex_offset = 
vk_zalloc(cmd_buffer->vk.cmd_queue.alloc, 
sizeof(*cmd->u.draw_multi_indexed_ext.vertex_offset), 8, 
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
       memcpy(cmd->u.draw_multi_indexed_ext.vertex_offset, pVertexOffset, 
sizeof(*cmd->u.draw_multi_indexed_ext.vertex_offset));
    }
 }
@@ -359,7 +352,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_CmdPushDescriptorSetKHR(
    LVP_FROM_HANDLE(lvp_cmd_buffer, cmd_buffer, commandBuffer);
    struct vk_cmd_push_descriptor_set_khr *pds;
 
-   struct vk_cmd_queue_entry *cmd = vk_zalloc(cmd_buffer->queue.alloc,
+   struct vk_cmd_queue_entry *cmd = vk_zalloc(cmd_buffer->vk.cmd_queue.alloc,
                                               sizeof(*cmd), 8,
                                               
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
    if (!cmd)
@@ -368,7 +361,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_CmdPushDescriptorSetKHR(
    pds = &cmd->u.push_descriptor_set_khr;
 
    cmd->type = VK_CMD_PUSH_DESCRIPTOR_SET_KHR;
-   list_addtail(&cmd->cmd_link, &cmd_buffer->queue.cmds);
+   list_addtail(&cmd->cmd_link, &cmd_buffer->vk.cmd_queue.cmds);
 
    pds->pipeline_bind_point = pipelineBindPoint;
    pds->layout = layout;
@@ -376,7 +369,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_CmdPushDescriptorSetKHR(
    pds->descriptor_write_count = descriptorWriteCount;
 
    if (pDescriptorWrites) {
-      pds->descriptor_writes = vk_zalloc(cmd_buffer->queue.alloc,
+      pds->descriptor_writes = vk_zalloc(cmd_buffer->vk.cmd_queue.alloc,
                                          sizeof(*pds->descriptor_writes) * 
descriptorWriteCount,
                                          8,
                                          VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
@@ -391,7 +384,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_CmdPushDescriptorSetKHR(
          case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
          case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
          case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
-            pds->descriptor_writes[i].pImageInfo = 
vk_zalloc(cmd_buffer->queue.alloc,
+            pds->descriptor_writes[i].pImageInfo = 
vk_zalloc(cmd_buffer->vk.cmd_queue.alloc,
                                          sizeof(VkDescriptorImageInfo) * 
pds->descriptor_writes[i].descriptorCount,
                                          8,
                                          VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
@@ -401,7 +394,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_CmdPushDescriptorSetKHR(
             break;
          case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
          case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
-            pds->descriptor_writes[i].pTexelBufferView = 
vk_zalloc(cmd_buffer->queue.alloc,
+            pds->descriptor_writes[i].pTexelBufferView = 
vk_zalloc(cmd_buffer->vk.cmd_queue.alloc,
                                          sizeof(VkBufferView) * 
pds->descriptor_writes[i].descriptorCount,
                                          8,
                                          VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
@@ -414,7 +407,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_CmdPushDescriptorSetKHR(
          case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
          case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:
          default:
-            pds->descriptor_writes[i].pBufferInfo = 
vk_zalloc(cmd_buffer->queue.alloc,
+            pds->descriptor_writes[i].pBufferInfo = 
vk_zalloc(cmd_buffer->vk.cmd_queue.alloc,
                                          sizeof(VkDescriptorBufferInfo) * 
pds->descriptor_writes[i].descriptorCount,
                                          8,
                                          VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
@@ -437,7 +430,7 @@ VKAPI_ATTR void VKAPI_CALL 
lvp_CmdPushDescriptorSetWithTemplateKHR(
    LVP_FROM_HANDLE(lvp_cmd_buffer, cmd_buffer, commandBuffer);
    LVP_FROM_HANDLE(lvp_descriptor_update_template, templ, 
descriptorUpdateTemplate);
    size_t info_size = 0;
-   struct vk_cmd_queue_entry *cmd = vk_zalloc(cmd_buffer->queue.alloc,
+   struct vk_cmd_queue_entry *cmd = vk_zalloc(cmd_buffer->vk.cmd_queue.alloc,
                                               sizeof(*cmd), 8,
                                               
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
    if (!cmd)
@@ -445,7 +438,7 @@ VKAPI_ATTR void VKAPI_CALL 
lvp_CmdPushDescriptorSetWithTemplateKHR(
 
    cmd->type = VK_CMD_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_KHR;
 
-   list_addtail(&cmd->cmd_link, &cmd_buffer->queue.cmds);
+   list_addtail(&cmd->cmd_link, &cmd_buffer->vk.cmd_queue.cmds);
 
    cmd->u.push_descriptor_set_with_template_khr.descriptor_update_template = 
descriptorUpdateTemplate;
    cmd->u.push_descriptor_set_with_template_khr.layout = layout;
@@ -476,7 +469,7 @@ VKAPI_ATTR void VKAPI_CALL 
lvp_CmdPushDescriptorSetWithTemplateKHR(
       }
    }
 
-   cmd->u.push_descriptor_set_with_template_khr.data = 
vk_zalloc(cmd_buffer->queue.alloc, info_size, 8, 
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
+   cmd->u.push_descriptor_set_with_template_khr.data = 
vk_zalloc(cmd_buffer->vk.cmd_queue.alloc, info_size, 8, 
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
 
    uint64_t offset = 0;
    for (unsigned i = 0; i < templ->entry_count; i++) {
@@ -522,17 +515,17 @@ VKAPI_ATTR void VKAPI_CALL lvp_CmdBindDescriptorSets(
 {
    LVP_FROM_HANDLE(lvp_cmd_buffer, cmd_buffer, commandBuffer);
    LVP_FROM_HANDLE(lvp_pipeline_layout, layout, _layout);
-   struct vk_cmd_queue_entry *cmd = vk_zalloc(cmd_buffer->queue.alloc,
+   struct vk_cmd_queue_entry *cmd = vk_zalloc(cmd_buffer->vk.cmd_queue.alloc,
                                               sizeof(*cmd), 8,
                                               
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
    if (!cmd)
       return;
 
    cmd->type = VK_CMD_BIND_DESCRIPTOR_SETS;
-   list_addtail(&cmd->cmd_link, &cmd_buffer->queue.cmds);
+   list_addtail(&cmd->cmd_link, &cmd_buffer->vk.cmd_queue.cmds);
 
    /* _layout could have been destroyed by when this command executes */
-   struct lvp_descriptor_set_layout **set_layout = 
vk_zalloc(cmd_buffer->queue.alloc, sizeof(*set_layout) * layout->num_sets, 8, 
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
+   struct lvp_descriptor_set_layout **set_layout = 
vk_zalloc(cmd_buffer->vk.cmd_queue.alloc, sizeof(*set_layout) * 
layout->num_sets, 8, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
    cmd->driver_data = set_layout;
    for (unsigned i = 0; i < layout->num_sets; i++)
       set_layout[i] = layout->set[i].layout;
@@ -541,12 +534,12 @@ VKAPI_ATTR void VKAPI_CALL lvp_CmdBindDescriptorSets(
    cmd->u.bind_descriptor_sets.first_set = firstSet;
    cmd->u.bind_descriptor_sets.descriptor_set_count = descriptorSetCount;
    if (pDescriptorSets) {
-      cmd->u.bind_descriptor_sets.descriptor_sets = 
vk_zalloc(cmd_buffer->queue.alloc, 
sizeof(*cmd->u.bind_descriptor_sets.descriptor_sets) * descriptorSetCount, 8, 
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
+      cmd->u.bind_descriptor_sets.descriptor_sets = 
vk_zalloc(cmd_buffer->vk.cmd_queue.alloc, 
sizeof(*cmd->u.bind_descriptor_sets.descriptor_sets) * descriptorSetCount, 8, 
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
       memcpy(( VkDescriptorSet* )cmd->u.bind_descriptor_sets.descriptor_sets, 
pDescriptorSets, sizeof(*cmd->u.bind_descriptor_sets.descriptor_sets) * 
descriptorSetCount);
    }
    cmd->u.bind_descriptor_sets.dynamic_offset_count = dynamicOffsetCount;
    if (pDynamicOffsets) {
-      cmd->u.bind_descriptor_sets.dynamic_offsets = 
vk_zalloc(cmd_buffer->queue.alloc, 
sizeof(*cmd->u.bind_descriptor_sets.dynamic_offsets) * dynamicOffsetCount, 8, 
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
+      cmd->u.bind_descriptor_sets.dynamic_offsets = 
vk_zalloc(cmd_buffer->vk.cmd_queue.alloc, 
sizeof(*cmd->u.bind_descriptor_sets.dynamic_offsets) * dynamicOffsetCount, 8, 
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
       memcpy(( uint32_t* )cmd->u.bind_descriptor_sets.dynamic_offsets, 
pDynamicOffsets, sizeof(*cmd->u.bind_descriptor_sets.dynamic_offsets) * 
dynamicOffsetCount);
    }
 }
@@ -557,7 +550,7 @@ VKAPI_ATTR void VKAPI_CALL 
lvp_CmdBeginRendering(VkCommandBuffer
 )
 {
    LVP_FROM_HANDLE(lvp_cmd_buffer, cmd_buffer, commandBuffer);
-   struct vk_cmd_queue *queue = &cmd_buffer->queue;
+   struct vk_cmd_queue *queue = &cmd_buffer->vk.cmd_queue;
    struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc,
                                               sizeof(*cmd), 8,
                                               
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
diff --git a/src/gallium/frontends/lavapipe/lvp_device.c 
b/src/gallium/frontends/lavapipe/lvp_device.c
index b39afdca14f..e32236df5e0 100644
--- a/src/gallium/frontends/lavapipe/lvp_device.c
+++ b/src/gallium/frontends/lavapipe/lvp_device.c
@@ -25,6 +25,7 @@
 
 #include "pipe-loader/pipe_loader.h"
 #include "git_sha1.h"
+#include "vk_cmd_enqueue_entrypoints.h"
 #include "vk_util.h"
 #include "pipe/p_config.h"
 #include "pipe/p_defines.h"
@@ -1472,6 +1473,7 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateDevice(
    struct vk_device_dispatch_table dispatch_table;
    vk_device_dispatch_table_from_entrypoints(&dispatch_table,
       &lvp_device_entrypoints, true);
+   lvp_add_enqueue_cmd_entrypoints(&dispatch_table);
    vk_device_dispatch_table_from_entrypoints(&dispatch_table,
       &wsi_device_entrypoints, false);
    VkResult result = vk_device_init(&device->vk,
diff --git a/src/gallium/frontends/lavapipe/lvp_execute.c 
b/src/gallium/frontends/lavapipe/lvp_execute.c
index e7d0dc79715..0c183e861f9 100644
--- a/src/gallium/frontends/lavapipe/lvp_execute.c
+++ b/src/gallium/frontends/lavapipe/lvp_execute.c
@@ -43,6 +43,7 @@
 #include "util/format/u_format_zs.h"
 #include "util/ptralloc.h"
 
+#include "vk_cmd_enqueue_entrypoints.h"
 #include "vk_util.h"
 
 #define VK_PROTOTYPES
@@ -3850,6 +3851,106 @@ static void handle_set_color_write_enable(struct 
vk_cmd_queue_entry *cmd,
    state->color_write_disables = disable_mask;
 }
 
+void lvp_add_enqueue_cmd_entrypoints(struct vk_device_dispatch_table *disp)
+{
+   struct vk_device_dispatch_table cmd_enqueue_dispatch;
+   vk_device_dispatch_table_from_entrypoints(&cmd_enqueue_dispatch,
+      &vk_cmd_enqueue_device_entrypoints, true);
+
+#define ENQUEUE_CMD(CmdName) \
+   assert(cmd_enqueue_dispatch.CmdName != NULL); \
+   disp->CmdName = cmd_enqueue_dispatch.CmdName;
+
+   /* This list needs to match what's in lvp_execute_cmd_buffer exactly */
+   ENQUEUE_CMD(CmdBindPipeline)
+   ENQUEUE_CMD(CmdSetViewport)
+   ENQUEUE_CMD(CmdSetViewportWithCount)
+   ENQUEUE_CMD(CmdSetScissor)
+   ENQUEUE_CMD(CmdSetScissorWithCount)
+   ENQUEUE_CMD(CmdSetLineWidth)
+   ENQUEUE_CMD(CmdSetDepthBias)
+   ENQUEUE_CMD(CmdSetBlendConstants)
+   ENQUEUE_CMD(CmdSetDepthBounds)
+   ENQUEUE_CMD(CmdSetStencilCompareMask)
+   ENQUEUE_CMD(CmdSetStencilWriteMask)
+   ENQUEUE_CMD(CmdSetStencilReference)
+//   ENQUEUE_CMD(CmdBindDescriptorSets)
+   ENQUEUE_CMD(CmdBindIndexBuffer)
+   ENQUEUE_CMD(CmdBindVertexBuffers)
+   ENQUEUE_CMD(CmdBindVertexBuffers2)
+   ENQUEUE_CMD(CmdDraw)
+//   ENQUEUE_CMD(CmdDrawMultiEXT)
+   ENQUEUE_CMD(CmdDrawIndexed)
+   ENQUEUE_CMD(CmdDrawIndirect)
+   ENQUEUE_CMD(CmdDrawIndexedIndirect)
+//   ENQUEUE_CMD(CmdDrawMultiIndexedEXT)
+   ENQUEUE_CMD(CmdDispatch)
+   ENQUEUE_CMD(CmdDispatchBase)
+   ENQUEUE_CMD(CmdDispatchIndirect)
+   ENQUEUE_CMD(CmdCopyBuffer2)
+   ENQUEUE_CMD(CmdCopyImage2)
+   ENQUEUE_CMD(CmdBlitImage2)
+   ENQUEUE_CMD(CmdCopyBufferToImage2)
+   ENQUEUE_CMD(CmdCopyImageToBuffer2)
+   ENQUEUE_CMD(CmdUpdateBuffer)
+   ENQUEUE_CMD(CmdFillBuffer)
+   ENQUEUE_CMD(CmdClearColorImage)
+   ENQUEUE_CMD(CmdClearDepthStencilImage)
+   ENQUEUE_CMD(CmdClearAttachments)
+   ENQUEUE_CMD(CmdResolveImage2)
+   ENQUEUE_CMD(CmdSetEvent)
+   ENQUEUE_CMD(CmdResetEvent)
+   ENQUEUE_CMD(CmdWaitEvents)
+   ENQUEUE_CMD(CmdPipelineBarrier)
+   ENQUEUE_CMD(CmdBeginQueryIndexedEXT)
+   ENQUEUE_CMD(CmdEndQueryIndexedEXT)
+   ENQUEUE_CMD(CmdBeginQuery)
+   ENQUEUE_CMD(CmdEndQuery)
+   ENQUEUE_CMD(CmdResetQueryPool)
+   ENQUEUE_CMD(CmdWriteTimestamp)
+   ENQUEUE_CMD(CmdCopyQueryPoolResults)
+   ENQUEUE_CMD(CmdPushConstants)
+   ENQUEUE_CMD(CmdBeginRenderPass)
+   ENQUEUE_CMD(CmdBeginRenderPass2)
+   ENQUEUE_CMD(CmdNextSubpass)
+   ENQUEUE_CMD(CmdNextSubpass2)
+   ENQUEUE_CMD(CmdEndRenderPass)
+   ENQUEUE_CMD(CmdEndRenderPass2)
+   ENQUEUE_CMD(CmdExecuteCommands)
+   ENQUEUE_CMD(CmdDrawIndirectCount)
+   ENQUEUE_CMD(CmdDrawIndexedIndirectCount)
+//   ENQUEUE_CMD(CmdPushDescriptorSetKHR)
+//   ENQUEUE_CMD(CmdPushDescriptorSetWithTemplateKHR)
+   ENQUEUE_CMD(CmdBindTransformFeedbackBuffersEXT)
+   ENQUEUE_CMD(CmdBeginTransformFeedbackEXT)
+   ENQUEUE_CMD(CmdEndTransformFeedbackEXT)
+   ENQUEUE_CMD(CmdDrawIndirectByteCountEXT)
+   ENQUEUE_CMD(CmdBeginConditionalRenderingEXT)
+   ENQUEUE_CMD(CmdEndConditionalRenderingEXT)
+   ENQUEUE_CMD(CmdSetVertexInputEXT)
+   ENQUEUE_CMD(CmdSetCullMode)
+   ENQUEUE_CMD(CmdSetFrontFace)
+   ENQUEUE_CMD(CmdSetPrimitiveTopology)
+   ENQUEUE_CMD(CmdSetDepthTestEnable)
+   ENQUEUE_CMD(CmdSetDepthWriteEnable)
+   ENQUEUE_CMD(CmdSetDepthCompareOp)
+   ENQUEUE_CMD(CmdSetDepthBoundsTestEnable)
+   ENQUEUE_CMD(CmdSetStencilTestEnable)
+   ENQUEUE_CMD(CmdSetStencilOp)
+   ENQUEUE_CMD(CmdSetLineStippleEXT)
+   ENQUEUE_CMD(CmdSetDepthBiasEnable)
+   ENQUEUE_CMD(CmdSetLogicOpEXT)
+   ENQUEUE_CMD(CmdSetPatchControlPointsEXT)
+   ENQUEUE_CMD(CmdSetPrimitiveRestartEnable)
+   ENQUEUE_CMD(CmdSetRasterizerDiscardEnable)
+   ENQUEUE_CMD(CmdSetColorWriteEnableEXT)
+//   ENQUEUE_CMD(CmdBeginRendering)
+   ENQUEUE_CMD(CmdEndRendering)
+   ENQUEUE_CMD(CmdSetDeviceMask)
+
+#undef ENQUEUE_CMD
+}
+
 static void lvp_execute_cmd_buffer(struct lvp_cmd_buffer *cmd_buffer,
                                    struct rendering_state *state)
 {
@@ -3857,7 +3958,7 @@ static void lvp_execute_cmd_buffer(struct lvp_cmd_buffer 
*cmd_buffer,
    bool first = true;
    bool did_flush = false;
 
-   LIST_FOR_EACH_ENTRY(cmd, &cmd_buffer->queue.cmds, cmd_link) {
+   LIST_FOR_EACH_ENTRY(cmd, &cmd_buffer->vk.cmd_queue.cmds, cmd_link) {
       switch (cmd->type) {
       case VK_CMD_BIND_PIPELINE:
          handle_pipeline(cmd, state);
@@ -3989,7 +4090,7 @@ static void lvp_execute_cmd_buffer(struct lvp_cmd_buffer 
*cmd_buffer,
          /* skip flushes since every cmdbuf does a flush
             after iterating its cmds and so this is redundant
           */
-         if (first || did_flush || cmd->cmd_link.next == 
&cmd_buffer->queue.cmds)
+         if (first || did_flush || cmd->cmd_link.next == 
&cmd_buffer->vk.cmd_queue.cmds)
             continue;
          handle_pipeline_barrier(cmd, state);
          did_flush = true;
diff --git a/src/gallium/frontends/lavapipe/lvp_private.h 
b/src/gallium/frontends/lavapipe/lvp_private.h
index c6750f8b207..01462ac9036 100644
--- a/src/gallium/frontends/lavapipe/lvp_private.h
+++ b/src/gallium/frontends/lavapipe/lvp_private.h
@@ -580,8 +580,6 @@ struct lvp_cmd_buffer {
    struct lvp_cmd_pool *                        pool;
    struct list_head                             pool_link;
 
-   struct vk_cmd_queue                          queue;
-
    uint8_t push_constants[MAX_PUSH_CONSTANTS_SIZE];
 };
 
@@ -656,6 +654,8 @@ struct lvp_cmd_push_descriptor_set {
    union lvp_descriptor_info *infos;
 };
 
+void lvp_add_enqueue_cmd_entrypoints(struct vk_device_dispatch_table *disp);
+
 VkResult lvp_execute_cmds(struct lvp_device *device,
                           struct lvp_queue *queue,
                           struct lvp_cmd_buffer *cmd_buffer);
diff --git a/src/gallium/frontends/lavapipe/meson.build 
b/src/gallium/frontends/lavapipe/meson.build
index d1c329efa66..9e604fabb8f 100644
--- a/src/gallium/frontends/lavapipe/meson.build
+++ b/src/gallium/frontends/lavapipe/meson.build
@@ -10,17 +10,6 @@ lvp_entrypoints = custom_target(
   depend_files : vk_entrypoints_gen_depend_files,
 )
 
-lvp_commands = custom_target(
-  'lvp_commands',
-  input : [vk_commands_gen, vk_api_xml],
-  output : ['lvp_commands.c'],
-  command : [
-    prog_python, '@INPUT0@', '--xml', '@INPUT1@',
-    '--out-c', '@OUTPUT0@', '--prefix', 'lvp',
-  ],
-  depend_files : vk_commands_gen_depend_files,
-)
-
 liblvp_files = files(
     'lvp_device.c',
     'lvp_cmd_buffer.c',
@@ -51,7 +40,7 @@ endif
 
 liblavapipe_st = static_library(
   'lavapipe_st',
-  [liblvp_files, lvp_entrypoints, lvp_commands, sha1_h],
+  [liblvp_files, lvp_entrypoints, sha1_h],
   c_args : [ c_msvc_compat_args, lvp_flags ],
   gnu_symbol_visibility : 'hidden',
   include_directories : [ inc_include, inc_src, inc_util, inc_gallium, 
inc_compiler, inc_gallium_aux ],
diff --git a/src/vulkan/util/meson.build b/src/vulkan/util/meson.build
index ed8e5dd6cc5..9d36965a1d0 100644
--- a/src/vulkan/util/meson.build
+++ b/src/vulkan/util/meson.build
@@ -46,16 +46,11 @@ vk_cmd_queue_gen_depend_files = [
   files('vk_entrypoints.py'),
   vk_entrypoints_depend_files,
 ]
-vk_commands_gen_depend_files = [
-  files('vk_entrypoints.py'),
-  vk_entrypoints_depend_files,
-]
 
 vk_entrypoints_gen = files('vk_entrypoints_gen.py')
 vk_extensions_gen = files('vk_extensions_gen.py')
 vk_icd_gen = files('vk_icd_gen.py')
 vk_cmd_queue_gen = files('vk_cmd_queue_gen.py')
-vk_commands_gen = files('vk_commands_gen.py')
 vk_dispatch_trampolines_gen = files('vk_dispatch_trampolines_gen.py')
 
 files_vulkan_util = files(
diff --git a/src/vulkan/util/vk_commands_gen.py 
b/src/vulkan/util/vk_commands_gen.py
deleted file mode 100644
index bc036a9e633..00000000000
--- a/src/vulkan/util/vk_commands_gen.py
+++ /dev/null
@@ -1,136 +0,0 @@
-COPYRIGHT=u"""
-/* Copyright © 2015-2021 Intel Corporation
- * Copyright © 2021 Collabora, Ltd.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-"""
-
-import argparse
-import os
-import re
-import xml.etree.ElementTree as et
-
-from mako.template import Template
-
-# Mesa-local imports must be declared in meson variable
-# '{file_without_suffix}_depend_files'.
-from vk_entrypoints import get_entrypoints_from_xml, EntrypointParam
-
-MANUAL_COMMANDS = ['CmdPushDescriptorSetKHR',             # This script 
doesn't know how to copy arrays in structs in arrays
-                   'CmdPushDescriptorSetWithTemplateKHR', # pData's size 
cannot be calculated from the xml
-                   'CmdDrawMultiEXT',                     # The size of the 
elements is specified in a stride param
-                   'CmdDrawMultiIndexedEXT',              # The size of the 
elements is specified in a stride param
-                   'CmdBindDescriptorSets',               # The 
VkPipelineLayout object could be released before the command is executed
-                   'CmdCopyImageToBuffer',                # There are wrappers 
that implement these in terms of the newer variants
-                   'CmdCopyImage',
-                   'CmdCopyBuffer',
-                   'CmdCopyBufferToImage',
-                   'CmdBlitImage',
-                   'CmdResolveImage',
-                   'CmdBeginRendering',
-                   'CmdBeginRenderingKHR',
-                   'CmdSetPerformanceMarkerINTEL',
-                   'CmdSetPerformanceStreamMarkerINTEL',
-                   'CmdSetPerformanceOverrideINTEL',
-                  ]
-
-TEMPLATE_C = Template(COPYRIGHT + """
-/* This file generated from ${filename}, don't edit directly. */
-
-#define VK_PROTOTYPES
-#include <vulkan/vulkan.h>
-
-#include "lvp_private.h"
-#include "pipe/p_context.h"
-#include "vk_util.h"
-
-% for c in commands:
-% if c.name in manual_commands:
-<% continue %>
-% endif
-% if c.guard is not None:
-#ifdef ${c.guard}
-% endif
-VKAPI_ATTR void VKAPI_CALL lvp_${c.name}(${c.decl_params()})
-{
-   LVP_FROM_HANDLE(lvp_cmd_buffer, cmd_buffer, commandBuffer);
-
-% if len(c.params) == 1:
-   vk_enqueue_${to_underscore(c.name)}(&cmd_buffer->queue);
-% else:
-   vk_enqueue_${to_underscore(c.name)}(&cmd_buffer->queue,
-                                       ${c.call_params(start=1)});
-% endif
-}
-% if c.guard is not None:
-#endif // ${c.guard}
-% endif
-% endfor
-
-""", output_encoding='utf-8')
-
-def remove_prefix(text, prefix):
-    if text.startswith(prefix):
-        return text[len(prefix):]
-    return text
-
-def to_underscore(name):
-    return remove_prefix(re.sub('([A-Z]+)', r'_\1', name).lower(), '_')
-
-def main():
-    parser = argparse.ArgumentParser()
-    parser.add_argument('--out-c', required=True, help='Output C file.')
-    parser.add_argument('--xml',
-                        help='Vulkan API XML file.',
-                        required=True, action='append', dest='xml_files')
-    parser.add_argument('--prefix',
-                        help='Prefix to use for all dispatch tables.',
-                        action='append', default=[], dest='prefixes')
-    args = parser.parse_args()
-
-    commands = []
-    for e in get_entrypoints_from_xml(args.xml_files):
-        if e.name.startswith('Cmd') and \
-           not e.alias:
-            commands.append(e)
-
-    environment = {
-        'commands': commands,
-        'filename': os.path.basename(__file__),
-        'to_underscore': to_underscore,
-        'manual_commands': MANUAL_COMMANDS,
-    }
-
-    try:
-        with open(args.out_c, 'wb') as f:
-            f.write(TEMPLATE_C.render(**environment))
-    except Exception:
-        # In the event there's an error, this imports some helpers from mako
-        # to print a useful stack trace and prints it, then exits with
-        # status 1, if python is run with debug; otherwise it just raises
-        # the exception
-        import sys
-        from mako import exceptions
-        print(exceptions.text_error_template().render(), file=sys.stderr)
-        sys.exit(1)
-
-if __name__ == '__main__':
-    main()

Reply via email to