From: Rob Clark Date: Sat, 6 May 2017 18:00:35 +0000 (-0400) Subject: freedreno/a3xx: fix hang w/ large render targets and small gmem X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6050d5bf3d8d0043386de35cad4efa77e8be957e;p=mesa.git freedreno/a3xx: fix hang w/ large render targets and small gmem Possibly other gen's have a similar limit. Fixes glmark2 -b shadow with larger resolutions on devices with small gmem (for example, fullscreen 1080p on 8x16/db410c). Cc: mesa-stable@lists.freedesktop.org Signed-off-by: Rob Clark --- diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_gmem.c b/src/gallium/drivers/freedreno/a3xx/fd3_gmem.c index 493fdd29e5c..0ec769b9d6d 100644 --- a/src/gallium/drivers/freedreno/a3xx/fd3_gmem.c +++ b/src/gallium/drivers/freedreno/a3xx/fd3_gmem.c @@ -149,6 +149,9 @@ use_hw_binning(struct fd_batch *batch) if (gmem->minx || gmem->miny) return false; + if ((gmem->maxpw * gmem->maxph) > 32) + return false; + return fd_binning_enabled && ((gmem->nbins_x * gmem->nbins_y) > 2); } diff --git a/src/gallium/drivers/freedreno/freedreno_gmem.c b/src/gallium/drivers/freedreno/freedreno_gmem.c index 23be0472b25..d4b2e8d92fc 100644 --- a/src/gallium/drivers/freedreno/freedreno_gmem.c +++ b/src/gallium/drivers/freedreno/freedreno_gmem.c @@ -219,6 +219,9 @@ calculate_tiles(struct fd_batch *batch) div_round_up(nbins_x, tpp_x)) > 8) tpp_x += 1; + gmem->maxpw = tpp_x; + gmem->maxph = tpp_y; + /* configure pipes: */ xoff = yoff = 0; for (i = 0; i < ARRAY_SIZE(ctx->pipe); i++) { diff --git a/src/gallium/drivers/freedreno/freedreno_gmem.h b/src/gallium/drivers/freedreno/freedreno_gmem.h index 42a8dfa8047..f5276ce4481 100644 --- a/src/gallium/drivers/freedreno/freedreno_gmem.h +++ b/src/gallium/drivers/freedreno/freedreno_gmem.h @@ -57,6 +57,7 @@ struct fd_gmem_stateobj { uint16_t bin_w, nbins_x; uint16_t minx, miny; uint16_t width, height; + uint16_t maxpw, maxph; /* maximum pipe width/height */ }; struct fd_batch;