mesa/src/broadcom/common
Jose Maria Casanova Crespo 47fa229605 broadcom/common: add tile alloc block size macros and sizing helper
Add V3D_TILE_ALLOC_INITIAL_BLOCK_SIZE = 128 and
V3D_TILE_ALLOC_OVERFLOW_BLOCK_SIZE = 64 to v3d_limits.h.

Corresponding _ENUM macros provide the 2-bit hardware encoding for the
TILE_BINNING_MODE_CFG packets.

The previous implicit 64B initial blocks were too small: a single draw
call emits ~88 bytes of per-tile BCL state, immediately overflowing
into continuation blocks. 128B initial blocks avoid the first
continuation allocation for simple single-draw passes.

Add v3d_tile_alloc_sizes() to v3d_util with the full tile alloc BO and
TSDA sizing logic. This uses the 128B initial blocks and tile_alloc
becomes proportional to the number of draws and size of the initial
blocks allocation with the cap of the previous fixed allocation. So
jobs with 0 or 1 drawcalls (blits/fills) reduce their headroom
dramatically.

The draw-proportional formula replaces a flat 512 KB continuation pool:

  headroom = MIN2((tiles_size * draw_count) / 2, 512 KB)

Benchmarked on RPi5 (V3D 7.1) against GfxBench GL tests and
apitrace replays at 1080p. Tile-alloc memory reduction versus the
flat 512 KB headroom (taking into account 256kb kernel alloc per OOM):

  GfxBench (5 benchmarks): -45% to -70% reduction, OOM at or below baseline
  Apitrace (19 traces): -4% to -77%  reduction on 20/24 traces

No FPS regressions observed on any workload.

Reviewed-by: Maíra Canal <mcanal@igalia.com>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40554>
2026-04-13 10:31:20 +00:00
..
v3d_cpu_tiling.h tree-wide: Convert all usage of defined(PIPE_(OS|ARCH|CC)_*) to DETECT_(OS|ARCH|CC)_* by use grep 2022-11-15 20:35:55 +00:00
v3d_csd.h v3d/v3dv: move V3D_CSD definitions to a separate file 2023-12-14 16:43:13 +00:00
v3d_debug.c all: rename gl_shader_stage to mesa_shader_stage 2025-08-06 10:28:40 +08:00
v3d_debug.h broadcom: use Mesa logging functions 2026-04-06 07:40:55 +00:00
v3d_device_info.c broadcom: use Mesa logging functions 2026-04-06 07:40:55 +00:00
v3d_device_info.h v3d: Rename cle_buffer_min_size to page_size 2026-03-27 18:54:29 +00:00
v3d_limits.h broadcom/common: add tile alloc block size macros and sizing helper 2026-04-13 10:31:20 +00:00
v3d_macros.h broadcom: only support v42 and v71 2023-11-02 11:59:08 +01:00
v3d_performance_counters.h broadcom: only support v42 and v71 2023-11-02 11:59:08 +01:00
v3d_tfu.h broadcom/common: fix V3D 7.1 TFU ICFG IFORMAT values 2026-03-24 14:55:50 +00:00
v3d_tiling.c broadcom: use Mesa logging functions 2026-04-06 07:40:55 +00:00
v3d_tiling.h broadcom/(compiler,common): avoid include of gallium headers in header files 2023-12-12 10:03:10 +00:00
v3d_util.c broadcom/common: add tile alloc block size macros and sizing helper 2026-04-13 10:31:20 +00:00
v3d_util.h broadcom/common: add tile alloc block size macros and sizing helper 2026-04-13 10:31:20 +00:00