Fix int64 robustness bugs
First bug: VkImage and VkImageView that use different formats without
specifying the VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag on the image.
Second bug: Using a shader with a multisampled storage image without
checking the shaderStorageImageMultisample feature.
Affects:
dEQP-VK.robustness.image_robustness.*.r64i.*
Components: Vulkan
VK-GL-CTS issue: 3680
Change-Id: I7b984c3c7b6b2ee551618b7a32d4a841e942cd95
diff --git a/external/vulkancts/modules/vulkan/robustness/vktRobustnessExtsTests.cpp b/external/vulkancts/modules/vulkan/robustness/vktRobustnessExtsTests.cpp
index d4b6dc2..14c3e16 100644
--- a/external/vulkancts/modules/vulkan/robustness/vktRobustnessExtsTests.cpp
+++ b/external/vulkancts/modules/vulkan/robustness/vktRobustnessExtsTests.cpp
@@ -442,6 +442,11 @@
if (m_data.nullDescriptor && !robustness2Features.nullDescriptor)
TCU_THROW(NotSupportedError, "nullDescriptor not supported");
+ // The fill shader for 64-bit multisample image tests uses a storage image.
+ if (m_data.samples > VK_SAMPLE_COUNT_1_BIT && formatIsR64(m_data.format) &&
+ !features2.features.shaderStorageImageMultisample)
+ TCU_THROW(NotSupportedError, "shaderStorageImageMultisample not supported");
+
if ((m_data.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) &&
m_data.samples != VK_SAMPLE_COUNT_1_BIT &&
!features2.features.shaderStorageImageMultisample)
@@ -1755,9 +1760,13 @@
vector<BufferViewHandleSp> bufferViews(1);
- VkImageCreateFlags imageCreateFlags = 0;
+ VkImageCreateFlags mutableFormatFlag = 0;
+ // The 64-bit image tests use a view format which differs from the image.
+ if (formatIsR64(m_data.format))
+ mutableFormatFlag = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT;
+ VkImageCreateFlags imageCreateFlags = mutableFormatFlag;
if (m_data.viewType == VK_IMAGE_VIEW_TYPE_CUBE || m_data.viewType == VK_IMAGE_VIEW_TYPE_CUBE_ARRAY)
- imageCreateFlags = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT;
+ imageCreateFlags |= VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT;
const bool featureSampledImage = ((getPhysicalDeviceFormatProperties(m_context.getInstanceInterface(),
m_context.getPhysicalDevice(),
@@ -1770,7 +1779,7 @@
{
VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, // VkStructureType sType;
DE_NULL, // const void* pNext;
- (VkImageCreateFlags)0u, // VkImageCreateFlags flags;
+ mutableFormatFlag, // VkImageCreateFlags flags;
VK_IMAGE_TYPE_2D, // VkImageType imageType;
m_data.format, // VkFormat format;
{