blob: df1d0c77170a168fce4dd66affcd26b743d5a76d [file] [log] [blame]
//
// 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;
}
}