if (!imageCompressionControlFeatures.imageCompressionControl)
TCU_THROW(NotSupportedError, "VK_EXT_image_compression_control Image "
"compression control feature not supported.");
+ if (swapchain && !imageCompressionSwapchain.imageCompressionControlSwapchain)
+ TCU_THROW(NotSupportedError, "VK_EXT_image_compression_control_swapchain Image "
+ "compression control feature for swapchains not supported.");
}
-static void validate(Context& context, tcu::ResultCollector& results, VkDevice device, TestParams& testParams,
- VkImage image)
+static void validate(const InstanceInterface& vki, const DeviceInterface& vkd, tcu::ResultCollector& results,
+ VkPhysicalDevice physicalDevice, 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];
}
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;
VkDevice device = context.getDevice();
tcu::TestLog& log = context.getTestContext().getLog();
tcu::ResultCollector results(log);
+ const VkImageUsageFlagBits vkUsage = VK_IMAGE_USAGE_SAMPLED_BIT;
+ 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]{};
}
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)
{
testParams.control.flags = flag.flag;