Select viewport index in GS for multi-view instanced rendering
The patch extends the OutputHLSL and DynamicHLSL translators to
select the viewport index in the geometry shader and propagate
the ViewID variable to the fragment shader.
BUG=angleproject:2062
TEST=angle_end2end_tests
Change-Id: I9e344a7521e2e1137e6eb38d0bfecea8bece778f
Reviewed-on: https://chromium-review.googlesource.com/608967
Commit-Queue: Martin Radev <mradev@nvidia.com>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/compiler/translator/OutputHLSL.cpp b/src/compiler/translator/OutputHLSL.cpp
index 0dc1c56..39f856d 100644
--- a/src/compiler/translator/OutputHLSL.cpp
+++ b/src/compiler/translator/OutputHLSL.cpp
@@ -113,6 +113,9 @@
mUsesFrontFacing = false;
mUsesPointSize = false;
mUsesInstanceID = false;
+ mHasMultiviewExtensionEnabled = IsExtensionEnabled(mExtensionBehavior, "GL_OVR_multiview") ||
+ IsExtensionEnabled(mExtensionBehavior, "GL_OVR_multiview2");
+ mUsesViewID = false;
mUsesVertexID = false;
mUsesFragDepth = false;
mUsesNumWorkGroups = false;
@@ -708,6 +711,16 @@
out << "#define GL_USES_POINT_SIZE\n";
}
+ if (mHasMultiviewExtensionEnabled)
+ {
+ out << "#define GL_ANGLE_MULTIVIEW_ENABLED\n";
+ }
+
+ if (mUsesViewID)
+ {
+ out << "#define GL_USES_VIEW_ID\n";
+ }
+
if (mUsesFragDepth)
{
out << "#define GL_USES_FRAG_DEPTH\n";
@@ -804,6 +817,10 @@
{
mReferencedVaryings[name] = node;
out << Decorate(name);
+ if (name == "ViewID_OVR")
+ {
+ mUsesViewID = true;
+ }
}
else if (qualifier == EvqFragmentOut)
{