// // 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; } }