Add shader translator support for OVR_multiview
The OVR_multiview and OVR_multiview2 extensions add gl_ViewID_OVR to
shaders. gl_ViewID_OVR can be translated either as is in GLSL output
or as a uniform by setting the SH_TRANSLATE_VIEWID_OVR_AS_UNIFORM
compiler flag.
If WebGL output is selected, the shaders will be validated according
to proposed rules in the WEBGL_multiview spec.
BUG=angleproject:1669
TEST=angle_unittests
Change-Id: I19ea3a6c8b4edb78be03f1a50a96bfef018870d0
Reviewed-on: https://chromium-review.googlesource.com/422848
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/compiler/translator/Initialize.cpp b/src/compiler/translator/Initialize.cpp
index 45ff056..c787883 100644
--- a/src/compiler/translator/Initialize.cpp
+++ b/src/compiler/translator/Initialize.cpp
@@ -706,6 +706,14 @@
// Insert some special built-in variables that are not in
// the built-in header files.
//
+
+ if (resources.OVR_multiview && type != GL_COMPUTE_SHADER)
+ {
+ symbolTable.insert(COMMON_BUILTINS, "GL_OVR_multiview",
+ new TVariable(NewPoolTString("gl_ViewID_OVR"),
+ TType(EbtUInt, EbpHigh, EvqViewIDOVR, 1)));
+ }
+
switch (type)
{
case GL_FRAGMENT_SHADER:
@@ -858,6 +866,11 @@
extBehavior["GL_NV_shader_framebuffer_fetch"] = EBhUndefined;
if (resources.ARM_shader_framebuffer_fetch)
extBehavior["GL_ARM_shader_framebuffer_fetch"] = EBhUndefined;
+ if (resources.OVR_multiview)
+ {
+ extBehavior["GL_OVR_multiview"] = EBhUndefined;
+ extBehavior["GL_OVR_multiview2"] = EBhUndefined;
+ }
}
void ResetExtensionBehavior(TExtensionBehavior &extBehavior)