Fix test failures due to glslang behaviour change.
* Desktop shaders compiling to SPIR-V require version 330 or higher.
* A new control for reporting cascading errors is introduced.
diff --git a/glslc/test/assembly.py b/glslc/test/assembly.py
index d4bc025..2a0e47f 100644
--- a/glslc/test/assembly.py
+++ b/glslc/test/assembly.py
@@ -124,8 +124,10 @@
glslc_args = ['-c', '-fshader-stage=vertex', shader]
expected_error = [
+ shader, ": error: #version: Desktop shaders for Vulkan SPIR-V require "
+ "version 140 or higher\n",
shader, ":2: error: '' : syntax error\n",
- '1 error generated.\n']
+ '2 errors generated.\n']
@inside_glslc_testsuite('SpirvAssembly')
diff --git a/glslc/test/option_dash_E.py b/glslc/test/option_dash_E.py
index e35e22b..eca5e5a 100644
--- a/glslc/test/option_dash_E.py
+++ b/glslc/test/option_dash_E.py
@@ -350,10 +350,11 @@
# OpenGL compatibility fragment shader. Can be compiled to SPIR-V successfully
# when target environment is set to opengl_compat. Compilation will fail when
-# target environment is set to other values. But preprocessing should succeed
-# with any target environment values.
+# target environment is set to other values. (gl_FragColor is predefined only
+# in the compatibility profile.) But preprocessing should succeed with any
+# target environment values.
def opengl_compat_frag_shader():
- return '''#version 140
+ return '''#version 330
uniform highp sampler2D tex;
void main(){
gl_FragColor = texture2D(tex, vec2(0.0, 0.0));
@@ -375,4 +376,4 @@
shader = FileShader(opengl_compat_frag_shader(), '.frag')
expected_stdout = opengl_compat_frag_shader()
- glslc_args = ['-E', '--target-env=vulkan', shader]
+ glslc_args = ['-E', '--target-env=opengl_compat', shader]
diff --git a/glslc/test/option_std.py b/glslc/test/option_std.py
index cce0d81..9ad762b 100644
--- a/glslc/test/option_std.py
+++ b/glslc/test/option_std.py
@@ -52,6 +52,7 @@
glslc_args = ['-c', '-std=', '450core', shader]
expected_error = ["glslc: error: invalid value '' in '-std='\n"]
+
# TODO(dneto): The error message changes with different versions of glslang.
@inside_glslc_testsuite('OptionStd')
class TestMissingVersionAndStd(expect.ErrorMessageSubstr):
diff --git a/glslc/test/option_target_env.py b/glslc/test/option_target_env.py
index 93b7be0..7c0b67a 100644
--- a/glslc/test/option_target_env.py
+++ b/glslc/test/option_target_env.py
@@ -18,7 +18,7 @@
def opengl_compat_fragment_shader():
- return """#version 140
+ return """#version 330
uniform highp sampler2D tex;
void main() {
gl_FragColor = texture2D(tex, vec2(0.0, 0.0));
@@ -26,7 +26,7 @@
def opengl_vertex_shader():
- return """#version 150
+ return """#version 330
void main() { int t = gl_VertexID; }"""
diff --git a/libshaderc/src/common_shaders_for_test.h b/libshaderc/src/common_shaders_for_test.h
index 07f6bf6..e297e8f 100644
--- a/libshaderc/src/common_shaders_for_test.h
+++ b/libshaderc/src/common_shaders_for_test.h
@@ -93,7 +93,7 @@
// A shader that compiles under OpenGL core profile rules.
const char kOpenGLVertexShader[] =
- R"(#version 140
+ R"(#version 330
void main() { int t = gl_VertexID; })";
// Empty 310 es shader. It is valid for vertex, fragment, compute shader kind.
diff --git a/libshaderc/src/shaderc.cc b/libshaderc/src/shaderc.cc
index fe33f44..aa85bd3 100644
--- a/libshaderc/src/shaderc.cc
+++ b/libshaderc/src/shaderc.cc
@@ -72,20 +72,16 @@
// Converts shaderc_target_env to EShMessages
EShMessages GetMessageRules(shaderc_target_env target) {
- EShMessages msgs = EShMsgDefault;
-
switch (target) {
case shaderc_target_env_opengl_compat:
break;
case shaderc_target_env_opengl:
- msgs = EShMsgSpvRules;
- break;
+ return static_cast<EShMessages>(EShMsgSpvRules | EShMsgCascadingErrors);
case shaderc_target_env_vulkan:
- msgs = static_cast<EShMessages>(EShMsgSpvRules | EShMsgVulkanRules);
- break;
+ return static_cast<EShMessages>(EShMsgSpvRules | EShMsgVulkanRules |
+ EShMsgCascadingErrors);
}
-
- return msgs;
+ return EShMsgCascadingErrors;
}
// A wrapper functor class to be used as stage deducer for libshaderc_util
@@ -151,7 +147,7 @@
return EShLangTessControl;
case shaderc_glsl_default_tess_evaluation_shader:
return EShLangTessEvaluation;
- case shaderc_spirv_assembly:
+ case shaderc_spirv_assembly:
return EShLangCount;
}
assert(0 && "Unhandled shaderc_shader_kind");
diff --git a/libshaderc/src/shaderc_cpp_test.cc b/libshaderc/src/shaderc_cpp_test.cc
index 0ba4c97..8f6a22a 100644
--- a/libshaderc/src/shaderc_cpp_test.cc
+++ b/libshaderc/src/shaderc_cpp_test.cc
@@ -535,7 +535,7 @@
// 'SampleInputFile'
EXPECT_FALSE(CompilationResultIsSuccess(compilation_result));
EXPECT_THAT(compilation_result.GetErrorMessage(),
- HasSubstr("SampleInputFile:4: error:"));
+ HasSubstr("SampleInputFile:3: error:"));
}
TEST_F(CppInterface, PreprocessingOnlyOption) {
diff --git a/libshaderc_util/include/libshaderc_util/compiler.h b/libshaderc_util/include/libshaderc_util/compiler.h
index b5f1273..149e2aa 100644
--- a/libshaderc_util/include/libshaderc_util/compiler.h
+++ b/libshaderc_util/include/libshaderc_util/compiler.h
@@ -99,7 +99,6 @@
generate_debug_info_(false),
message_rules_(GetDefaultRules()) {}
-
// Requests that the compiler place debug information into the object code,
// such as identifier names and line numbers.
void SetGenerateDebugInfo();
@@ -172,7 +171,8 @@
GlslInitializer* initializer) const;
static EShMessages GetDefaultRules() {
- return static_cast<EShMessages>(EShMsgSpvRules | EShMsgVulkanRules);
+ return static_cast<EShMessages>(EShMsgSpvRules | EShMsgVulkanRules |
+ EShMsgCascadingErrors);
}
protected:
@@ -252,7 +252,6 @@
// When true, use the default version and profile from eponymous data members.
bool force_version_profile_;
-
// Macro definitions that must be available to reference in the shader source.
MacroDictionary predefined_macros_;
diff --git a/libshaderc_util/src/compiler_test.cc b/libshaderc_util/src/compiler_test.cc
index 9614f5d..30d00de 100644
--- a/libshaderc_util/src/compiler_test.cc
+++ b/libshaderc_util/src/compiler_test.cc
@@ -58,13 +58,13 @@
// A shader that compiles under OpenGL core profile rules.
const char kOpenGLVertexShader[] =
- R"(#version 150
+ R"(#version 330
void main() { int t = gl_VertexID; })";
// A shader that compiles under OpenGL core profile rules, even when
// deducing the stage.
const char kOpenGLVertexShaderDeducibleStage[] =
- R"(#version 150
+ R"(#version 330
#pragma shader_stage(vertex)
void main() { int t = gl_VertexID; })";