xref: /aosp_15_r20/external/angle/src/tests/gl_tests/BindGeneratesResourceTest.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2015 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker 
7*8975f5c5SAndroid Build Coastguard Worker // BindGeneratesResourceTest.cpp : Tests of the GL_CHROMIUM_bind_generates_resource extension.
8*8975f5c5SAndroid Build Coastguard Worker 
9*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/ANGLETest.h"
10*8975f5c5SAndroid Build Coastguard Worker 
11*8975f5c5SAndroid Build Coastguard Worker namespace angle
12*8975f5c5SAndroid Build Coastguard Worker {
13*8975f5c5SAndroid Build Coastguard Worker 
14*8975f5c5SAndroid Build Coastguard Worker class BindGeneratesResourceTest : public ANGLETest<>
15*8975f5c5SAndroid Build Coastguard Worker {
16*8975f5c5SAndroid Build Coastguard Worker   protected:
BindGeneratesResourceTest()17*8975f5c5SAndroid Build Coastguard Worker     BindGeneratesResourceTest() { setBindGeneratesResource(false); }
18*8975f5c5SAndroid Build Coastguard Worker };
19*8975f5c5SAndroid Build Coastguard Worker 
20*8975f5c5SAndroid Build Coastguard Worker // Context creation would fail if EGL_CHROMIUM_create_context_bind_generates_resource was not
21*8975f5c5SAndroid Build Coastguard Worker // available so the GL extension should always be present
TEST_P(BindGeneratesResourceTest,ExtensionStringExposed)22*8975f5c5SAndroid Build Coastguard Worker TEST_P(BindGeneratesResourceTest, ExtensionStringExposed)
23*8975f5c5SAndroid Build Coastguard Worker {
24*8975f5c5SAndroid Build Coastguard Worker     EXPECT_TRUE(IsGLExtensionEnabled("GL_CHROMIUM_bind_generates_resource"));
25*8975f5c5SAndroid Build Coastguard Worker }
26*8975f5c5SAndroid Build Coastguard Worker 
27*8975f5c5SAndroid Build Coastguard Worker // Verify that GL_BIND_GENERATES_RESOURCE_CHROMIUM can be queried but not changed
TEST_P(BindGeneratesResourceTest,QueryValidation)28*8975f5c5SAndroid Build Coastguard Worker TEST_P(BindGeneratesResourceTest, QueryValidation)
29*8975f5c5SAndroid Build Coastguard Worker {
30*8975f5c5SAndroid Build Coastguard Worker     GLint intValue = 2;
31*8975f5c5SAndroid Build Coastguard Worker     glGetIntegerv(GL_BIND_GENERATES_RESOURCE_CHROMIUM, &intValue);
32*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_NO_ERROR();
33*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_FALSE(intValue);
34*8975f5c5SAndroid Build Coastguard Worker 
35*8975f5c5SAndroid Build Coastguard Worker     float floatValue = 2.0f;
36*8975f5c5SAndroid Build Coastguard Worker     glGetFloatv(GL_BIND_GENERATES_RESOURCE_CHROMIUM, &floatValue);
37*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_NO_ERROR();
38*8975f5c5SAndroid Build Coastguard Worker     EXPECT_EQ(floatValue, 0.0f);
39*8975f5c5SAndroid Build Coastguard Worker 
40*8975f5c5SAndroid Build Coastguard Worker     GLboolean boolValue = GL_TRUE;
41*8975f5c5SAndroid Build Coastguard Worker     glGetBooleanv(GL_BIND_GENERATES_RESOURCE_CHROMIUM, &boolValue);
42*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_NO_ERROR();
43*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_FALSE(boolValue);
44*8975f5c5SAndroid Build Coastguard Worker 
45*8975f5c5SAndroid Build Coastguard Worker     boolValue = glIsEnabled(GL_BIND_GENERATES_RESOURCE_CHROMIUM);
46*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_NO_ERROR();
47*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_FALSE(boolValue);
48*8975f5c5SAndroid Build Coastguard Worker 
49*8975f5c5SAndroid Build Coastguard Worker     glEnable(GL_BIND_GENERATES_RESOURCE_CHROMIUM);
50*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_ERROR(GL_INVALID_ENUM);
51*8975f5c5SAndroid Build Coastguard Worker 
52*8975f5c5SAndroid Build Coastguard Worker     glDisable(GL_BIND_GENERATES_RESOURCE_CHROMIUM);
53*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_ERROR(GL_INVALID_ENUM);
54*8975f5c5SAndroid Build Coastguard Worker }
55*8975f5c5SAndroid Build Coastguard Worker 
56*8975f5c5SAndroid Build Coastguard Worker // Test that buffers cannot be generated on bind
TEST_P(BindGeneratesResourceTest,Buffers)57*8975f5c5SAndroid Build Coastguard Worker TEST_P(BindGeneratesResourceTest, Buffers)
58*8975f5c5SAndroid Build Coastguard Worker {
59*8975f5c5SAndroid Build Coastguard Worker     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 2);
60*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_ERROR(GL_INVALID_OPERATION);
61*8975f5c5SAndroid Build Coastguard Worker 
62*8975f5c5SAndroid Build Coastguard Worker     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
63*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_NO_ERROR();
64*8975f5c5SAndroid Build Coastguard Worker 
65*8975f5c5SAndroid Build Coastguard Worker     if (getClientMajorVersion() >= 3)
66*8975f5c5SAndroid Build Coastguard Worker     {
67*8975f5c5SAndroid Build Coastguard Worker         glBindBufferBase(GL_UNIFORM_BUFFER, 0, 3);
68*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_ERROR(GL_INVALID_OPERATION);
69*8975f5c5SAndroid Build Coastguard Worker 
70*8975f5c5SAndroid Build Coastguard Worker         glBindBufferBase(GL_UNIFORM_BUFFER, 0, 0);
71*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_NO_ERROR();
72*8975f5c5SAndroid Build Coastguard Worker 
73*8975f5c5SAndroid Build Coastguard Worker         glBindBufferRange(GL_UNIFORM_BUFFER, 0, 4, 1, 2);
74*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_ERROR(GL_INVALID_OPERATION);
75*8975f5c5SAndroid Build Coastguard Worker 
76*8975f5c5SAndroid Build Coastguard Worker         glBindBufferRange(GL_UNIFORM_BUFFER, 0, 0, 1, 2);
77*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_NO_ERROR();
78*8975f5c5SAndroid Build Coastguard Worker     }
79*8975f5c5SAndroid Build Coastguard Worker }
80*8975f5c5SAndroid Build Coastguard Worker 
81*8975f5c5SAndroid Build Coastguard Worker // Test that textures cannot be generated on bind
TEST_P(BindGeneratesResourceTest,Textures)82*8975f5c5SAndroid Build Coastguard Worker TEST_P(BindGeneratesResourceTest, Textures)
83*8975f5c5SAndroid Build Coastguard Worker {
84*8975f5c5SAndroid Build Coastguard Worker     glBindTexture(GL_TEXTURE_2D, 2);
85*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_ERROR(GL_INVALID_OPERATION);
86*8975f5c5SAndroid Build Coastguard Worker 
87*8975f5c5SAndroid Build Coastguard Worker     glBindTexture(GL_TEXTURE_2D, 0);
88*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_NO_ERROR();
89*8975f5c5SAndroid Build Coastguard Worker }
90*8975f5c5SAndroid Build Coastguard Worker 
91*8975f5c5SAndroid Build Coastguard Worker // Test that framebuffers cannot be generated on bind
TEST_P(BindGeneratesResourceTest,Framebuffers)92*8975f5c5SAndroid Build Coastguard Worker TEST_P(BindGeneratesResourceTest, Framebuffers)
93*8975f5c5SAndroid Build Coastguard Worker {
94*8975f5c5SAndroid Build Coastguard Worker     glBindFramebuffer(GL_FRAMEBUFFER, 2);
95*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_ERROR(GL_INVALID_OPERATION);
96*8975f5c5SAndroid Build Coastguard Worker 
97*8975f5c5SAndroid Build Coastguard Worker     glBindFramebuffer(GL_FRAMEBUFFER, 0);
98*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_NO_ERROR();
99*8975f5c5SAndroid Build Coastguard Worker }
100*8975f5c5SAndroid Build Coastguard Worker 
101*8975f5c5SAndroid Build Coastguard Worker // Test that renderbuffer cannot be generated on bind
TEST_P(BindGeneratesResourceTest,Renderbuffers)102*8975f5c5SAndroid Build Coastguard Worker TEST_P(BindGeneratesResourceTest, Renderbuffers)
103*8975f5c5SAndroid Build Coastguard Worker {
104*8975f5c5SAndroid Build Coastguard Worker     glBindRenderbuffer(GL_RENDERBUFFER, 2);
105*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_ERROR(GL_INVALID_OPERATION);
106*8975f5c5SAndroid Build Coastguard Worker 
107*8975f5c5SAndroid Build Coastguard Worker     glBindRenderbuffer(GL_RENDERBUFFER, 0);
108*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_NO_ERROR();
109*8975f5c5SAndroid Build Coastguard Worker }
110*8975f5c5SAndroid Build Coastguard Worker 
111*8975f5c5SAndroid Build Coastguard Worker // Use this to select which configurations (e.g. which renderer, which GLES major version) these
112*8975f5c5SAndroid Build Coastguard Worker // tests should be run against.
113*8975f5c5SAndroid Build Coastguard Worker ANGLE_INSTANTIATE_TEST_ES2_AND_ES3(BindGeneratesResourceTest);
114*8975f5c5SAndroid Build Coastguard Worker 
115*8975f5c5SAndroid Build Coastguard Worker }  // namespace angle
116