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