YCbCr image views need a VkSamplerYcbcrConversionInfo
authorTom Cooper <tom.cooper@arm.com>
Wed, 25 Oct 2017 06:26:39 +0000 (08:26 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Fri, 27 Oct 2017 12:05:34 +0000 (08:05 -0400)
Ensure the image views are created using the
VkSamplerYcbcrConversionInfo object via the pNext
chaining, as this is mandated by the Spec.

Affects:
dEQP-VK.ycbcr.query.*

Components: Vulkan

VK-GL-CTS issue: 788

Change-Id: If641b08432c26ca5b32c084c4c0b9c7f935bcb94

external/vulkancts/modules/vulkan/ycbcr/vktYCbCrImageQueryTests.cpp

index 4a72175..102f79e 100644 (file)
@@ -168,12 +168,20 @@ Move<VkImage> createTestImage (const DeviceInterface&     vkd,
 Move<VkImageView> createImageView (const DeviceInterface&      vkd,
                                                                   VkDevice                                     device,
                                                                   VkImage                                      image,
-                                                                  VkFormat                                     format)
+                                                                  VkFormat                                     format,
+                                                                  VkSamplerYcbcrConversion     conversion)
 {
+       const VkSamplerYcbcrConversionInfo                              samplerConversionInfo   =
+       {
+               VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO,
+               DE_NULL,
+               conversion
+       };
+
        const VkImageViewCreateInfo     viewInfo        =
        {
                VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
-               DE_NULL,
+               (conversion != DE_NULL) ? &samplerConversionInfo : DE_NULL,
                (VkImageViewCreateFlags)0,
                image,
                VK_IMAGE_VIEW_TYPE_2D,
@@ -198,7 +206,8 @@ public:
                                                                                                 Allocator&                                     allocator,
                                                                                                 VkFormat                                       format,
                                                                                                 const UVec2&                           size,
-                                                                                                const VkImageCreateFlags       createFlags);
+                                                                                                const VkImageCreateFlags       createFlags,
+                                                                                                VkSamplerYcbcrConversion       conversion);
 
        const UVec2&                            getSize                 (void) const { return m_size;           }
        VkImageView                                     getImageView    (void) const { return *m_imageView; }
@@ -215,11 +224,12 @@ TestImage::TestImage (const DeviceInterface&      vkd,
                                          Allocator&                            allocator,
                                          VkFormat                                      format,
                                          const UVec2&                          size,
-                                         const VkImageCreateFlags      createFlags)
+                                         const VkImageCreateFlags      createFlags,
+                                         VkSamplerYcbcrConversion      conversion)
        : m_size                (size)
        , m_image               (createTestImage(vkd, device, format, size, createFlags))
        , m_allocations (allocateAndBindImageMemory(vkd, device, allocator, *m_image, format, createFlags))
-       , m_imageView   (createImageView(vkd, device, *m_image, format))
+       , m_imageView   (createImageView(vkd, device, *m_image, format, conversion))
 {
 }
 
@@ -409,10 +419,10 @@ tcu::TestStatus testImageQuery (Context& context, TestParameters params)
                testImages.resize(testSizes.size());
 
                for (size_t ndx = 0; ndx < testSizes.size(); ++ndx)
-                       testImages[ndx] = TestImageSp(new TestImage(vkd, device, context.getDefaultAllocator(), params.format, testSizes[ndx], params.flags));
+                       testImages[ndx] = TestImageSp(new TestImage(vkd, device, context.getDefaultAllocator(), params.format, testSizes[ndx], params.flags, *conversion));
        }
        else
-               testImages.push_back(TestImageSp(new TestImage(vkd, device, context.getDefaultAllocator(), params.format, UVec2(16, 18), params.flags)));
+               testImages.push_back(TestImageSp(new TestImage(vkd, device, context.getDefaultAllocator(), params.format, UVec2(16, 18), params.flags, *conversion)));
 
        {
                UniquePtr<ShaderExecutor>       executor        (createExecutor(context, params.shaderType, getShaderSpec(params), *descLayout));
@@ -559,7 +569,7 @@ tcu::TestStatus testImageQueryLod (Context& context, TestParameters params)
                testImages.resize(testSizes.size());
 
                for (size_t ndx = 0; ndx < testSizes.size(); ++ndx)
-                       testImages[ndx] = TestImageSp(new TestImage(vkd, device, context.getDefaultAllocator(), params.format, testSizes[ndx], params.flags));
+                       testImages[ndx] = TestImageSp(new TestImage(vkd, device, context.getDefaultAllocator(), params.format, testSizes[ndx], params.flags, *conversion));
        }
 
        {