summaryrefslogtreecommitdiff
path: root/src/intel
diff options
context:
space:
mode:
authorNanley Chery <nanley.g.chery@intel.com>2017-04-04 09:56:16 -0700
committerNanley Chery <nanley.g.chery@intel.com>2017-06-26 11:09:12 -0700
commitbc838fc759dd268aebf31f91daf6c18ce76610ee (patch)
tree92d175ad09da0d1b5d3922a2a52f626e58f4482e /src/intel
parent8aaa13467dc289d35dc7900ab9fab9a7689c4178 (diff)
anv: Add and use color auxiliary buffer helpers
v2: - Check for aux levels in layer helper (Jason Ekstrand) - Don't assert aux is present, return 0 if it isn't. - Use the helpers. v3: - Make the helpers aspect-agnostic (Jason Ekstrand) - Drop anv_image_has_color_aux() Signed-off-by: Nanley Chery <nanley.g.chery@intel.com> Reviewed-by: Iago Toral Quiroga <itoral@igalia.com> (v2) Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Diffstat (limited to 'src/intel')
-rw-r--r--src/intel/vulkan/anv_blorp.c3
-rw-r--r--src/intel/vulkan/anv_private.h29
2 files changed, 32 insertions, 0 deletions
diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c
index d28ea909286..292cee8e3e0 100644
--- a/src/intel/vulkan/anv_blorp.c
+++ b/src/intel/vulkan/anv_blorp.c
@@ -1491,6 +1491,9 @@ anv_image_ccs_clear(struct anv_cmd_buffer *cmd_buffer,
blorp_layer_count = anv_get_layerCount(image, subresourceRange);
}
+ assert(level < anv_image_aux_levels(image));
+ assert(blorp_base_layer + blorp_layer_count <=
+ anv_image_aux_layers(image, level));
blorp_fast_clear(&batch, &surf, surf.surf->format,
level, blorp_base_layer, blorp_layer_count,
0, 0, extent.width, extent.height);
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index 8079378ae63..1110088b82f 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -2083,6 +2083,35 @@ struct anv_image {
struct anv_surface aux_surface;
};
+/* Returns the number of auxiliary buffer levels attached to an image. */
+static inline uint8_t
+anv_image_aux_levels(const struct anv_image * const image)
+{
+ assert(image);
+ return image->aux_surface.isl.size > 0 ? image->aux_surface.isl.levels : 0;
+}
+
+/* Returns the number of auxiliary buffer layers attached to an image. */
+static inline uint32_t
+anv_image_aux_layers(const struct anv_image * const image,
+ const uint8_t miplevel)
+{
+ assert(image);
+
+ /* The miplevel must exist in the main buffer. */
+ assert(miplevel < image->levels);
+
+ if (miplevel >= anv_image_aux_levels(image)) {
+ /* There are no layers with auxiliary data because the miplevel has no
+ * auxiliary data.
+ */
+ return 0;
+ } else {
+ return MAX2(image->aux_surface.isl.logical_level0_px.array_len,
+ image->aux_surface.isl.logical_level0_px.depth >> miplevel);
+ }
+}
+
/* Returns true if a HiZ-enabled depth buffer can be sampled from. */
static inline bool
anv_can_sample_with_hiz(const struct gen_device_info * const devinfo,