tests: Fix ImageAspectMask usage for vk_blit_tests operation.
Remove code that forced a single bit in the image aspect masks
which allows tests to work correctly on devices that use
24/8 depth/stencil buffers.
Add checks for proper usage according to spec.
Change-Id: Ie0a5d70c4d5e286f96c2e4376f46ea66a6d82656
diff --git a/tests/vktestbinding.cpp b/tests/vktestbinding.cpp
index 2acb162..8b5ce26 100644
--- a/tests/vktestbinding.cpp
+++ b/tests/vktestbinding.cpp
@@ -598,7 +598,7 @@
Image::subresource_layout(const VkImageSubresourceLayers &subrescopy) const {
VkSubresourceLayout data;
VkImageSubresource subres =
- subresource(image_aspect(subrescopy.aspectMask), subrescopy.mipLevel,
+ subresource(subrescopy.aspectMask, subrescopy.mipLevel,
subrescopy.baseArrayLayer);
size_t size = sizeof(data);
vkGetImageSubresourceLayout(device(), handle(), &subres, &data);
diff --git a/tests/vktestbinding.h b/tests/vktestbinding.h
index 7ff4661..361c029 100644
--- a/tests/vktestbinding.h
+++ b/tests/vktestbinding.h
@@ -494,14 +494,13 @@
}
static VkImageCreateInfo create_info();
- static VkImageAspectFlagBits image_aspect(VkImageAspectFlags flags);
- static VkImageSubresource subresource(VkImageAspectFlagBits aspect,
+ static VkImageSubresource subresource(VkImageAspectFlags aspect,
uint32_t mip_level,
uint32_t array_layer);
static VkImageSubresource subresource(const VkImageSubresourceRange &range,
uint32_t mip_level,
uint32_t array_layer);
- static VkImageSubresourceLayers subresource(VkImageAspectFlagBits aspect,
+ static VkImageSubresourceLayers subresource(VkImageAspectFlags aspect,
uint32_t mip_level,
uint32_t array_layer,
uint32_t array_size);
@@ -775,10 +774,13 @@
return info;
}
-inline VkImageSubresource Image::subresource(VkImageAspectFlagBits aspect,
+inline VkImageSubresource Image::subresource(VkImageAspectFlags aspect,
uint32_t mip_level,
uint32_t array_layer) {
VkImageSubresource subres = {};
+ if (aspect == 0) {
+ assert(!"Invalid VkImageAspectFlags");
+ }
subres.aspectMask = aspect;
subres.mipLevel = mip_level;
subres.arrayLayer = array_layer;
@@ -788,16 +790,26 @@
inline VkImageSubresource
Image::subresource(const VkImageSubresourceRange &range, uint32_t mip_level,
uint32_t array_layer) {
- return subresource(image_aspect(range.aspectMask),
+ return subresource(range.aspectMask,
range.baseMipLevel + mip_level,
range.baseArrayLayer + array_layer);
}
-inline VkImageSubresourceLayers Image::subresource(VkImageAspectFlagBits aspect,
+inline VkImageSubresourceLayers Image::subresource(VkImageAspectFlags aspect,
uint32_t mip_level,
uint32_t array_layer,
uint32_t array_size) {
VkImageSubresourceLayers subres = {};
+ switch (aspect) {
+ case VK_IMAGE_ASPECT_COLOR_BIT:
+ case VK_IMAGE_ASPECT_DEPTH_BIT:
+ case VK_IMAGE_ASPECT_STENCIL_BIT:
+ case VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT:
+ /* valid */
+ break;
+ default:
+ assert(!"Invalid VkImageAspectFlags");
+ }
subres.aspectMask = aspect;
subres.mipLevel = mip_level;
subres.baseArrayLayer = array_layer;
@@ -805,30 +817,10 @@
return subres;
}
-inline VkImageAspectFlagBits Image::image_aspect(VkImageAspectFlags flags) {
- /*
- * This will map VkImageAspectFlags into a single VkImageAspect.
- * If there is more than one bit defined we'll get an assertion.
- */
- switch (flags) {
- case VK_IMAGE_ASPECT_COLOR_BIT:
- return VK_IMAGE_ASPECT_COLOR_BIT;
- case VK_IMAGE_ASPECT_DEPTH_BIT:
- return VK_IMAGE_ASPECT_DEPTH_BIT;
- case VK_IMAGE_ASPECT_STENCIL_BIT:
- return VK_IMAGE_ASPECT_STENCIL_BIT;
- case VK_IMAGE_ASPECT_METADATA_BIT:
- return VK_IMAGE_ASPECT_METADATA_BIT;
- default:
- assert(!"Invalid VkImageAspect");
- }
- return VK_IMAGE_ASPECT_COLOR_BIT;
-}
-
inline VkImageSubresourceLayers
Image::subresource(const VkImageSubresourceRange &range, uint32_t mip_level,
uint32_t array_layer, uint32_t array_size) {
- return subresource(image_aspect(range.aspectMask),
+ return subresource(range.aspectMask,
range.baseMipLevel + mip_level,
range.baseArrayLayer + array_layer, array_size);
}
@@ -838,6 +830,9 @@
uint32_t base_mip_level, uint32_t mip_levels,
uint32_t base_array_layer, uint32_t num_layers) {
VkImageSubresourceRange range = {};
+ if (aspect_mask == 0) {
+ assert(!"Invalid VkImageAspectFlags");
+ }
range.aspectMask = aspect_mask;
range.baseMipLevel = base_mip_level;
range.levelCount = mip_levels;