swr: set an explicit clear_rect if scissor is not enabled.
authorBruce Cherniak <bruce.cherniak@intel.com>
Mon, 26 Jun 2017 15:26:26 +0000 (10:26 -0500)
committerTim Rowley <timothy.o.rowley@intel.com>
Mon, 26 Jun 2017 16:30:08 +0000 (11:30 -0500)
Fix regression of "no rendering" on simple apps like glxgears by
setting an explicit full surface clear_rect when scissor is not
enabled.

This regressed with commit 00173d91 "st/mesa: don't set 16
scissors and 16 viewports if they're unused" due to an assumption
that a default scissor rect is always set, which was the case prior
to this optimization.

Reviewed-by: Tim Rowley <timothy.o.rowley@intel.com>
src/gallium/drivers/swr/swr_clear.cpp

index 53f4e02d4525d2326f2ca983cbd6e3c7c881f867..3a35805a7acccefdd9cd051c0afe5890fd8b7d8f 100644 (file)
@@ -68,11 +68,19 @@ swr_clear(struct pipe_context *pipe,
    ((union pipe_color_union *)color)->f[3] = 1.0; /* cast off your const'd-ness */
 #endif
 
+   SWR_RECT clear_rect;
+   /* If enabled, clear to scissor; otherwise clear full surface */
+   if (ctx->rasterizer && ctx->rasterizer->scissor) {
+      clear_rect = ctx->swr_scissor;
+   } else {
+      clear_rect = {0, 0, (int32_t)fb->width, (int32_t)fb->height};
+   }
+
    for (unsigned i = 0; i < layers; ++i) {
       swr_update_draw_context(ctx);
       SwrClearRenderTarget(ctx->swrContext, clearMask, i,
                            color->f, depth, stencil,
-                           ctx->swr_scissor);
+                           clear_rect);
 
       // Mask out the attachments that are out of layers.
       if (fb->zsbuf &&