Mesa (master): turnip: fix empty scissor case

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jun 25 03:18:07 UTC 2020


Module: Mesa
Branch: master
Commit: 9c0ae5704d654108fd36b8de3f7364601ba30c53
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9c0ae5704d654108fd36b8de3f7364601ba30c53

Author: Jonathan Marek <jonathan at marek.ca>
Date:   Sat Jun 20 23:20:32 2020 -0400

turnip: fix empty scissor case

Fixes these two tests:
dEQP-VK.draw.scissor.empty_dynamic_scissor_first_draw
dEQP-VK.draw.scissor.empty_static_scissor

Signed-off-by: Jonathan Marek <jonathan at marek.ca>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5586>

---

 src/freedreno/vulkan/tu_pipeline.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/freedreno/vulkan/tu_pipeline.c b/src/freedreno/vulkan/tu_pipeline.c
index add032bcc74..281695d16cb 100644
--- a/src/freedreno/vulkan/tu_pipeline.c
+++ b/src/freedreno/vulkan/tu_pipeline.c
@@ -1547,17 +1547,21 @@ tu6_emit_viewport(struct tu_cs *cs, const VkViewport *viewport)
 void
 tu6_emit_scissor(struct tu_cs *cs, const VkRect2D *scissor)
 {
-   const VkOffset2D min = scissor->offset;
-   const VkOffset2D max = {
+   VkOffset2D min = scissor->offset;
+   VkOffset2D max = {
       scissor->offset.x + scissor->extent.width,
       scissor->offset.y + scissor->extent.height,
    };
 
-   tu_cs_emit_pkt4(cs, REG_A6XX_GRAS_SC_SCREEN_SCISSOR_TL_0, 2);
-   tu_cs_emit(cs, A6XX_GRAS_SC_SCREEN_SCISSOR_TL_0_X(min.x) |
-                     A6XX_GRAS_SC_SCREEN_SCISSOR_TL_0_Y(min.y));
-   tu_cs_emit(cs, A6XX_GRAS_SC_SCREEN_SCISSOR_TL_0_X(max.x - 1) |
-                     A6XX_GRAS_SC_SCREEN_SCISSOR_TL_0_Y(max.y - 1));
+   /* special case for empty scissor with max == 0 to avoid overflow */
+   if (max.x == 0)
+      min.x = max.x = 1;
+   if (max.y == 0)
+      min.y = max.y = 1;
+
+   tu_cs_emit_regs(cs,
+                   A6XX_GRAS_SC_SCREEN_SCISSOR_TL_0(.x = min.x, .y = min.y),
+                   A6XX_GRAS_SC_SCREEN_SCISSOR_BR_0(.x = max.x - 1, .y = max.y - 1));
 }
 
 void



More information about the mesa-commit mailing list