zink: clamp dynamic renderArea to framebuffer size
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Thu, 9 Jun 2022 13:18:08 +0000 (09:18 -0400)
committerMarge Bot <emma+marge@anholt.net>
Tue, 14 Jun 2022 20:12:46 +0000 (20:12 +0000)
it's illegal to have a renderArea larger than the attachments, so perform
clamping to avoid that scenario

Fixes: c81cd989c85 ("zink: use dynamic rendering (most of the time)")

Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16947>

src/gallium/drivers/zink/zink_context.c

index bd790ca..82903ed 100644 (file)
@@ -2051,6 +2051,11 @@ begin_rendering(struct zink_context *ctx)
          else
             ctx->dynamic_fb.attachments[i].loadOp = VK_ATTACHMENT_LOAD_OP_LOAD;
          ctx->gfx_pipeline_state.rendering_formats[i] = surf ? surf->info.format[0] : VK_FORMAT_R8G8B8A8_UNORM;
+         /* use dummy fb size of 1024 if no surf exists */
+         unsigned width = surf ? surf->base.texture->width0 : 1024;
+         unsigned height = surf ? surf->base.texture->height0 : 1024;
+         ctx->dynamic_fb.info.renderArea.extent.width = MIN2(ctx->dynamic_fb.info.renderArea.extent.width, width);
+         ctx->dynamic_fb.info.renderArea.extent.height = MIN2(ctx->dynamic_fb.info.renderArea.extent.height, height);
       }
 
       /* unset depth and stencil info: reset below */