diff --git a/src/amd/vulkan/meta/radv_meta.h b/src/amd/vulkan/meta/radv_meta.h index e49bac088a1..28458d451e4 100644 --- a/src/amd/vulkan/meta/radv_meta.h +++ b/src/amd/vulkan/meta/radv_meta.h @@ -177,25 +177,25 @@ struct radv_meta_blit2d_buffer { enum radv_copy_flags copy_flags; }; -struct radv_meta_blit2d_rect { - uint32_t src_x, src_y; - uint32_t dst_x, dst_y; - uint32_t width, height; -}; - void radv_gfx_copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf *src, - struct radv_meta_blit2d_surf *dst, struct radv_meta_blit2d_rect *rect); + struct radv_meta_blit2d_surf *dst, const VkOffset3D *src_offset, const VkOffset3D *dst_offset, + const VkExtent3D *extent); void radv_gfx_copy_memory_to_image(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_buffer *src, - struct radv_meta_blit2d_surf *dst, struct radv_meta_blit2d_rect *rect); + struct radv_meta_blit2d_surf *dst, const VkOffset3D *offset, + const VkExtent3D *extent); void radv_meta_image_to_buffer(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf *src, - struct radv_meta_blit2d_buffer *dst, struct radv_meta_blit2d_rect *rect); + struct radv_meta_blit2d_buffer *dst, const VkOffset3D *offset, const VkExtent3D *extent); void radv_meta_buffer_to_image_cs(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_buffer *src, - struct radv_meta_blit2d_surf *dst, struct radv_meta_blit2d_rect *rect); + struct radv_meta_blit2d_surf *dst, const VkOffset3D *offset, + const VkExtent3D *extent); + void radv_meta_image_to_image_cs(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf *src, - struct radv_meta_blit2d_surf *dst, struct radv_meta_blit2d_rect *rect); + struct radv_meta_blit2d_surf *dst, const VkOffset3D *src_offset, + const VkOffset3D *dst_offset, const VkExtent3D *extent); + void radv_meta_clear_image_cs(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf *dst, const VkClearColorValue *clear_color); @@ -217,7 +217,9 @@ void radv_copy_vrs_htile(struct radv_cmd_buffer *cmd_buffer, struct radv_image_v struct radv_image *dst_image, uint64_t htile_va, bool read_htile_value); bool radv_can_use_fmask_copy(struct radv_cmd_buffer *cmd_buffer, const struct radv_image *src_image, - const struct radv_image *dst_image, const struct radv_meta_blit2d_rect *rect); + const struct radv_image *dst_image, const VkOffset3D *src_offset, + const VkOffset3D *dst_offset, const VkExtent3D *extent); + void radv_fmask_copy(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf *src, struct radv_meta_blit2d_surf *dst); diff --git a/src/amd/vulkan/meta/radv_meta_blit2d.c b/src/amd/vulkan/meta/radv_meta_blit2d.c index 22a7789aa34..6c9aed89ae6 100644 --- a/src/amd/vulkan/meta/radv_meta_blit2d.c +++ b/src/amd/vulkan/meta/radv_meta_blit2d.c @@ -60,7 +60,7 @@ create_iview(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf *s void radv_gfx_copy_memory_to_image(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_buffer *src, - struct radv_meta_blit2d_surf *dst, struct radv_meta_blit2d_rect *rect) + struct radv_meta_blit2d_surf *dst, const VkOffset3D *offset, const VkExtent3D *extent) { struct radv_device *device = radv_cmd_buffer_device(cmd_buffer); const enum blit2d_src_type src_type = BLIT2D_SRC_TYPE_BUFFER; @@ -69,17 +69,17 @@ radv_gfx_copy_memory_to_image(struct radv_cmd_buffer *cmd_buffer, struct radv_me VkResult result; radv_CmdSetViewport(radv_cmd_buffer_to_handle(cmd_buffer), 0, 1, - &(VkViewport){.x = rect->dst_x, - .y = rect->dst_y, - .width = rect->width, - .height = rect->height, + &(VkViewport){.x = offset->x, + .y = offset->y, + .width = extent->width, + .height = extent->height, .minDepth = 0.0f, .maxDepth = 1.0f}); radv_CmdSetScissor(radv_cmd_buffer_to_handle(cmd_buffer), 0, 1, &(VkRect2D){ - .offset = (VkOffset2D){rect->dst_x, rect->dst_y}, - .extent = (VkExtent2D){rect->width, rect->height}, + .offset = (VkOffset2D){offset->x, offset->y}, + .extent = (VkExtent2D){extent->width, extent->height}, }); u_foreach_bit (i, dst->aspect_mask) { @@ -108,8 +108,8 @@ radv_gfx_copy_memory_to_image(struct radv_cmd_buffer *cmd_buffer, struct radv_me .flags = VK_RENDERING_LOCAL_READ_CONCURRENT_ACCESS_CONTROL_BIT_KHR, .renderArea = { - .offset = {rect->dst_x, rect->dst_y}, - .extent = {rect->width, rect->height}, + .offset = {offset->x, offset->y}, + .extent = {extent->width, extent->height}, }, .layerCount = 1, }; @@ -153,10 +153,10 @@ radv_gfx_copy_memory_to_image(struct radv_cmd_buffer *cmd_buffer, struct radv_me UNREACHABLE("Processing blit2d with multiple aspects."); float vertex_push_constants[4] = { - rect->src_x, - rect->src_y, - rect->src_x + rect->width, - rect->src_y + rect->height, + 0, + 0, + extent->width, + extent->height, }; const VkPushConstantsInfoKHR pc_info_vs = { @@ -211,7 +211,8 @@ radv_gfx_copy_memory_to_image(struct radv_cmd_buffer *cmd_buffer, struct radv_me void radv_gfx_copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf *src, - struct radv_meta_blit2d_surf *dst, struct radv_meta_blit2d_rect *rect) + struct radv_meta_blit2d_surf *dst, const VkOffset3D *src_offset, const VkOffset3D *dst_offset, + const VkExtent3D *extent) { struct radv_device *device = radv_cmd_buffer_device(cmd_buffer); const bool use_3d = src->image->vk.image_type == VK_IMAGE_TYPE_3D; @@ -223,18 +224,18 @@ radv_gfx_copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_ radv_CmdSetViewport(radv_cmd_buffer_to_handle(cmd_buffer), 0, 1, &(VkViewport){ - .x = rect->dst_x, - .y = rect->dst_y, - .width = rect->width, - .height = rect->height, + .x = dst_offset->x, + .y = dst_offset->y, + .width = extent->width, + .height = extent->height, .minDepth = 0.0f, .maxDepth = 1.0f, }); radv_CmdSetScissor(radv_cmd_buffer_to_handle(cmd_buffer), 0, 1, &(VkRect2D){ - .offset = (VkOffset2D){rect->dst_x, rect->dst_y}, - .extent = (VkExtent2D){rect->width, rect->height}, + .offset = (VkOffset2D){dst_offset->x, dst_offset->y}, + .extent = (VkExtent2D){extent->width, extent->height}, }); u_foreach_bit (i, dst->aspect_mask) { @@ -280,8 +281,8 @@ radv_gfx_copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_ .flags = VK_RENDERING_LOCAL_READ_CONCURRENT_ACCESS_CONTROL_BIT_KHR, .renderArea = { - .offset = {rect->dst_x, rect->dst_y}, - .extent = {rect->width, rect->height}, + .offset = {dst_offset->x, dst_offset->y}, + .extent = {extent->width, extent->height}, }, .layerCount = 1, }; @@ -325,10 +326,10 @@ radv_gfx_copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_ UNREACHABLE("Processing blit2d with multiple aspects."); float vertex_push_constants[4] = { - rect->src_x, - rect->src_y, - rect->src_x + rect->width, - rect->src_y + rect->height, + src_offset->x, + src_offset->y, + src_offset->x + extent->width, + src_offset->y + extent->height, }; const VkPushConstantsInfoKHR pc_info_vs = { diff --git a/src/amd/vulkan/meta/radv_meta_bufimage.c b/src/amd/vulkan/meta/radv_meta_bufimage.c index 05c0a77248d..f9bb2319d95 100644 --- a/src/amd/vulkan/meta/radv_meta_bufimage.c +++ b/src/amd/vulkan/meta/radv_meta_bufimage.c @@ -597,7 +597,7 @@ create_iview(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf *s */ static void fixup_gfx9_cs_copy(struct radv_cmd_buffer *cmd_buffer, const struct radv_meta_blit2d_buffer *buf_bsurf, - const struct radv_meta_blit2d_surf *img_bsurf, const struct radv_meta_blit2d_rect *rect, + const struct radv_meta_blit2d_surf *img_bsurf, const VkOffset3D *offset, const VkExtent3D *extent, bool to_image) { struct radv_device *device = radv_cmd_buffer_device(cmd_buffer); @@ -628,9 +628,9 @@ fixup_gfx9_cs_copy(struct radv_cmd_buffer *cmd_buffer, const struct radv_meta_bl VkExtent2D hw_mip_extent = {u_minify(hw_base_extent.width, mip_level), u_minify(hw_base_extent.height, mip_level)}; /* The actual extent we want to copy */ - VkExtent2D mip_extent = {rect->width, rect->height}; + VkExtent2D mip_extent = {extent->width, extent->height}; - VkOffset2D mip_offset = {to_image ? rect->dst_x : rect->src_x, to_image ? rect->dst_y : rect->src_y}; + VkOffset2D mip_offset = {offset->x, offset->y}; if (hw_mip_extent.width >= mip_offset.x + mip_extent.width && hw_mip_extent.height >= mip_offset.y + mip_extent.height) @@ -691,7 +691,7 @@ get_image_stride_for_r32g32b32(struct radv_cmd_buffer *cmd_buffer, struct radv_m void radv_meta_image_to_buffer(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf *src, - struct radv_meta_blit2d_buffer *dst, struct radv_meta_blit2d_rect *rect) + struct radv_meta_blit2d_buffer *dst, const VkOffset3D *offset, const VkExtent3D *extent) { struct radv_device *device = radv_cmd_buffer_device(cmd_buffer); struct radv_image_view src_view; @@ -733,7 +733,7 @@ radv_meta_image_to_buffer(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_b radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer), VK_PIPELINE_BIND_POINT_COMPUTE, pipeline); - unsigned push_constants[4] = {rect->src_x, rect->src_y, src->layer, dst->pitch}; + unsigned push_constants[4] = {offset->x, offset->y, src->layer, dst->pitch}; const VkPushConstantsInfoKHR pc_info = { .sType = VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO_KHR, @@ -746,15 +746,16 @@ radv_meta_image_to_buffer(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_b radv_CmdPushConstants2(radv_cmd_buffer_to_handle(cmd_buffer), &pc_info); - radv_unaligned_dispatch(cmd_buffer, rect->width, rect->height, 1); - fixup_gfx9_cs_copy(cmd_buffer, dst, src, rect, false); + radv_unaligned_dispatch(cmd_buffer, extent->width, extent->height, 1); + fixup_gfx9_cs_copy(cmd_buffer, dst, src, offset, extent, false); radv_image_view_finish(&src_view); } static void radv_meta_buffer_to_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_buffer *src, - struct radv_meta_blit2d_surf *dst, struct radv_meta_blit2d_rect *rect) + struct radv_meta_blit2d_surf *dst, const VkOffset3D *offset, + const VkExtent3D *extent) { struct radv_device *device = radv_cmd_buffer_device(cmd_buffer); VkPipelineLayout layout; @@ -798,8 +799,8 @@ radv_meta_buffer_to_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, struc stride = get_image_stride_for_r32g32b32(cmd_buffer, dst); unsigned push_constants[4] = { - rect->dst_x, - rect->dst_y, + offset->x, + offset->y, stride, src->pitch, }; @@ -815,12 +816,12 @@ radv_meta_buffer_to_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, struc radv_CmdPushConstants2(radv_cmd_buffer_to_handle(cmd_buffer), &pc_info); - radv_unaligned_dispatch(cmd_buffer, rect->width, rect->height, 1); + radv_unaligned_dispatch(cmd_buffer, extent->width, extent->height, 1); } void radv_meta_buffer_to_image_cs(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_buffer *src, - struct radv_meta_blit2d_surf *dst, struct radv_meta_blit2d_rect *rect) + struct radv_meta_blit2d_surf *dst, const VkOffset3D *offset, const VkExtent3D *extent) { struct radv_device *device = radv_cmd_buffer_device(cmd_buffer); struct radv_image_view dst_view; @@ -829,7 +830,7 @@ radv_meta_buffer_to_image_cs(struct radv_cmd_buffer *cmd_buffer, struct radv_met VkResult result; if (vk_format_is_96bit(dst->image->vk.format)) { - radv_meta_buffer_to_image_cs_r32g32b32(cmd_buffer, src, dst, rect); + radv_meta_buffer_to_image_cs_r32g32b32(cmd_buffer, src, dst, offset, extent); return; } @@ -867,8 +868,8 @@ radv_meta_buffer_to_image_cs(struct radv_cmd_buffer *cmd_buffer, struct radv_met radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer), VK_PIPELINE_BIND_POINT_COMPUTE, pipeline); unsigned push_constants[4] = { - rect->dst_x, - rect->dst_y, + offset->x, + offset->y, dst->layer, src->pitch, }; @@ -884,15 +885,16 @@ radv_meta_buffer_to_image_cs(struct radv_cmd_buffer *cmd_buffer, struct radv_met radv_CmdPushConstants2(radv_cmd_buffer_to_handle(cmd_buffer), &pc_info); - radv_unaligned_dispatch(cmd_buffer, rect->width, rect->height, 1); - fixup_gfx9_cs_copy(cmd_buffer, src, dst, rect, true); + radv_unaligned_dispatch(cmd_buffer, extent->width, extent->height, 1); + fixup_gfx9_cs_copy(cmd_buffer, src, dst, offset, extent, true); radv_image_view_finish(&dst_view); } static void radv_meta_image_to_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf *src, - struct radv_meta_blit2d_surf *dst, struct radv_meta_blit2d_rect *rect) + struct radv_meta_blit2d_surf *dst, const VkOffset3D *src_offset, + const VkOffset3D *dst_offset, const VkExtent3D *extent) { struct radv_device *device = radv_cmd_buffer_device(cmd_buffer); unsigned src_stride, dst_stride; @@ -940,7 +942,7 @@ radv_meta_image_to_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, struct dst_stride = get_image_stride_for_r32g32b32(cmd_buffer, dst); unsigned push_constants[6] = { - rect->src_x, rect->src_y, src_stride, rect->dst_x, rect->dst_y, dst_stride, + src_offset->x, src_offset->y, src_stride, dst_offset->x, dst_offset->y, dst_stride, }; const VkPushConstantsInfoKHR pc_info = { @@ -954,12 +956,13 @@ radv_meta_image_to_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, struct radv_CmdPushConstants2(radv_cmd_buffer_to_handle(cmd_buffer), &pc_info); - radv_unaligned_dispatch(cmd_buffer, rect->width, rect->height, 1); + radv_unaligned_dispatch(cmd_buffer, extent->width, extent->height, 1); } void radv_meta_image_to_image_cs(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf *src, - struct radv_meta_blit2d_surf *dst, struct radv_meta_blit2d_rect *rect) + struct radv_meta_blit2d_surf *dst, const VkOffset3D *src_offset, + const VkOffset3D *dst_offset, const VkExtent3D *extent) { struct radv_device *device = radv_cmd_buffer_device(cmd_buffer); struct radv_image_view src_view, dst_view; @@ -969,7 +972,7 @@ radv_meta_image_to_image_cs(struct radv_cmd_buffer *cmd_buffer, struct radv_meta VkResult result; if (vk_format_is_96bit(src->format)) { - radv_meta_image_to_image_cs_r32g32b32(cmd_buffer, src, dst, rect); + radv_meta_image_to_image_cs_r32g32b32(cmd_buffer, src, dst, src_offset, dst_offset, extent); return; } @@ -1042,7 +1045,7 @@ radv_meta_image_to_image_cs(struct radv_cmd_buffer *cmd_buffer, struct radv_meta radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer), VK_PIPELINE_BIND_POINT_COMPUTE, pipeline); unsigned push_constants[6] = { - rect->src_x, rect->src_y, src->layer, rect->dst_x, rect->dst_y, dst->layer, + src_offset->x, src_offset->y, src->layer, dst_offset->x, dst_offset->y, dst->layer, }; const VkPushConstantsInfoKHR pc_info = { @@ -1056,7 +1059,7 @@ radv_meta_image_to_image_cs(struct radv_cmd_buffer *cmd_buffer, struct radv_meta radv_CmdPushConstants2(radv_cmd_buffer_to_handle(cmd_buffer), &pc_info); - radv_unaligned_dispatch(cmd_buffer, rect->width, rect->height, 1); + radv_unaligned_dispatch(cmd_buffer, extent->width, extent->height, 1); radv_image_view_finish(&src_view); radv_image_view_finish(&dst_view); diff --git a/src/amd/vulkan/meta/radv_meta_copy.c b/src/amd/vulkan/meta/radv_meta_copy.c index e121eebe15b..49409b82b54 100644 --- a/src/amd/vulkan/meta/radv_meta_copy.c +++ b/src/amd/vulkan/meta/radv_meta_copy.c @@ -127,10 +127,6 @@ gfx_or_compute_copy_memory_to_image(struct radv_cmd_buffer *cmd_buffer, uint64_t /* Start creating blit rect */ const VkExtent3D img_extent_el = vk_image_extent_to_elements(&image->vk, region->imageExtent); - struct radv_meta_blit2d_rect rect = { - .width = img_extent_el.width, - .height = img_extent_el.height, - }; /* Create blit surfaces */ struct radv_meta_blit2d_surf img_bsurf = blit_surf_for_image_level_layer(image, layout, ®ion->imageSubresource); @@ -175,15 +171,11 @@ gfx_or_compute_copy_memory_to_image(struct radv_cmd_buffer *cmd_buffer, uint64_t unsigned slice_3d = 0; unsigned slice_array = 0; while (slice_3d < num_slices_3d && slice_array < num_slices_array) { - - rect.dst_x = img_offset_el.x; - rect.dst_y = img_offset_el.y; - /* Perform Blit */ if (use_compute) { - radv_meta_buffer_to_image_cs(cmd_buffer, &buf_bsurf, &img_bsurf, &rect); + radv_meta_buffer_to_image_cs(cmd_buffer, &buf_bsurf, &img_bsurf, &img_offset_el, &img_extent_el); } else { - radv_gfx_copy_memory_to_image(cmd_buffer, &buf_bsurf, &img_bsurf, &rect); + radv_gfx_copy_memory_to_image(cmd_buffer, &buf_bsurf, &img_bsurf, &img_offset_el, &img_extent_el); } /* Once we've done the blit, all of the actual information about @@ -291,10 +283,6 @@ compute_copy_image_to_memory(struct radv_cmd_buffer *cmd_buffer, uint64_t buffer /* Start creating blit rect */ const VkExtent3D img_extent_el = vk_image_extent_to_elements(&image->vk, region->imageExtent); - struct radv_meta_blit2d_rect rect = { - .width = img_extent_el.width, - .height = img_extent_el.height, - }; /* Create blit surfaces */ struct radv_meta_blit2d_surf img_info = blit_surf_for_image_level_layer(image, layout, ®ion->imageSubresource); @@ -338,12 +326,8 @@ compute_copy_image_to_memory(struct radv_cmd_buffer *cmd_buffer, uint64_t buffer unsigned slice_3d = 0; unsigned slice_array = 0; while (slice_3d < num_slices_3d && slice_array < num_slices_array) { - - rect.src_x = img_offset_el.x; - rect.src_y = img_offset_el.y; - /* Perform Blit */ - radv_meta_image_to_buffer(cmd_buffer, &img_info, &buf_info, &rect); + radv_meta_image_to_buffer(cmd_buffer, &img_info, &buf_info, &img_offset_el, &img_extent_el); buf_info.offset += buf_extent_el.width * buf_extent_el.height * img_info.bs; img_info.layer++; @@ -571,12 +555,6 @@ gfx_or_compute_copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image */ const VkExtent3D img_extent_el = vk_image_extent_to_elements(&src_image->vk, region->extent); - /* Start creating blit rect */ - struct radv_meta_blit2d_rect rect = { - .width = img_extent_el.width, - .height = img_extent_el.height, - }; - unsigned num_slices = vk_image_subresource_layer_count(&src_image->vk, ®ion->srcSubresource); if (src_image->vk.image_type == VK_IMAGE_TYPE_3D) { @@ -588,20 +566,15 @@ gfx_or_compute_copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image b_dst.layer = dst_offset_el.z; for (unsigned slice = 0; slice < num_slices; slice++) { - /* Finish creating blit rect */ - rect.dst_x = dst_offset_el.x; - rect.dst_y = dst_offset_el.y; - rect.src_x = src_offset_el.x; - rect.src_y = src_offset_el.y; - /* Perform Blit */ if (use_compute) { - radv_meta_image_to_image_cs(cmd_buffer, &b_src, &b_dst, &rect); + radv_meta_image_to_image_cs(cmd_buffer, &b_src, &b_dst, &src_offset_el, &dst_offset_el, &img_extent_el); } else { - if (radv_can_use_fmask_copy(cmd_buffer, b_src.image, b_dst.image, &rect)) { + if (radv_can_use_fmask_copy(cmd_buffer, b_src.image, b_dst.image, &src_offset_el, &dst_offset_el, + &img_extent_el)) { radv_fmask_copy(cmd_buffer, &b_src, &b_dst); } else { - radv_gfx_copy_image(cmd_buffer, &b_src, &b_dst, &rect); + radv_gfx_copy_image(cmd_buffer, &b_src, &b_dst, &src_offset_el, &dst_offset_el, &img_extent_el); } } diff --git a/src/amd/vulkan/meta/radv_meta_fmask_copy.c b/src/amd/vulkan/meta/radv_meta_fmask_copy.c index 2d92beeb38b..48fb43a5929 100644 --- a/src/amd/vulkan/meta/radv_meta_fmask_copy.c +++ b/src/amd/vulkan/meta/radv_meta_fmask_copy.c @@ -118,7 +118,8 @@ radv_fixup_copy_dst_metadata(struct radv_cmd_buffer *cmd_buffer, const struct ra bool radv_can_use_fmask_copy(struct radv_cmd_buffer *cmd_buffer, const struct radv_image *src_image, - const struct radv_image *dst_image, const struct radv_meta_blit2d_rect *rect) + const struct radv_image *dst_image, const VkOffset3D *src_offset, const VkOffset3D *dst_offset, + const VkExtent3D *extent) { struct radv_device *device = radv_cmd_buffer_device(cmd_buffer); const struct radv_physical_device *pdev = radv_device_physical(device); @@ -140,8 +141,8 @@ radv_can_use_fmask_copy(struct radv_cmd_buffer *cmd_buffer, const struct radv_im return false; /* The region must be a whole image copy. */ - if (rect->src_x || rect->src_y || rect->dst_x || rect->dst_y || rect->width != src_image->vk.extent.width || - rect->height != src_image->vk.extent.height) + if (src_offset->x || src_offset->y || dst_offset->x || dst_offset->y || + extent->width != src_image->vk.extent.width || extent->height != src_image->vk.extent.height) return false; /* Source/destination images must have identical size. */