diff --git a/.pick_status.json b/.pick_status.json index a58b941b399..8b8d21c9c37 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -424,7 +424,7 @@ "description": "hk: Make width and height per block in HIC", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "5bc828481630147575348b66677edaade9e891e6", "notes": null diff --git a/src/asahi/vulkan/hk_image.c b/src/asahi/vulkan/hk_image.c index afc29b0a82e..b38d26b918d 100644 --- a/src/asahi/vulkan/hk_image.c +++ b/src/asahi/vulkan/hk_image.c @@ -1424,6 +1424,13 @@ hk_copy_memory_to_image(struct hk_device *device, struct hk_image *dst_image, uint32_t src_height = info->memoryImageHeight ?: extent.height; uint32_t blocksize_B = util_format_get_blocksize(layout->format); + + /* Align width and height to block */ + src_width = + DIV_ROUND_UP(src_width, util_format_get_blockwidth(layout->format)); + src_height = + DIV_ROUND_UP(src_height, util_format_get_blockheight(layout->format)); + uint32_t src_pitch = src_width * blocksize_B; unsigned start_layer = (dst_image->vk.image_type == VK_IMAGE_TYPE_3D) @@ -1496,6 +1503,13 @@ hk_copy_image_to_memory(struct hk_device *device, struct hk_image *src_image, #endif uint32_t blocksize_B = util_format_get_blocksize(layout->format); + + /* Align width and height to block */ + dst_width = + DIV_ROUND_UP(dst_width, util_format_get_blockwidth(layout->format)); + dst_height = + DIV_ROUND_UP(dst_height, util_format_get_blockheight(layout->format)); + uint32_t dst_pitch = dst_width * blocksize_B; unsigned start_layer = (src_image->vk.image_type == VK_IMAGE_TYPE_3D)