// // 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. // // ObjectAllocationTest // Tests for object allocations and lifetimes. // #include "test_utils/ANGLETest.h" using namespace angle; namespace { class ObjectAllocationTest : public ANGLETest { protected: ObjectAllocationTest() {} }; class ObjectAllocationTestES3 : public ObjectAllocationTest {}; // Test that we don't re-allocate a bound framebuffer ID. TEST_P(ObjectAllocationTestES3, BindFramebufferBeforeGen) { glBindFramebuffer(GL_FRAMEBUFFER, 1); GLuint fbo = 0; glGenFramebuffers(1, &fbo); EXPECT_NE(1u, fbo); glDeleteFramebuffers(1, &fbo); EXPECT_GL_NO_ERROR(); } // Test that we don't re-allocate a bound framebuffer ID, other pattern. TEST_P(ObjectAllocationTestES3, BindFramebufferAfterGen) { GLuint firstFBO = 0; glGenFramebuffers(1, &firstFBO); glBindFramebuffer(GL_FRAMEBUFFER, 1); glDeleteFramebuffers(1, &firstFBO); glBindFramebuffer(GL_FRAMEBUFFER, 2); GLuint secondFBOs[2] = {0}; glGenFramebuffers(2, secondFBOs); EXPECT_NE(2u, secondFBOs[0]); EXPECT_NE(2u, secondFBOs[1]); glDeleteFramebuffers(2, secondFBOs); EXPECT_GL_NO_ERROR(); } // Test that we don't re-allocate a bound framebuffer ID. TEST_P(ObjectAllocationTest, BindRenderbuffer) { GLuint rbId; glGenRenderbuffers(1, &rbId); glBindRenderbuffer(GL_RENDERBUFFER, rbId); EXPECT_GL_NO_ERROR(); // Swap now to trigger the serialization of the renderbuffer that // was initialized with the default values swapBuffers(); glDeleteRenderbuffers(1, &rbId); EXPECT_GL_NO_ERROR(); } // Renderbuffers can be created on the fly by calling glBindRenderbuffer, // so// check that the call doesn't fail that the renderbuffer is also deleted TEST_P(ObjectAllocationTest, BindRenderbufferBeforeGenAndDelete) { GLuint rbId = 1; glBindRenderbuffer(GL_RENDERBUFFER, rbId); EXPECT_GL_NO_ERROR(); // Swap now to trigger the serialization of the renderbuffer that // was initialized with the default values swapBuffers(); glDeleteRenderbuffers(1, &rbId); EXPECT_GL_NO_ERROR(); } // Buffers can be created on the fly by calling glBindBuffer, so // check that the call doesn't fail that the buffer is also deleted TEST_P(ObjectAllocationTest, BindBufferBeforeGenAndDelete) { GLuint id = 1; glBindBuffer(GL_ARRAY_BUFFER, id); EXPECT_GL_NO_ERROR(); // trigger serialization to capture the created buffer ID swapBuffers(); glDeleteBuffers(1, &id); EXPECT_GL_NO_ERROR(); } // Textures can be created on the fly by calling glBindTexture, so // check that the call doesn't fail that the texture is also deleted TEST_P(ObjectAllocationTest, BindTextureBeforeGenAndDelete) { GLuint id = 1; glBindTexture(GL_TEXTURE_2D, id); EXPECT_GL_NO_ERROR(); // trigger serialization to capture the created texture ID swapBuffers(); glDeleteTextures(1, &id); EXPECT_GL_NO_ERROR(); } } // anonymous namespace GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(ObjectAllocationTest); ANGLE_INSTANTIATE_TEST_ES2(ObjectAllocationTest); GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(ObjectAllocationTestES3); ANGLE_INSTANTIATE_TEST_ES3(ObjectAllocationTestES3);