lavapipe: Use the common vk_enqueue_CmdBindDescriptorSets
authorJason Ekstrand <jason.ekstrand@collabora.com>
Thu, 10 Mar 2022 17:02:08 +0000 (11:02 -0600)
committerMarge Bot <emma+marge@anholt.net>
Thu, 10 Mar 2022 21:08:36 +0000 (21:08 +0000)
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15329>

src/gallium/frontends/lavapipe/lvp_cmd_buffer.c
src/gallium/frontends/lavapipe/lvp_device.c
src/gallium/frontends/lavapipe/lvp_execute.c

index 18f9ad7..4dc5699 100644 (file)
@@ -344,48 +344,6 @@ VKAPI_ATTR void VKAPI_CALL lvp_CmdPushDescriptorSetWithTemplateKHR(
    }
 }
 
-VKAPI_ATTR void VKAPI_CALL lvp_CmdBindDescriptorSets(
-   VkCommandBuffer                             commandBuffer,
-   VkPipelineBindPoint                         pipelineBindPoint,
-   VkPipelineLayout                            _layout,
-   uint32_t                                    firstSet,
-   uint32_t                                    descriptorSetCount,
-   const VkDescriptorSet*                      pDescriptorSets,
-   uint32_t                                    dynamicOffsetCount,
-   const uint32_t*                             pDynamicOffsets)
-{
-   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->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->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->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;
-
-   cmd->u.bind_descriptor_sets.pipeline_bind_point = pipelineBindPoint;
-   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->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->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);
-   }
-}
-
-
 VKAPI_ATTR void VKAPI_CALL lvp_CmdBeginRendering(VkCommandBuffer                             commandBuffer,
  const VkRenderingInfoKHR*                           pRenderingInfo
 )
index e32236d..09b9e69 100644 (file)
@@ -1447,6 +1447,23 @@ lvp_queue_finish(struct lvp_queue *queue)
    vk_queue_finish(&queue->vk);
 }
 
+static void
+ref_pipeline_layout(struct vk_device *vk_device, VkPipelineLayout _layout)
+{
+   LVP_FROM_HANDLE(lvp_pipeline_layout, layout, _layout);
+
+   lvp_pipeline_layout_ref(layout);
+}
+
+static void
+unref_pipeline_layout(struct vk_device *vk_device, VkPipelineLayout _layout)
+{
+   struct lvp_device *device = container_of(vk_device, struct lvp_device, vk);
+   LVP_FROM_HANDLE(lvp_pipeline_layout, layout, _layout);
+
+   lvp_pipeline_layout_unref(device, layout);
+}
+
 VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateDevice(
    VkPhysicalDevice                            physicalDevice,
    const VkDeviceCreateInfo*                   pCreateInfo,
@@ -1488,6 +1505,9 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateDevice(
    device->instance = (struct lvp_instance *)physical_device->vk.instance;
    device->physical_device = physical_device;
 
+   device->vk.ref_pipeline_layout = ref_pipeline_layout;
+   device->vk.unref_pipeline_layout = unref_pipeline_layout;
+
    device->pscreen = physical_device->pscreen;
 
    assert(pCreateInfo->queueCreateInfoCount == 1);
index 9ebad4d..be4abc4 100644 (file)
@@ -1292,18 +1292,18 @@ static void handle_compute_descriptor_sets(struct vk_cmd_queue_entry *cmd,
                                            struct rendering_state *state)
 {
    struct vk_cmd_bind_descriptor_sets *bds = &cmd->u.bind_descriptor_sets;
-   struct lvp_descriptor_set_layout **set_layout = cmd->driver_data;
+   LVP_FROM_HANDLE(lvp_pipeline_layout, layout, bds->layout);
    int i;
 
    for (i = 0; i < bds->first_set; i++) {
-      increment_dyn_info(dyn_info, set_layout[i], false);
+      increment_dyn_info(dyn_info, layout->set[i].layout, false);
    }
    for (i = 0; i < bds->descriptor_set_count; i++) {
       const struct lvp_descriptor_set *set = lvp_descriptor_set_from_handle(bds->descriptor_sets[i]);
 
       if (set->layout->shader_stages & VK_SHADER_STAGE_COMPUTE_BIT)
          handle_set_stage(state, dyn_info, set, MESA_SHADER_COMPUTE, PIPE_SHADER_COMPUTE);
-      increment_dyn_info(dyn_info, set_layout[bds->first_set + i], true);
+      increment_dyn_info(dyn_info, layout->set[bds->first_set + i].layout, true);
    }
 }
 
@@ -1311,7 +1311,7 @@ static void handle_descriptor_sets(struct vk_cmd_queue_entry *cmd,
                                    struct rendering_state *state)
 {
    struct vk_cmd_bind_descriptor_sets *bds = &cmd->u.bind_descriptor_sets;
-   struct lvp_descriptor_set_layout **set_layout = cmd->driver_data;
+   LVP_FROM_HANDLE(lvp_pipeline_layout, layout, bds->layout);
    int i;
    struct dyn_info dyn_info;
 
@@ -1326,7 +1326,7 @@ static void handle_descriptor_sets(struct vk_cmd_queue_entry *cmd,
    }
 
    for (i = 0; i < bds->first_set; i++) {
-      increment_dyn_info(&dyn_info, set_layout[i], false);
+      increment_dyn_info(&dyn_info, layout->set[i].layout, false);
    }
 
    for (i = 0; i < bds->descriptor_set_count; i++) {
@@ -1353,7 +1353,7 @@ static void handle_descriptor_sets(struct vk_cmd_queue_entry *cmd,
       if (set->layout->shader_stages & VK_SHADER_STAGE_FRAGMENT_BIT)
          handle_set_stage(state, &dyn_info, set, MESA_SHADER_FRAGMENT, PIPE_SHADER_FRAGMENT);
 
-      increment_dyn_info(&dyn_info, set_layout[bds->first_set + i], true);
+      increment_dyn_info(&dyn_info, layout->set[bds->first_set + i].layout, true);
    }
 }
 
@@ -3872,7 +3872,7 @@ void lvp_add_enqueue_cmd_entrypoints(struct vk_device_dispatch_table *disp)
    ENQUEUE_CMD(CmdSetStencilCompareMask)
    ENQUEUE_CMD(CmdSetStencilWriteMask)
    ENQUEUE_CMD(CmdSetStencilReference)
-//   ENQUEUE_CMD(CmdBindDescriptorSets)
+   ENQUEUE_CMD(CmdBindDescriptorSets)
    ENQUEUE_CMD(CmdBindIndexBuffer)
    ENQUEUE_CMD(CmdBindVertexBuffers)
    ENQUEUE_CMD(CmdBindVertexBuffers2)