iris: Add iris_resource fields for aux surfaces
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 7 Dec 2018 18:46:04 +0000 (10:46 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:12 +0000 (10:26 -0800)
But without fast clears or HiZ per-level tracking just yet.

src/gallium/drivers/iris/iris_resource.c
src/gallium/drivers/iris/iris_resource.h

index f67d8165bdfa01ca51a5c771d2b8ae9814792249..5dbc4f7de6cc6fef66276b5e314d68e315b3a44c 100644 (file)
@@ -196,12 +196,26 @@ iris_get_depth_stencil_resources(struct pipe_resource *res,
    }
 }
 
+static void
+iris_resource_disable_aux(struct iris_resource *res)
+{
+   iris_bo_unreference(res->aux.bo);
+   free(res->aux.state);
+
+   res->aux.usage = ISL_AUX_USAGE_NONE;
+   res->aux.surf.size_B = 0;
+   res->aux.bo = NULL;
+   res->aux.state = NULL;
+}
+
 static void
 iris_resource_destroy(struct pipe_screen *screen,
                       struct pipe_resource *resource)
 {
    struct iris_resource *res = (struct iris_resource *)resource;
 
+   iris_resource_disable_aux(res);
+
    iris_bo_unreference(res->bo);
    free(res);
 }
index 060472f6df3997755add1fb483d258e295f0116e..80bde8a2108670097d6e193028d96e68a8da29e5 100644 (file)
@@ -67,6 +67,46 @@ struct iris_resource {
     * in the past.  Only meaningful for PIPE_BUFFER; used for flushing.
     */
    unsigned bind_history;
+
+   /**
+    * Auxiliary buffer information (CCS, MCS, or HiZ).
+    */
+   struct {
+      /** The surface layout for the auxiliary buffer. */
+      struct isl_surf surf;
+
+      /** The buffer object containing the auxiliary data. */
+      struct iris_bo *bo;
+
+      /** Offset into 'bo' where the auxiliary surface starts. */
+      uint32_t offset;
+
+      /**
+       * \brief The type of auxiliary compression used by this resource.
+       *
+       * This describes the type of auxiliary compression that is intended to
+       * be used by this resource.  An aux usage of ISL_AUX_USAGE_NONE means
+       * that auxiliary compression is permanently disabled.  An aux usage
+       * other than ISL_AUX_USAGE_NONE does not imply that auxiliary
+       * compression will always be enabled for this surface.
+       */
+      enum isl_aux_usage usage;
+
+      /**
+       * A bitfield of ISL_AUX_* modes that might this resource might use.
+       *
+       * For example, a surface might use both CCS_E and CCS_D at times.
+       */
+      unsigned possible_usages;
+
+      /**
+       * \brief Maps miptree slices to their current aux state.
+       *
+       * This two-dimensional array is indexed as [level][layer] and stores an
+       * aux state for each slice.
+       */
+      enum isl_aux_state **state;
+   } aux;
 };
 
 /**