radv/meta: add BOs to cmdbuf list earlier for image copy operations

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33526>
This commit is contained in:
Samuel Pitoiset
2025-02-11 12:42:36 +01:00
parent e0070bc68b
commit 6e2da49e92
3 changed files with 29 additions and 28 deletions
-4
View File
@@ -67,11 +67,7 @@ blit2d_bind_src(struct radv_cmd_buffer *cmd_buffer, VkPipelineLayout layout, str
struct radv_meta_blit2d_buffer *src_buf, struct blit2d_src_temps *tmp, enum blit2d_src_type src_type,
VkFormat depth_format, VkImageAspectFlagBits aspects, uint32_t log2_samples)
{
struct radv_device *device = radv_cmd_buffer_device(cmd_buffer);
if (src_type == BLIT2D_SRC_TYPE_BUFFER) {
radv_cs_add_buffer(device->ws, cmd_buffer->cs, src_buf->buffer->bo);
radv_meta_bind_descriptors(
cmd_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, layout, 1,
(VkDescriptorGetInfoEXT[]){{
-10
View File
@@ -714,8 +714,6 @@ radv_meta_image_to_buffer(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_b
create_iview(cmd_buffer, src, &src_view, VK_FORMAT_UNDEFINED, src->aspect_mask);
radv_cs_add_buffer(device->ws, cmd_buffer->cs, dst->buffer->bo);
radv_meta_bind_descriptors(
cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE, layout, 2,
(VkDescriptorGetInfoEXT[]){{
@@ -768,9 +766,6 @@ radv_meta_buffer_to_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, struc
return;
}
radv_cs_add_buffer(device->ws, cmd_buffer->cs, src->buffer->bo);
radv_cs_add_buffer(device->ws, cmd_buffer->cs, dst->image->bindings[0].bo);
radv_meta_bind_descriptors(
cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE, layout, 2,
(VkDescriptorGetInfoEXT[]){
@@ -838,8 +833,6 @@ radv_meta_buffer_to_image_cs(struct radv_cmd_buffer *cmd_buffer, struct radv_met
create_iview(cmd_buffer, dst, &dst_view, VK_FORMAT_UNDEFINED, dst->aspect_mask);
radv_cs_add_buffer(device->ws, cmd_buffer->cs, src->buffer->bo);
radv_meta_bind_descriptors(
cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE, layout, 2,
(VkDescriptorGetInfoEXT[]){{
@@ -900,9 +893,6 @@ radv_meta_image_to_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, struct
assert(dst->format == VK_FORMAT_R32G32B32_UINT || dst->format == VK_FORMAT_R32G32B32_SINT ||
dst->format == VK_FORMAT_R32G32B32_SFLOAT);
radv_cs_add_buffer(device->ws, cmd_buffer->cs, src->image->bindings[0].bo);
radv_cs_add_buffer(device->ws, cmd_buffer->cs, dst->image->bindings[0].bo);
radv_meta_bind_descriptors(
cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE, layout, 2,
(VkDescriptorGetInfoEXT[]){
+29 -14
View File
@@ -81,10 +81,6 @@ transfer_copy_buffer_image(struct radv_cmd_buffer *cmd_buffer, struct radv_buffe
const struct radv_device *device = radv_cmd_buffer_device(cmd_buffer);
struct radeon_cmdbuf *cs = cmd_buffer->cs;
const VkImageAspectFlags aspect_mask = region->imageSubresource.aspectMask;
const unsigned binding_idx = image->disjoint ? radv_plane_from_aspect(aspect_mask) : 0;
radv_cs_add_buffer(device->ws, cs, image->bindings[binding_idx].bo);
radv_cs_add_buffer(device->ws, cs, buffer->bo);
struct radv_sdma_surf buf = radv_sdma_get_buf_surf(buffer, image, region, aspect_mask);
const struct radv_sdma_surf img =
@@ -227,9 +223,16 @@ radv_CmdCopyBufferToImage2(VkCommandBuffer commandBuffer, const VkCopyBufferToIm
struct radv_device *device = radv_cmd_buffer_device(cmd_buffer);
const struct radv_physical_device *pdev = radv_device_physical(device);
radv_cs_add_buffer(device->ws, cmd_buffer->cs, src_buffer->bo);
for (unsigned r = 0; r < pCopyBufferToImageInfo->regionCount; r++) {
copy_buffer_to_image(cmd_buffer, src_buffer, dst_image, pCopyBufferToImageInfo->dstImageLayout,
&pCopyBufferToImageInfo->pRegions[r]);
const VkBufferImageCopy2 *region = &pCopyBufferToImageInfo->pRegions[r];
const VkImageAspectFlags aspect_mask = region->imageSubresource.aspectMask;
const unsigned bind_idx = dst_image->disjoint ? radv_plane_from_aspect(aspect_mask) : 0;
radv_cs_add_buffer(device->ws, cmd_buffer->cs, dst_image->bindings[bind_idx].bo);
copy_buffer_to_image(cmd_buffer, src_buffer, dst_image, pCopyBufferToImageInfo->dstImageLayout, region);
}
if (radv_is_format_emulated(pdev, dst_image->vk.format)) {
@@ -365,10 +368,18 @@ radv_CmdCopyImageToBuffer2(VkCommandBuffer commandBuffer, const VkCopyImageToBuf
VK_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
VK_FROM_HANDLE(radv_image, src_image, pCopyImageToBufferInfo->srcImage);
VK_FROM_HANDLE(radv_buffer, dst_buffer, pCopyImageToBufferInfo->dstBuffer);
struct radv_device *device = radv_cmd_buffer_device(cmd_buffer);
radv_cs_add_buffer(device->ws, cmd_buffer->cs, dst_buffer->bo);
for (unsigned r = 0; r < pCopyImageToBufferInfo->regionCount; r++) {
copy_image_to_buffer(cmd_buffer, dst_buffer, src_image, pCopyImageToBufferInfo->srcImageLayout,
&pCopyImageToBufferInfo->pRegions[r]);
const VkBufferImageCopy2 *region = &pCopyImageToBufferInfo->pRegions[r];
const VkImageAspectFlags aspect_mask = region->imageSubresource.aspectMask;
const unsigned bind_idx = src_image->disjoint ? radv_plane_from_aspect(aspect_mask) : 0;
radv_cs_add_buffer(device->ws, cmd_buffer->cs, src_image->bindings[bind_idx].bo);
copy_image_to_buffer(cmd_buffer, dst_buffer, src_image, pCopyImageToBufferInfo->srcImageLayout, region);
}
}
@@ -383,11 +394,6 @@ transfer_copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_i
u_foreach_bit (b, region->srcSubresource.aspectMask) {
const VkImageAspectFlags src_aspect_mask = BITFIELD_BIT(b);
const VkImageAspectFlags dst_aspect_mask = BITFIELD_BIT(u_bit_scan(&dst_aspect_mask_remaining));
const unsigned src_binding_idx = src_image->disjoint ? radv_plane_from_aspect(src_aspect_mask) : 0;
const unsigned dst_binding_idx = dst_image->disjoint ? radv_plane_from_aspect(dst_aspect_mask) : 0;
radv_cs_add_buffer(device->ws, cs, src_image->bindings[src_binding_idx].bo);
radv_cs_add_buffer(device->ws, cs, dst_image->bindings[dst_binding_idx].bo);
const struct radv_sdma_surf src =
radv_sdma_get_surf(device, src_image, region->srcSubresource, region->srcOffset, src_aspect_mask);
@@ -608,8 +614,17 @@ radv_CmdCopyImage2(VkCommandBuffer commandBuffer, const VkCopyImageInfo2 *pCopyI
const struct radv_physical_device *pdev = radv_device_physical(device);
for (unsigned r = 0; r < pCopyImageInfo->regionCount; r++) {
const VkImageCopy2 *region = &pCopyImageInfo->pRegions[r];
const VkImageAspectFlags src_aspect_mask = region->srcSubresource.aspectMask;
const unsigned src_bind_idx = src_image->disjoint ? radv_plane_from_aspect(src_aspect_mask) : 0;
const VkImageAspectFlags dst_aspect_mask = region->dstSubresource.aspectMask;
const unsigned dst_bind_idx = dst_image->disjoint ? radv_plane_from_aspect(dst_aspect_mask) : 0;
radv_cs_add_buffer(device->ws, cmd_buffer->cs, src_image->bindings[src_bind_idx].bo);
radv_cs_add_buffer(device->ws, cmd_buffer->cs, dst_image->bindings[dst_bind_idx].bo);
copy_image(cmd_buffer, src_image, pCopyImageInfo->srcImageLayout, dst_image, pCopyImageInfo->dstImageLayout,
&pCopyImageInfo->pRegions[r]);
region);
}
if (radv_is_format_emulated(pdev, dst_image->vk.format)) {