mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 00:00:11 +01:00
vulkan/runtime: add vk_image_subresource_slice_count
vk_image_subresource_slice_count is useful when implementing image
barriers. When maintenance9 is enabled,
VkImageSubresourceRange::{baseArrayLayer,layerCount} specify the
slices, rather than layers, to transition. This helper returns
the number of slices specified in the subresource range, accounting
for the VK_REMAINING_ARRAY_LAYERS sentinel.
Reviewed-by: Lars-Ivar Hesselberg Simonsen <lars-ivar.simonsen@arm.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36176>
This commit is contained in:
parent
d4fdcdc13c
commit
e6d2a426e6
2 changed files with 24 additions and 0 deletions
|
|
@ -284,6 +284,25 @@ vk_image_expand_aspect_mask(const struct vk_image *image,
|
|||
}
|
||||
}
|
||||
|
||||
uint32_t
|
||||
vk_image_subresource_slice_count(const struct vk_device *device,
|
||||
const struct vk_image *image,
|
||||
const VkImageSubresourceLayers *range)
|
||||
{
|
||||
assert(image->image_type == VK_IMAGE_TYPE_3D);
|
||||
|
||||
bool layers_are_slices = device->enabled_features.maintenance9 &&
|
||||
(image->create_flags & VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT);
|
||||
uint32_t slices = u_minify(image->extent.depth, range->mipLevel);
|
||||
|
||||
if (!layers_are_slices) {
|
||||
assert(range->baseArrayLayer == 0);
|
||||
return slices;
|
||||
}
|
||||
return range->layerCount == VK_REMAINING_ARRAY_LAYERS ?
|
||||
slices - range->baseArrayLayer : range->layerCount;
|
||||
}
|
||||
|
||||
VkExtent3D
|
||||
vk_image_extent_to_elements(const struct vk_image *image, VkExtent3D extent)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -143,6 +143,11 @@ vk_image_mip_level_extent(const struct vk_image *image,
|
|||
return extent;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
vk_image_subresource_slice_count(const struct vk_device *device,
|
||||
const struct vk_image *image,
|
||||
const VkImageSubresourceLayers *range);
|
||||
|
||||
/* This is defined as a macro so that it works for both
|
||||
* VkImageSubresourceRange and VkImageSubresourceLayers
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue