| // |
| // Copyright 2015 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. |
| // |
| |
| // BindGeneratesResourceTest.cpp : Tests of the GL_CHROMIUM_bind_generates_resource extension. |
| |
| #include "test_utils/ANGLETest.h" |
| |
| namespace angle |
| { |
| |
| class BindGeneratesResourceTest : public ANGLETest |
| { |
| protected: |
| BindGeneratesResourceTest() { setBindGeneratesResource(false); } |
| }; |
| |
| // Context creation would fail if EGL_CHROMIUM_create_context_bind_generates_resource was not |
| // available so the GL extension should always be present |
| TEST_P(BindGeneratesResourceTest, ExtensionStringExposed) |
| { |
| EXPECT_TRUE(IsGLExtensionEnabled("GL_CHROMIUM_bind_generates_resource")); |
| } |
| |
| // Verify that GL_BIND_GENERATES_RESOURCE_CHROMIUM can be queried but not changed |
| TEST_P(BindGeneratesResourceTest, QueryValidation) |
| { |
| GLint intValue = 2; |
| glGetIntegerv(GL_BIND_GENERATES_RESOURCE_CHROMIUM, &intValue); |
| EXPECT_GL_NO_ERROR(); |
| EXPECT_GL_FALSE(intValue); |
| |
| float floatValue = 2.0f; |
| glGetFloatv(GL_BIND_GENERATES_RESOURCE_CHROMIUM, &floatValue); |
| EXPECT_GL_NO_ERROR(); |
| EXPECT_EQ(floatValue, 0.0f); |
| |
| GLboolean boolValue = GL_TRUE; |
| glGetBooleanv(GL_BIND_GENERATES_RESOURCE_CHROMIUM, &boolValue); |
| EXPECT_GL_NO_ERROR(); |
| EXPECT_GL_FALSE(boolValue); |
| |
| boolValue = glIsEnabled(GL_BIND_GENERATES_RESOURCE_CHROMIUM); |
| EXPECT_GL_NO_ERROR(); |
| EXPECT_GL_FALSE(boolValue); |
| |
| glEnable(GL_BIND_GENERATES_RESOURCE_CHROMIUM); |
| EXPECT_GL_ERROR(GL_INVALID_ENUM); |
| |
| glDisable(GL_BIND_GENERATES_RESOURCE_CHROMIUM); |
| EXPECT_GL_ERROR(GL_INVALID_ENUM); |
| } |
| |
| // Test that buffers cannot be generated on bind |
| TEST_P(BindGeneratesResourceTest, Buffers) |
| { |
| glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 2); |
| EXPECT_GL_ERROR(GL_INVALID_OPERATION); |
| |
| glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); |
| EXPECT_GL_NO_ERROR(); |
| |
| if (getClientMajorVersion() >= 3) |
| { |
| glBindBufferBase(GL_UNIFORM_BUFFER, 0, 3); |
| EXPECT_GL_ERROR(GL_INVALID_OPERATION); |
| |
| glBindBufferBase(GL_UNIFORM_BUFFER, 0, 0); |
| EXPECT_GL_NO_ERROR(); |
| |
| glBindBufferRange(GL_UNIFORM_BUFFER, 0, 4, 1, 2); |
| EXPECT_GL_ERROR(GL_INVALID_OPERATION); |
| |
| glBindBufferRange(GL_UNIFORM_BUFFER, 0, 0, 1, 2); |
| EXPECT_GL_NO_ERROR(); |
| } |
| } |
| |
| // Test that textures cannot be generated on bind |
| TEST_P(BindGeneratesResourceTest, Textures) |
| { |
| glBindTexture(GL_TEXTURE_2D, 2); |
| EXPECT_GL_ERROR(GL_INVALID_OPERATION); |
| |
| glBindTexture(GL_TEXTURE_2D, 0); |
| EXPECT_GL_NO_ERROR(); |
| } |
| |
| // Test that framebuffers cannot be generated on bind |
| TEST_P(BindGeneratesResourceTest, Framebuffers) |
| { |
| glBindFramebuffer(GL_FRAMEBUFFER, 2); |
| EXPECT_GL_ERROR(GL_INVALID_OPERATION); |
| |
| glBindFramebuffer(GL_FRAMEBUFFER, 0); |
| EXPECT_GL_NO_ERROR(); |
| } |
| |
| // Test that renderbuffer cannot be generated on bind |
| TEST_P(BindGeneratesResourceTest, Renderbuffers) |
| { |
| glBindRenderbuffer(GL_RENDERBUFFER, 2); |
| EXPECT_GL_ERROR(GL_INVALID_OPERATION); |
| |
| glBindRenderbuffer(GL_RENDERBUFFER, 0); |
| EXPECT_GL_NO_ERROR(); |
| } |
| |
| // Use this to select which configurations (e.g. which renderer, which GLES major version) these |
| // tests should be run against. |
| ANGLE_INSTANTIATE_TEST_ES2_AND_ES3(BindGeneratesResourceTest); |
| |
| } // namespace angle |