mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-25 07:00:45 +02:00
freedreno: fix bug in tile/slot calculation
This was causing corruption with hw binning on a306. Unlikely that it
is a306 specific, but rather the smaller gmem size resulted in different
tile configuration which was triggering the bug at certain resolutions.
Signed-off-by: Rob Clark <robclark@freedesktop.org>
Cc: "10.4" and "10.5" and "10.6" <mesa-stable@lists.freedesktop.org>
(cherry picked from commit 4925c35660)
This commit is contained in:
parent
21dd729dcc
commit
b1c045c62f
1 changed files with 4 additions and 5 deletions
|
|
@ -91,6 +91,7 @@ calculate_tiles(struct fd_context *ctx)
|
|||
uint32_t i, j, t, xoff, yoff;
|
||||
uint32_t tpp_x, tpp_y;
|
||||
bool has_zs = !!(ctx->resolve & (FD_BUFFER_DEPTH | FD_BUFFER_STENCIL));
|
||||
int tile_n[ARRAY_SIZE(ctx->pipe)];
|
||||
|
||||
if (pfb->cbufs[0])
|
||||
cpp = util_format_get_blocksize(pfb->cbufs[0]->format);
|
||||
|
|
@ -213,6 +214,7 @@ calculate_tiles(struct fd_context *ctx)
|
|||
/* configure tiles: */
|
||||
t = 0;
|
||||
yoff = miny;
|
||||
memset(tile_n, 0, sizeof(tile_n));
|
||||
for (i = 0; i < nbins_y; i++) {
|
||||
uint32_t bw, bh;
|
||||
|
||||
|
|
@ -223,20 +225,17 @@ calculate_tiles(struct fd_context *ctx)
|
|||
|
||||
for (j = 0; j < nbins_x; j++) {
|
||||
struct fd_tile *tile = &ctx->tile[t];
|
||||
uint32_t n, p;
|
||||
uint32_t p;
|
||||
|
||||
assert(t < ARRAY_SIZE(ctx->tile));
|
||||
|
||||
/* pipe number: */
|
||||
p = ((i / tpp_y) * div_round_up(nbins_x, tpp_x)) + (j / tpp_x);
|
||||
|
||||
/* slot number: */
|
||||
n = ((i % tpp_y) * tpp_x) + (j % tpp_x);
|
||||
|
||||
/* clip bin width: */
|
||||
bw = MIN2(bin_w, minx + width - xoff);
|
||||
|
||||
tile->n = n;
|
||||
tile->n = tile_n[p]++;
|
||||
tile->p = p;
|
||||
tile->bin_w = bw;
|
||||
tile->bin_h = bh;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue