Fixes for VK_EXT_image_compression_control tests
Fix the validation logic to check planes depending on format, not
compressionControlPlaneCount.
Properly set compressionControlPlaneCount and
pFixedRateFlags depending on compression flags.
Components: Vulkan
VK-GL-CTS issue: 4105
Affects:
dEQP-VK.api.image_compression_control.*
Change-Id: I492febb4163867ee722cd49e75cc8646aa8376f5
diff --git a/external/vulkancts/modules/vulkan/api/vktApiImageCompressionControlTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiImageCompressionControlTests.cpp
index 78c629c..b2c4e73 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiImageCompressionControlTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiImageCompressionControlTests.cpp
@@ -93,14 +93,15 @@
static void validate(Context& context, tcu::ResultCollector& results, VkDevice device, TestParams& testParams,
VkImage image)
{
-
- for (unsigned planeIndex = 0; planeIndex < testParams.control.compressionControlPlaneCount; planeIndex++)
+ constexpr VkImageAspectFlags planeAspects[]{ VK_IMAGE_ASPECT_PLANE_0_BIT, VK_IMAGE_ASPECT_PLANE_1_BIT,
+ VK_IMAGE_ASPECT_PLANE_2_BIT };
+ const bool isYCbCr = isYCbCrFormat(testParams.format);
+ const int numPlanes = isYCbCr ? getPlaneCount(testParams.format) : 1;
+ for (int planeIndex = 0; planeIndex < numPlanes; planeIndex++)
{
VkImageAspectFlags aspect = VK_IMAGE_ASPECT_COLOR_BIT;
- if (isYCbCrFormat(testParams.format))
+ if (isYCbCr)
{
- VkImageAspectFlags planeAspects[]{ VK_IMAGE_ASPECT_PLANE_0_BIT, VK_IMAGE_ASPECT_PLANE_1_BIT,
- VK_IMAGE_ASPECT_PLANE_2_BIT };
aspect = planeAspects[planeIndex];
}
@@ -110,14 +111,19 @@
VkSubresourceLayout2EXT subresourceLayout = initVulkanStructure(&compressionProperties);
context.getDeviceInterface().getImageSubresourceLayout2EXT(device, image, &subresource, &subresourceLayout);
+ VkImageCompressionFixedRateFlagsEXT fixedRateFlags[3] = {
+ VK_IMAGE_COMPRESSION_FIXED_RATE_FLAG_BITS_MAX_ENUM_EXT,
+ VK_IMAGE_COMPRESSION_FIXED_RATE_FLAG_BITS_MAX_ENUM_EXT,
+ VK_IMAGE_COMPRESSION_FIXED_RATE_FLAG_BITS_MAX_ENUM_EXT
+ };
- VkImageCompressionControlEXT compressionEnabled = initVulkanStructure();
- compressionEnabled.compressionControlPlaneCount = testParams.control.compressionControlPlaneCount;
- compressionEnabled.flags = testParams.control.flags;
- VkImageCompressionFixedRateFlagsEXT fixedRateFlags[3] = { VK_IMAGE_COMPRESSION_FIXED_RATE_FLAG_BITS_MAX_ENUM_EXT,
- VK_IMAGE_COMPRESSION_FIXED_RATE_FLAG_BITS_MAX_ENUM_EXT,
- VK_IMAGE_COMPRESSION_FIXED_RATE_FLAG_BITS_MAX_ENUM_EXT };
- compressionEnabled.pFixedRateFlags = fixedRateFlags;
+ VkImageCompressionControlEXT compressionEnabled = initVulkanStructure();
+ compressionEnabled.compressionControlPlaneCount = testParams.control.compressionControlPlaneCount;
+ compressionEnabled.flags = testParams.control.flags;
+ if (compressionEnabled.compressionControlPlaneCount > 0)
+ {
+ compressionEnabled.pFixedRateFlags = fixedRateFlags;
+ }
VkPhysicalDeviceImageFormatInfo2 formatInfo = initVulkanStructure(&compressionEnabled);
formatInfo.format = testParams.format;
@@ -133,7 +139,6 @@
if (testParams.useExtension)
{
-
if ((compressionPropertiesSupported.imageCompressionFixedRateFlags &
compressionProperties.imageCompressionFixedRateFlags) !=
compressionProperties.imageCompressionFixedRateFlags)
@@ -217,19 +222,25 @@
VkDevice device = context.getDevice();
tcu::TestLog& log = context.getTestContext().getLog();
tcu::ResultCollector results(log);
+ const bool is_fixed_rate_ex = testParams.control.flags == VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT;
+ const uint32_t numPlanes = isYCbCrFormat(testParams.format) ? getPlaneCount(testParams.format) : 1;
+
+ testParams.control.compressionControlPlaneCount = is_fixed_rate_ex ? numPlanes : 0;
VkImageCompressionFixedRateFlagsEXT planeFlags[3]{};
- for (unsigned i{}; i < (testParams.control.flags == VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT ? 24 : 1); i++)
+ for (unsigned i{}; i < (is_fixed_rate_ex ? 24 : 1); i++)
{
-
planeFlags[0] ^= 3 << i;
planeFlags[1] ^= 5 << i;
planeFlags[2] ^= 7 << i;
- if (testParams.control.flags == VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT)
+
+ if (is_fixed_rate_ex)
{
+ testParams.control.compressionControlPlaneCount = numPlanes;
testParams.control.pFixedRateFlags = planeFlags;
}
+
const vk::VkExternalMemoryImageCreateInfo externalCreateInfo = {
vk::VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO, &testParams.control,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
@@ -276,16 +287,17 @@
VkExtent3D extent = { 16, 16, 1 };
tcu::TestLog& log = context.getTestContext().getLog();
tcu::ResultCollector results(log);
+ const bool is_fixed_rate_ex = testParams.control.flags == VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT;
VkImageCompressionFixedRateFlagsEXT planeFlags[3]{};
- for (unsigned i{}; i < (testParams.control.flags == VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT ? 24 : 1); i++)
+ for (unsigned i{}; i < (is_fixed_rate_ex ? 24 : 1); i++)
{
-
planeFlags[0] ^= 3 << i;
planeFlags[1] ^= 5 << i;
planeFlags[2] ^= 7 << i;
- if (testParams.control.flags == VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT)
+
+ if (is_fixed_rate_ex)
{
testParams.control.pFixedRateFlags = planeFlags;
}
@@ -324,6 +336,8 @@
void addImageCompressionControlTests(tcu::TestCaseGroup* group, TestParams testParams)
{
+ const bool is_fixed_rate_ex = testParams.control.flags == VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT;
+
static const struct
{
VkFormat begin;
@@ -349,8 +363,10 @@
{
if (isCompressedFormat(testParams.format))
continue;
- testParams.control.compressionControlPlaneCount =
- isYCbCrFormat(testParams.format) ? getPlaneCount(testParams.format) : 1;
+
+ const uint32_t numPlanes = isYCbCrFormat(testParams.format) ? getPlaneCount(testParams.format) : 1;
+ testParams.control.compressionControlPlaneCount = is_fixed_rate_ex ? numPlanes : 0;
+
const char* const enumName = getFormatName(testParams.format);
const string caseName = de::toLower(string(enumName).substr(10));
addFunctionCase(group, caseName, enumName, imageCreateTest, testParams);
@@ -379,7 +395,7 @@
{
const char* name;
VkImageCompressionFlagsEXT flag;
- } compression_flags[] = {
+ } constexpr compression_flags[] = {
{ "default", VK_IMAGE_COMPRESSION_DEFAULT_EXT },
{ "fixed_rate_default", VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT },
{ "disabled", VK_IMAGE_COMPRESSION_DISABLED_EXT },
@@ -395,8 +411,6 @@
}
group->addChild(subgroup);
- testParams.control.compressionControlPlaneCount = 1;
-
subgroup = new tcu::TestCaseGroup(testCtx, "android_hardware_buffer",
"Test creating Android Hardware buffer with compression control struct");
for (auto& flag : compression_flags)