Per the spec / freedreno. Fixes
arb_texture_buffer_object-texture-buffer-size-clamp
Fixes:
6b22a02f908 ("asahi,agx: Implement buffer textures with gnarly NIR")
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22353>
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
return 16;
- /* Texel buffers lowered to (at most) 1024x16384 2D textures */
case PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT:
- return 1024 * 16384;
+ return AGX_TEXTURE_BUFFER_MAX_SIZE;
case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
return 64;
if (state->target == PIPE_BUFFER) {
unsigned size_el =
- state->u.buf.size / util_format_get_blocksize(format);
+ agx_texture_buffer_size_el(format, state->u.buf.size);
/* Use a 2D texture to increase the maximum size */
cfg.width = 1024;
return agx_render_condition_check_inner(ctx);
}
+/* Texel buffers lowered to (at most) 1024x16384 2D textures */
+#define AGX_TEXTURE_BUFFER_WIDTH 1024
+#define AGX_TEXTURE_BUFFER_MAX_HEIGHT 16384
+#define AGX_TEXTURE_BUFFER_MAX_SIZE \
+ (AGX_TEXTURE_BUFFER_WIDTH * AGX_TEXTURE_BUFFER_MAX_HEIGHT)
+
+static inline uint32_t
+agx_texture_buffer_size_el(enum pipe_format format, uint32_t size)
+{
+ unsigned blocksize = util_format_get_blocksize(format);
+
+ return MIN2(AGX_TEXTURE_BUFFER_MAX_SIZE, size / blocksize);
+}
+
#endif