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 <robdclark@gmail.com>
This commit is contained in:
@@ -149,6 +149,9 @@ use_hw_binning(struct fd_batch *batch)
|
|||||||
if (gmem->minx || gmem->miny)
|
if (gmem->minx || gmem->miny)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if ((gmem->maxpw * gmem->maxph) > 32)
|
||||||
|
return false;
|
||||||
|
|
||||||
return fd_binning_enabled && ((gmem->nbins_x * gmem->nbins_y) > 2);
|
return fd_binning_enabled && ((gmem->nbins_x * gmem->nbins_y) > 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -219,6 +219,9 @@ calculate_tiles(struct fd_batch *batch)
|
|||||||
div_round_up(nbins_x, tpp_x)) > 8)
|
div_round_up(nbins_x, tpp_x)) > 8)
|
||||||
tpp_x += 1;
|
tpp_x += 1;
|
||||||
|
|
||||||
|
gmem->maxpw = tpp_x;
|
||||||
|
gmem->maxph = tpp_y;
|
||||||
|
|
||||||
/* configure pipes: */
|
/* configure pipes: */
|
||||||
xoff = yoff = 0;
|
xoff = yoff = 0;
|
||||||
for (i = 0; i < ARRAY_SIZE(ctx->pipe); i++) {
|
for (i = 0; i < ARRAY_SIZE(ctx->pipe); i++) {
|
||||||
|
@@ -57,6 +57,7 @@ struct fd_gmem_stateobj {
|
|||||||
uint16_t bin_w, nbins_x;
|
uint16_t bin_w, nbins_x;
|
||||||
uint16_t minx, miny;
|
uint16_t minx, miny;
|
||||||
uint16_t width, height;
|
uint16_t width, height;
|
||||||
|
uint16_t maxpw, maxph; /* maximum pipe width/height */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct fd_batch;
|
struct fd_batch;
|
||||||
|
Reference in New Issue
Block a user