anv/copy: Use the color_surf from the image to get the block size
This commit is contained in:
parent
9102e88364
commit
369b8bf402
|
@ -23,6 +23,18 @@
|
|||
|
||||
#include "anv_meta.h"
|
||||
|
||||
static VkExtent3D
|
||||
meta_image_block_size(const struct anv_image *image)
|
||||
{
|
||||
if (image->aspects == VK_IMAGE_ASPECT_COLOR_BIT) {
|
||||
const struct isl_format_layout *isl_layout =
|
||||
isl_format_get_layout(image->color_surface.isl.format);
|
||||
return (VkExtent3D) { isl_layout->bw, isl_layout->bh, isl_layout->bd };
|
||||
} else {
|
||||
return (VkExtent3D) { 1, 1, 1 };
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the user-provided VkBufferImageCopy::imageExtent in units of
|
||||
* elements rather than texels. One element equals one texel or one block
|
||||
* if Image is uncompressed or compressed, respectively.
|
||||
|
@ -31,12 +43,11 @@ static struct VkExtent3D
|
|||
meta_region_extent_el(const struct anv_image *image,
|
||||
const struct VkExtent3D *extent)
|
||||
{
|
||||
const struct isl_format_layout *isl_layout =
|
||||
anv_format_for_vk_format(image->vk_format)->isl_layout;
|
||||
const VkExtent3D block = meta_image_block_size(image);
|
||||
return anv_sanitize_image_extent(image->type, (VkExtent3D) {
|
||||
.width = DIV_ROUND_UP(extent->width , isl_layout->bw),
|
||||
.height = DIV_ROUND_UP(extent->height, isl_layout->bh),
|
||||
.depth = DIV_ROUND_UP(extent->depth , isl_layout->bd),
|
||||
.width = DIV_ROUND_UP(extent->width , block.width),
|
||||
.height = DIV_ROUND_UP(extent->height, block.height),
|
||||
.depth = DIV_ROUND_UP(extent->depth , block.depth),
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -48,11 +59,11 @@ static struct VkOffset3D
|
|||
meta_region_offset_el(const struct anv_image *image,
|
||||
const struct VkOffset3D *offset)
|
||||
{
|
||||
const struct isl_format_layout *isl_layout = image->format->isl_layout;
|
||||
const VkExtent3D block = meta_image_block_size(image);
|
||||
return anv_sanitize_image_offset(image->type, (VkOffset3D) {
|
||||
.x = offset->x / isl_layout->bw,
|
||||
.y = offset->y / isl_layout->bh,
|
||||
.z = offset->z / isl_layout->bd,
|
||||
.x = offset->x / block.width,
|
||||
.y = offset->y / block.height,
|
||||
.z = offset->z / block.depth,
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue