diff options
-rw-r--r-- | src/broadcom/vulkan/v3dv_meta_copy.c | 75 | ||||
-rw-r--r-- | src/broadcom/vulkan/v3dv_private.h | 16 | ||||
-rw-r--r-- | src/broadcom/vulkan/v3dv_queue.c | 56 |
3 files changed, 0 insertions, 147 deletions
diff --git a/src/broadcom/vulkan/v3dv_meta_copy.c b/src/broadcom/vulkan/v3dv_meta_copy.c index c0ec888b8c7..b454486cd2e 100644 --- a/src/broadcom/vulkan/v3dv_meta_copy.c +++ b/src/broadcom/vulkan/v3dv_meta_copy.c @@ -3200,76 +3200,6 @@ copy_buffer_to_image_shader(struct v3dv_cmd_buffer *cmd_buffer, } } -/** - * Returns true if the implementation supports the requested operation (even if - * it failed to process it, for example, due to an out-of-memory error). - */ -static bool -copy_buffer_to_image_cpu(struct v3dv_cmd_buffer *cmd_buffer, - struct v3dv_image *image, - struct v3dv_buffer *buffer, - const VkBufferImageCopy2 *region) -{ - /* FIXME */ - if (vk_format_is_depth_or_stencil(image->vk.format)) - return false; - - if (vk_format_is_compressed(image->vk.format)) - return false; - - if (image->vk.tiling == VK_IMAGE_TILING_LINEAR) - return false; - - uint32_t buffer_width, buffer_height; - if (region->bufferRowLength == 0) - buffer_width = region->imageExtent.width; - else - buffer_width = region->bufferRowLength; - - if (region->bufferImageHeight == 0) - buffer_height = region->imageExtent.height; - else - buffer_height = region->bufferImageHeight; - - uint8_t plane = v3dv_plane_from_aspect(region->imageSubresource.aspectMask); - assert(plane < image->plane_count); - - uint32_t buffer_stride = buffer_width * image->planes[plane].cpp; - uint32_t buffer_layer_stride = buffer_stride * buffer_height; - - uint32_t num_layers; - if (image->vk.image_type != VK_IMAGE_TYPE_3D) - num_layers = region->imageSubresource.layerCount; - else - num_layers = region->imageExtent.depth; - assert(num_layers > 0); - - struct v3dv_job *job = - v3dv_cmd_buffer_create_cpu_job(cmd_buffer->device, - V3DV_JOB_TYPE_CPU_COPY_BUFFER_TO_IMAGE, - cmd_buffer, -1); - if (!job) - return true; - - job->cpu.copy_buffer_to_image.image = image; - job->cpu.copy_buffer_to_image.buffer = buffer; - job->cpu.copy_buffer_to_image.buffer_stride = buffer_stride; - job->cpu.copy_buffer_to_image.buffer_layer_stride = buffer_layer_stride; - job->cpu.copy_buffer_to_image.buffer_offset = region->bufferOffset; - job->cpu.copy_buffer_to_image.image_extent = region->imageExtent; - job->cpu.copy_buffer_to_image.image_offset = region->imageOffset; - job->cpu.copy_buffer_to_image.mip_level = - region->imageSubresource.mipLevel; - job->cpu.copy_buffer_to_image.base_layer = - region->imageSubresource.baseArrayLayer; - job->cpu.copy_buffer_to_image.layer_count = num_layers; - job->cpu.copy_buffer_to_image.plane = plane; - - list_addtail(&job->list_link, &cmd_buffer->jobs); - - return true; -} - VKAPI_ATTR void VKAPI_CALL v3dv_CmdCopyBufferToImage2KHR(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2 *info) @@ -3330,11 +3260,6 @@ v3dv_CmdCopyBufferToImage2KHR(VkCommandBuffer commandBuffer, * slow it might not be worth it and we should instead put more effort * in handling more cases with the other paths. */ - if (copy_buffer_to_image_cpu(cmd_buffer, image, buffer, &info->pRegions[r])) { - batch_size = 1; - goto handled; - } - if (copy_buffer_to_image_shader(cmd_buffer, image, buffer, batch_size, &info->pRegions[r], false)) { goto handled; diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h index c6707211529..c9e3513e6bb 100644 --- a/src/broadcom/vulkan/v3dv_private.h +++ b/src/broadcom/vulkan/v3dv_private.h @@ -1125,7 +1125,6 @@ enum v3dv_job_type { V3DV_JOB_TYPE_CPU_RESET_QUERIES, V3DV_JOB_TYPE_CPU_END_QUERY, V3DV_JOB_TYPE_CPU_COPY_QUERY_RESULTS, - V3DV_JOB_TYPE_CPU_COPY_BUFFER_TO_IMAGE, V3DV_JOB_TYPE_CPU_CSD_INDIRECT, V3DV_JOB_TYPE_CPU_TIMESTAMP_QUERY, }; @@ -1164,20 +1163,6 @@ struct v3dv_submit_sync_info { struct vk_sync_signal *signals; }; -struct v3dv_copy_buffer_to_image_cpu_job_info { - struct v3dv_image *image; - struct v3dv_buffer *buffer; - uint32_t buffer_offset; - uint32_t buffer_stride; - uint32_t buffer_layer_stride; - VkOffset3D image_offset; - VkExtent3D image_extent; - uint32_t mip_level; - uint32_t base_layer; - uint32_t layer_count; - uint8_t plane; -}; - struct v3dv_csd_indirect_cpu_job_info { struct v3dv_buffer *buffer; uint32_t offset; @@ -1331,7 +1316,6 @@ struct v3dv_job { struct v3dv_reset_query_cpu_job_info query_reset; struct v3dv_end_query_info query_end; struct v3dv_copy_query_results_cpu_job_info query_copy_results; - struct v3dv_copy_buffer_to_image_cpu_job_info copy_buffer_to_image; struct v3dv_csd_indirect_cpu_job_info csd_indirect; struct v3dv_timestamp_query_cpu_job_info query_timestamp; } cpu; diff --git a/src/broadcom/vulkan/v3dv_queue.c b/src/broadcom/vulkan/v3dv_queue.c index b4aae195180..bb7880a33c1 100644 --- a/src/broadcom/vulkan/v3dv_queue.c +++ b/src/broadcom/vulkan/v3dv_queue.c @@ -296,60 +296,6 @@ handle_copy_query_results_cpu_job(struct v3dv_job *job) } static VkResult -handle_copy_buffer_to_image_cpu_job(struct v3dv_queue *queue, - struct v3dv_job *job, - struct v3dv_submit_sync_info *sync_info) -{ - assert(job->type == V3DV_JOB_TYPE_CPU_COPY_BUFFER_TO_IMAGE); - struct v3dv_copy_buffer_to_image_cpu_job_info *info = - &job->cpu.copy_buffer_to_image; - - /* Wait for all GPU work to finish first, since we may be accessing - * the BOs involved in the operation. - */ - VkResult result = queue_wait_idle(queue, sync_info); - if (result != VK_SUCCESS) - return result; - - /* Map BOs */ - struct v3dv_bo *dst_bo = info->image->planes[info->plane].mem->bo; - assert(!dst_bo->map || dst_bo->map_size == dst_bo->size); - if (!dst_bo->map && !v3dv_bo_map(job->device, dst_bo, dst_bo->size)) - return vk_error(job->device, VK_ERROR_OUT_OF_HOST_MEMORY); - void *dst_ptr = dst_bo->map; - - struct v3dv_bo *src_bo = info->buffer->mem->bo; - assert(!src_bo->map || src_bo->map_size == src_bo->size); - if (!src_bo->map && !v3dv_bo_map(job->device, src_bo, src_bo->size)) - return vk_error(job->device, VK_ERROR_OUT_OF_HOST_MEMORY); - void *src_ptr = src_bo->map; - - const struct v3d_resource_slice *slice = - &info->image->planes[info->plane].slices[info->mip_level]; - - const struct pipe_box box = { - info->image_offset.x, info->image_offset.y, info->base_layer, - info->image_extent.width, info->image_extent.height, info->layer_count, - }; - - /* Copy each layer */ - for (uint32_t i = 0; i < info->layer_count; i++) { - const uint32_t dst_offset = - v3dv_layer_offset(info->image, info->mip_level, - info->base_layer + i, info->plane); - const uint32_t src_offset = - info->buffer->mem_offset + info->buffer_offset + - info->buffer_layer_stride * i; - v3d_store_tiled_image( - dst_ptr + dst_offset, slice->stride, - src_ptr + src_offset, info->buffer_stride, - slice->tiling, info->image->planes[info->plane].cpp, slice->padded_height, &box); - } - - return VK_SUCCESS; -} - -static VkResult handle_timestamp_query_cpu_job(struct v3dv_queue *queue, struct v3dv_job *job, struct v3dv_submit_sync_info *sync_info) { @@ -1014,8 +960,6 @@ queue_handle_job(struct v3dv_queue *queue, return handle_end_query_cpu_job(job, counter_pass_idx); case V3DV_JOB_TYPE_CPU_COPY_QUERY_RESULTS: return handle_copy_query_results_cpu_job(job); - case V3DV_JOB_TYPE_CPU_COPY_BUFFER_TO_IMAGE: - return handle_copy_buffer_to_image_cpu_job(queue, job, sync_info); case V3DV_JOB_TYPE_CPU_CSD_INDIRECT: return handle_csd_indirect_cpu_job(queue, job, sync_info); case V3DV_JOB_TYPE_CPU_TIMESTAMP_QUERY: |