i965/miptree: Add new clear color BO for winsys aux buffers
authorRafael Antognolli <rafael.antognolli@intel.com>
Thu, 1 Mar 2018 00:11:34 +0000 (16:11 -0800)
committerRafael Antognolli <rafael.antognolli@intel.com>
Thu, 5 Apr 2018 14:42:45 +0000 (07:42 -0700)
Add an extra BO to store clear color when we receive the aux buffer from
the window system. Since we have no control over the aux buffer size in
this case, we need the new BO to store only the clear color.

v5:
 - Better subject (Jordan).
 - Drop alignment from brw_bo_alloc().

Signed-off-by: Rafael Antognolli <rafael.antognolli@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/mesa/drivers/dri/i965/intel_mipmap_tree.c

index d11ae65243fa335b17d5a208a43e925f65c3bae0..89074a649307ede7ade8844e8283be7ade58109c 100644 (file)
@@ -969,6 +969,23 @@ create_ccs_buf_for_image(struct brw_context *brw,
       return false;
    }
 
+   /* On gen10+ we start using an extra space in the aux buffer to store the
+    * indirect clear color. However, if we imported an image from the window
+    * system with CCS, we don't have the extra space at the end of the aux
+    * buffer. So create a new bo here that will store that clear color.
+    */
+   const struct gen_device_info *devinfo = &brw->screen->devinfo;
+   if (devinfo->gen >= 10) {
+      mt->mcs_buf->clear_color_bo =
+         brw_bo_alloc(brw->bufmgr, "clear_color_bo",
+                      brw->isl_dev.ss.clear_color_state_size);
+      if (!mt->mcs_buf->clear_color_bo) {
+         free(mt->mcs_buf);
+         mt->mcs_buf = NULL;
+         return false;
+      }
+   }
+
    mt->mcs_buf->bo = image->bo;
    brw_bo_reference(image->bo);