Allow higher precision temp buffer in blend tests
authorJari Komppa <jari.komppa@siru.fi>
Mon, 10 Jul 2017 12:31:11 +0000 (15:31 +0300)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 20 Jul 2017 16:20:12 +0000 (12:20 -0400)
Some blend tests were disabled because the results differ on
implementations that store the intermediate values in higher precision,
and only store the final result in the target buffer format.

This change enables the tests, and adds two additional legal results for
the tests. If none of the channels in the target buffer format exceed
8 bits, comparison against a 8888 buffer result is checked. If that
fails, or some channel is wider than 8 bits, comparison against a F64
buffer is done.

The 8888 and F64 results are first converted to the target buffer
format, and comparison threshold is the same as with the direct
comparison (dependent on the target buffer precision).

The higher precision tests are not done for formats where all channels
fit into 8, 16 or 32 bit formats.

Affects:

dEQP-VK.pipeline.blend.format.*

Components: Vulkan

VK-GL-CTS issue: 105

Change-Id: I26d99df151d9602bf9600b1694c3165990b93841

external/vulkancts/modules/vulkan/pipeline/vktPipelineBlendTests.cpp
external/vulkancts/mustpass/1.0.3/src/excluded-tests.txt
external/vulkancts/mustpass/1.0.3/vk-default.txt

index a9e7d63..d7091c0 100644 (file)
@@ -878,15 +878,115 @@ tcu::Vec4 BlendTestInstance::getFormatThreshold (const tcu::TextureFormat& forma
                return threshold;
 }
 
+bool isLegalExpandableFormat (tcu::TextureFormat::ChannelType channeltype)
+{
+       using tcu::TextureFormat;
+
+       switch (channeltype)
+       {
+               case TextureFormat::UNORM_INT24:
+               case TextureFormat::UNORM_BYTE_44:
+               case TextureFormat::UNORM_SHORT_565:
+               case TextureFormat::UNORM_SHORT_555:
+               case TextureFormat::UNORM_SHORT_4444:
+               case TextureFormat::UNORM_SHORT_5551:
+               case TextureFormat::UNORM_SHORT_1555:
+               case TextureFormat::UNORM_INT_101010:
+               case TextureFormat::SNORM_INT_1010102_REV:
+               case TextureFormat::UNORM_INT_1010102_REV:
+               case TextureFormat::UNSIGNED_BYTE_44:
+               case TextureFormat::UNSIGNED_SHORT_565:
+               case TextureFormat::UNSIGNED_SHORT_4444:
+               case TextureFormat::UNSIGNED_SHORT_5551:
+               case TextureFormat::SIGNED_INT_1010102_REV:
+               case TextureFormat::UNSIGNED_INT_1010102_REV:
+               case TextureFormat::UNSIGNED_INT_11F_11F_10F_REV:
+               case TextureFormat::UNSIGNED_INT_999_E5_REV:
+               case TextureFormat::UNSIGNED_INT_24_8:
+               case TextureFormat::UNSIGNED_INT_24_8_REV:
+               case TextureFormat::UNSIGNED_INT24:
+               case TextureFormat::FLOAT_UNSIGNED_INT_24_8_REV:
+                       return true;
+
+               case TextureFormat::SNORM_INT8:
+               case TextureFormat::SNORM_INT16:
+               case TextureFormat::SNORM_INT32:
+               case TextureFormat::UNORM_INT8:
+               case TextureFormat::UNORM_INT16:
+               case TextureFormat::UNORM_INT32:
+               case TextureFormat::UNSIGNED_INT_16_8_8:
+               case TextureFormat::SIGNED_INT8:
+               case TextureFormat::SIGNED_INT16:
+               case TextureFormat::SIGNED_INT32:
+               case TextureFormat::UNSIGNED_INT8:
+               case TextureFormat::UNSIGNED_INT16:
+               case TextureFormat::UNSIGNED_INT32:
+               case TextureFormat::HALF_FLOAT:
+               case TextureFormat::FLOAT:
+               case TextureFormat::FLOAT64:
+                       return false;
+
+               default:
+                       DE_FATAL("Unknown texture format");
+       }
+       return false;
+}
+
+bool isSmallerThan8BitFormat (tcu::TextureFormat::ChannelType channeltype)
+{
+       using tcu::TextureFormat;
+
+       // Note: only checks the legal expandable formats
+       // (i.e, formats that have channels that fall outside
+       // the 8, 16 and 32 bit width)
+       switch (channeltype)
+       {
+               case TextureFormat::UNORM_BYTE_44:
+               case TextureFormat::UNORM_SHORT_565:
+               case TextureFormat::UNORM_SHORT_555:
+               case TextureFormat::UNORM_SHORT_4444:
+               case TextureFormat::UNORM_SHORT_5551:
+               case TextureFormat::UNORM_SHORT_1555:
+               case TextureFormat::UNSIGNED_BYTE_44:
+               case TextureFormat::UNSIGNED_SHORT_565:
+               case TextureFormat::UNSIGNED_SHORT_4444:
+               case TextureFormat::UNSIGNED_SHORT_5551:
+                       return true;
+
+               case TextureFormat::UNORM_INT24:
+               case TextureFormat::UNORM_INT_101010:
+               case TextureFormat::SNORM_INT_1010102_REV:
+               case TextureFormat::UNORM_INT_1010102_REV:
+               case TextureFormat::SIGNED_INT_1010102_REV:
+               case TextureFormat::UNSIGNED_INT_1010102_REV:
+               case TextureFormat::UNSIGNED_INT_11F_11F_10F_REV:
+               case TextureFormat::UNSIGNED_INT_999_E5_REV:
+               case TextureFormat::UNSIGNED_INT_24_8:
+               case TextureFormat::UNSIGNED_INT_24_8_REV:
+               case TextureFormat::UNSIGNED_INT24:
+               case TextureFormat::FLOAT_UNSIGNED_INT_24_8_REV:
+                       return false;
+
+               default:
+                       DE_FATAL("Unknown texture format");
+       }
+
+       return false;
+}
+
 tcu::TestStatus BlendTestInstance::verifyImage (void)
 {
-       const tcu::TextureFormat        tcuColorFormat  = mapVkFormat(m_colorFormat);
-       const tcu::TextureFormat        tcuDepthFormat  = tcu::TextureFormat(); // Undefined depth/stencil format
+       const tcu::TextureFormat        tcuColorFormat          = mapVkFormat(m_colorFormat);
+       const tcu::TextureFormat        tcuColorFormat64        = mapVkFormat(VK_FORMAT_R64G64B64A64_SFLOAT);
+       const tcu::TextureFormat        tcuColorFormat8         = mapVkFormat(VK_FORMAT_R8G8B8A8_UNORM);
+       const tcu::TextureFormat        tcuDepthFormat          = tcu::TextureFormat(); // Undefined depth/stencil format
        const ColorVertexShader         vertexShader;
-       const ColorFragmentShader       fragmentShader  (tcuColorFormat, tcuDepthFormat);
-       const rr::Program                       program                 (&vertexShader, &fragmentShader);
-       ReferenceRenderer                       refRenderer             (m_renderSize.x(), m_renderSize.y(), 1, tcuColorFormat, tcuDepthFormat, &program);
-       bool                                            compareOk               = false;
+       const ColorFragmentShader       fragmentShader          (tcuColorFormat, tcuDepthFormat);
+       const rr::Program                       program                         (&vertexShader, &fragmentShader);
+       ReferenceRenderer                       refRenderer                     (m_renderSize.x(), m_renderSize.y(), 1, tcuColorFormat, tcuDepthFormat, &program);
+       ReferenceRenderer                       refRenderer64           (m_renderSize.x(), m_renderSize.y(), 1, tcuColorFormat64, tcuDepthFormat, &program);
+       ReferenceRenderer                       refRenderer8            (m_renderSize.x(), m_renderSize.y(), 1, tcuColorFormat8, tcuDepthFormat, &program);
+       bool                                            compareOk                       = false;
 
        // Render reference image
        {
@@ -907,13 +1007,26 @@ tcu::TestStatus BlendTestInstance::verifyImage (void)
                        renderState.fragOps.colorMask                           = mapVkColorComponentFlags(BlendTest::s_colorWriteMasks[quadNdx]);
 
                        refRenderer.draw(renderState,
-                                                        rr::PRIMITIVETYPE_TRIANGLES,
-                                                        std::vector<Vertex4RGBA>(m_vertices.begin() + quadNdx * 6,
-                                                                                                         m_vertices.begin() + (quadNdx + 1) * 6));
+                                                       rr::PRIMITIVETYPE_TRIANGLES,
+                                                       std::vector<Vertex4RGBA>(m_vertices.begin() + quadNdx * 6,
+                                                                                                        m_vertices.begin() + (quadNdx + 1) * 6));
+
+                       if (isLegalExpandableFormat(tcuColorFormat.type))
+                       {
+                               refRenderer64.draw(renderState,
+                                                                  rr::PRIMITIVETYPE_TRIANGLES,
+                                                                  std::vector<Vertex4RGBA>(m_vertices.begin() + quadNdx * 6,
+                                                                  m_vertices.begin() + (quadNdx + 1) * 6));
+
+                               if (isSmallerThan8BitFormat(tcuColorFormat.type))
+                                       refRenderer8.draw(renderState,
+                                                                         rr::PRIMITIVETYPE_TRIANGLES,
+                                                                         std::vector<Vertex4RGBA>(m_vertices.begin() + quadNdx * 6,
+                                                                         m_vertices.begin() + (quadNdx + 1) * 6));
+                       }
                }
        }
 
-
        // Compare result with reference image
        {
                const DeviceInterface&                          vk                                                      = m_context.getDeviceInterface();
@@ -923,6 +1036,9 @@ tcu::TestStatus BlendTestInstance::verifyImage (void)
                SimpleAllocator                                         allocator                                       (vk, vkDevice, getPhysicalDeviceMemoryProperties(m_context.getInstanceInterface(), m_context.getPhysicalDevice()));
                de::UniquePtr<tcu::TextureLevel>        result                                          (readColorAttachment(vk, vkDevice, queue, queueFamilyIndex, allocator, *m_colorImage, m_colorFormat, m_renderSize).release());
                const tcu::Vec4                                         threshold                                       (getFormatThreshold(tcuColorFormat));
+               tcu::TextureLevel                                       refLevel;
+
+               refLevel.setStorage(tcuColorFormat, m_renderSize.x(), m_renderSize.y(), 1);
 
                compareOk = tcu::floatThresholdCompare(m_context.getTestContext().getLog(),
                                                                                           "FloatImageCompare",
@@ -931,6 +1047,37 @@ tcu::TestStatus BlendTestInstance::verifyImage (void)
                                                                                           result->getAccess(),
                                                                                           threshold,
                                                                                           tcu::COMPARE_LOG_RESULT);
+
+               if (isLegalExpandableFormat(tcuColorFormat.type))
+               {
+                       if (!compareOk && isSmallerThan8BitFormat(tcuColorFormat.type))
+                       {
+                               // Convert to target format
+                               tcu::copy(refLevel.getAccess(), refRenderer8.getAccess());
+
+                               compareOk = tcu::floatThresholdCompare(m_context.getTestContext().getLog(),
+                                                                                                          "FloatImageCompare",
+                                                                                                          "Image comparison, 8 bit intermediate format",
+                                                                                                          refLevel.getAccess(),
+                                                                                                          result->getAccess(),
+                                                                                                          threshold,
+                                                                                                          tcu::COMPARE_LOG_RESULT);
+                       }
+
+                       if (!compareOk)
+                       {
+                               // Convert to target format
+                               tcu::copy(refLevel.getAccess(), refRenderer64.getAccess());
+
+                               compareOk = tcu::floatThresholdCompare(m_context.getTestContext().getLog(),
+                                                                                                          "FloatImageCompare",
+                                                                                                          "Image comparison, 64 bit intermediate format",
+                                                                                                          refLevel.getAccess(),
+                                                                                                          result->getAccess(),
+                                                                                                          threshold,
+                                                                                                          tcu::COMPARE_LOG_RESULT);
+                       }
+               }
        }
 
        if (compareOk)
index 94cf783..9e46193 100644 (file)
@@ -9,16 +9,6 @@ dEQP-VK.glsl.builtin.precision.reflect.highp_compute.vec4
 dEQP-VK.glsl.builtin.precision.sin.mediump_compute.*
 dEQP-VK.glsl.builtin.precision.tan.mediump_compute.*
 
-# Issue 242: Excluded blend tests where propagated errors may be large
-dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_dc_dc_add_alpha_o_1msc_add-color_sas_1mdc_max_alpha_sa_1msc_min-color_dc_sas_min_alpha_1mcc_cc_sub-color_z_1mda_add_alpha_o_1mdc_add
-dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_sa_z_sub_alpha_ca_cc_sub-color_sas_1msa_rsub_alpha_ca_da_sub-color_1mca_ca_min_alpha_1msc_1mcc_rsub-color_dc_da_sub_alpha_1mcc_1mda_add
-dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_1mcc_cc_min_alpha_sc_cc_min-color_o_o_min_alpha_1msc_1msc_add-color_sas_da_add_alpha_1mdc_ca_add-color_cc_1mda_sub_alpha_dc_1mda_add
-dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_dc_dc_add_alpha_o_1msc_add-color_sas_1mdc_max_alpha_sa_1msc_min-color_dc_sas_min_alpha_1mcc_cc_sub-color_z_1mda_add_alpha_o_1mdc_add
-dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_sa_z_sub_alpha_ca_cc_sub-color_sas_1msa_rsub_alpha_ca_da_sub-color_1mca_ca_min_alpha_1msc_1mcc_rsub-color_dc_da_sub_alpha_1mcc_1mda_add
-dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_1mcc_cc_min_alpha_sc_cc_min-color_o_o_min_alpha_1msc_1msc_add-color_sas_da_add_alpha_1mdc_ca_add-color_cc_1mda_sub_alpha_dc_1mda_add
-dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_dc_dc_add_alpha_o_1msc_add-color_sas_1mdc_max_alpha_sa_1msc_min-color_dc_sas_min_alpha_1mcc_cc_sub-color_z_1mda_add_alpha_o_1mdc_add
-dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_sa_z_sub_alpha_ca_cc_sub-color_sas_1msa_rsub_alpha_ca_da_sub-color_1mca_ca_min_alpha_1msc_1mcc_rsub-color_dc_da_sub_alpha_1mcc_1mda_add
-
 # Excluded texture function tests according to the Android GLES3 issue list
 dEQP-VK.glsl.texture_functions.texturegrad.isamplercube_fragment
 dEQP-VK.glsl.texture_functions.texturegrad.samplercubeshadow_fragment
index 0051f0e..ba1abdd 100644 (file)
@@ -84303,6 +84303,7 @@ dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_o_ca_sub_alpha_
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_1msc_dc_max_alpha_cc_1mca_rsub-color_o_1msa_min_alpha_1mda_1mda_rsub-color_cc_1mdc_add_alpha_sc_1mdc_add-color_sa_1mdc_min_alpha_sc_1mcc_sub
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_o_1msa_min_alpha_1mcc_1mdc_max-color_z_sas_add_alpha_1mda_dc_add-color_sc_1mda_add_alpha_sc_cc_rsub-color_1msc_1msc_max_alpha_z_o_max
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_1msa_sas_sub_alpha_1msa_1mca_sub-color_sas_ca_max_alpha_1mda_1msa_add-color_sa_da_sub_alpha_sa_z_rsub-color_ca_1mdc_add_alpha_z_sc_max
+dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_sa_z_sub_alpha_ca_cc_sub-color_sas_1msa_rsub_alpha_ca_da_sub-color_1mca_ca_min_alpha_1msc_1mcc_rsub-color_dc_da_sub_alpha_1mcc_1mda_add
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_z_o_sub_alpha_1msa_1msa_sub-color_1mca_o_add_alpha_sa_sc_max-color_o_ca_rsub_alpha_o_dc_max-color_cc_1mdc_rsub_alpha_sas_z_rsub
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_1mda_1msc_rsub_alpha_sa_1mda_min-color_sa_1mcc_rsub_alpha_1msa_1mdc_max-color_ca_1mcc_max_alpha_1mca_1mcc_sub-color_dc_dc_max_alpha_da_sc_max
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_z_1mdc_rsub_alpha_1msa_cc_sub-color_da_1msc_min_alpha_1msc_sc_add-color_sa_sas_add_alpha_z_o_sub-color_dc_1msc_max_alpha_sa_da_sub
@@ -84331,6 +84332,7 @@ dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_da_sc_max_alpha
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_sas_1msc_min_alpha_dc_1mda_sub-color_o_1msc_max_alpha_1mda_1mca_add-color_cc_sc_add_alpha_ca_1mcc_rsub-color_1mca_dc_min_alpha_sc_o_sub
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_1mcc_1mda_rsub_alpha_da_da_rsub-color_sas_1mdc_rsub_alpha_1msa_sa_add-color_cc_cc_rsub_alpha_sa_1mca_min-color_z_1msa_max_alpha_1msc_cc_rsub
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_cc_cc_rsub_alpha_sas_1mcc_max-color_da_1mca_max_alpha_da_1msa_sub-color_z_o_rsub_alpha_dc_sas_sub-color_1mda_1msa_add_alpha_1mda_1mdc_rsub
+dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_1mcc_cc_min_alpha_sc_cc_min-color_o_o_min_alpha_1msc_1msc_add-color_sas_da_add_alpha_1mdc_ca_add-color_cc_1mda_sub_alpha_dc_1mda_add
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_1mca_z_min_alpha_1mcc_cc_max-color_z_sas_max_alpha_ca_sa_max-color_1mcc_1mca_sub_alpha_sa_o_rsub-color_z_1mdc_sub_alpha_o_1mda_sub
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_z_1msa_sub_alpha_z_o_rsub-color_o_sc_sub_alpha_1mdc_1mda_rsub-color_1mcc_1mdc_rsub_alpha_1mcc_z_min-color_cc_sa_max_alpha_o_da_add
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_ca_sa_min_alpha_1mdc_dc_rsub-color_1mcc_1mca_sub_alpha_1mdc_dc_min-color_o_1mcc_sub_alpha_1msc_z_min-color_sas_1msa_add_alpha_z_1msa_add
@@ -84360,6 +84362,7 @@ dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_1mda_sa_min_alp
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_1mca_1mda_add_alpha_1mda_1mcc_add-color_da_1msc_add_alpha_1mca_ca_max-color_cc_da_sub_alpha_dc_da_rsub-color_z_1mdc_rsub_alpha_1mca_1msa_max
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_da_sc_rsub_alpha_sa_cc_rsub-color_sas_1mda_sub_alpha_1mcc_dc_sub-color_da_1mca_min_alpha_1mda_o_rsub-color_1msa_da_max_alpha_ca_cc_sub
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_1mcc_dc_max_alpha_1mca_1mca_sub-color_1mda_1mdc_max_alpha_sc_sas_rsub-color_1msc_cc_add_alpha_1msc_1msc_max-color_cc_sc_min_alpha_dc_1msc_min
+dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_dc_dc_add_alpha_o_1msc_add-color_sas_1mdc_max_alpha_sa_1msc_min-color_dc_sas_min_alpha_1mcc_cc_sub-color_z_1mda_add_alpha_o_1mdc_add
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_1mca_1mca_sub_alpha_o_1mda_add-color_z_1mcc_max_alpha_sc_1mdc_add-color_1mca_1mdc_add_alpha_sc_sa_min-color_sas_o_max_alpha_1mcc_1mdc_add
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_dc_1msc_min_alpha_ca_cc_min-color_z_1msc_rsub_alpha_sa_z_sub-color_1mdc_1mdc_max_alpha_sa_cc_sub-color_1mcc_1mdc_max_alpha_dc_1mda_max
 dEQP-VK.pipeline.blend.format.r5g5b5a1_unorm_pack16.states.color_1mda_ca_sub_alpha_1mda_dc_add-color_1msa_z_sub_alpha_o_sa_sub-color_dc_1mcc_max_alpha_sa_dc_max-color_o_da_sub_alpha_1mda_1msc_sub
@@ -85600,6 +85603,7 @@ dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_o_ca_sub_alp
 dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_1msc_dc_max_alpha_cc_1mca_rsub-color_o_1msa_min_alpha_1mda_1mda_rsub-color_cc_1mdc_add_alpha_sc_1mdc_add-color_sa_1mdc_min_alpha_sc_1mcc_sub
 dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_o_1msa_min_alpha_1mcc_1mdc_max-color_z_sas_add_alpha_1mda_dc_add-color_sc_1mda_add_alpha_sc_cc_rsub-color_1msc_1msc_max_alpha_z_o_max
 dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_1msa_sas_sub_alpha_1msa_1mca_sub-color_sas_ca_max_alpha_1mda_1msa_add-color_sa_da_sub_alpha_sa_z_rsub-color_ca_1mdc_add_alpha_z_sc_max
+dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_sa_z_sub_alpha_ca_cc_sub-color_sas_1msa_rsub_alpha_ca_da_sub-color_1mca_ca_min_alpha_1msc_1mcc_rsub-color_dc_da_sub_alpha_1mcc_1mda_add
 dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_z_o_sub_alpha_1msa_1msa_sub-color_1mca_o_add_alpha_sa_sc_max-color_o_ca_rsub_alpha_o_dc_max-color_cc_1mdc_rsub_alpha_sas_z_rsub
 dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_1mda_1msc_rsub_alpha_sa_1mda_min-color_sa_1mcc_rsub_alpha_1msa_1mdc_max-color_ca_1mcc_max_alpha_1mca_1mcc_sub-color_dc_dc_max_alpha_da_sc_max
 dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_z_1mdc_rsub_alpha_1msa_cc_sub-color_da_1msc_min_alpha_1msc_sc_add-color_sa_sas_add_alpha_z_o_sub-color_dc_1msc_max_alpha_sa_da_sub
@@ -85658,6 +85662,7 @@ dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_1mda_sa_min_
 dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_1mca_1mda_add_alpha_1mda_1mcc_add-color_da_1msc_add_alpha_1mca_ca_max-color_cc_da_sub_alpha_dc_da_rsub-color_z_1mdc_rsub_alpha_1mca_1msa_max
 dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_da_sc_rsub_alpha_sa_cc_rsub-color_sas_1mda_sub_alpha_1mcc_dc_sub-color_da_1mca_min_alpha_1mda_o_rsub-color_1msa_da_max_alpha_ca_cc_sub
 dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_1mcc_dc_max_alpha_1mca_1mca_sub-color_1mda_1mdc_max_alpha_sc_sas_rsub-color_1msc_cc_add_alpha_1msc_1msc_max-color_cc_sc_min_alpha_dc_1msc_min
+dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_dc_dc_add_alpha_o_1msc_add-color_sas_1mdc_max_alpha_sa_1msc_min-color_dc_sas_min_alpha_1mcc_cc_sub-color_z_1mda_add_alpha_o_1mdc_add
 dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_1mca_1mca_sub_alpha_o_1mda_add-color_z_1mcc_max_alpha_sc_1mdc_add-color_1mca_1mdc_add_alpha_sc_sa_min-color_sas_o_max_alpha_1mcc_1mdc_add
 dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_dc_1msc_min_alpha_ca_cc_min-color_z_1msc_rsub_alpha_sa_z_sub-color_1mdc_1mdc_max_alpha_sa_cc_sub-color_1mcc_1mdc_max_alpha_dc_1mda_max
 dEQP-VK.pipeline.blend.format.a2r10g10b10_unorm_pack32.states.color_1mda_ca_sub_alpha_1mda_dc_add-color_1msa_z_sub_alpha_o_sa_sub-color_dc_1mcc_max_alpha_sa_dc_max-color_o_da_sub_alpha_1mda_1msc_sub
@@ -87598,6 +87603,7 @@ dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_o_ca_sub_alpha_
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_1msc_dc_max_alpha_cc_1mca_rsub-color_o_1msa_min_alpha_1mda_1mda_rsub-color_cc_1mdc_add_alpha_sc_1mdc_add-color_sa_1mdc_min_alpha_sc_1mcc_sub
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_o_1msa_min_alpha_1mcc_1mdc_max-color_z_sas_add_alpha_1mda_dc_add-color_sc_1mda_add_alpha_sc_cc_rsub-color_1msc_1msc_max_alpha_z_o_max
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_1msa_sas_sub_alpha_1msa_1mca_sub-color_sas_ca_max_alpha_1mda_1msa_add-color_sa_da_sub_alpha_sa_z_rsub-color_ca_1mdc_add_alpha_z_sc_max
+dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_sa_z_sub_alpha_ca_cc_sub-color_sas_1msa_rsub_alpha_ca_da_sub-color_1mca_ca_min_alpha_1msc_1mcc_rsub-color_dc_da_sub_alpha_1mcc_1mda_add
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_z_o_sub_alpha_1msa_1msa_sub-color_1mca_o_add_alpha_sa_sc_max-color_o_ca_rsub_alpha_o_dc_max-color_cc_1mdc_rsub_alpha_sas_z_rsub
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_1mda_1msc_rsub_alpha_sa_1mda_min-color_sa_1mcc_rsub_alpha_1msa_1mdc_max-color_ca_1mcc_max_alpha_1mca_1mcc_sub-color_dc_dc_max_alpha_da_sc_max
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_z_1mdc_rsub_alpha_1msa_cc_sub-color_da_1msc_min_alpha_1msc_sc_add-color_sa_sas_add_alpha_z_o_sub-color_dc_1msc_max_alpha_sa_da_sub
@@ -87626,6 +87632,7 @@ dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_da_sc_max_alpha
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_sas_1msc_min_alpha_dc_1mda_sub-color_o_1msc_max_alpha_1mda_1mca_add-color_cc_sc_add_alpha_ca_1mcc_rsub-color_1mca_dc_min_alpha_sc_o_sub
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_1mcc_1mda_rsub_alpha_da_da_rsub-color_sas_1mdc_rsub_alpha_1msa_sa_add-color_cc_cc_rsub_alpha_sa_1mca_min-color_z_1msa_max_alpha_1msc_cc_rsub
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_cc_cc_rsub_alpha_sas_1mcc_max-color_da_1mca_max_alpha_da_1msa_sub-color_z_o_rsub_alpha_dc_sas_sub-color_1mda_1msa_add_alpha_1mda_1mdc_rsub
+dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_1mcc_cc_min_alpha_sc_cc_min-color_o_o_min_alpha_1msc_1msc_add-color_sas_da_add_alpha_1mdc_ca_add-color_cc_1mda_sub_alpha_dc_1mda_add
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_1mca_z_min_alpha_1mcc_cc_max-color_z_sas_max_alpha_ca_sa_max-color_1mcc_1mca_sub_alpha_sa_o_rsub-color_z_1mdc_sub_alpha_o_1mda_sub
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_z_1msa_sub_alpha_z_o_rsub-color_o_sc_sub_alpha_1mdc_1mda_rsub-color_1mcc_1mdc_rsub_alpha_1mcc_z_min-color_cc_sa_max_alpha_o_da_add
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_ca_sa_min_alpha_1mdc_dc_rsub-color_1mcc_1mca_sub_alpha_1mdc_dc_min-color_o_1mcc_sub_alpha_1msc_z_min-color_sas_1msa_add_alpha_z_1msa_add
@@ -87655,6 +87662,7 @@ dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_1mda_sa_min_alp
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_1mca_1mda_add_alpha_1mda_1mcc_add-color_da_1msc_add_alpha_1mca_ca_max-color_cc_da_sub_alpha_dc_da_rsub-color_z_1mdc_rsub_alpha_1mca_1msa_max
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_da_sc_rsub_alpha_sa_cc_rsub-color_sas_1mda_sub_alpha_1mcc_dc_sub-color_da_1mca_min_alpha_1mda_o_rsub-color_1msa_da_max_alpha_ca_cc_sub
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_1mcc_dc_max_alpha_1mca_1mca_sub-color_1mda_1mdc_max_alpha_sc_sas_rsub-color_1msc_cc_add_alpha_1msc_1msc_max-color_cc_sc_min_alpha_dc_1msc_min
+dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_dc_dc_add_alpha_o_1msc_add-color_sas_1mdc_max_alpha_sa_1msc_min-color_dc_sas_min_alpha_1mcc_cc_sub-color_z_1mda_add_alpha_o_1mdc_add
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_1mca_1mca_sub_alpha_o_1mda_add-color_z_1mcc_max_alpha_sc_1mdc_add-color_1mca_1mdc_add_alpha_sc_sa_min-color_sas_o_max_alpha_1mcc_1mdc_add
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_dc_1msc_min_alpha_ca_cc_min-color_z_1msc_rsub_alpha_sa_z_sub-color_1mdc_1mdc_max_alpha_sa_cc_sub-color_1mcc_1mdc_max_alpha_dc_1mda_max
 dEQP-VK.pipeline.blend.format.b5g5r5a1_unorm_pack16.states.color_1mda_ca_sub_alpha_1mda_dc_add-color_1msa_z_sub_alpha_o_sa_sub-color_dc_1mcc_max_alpha_sa_dc_max-color_o_da_sub_alpha_1mda_1msc_sub