// // Copyright 2018 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. // // EXT_shader_texture_lod_test.cpp: // Test for EXT_shader_texture_lod // #include "tests/test_utils/ShaderExtensionTest.h" using EXTShaderTextureLodTest = sh::ShaderExtensionTest; namespace { const char EXTPragma[] = "#extension GL_EXT_shader_texture_lod : require\n"; // Shader calling texture2DLodEXT() const char ESSL100_TextureLodShader[] = R"( precision mediump float; varying vec2 texCoord0v; uniform float lod; uniform sampler2D tex; void main() { vec4 color = texture2DLodEXT(tex, texCoord0v, lod); })"; // Extension flag is required to compile properly. Expect failure when it is // not present. TEST_P(EXTShaderTextureLodTest, CompileFailsWithoutExtension) { mResources.EXT_shader_texture_lod = 0; InitializeCompiler(); EXPECT_FALSE(TestShaderCompile(EXTPragma)); } // Extension directive is required to compile properly. Expect failure when // it is not present. TEST_P(EXTShaderTextureLodTest, CompileFailsWithExtensionWithoutPragma) { mResources.EXT_shader_texture_lod = 1; InitializeCompiler(); EXPECT_FALSE(TestShaderCompile("")); } // With extension flag and extension directive, compiling succeeds. // Also test that the extension directive state is reset correctly. TEST_P(EXTShaderTextureLodTest, CompileSucceedsWithExtensionAndPragma) { mResources.EXT_shader_texture_lod = 1; InitializeCompiler(); EXPECT_TRUE(TestShaderCompile(EXTPragma)); // Test reset functionality. EXPECT_FALSE(TestShaderCompile("")); EXPECT_TRUE(TestShaderCompile(EXTPragma)); } // The SL #version 100 shaders that are correct work similarly // in both GL2 and GL3, with and without the version string. INSTANTIATE_TEST_SUITE_P(CorrectESSL100Shaders, EXTShaderTextureLodTest, Combine(Values(SH_GLES2_SPEC), Values(sh::ESSLVersion100), Values(ESSL100_TextureLodShader))); } // anonymous namespace