| // |
| // Copyright 2017 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. |
| // |
| |
| // SamplerTest.cpp : Tests for samplers. |
| |
| #include "test_utils/ANGLETest.h" |
| |
| #include "test_utils/gl_raii.h" |
| |
| namespace angle |
| { |
| |
| class SamplersTest : public ANGLETest |
| { |
| protected: |
| SamplersTest() {} |
| |
| // Sets a value for GL_TEXTURE_MAX_ANISOTROPY_EXT and expects it to fail. |
| void validateInvalidAnisotropy(GLSampler &sampler, float invalidValue) |
| { |
| glSamplerParameterf(sampler, GL_TEXTURE_MAX_ANISOTROPY_EXT, invalidValue); |
| EXPECT_GL_ERROR(GL_INVALID_VALUE); |
| } |
| |
| // Sets a value for GL_TEXTURE_MAX_ANISOTROPY_EXT and expects it to work. |
| void validateValidAnisotropy(GLSampler &sampler, float validValue) |
| { |
| glSamplerParameterf(sampler, GL_TEXTURE_MAX_ANISOTROPY_EXT, validValue); |
| EXPECT_GL_NO_ERROR(); |
| |
| GLfloat valueToVerify = 0.0f; |
| glGetSamplerParameterfv(sampler, GL_TEXTURE_MAX_ANISOTROPY_EXT, &valueToVerify); |
| ASSERT_EQ(valueToVerify, validValue); |
| } |
| }; |
| |
| // Verify that samplerParameterf supports TEXTURE_MAX_ANISOTROPY_EXT valid values. |
| TEST_P(SamplersTest, ValidTextureSamplerMaxAnisotropyExt) |
| { |
| GLSampler sampler; |
| |
| // Exact min |
| validateValidAnisotropy(sampler, 1.0f); |
| |
| GLfloat maxValue = 0.0f; |
| glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maxValue); |
| |
| // Max value |
| validateValidAnisotropy(sampler, maxValue - 1); |
| |
| // In-between |
| GLfloat between = (1.0f + maxValue) / 2; |
| validateValidAnisotropy(sampler, between); |
| } |
| |
| // Verify an error is thrown if we try to go under the minimum value for |
| // GL_TEXTURE_MAX_ANISOTROPY_EXT |
| TEST_P(SamplersTest, InvalidUnderTextureSamplerMaxAnisotropyExt) |
| { |
| GLSampler sampler; |
| |
| // Under min |
| validateInvalidAnisotropy(sampler, 0.0f); |
| } |
| |
| // Verify an error is thrown if we try to go over the max value for |
| // GL_TEXTURE_MAX_ANISOTROPY_EXT |
| TEST_P(SamplersTest, InvalidOverTextureSamplerMaxAnisotropyExt) |
| { |
| GLSampler sampler; |
| |
| GLfloat maxValue = 0.0f; |
| glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maxValue); |
| maxValue += 1; |
| |
| validateInvalidAnisotropy(sampler, maxValue); |
| } |
| |
| // Use this to select which configurations (e.g. which renderer, which GLES major version) these |
| // tests should be run against. |
| // Samplers are only supported on ES3. |
| ANGLE_INSTANTIATE_TEST(SamplersTest, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES(), ES3_VULKAN()); |
| } // namespace angle |