- std::ostringstream src;
- src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_440) << "\n"
- << "\n"
- << "layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in;\n"
- << "layout (binding = 0, " << formatQualifierStr << ") " << maybeRestrictStr << "readonly uniform " << imageTypeStr << " u_image0;\n"
- << "layout (binding = 1, " << formatQualifierStr << ") " << maybeRestrictStr << "writeonly uniform " << imageTypeStr << " u_image1;\n"
- << "\n"
- << "void main (void)\n"
- << "{\n"
- << (dimension == 1 ?
- " int pos = int(gl_GlobalInvocationID.x);\n"
- " imageStore(u_image1, pos, imageLoad(u_image0, " + xMax + "-pos));\n"
- : dimension == 2 ?
- " ivec2 pos = ivec2(gl_GlobalInvocationID.xy);\n"
- " imageStore(u_image1, pos, imageLoad(u_image0, ivec2(" + xMax + "-pos.x, pos.y)));\n"
- : dimension == 3 ?
- " ivec3 pos = ivec3(gl_GlobalInvocationID);\n"
- " imageStore(u_image1, pos, imageLoad(u_image0, ivec3(" + xMax + "-pos.x, pos.y, pos.z)));\n"
- : "")
- << "}\n";
-
- programCollection.glslSources.add("comp") << glu::ComputeSource(src.str());
+ for (deUint32 variant = 0; variant <= 1; variant++)
+ {
+ std::ostringstream src;
+ src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_440) << "\n"
+ << "\n";
+ if (variant != 0)
+ {
+ src << "#extension GL_EXT_shader_image_load_formatted : require\n";
+ }
+ src << "layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in;\n";
+ if (variant == 0)
+ src << "layout (binding = 0, " << formatQualifierStr << ") " << maybeRestrictStr << "readonly uniform " << imageTypeStr << " u_image0;\n";
+ else
+ src << "layout (binding = 0) " << maybeRestrictStr << "readonly uniform " << imageTypeStr << " u_image0;\n";
+ src << "layout (binding = 1, " << formatQualifierStr << ") " << maybeRestrictStr << "writeonly uniform " << imageTypeStr << " u_image1;\n"
+ << "\n"
+ << "void main (void)\n"
+ << "{\n"
+ << (dimension == 1 ?
+ " int pos = int(gl_GlobalInvocationID.x);\n"
+ " imageStore(u_image1, pos, imageLoad(u_image0, " + xMax + "-pos));\n"
+ : dimension == 2 ?
+ " ivec2 pos = ivec2(gl_GlobalInvocationID.xy);\n"
+ " imageStore(u_image1, pos, imageLoad(u_image0, ivec2(" + xMax + "-pos.x, pos.y)));\n"
+ : dimension == 3 ?
+ " ivec3 pos = ivec3(gl_GlobalInvocationID);\n"
+ " imageStore(u_image1, pos, imageLoad(u_image0, ivec3(" + xMax + "-pos.x, pos.y, pos.z)));\n"
+ : "")
+ << "}\n";
+
+ programCollection.glslSources.add(variant == 0 ? "comp" : "comp_fmt_unknown") << glu::ComputeSource(src.str());
+ }