Commit e93a438b by Artem Bolgar Committed by Commit Bot

GL_OVR_multiview shouldn't be defined for WebGL spec'ed shaders

According to the latest change in WebGL's OVR_multiview2 spec, the GL_OVR_multiview should NOT be defined. Refer to https://www.khronos.org/registry/webgl/extensions/OVR_multiview2/ I.e. this shader should NOT fail compilation: #version 300 es #extension GL_OVR_multiview2 : require #ifdef GL_OVR_multiview #error legacy GL_OVR_multiview support must be forbidden #endif .... Bug: angleproject:4279 Change-Id: Ic94cba6785ea3a1fa14d5131dc0960214aa574be Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1994830 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarRafael Cintron <rafael.cintron@microsoft.com>
parent 512abe85
...@@ -4,11 +4,11 @@ ...@@ -4,11 +4,11 @@
"src/compiler/translator/generate_parser.py": "src/compiler/translator/generate_parser.py":
"566178ecdfae3a29803b3687fc518ebb", "566178ecdfae3a29803b3687fc518ebb",
"src/compiler/translator/glslang.l": "src/compiler/translator/glslang.l":
"377199aacc754d2ffcc5016e99701228", "2f602a853e4c4d669edc3cc36a1a8c4a",
"src/compiler/translator/glslang.y": "src/compiler/translator/glslang.y":
"928cfcdd99877b5a289694a4057d5d76", "928cfcdd99877b5a289694a4057d5d76",
"src/compiler/translator/glslang_lex_autogen.cpp": "src/compiler/translator/glslang_lex_autogen.cpp":
"883b81686c9b956fab24e85b9131081e", "809307250ccc9a6c6d026da45b57dcec",
"src/compiler/translator/glslang_tab_autogen.cpp": "src/compiler/translator/glslang_tab_autogen.cpp":
"f693228f495aac4629ee8e30c12dc62f", "f693228f495aac4629ee8e30c12dc62f",
"src/compiler/translator/glslang_tab_autogen.h": "src/compiler/translator/glslang_tab_autogen.h":
......
...@@ -804,6 +804,11 @@ int glslang_scan(size_t count, const char* const string[], const int length[], ...@@ -804,6 +804,11 @@ int glslang_scan(size_t count, const char* const string[], const int length[],
const TExtensionBehavior& extBehavior = context->extensionBehavior(); const TExtensionBehavior& extBehavior = context->extensionBehavior();
for (TExtensionBehavior::const_iterator iter = extBehavior.begin(); for (TExtensionBehavior::const_iterator iter = extBehavior.begin();
iter != extBehavior.end(); ++iter) { iter != extBehavior.end(); ++iter) {
// OVR_multiview should not be defined for WebGL spec'ed shaders.
if (sh::IsWebGLBasedSpec(context->getShaderSpec()) &&
iter->first == TExtension::OVR_multiview) {
continue;
}
preprocessor->predefineMacro(GetExtensionNameString(iter->first), 1); preprocessor->predefineMacro(GetExtensionNameString(iter->first), 1);
} }
if (context->getFragmentPrecisionHigh()) if (context->getFragmentPrecisionHigh())
......
...@@ -3519,6 +3519,12 @@ int glslang_scan(size_t count, ...@@ -3519,6 +3519,12 @@ int glslang_scan(size_t count,
for (TExtensionBehavior::const_iterator iter = extBehavior.begin(); iter != extBehavior.end(); for (TExtensionBehavior::const_iterator iter = extBehavior.begin(); iter != extBehavior.end();
++iter) ++iter)
{ {
// OVR_multiview should not be defined for WebGL spec'ed shaders.
if (sh::IsWebGLBasedSpec(context->getShaderSpec()) &&
iter->first == TExtension::OVR_multiview)
{
continue;
}
preprocessor->predefineMacro(GetExtensionNameString(iter->first), 1); preprocessor->predefineMacro(GetExtensionNameString(iter->first), 1);
} }
if (context->getFragmentPrecisionHigh()) if (context->getFragmentPrecisionHigh())
......
...@@ -582,6 +582,25 @@ TEST_F(OVRMultiview2FragmentShaderTest, ViewIDDeclaredAsFlatInput) ...@@ -582,6 +582,25 @@ TEST_F(OVRMultiview2FragmentShaderTest, ViewIDDeclaredAsFlatInput)
VariableOccursNTimes(mASTRoot, ImmutableString("ViewID_OVR"), EvqFlatIn, 1u); VariableOccursNTimes(mASTRoot, ImmutableString("ViewID_OVR"), EvqFlatIn, 1u);
} }
// Test that GL_OVR_multiview is not defined by the preprocessor for WebGL spec shader;
// Test that GL_OVR_multiview2 is defined by the preprocessor for WebGL spec shader.
TEST_F(OVRMultiview2FragmentShaderTest, PreprocessorOutput)
{
const std::string &shaderString =
"#version 300 es\n"
"#extension GL_OVR_multiview2 : require\n"
"#ifdef GL_OVR_multiview\n"
" #error legacy GL_OVR_multiview support must be forbidden\n"
"#endif\n"
"#ifndef GL_OVR_multiview2\n"
" #error GL_OVR_multiview2 support must be enabled\n"
"#endif\n"
"void main()\n"
"{\n"
"}\n";
compileAssumeSuccess(shaderString);
}
// Test that ViewID_OVR is declared as a flat output variable in an ESSL 1.00 vertex shader. // Test that ViewID_OVR is declared as a flat output variable in an ESSL 1.00 vertex shader.
TEST_F(OVRMultiview2VertexShaderTest, ViewIDDeclaredAsFlatOutput) TEST_F(OVRMultiview2VertexShaderTest, ViewIDDeclaredAsFlatOutput)
{ {
...@@ -595,6 +614,25 @@ TEST_F(OVRMultiview2VertexShaderTest, ViewIDDeclaredAsFlatOutput) ...@@ -595,6 +614,25 @@ TEST_F(OVRMultiview2VertexShaderTest, ViewIDDeclaredAsFlatOutput)
VariableOccursNTimes(mASTRoot, ImmutableString("ViewID_OVR"), EvqFlatOut, 2u); VariableOccursNTimes(mASTRoot, ImmutableString("ViewID_OVR"), EvqFlatOut, 2u);
} }
// Test that GL_OVR_multiview is not defined by the preprocessor for WebGL spec shader;
// Test that GL_OVR_multiview2 is defined by the preprocessor for WebGL spec shader.
TEST_F(OVRMultiview2VertexShaderTest, PreprocessorOutput)
{
const std::string &shaderString =
"#version 300 es\n"
"#extension GL_OVR_multiview2 : require\n"
"#ifdef GL_OVR_multiview\n"
" #error legacy GL_OVR_multiview support must be forbidden\n"
"#endif\n"
"#ifndef GL_OVR_multiview2\n"
" #error GL_OVR_multiview2 support must be enabled\n"
"#endif\n"
"void main()\n"
"{\n"
"}\n";
compileAssumeSuccess(shaderString);
}
// The test checks that the GL_NV_viewport_array2 extension is emitted in a vertex shader if the // The test checks that the GL_NV_viewport_array2 extension is emitted in a vertex shader if the
// SH_SELECT_VIEW_IN_NV_GLSL_VERTEX_SHADER option is set. // SH_SELECT_VIEW_IN_NV_GLSL_VERTEX_SHADER option is set.
TEST_F(OVRMultiview2VertexShaderOutputCodeTest, ViewportArray2IsEmitted) TEST_F(OVRMultiview2VertexShaderOutputCodeTest, ViewportArray2IsEmitted)
......
...@@ -94,7 +94,7 @@ class OVRMultiviewVertexShaderTest : public ShaderCompileTreeTest ...@@ -94,7 +94,7 @@ class OVRMultiviewVertexShaderTest : public ShaderCompileTreeTest
protected: protected:
::GLenum getShaderType() const override { return GL_VERTEX_SHADER; } ::GLenum getShaderType() const override { return GL_VERTEX_SHADER; }
ShShaderSpec getShaderSpec() const override { return SH_WEBGL3_SPEC; } ShShaderSpec getShaderSpec() const override { return SH_GLES3_1_SPEC; }
void initResources(ShBuiltInResources *resources) override void initResources(ShBuiltInResources *resources) override
{ {
resources->OVR_multiview = 1; resources->OVR_multiview = 1;
...@@ -109,7 +109,7 @@ class OVRMultiviewFragmentShaderTest : public ShaderCompileTreeTest ...@@ -109,7 +109,7 @@ class OVRMultiviewFragmentShaderTest : public ShaderCompileTreeTest
protected: protected:
::GLenum getShaderType() const override { return GL_FRAGMENT_SHADER; } ::GLenum getShaderType() const override { return GL_FRAGMENT_SHADER; }
ShShaderSpec getShaderSpec() const override { return SH_WEBGL3_SPEC; } ShShaderSpec getShaderSpec() const override { return SH_GLES3_1_SPEC; }
void initResources(ShBuiltInResources *resources) override void initResources(ShBuiltInResources *resources) override
{ {
resources->OVR_multiview = 1; resources->OVR_multiview = 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment