radv/meta: remove radv_meta_blit2d_rect
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38139>
This commit is contained in:
committed by
Marge Bot
parent
1319b2bef6
commit
a1884dc737
@@ -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);
|
||||
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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. */
|
||||
|
||||
Reference in New Issue
Block a user