diff --git a/external/vulkancts/framework/vulkan/vkImageUtil.cpp b/external/vulkancts/framework/vulkan/vkImageUtil.cpp index c2953bd851..c55a54a2e6 100644 --- a/external/vulkancts/framework/vulkan/vkImageUtil.cpp +++ b/external/vulkancts/framework/vulkan/vkImageUtil.cpp @@ -474,6 +474,25 @@ bool isPvrtcFormat (VkFormat format) return false; } +bool isPvrtc1Format (VkFormat format) +{ +#ifndef CTS_USES_VULKANSC + switch (format) + { + case VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG: + case VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG: + case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG: + case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG: + return true; + default: + return false; + } +#else + DE_UNREF(format); +#endif + return false; +} + const std::map spirvFormats = { { VK_FORMAT_R32G32B32A32_SFLOAT, "Rgba32f" }, { VK_FORMAT_R32G32_SFLOAT, "Rg32f" }, diff --git a/external/vulkancts/framework/vulkan/vkImageUtil.hpp b/external/vulkancts/framework/vulkan/vkImageUtil.hpp index 7ecb53dcd1..fe13d883ef 100644 --- a/external/vulkancts/framework/vulkan/vkImageUtil.hpp +++ b/external/vulkancts/framework/vulkan/vkImageUtil.hpp @@ -176,6 +176,7 @@ bool isYCbCrFormat (VkFormat format); bool isYCbCrExtensionFormat (VkFormat format); bool isYCbCrConversionFormat (VkFormat format); bool isPvrtcFormat (VkFormat format); +bool isPvrtc1Format (VkFormat format); PlanarFormatDescription getPlanarFormatDescription (VkFormat format); int getPlaneCount (VkFormat format); deUint32 getMipmapCount (VkFormat format, diff --git a/external/vulkancts/modules/vulkan/api/vktApiMemoryRequirementInvarianceTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiMemoryRequirementInvarianceTests.cpp index 6e2723fe35..89f2cd7089 100644 --- a/external/vulkancts/modules/vulkan/api/vktApiMemoryRequirementInvarianceTests.cpp +++ b/external/vulkancts/modules/vulkan/api/vktApiMemoryRequirementInvarianceTests.cpp @@ -180,12 +180,21 @@ ImageAllocator::ImageAllocator (deRandom& random, deBool dedicated, std::vector< else m_colorFormat = (VkFormat)optimalformats[deRandom_getUint32(&random) % optimalformats.size()]; - int widthAlignment = (isYCbCr420Format(m_colorFormat) || isYCbCr422Format(m_colorFormat)) ? 2 : 1; - int heightAlignment = isYCbCr420Format(m_colorFormat) ? 2 : 1; + if (isPvrtc1Format(m_colorFormat)) + { + m_size = tcu::IVec2(pow(2, deRandom_getUint32(&random) % 4), + pow(2, deRandom_getUint32(&random) % 4)); + } + else + { + int widthAlignment = (isYCbCr420Format(m_colorFormat) || isYCbCr422Format(m_colorFormat)) ? 2 : 1; + int heightAlignment = isYCbCr420Format(m_colorFormat) ? 2 : 1; + + // Random small size for causing potential alignment issues + m_size = tcu::IVec2((deRandom_getUint32(&random) % 16 + 3) & ~(widthAlignment - 1), + (deRandom_getUint32(&random) % 16 + 3) & ~(heightAlignment - 1)); + } - // Random small size for causing potential alignment issues - m_size = tcu::IVec2((deRandom_getUint32(&random) % 16 + 3) & ~(widthAlignment - 1), - (deRandom_getUint32(&random) % 16 + 3) & ~(heightAlignment - 1)); // Pick random memory type from the supported set m_memoryType = memoryTypes[deRandom_getUint32(&random) % memoryTypes.size()]; } diff --git a/external/vulkancts/modules/vulkan/vktTestCase.cpp b/external/vulkancts/modules/vulkan/vktTestCase.cpp index 4ab6fb5f90..eccc430351 100644 --- a/external/vulkancts/modules/vulkan/vktTestCase.cpp +++ b/external/vulkancts/modules/vulkan/vktTestCase.cpp @@ -103,6 +103,7 @@ vector filterExtensions (const vector& extensions "VK_NV_representative_fragment_test", "VK_NV_shader_atomic_float16_vector", "VK_MVK_macos_surface", + "VK_IMG_format_pvrtc" }; const char* exclusions[] =