1a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich/* 2a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich ** Copyright 2010, The Android Open Source Project 3a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich ** 4a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich ** Licensed under the Apache License, Version 2.0 (the "License"); 5a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich ** you may not use this file except in compliance with the License. 6a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich ** You may obtain a copy of the License at 7a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich ** 8a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich ** http://www.apache.org/licenses/LICENSE-2.0 9a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich ** 10a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich ** Unless required by applicable law or agreed to in writing, software 11a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich ** distributed under the License is distributed on an "AS IS" BASIS, 12a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich ** See the License for the specific language governing permissions and 14a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich ** limitations under the License. 15a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich */ 16a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 17a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#if EGL_TRACE 18a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 19a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#include <stdarg.h> 20a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#include <stdlib.h> 21a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 22a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#include <EGL/egl.h> 23a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#include <EGL/eglext.h> 24a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 25a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#include <cutils/log.h> 26a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 2716928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#define ATRACE_TAG ATRACE_TAG_GRAPHICS 2816928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#include <utils/Trace.h> 2916928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 3016928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#include <utils/CallStack.h> 3116928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 321cadb25da1ed875bdd078270e642966724a0c39aMathias Agopian#include "egl_tls.h" 33a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#include "hooks.h" 34a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 35a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich// ---------------------------------------------------------------------------- 36a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevichnamespace android { 37a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich// ---------------------------------------------------------------------------- 38a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 39a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevichstruct GLenumString { 404774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall // The GL_TIMEOUT_IGNORED "enum" doesn't fit in a GLenum, so use GLuint64 414774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall GLuint64 e; 42a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich const char* s; 43a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich}; 44a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 45a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#undef GL_ENUM 46a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#define GL_ENUM(VAL,NAME) {VAL, #NAME}, 47a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 48a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevichstatic GLenumString g_enumnames[] = { 49a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#include "enums.in" 50a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich}; 51a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#undef GL_ENUM 52a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 53a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevichstatic int compareGLEnum(const void* a, const void* b) { 54a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich return ((const GLenumString*) a)->e - ((const GLenumString*) b)->e; 55a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich} 56a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 57a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevichstatic const char* GLEnumToString(GLenum e) { 58a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich GLenumString key = {e, ""}; 59a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich const GLenumString* result = (const GLenumString*) bsearch( 60a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich &key, g_enumnames, 61a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich sizeof(g_enumnames) / sizeof(g_enumnames[0]), 62a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich sizeof(g_enumnames[0]), compareGLEnum); 63a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich if (result) { 64a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich return result->s; 65a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 66a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich return NULL; 67a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich} 68a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 696132b3703da76389e81d26b0023846a78b008603Jack Palevichstatic const char* GLbooleanToString(GLboolean arg) { 706132b3703da76389e81d26b0023846a78b008603Jack Palevich return arg ? "GL_TRUE" : "GL_FALSE"; 716132b3703da76389e81d26b0023846a78b008603Jack Palevich} 726132b3703da76389e81d26b0023846a78b008603Jack Palevich 73a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevichstatic GLenumString g_bitfieldNames[] = { 74a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich {0x00004000, "GL_COLOR_BUFFER_BIT"}, 75a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich {0x00000400, "GL_STENCIL_BUFFER_BIT"}, 76a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich {0x00000100, "GL_DEPTH_BUFFER_BIT"} 77a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich}; 78a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 796132b3703da76389e81d26b0023846a78b008603Jack Palevichclass StringBuilder { 806132b3703da76389e81d26b0023846a78b008603Jack Palevich static const int lineSize = 500; 816132b3703da76389e81d26b0023846a78b008603Jack Palevich char line[lineSize]; 826132b3703da76389e81d26b0023846a78b008603Jack Palevich int line_index; 836132b3703da76389e81d26b0023846a78b008603Jack Palevichpublic: 846132b3703da76389e81d26b0023846a78b008603Jack Palevich StringBuilder() { 856132b3703da76389e81d26b0023846a78b008603Jack Palevich line_index = 0; 866132b3703da76389e81d26b0023846a78b008603Jack Palevich line[0] = '\0'; 876132b3703da76389e81d26b0023846a78b008603Jack Palevich } 886132b3703da76389e81d26b0023846a78b008603Jack Palevich void append(const char* fmt, ...) { 896132b3703da76389e81d26b0023846a78b008603Jack Palevich va_list argp; 906132b3703da76389e81d26b0023846a78b008603Jack Palevich va_start(argp, fmt); 916132b3703da76389e81d26b0023846a78b008603Jack Palevich line_index += vsnprintf(line + line_index, lineSize-line_index, fmt, argp); 926132b3703da76389e81d26b0023846a78b008603Jack Palevich va_end(argp); 936132b3703da76389e81d26b0023846a78b008603Jack Palevich } 946132b3703da76389e81d26b0023846a78b008603Jack Palevich const char* getString() { 956132b3703da76389e81d26b0023846a78b008603Jack Palevich line_index = 0; 966132b3703da76389e81d26b0023846a78b008603Jack Palevich line[lineSize-1] = '\0'; 976132b3703da76389e81d26b0023846a78b008603Jack Palevich return line; 986132b3703da76389e81d26b0023846a78b008603Jack Palevich } 996132b3703da76389e81d26b0023846a78b008603Jack Palevich}; 1006132b3703da76389e81d26b0023846a78b008603Jack Palevich 101a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 102a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevichstatic void TraceGLShaderSource(GLuint shader, GLsizei count, 103a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich const GLchar** string, const GLint* length) { 1049d4536835248525f32f1504a3d28d5bbfa0a2910Steve Block ALOGD("const char* shaderSrc[] = {"); 105a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich for (GLsizei i = 0; i < count; i++) { 106a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich const char* comma = i < count-1 ? "," : ""; 107a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich const GLchar* s = string[i]; 108a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich if (length) { 109a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich GLint len = length[i]; 1109d4536835248525f32f1504a3d28d5bbfa0a2910Steve Block ALOGD(" \"%*s\"%s", len, s, comma); 111a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } else { 1129d4536835248525f32f1504a3d28d5bbfa0a2910Steve Block ALOGD(" \"%s\"%s", s, comma); 113a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 114a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 1159d4536835248525f32f1504a3d28d5bbfa0a2910Steve Block ALOGD("};"); 116a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich if (length) { 1179d4536835248525f32f1504a3d28d5bbfa0a2910Steve Block ALOGD("const GLint* shaderLength[] = {"); 118a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich for (GLsizei i = 0; i < count; i++) { 119a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich const char* comma = i < count-1 ? "," : ""; 120a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich GLint len = length[i]; 1219d4536835248525f32f1504a3d28d5bbfa0a2910Steve Block ALOGD(" \"%d\"%s", len, comma); 122a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 1239d4536835248525f32f1504a3d28d5bbfa0a2910Steve Block ALOGD("};"); 1249d4536835248525f32f1504a3d28d5bbfa0a2910Steve Block ALOGD("glShaderSource(%u, %u, shaderSrc, shaderLength);", 125a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich shader, count); 126a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } else { 1279d4536835248525f32f1504a3d28d5bbfa0a2910Steve Block ALOGD("glShaderSource(%u, %u, shaderSrc, (const GLint*) 0);", 128a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich shader, count); 129a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 130a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich} 131a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 1326132b3703da76389e81d26b0023846a78b008603Jack Palevichstatic void TraceValue(int elementCount, char type, 1336132b3703da76389e81d26b0023846a78b008603Jack Palevich GLsizei chunkCount, GLsizei chunkSize, const void* value) { 1346132b3703da76389e81d26b0023846a78b008603Jack Palevich StringBuilder stringBuilder; 1356132b3703da76389e81d26b0023846a78b008603Jack Palevich GLsizei count = chunkCount * chunkSize; 1366132b3703da76389e81d26b0023846a78b008603Jack Palevich bool isFloat = type == 'f'; 1376132b3703da76389e81d26b0023846a78b008603Jack Palevich const char* typeString = isFloat ? "GLfloat" : "GLint"; 1389d4536835248525f32f1504a3d28d5bbfa0a2910Steve Block ALOGD("const %s value[] = {", typeString); 1396132b3703da76389e81d26b0023846a78b008603Jack Palevich for (GLsizei i = 0; i < count; i++) { 1406132b3703da76389e81d26b0023846a78b008603Jack Palevich StringBuilder builder; 1416132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append(" "); 1426132b3703da76389e81d26b0023846a78b008603Jack Palevich for (int e = 0; e < elementCount; e++) { 1436132b3703da76389e81d26b0023846a78b008603Jack Palevich const char* comma = ", "; 1446132b3703da76389e81d26b0023846a78b008603Jack Palevich if (e == elementCount-1) { 1456132b3703da76389e81d26b0023846a78b008603Jack Palevich if (i == count - 1) { 1466132b3703da76389e81d26b0023846a78b008603Jack Palevich comma = ""; 1476132b3703da76389e81d26b0023846a78b008603Jack Palevich } else { 1486132b3703da76389e81d26b0023846a78b008603Jack Palevich comma = ","; 1496132b3703da76389e81d26b0023846a78b008603Jack Palevich } 1506132b3703da76389e81d26b0023846a78b008603Jack Palevich } 1516132b3703da76389e81d26b0023846a78b008603Jack Palevich if (isFloat) { 1526132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("%g%s", * (GLfloat*) value, comma); 1536132b3703da76389e81d26b0023846a78b008603Jack Palevich value = (void*) (((GLfloat*) value) + 1); 1546132b3703da76389e81d26b0023846a78b008603Jack Palevich } else { 1556132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("%d%s", * (GLint*) value, comma); 1566132b3703da76389e81d26b0023846a78b008603Jack Palevich value = (void*) (((GLint*) value) + 1); 1576132b3703da76389e81d26b0023846a78b008603Jack Palevich } 1586132b3703da76389e81d26b0023846a78b008603Jack Palevich } 1599d4536835248525f32f1504a3d28d5bbfa0a2910Steve Block ALOGD("%s", builder.getString()); 1606132b3703da76389e81d26b0023846a78b008603Jack Palevich if (chunkSize > 1 && i < count-1 1616132b3703da76389e81d26b0023846a78b008603Jack Palevich && (i % chunkSize) == (chunkSize-1)) { 1629d4536835248525f32f1504a3d28d5bbfa0a2910Steve Block ALOGD("%s", ""); // Print a blank line. 1636132b3703da76389e81d26b0023846a78b008603Jack Palevich } 1646132b3703da76389e81d26b0023846a78b008603Jack Palevich } 1659d4536835248525f32f1504a3d28d5bbfa0a2910Steve Block ALOGD("};"); 1666132b3703da76389e81d26b0023846a78b008603Jack Palevich} 1676132b3703da76389e81d26b0023846a78b008603Jack Palevich 1686132b3703da76389e81d26b0023846a78b008603Jack Palevichstatic void TraceUniformv(int elementCount, char type, 1696132b3703da76389e81d26b0023846a78b008603Jack Palevich GLuint location, GLsizei count, const void* value) { 1706132b3703da76389e81d26b0023846a78b008603Jack Palevich TraceValue(elementCount, type, count, 1, value); 1719d4536835248525f32f1504a3d28d5bbfa0a2910Steve Block ALOGD("glUniform%d%c(%u, %u, value);", elementCount, type, location, count); 1726132b3703da76389e81d26b0023846a78b008603Jack Palevich} 1736132b3703da76389e81d26b0023846a78b008603Jack Palevich 1746132b3703da76389e81d26b0023846a78b008603Jack Palevichstatic void TraceUniformMatrix(int matrixSideLength, 1756132b3703da76389e81d26b0023846a78b008603Jack Palevich GLuint location, GLsizei count, GLboolean transpose, const void* value) { 1766132b3703da76389e81d26b0023846a78b008603Jack Palevich TraceValue(matrixSideLength, 'f', count, matrixSideLength, value); 1779d4536835248525f32f1504a3d28d5bbfa0a2910Steve Block ALOGD("glUniformMatrix%dfv(%u, %u, %s, value);", matrixSideLength, location, count, 1786132b3703da76389e81d26b0023846a78b008603Jack Palevich GLbooleanToString(transpose)); 1796132b3703da76389e81d26b0023846a78b008603Jack Palevich} 1806132b3703da76389e81d26b0023846a78b008603Jack Palevich 181a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevichstatic void TraceGL(const char* name, int numArgs, ...) { 182a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich va_list argp; 183a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich va_start(argp, numArgs); 1846132b3703da76389e81d26b0023846a78b008603Jack Palevich int nameLen = strlen(name); 1856132b3703da76389e81d26b0023846a78b008603Jack Palevich 1866132b3703da76389e81d26b0023846a78b008603Jack Palevich // glShaderSource 1876132b3703da76389e81d26b0023846a78b008603Jack Palevich if (nameLen == 14 && strcmp(name, "glShaderSource") == 0) { 188a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich va_arg(argp, const char*); 189a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich GLuint shader = va_arg(argp, GLuint); 190a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich va_arg(argp, const char*); 191a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich GLsizei count = va_arg(argp, GLsizei); 192a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich va_arg(argp, const char*); 193a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich const GLchar** string = (const GLchar**) va_arg(argp, void*); 194a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich va_arg(argp, const char*); 195a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich const GLint* length = (const GLint*) va_arg(argp, void*); 1966132b3703da76389e81d26b0023846a78b008603Jack Palevich va_end(argp); 197a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich TraceGLShaderSource(shader, count, string, length); 1986132b3703da76389e81d26b0023846a78b008603Jack Palevich return; 1996132b3703da76389e81d26b0023846a78b008603Jack Palevich } 2006132b3703da76389e81d26b0023846a78b008603Jack Palevich 2016132b3703da76389e81d26b0023846a78b008603Jack Palevich // glUniformXXv 2026132b3703da76389e81d26b0023846a78b008603Jack Palevich 2036132b3703da76389e81d26b0023846a78b008603Jack Palevich if (nameLen == 12 && strncmp(name, "glUniform", 9) == 0 && name[11] == 'v') { 2046132b3703da76389e81d26b0023846a78b008603Jack Palevich int elementCount = name[9] - '0'; // 1..4 2056132b3703da76389e81d26b0023846a78b008603Jack Palevich char type = name[10]; // 'f' or 'i' 2066132b3703da76389e81d26b0023846a78b008603Jack Palevich va_arg(argp, const char*); 2076132b3703da76389e81d26b0023846a78b008603Jack Palevich GLuint location = va_arg(argp, GLuint); 2086132b3703da76389e81d26b0023846a78b008603Jack Palevich va_arg(argp, const char*); 2096132b3703da76389e81d26b0023846a78b008603Jack Palevich GLsizei count = va_arg(argp, GLsizei); 2106132b3703da76389e81d26b0023846a78b008603Jack Palevich va_arg(argp, const char*); 2116132b3703da76389e81d26b0023846a78b008603Jack Palevich const void* value = (const void*) va_arg(argp, void*); 212a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich va_end(argp); 2136132b3703da76389e81d26b0023846a78b008603Jack Palevich TraceUniformv(elementCount, type, location, count, value); 214a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich return; 215a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 2166132b3703da76389e81d26b0023846a78b008603Jack Palevich 2176132b3703da76389e81d26b0023846a78b008603Jack Palevich // glUniformMatrixXfv 2186132b3703da76389e81d26b0023846a78b008603Jack Palevich 2196132b3703da76389e81d26b0023846a78b008603Jack Palevich if (nameLen == 18 && strncmp(name, "glUniformMatrix", 15) == 0 2206132b3703da76389e81d26b0023846a78b008603Jack Palevich && name[16] == 'f' && name[17] == 'v') { 2216132b3703da76389e81d26b0023846a78b008603Jack Palevich int matrixSideLength = name[15] - '0'; // 2..4 2226132b3703da76389e81d26b0023846a78b008603Jack Palevich va_arg(argp, const char*); 2236132b3703da76389e81d26b0023846a78b008603Jack Palevich GLuint location = va_arg(argp, GLuint); 2246132b3703da76389e81d26b0023846a78b008603Jack Palevich va_arg(argp, const char*); 2256132b3703da76389e81d26b0023846a78b008603Jack Palevich GLsizei count = va_arg(argp, GLsizei); 2266132b3703da76389e81d26b0023846a78b008603Jack Palevich va_arg(argp, const char*); 2276132b3703da76389e81d26b0023846a78b008603Jack Palevich GLboolean transpose = (GLboolean) va_arg(argp, int); 2286132b3703da76389e81d26b0023846a78b008603Jack Palevich va_arg(argp, const char*); 2296132b3703da76389e81d26b0023846a78b008603Jack Palevich const void* value = (const void*) va_arg(argp, void*); 2306132b3703da76389e81d26b0023846a78b008603Jack Palevich va_end(argp); 2316132b3703da76389e81d26b0023846a78b008603Jack Palevich TraceUniformMatrix(matrixSideLength, location, count, transpose, value); 2326132b3703da76389e81d26b0023846a78b008603Jack Palevich return; 2336132b3703da76389e81d26b0023846a78b008603Jack Palevich } 2346132b3703da76389e81d26b0023846a78b008603Jack Palevich 2356132b3703da76389e81d26b0023846a78b008603Jack Palevich StringBuilder builder; 2366132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("%s(", name); 237a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich for (int i = 0; i < numArgs; i++) { 238a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich if (i > 0) { 2396132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append(", "); 240a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 241a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich const char* type = va_arg(argp, const char*); 242a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich bool isPtr = type[strlen(type)-1] == '*' 243a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich || strcmp(type, "GLeglImageOES") == 0; 244a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich if (isPtr) { 245a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich const void* arg = va_arg(argp, const void*); 2466132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("(%s) 0x%08x", type, (size_t) arg); 247a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } else if (strcmp(type, "GLbitfield") == 0) { 248a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich size_t arg = va_arg(argp, size_t); 249a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich bool first = true; 250a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich for (size_t i = 0; i < sizeof(g_bitfieldNames) / sizeof(g_bitfieldNames[0]); i++) { 251a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich const GLenumString* b = &g_bitfieldNames[i]; 252a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich if (b->e & arg) { 253a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich if (first) { 254a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich first = false; 255a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } else { 2566132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append(" | "); 257a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 2586132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("%s", b->s); 259a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich arg &= ~b->e; 260a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 261a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 262a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich if (first || arg != 0) { 263a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich if (!first) { 2646132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append(" | "); 265a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 2666132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("0x%08x", arg); 267a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 268a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } else if (strcmp(type, "GLboolean") == 0) { 2696132b3703da76389e81d26b0023846a78b008603Jack Palevich GLboolean arg = va_arg(argp, int); 2706132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("%s", GLbooleanToString(arg)); 271a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } else if (strcmp(type, "GLclampf") == 0) { 272a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich double arg = va_arg(argp, double); 2736132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("%g", arg); 274a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } else if (strcmp(type, "GLenum") == 0) { 275a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich GLenum arg = va_arg(argp, int); 276a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich const char* s = GLEnumToString(arg); 277a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich if (s) { 2786132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("%s", s); 279a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } else { 2806132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("0x%x", arg); 281a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 282a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } else if (strcmp(type, "GLfixed") == 0) { 283a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich int arg = va_arg(argp, int); 2846132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("0x%08x", arg); 285a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } else if (strcmp(type, "GLfloat") == 0) { 286a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich double arg = va_arg(argp, double); 2876132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("%g", arg); 288a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } else if (strcmp(type, "GLint") == 0) { 289a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich int arg = va_arg(argp, int); 290a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich const char* s = NULL; 291a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich if (strcmp(name, "glTexParameteri") == 0) { 292a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich s = GLEnumToString(arg); 293a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 294a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich if (s) { 2956132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("%s", s); 296a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } else { 2976132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("%d", arg); 298a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 299a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } else if (strcmp(type, "GLintptr") == 0) { 300a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich int arg = va_arg(argp, unsigned int); 3016132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("%u", arg); 302a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } else if (strcmp(type, "GLsizei") == 0) { 303a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich int arg = va_arg(argp, size_t); 3046132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("%u", arg); 305a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } else if (strcmp(type, "GLsizeiptr") == 0) { 306a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich int arg = va_arg(argp, size_t); 3076132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("%u", arg); 308a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } else if (strcmp(type, "GLuint") == 0) { 309a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich int arg = va_arg(argp, unsigned int); 3106132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("%u", arg); 311a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } else { 3126132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append("/* ??? %s */", type); 313a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich break; 314a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 315a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 3166132b3703da76389e81d26b0023846a78b008603Jack Palevich builder.append(");"); 3179d4536835248525f32f1504a3d28d5bbfa0a2910Steve Block ALOGD("%s", builder.getString()); 318a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich va_end(argp); 319a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich} 320a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 32116928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy/////////////////////////////////////////////////////////////////////////// 32216928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy// Log trace 32316928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy/////////////////////////////////////////////////////////////////////////// 32416928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 325a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#undef TRACE_GL_VOID 326a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#undef TRACE_GL 327a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 328a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#define TRACE_GL_VOID(_api, _args, _argList, ...) \ 329a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevichstatic void Tracing_ ## _api _args { \ 330a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich TraceGL(#_api, __VA_ARGS__); \ 331a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich gl_hooks_t::gl_t const * const _c = &getGLTraceThreadSpecific()->gl; \ 332a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich _c->_api _argList; \ 333a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich} 334a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 335a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#define TRACE_GL(_type, _api, _args, _argList, ...) \ 336a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevichstatic _type Tracing_ ## _api _args { \ 3372f5a6557ef6a7b9fd33077cfd8a037904d41e3bdDavid Li TraceGL(#_api, __VA_ARGS__); \ 338a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich gl_hooks_t::gl_t const * const _c = &getGLTraceThreadSpecific()->gl; \ 339a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich return _c->_api _argList; \ 340a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich} 341a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 342a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevichextern "C" { 343a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#include "../trace.in" 344a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich} 3452f5a6557ef6a7b9fd33077cfd8a037904d41e3bdDavid Li 346a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#undef TRACE_GL_VOID 347a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#undef TRACE_GL 348a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 349a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#define GL_ENTRY(_r, _api, ...) Tracing_ ## _api, 350a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack PalevichEGLAPI gl_hooks_t gHooksTrace = { 351a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich { 352a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich #include "entries.in" 353a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich }, 354a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich { 355a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich {0} 356a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich } 357a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich}; 358a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#undef GL_ENTRY 359a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 3602f5a6557ef6a7b9fd33077cfd8a037904d41e3bdDavid Li#undef TRACE_GL_VOID 3612f5a6557ef6a7b9fd33077cfd8a037904d41e3bdDavid Li#undef TRACE_GL 3622f5a6557ef6a7b9fd33077cfd8a037904d41e3bdDavid Li 36316928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy/////////////////////////////////////////////////////////////////////////// 36416928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy// Systrace 36516928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy/////////////////////////////////////////////////////////////////////////// 36616928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 36716928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#undef TRACE_GL_VOID 36816928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#undef TRACE_GL 36916928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 37016928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#define TRACE_GL_VOID(_api, _args, _argList, ...) \ 37116928bfeca8858a0acae6942fc68c14a040b92ffRomain Guystatic void Systrace_ ## _api _args { \ 37216928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy ATRACE_NAME(#_api); \ 37316928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy gl_hooks_t::gl_t const * const _c = &getGLTraceThreadSpecific()->gl; \ 37416928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy _c->_api _argList; \ 37516928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy} 37616928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 37716928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#define TRACE_GL(_type, _api, _args, _argList, ...) \ 37816928bfeca8858a0acae6942fc68c14a040b92ffRomain Guystatic _type Systrace_ ## _api _args { \ 37916928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy ATRACE_NAME(#_api); \ 38016928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy gl_hooks_t::gl_t const * const _c = &getGLTraceThreadSpecific()->gl; \ 38116928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy return _c->_api _argList; \ 38216928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy} 38316928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 38416928bfeca8858a0acae6942fc68c14a040b92ffRomain Guyextern "C" { 38516928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#include "../trace.in" 38616928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy} 38716928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 38816928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#undef TRACE_GL_VOID 38916928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#undef TRACE_GL 39016928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 39116928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#define GL_ENTRY(_r, _api, ...) Systrace_ ## _api, 39216928bfeca8858a0acae6942fc68c14a040b92ffRomain GuyEGLAPI gl_hooks_t gHooksSystrace = { 39316928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy { 39416928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy #include "entries.in" 39516928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy }, 39616928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy { 39716928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy {0} 39816928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy } 39916928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy}; 40016928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#undef GL_ENTRY 40116928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 40216928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy/////////////////////////////////////////////////////////////////////////// 40316928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy// 40416928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy/////////////////////////////////////////////////////////////////////////// 40516928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 40616928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#undef TRACE_GL_VOID 40716928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#undef TRACE_GL 40816928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 40916928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#define CHECK_ERROR(_c, _api) \ 41016928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy GLenum status = GL_NO_ERROR; \ 41116928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy bool error = false; \ 41216928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy while ((status = _c->glGetError()) != GL_NO_ERROR) { \ 41316928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy ALOGD("[" #_api "] 0x%x", status); \ 41416928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy error = true; \ 41516928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy } \ 41616928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy if (error) { \ 41716928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy CallStack s; \ 41816928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy s.update(); \ 4191f8363329cd6b00c4f8e6f1f97bb3e76071d124aIgor Murashkin s.log("glGetError:" #_api); \ 42016928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy } \ 42116928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 42216928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#define TRACE_GL_VOID(_api, _args, _argList, ...) \ 42316928bfeca8858a0acae6942fc68c14a040b92ffRomain Guystatic void ErrorTrace_ ## _api _args { \ 42416928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy gl_hooks_t::gl_t const * const _c = &getGLTraceThreadSpecific()->gl; \ 42516928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy _c->_api _argList; \ 42616928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy CHECK_ERROR(_c, _api); \ 42716928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy} 42816928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 42916928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#define TRACE_GL(_type, _api, _args, _argList, ...) \ 43016928bfeca8858a0acae6942fc68c14a040b92ffRomain Guystatic _type ErrorTrace_ ## _api _args { \ 43116928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy gl_hooks_t::gl_t const * const _c = &getGLTraceThreadSpecific()->gl; \ 43216928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy _type _r = _c->_api _argList; \ 43316928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy CHECK_ERROR(_c, _api); \ 43416928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy return _r; \ 43516928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy} 43616928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 43716928bfeca8858a0acae6942fc68c14a040b92ffRomain Guyextern "C" { 43816928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#include "../trace.in" 43916928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy} 44016928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 44116928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#undef TRACE_GL_VOID 44216928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#undef TRACE_GL 44316928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 44416928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#define GL_ENTRY(_r, _api, ...) ErrorTrace_ ## _api, 44516928bfeca8858a0acae6942fc68c14a040b92ffRomain GuyEGLAPI gl_hooks_t gHooksErrorTrace = { 44616928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy { 44716928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy #include "entries.in" 44816928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy }, 44916928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy { 45016928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy {0} 45116928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy } 45216928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy}; 45316928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#undef GL_ENTRY 45416928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy#undef CHECK_ERROR 45516928bfeca8858a0acae6942fc68c14a040b92ffRomain Guy 4562f5a6557ef6a7b9fd33077cfd8a037904d41e3bdDavid Li#undef TRACE_GL_VOID 4572f5a6557ef6a7b9fd33077cfd8a037904d41e3bdDavid Li#undef TRACE_GL 4582f5a6557ef6a7b9fd33077cfd8a037904d41e3bdDavid Li 459a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich// ---------------------------------------------------------------------------- 460a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich}; // namespace android 461a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich// ---------------------------------------------------------------------------- 462a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich 463a2dd6cf59962e3a21a47df29b2f243e904839ba7Jack Palevich#endif // EGL_TRACE 464