diff options
author | Kenneth Graunke <[email protected]> | 2018-12-07 10:46:04 -0800 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2019-02-21 10:26:12 -0800 |
commit | a7bc4d60749cc4dd81d46bdfebf2266def389b59 (patch) | |
tree | a6914be2d66e8df7285936dffaa0dc3c95fce6e0 /src/gallium/drivers/iris | |
parent | d0996d5fab6d0ef2ad6e046c2178cfc3488567e7 (diff) |
iris: Add iris_resource fields for aux surfaces
But without fast clears or HiZ per-level tracking just yet.
Diffstat (limited to 'src/gallium/drivers/iris')
-rw-r--r-- | src/gallium/drivers/iris/iris_resource.c | 14 | ||||
-rw-r--r-- | src/gallium/drivers/iris/iris_resource.h | 40 |
2 files changed, 54 insertions, 0 deletions
diff --git a/src/gallium/drivers/iris/iris_resource.c b/src/gallium/drivers/iris/iris_resource.c index f67d8165bdf..5dbc4f7de6c 100644 --- a/src/gallium/drivers/iris/iris_resource.c +++ b/src/gallium/drivers/iris/iris_resource.c @@ -197,11 +197,25 @@ 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); } diff --git a/src/gallium/drivers/iris/iris_resource.h b/src/gallium/drivers/iris/iris_resource.h index 060472f6df3..80bde8a2108 100644 --- a/src/gallium/drivers/iris/iris_resource.h +++ b/src/gallium/drivers/iris/iris_resource.h @@ -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; }; /** |