Vulkan: Implement shader compilation.
This hooks up the Vulkan GLSL, decorated with locations, to glslang,
and then pipes the SPIRV back to the Program implementation for later
use when making pipelines to run draw calls.
The program compilation tests work now, but don't really test
anything other than not generating Vulkan validation layer errors
during compilation and shader object generation.
BUG=angleproject:1576
Change-Id: I625e42219f4b4d1433dd3109b94e1a2f666ba4bd
Reviewed-on: https://chromium-review.googlesource.com/408519
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/Program.cpp b/src/libANGLE/Program.cpp
index e3ce80f..ab1203f 100644
--- a/src/libANGLE/Program.cpp
+++ b/src/libANGLE/Program.cpp
@@ -582,8 +582,10 @@
// The attached shaders are checked for linking errors by matching up their variables.
// Uniform, input and output variables get collected.
// The code gets compiled into binaries.
-Error Program::link(const ContextState &data)
+Error Program::link(const gl::Context *context)
{
+ const auto &data = context->getContextState();
+
unlink(false);
mInfoLog.reset();
@@ -635,8 +637,9 @@
return NoError();
}
- gl::VaryingPacking noVaryingPacking(0, PackMode::ANGLE_RELAXED);
- ANGLE_TRY_RESULT(mProgram->link(data, noVaryingPacking, mInfoLog), mLinked);
+ gl::VaryingPacking noPacking(0, PackMode::ANGLE_RELAXED);
+ ANGLE_TRY_RESULT(mProgram->link(context->getImplementation(), noPacking, mInfoLog),
+ mLinked);
if (!mLinked)
{
return NoError();
@@ -705,7 +708,8 @@
return NoError();
}
- ANGLE_TRY_RESULT(mProgram->link(data, varyingPacking, mInfoLog), mLinked);
+ ANGLE_TRY_RESULT(mProgram->link(context->getImplementation(), varyingPacking, mInfoLog),
+ mLinked);
if (!mLinked)
{
return NoError();