diff options
author | Nanley Chery <[email protected]> | 2017-04-04 09:56:16 -0700 |
---|---|---|
committer | Nanley Chery <[email protected]> | 2017-06-26 11:09:12 -0700 |
commit | bc838fc759dd268aebf31f91daf6c18ce76610ee (patch) | |
tree | 92d175ad09da0d1b5d3922a2a52f626e58f4482e /src/intel | |
parent | 8aaa13467dc289d35dc7900ab9fab9a7689c4178 (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 <[email protected]>
Reviewed-by: Iago Toral Quiroga <[email protected]> (v2)
Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/intel')
-rw-r--r-- | src/intel/vulkan/anv_blorp.c | 3 | ||||
-rw-r--r-- | src/intel/vulkan/anv_private.h | 29 |
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, |