panfrost: Include sample count in payload estimates
Otherwise we might not reserve enough space.
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5929>
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c
index 70ef724..6a0280e 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -986,6 +986,7 @@
so->base.u.tex.last_level,
so->base.u.tex.first_layer,
so->base.u.tex.last_layer,
+ texture->nr_samples,
type, prsrc->layout);
so->bo = panfrost_bo_create(device, size, 0);
@@ -1013,6 +1014,7 @@
so->base.u.tex.last_level,
so->base.u.tex.first_layer,
so->base.u.tex.last_layer,
+ texture->nr_samples,
type, prsrc->layout);
size += sizeof(struct mali_texture_descriptor);
diff --git a/src/panfrost/encoder/pan_texture.c b/src/panfrost/encoder/pan_texture.c
index c270ece..da436ea 100644
--- a/src/panfrost/encoder/pan_texture.c
+++ b/src/panfrost/encoder/pan_texture.c
@@ -125,6 +125,7 @@
panfrost_texture_num_elements(
unsigned first_level, unsigned last_level,
unsigned first_layer, unsigned last_layer,
+ unsigned nr_samples,
bool is_cube, bool manual_stride)
{
unsigned first_face = 0, last_face = 0;
@@ -137,7 +138,7 @@
unsigned levels = 1 + last_level - first_level;
unsigned layers = 1 + last_layer - first_layer;
unsigned faces = 1 + last_face - first_face;
- unsigned num_elements = levels * layers * faces;
+ unsigned num_elements = levels * layers * faces * MAX2(nr_samples, 1);
if (manual_stride)
num_elements *= 2;
@@ -155,6 +156,7 @@
panfrost_estimate_texture_payload_size(
unsigned first_level, unsigned last_level,
unsigned first_layer, unsigned last_layer,
+ unsigned nr_samples,
enum mali_texture_type type, enum mali_texture_layout layout)
{
/* Assume worst case */
@@ -163,6 +165,7 @@
unsigned elements = panfrost_texture_num_elements(
first_level, last_level,
first_layer, last_layer,
+ nr_samples,
type == MALI_TEX_CUBE, manual_stride);
return sizeof(mali_ptr) * elements;
diff --git a/src/panfrost/encoder/pan_texture.h b/src/panfrost/encoder/pan_texture.h
index e8c68c0..ea1a1ff 100644
--- a/src/panfrost/encoder/pan_texture.h
+++ b/src/panfrost/encoder/pan_texture.h
@@ -72,6 +72,7 @@
panfrost_estimate_texture_payload_size(
unsigned first_level, unsigned last_level,
unsigned first_layer, unsigned last_layer,
+ unsigned nr_samples,
enum mali_texture_type type, enum mali_texture_layout layout);
void