dEQP-VK.sparse_resources.shader_intrinsics fixes
authorDominik Witczak <Dominik.Witczak@amd.com>
Thu, 17 Nov 2016 15:08:44 +0000 (16:08 +0100)
committerPyry Haulos <phaulos@google.com>
Wed, 30 Nov 2016 21:55:43 +0000 (16:55 -0500)
Some of the tests in the group form invalid SPIR-V code,
which tries to pass two arguments to the OpFAdd instruction,
whose number of components differs.

This change fixes this.

Khronos issue: #545

Change-Id: I3cad57d393f986cfb5b9bce85f758dcca3686d8a

external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsSampled.cpp

index 598b2f0..3761164 100644 (file)
@@ -527,8 +527,32 @@ std::string        SparseCaseOpImageSparseGather::sparseImageOpString (const std::strin
        src << "%local_image_height     = OpCompositeExtract %type_float %local_uniformblock_member_size 1\n";
        src << "%local_coord_x_bias     = OpFDiv %type_float %constant_float_half %local_image_width\n";
        src << "%local_coord_y_bias     = OpFDiv %type_float %constant_float_half %local_image_height\n";
-       src << "%local_coord_bias       = OpCompositeConstruct %type_vec3 %local_coord_x_bias %local_coord_y_bias %constant_float_0\n";
-       src << "%local_coord_biased     = OpFAdd %type_vec3 " << coord << " %local_coord_bias\n";
+
+       switch (m_imageType)
+       {
+               case IMAGE_TYPE_2D:
+               {
+                       src << "%local_coord_bias       = OpCompositeConstruct %type_vec2 %local_coord_x_bias %local_coord_y_bias\n";
+                       src << "%local_coord_biased     = OpFAdd %type_vec2 " << coord << " %local_coord_bias\n";
+
+                       break;
+               }
+
+               case IMAGE_TYPE_2D_ARRAY:
+               case IMAGE_TYPE_3D:
+               {
+                       src << "%local_coord_bias       = OpCompositeConstruct %type_vec3 %local_coord_x_bias %local_coord_y_bias %constant_float_0\n";
+                       src << "%local_coord_biased     = OpFAdd %type_vec3 " << coord << " %local_coord_bias\n";
+
+                       break;
+               }
+
+               default:
+               {
+                       /* This can't be happening. */
+                       DE_ASSERT(DE_FALSE);
+               }
+       }
 
        src << "%local_sparse_gather_result_x = OpImageSparseGather " << resultType << " " << image << " %local_coord_biased %constant_int_0\n";
        src << "%local_sparse_gather_result_y = OpImageSparseGather " << resultType << " " << image << " %local_coord_biased %constant_int_1\n";