mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-20 09:30:13 +01:00
panfrost: do not over-estimate format tib-size
While the MAX2 thing here is correct for some formats, it's not correct for all; for instance R8_SNORM doesn't need 32-bits here. This should enable some higersample-counts on some 8 and 16-bit formats on some Mali GPUs. Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38968>
This commit is contained in:
parent
5330d09931
commit
c1bf22b56f
3 changed files with 7 additions and 9 deletions
|
|
@ -145,7 +145,9 @@ get_max_msaa(struct panfrost_device *dev, enum pipe_format format)
|
||||||
{
|
{
|
||||||
unsigned max_tib_size = pan_query_tib_size(dev->model);
|
unsigned max_tib_size = pan_query_tib_size(dev->model);
|
||||||
unsigned max_cbuf_atts = pan_get_max_cbufs(dev->arch, max_tib_size);
|
unsigned max_cbuf_atts = pan_get_max_cbufs(dev->arch, max_tib_size);
|
||||||
unsigned format_size = util_format_get_blocksize(format);
|
|
||||||
|
unsigned format_size =
|
||||||
|
pan_format_tib_size(format, dev->blendable_formats[format].internal);
|
||||||
|
|
||||||
unsigned max_msaa = pan_get_max_msaa(dev->arch, max_tib_size,
|
unsigned max_msaa = pan_get_max_msaa(dev->arch, max_tib_size,
|
||||||
max_cbuf_atts, format_size);
|
max_cbuf_atts, format_size);
|
||||||
|
|
|
||||||
|
|
@ -144,13 +144,6 @@ pan_get_max_msaa(unsigned arch, unsigned max_tib_size, unsigned max_cbuf_atts,
|
||||||
assert(max_cbuf_atts > 0);
|
assert(max_cbuf_atts > 0);
|
||||||
assert(format_size > 0);
|
assert(format_size > 0);
|
||||||
|
|
||||||
/* When using an internal format with less than 32-bit per pixels, we're
|
|
||||||
* currently using either AU (Additional precision, Unorm) or PU (Padded
|
|
||||||
* precision, Unorm), meaning that we need additional bits in the tilebuffer
|
|
||||||
* that's used by dithering.
|
|
||||||
*/
|
|
||||||
format_size = MAX2(format_size, 4);
|
|
||||||
|
|
||||||
const unsigned min_tile_size = 4 * 4;
|
const unsigned min_tile_size = 4 * 4;
|
||||||
unsigned max_msaa = max_tib_size / (max_cbuf_atts * format_size *
|
unsigned max_msaa = max_tib_size / (max_cbuf_atts * format_size *
|
||||||
min_tile_size);
|
min_tile_size);
|
||||||
|
|
|
||||||
|
|
@ -834,7 +834,10 @@ get_image_format_sample_counts(struct panvk_physical_device *physical_device,
|
||||||
unsigned max_cbuf_atts = pan_get_max_cbufs(arch, max_tib_size);
|
unsigned max_cbuf_atts = pan_get_max_cbufs(arch, max_tib_size);
|
||||||
|
|
||||||
assert(!vk_format_is_compressed(format));
|
assert(!vk_format_is_compressed(format));
|
||||||
unsigned format_size = vk_format_get_blocksize(format);
|
|
||||||
|
enum pipe_format pfmt = vk_format_to_pipe_format(format);
|
||||||
|
unsigned format_size =
|
||||||
|
pan_format_tib_size(pfmt, physical_device->formats.blendable[pfmt].internal);
|
||||||
|
|
||||||
return panvk_get_sample_counts(arch, max_tib_size, max_cbuf_atts,
|
return panvk_get_sample_counts(arch, max_tib_size, max_cbuf_atts,
|
||||||
format_size);
|
format_size);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue