xref: /aosp_15_r20/external/angle/src/tests/gl_tests/SyncQueriesTest.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2016 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 // SyncQueriesTest.cpp: Tests of the GL_CHROMIUM_sync_query 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 SyncQueriesTest : public ANGLETest<>
15*8975f5c5SAndroid Build Coastguard Worker {
16*8975f5c5SAndroid Build Coastguard Worker   protected:
SyncQueriesTest()17*8975f5c5SAndroid Build Coastguard Worker     SyncQueriesTest()
18*8975f5c5SAndroid Build Coastguard Worker     {
19*8975f5c5SAndroid Build Coastguard Worker         setWindowWidth(128);
20*8975f5c5SAndroid Build Coastguard Worker         setWindowHeight(128);
21*8975f5c5SAndroid Build Coastguard Worker         setConfigRedBits(8);
22*8975f5c5SAndroid Build Coastguard Worker         setConfigGreenBits(8);
23*8975f5c5SAndroid Build Coastguard Worker         setConfigBlueBits(8);
24*8975f5c5SAndroid Build Coastguard Worker         setConfigAlphaBits(8);
25*8975f5c5SAndroid Build Coastguard Worker         setConfigDepthBits(24);
26*8975f5c5SAndroid Build Coastguard Worker     }
27*8975f5c5SAndroid Build Coastguard Worker 
testTearDown()28*8975f5c5SAndroid Build Coastguard Worker     void testTearDown() override
29*8975f5c5SAndroid Build Coastguard Worker     {
30*8975f5c5SAndroid Build Coastguard Worker         if (mQuery != 0)
31*8975f5c5SAndroid Build Coastguard Worker         {
32*8975f5c5SAndroid Build Coastguard Worker             glDeleteQueriesEXT(1, &mQuery);
33*8975f5c5SAndroid Build Coastguard Worker             mQuery = 0;
34*8975f5c5SAndroid Build Coastguard Worker         }
35*8975f5c5SAndroid Build Coastguard Worker     }
36*8975f5c5SAndroid Build Coastguard Worker 
37*8975f5c5SAndroid Build Coastguard Worker     GLuint mQuery = 0;
38*8975f5c5SAndroid Build Coastguard Worker };
39*8975f5c5SAndroid Build Coastguard Worker 
40*8975f5c5SAndroid Build Coastguard Worker // Test basic usage of sync queries
TEST_P(SyncQueriesTest,Basic)41*8975f5c5SAndroid Build Coastguard Worker TEST_P(SyncQueriesTest, Basic)
42*8975f5c5SAndroid Build Coastguard Worker {
43*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_CHROMIUM_sync_query"));
44*8975f5c5SAndroid Build Coastguard Worker 
45*8975f5c5SAndroid Build Coastguard Worker     glGenQueriesEXT(1, &mQuery);
46*8975f5c5SAndroid Build Coastguard Worker     glBeginQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM, mQuery);
47*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_NO_ERROR();
48*8975f5c5SAndroid Build Coastguard Worker 
49*8975f5c5SAndroid Build Coastguard Worker     glClearColor(0.0, 0.0, 1.0, 1.0);
50*8975f5c5SAndroid Build Coastguard Worker     glClear(GL_COLOR_BUFFER_BIT);
51*8975f5c5SAndroid Build Coastguard Worker 
52*8975f5c5SAndroid Build Coastguard Worker     glEndQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM);
53*8975f5c5SAndroid Build Coastguard Worker 
54*8975f5c5SAndroid Build Coastguard Worker     glFlush();
55*8975f5c5SAndroid Build Coastguard Worker     GLuint result = 0;
56*8975f5c5SAndroid Build Coastguard Worker     glGetQueryObjectuivEXT(mQuery, GL_QUERY_RESULT_EXT, &result);
57*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_TRUE(result);
58*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_NO_ERROR();
59*8975f5c5SAndroid Build Coastguard Worker }
60*8975f5c5SAndroid Build Coastguard Worker 
61*8975f5c5SAndroid Build Coastguard Worker // Test that the sync query enums are not accepted unless the extension is available
TEST_P(SyncQueriesTest,Validation)62*8975f5c5SAndroid Build Coastguard Worker TEST_P(SyncQueriesTest, Validation)
63*8975f5c5SAndroid Build Coastguard Worker {
64*8975f5c5SAndroid Build Coastguard Worker     // Need the GL_EXT_occlusion_query_boolean extension for the entry points
65*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_occlusion_query_boolean"));
66*8975f5c5SAndroid Build Coastguard Worker 
67*8975f5c5SAndroid Build Coastguard Worker     bool extensionAvailable = IsGLExtensionEnabled("GL_CHROMIUM_sync_query");
68*8975f5c5SAndroid Build Coastguard Worker 
69*8975f5c5SAndroid Build Coastguard Worker     glGenQueriesEXT(1, &mQuery);
70*8975f5c5SAndroid Build Coastguard Worker 
71*8975f5c5SAndroid Build Coastguard Worker     glBeginQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM, mQuery);
72*8975f5c5SAndroid Build Coastguard Worker     if (extensionAvailable)
73*8975f5c5SAndroid Build Coastguard Worker     {
74*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_NO_ERROR();
75*8975f5c5SAndroid Build Coastguard Worker     }
76*8975f5c5SAndroid Build Coastguard Worker     else
77*8975f5c5SAndroid Build Coastguard Worker     {
78*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_ERROR(GL_INVALID_ENUM);
79*8975f5c5SAndroid Build Coastguard Worker     }
80*8975f5c5SAndroid Build Coastguard Worker 
81*8975f5c5SAndroid Build Coastguard Worker     glDeleteQueriesEXT(1, &mQuery);
82*8975f5c5SAndroid Build Coastguard Worker 
83*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_NO_ERROR();
84*8975f5c5SAndroid Build Coastguard Worker }
85*8975f5c5SAndroid Build Coastguard Worker 
86*8975f5c5SAndroid Build Coastguard Worker // Use this to select which configurations (e.g. which renderer, which GLES major version) these
87*8975f5c5SAndroid Build Coastguard Worker // tests should be run against.
88*8975f5c5SAndroid Build Coastguard Worker ANGLE_INSTANTIATE_TEST_ES2_AND_ES3(SyncQueriesTest);
89*8975f5c5SAndroid Build Coastguard Worker 
90*8975f5c5SAndroid Build Coastguard Worker }  // namespace angle
91