RelaxedPrecision tests for image extend operands
authorGraeme Leese <gleese@broadcom.com>
Mon, 7 Oct 2019 17:23:10 +0000 (18:23 +0100)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Fri, 11 Oct 2019 09:44:57 +0000 (05:44 -0400)
Where the decoration makes sense (that is, for images with fewer than 16
bits per channel), add test that use the RelaxedPrecision decoration.

Components: Vulkan
VK-GL-CTS issue: 2038
New tests: dEQP-VK.image.extend_operands_spirv1p4.*_relaxed_*

Change-Id: I26e42a1d7bb807616ac50ce461dd37a55effd6f8
(cherry picked from commit aaf3d22fa09cc800af076dd2d47124dd1659bcd1)

android/cts/master/vk-master.txt
external/vulkancts/modules/vulkan/image/vktImageLoadStoreTests.cpp
external/vulkancts/mustpass/master/vk-default-no-waivers.txt
external/vulkancts/mustpass/master/vk-default.txt

index 181cd00..bd32617 100644 (file)
@@ -383780,32 +383780,51 @@ dEQP-VK.image.extended_usage_bit.texture_write.r32g32b32a32_sint
 dEQP-VK.image.extended_usage_bit.texture_write.r32g32b32a32_sfloat
 dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_uint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32_uint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_sint_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_relaxed_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_relaxed_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32_sint_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.a2b10g10r10_uint_pack32_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.a2b10g10r10_uint_pack32_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32g32_uint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32g32_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32g32_sint_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_relaxed_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_sint_relaxed_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_relaxed_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_force_sign_extend
 dEQP-VK.wsi.android.surface.create
 dEQP-VK.wsi.android.surface.create_custom_allocator
 dEQP-VK.wsi.android.surface.create_simulate_oom
index af27de8..bc122db 100644 (file)
@@ -1719,7 +1719,8 @@ public:
                                                                                                         const std::string&                                     name,
                                                                                                         const Texture                                          texture,
                                                                                                         const VkFormat                                         format,
-                                                                                                        const bool                                                     signedInt);
+                                                                                                        const bool                                                     signedInt,
+                                                                                                        const bool                                                     relaxedPrecision);
 
        void                                    checkSupport                    (Context&                               context) const;
        void                                    initPrograms                    (SourceCollections&             programCollection) const;
@@ -1729,17 +1730,20 @@ private:
        const Texture                                   m_texture;
        VkFormat                                                m_format;
        bool                                                    m_operandForce; // Use an operand that doesn't match SampledType?
+       bool                                                    m_relaxedPrecision;
 };
 
 ImageExtendOperandTest::ImageExtendOperandTest (tcu::TestContext&                              testCtx,
                                                                                                const std::string&                              name,
                                                                                                const Texture                                   texture,
                                                                                                const VkFormat                                  format,
-                                                                                               const bool                                              operandForce)
+                                                                                               const bool                                              operandForce,
+                                                                                               const bool                                              relaxedPrecision)
        : TestCase                                              (testCtx, name, "")
        , m_texture                                             (texture)
        , m_format                                              (format)
        , m_operandForce                                (operandForce)
+       , m_relaxedPrecision                    (relaxedPrecision)
 {
 }
 
@@ -1778,6 +1782,8 @@ void ImageExtendOperandTest::initPrograms (SourceCollections& programCollection)
                "OpDecorate %src_image_ptr Binding 0\n"
                "OpDecorate %src_image_ptr NonWritable\n"
 
+               "${relaxed_precision}"
+
                "OpDecorate %dst_image_ptr DescriptorSet 0\n"
                "OpDecorate %dst_image_ptr Binding 1\n"
                "OpDecorate %dst_image_ptr NonReadable\n"
@@ -1856,13 +1862,16 @@ void ImageExtendOperandTest::initPrograms (SourceCollections& programCollection)
        auto it = formatDataMap.find(m_format);
        DE_ASSERT (it != formatDataMap.end());          // Missing int format data
        auto spirvImageFormat = it->second.spirvImageFormat;
-       auto isExtendedFormat = it->second.isExtendedFormat;
 
        // Request additional capability when needed
        std::string capability = "";
-       if (isExtendedFormat)
+       if (it->second.isExtendedFormat)
                capability += "OpCapability StorageImageExtendedFormats\n";
 
+       std::string relaxed = "";
+       if (m_relaxedPrecision)
+               relaxed += "OpDecorate %src_image_ptr RelaxedPrecision\n";
+
        // Use i32 SampledType only for signed images and only where we're not forcing
        // the signedness usingthe SignExtend operand. Everything else uses u32.
        std::string readTypePostfix = (isSigned && !m_operandForce) ? "i32" : "u32";
@@ -1874,6 +1883,7 @@ void ImageExtendOperandTest::initPrograms (SourceCollections& programCollection)
                { "image_var_id",                       "%src_image_ptr" },
                { "image_id",                           "%src_image" },
                { "capability",                         capability },
+               { "relaxed_precision",          relaxed },
                { "image_format",                       spirvImageFormat },
                { "sampled_type",                       (std::string("%type_") + readTypePostfix) },
                { "read_vect4_type",            (std::string("%type_vec4_") + readTypePostfix) },
@@ -2157,6 +2167,13 @@ de::MovePtr<TestCase> createImageQualifierRestrictCase (tcu::TestContext& testCt
        return de::MovePtr<TestCase>(new LoadStoreTest(testCtx, name, "", texture, format, format, LoadStoreTest::FLAG_RESTRICT_IMAGES | LoadStoreTest::FLAG_DECLARE_IMAGE_FORMAT_IN_SHADER));
 }
 
+static bool relaxedOK(VkFormat format)
+{
+       tcu::IVec4 bitDepth = tcu::getTextureFormatBitDepth(mapVkFormat(format));
+       int maxBitDepth = deMax32(deMax32(bitDepth[0], bitDepth[1]), deMax32(bitDepth[2], bitDepth[3]));
+       return maxBitDepth <= 16;
+}
+
 tcu::TestCaseGroup* createImageExtendOperandsTests(tcu::TestContext& testCtx)
 {
        de::MovePtr<tcu::TestCaseGroup> testGroup(new tcu::TestCaseGroup(testCtx, "extend_operands_spirv1p4", "Cases with SignExtend and ZeroExtend"));
@@ -2168,11 +2185,18 @@ tcu::TestCaseGroup* createImageExtendOperandsTests(tcu::TestContext& testCtx)
                if (!isIntFormat(format) && !isUintFormat(format))
                        continue;
 
-               const std::string name = getFormatShortString(format);
-               testGroup->addChild(new ImageExtendOperandTest(testCtx, name + "_matching_extend", texture, format, false));
-               // For signed types test both using the sign bit in SPIR-V and the new operand
-               if (isIntFormat(format))
-                       testGroup->addChild(new ImageExtendOperandTest(testCtx, name + "_force_sign_extend", texture, format, true));
+               for (int prec = 0; prec < 2; prec++)
+               {
+                       bool relaxedPrecision = (prec != 0);
+                       if (relaxedPrecision && !relaxedOK(format))
+                               continue;
+
+                       const std::string name = getFormatShortString(format) + (relaxedPrecision ? "_relaxed" : "");
+                       testGroup->addChild(new ImageExtendOperandTest(testCtx, name + "_matching_extend", texture, format, false, relaxedPrecision));
+                       // For signed types test both using the sign bit in SPIR-V and the new operand
+                       if (isIntFormat(format))
+                               testGroup->addChild(new ImageExtendOperandTest(testCtx, name + "_force_sign_extend", texture, format, true, relaxedPrecision));
+               }
        }
 
        return testGroup.release();
index 31a459c..06e3384 100644 (file)
@@ -383797,32 +383797,51 @@ dEQP-VK.image.extended_usage_bit.texture_write.r32g32b32a32_sint
 dEQP-VK.image.extended_usage_bit.texture_write.r32g32b32a32_sfloat
 dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_uint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32_uint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_sint_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_relaxed_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_relaxed_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32_sint_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.a2b10g10r10_uint_pack32_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.a2b10g10r10_uint_pack32_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32g32_uint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32g32_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32g32_sint_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_relaxed_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_sint_relaxed_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_relaxed_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_force_sign_extend
 dEQP-VK.wsi.xlib.surface.create
 dEQP-VK.wsi.xlib.surface.create_custom_allocator
 dEQP-VK.wsi.xlib.surface.create_simulate_oom
index 272518a..02b0f42 100644 (file)
@@ -383758,32 +383758,51 @@ dEQP-VK.image.extended_usage_bit.texture_write.r32g32b32a32_sint
 dEQP-VK.image.extended_usage_bit.texture_write.r32g32b32a32_sfloat
 dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_uint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32_uint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_sint_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_relaxed_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_relaxed_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32_sint_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.a2b10g10r10_uint_pack32_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.a2b10g10r10_uint_pack32_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32g32_uint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_uint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32g32_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r32g32_sint_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_relaxed_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_sint_relaxed_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_relaxed_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_force_sign_extend
 dEQP-VK.wsi.xlib.surface.create
 dEQP-VK.wsi.xlib.surface.create_custom_allocator
 dEQP-VK.wsi.xlib.surface.create_simulate_oom