Vulkan: Don't let glslang link shaders
The translator outputs intermediate shaders for Vulkan that are later to
be modified by the SPIR-V transformer. glslang has no business trying
to link them.
Bug: angleproject:5740
Change-Id: I9ae418f54b91312b5fd0ef794acbc46a40261a0e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2753096
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Ian Elliott <ianelliott@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/glslang_wrapper_utils.cpp b/src/libANGLE/renderer/glslang_wrapper_utils.cpp
index da0fab7..1f8f0f9 100644
--- a/src/libANGLE/renderer/glslang_wrapper_utils.cpp
+++ b/src/libANGLE/renderer/glslang_wrapper_utils.cpp
@@ -5103,8 +5103,6 @@
{gl::ShaderType::Geometry, &geometryShader},
{gl::ShaderType::Compute, &computeShader},
};
- glslang::TProgram program;
-
for (const gl::ShaderType shaderType : linkedShaderStages)
{
if (shaderSources[shaderType].empty())
@@ -5112,18 +5110,12 @@
continue;
}
+ glslang::TProgram program;
+
ANGLE_TRY(CompileShader(callback, builtInResources, shaderType, shaderSources[shaderType],
shaders[shaderType], &program));
- }
- ANGLE_TRY(LinkProgram(callback, &program));
-
- for (const gl::ShaderType shaderType : linkedShaderStages)
- {
- if (shaderSources[shaderType].empty())
- {
- continue;
- }
+ ANGLE_TRY(LinkProgram(callback, &program));
glslang::TIntermediate *intermediate = program.getIntermediate(kShLanguageMap[shaderType]);
glslang::GlslangToSpv(*intermediate, (*spirvBlobsOut)[shaderType]);