anv: Add and use color auxiliary buffer helpers
authorNanley Chery <nanley.g.chery@intel.com>
Tue, 4 Apr 2017 16:56:16 +0000 (09:56 -0700)
committerNanley Chery <nanley.g.chery@intel.com>
Mon, 26 Jun 2017 18:09:12 +0000 (11:09 -0700)
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>
src/intel/vulkan/anv_blorp.c
src/intel/vulkan/anv_private.h

index d28ea9092861ff443482702c0d9eecef6801997c..292cee8e3e0564b46b1b0d674e7e730b008b65d0 100644 (file)
@@ -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);
index 8079378ae633779b99222dc01b505248e21f9216..1110088b82f2301edcf3fd0cb9a3360d4010161d 100644 (file)
@@ -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,