| // | |
| // Copyright 2019 The ANGLE Project Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // | |
| // samplerVideoWEBGL_test.cpp: | |
| // Tests compiling shaders that use samplerVideoWEBGL types | |
| // | |
| #include "GLSLANG/ShaderLang.h" | |
| #include "angle_gl.h" | |
| #include "gtest/gtest.h" | |
| #include "tests/test_utils/ShaderCompileTreeTest.h" | |
| using namespace sh; | |
| class SamplerVideoWEBGLTest : public ShaderCompileTreeTest | |
| { | |
| public: | |
| SamplerVideoWEBGLTest() {} | |
| void initResources(ShBuiltInResources *resources) override | |
| { | |
| resources->WEBGL_video_texture = 1; | |
| } | |
| protected: | |
| ::GLenum getShaderType() const override { return GL_FRAGMENT_SHADER; } | |
| ShShaderSpec getShaderSpec() const override { return SH_GLES3_1_SPEC; } | |
| }; | |
| // Checks whether compiler returns error when extension isn't enabled but samplerVideoWEBGL is | |
| // used in shader. | |
| TEST_F(SamplerVideoWEBGLTest, UsingSamplerVideoWEBGLWithoutWEBGLVideoTextureExtensionRequired) | |
| { | |
| const std::string &shaderString = | |
| "precision mediump float;\n" | |
| "uniform mediump samplerVideoWEBGL s;\n" | |
| "void main()\n" | |
| "{\n" | |
| " gl_FragColor = textureVideoWEBGL(s, vec2(0.0, 0.0));\n" | |
| "}\n"; | |
| if (compile(shaderString)) | |
| { | |
| FAIL() << "Shader compilation passed, expecting fail:\n" << mInfoLog; | |
| } | |
| } | |
| // Checks whether compiler returns error when extension isn't enabled but use samplerVideoWEBGL is | |
| // used in ES300 shader. | |
| TEST_F(SamplerVideoWEBGLTest, | |
| UsingSamplerVideoWEBGLWithoutWEBGLVideoTextureExtensionRequiredInES300) | |
| { | |
| const std::string &shaderString = | |
| "#version 300 es" | |
| "precision mediump float;\n" | |
| "uniform mediump samplerVideoWEBGL s;\n" | |
| "out vec4 my_FragColor;\n" | |
| "void main()\n" | |
| "{\n" | |
| " my_FragColor = texture(s, vec2(0.0, 0.0));\n" | |
| "}\n"; | |
| if (compile(shaderString)) | |
| { | |
| FAIL() << "Shader compilation passed, expecting fail:\n" << mInfoLog; | |
| } | |
| } | |
| // Checks whether compiler can support samplerVideoWEBGL as texture2D parameter. | |
| TEST_F(SamplerVideoWEBGLTest, SamplerVideoWEBGLCanBeSupportedInTexture2D) | |
| { | |
| const std::string &shaderString = | |
| "#extension GL_WEBGL_video_texture : require\n" | |
| "precision mediump float;\n" | |
| "uniform mediump samplerVideoWEBGL s;\n" | |
| "void main()\n" | |
| "{\n" | |
| " gl_FragColor = textureVideoWEBGL(s, vec2(0.0, 0.0));\n" | |
| "}\n"; | |
| if (!compile(shaderString)) | |
| { | |
| FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog; | |
| } | |
| } | |
| // Checks whether compiler can support samplerVideoWEBGL as texture parameter in ES300. | |
| TEST_F(SamplerVideoWEBGLTest, SamplerVideoWEBGLCanBeSupportedInTextureInES300) | |
| { | |
| const std::string &shaderString = | |
| "#version 300 es\n" | |
| "#extension GL_WEBGL_video_texture : require\n" | |
| "precision mediump float;\n" | |
| "uniform mediump samplerVideoWEBGL s;\n" | |
| "out vec4 my_FragColor;\n" | |
| "void main()\n" | |
| "{\n" | |
| " my_FragColor = texture(s, vec2(0.0, 0.0));\n" | |
| "}\n"; | |
| if (!compile(shaderString)) | |
| { | |
| FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog; | |
| } | |
| } |