From 6088891ef79e4a1a2111ffc76ae10697005df3dd Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Wed, 15 Jul 2020 11:39:08 -0400 Subject: [PATCH] panfrost: Include sample count in payload estimates Otherwise we might not reserve enough space. Signed-off-by: Alyssa Rosenzweig Part-of: --- src/gallium/drivers/panfrost/pan_context.c | 2 ++ src/panfrost/encoder/pan_texture.c | 5 ++++- src/panfrost/encoder/pan_texture.h | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index 70ef7249362..6a0280ec533 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -986,6 +986,7 @@ panfrost_create_sampler_view_bo(struct panfrost_sampler_view *so, 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 @@ panfrost_create_sampler_view_bo(struct panfrost_sampler_view *so, 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 c270ececd45..da436ea7318 100644 --- a/src/panfrost/encoder/pan_texture.c +++ b/src/panfrost/encoder/pan_texture.c @@ -125,6 +125,7 @@ static unsigned 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 @@ panfrost_texture_num_elements( 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 @@ unsigned 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 @@ panfrost_estimate_texture_payload_size( 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 e8c68c005bb..ea1a1ff0fe1 100644 --- a/src/panfrost/encoder/pan_texture.h +++ b/src/panfrost/encoder/pan_texture.h @@ -72,6 +72,7 @@ unsigned 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 -- 2.30.2