From 86cce0e677ea2da6c03d3bf637a758a76d9ca7ea Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Wed, 24 Apr 2024 22:14:36 +0200 Subject: [PATCH] panfrost: clamp buffer-size to max-size When texture-buffers are created from buffers that are larger than the max-size, the correct thing to do is to clamp the size. Let's do that. This fixes these piglits: - spec/arb_texture_buffer_object/texture-buffer-size-clamp/r8ui_texture_buffer_size_via_sampler - spec/arb_texture_buffer_object/texture-buffer-size-clamp/rg8ui_texture_buffer_size_via_sampler - spec/arb_texture_buffer_object/texture-buffer-size-clamp/rgba8ui_texture_buffer_size_via_sampler Reviewed-by: Boris Brezillon Part-of: --- src/gallium/drivers/panfrost/pan_cmdstream.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index 23dd67eac83..dfc5f4c515a 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -983,7 +983,8 @@ panfrost_upload_txs_sysval(struct panfrost_batch *batch, if (tex->target == PIPE_BUFFER) { assert(dim == 1); - uniform->i[0] = tex->u.buf.size / util_format_get_blocksize(tex->format); + unsigned buf_size = tex->u.buf.size / util_format_get_blocksize(tex->format); + uniform->i[0] = MIN2(buf_size, PAN_MAX_TEXEL_BUFFER_ELEMENTS); return; } @@ -1539,6 +1540,7 @@ panfrost_create_sampler_view_bo(struct panfrost_sampler_view *so, unsigned buf_offset = is_buffer ? so->base.u.buf.offset : 0; unsigned buf_size = (is_buffer ? so->base.u.buf.size : 0) / util_format_get_blocksize(format); + buf_size = MIN2(buf_size, PAN_MAX_TEXEL_BUFFER_ELEMENTS); if (so->base.target == PIPE_TEXTURE_3D) { first_layer /= prsrc->image.layout.depth;