pvr: Transfer image to buffer dest rect
In copy to buffer region, set dest rect to region size. The rectangle must be block size adjusted in case of block compressed format. Fix test: dEQP-VK.api.copy_and_blit.core.image_to_buffer.regions Signed-off-by: Oskar Rundgren <oskar.rundgren@imgtec.com> Reviewed-by: Frank Binns <frank.binns@imgtec.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22958>
This commit is contained in:
committed by
Marge Bot
parent
9e91e06d45
commit
2e5fb91090
@@ -823,6 +823,7 @@ pvr_copy_image_to_buffer_region(struct pvr_device *device,
|
||||
const VkBufferImageCopy2 *region)
|
||||
{
|
||||
const VkImageAspectFlags aspect_mask = region->imageSubresource.aspectMask;
|
||||
enum pipe_format pformat = vk_format_to_pipe_format(image->vk.format);
|
||||
VkFormat image_format = pvr_get_copy_format(image->vk.format);
|
||||
struct pvr_transfer_cmd_surface dst_surface = { 0 };
|
||||
VkImageSubresource sub_resource;
|
||||
@@ -889,6 +890,14 @@ pvr_copy_image_to_buffer_region(struct pvr_device *device,
|
||||
dst_rect.extent.width = region->imageExtent.width;
|
||||
dst_rect.extent.height = region->imageExtent.height;
|
||||
|
||||
if (util_format_is_compressed(pformat)) {
|
||||
uint32_t block_width = util_format_get_blockwidth(pformat);
|
||||
uint32_t block_height = util_format_get_blockheight(pformat);
|
||||
|
||||
dst_rect.extent.width = MAX2(1U, dst_rect.extent.width / block_width);
|
||||
dst_rect.extent.height = MAX2(1U, dst_rect.extent.height / block_height);
|
||||
}
|
||||
|
||||
sub_resource = (VkImageSubresource){
|
||||
.aspectMask = region->imageSubresource.aspectMask,
|
||||
.mipLevel = region->imageSubresource.mipLevel,
|
||||
|
||||
Reference in New Issue
Block a user