freedreno/a6xx: fix GPU crash on small render targets
authorRob Clark <robdclark@chromium.org>
Fri, 31 May 2019 14:07:57 +0000 (07:07 -0700)
committerRob Clark <robdclark@chromium.org>
Fri, 31 May 2019 19:58:33 +0000 (12:58 -0700)
Fixes dEQP-GLES2.functional.multisampled_render_to_texture.readpixels

Signed-off-by: Rob Clark <robdclark@chromium.org>
Acked-by: Eric Anholt <eric@anholt.net>
src/gallium/drivers/freedreno/a6xx/fd6_gmem.c

index a00e4446333834d4664c5e0f94d297a5f072f0e1..6ad0bc68ef4db1e98a63fb7dc33e25c5e34bf23d 100644 (file)
@@ -640,6 +640,13 @@ set_blit_scissor(struct fd_batch *batch, struct fd_ringbuffer *ring)
        blit_scissor.maxx = MIN2(pfb->width, batch->max_scissor.maxx);
        blit_scissor.maxy = MIN2(pfb->height, batch->max_scissor.maxy);
 
+       /* NOTE: blob switches to CP_BLIT instead of CP_EVENT_WRITE:BLIT for
+        * small render targets.  But since we align pitch to binw I think
+        * we can get away avoiding GPU hangs a simpler way, by just rounding
+        * up the blit scissor:
+        */
+       blit_scissor.maxx = MAX2(blit_scissor.maxx, batch->ctx->screen->gmem_alignw);
+
        OUT_PKT4(ring, REG_A6XX_RB_BLIT_SCISSOR_TL, 2);
        OUT_RING(ring,
                         A6XX_RB_BLIT_SCISSOR_TL_X(blit_scissor.minx) |