Make 420pack 'binding' layout qualifier tests check MAX_*_IMAGE_UNIFORMS
authorKenneth Graunke <kenneth.w.graunke@intel.com>
Mon, 25 Sep 2017 04:18:11 +0000 (21:18 -0700)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Tue, 17 Oct 2017 07:55:43 +0000 (03:55 -0400)
Image uniform support is not mandatory for the VS/TCS/TES/GS stages,
so GL_MAX_*_IMAGE_UNIFORMS can report 0.  On such an implementation,
these tests would fail.

This patch skips image testing in any such stages, making them
essentially passthrough shaders.

In BindingImageSingleTest, we also put the binding qualifier in the
fragment shader stage if the stage where we'd normally put it doesn't
support images.  This way, it's guaranteed to exist in at least one
shader stage.

Components: OpenGL

VK-GL-CTS issue: 712

Affects:
* KHR-GL45.shading_language_420pack.binding_images
* KHR-GL45.shading_language_420pack.binding_image_api_override
* KHR-GL45.shading_language_420pack.binding_image_array
* KHR-GL45.shading_language_420pack.binding_image_single
* KHR-GL45.shading_language_420pack.binding_image_default

Change-Id: Ic9eceb4472edff87d5de54ec6318cdb856b0bb8d

external/openglcts/modules/gl/gl4cShadingLanguage420PackTests.cpp
external/openglcts/modules/gl/gl4cShadingLanguage420PackTests.hpp

index d0fc20e..9203552 100644 (file)
@@ -1709,6 +1709,38 @@ bool TestBase::test()
        return result;
 }
 
+int TestBase::maxImageUniforms(Utils::SHADER_STAGES stage) const
+{
+       const glw::Functions& gl = m_context.getRenderContext().getFunctions();
+       GLint max_image_uniforms;
+
+       switch (stage)
+       {
+       case Utils::COMPUTE_SHADER:
+               gl.getIntegerv(GL_MAX_COMPUTE_IMAGE_UNIFORMS, &max_image_uniforms);
+               break;
+       case Utils::FRAGMENT_SHADER:
+               gl.getIntegerv(GL_MAX_FRAGMENT_IMAGE_UNIFORMS, &max_image_uniforms);
+               break;
+       case Utils::GEOMETRY_SHADER:
+               gl.getIntegerv(GL_MAX_GEOMETRY_IMAGE_UNIFORMS, &max_image_uniforms);
+               break;
+       case Utils::TESS_CTRL_SHADER:
+               gl.getIntegerv(GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS, &max_image_uniforms);
+               break;
+       case Utils::TESS_EVAL_SHADER:
+               gl.getIntegerv(GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS, &max_image_uniforms);
+               break;
+       case Utils::VERTEX_SHADER:
+               gl.getIntegerv(GL_MAX_VERTEX_IMAGE_UNIFORMS, &max_image_uniforms);
+               break;
+       default:
+               TCU_FAIL("Invalid enum");
+               break;
+       }
+       return max_image_uniforms;
+}
+
 /** Constructor
  *
  * @param context          Test context
@@ -11744,16 +11776,20 @@ void BindingImagesTest::prepareShaderSource(Utils::SHADER_STAGES in_stage, bool
                                                                                                        "in  vec4 tes_gs_result[];\n"
                                                                                                        "out vec4 gs_fs_result;\n"
                                                                                                        "\n"
+                                                                                                       "#if IMAGES\n"
                                                                                                        "UNI_TRUNKS\n"
                                                                                                        "UNI_GOKU\n"
                                                                                                        "UNI_VEGETA\n"
+                                                                                                       "#endif\n"
                                                                                                        "\n"
                                                                                                        "void main()\n"
                                                                                                        "{\n"
                                                                                                        "    vec4 result = vec4(0, 1, 0, 1);\n"
                                                                                                        "\n"
-                                                                                                       "VERIFICATION"
-                                                                                                       "    else if (vec4(0, 1, 0, 1) != tes_gs_result[0])\n"
+                                                                                                       "#if IMAGES\n"
+                                                                                                       "VERIFICATION else\n"
+                                                                                                       "#endif\n"
+                                                                                                       "    if (vec4(0, 1, 0, 1) != tes_gs_result[0])\n"
                                                                                                        "    {\n"
                                                                                                        "         result = vec4(1, 0, 0, 1);\n"
                                                                                                        "    }\n"
@@ -11782,16 +11818,20 @@ void BindingImagesTest::prepareShaderSource(Utils::SHADER_STAGES in_stage, bool
                "in  vec4 vs_tcs_result[];\n"
                "out vec4 tcs_tes_result[];\n"
                "\n"
+               "#if IMAGES\n"
                "UNI_VEGETA\n"
                "UNI_TRUNKS\n"
                "UNI_GOKU\n"
+               "#endif\n"
                "\n"
                "void main()\n"
                "{\n"
                "    vec4 result = vec4(0, 1, 0, 1);\n"
                "\n"
-               "VERIFICATION"
-               "    else if (vec4(0, 1, 0, 1) != vs_tcs_result[gl_InvocationID])\n"
+               "#if IMAGES\n"
+               "VERIFICATION else\n"
+               "#endif\n"
+               "    if (vec4(0, 1, 0, 1) != vs_tcs_result[gl_InvocationID])\n"
                "    {\n"
                "         result = vec4(1, 0, 0, 1);\n"
                "    }\n"
@@ -11815,16 +11855,20 @@ void BindingImagesTest::prepareShaderSource(Utils::SHADER_STAGES in_stage, bool
                                                                                                         "in  vec4 tcs_tes_result[];\n"
                                                                                                         "out vec4 tes_gs_result;\n"
                                                                                                         "\n"
+                                                                                                        "#if IMAGES\n"
                                                                                                         "UNI_GOKU\n"
                                                                                                         "UNI_TRUNKS\n"
                                                                                                         "UNI_VEGETA\n"
+                                                                                                        "#endif\n"
                                                                                                         "\n"
                                                                                                         "void main()\n"
                                                                                                         "{\n"
                                                                                                         "    vec4 result = vec4(0, 1, 0, 1);\n"
                                                                                                         "\n"
-                                                                                                        "VERIFICATION"
-                                                                                                        "    else if (vec4(0, 1, 0, 1) != tcs_tes_result[0])\n"
+                                                                                                        "#if IMAGES\n"
+                                                                                                        "VERIFICATION else\n"
+                                                                                                        "#endif\n"
+                                                                                                        "    if (vec4(0, 1, 0, 1) != tcs_tes_result[0])\n"
                                                                                                         "    {\n"
                                                                                                         "         result = vec4(1, 0, 0, 1);\n"
                                                                                                         "    }\n"
@@ -11838,15 +11882,19 @@ void BindingImagesTest::prepareShaderSource(Utils::SHADER_STAGES in_stage, bool
                                                                                                  "\n"
                                                                                                  "out vec4 vs_tcs_result;\n"
                                                                                                  "\n"
+                                                                                                 "#if IMAGES\n"
                                                                                                  "UNI_TRUNKS\n"
                                                                                                  "UNI_VEGETA\n"
                                                                                                  "UNI_GOKU\n"
+                                                                                                 "#endif\n"
                                                                                                  "\n"
                                                                                                  "void main()\n"
                                                                                                  "{\n"
                                                                                                  "    vec4 result = vec4(0, 1, 0, 1);\n"
                                                                                                  "\n"
+                                                                                                 "#if IMAGES\n"
                                                                                                  "VERIFICATION"
+                                                                                                 "#endif\n"
                                                                                                  "\n"
                                                                                                  "    vs_tcs_result = result;\n"
                                                                                                  "}\n"
@@ -11919,6 +11967,9 @@ void BindingImagesTest::prepareShaderSource(Utils::SHADER_STAGES in_stage, bool
 
        Utils::replaceToken("COORDINATES", position, coordinates_write, out_source.m_parts[0].m_code);
 
+       Utils::replaceAllTokens("IMAGES", maxImageUniforms(in_stage) > 0 ? "1" : "0",
+                                                       out_source.m_parts[0].m_code);
+
        Utils::replaceAllTokens("UNI_GOKU", uni_goku, out_source.m_parts[0].m_code);
 
        Utils::replaceAllTokens("UNI_VEGETA", uni_vegeta, out_source.m_parts[0].m_code);
@@ -12101,14 +12152,18 @@ void BindingImageSingleTest::prepareShaderSource(Utils::SHADER_STAGES in_stage,
                                                                                                        "in  vec4 tes_gs_result[];\n"
                                                                                                        "out vec4 gs_fs_result;\n"
                                                                                                        "\n"
+                                                                                                       "#if IMAGES\n"
                                                                                                        "UNI_GOKU\n"
+                                                                                                       "#endif\n"
                                                                                                        "\n"
                                                                                                        "void main()\n"
                                                                                                        "{\n"
                                                                                                        "    vec4 result = vec4(0, 1, 0, 1);\n"
                                                                                                        "\n"
-                                                                                                       "VERIFICATION"
-                                                                                                       "    else if (vec4(0, 1, 0, 1) != tes_gs_result[0])\n"
+                                                                                                       "#if IMAGES\n"
+                                                                                                       "VERIFICATION else\n"
+                                                                                                       "#endif\n"
+                                                                                                       "    if (vec4(0, 1, 0, 1) != tes_gs_result[0])\n"
                                                                                                        "    {\n"
                                                                                                        "         result = vec4(1, 0, 0, 1);\n"
                                                                                                        "    }\n"
@@ -12137,14 +12192,18 @@ void BindingImageSingleTest::prepareShaderSource(Utils::SHADER_STAGES in_stage,
                "in  vec4 vs_tcs_result[];\n"
                "out vec4 tcs_tes_result[];\n"
                "\n"
+               "#if IMAGES\n"
                "UNI_GOKU\n"
+               "#endif\n"
                "\n"
                "void main()\n"
                "{\n"
                "    vec4 result = vec4(0, 1, 0, 1);\n"
                "\n"
-               "VERIFICATION"
-               "    else if (vec4(0, 1, 0, 1) != vs_tcs_result[gl_InvocationID])\n"
+               "#if IMAGES\n"
+               "VERIFICATION else\n"
+               "#endif\n"
+               "    if (vec4(0, 1, 0, 1) != vs_tcs_result[gl_InvocationID])\n"
                "    {\n"
                "         result = vec4(1, 0, 0, 1);\n"
                "    }\n"
@@ -12168,14 +12227,18 @@ void BindingImageSingleTest::prepareShaderSource(Utils::SHADER_STAGES in_stage,
                                                                                                         "in  vec4 tcs_tes_result[];\n"
                                                                                                         "out vec4 tes_gs_result;\n"
                                                                                                         "\n"
+                                                                                                        "#if IMAGES\n"
                                                                                                         "UNI_GOKU\n"
+                                                                                                        "#endif\n"
                                                                                                         "\n"
                                                                                                         "void main()\n"
                                                                                                         "{\n"
                                                                                                         "    vec4 result = vec4(0, 1, 0, 1);\n"
                                                                                                         "\n"
-                                                                                                        "VERIFICATION"
-                                                                                                        "    else if (vec4(0, 1, 0, 1) != tcs_tes_result[0])\n"
+                                                                                                        "#if IMAGES\n"
+                                                                                                        "VERIFICATION else\n"
+                                                                                                        "#endif\n"
+                                                                                                        "    if (vec4(0, 1, 0, 1) != tcs_tes_result[0])\n"
                                                                                                         "    {\n"
                                                                                                         "         result = vec4(1, 0, 0, 1);\n"
                                                                                                         "    }\n"
@@ -12189,13 +12252,17 @@ void BindingImageSingleTest::prepareShaderSource(Utils::SHADER_STAGES in_stage,
                                                                                                  "\n"
                                                                                                  "out vec4 vs_tcs_result;\n"
                                                                                                  "\n"
+                                                                                                 "#if IMAGES\n"
                                                                                                  "UNI_GOKU\n"
+                                                                                                 "#endif\n"
                                                                                                  "\n"
                                                                                                  "void main()\n"
                                                                                                  "{\n"
                                                                                                  "    vec4 result = vec4(0, 1, 0, 1);\n"
                                                                                                  "\n"
+                                                                                                 "#if IMAGES\n"
                                                                                                  "VERIFICATION"
+                                                                                                 "#endif\n"
                                                                                                  "\n"
                                                                                                  "    vs_tcs_result = result;\n"
                                                                                                  "}\n"
@@ -12212,6 +12279,11 @@ void BindingImageSingleTest::prepareShaderSource(Utils::SHADER_STAGES in_stage,
                break;
        case Utils::FRAGMENT_SHADER:
                shader_template = fragment_shader_template;
+               /* We can't rely on the binding qualifier being present in m_test_stage
+                * if images are unsupported in that stage.
+                */
+               if (maxImageUniforms(m_test_stage) == 0)
+                       uniform_definition = uni_goku_with_binding;
                break;
        case Utils::GEOMETRY_SHADER:
                shader_template = geometry_shader_template;
@@ -12244,6 +12316,9 @@ void BindingImageSingleTest::prepareShaderSource(Utils::SHADER_STAGES in_stage,
 
        Utils::replaceToken("VERIFICATION", position, verification_snippet, out_source.m_parts[0].m_code);
 
+       Utils::replaceAllTokens("IMAGES", maxImageUniforms(in_stage) > 0 ? "1" : "0",
+                                                       out_source.m_parts[0].m_code);
+
        Utils::replaceAllTokens("UNI_GOKU", uniform_definition, out_source.m_parts[0].m_code);
 }
 
@@ -12374,14 +12449,18 @@ void BindingImageArrayTest::prepareShaderSource(Utils::SHADER_STAGES in_stage, b
                                                                                                        "in  vec4 tes_gs_result[];\n"
                                                                                                        "out vec4 gs_fs_result;\n"
                                                                                                        "\n"
+                                                                                                       "#if IMAGES\n"
                                                                                                        "UNI_GOKU\n"
+                                                                                                       "#endif\n"
                                                                                                        "\n"
                                                                                                        "void main()\n"
                                                                                                        "{\n"
                                                                                                        "    vec4 result = vec4(0, 1, 0, 1);\n"
                                                                                                        "\n"
-                                                                                                       "VERIFICATION"
-                                                                                                       "    else if (vec4(0, 1, 0, 1) != tes_gs_result[0])\n"
+                                                                                                       "#if IMAGES\n"
+                                                                                                       "VERIFICATION else\n"
+                                                                                                       "#endif\n"
+                                                                                                       "    if (vec4(0, 1, 0, 1) != tes_gs_result[0])\n"
                                                                                                        "    {\n"
                                                                                                        "         result = vec4(1, 0, 0, 1);\n"
                                                                                                        "    }\n"
@@ -12410,14 +12489,18 @@ void BindingImageArrayTest::prepareShaderSource(Utils::SHADER_STAGES in_stage, b
                "in  vec4 vs_tcs_result[];\n"
                "out vec4 tcs_tes_result[];\n"
                "\n"
+               "#if IMAGES\n"
                "UNI_GOKU\n"
+               "#endif\n"
                "\n"
                "void main()\n"
                "{\n"
                "    vec4 result = vec4(0, 1, 0, 1);\n"
                "\n"
-               "VERIFICATION"
-               "    else if (vec4(0, 1, 0, 1) != vs_tcs_result[gl_InvocationID])\n"
+               "#if IMAGES\n"
+               "VERIFICATION else\n"
+               "#endif\n"
+               "    if (vec4(0, 1, 0, 1) != vs_tcs_result[gl_InvocationID])\n"
                "    {\n"
                "         result = vec4(1, 0, 0, 1);\n"
                "    }\n"
@@ -12441,14 +12524,18 @@ void BindingImageArrayTest::prepareShaderSource(Utils::SHADER_STAGES in_stage, b
                                                                                                         "in  vec4 tcs_tes_result[];\n"
                                                                                                         "out vec4 tes_gs_result;\n"
                                                                                                         "\n"
+                                                                                                        "#if IMAGES\n"
                                                                                                         "UNI_GOKU\n"
+                                                                                                        "#endif\n"
                                                                                                         "\n"
                                                                                                         "void main()\n"
                                                                                                         "{\n"
                                                                                                         "    vec4 result = vec4(0, 1, 0, 1);\n"
                                                                                                         "\n"
-                                                                                                        "VERIFICATION"
-                                                                                                        "    else if (vec4(0, 1, 0, 1) != tcs_tes_result[0])\n"
+                                                                                                        "#if IMAGES\n"
+                                                                                                        "VERIFICATION else\n"
+                                                                                                        "#endif\n"
+                                                                                                        "    if (vec4(0, 1, 0, 1) != tcs_tes_result[0])\n"
                                                                                                         "    {\n"
                                                                                                         "         result = vec4(1, 0, 0, 1);\n"
                                                                                                         "    }\n"
@@ -12462,13 +12549,17 @@ void BindingImageArrayTest::prepareShaderSource(Utils::SHADER_STAGES in_stage, b
                                                                                                  "\n"
                                                                                                  "out vec4 vs_tcs_result;\n"
                                                                                                  "\n"
+                                                                                                 "#if IMAGES\n"
                                                                                                  "UNI_GOKU\n"
+                                                                                                 "#endif\n"
                                                                                                  "\n"
                                                                                                  "void main()\n"
                                                                                                  "{\n"
                                                                                                  "    vec4 result = vec4(0, 1, 0, 1);\n"
                                                                                                  "\n"
+                                                                                                 "#if IMAGES\n"
                                                                                                  "VERIFICATION"
+                                                                                                 "#endif\n"
                                                                                                  "\n"
                                                                                                  "    vs_tcs_result = result;\n"
                                                                                                  "}\n"
@@ -12510,6 +12601,9 @@ void BindingImageArrayTest::prepareShaderSource(Utils::SHADER_STAGES in_stage, b
 
        Utils::replaceToken("VERIFICATION", position, verification_snippet, out_source.m_parts[0].m_code);
 
+       Utils::replaceAllTokens("IMAGES", maxImageUniforms(in_stage) > 0 ? "1" : "0",
+                                                       out_source.m_parts[0].m_code);
+
        Utils::replaceAllTokens("UNI_GOKU", uni_goku, out_source.m_parts[0].m_code);
 }
 
@@ -12657,14 +12751,18 @@ void BindingImageDefaultTest::prepareShaderSource(Utils::SHADER_STAGES in_stage,
                                                                                                        "in  vec4 tes_gs_result[];\n"
                                                                                                        "out vec4 gs_fs_result;\n"
                                                                                                        "\n"
+                                                                                                       "#if IMAGES\n"
                                                                                                        "UNI_GOKU\n"
+                                                                                                       "#endif\n"
                                                                                                        "\n"
                                                                                                        "void main()\n"
                                                                                                        "{\n"
                                                                                                        "    vec4 result = vec4(0, 1, 0, 1);\n"
                                                                                                        "\n"
-                                                                                                       "VERIFICATION"
-                                                                                                       "    else if (vec4(0, 1, 0, 1) != tes_gs_result[0])\n"
+                                                                                                       "#if IMAGES\n"
+                                                                                                       "VERIFICATION else\n"
+                                                                                                       "#endif\n"
+                                                                                                       "    if (vec4(0, 1, 0, 1) != tes_gs_result[0])\n"
                                                                                                        "    {\n"
                                                                                                        "         result = vec4(1, 0, 0, 1);\n"
                                                                                                        "    }\n"
@@ -12693,14 +12791,18 @@ void BindingImageDefaultTest::prepareShaderSource(Utils::SHADER_STAGES in_stage,
                "in  vec4 vs_tcs_result[];\n"
                "out vec4 tcs_tes_result[];\n"
                "\n"
+               "#if IMAGES\n"
                "UNI_GOKU\n"
+               "#endif\n"
                "\n"
                "void main()\n"
                "{\n"
                "    vec4 result = vec4(0, 1, 0, 1);\n"
                "\n"
-               "VERIFICATION"
-               "    else if (vec4(0, 1, 0, 1) != vs_tcs_result[gl_InvocationID])\n"
+               "#if IMAGES\n"
+               "VERIFICATION else\n"
+               "#endif\n"
+               "    if (vec4(0, 1, 0, 1) != vs_tcs_result[gl_InvocationID])\n"
                "    {\n"
                "         result = vec4(1, 0, 0, 1);\n"
                "    }\n"
@@ -12724,14 +12826,18 @@ void BindingImageDefaultTest::prepareShaderSource(Utils::SHADER_STAGES in_stage,
                                                                                                         "in  vec4 tcs_tes_result[];\n"
                                                                                                         "out vec4 tes_gs_result;\n"
                                                                                                         "\n"
+                                                                                                        "#if IMAGES\n"
                                                                                                         "UNI_GOKU\n"
+                                                                                                        "#endif\n"
                                                                                                         "\n"
                                                                                                         "void main()\n"
                                                                                                         "{\n"
                                                                                                         "    vec4 result = vec4(0, 1, 0, 1);\n"
                                                                                                         "\n"
-                                                                                                        "VERIFICATION"
-                                                                                                        "    else if (vec4(0, 1, 0, 1) != tcs_tes_result[0])\n"
+                                                                                                        "#if IMAGES\n"
+                                                                                                        "VERIFICATION else\n"
+                                                                                                        "#endif\n"
+                                                                                                        "    if (vec4(0, 1, 0, 1) != tcs_tes_result[0])\n"
                                                                                                         "    {\n"
                                                                                                         "         result = vec4(1, 0, 0, 1);\n"
                                                                                                         "    }\n"
@@ -12745,13 +12851,17 @@ void BindingImageDefaultTest::prepareShaderSource(Utils::SHADER_STAGES in_stage,
                                                                                                  "\n"
                                                                                                  "out vec4 vs_tcs_result;\n"
                                                                                                  "\n"
+                                                                                                 "#if IMAGES\n"
                                                                                                  "UNI_GOKU\n"
+                                                                                                 "#endif\n"
                                                                                                  "\n"
                                                                                                  "void main()\n"
                                                                                                  "{\n"
                                                                                                  "    vec4 result = vec4(0, 1, 0, 1);\n"
                                                                                                  "\n"
+                                                                                                 "#if IMAGES\n"
                                                                                                  "VERIFICATION"
+                                                                                                 "#endif\n"
                                                                                                  "\n"
                                                                                                  "    vs_tcs_result = result;\n"
                                                                                                  "}\n"
@@ -12793,6 +12903,9 @@ void BindingImageDefaultTest::prepareShaderSource(Utils::SHADER_STAGES in_stage,
 
        Utils::replaceToken("VERIFICATION", position, verification_snippet, out_source.m_parts[0].m_code);
 
+       Utils::replaceAllTokens("IMAGES", maxImageUniforms(in_stage) > 0 ? "1" : "0",
+                                                       out_source.m_parts[0].m_code);
+
        Utils::replaceAllTokens("UNI_GOKU", uni_goku, out_source.m_parts[0].m_code);
 }
 
@@ -12876,14 +12989,18 @@ void BindingImageAPIOverrideTest::prepareShaderSource(Utils::SHADER_STAGES in_st
                                                                                                        "in  vec4 tes_gs_result[];\n"
                                                                                                        "out vec4 gs_fs_result;\n"
                                                                                                        "\n"
+                                                                                                       "#if IMAGES\n"
                                                                                                        "UNI_GOKU\n"
+                                                                                                       "#endif\n"
                                                                                                        "\n"
                                                                                                        "void main()\n"
                                                                                                        "{\n"
                                                                                                        "    vec4 result = vec4(0, 1, 0, 1);\n"
                                                                                                        "\n"
-                                                                                                       "VERIFICATION"
-                                                                                                       "    else if (vec4(0, 1, 0, 1) != tes_gs_result[0])\n"
+                                                                                                       "#if IMAGES\n"
+                                                                                                       "VERIFICATION else\n"
+                                                                                                       "#endif\n"
+                                                                                                       "    if (vec4(0, 1, 0, 1) != tes_gs_result[0])\n"
                                                                                                        "    {\n"
                                                                                                        "         result = vec4(1, 0, 0, 1);\n"
                                                                                                        "    }\n"
@@ -12912,14 +13029,18 @@ void BindingImageAPIOverrideTest::prepareShaderSource(Utils::SHADER_STAGES in_st
                "in  vec4 vs_tcs_result[];\n"
                "out vec4 tcs_tes_result[];\n"
                "\n"
+               "#if IMAGES\n"
                "UNI_GOKU\n"
+               "#endif\n"
                "\n"
                "void main()\n"
                "{\n"
                "    vec4 result = vec4(0, 1, 0, 1);\n"
                "\n"
-               "VERIFICATION"
-               "    else if (vec4(0, 1, 0, 1) != vs_tcs_result[gl_InvocationID])\n"
+               "#if IMAGES\n"
+               "VERIFICATION else\n"
+               "#endif\n"
+               "    if (vec4(0, 1, 0, 1) != vs_tcs_result[gl_InvocationID])\n"
                "    {\n"
                "         result = vec4(1, 0, 0, 1);\n"
                "    }\n"
@@ -12943,14 +13064,18 @@ void BindingImageAPIOverrideTest::prepareShaderSource(Utils::SHADER_STAGES in_st
                                                                                                         "in  vec4 tcs_tes_result[];\n"
                                                                                                         "out vec4 tes_gs_result;\n"
                                                                                                         "\n"
+                                                                                                        "#if IMAGES\n"
                                                                                                         "UNI_GOKU\n"
+                                                                                                        "#endif\n"
                                                                                                         "\n"
                                                                                                         "void main()\n"
                                                                                                         "{\n"
                                                                                                         "    vec4 result = vec4(0, 1, 0, 1);\n"
                                                                                                         "\n"
-                                                                                                        "VERIFICATION"
-                                                                                                        "    else if (vec4(0, 1, 0, 1) != tcs_tes_result[0])\n"
+                                                                                                        "#if IMAGES\n"
+                                                                                                        "VERIFICATION else\n"
+                                                                                                        "#endif\n"
+                                                                                                        "    if (vec4(0, 1, 0, 1) != tcs_tes_result[0])\n"
                                                                                                         "    {\n"
                                                                                                         "         result = vec4(1, 0, 0, 1);\n"
                                                                                                         "    }\n"
@@ -12964,13 +13089,17 @@ void BindingImageAPIOverrideTest::prepareShaderSource(Utils::SHADER_STAGES in_st
                                                                                                  "\n"
                                                                                                  "out vec4 vs_tcs_result;\n"
                                                                                                  "\n"
+                                                                                                 "#if IMAGES\n"
                                                                                                  "UNI_GOKU\n"
+                                                                                                 "#endif\n"
                                                                                                  "\n"
                                                                                                  "void main()\n"
                                                                                                  "{\n"
                                                                                                  "    vec4 result = vec4(0, 1, 0, 1);\n"
                                                                                                  "\n"
+                                                                                                 "#if IMAGES\n"
                                                                                                  "VERIFICATION"
+                                                                                                 "#endif\n"
                                                                                                  "\n"
                                                                                                  "    vs_tcs_result = result;\n"
                                                                                                  "}\n"
@@ -13012,6 +13141,9 @@ void BindingImageAPIOverrideTest::prepareShaderSource(Utils::SHADER_STAGES in_st
 
        Utils::replaceToken("VERIFICATION", position, verification_snippet, out_source.m_parts[0].m_code);
 
+       Utils::replaceAllTokens("IMAGES", maxImageUniforms(in_stage) > 0 ? "1" : "0",
+                                                       out_source.m_parts[0].m_code);
+
        Utils::replaceAllTokens("UNI_GOKU", uni_goku, out_source.m_parts[0].m_code);
 }
 
index 9ce6e9f..1eaa749 100644 (file)
@@ -472,6 +472,7 @@ protected:
        const glw::GLchar* getStageSpecificLayout(Utils::SHADER_STAGES stage) const;
        const glw::GLchar* getVersionString(Utils::SHADER_STAGES stage, bool use_version_400) const;
        void initShaderSource(Utils::SHADER_STAGES in_stage, bool in_use_version_400, Utils::shaderSource& out_source);
+       int maxImageUniforms(Utils::SHADER_STAGES stage) const;
 
        /* Protected variables */
        bool m_is_compute_shader_supported;