xref: /aosp_15_r20/frameworks/native/opengl/tests/lib/glTestLib.cpp (revision 38e8c45f13ce32b0dcecb25141ffecaf386fa17f)
1*38e8c45fSAndroid Build Coastguard Worker /*
2*38e8c45fSAndroid Build Coastguard Worker  * Copyright (C) 2011 The Android Open Source Project
3*38e8c45fSAndroid Build Coastguard Worker  *
4*38e8c45fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*38e8c45fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*38e8c45fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*38e8c45fSAndroid Build Coastguard Worker  *
8*38e8c45fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*38e8c45fSAndroid Build Coastguard Worker  *
10*38e8c45fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*38e8c45fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*38e8c45fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*38e8c45fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*38e8c45fSAndroid Build Coastguard Worker  * limitations under the License.
15*38e8c45fSAndroid Build Coastguard Worker  *
16*38e8c45fSAndroid Build Coastguard Worker  */
17*38e8c45fSAndroid Build Coastguard Worker 
18*38e8c45fSAndroid Build Coastguard Worker /*
19*38e8c45fSAndroid Build Coastguard Worker  * Graphics Test Library
20*38e8c45fSAndroid Build Coastguard Worker  */
21*38e8c45fSAndroid Build Coastguard Worker 
22*38e8c45fSAndroid Build Coastguard Worker #include <glTestLib.h>
23*38e8c45fSAndroid Build Coastguard Worker 
24*38e8c45fSAndroid Build Coastguard Worker #include <EGL/egl.h>
25*38e8c45fSAndroid Build Coastguard Worker #include <EGL/eglext.h>
26*38e8c45fSAndroid Build Coastguard Worker #include <GLES2/gl2.h>
27*38e8c45fSAndroid Build Coastguard Worker #include <GLES2/gl2ext.h>
28*38e8c45fSAndroid Build Coastguard Worker 
29*38e8c45fSAndroid Build Coastguard Worker #include "EGLUtils.h"
30*38e8c45fSAndroid Build Coastguard Worker 
31*38e8c45fSAndroid Build Coastguard Worker #include <utils/Log.h>
32*38e8c45fSAndroid Build Coastguard Worker #include <testUtil.h>
33*38e8c45fSAndroid Build Coastguard Worker 
34*38e8c45fSAndroid Build Coastguard Worker using namespace android;
35*38e8c45fSAndroid Build Coastguard Worker 
glTestPrintGLString(const char * name,GLenum s)36*38e8c45fSAndroid Build Coastguard Worker void glTestPrintGLString(const char *name, GLenum s)
37*38e8c45fSAndroid Build Coastguard Worker {
38*38e8c45fSAndroid Build Coastguard Worker     const char *v = (const char *) glGetString(s);
39*38e8c45fSAndroid Build Coastguard Worker 
40*38e8c45fSAndroid Build Coastguard Worker     if (v == nullptr) {
41*38e8c45fSAndroid Build Coastguard Worker         testPrintI("GL %s unknown", name);
42*38e8c45fSAndroid Build Coastguard Worker     } else {
43*38e8c45fSAndroid Build Coastguard Worker         testPrintI("GL %s = %s", name, v);
44*38e8c45fSAndroid Build Coastguard Worker     }
45*38e8c45fSAndroid Build Coastguard Worker }
46*38e8c45fSAndroid Build Coastguard Worker 
glTestCheckEglError(const char * op,EGLBoolean returnVal)47*38e8c45fSAndroid Build Coastguard Worker void glTestCheckEglError(const char* op, EGLBoolean returnVal)
48*38e8c45fSAndroid Build Coastguard Worker {
49*38e8c45fSAndroid Build Coastguard Worker     if (returnVal != EGL_TRUE) {
50*38e8c45fSAndroid Build Coastguard Worker         testPrintE("%s() returned %d", op, returnVal);
51*38e8c45fSAndroid Build Coastguard Worker     }
52*38e8c45fSAndroid Build Coastguard Worker 
53*38e8c45fSAndroid Build Coastguard Worker     for (EGLint error = eglGetError(); error != EGL_SUCCESS; error
54*38e8c45fSAndroid Build Coastguard Worker             = eglGetError()) {
55*38e8c45fSAndroid Build Coastguard Worker         testPrintE("after %s() eglError %s (0x%x)",
56*38e8c45fSAndroid Build Coastguard Worker                    op, EGLUtils::strerror(error), error);
57*38e8c45fSAndroid Build Coastguard Worker     }
58*38e8c45fSAndroid Build Coastguard Worker }
59*38e8c45fSAndroid Build Coastguard Worker 
glTestCheckGlError(const char * op)60*38e8c45fSAndroid Build Coastguard Worker void glTestCheckGlError(const char* op)
61*38e8c45fSAndroid Build Coastguard Worker {
62*38e8c45fSAndroid Build Coastguard Worker     for (GLint error = glGetError(); error; error
63*38e8c45fSAndroid Build Coastguard Worker             = glGetError()) {
64*38e8c45fSAndroid Build Coastguard Worker         testPrintE("after %s() glError (0x%x)", op, error);
65*38e8c45fSAndroid Build Coastguard Worker     }
66*38e8c45fSAndroid Build Coastguard Worker }
67*38e8c45fSAndroid Build Coastguard Worker 
glTestPrintEGLConfiguration(EGLDisplay dpy,EGLConfig config)68*38e8c45fSAndroid Build Coastguard Worker void glTestPrintEGLConfiguration(EGLDisplay dpy, EGLConfig config)
69*38e8c45fSAndroid Build Coastguard Worker {
70*38e8c45fSAndroid Build Coastguard Worker 
71*38e8c45fSAndroid Build Coastguard Worker #define X(VAL) {VAL, #VAL}
72*38e8c45fSAndroid Build Coastguard Worker     struct {EGLint attribute; const char* name;} names[] = {
73*38e8c45fSAndroid Build Coastguard Worker     X(EGL_BUFFER_SIZE),
74*38e8c45fSAndroid Build Coastguard Worker     X(EGL_ALPHA_SIZE),
75*38e8c45fSAndroid Build Coastguard Worker     X(EGL_BLUE_SIZE),
76*38e8c45fSAndroid Build Coastguard Worker     X(EGL_GREEN_SIZE),
77*38e8c45fSAndroid Build Coastguard Worker     X(EGL_RED_SIZE),
78*38e8c45fSAndroid Build Coastguard Worker     X(EGL_DEPTH_SIZE),
79*38e8c45fSAndroid Build Coastguard Worker     X(EGL_STENCIL_SIZE),
80*38e8c45fSAndroid Build Coastguard Worker     X(EGL_CONFIG_CAVEAT),
81*38e8c45fSAndroid Build Coastguard Worker     X(EGL_CONFIG_ID),
82*38e8c45fSAndroid Build Coastguard Worker     X(EGL_LEVEL),
83*38e8c45fSAndroid Build Coastguard Worker     X(EGL_MAX_PBUFFER_HEIGHT),
84*38e8c45fSAndroid Build Coastguard Worker     X(EGL_MAX_PBUFFER_PIXELS),
85*38e8c45fSAndroid Build Coastguard Worker     X(EGL_MAX_PBUFFER_WIDTH),
86*38e8c45fSAndroid Build Coastguard Worker     X(EGL_NATIVE_RENDERABLE),
87*38e8c45fSAndroid Build Coastguard Worker     X(EGL_NATIVE_VISUAL_ID),
88*38e8c45fSAndroid Build Coastguard Worker     X(EGL_NATIVE_VISUAL_TYPE),
89*38e8c45fSAndroid Build Coastguard Worker     X(EGL_SAMPLES),
90*38e8c45fSAndroid Build Coastguard Worker     X(EGL_SAMPLE_BUFFERS),
91*38e8c45fSAndroid Build Coastguard Worker     X(EGL_SURFACE_TYPE),
92*38e8c45fSAndroid Build Coastguard Worker     X(EGL_TRANSPARENT_TYPE),
93*38e8c45fSAndroid Build Coastguard Worker     X(EGL_TRANSPARENT_RED_VALUE),
94*38e8c45fSAndroid Build Coastguard Worker     X(EGL_TRANSPARENT_GREEN_VALUE),
95*38e8c45fSAndroid Build Coastguard Worker     X(EGL_TRANSPARENT_BLUE_VALUE),
96*38e8c45fSAndroid Build Coastguard Worker     X(EGL_BIND_TO_TEXTURE_RGB),
97*38e8c45fSAndroid Build Coastguard Worker     X(EGL_BIND_TO_TEXTURE_RGBA),
98*38e8c45fSAndroid Build Coastguard Worker     X(EGL_MIN_SWAP_INTERVAL),
99*38e8c45fSAndroid Build Coastguard Worker     X(EGL_MAX_SWAP_INTERVAL),
100*38e8c45fSAndroid Build Coastguard Worker     X(EGL_LUMINANCE_SIZE),
101*38e8c45fSAndroid Build Coastguard Worker     X(EGL_ALPHA_MASK_SIZE),
102*38e8c45fSAndroid Build Coastguard Worker     X(EGL_COLOR_BUFFER_TYPE),
103*38e8c45fSAndroid Build Coastguard Worker     X(EGL_RENDERABLE_TYPE),
104*38e8c45fSAndroid Build Coastguard Worker     X(EGL_CONFORMANT),
105*38e8c45fSAndroid Build Coastguard Worker    };
106*38e8c45fSAndroid Build Coastguard Worker #undef X
107*38e8c45fSAndroid Build Coastguard Worker 
108*38e8c45fSAndroid Build Coastguard Worker     for (size_t j = 0; j < sizeof(names) / sizeof(names[0]); j++) {
109*38e8c45fSAndroid Build Coastguard Worker         EGLint value = -1;
110*38e8c45fSAndroid Build Coastguard Worker         EGLint returnVal = eglGetConfigAttrib(dpy, config, names[j].attribute,
111*38e8c45fSAndroid Build Coastguard Worker                                               &value);
112*38e8c45fSAndroid Build Coastguard Worker         EGLint error = eglGetError();
113*38e8c45fSAndroid Build Coastguard Worker         if (returnVal && error == EGL_SUCCESS) {
114*38e8c45fSAndroid Build Coastguard Worker             testPrintI(" %s: %d (%#x)", names[j].name, value, value);
115*38e8c45fSAndroid Build Coastguard Worker         }
116*38e8c45fSAndroid Build Coastguard Worker     }
117*38e8c45fSAndroid Build Coastguard Worker     testPrintI("");
118*38e8c45fSAndroid Build Coastguard Worker }
119