From: Jason Ekstrand Date: Thu, 10 Mar 2022 17:02:08 +0000 (-0600) Subject: lavapipe: Use the common vk_enqueue_CmdBindDescriptorSets X-Git-Tag: upstream/22.3.5~11821 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f7175bf416d9df73b1efd7aea04ce20fbc495b89;p=platform%2Fupstream%2Fmesa.git lavapipe: Use the common vk_enqueue_CmdBindDescriptorSets Reviewed-by: Boris Brezillon Reviewed-by: Mike Blumenkrantz Part-of: --- diff --git a/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c b/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c index 18f9ad7..4dc5699 100644 --- a/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c +++ b/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c @@ -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 ) diff --git a/src/gallium/frontends/lavapipe/lvp_device.c b/src/gallium/frontends/lavapipe/lvp_device.c index e32236d..09b9e69 100644 --- a/src/gallium/frontends/lavapipe/lvp_device.c +++ b/src/gallium/frontends/lavapipe/lvp_device.c @@ -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); diff --git a/src/gallium/frontends/lavapipe/lvp_execute.c b/src/gallium/frontends/lavapipe/lvp_execute.c index 9ebad4d..be4abc4 100644 --- a/src/gallium/frontends/lavapipe/lvp_execute.c +++ b/src/gallium/frontends/lavapipe/lvp_execute.c @@ -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)