diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index ec5395e86ae..2df59a8230d 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -1064,7 +1064,8 @@ panfrost_create_sampler_view_bo(struct panfrost_sampler_view *so, unsigned size = (is_bifrost ? 0 : MALI_MIDGARD_TEXTURE_LENGTH) + - panfrost_estimate_texture_payload_size(first_level, last_level, + panfrost_estimate_texture_payload_size(device, + first_level, last_level, first_layer, last_layer, texture->nr_samples, type, diff --git a/src/panfrost/lib/pan_texture.c b/src/panfrost/lib/pan_texture.c index 73c9698e881..35fb450c890 100644 --- a/src/panfrost/lib/pan_texture.c +++ b/src/panfrost/lib/pan_texture.c @@ -220,14 +220,19 @@ panfrost_texture_num_elements( * as an allocation amount */ unsigned -panfrost_estimate_texture_payload_size( - unsigned first_level, unsigned last_level, - unsigned first_layer, unsigned last_layer, - unsigned nr_samples, - enum mali_texture_dimension dim, uint64_t modifier) +panfrost_estimate_texture_payload_size(const struct panfrost_device *dev, + unsigned first_level, + unsigned last_level, + unsigned first_layer, + unsigned last_layer, + unsigned nr_samples, + enum mali_texture_dimension dim, + uint64_t modifier) { + bool is_bifrost = dev->quirks & IS_BIFROST; /* Assume worst case */ - unsigned manual_stride = (modifier == DRM_FORMAT_MOD_LINEAR); + unsigned manual_stride = is_bifrost || + (modifier == DRM_FORMAT_MOD_LINEAR); unsigned elements = panfrost_texture_num_elements( first_level, last_level, diff --git a/src/panfrost/lib/pan_texture.h b/src/panfrost/lib/pan_texture.h index 975ffd2ebf2..1b2f40646ed 100644 --- a/src/panfrost/lib/pan_texture.h +++ b/src/panfrost/lib/pan_texture.h @@ -124,11 +124,14 @@ unsigned panfrost_block_dim(uint64_t modifier, bool width, unsigned plane); unsigned -panfrost_estimate_texture_payload_size( - unsigned first_level, unsigned last_level, - unsigned first_layer, unsigned last_layer, - unsigned nr_samples, - enum mali_texture_dimension dim, uint64_t modifier); +panfrost_estimate_texture_payload_size(const struct panfrost_device *dev, + unsigned first_level, + unsigned last_level, + unsigned first_layer, + unsigned last_layer, + unsigned nr_samples, + enum mali_texture_dimension dim, + uint64_t modifier); void panfrost_new_texture(const struct panfrost_device *dev,