diff --git a/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c b/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c index 705a08300f0..4bb2c4c25f3 100644 --- a/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c +++ b/src/gallium/frontends/lavapipe/lvp_cmd_buffer.c @@ -166,138 +166,3 @@ VKAPI_ATTR void VKAPI_CALL lvp_CmdPushDescriptorSetWithTemplate2KHR( } } } -static void -lvp_free_cmd_push_descriptor_set2_khr(struct vk_cmd_queue *queue, - struct vk_cmd_queue_entry *cmd) -{ - ralloc_free(cmd->driver_data); -} - -VKAPI_ATTR void VKAPI_CALL lvp_CmdPushDescriptorSet2KHR( - VkCommandBuffer commandBuffer, - const VkPushDescriptorSetInfoKHR* pPushDescriptorSetInfo) -{ - LVP_FROM_HANDLE(lvp_cmd_buffer, cmd_buffer, commandBuffer); - struct vk_cmd_queue_entry *cmd = vk_zalloc(cmd_buffer->vk.cmd_queue.alloc, vk_cmd_queue_type_sizes[VK_CMD_PUSH_DESCRIPTOR_SET2_KHR], 8, - VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); - - cmd->type = VK_CMD_PUSH_DESCRIPTOR_SET2_KHR; - cmd->driver_free_cb = lvp_free_cmd_push_descriptor_set2_khr; - - void *ctx = cmd->driver_data = ralloc_context(NULL); - if (pPushDescriptorSetInfo) { - cmd->u.push_descriptor_set2_khr.push_descriptor_set_info = vk_zalloc(cmd_buffer->vk.cmd_queue.alloc, sizeof(VkPushDescriptorSetInfoKHR), 8, - VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); - - memcpy((void*)cmd->u.push_descriptor_set2_khr.push_descriptor_set_info, pPushDescriptorSetInfo, sizeof(VkPushDescriptorSetInfoKHR)); - VkPushDescriptorSetInfoKHR *tmp_dst1 = (void *) cmd->u.push_descriptor_set2_khr.push_descriptor_set_info; (void) tmp_dst1; - VkPushDescriptorSetInfoKHR *tmp_src1 = (void *) pPushDescriptorSetInfo; (void) tmp_src1; - - const VkBaseInStructure *pnext = tmp_dst1->pNext; - if (pnext) { - switch ((int32_t)pnext->sType) { - case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO: - if (pnext) { - tmp_dst1->pNext = rzalloc(ctx, VkPipelineLayoutCreateInfo); - - memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkPipelineLayoutCreateInfo)); - VkPipelineLayoutCreateInfo *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2; - VkPipelineLayoutCreateInfo *tmp_src2 = (void *) pnext; (void) tmp_src2; - if (tmp_src2->pSetLayouts) { - tmp_dst2->pSetLayouts = rzalloc_array_size(ctx, sizeof(*tmp_dst2->pSetLayouts), tmp_dst2->setLayoutCount); - - memcpy((void*)tmp_dst2->pSetLayouts, tmp_src2->pSetLayouts, sizeof(*tmp_dst2->pSetLayouts) * tmp_dst2->setLayoutCount); - } - if (tmp_src2->pPushConstantRanges) { - tmp_dst2->pPushConstantRanges = rzalloc_array_size(ctx, sizeof(*tmp_dst2->pPushConstantRanges), tmp_dst2->pushConstantRangeCount); - - memcpy((void*)tmp_dst2->pPushConstantRanges, tmp_src2->pPushConstantRanges, sizeof(*tmp_dst2->pPushConstantRanges) * tmp_dst2->pushConstantRangeCount); - } - - } else { - tmp_dst1->pNext = NULL; - } - break; - } - } - if (tmp_src1->pDescriptorWrites) { - tmp_dst1->pDescriptorWrites = vk_zalloc(cmd_buffer->vk.cmd_queue.alloc, sizeof(*tmp_dst1->pDescriptorWrites) * tmp_dst1->descriptorWriteCount, 8, - VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); - - memcpy((void*)tmp_dst1->pDescriptorWrites, tmp_src1->pDescriptorWrites, sizeof(*tmp_dst1->pDescriptorWrites) * tmp_dst1->descriptorWriteCount); - for (unsigned i = 0; i < tmp_src1->descriptorWriteCount; i++) { - VkWriteDescriptorSet *dstwrite = (void*)&tmp_dst1->pDescriptorWrites[i]; - const VkWriteDescriptorSet *write = &tmp_src1->pDescriptorWrites[i]; - switch (write->descriptorType) { - case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK: { - const VkWriteDescriptorSetInlineUniformBlock *uniform_data = vk_find_struct_const(write->pNext, WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK); - assert(uniform_data); - VkWriteDescriptorSetInlineUniformBlock *dst = rzalloc(ctx, VkWriteDescriptorSetInlineUniformBlock); - memcpy((void*)dst, uniform_data, sizeof(*uniform_data)); - dst->pData = ralloc_size(ctx, uniform_data->dataSize); - memcpy((void*)dst->pData, uniform_data->pData, uniform_data->dataSize); - dstwrite->pNext = dst; - break; - } - - case VK_DESCRIPTOR_TYPE_SAMPLER: - case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: - case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: - case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: - case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: - dstwrite->pImageInfo = rzalloc_array(ctx, VkDescriptorImageInfo, write->descriptorCount); - { - VkDescriptorImageInfo *arr = (void*)dstwrite->pImageInfo; - typed_memcpy(arr, write->pImageInfo, write->descriptorCount); - } - break; - - case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: - case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: - dstwrite->pTexelBufferView = rzalloc_array(ctx, VkBufferView, write->descriptorCount); - { - VkBufferView *arr = (void*)dstwrite->pTexelBufferView; - typed_memcpy(arr, write->pTexelBufferView, write->descriptorCount); - } - break; - - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: - dstwrite->pBufferInfo = rzalloc_array(ctx, VkDescriptorBufferInfo, write->descriptorCount); - { - VkDescriptorBufferInfo *arr = (void*)dstwrite->pBufferInfo; - typed_memcpy(arr, write->pBufferInfo, write->descriptorCount); - } - break; - - case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: { - const VkWriteDescriptorSetAccelerationStructureKHR *accel_structs = - vk_find_struct_const(write->pNext, WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR); - - uint32_t accel_structs_size = sizeof(VkAccelerationStructureKHR) * accel_structs->accelerationStructureCount; - VkWriteDescriptorSetAccelerationStructureKHR *write_accel_structs = - rzalloc_size(ctx, sizeof(VkWriteDescriptorSetAccelerationStructureKHR) + accel_structs_size); - - write_accel_structs->sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR; - write_accel_structs->accelerationStructureCount = accel_structs->accelerationStructureCount; - write_accel_structs->pAccelerationStructures = (void *)&write_accel_structs[1]; - memcpy((void *)write_accel_structs->pAccelerationStructures, accel_structs->pAccelerationStructures, accel_structs_size); - - dstwrite->pNext = write_accel_structs; - break; - } - - default: - break; - } - } - } - - } else { - cmd->u.push_descriptor_set2_khr.push_descriptor_set_info = NULL; - } - - list_addtail(&cmd->cmd_link, &cmd_buffer->vk.cmd_queue.cmds); -} diff --git a/src/gallium/frontends/lavapipe/lvp_execute.c b/src/gallium/frontends/lavapipe/lvp_execute.c index 7fd5db3f7c0..10551951735 100644 --- a/src/gallium/frontends/lavapipe/lvp_execute.c +++ b/src/gallium/frontends/lavapipe/lvp_execute.c @@ -4739,6 +4739,7 @@ void lvp_add_enqueue_cmd_entrypoints(struct vk_device_dispatch_table *disp) ENQUEUE_CMD(CmdWaitEvents2) ENQUEUE_CMD(CmdWriteTimestamp2) ENQUEUE_CMD(CmdPushConstants2KHR) + ENQUEUE_CMD(CmdPushDescriptorSet2KHR) ENQUEUE_CMD(CmdBindDescriptorBuffersEXT) ENQUEUE_CMD(CmdSetDescriptorBufferOffsets2EXT) ENQUEUE_CMD(CmdBindDescriptorBufferEmbeddedSamplers2EXT)