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