nvk: Handle zero color attachments better
authorFaith Ekstrand <faith.ekstrand@collabora.com>
Tue, 31 Jan 2023 02:12:02 +0000 (20:12 -0600)
committerMarge Bot <emma+marge@anholt.net>
Fri, 4 Aug 2023 21:32:01 +0000 (21:32 +0000)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>

src/nouveau/vulkan/nvk_cmd_draw.c

index a8348b9..f55c094 100644 (file)
@@ -367,7 +367,6 @@ nvk_CmdBeginRendering(VkCommandBuffer commandBuffer,
 {
    VK_FROM_HANDLE(nvk_cmd_buffer, cmd, commandBuffer);
    struct nvk_rendering_state *render = &cmd->state.gfx.render;
-   struct nv_push *p = nvk_cmd_buffer_push(cmd, 23 + pRenderingInfo->colorAttachmentCount * 10);
 
    memset(render, 0, sizeof(*render));
 
@@ -381,16 +380,6 @@ nvk_CmdBeginRendering(VkCommandBuffer commandBuffer,
       render->view_mask ? util_last_bit(render->view_mask) :
                           render->layer_count;
 
-   P_MTHD(p, NV9097, SET_SURFACE_CLIP_HORIZONTAL);
-   P_NV9097_SET_SURFACE_CLIP_HORIZONTAL(p, {
-      .x       = render->area.offset.x,
-      .width   = render->area.extent.width,
-   });
-   P_NV9097_SET_SURFACE_CLIP_VERTICAL(p, {
-      .y       = render->area.offset.y,
-      .height  = render->area.extent.height,
-   });
-
    render->color_att_count = pRenderingInfo->colorAttachmentCount;
    for (uint32_t i = 0; i < render->color_att_count; i++) {
       nvk_attachment_init(&render->color_att[i],
@@ -408,6 +397,18 @@ nvk_CmdBeginRendering(VkCommandBuffer commandBuffer,
        render->stencil_att.iview == NULL)
       render->color_att_count = 1;
 
+   struct nv_push *p = nvk_cmd_buffer_push(cmd, render->color_att_count * 10 + 23);
+
+   P_MTHD(p, NV9097, SET_SURFACE_CLIP_HORIZONTAL);
+   P_NV9097_SET_SURFACE_CLIP_HORIZONTAL(p, {
+      .x       = render->area.offset.x,
+      .width   = render->area.extent.width,
+   });
+   P_NV9097_SET_SURFACE_CLIP_VERTICAL(p, {
+      .y       = render->area.offset.y,
+      .height  = render->area.extent.height,
+   });
+
    for (uint32_t i = 0; i < render->color_att_count; i++) {
       if (render->color_att[i].iview) {
          const struct nvk_image_view *iview = render->color_att[i].iview;