pan/texture: Allow uncompressed view of compressed image
Needed image copies in Vulkan, where we create RGBA views of compressed images to do the copy. Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Mary Guillemard <mary.guillemard@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29451>
This commit is contained in:

committed by
Marge Bot

parent
8eec3284e1
commit
1b16f9ec05
@@ -678,7 +678,7 @@ GENX(panfrost_new_texture)(const struct pan_image_view *iview, void *out,
|
|||||||
pan_image_view_get_plane(iview, 1) != NULL)
|
pan_image_view_get_plane(iview, 1) != NULL)
|
||||||
array_size *= 2;
|
array_size *= 2;
|
||||||
|
|
||||||
unsigned width;
|
unsigned width, height, depth;
|
||||||
|
|
||||||
if (iview->buf.size) {
|
if (iview->buf.size) {
|
||||||
assert(iview->dim == MALI_TEXTURE_DIMENSION_1D);
|
assert(iview->dim == MALI_TEXTURE_DIMENSION_1D);
|
||||||
@@ -688,17 +688,34 @@ GENX(panfrost_new_texture)(const struct pan_image_view *iview, void *out,
|
|||||||
assert(layout->height == 1 && layout->depth == 1);
|
assert(layout->height == 1 && layout->depth == 1);
|
||||||
assert(iview->buf.offset + iview->buf.size <= layout->width);
|
assert(iview->buf.offset + iview->buf.size <= layout->width);
|
||||||
width = iview->buf.size;
|
width = iview->buf.size;
|
||||||
|
height = 1;
|
||||||
|
depth = 1;
|
||||||
} else {
|
} else {
|
||||||
width = u_minify(layout->width, iview->first_level);
|
width = u_minify(layout->width, iview->first_level);
|
||||||
|
height = u_minify(layout->height, iview->first_level);
|
||||||
|
depth = u_minify(layout->depth, iview->first_level);
|
||||||
|
if (util_format_is_compressed(layout->format) &&
|
||||||
|
!util_format_is_compressed(format)) {
|
||||||
|
width =
|
||||||
|
DIV_ROUND_UP(width, util_format_get_blockwidth(layout->format));
|
||||||
|
height =
|
||||||
|
DIV_ROUND_UP(height, util_format_get_blockheight(layout->format));
|
||||||
|
depth =
|
||||||
|
DIV_ROUND_UP(depth, util_format_get_blockdepth(layout->format));
|
||||||
|
assert(util_format_get_blockwidth(format) == 1);
|
||||||
|
assert(util_format_get_blockheight(format) == 1);
|
||||||
|
assert(util_format_get_blockheight(format) == 1);
|
||||||
|
assert(iview->last_level == iview->first_level);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pan_pack(out, TEXTURE, cfg) {
|
pan_pack(out, TEXTURE, cfg) {
|
||||||
cfg.dimension = iview->dim;
|
cfg.dimension = iview->dim;
|
||||||
cfg.format = mali_format;
|
cfg.format = mali_format;
|
||||||
cfg.width = width;
|
cfg.width = width;
|
||||||
cfg.height = u_minify(layout->height, iview->first_level);
|
cfg.height = height;
|
||||||
if (iview->dim == MALI_TEXTURE_DIMENSION_3D)
|
if (iview->dim == MALI_TEXTURE_DIMENSION_3D)
|
||||||
cfg.depth = u_minify(layout->depth, iview->first_level);
|
cfg.depth = depth;
|
||||||
else
|
else
|
||||||
cfg.sample_count = layout->nr_samples;
|
cfg.sample_count = layout->nr_samples;
|
||||||
cfg.swizzle = panfrost_translate_swizzle_4(swizzle);
|
cfg.swizzle = panfrost_translate_swizzle_4(swizzle);
|
||||||
|
Reference in New Issue
Block a user