diff --git a/.pick_status.json b/.pick_status.json index caa15f829a6..fa040059416 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1282,7 +1282,7 @@ "description": "freedreno: Fix graphic glitches on a4xx and a5xx", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "f68c6951b86ac38ebdb89bc6b5a6285433e684a6" }, diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_gmem.c b/src/gallium/drivers/freedreno/a4xx/fd4_gmem.c index e8e812e2fc1..394c4ba9f0a 100644 --- a/src/gallium/drivers/freedreno/a4xx/fd4_gmem.c +++ b/src/gallium/drivers/freedreno/a4xx/fd4_gmem.c @@ -146,6 +146,14 @@ use_hw_binning(struct fd_batch *batch) { const struct fd_gmem_stateobj *gmem = batch->gmem_state; + /* workaround: Like on a3xx, hw binning and scissor optimization + * don't play nice together. + * + * Disable binning if scissor optimization is used. + */ + if (gmem->minx || gmem->miny) + return false; + if ((gmem->maxpw * gmem->maxph) > 32) return false; diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_gmem.c b/src/gallium/drivers/freedreno/a5xx/fd5_gmem.c index b2aa4bff4e4..95847056bd9 100644 --- a/src/gallium/drivers/freedreno/a5xx/fd5_gmem.c +++ b/src/gallium/drivers/freedreno/a5xx/fd5_gmem.c @@ -263,6 +263,14 @@ use_hw_binning(struct fd_batch *batch) { const struct fd_gmem_stateobj *gmem = batch->gmem_state; + /* workaround: Like on a3xx, hw binning and scissor optimization + * don't play nice together. + * + * Disable binning if scissor optimization is used. + */ + if (gmem->minx || gmem->miny) + return false; + if ((gmem->maxpw * gmem->maxph) > 32) return false;