panfrost: Stop mixing depth and number of samples

Texture depth and MSAA are two different concepts even if they are
exclusive on Mali GPUs (depth field is repurposed for sample index
there). Let's not mix them and adjust the slice_full_size calculation
to take both into account.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8125>
This commit is contained in:
Boris Brezillon 2020-12-16 09:57:52 +01:00
parent 728069485d
commit e9e823ec83

View file

@ -331,14 +331,9 @@ panfrost_setup_slices(struct panfrost_device *dev,
/* MSAA is implemented as a 3D texture with z corresponding to the
* sample #, horrifyingly enough */
bool msaa = res->nr_samples > 1;
unsigned nr_samples = MAX2(res->nr_samples, 1);
if (msaa) {
assert(depth == 1);
depth = res->nr_samples;
}
assert(depth > 0);
assert(depth == 1 || nr_samples == 1);
/* Tiled operates blockwise; linear is packed. Also, anything
* we render to has to be tile-aligned. Maybe not strictly
@ -399,7 +394,8 @@ panfrost_setup_slices(struct panfrost_device *dev,
slice->row_stride = stride * (tile_h >> tile_shift);
unsigned slice_one_size = slice->line_stride * effective_height;
unsigned slice_full_size = slice_one_size * effective_depth;
unsigned slice_full_size =
slice_one_size * effective_depth * nr_samples;
slice->surface_stride = slice_one_size;
@ -430,10 +426,7 @@ panfrost_setup_slices(struct panfrost_device *dev,
width = u_minify(width, 1);
height = u_minify(height, 1);
/* Don't mipmap the sample count */
if (!msaa)
depth = u_minify(depth, 1);
depth = u_minify(depth, 1);
}
assert(res->array_size);