/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.gltrace;

option optimize_for = LITE_RUNTIME;

option java_package = "com.android.ide.eclipse.gltrace";
option java_outer_classname = "GLProtoBuf";

message GLMessage {
    enum Function {
        glActiveTexture = 0;
        glAlphaFunc = 1;
        glAlphaFuncx = 2;
        glAlphaFuncxOES = 3;
        glAttachShader = 4;
        glBeginPerfMonitorAMD = 5;
        glBindAttribLocation = 6;
        glBindBuffer = 7;
        glBindFramebuffer = 8;
        glBindFramebufferOES = 9;
        glBindRenderbuffer = 10;
        glBindRenderbufferOES = 11;
        glBindTexture = 12;
        glBindVertexArrayOES = 13;
        glBlendColor = 14;
        glBlendEquation = 15;
        glBlendEquationOES = 16;
        glBlendEquationSeparate = 17;
        glBlendEquationSeparateOES = 18;
        glBlendFunc = 19;
        glBlendFuncSeparate = 20;
        glBlendFuncSeparateOES = 21;
        glBufferData = 22;
        glBufferSubData = 23;
        glCheckFramebufferStatus = 24;
        glCheckFramebufferStatusOES = 25;
        glClearColor = 26;
        glClearColorx = 27;
        glClearColorxOES = 28;
        glClearDepthf = 29;
        glClearDepthfOES = 30;
        glClearDepthx = 31;
        glClearDepthxOES = 32;
        glClear = 33;
        glClearStencil = 34;
        glClientActiveTexture = 35;
        glClipPlanef = 36;
        glClipPlanefIMG = 37;
        glClipPlanefOES = 38;
        glClipPlanex = 39;
        glClipPlanexIMG = 40;
        glClipPlanexOES = 41;
        glColor4f = 42;
        glColor4ub = 43;
        glColor4x = 44;
        glColor4xOES = 45;
        glColorMask = 46;
        glColorPointer = 47;
        glCompileShader = 48;
        glCompressedTexImage2D = 49;
        glCompressedTexImage3DOES = 50;
        glCompressedTexSubImage2D = 51;
        glCompressedTexSubImage3DOES = 52;
        glCopyTexImage2D = 53;
        glCopyTexSubImage2D = 54;
        glCopyTexSubImage3DOES = 55;
        glCoverageMaskNV = 56;
        glCoverageOperationNV = 57;
        glCreateProgram = 58;
        glCreateShader = 59;
        glCullFace = 60;
        glCurrentPaletteMatrixOES = 61;
        glDeleteBuffers = 62;
        glDeleteFencesNV = 63;
        glDeleteFramebuffers = 64;
        glDeleteFramebuffersOES = 65;
        glDeletePerfMonitorsAMD = 66;
        glDeleteProgram = 67;
        glDeleteRenderbuffers = 68;
        glDeleteRenderbuffersOES = 69;
        glDeleteShader = 70;
        glDeleteTextures = 71;
        glDeleteVertexArraysOES = 72;
        glDepthFunc = 73;
        glDepthMask = 74;
        glDepthRangef = 75;
        glDepthRangefOES = 76;
        glDepthRangex = 77;
        glDepthRangexOES = 78;
        glDetachShader = 79;
        glDisableClientState = 80;
        glDisableDriverControlQCOM = 81;
        glDisable = 82;
        glDisableVertexAttribArray = 83;
        glDiscardFramebufferEXT = 84;
        glDrawArrays = 85;
        glDrawElements = 86;
        glDrawTexfOES = 87;
        glDrawTexfvOES = 88;
        glDrawTexiOES = 89;
        glDrawTexivOES = 90;
        glDrawTexsOES = 91;
        glDrawTexsvOES = 92;
        glDrawTexxOES = 93;
        glDrawTexxvOES = 94;
        glEGLImageTargetRenderbufferStorageOES = 95;
        glEGLImageTargetTexture2DOES = 96;
        glEnableClientState = 97;
        glEnableDriverControlQCOM = 98;
        glEnable = 99;
        glEnableVertexAttribArray = 100;
        glEndPerfMonitorAMD = 101;
        glEndTilingQCOM = 102;
        glExtGetBufferPointervQCOM = 103;
        glExtGetBuffersQCOM = 104;
        glExtGetFramebuffersQCOM = 105;
        glExtGetProgramBinarySourceQCOM = 106;
        glExtGetProgramsQCOM = 107;
        glExtGetRenderbuffersQCOM = 108;
        glExtGetShadersQCOM = 109;
        glExtGetTexLevelParameterivQCOM = 110;
        glExtGetTexSubImageQCOM = 111;
        glExtGetTexturesQCOM = 112;
        glExtIsProgramBinaryQCOM = 113;
        glExtTexObjectStateOverrideiQCOM = 114;
        glFinishFenceNV = 115;
        glFinish = 116;
        glFlush = 117;
        glFogf = 118;
        glFogfv = 119;
        glFogx = 120;
        glFogxOES = 121;
        glFogxv = 122;
        glFogxvOES = 123;
        glFramebufferRenderbuffer = 124;
        glFramebufferRenderbufferOES = 125;
        glFramebufferTexture2D = 126;
        glFramebufferTexture2DMultisampleIMG = 127;
        glFramebufferTexture2DOES = 128;
        glFramebufferTexture3DOES = 129;
        glFrontFace = 130;
        glFrustumf = 131;
        glFrustumfOES = 132;
        glFrustumx = 133;
        glFrustumxOES = 134;
        glGenBuffers = 135;
        glGenerateMipmap = 136;
        glGenerateMipmapOES = 137;
        glGenFencesNV = 138;
        glGenFramebuffers = 139;
        glGenFramebuffersOES = 140;
        glGenPerfMonitorsAMD = 141;
        glGenRenderbuffers = 142;
        glGenRenderbuffersOES = 143;
        glGenTextures = 144;
        glGenVertexArraysOES = 145;
        glGetActiveAttrib = 146;
        glGetActiveUniform = 147;
        glGetAttachedShaders = 148;
        glGetAttribLocation = 149;
        glGetBooleanv = 150;
        glGetBufferParameteriv = 151;
        glGetBufferPointervOES = 152;
        glGetClipPlanef = 153;
        glGetClipPlanefOES = 154;
        glGetClipPlanex = 155;
        glGetClipPlanexOES = 156;
        glGetDriverControlsQCOM = 157;
        glGetDriverControlStringQCOM = 158;
        glGetError = 159;
        glGetFenceivNV = 160;
        glGetFixedv = 161;
        glGetFixedvOES = 162;
        glGetFloatv = 163;
        glGetFramebufferAttachmentParameteriv = 164;
        glGetFramebufferAttachmentParameterivOES = 165;
        glGetIntegerv = 166;
        glGetLightfv = 167;
        glGetLightxv = 168;
        glGetLightxvOES = 169;
        glGetMaterialfv = 170;
        glGetMaterialxv = 171;
        glGetMaterialxvOES = 172;
        glGetPerfMonitorCounterDataAMD = 173;
        glGetPerfMonitorCounterInfoAMD = 174;
        glGetPerfMonitorCountersAMD = 175;
        glGetPerfMonitorCounterStringAMD = 176;
        glGetPerfMonitorGroupsAMD = 177;
        glGetPerfMonitorGroupStringAMD = 178;
        glGetPointerv = 179;
        glGetProgramBinaryOES = 180;
        glGetProgramInfoLog = 181;
        glGetProgramiv = 182;
        glGetRenderbufferParameteriv = 183;
        glGetRenderbufferParameterivOES = 184;
        glGetShaderInfoLog = 185;
        glGetShaderiv = 186;
        glGetShaderPrecisionFormat = 187;
        glGetShaderSource = 188;
        glGetString = 189;
        glGetTexEnvfv = 190;
        glGetTexEnviv = 191;
        glGetTexEnvxv = 192;
        glGetTexEnvxvOES = 193;
        glGetTexGenfvOES = 194;
        glGetTexGenivOES = 195;
        glGetTexGenxvOES = 196;
        glGetTexParameterfv = 197;
        glGetTexParameteriv = 198;
        glGetTexParameterxv = 199;
        glGetTexParameterxvOES = 200;
        glGetUniformfv = 201;
        glGetUniformiv = 202;
        glGetUniformLocation = 203;
        glGetVertexAttribfv = 204;
        glGetVertexAttribiv = 205;
        glGetVertexAttribPointerv = 206;
        glHint = 207;
        glIsBuffer = 208;
        glIsEnabled = 209;
        glIsFenceNV = 210;
        glIsFramebuffer = 211;
        glIsFramebufferOES = 212;
        glIsProgram = 213;
        glIsRenderbuffer = 214;
        glIsRenderbufferOES = 215;
        glIsShader = 216;
        glIsTexture = 217;
        glIsVertexArrayOES = 218;
        glLightf = 219;
        glLightfv = 220;
        glLightModelf = 221;
        glLightModelfv = 222;
        glLightModelx = 223;
        glLightModelxOES = 224;
        glLightModelxv = 225;
        glLightModelxvOES = 226;
        glLightx = 227;
        glLightxOES = 228;
        glLightxv = 229;
        glLightxvOES = 230;
        glLineWidth = 231;
        glLineWidthx = 232;
        glLineWidthxOES = 233;
        glLinkProgram = 234;
        glLoadIdentity = 235;
        glLoadMatrixf = 236;
        glLoadMatrixx = 237;
        glLoadMatrixxOES = 238;
        glLoadPaletteFromModelViewMatrixOES = 239;
        glLogicOp = 240;
        glMapBufferOES = 241;
        glMaterialf = 242;
        glMaterialfv = 243;
        glMaterialx = 244;
        glMaterialxOES = 245;
        glMaterialxv = 246;
        glMaterialxvOES = 247;
        glMatrixIndexPointerOES = 248;
        glMatrixMode = 249;
        glMultiDrawArraysEXT = 250;
        glMultiDrawElementsEXT = 251;
        glMultiTexCoord4f = 252;
        glMultiTexCoord4x = 253;
        glMultiTexCoord4xOES = 254;
        glMultMatrixf = 255;
        glMultMatrixx = 256;
        glMultMatrixxOES = 257;
        glNormal3f = 258;
        glNormal3x = 259;
        glNormal3xOES = 260;
        glNormalPointer = 261;
        glOrthof = 262;
        glOrthofOES = 263;
        glOrthox = 264;
        glOrthoxOES = 265;
        glPixelStorei = 266;
        glPointParameterf = 267;
        glPointParameterfv = 268;
        glPointParameterx = 269;
        glPointParameterxOES = 270;
        glPointParameterxv = 271;
        glPointParameterxvOES = 272;
        glPointSize = 273;
        glPointSizePointerOES = 274;
        glPointSizex = 275;
        glPointSizexOES = 276;
        glPolygonOffset = 277;
        glPolygonOffsetx = 278;
        glPolygonOffsetxOES = 279;
        glPopMatrix = 280;
        glProgramBinaryOES = 281;
        glPushMatrix = 282;
        glQueryMatrixxOES = 283;
        glReadPixels = 284;
        glReleaseShaderCompiler = 285;
        glRenderbufferStorage = 286;
        glRenderbufferStorageMultisampleIMG = 287;
        glRenderbufferStorageOES = 288;
        glRotatef = 289;
        glRotatex = 290;
        glRotatexOES = 291;
        glSampleCoverage = 292;
        glSampleCoveragex = 293;
        glSampleCoveragexOES = 294;
        glScalef = 295;
        glScalex = 296;
        glScalexOES = 297;
        glScissor = 298;
        glSelectPerfMonitorCountersAMD = 299;
        glSetFenceNV = 300;
        glShadeModel = 301;
        glShaderBinary = 302;
        glShaderSource = 303;
        glStartTilingQCOM = 304;
        glStencilFunc = 305;
        glStencilFuncSeparate = 306;
        glStencilMask = 307;
        glStencilMaskSeparate = 308;
        glStencilOp = 309;
        glStencilOpSeparate = 310;
        glTestFenceNV = 311;
        glTexCoordPointer = 312;
        glTexEnvf = 313;
        glTexEnvfv = 314;
        glTexEnvi = 315;
        glTexEnviv = 316;
        glTexEnvx = 317;
        glTexEnvxOES = 318;
        glTexEnvxv = 319;
        glTexEnvxvOES = 320;
        glTexGenfOES = 321;
        glTexGenfvOES = 322;
        glTexGeniOES = 323;
        glTexGenivOES = 324;
        glTexGenxOES = 325;
        glTexGenxvOES = 326;
        glTexImage2D = 327;
        glTexImage3DOES = 328;
        glTexParameterf = 329;
        glTexParameterfv = 330;
        glTexParameteri = 331;
        glTexParameteriv = 332;
        glTexParameterx = 333;
        glTexParameterxOES = 334;
        glTexParameterxv = 335;
        glTexParameterxvOES = 336;
        glTexSubImage2D = 337;
        glTexSubImage3DOES = 338;
        glTranslatef = 339;
        glTranslatex = 340;
        glTranslatexOES = 341;
        glUniform1f = 342;
        glUniform1fv = 343;
        glUniform1i = 344;
        glUniform1iv = 345;
        glUniform2f = 346;
        glUniform2fv = 347;
        glUniform2i = 348;
        glUniform2iv = 349;
        glUniform3f = 350;
        glUniform3fv = 351;
        glUniform3i = 352;
        glUniform3iv = 353;
        glUniform4f = 354;
        glUniform4fv = 355;
        glUniform4i = 356;
        glUniform4iv = 357;
        glUniformMatrix2fv = 358;
        glUniformMatrix3fv = 359;
        glUniformMatrix4fv = 360;
        glUnmapBufferOES = 361;
        glUseProgram = 362;
        glValidateProgram = 363;
        glVertexAttrib1f = 364;
        glVertexAttrib1fv = 365;
        glVertexAttrib2f = 366;
        glVertexAttrib2fv = 367;
        glVertexAttrib3f = 368;
        glVertexAttrib3fv = 369;
        glVertexAttrib4f = 370;
        glVertexAttrib4fv = 371;
        glVertexAttribPointer = 372;
        glVertexPointer = 373;
        glViewport = 374;
        glWeightPointerOES = 375;

        glActiveShaderProgramEXT = 502;
        glAlphaFuncQCOM = 503;
        glBeginQueryEXT = 504;
        glBindProgramPipelineEXT = 505;
        glBlitFramebufferANGLE = 506;
        glCreateShaderProgramvEXT = 507;
        glDeleteProgramPipelinesEXT = 508;
        glDeleteQueriesEXT = 509;
        glDrawBuffersNV = 510;
        glEndQueryEXT = 511;
        glFramebufferTexture2DMultisampleEXT = 512;
        glGenProgramPipelinesEXT = 513;
        glGenQueriesEXT = 514;
        glGetGraphicsResetStatusEXT = 515;
        glGetObjectLabelEXT = 516;
        glGetProgramPipelineInfoLogEXT = 517;
        glGetProgramPipelineivEXT = 518;
        glGetQueryObjectuivEXT = 519;
        glGetQueryivEXT = 520;
        glGetnUniformfvEXT = 521;
        glGetnUniformivEXT = 521;
        glInsertEventMarkerEXT = 522;
        glIsProgramPipelineEXT = 523;
        glIsQueryEXT = 524;
        glLabelObjectEXT = 525;
        glPopGroupMarkerEXT = 526;
        glProgramParameteriEXT = 527;
        glProgramUniform1fEXT = 528;
        glProgramUniform1fvEXT = 529;
        glProgramUniform1iEXT = 530;
        glProgramUniform1ivEXT = 531;
        glProgramUniform2fEXT = 532;
        glProgramUniform2fvEXT = 533;
        glProgramUniform2iEXT = 534;
        glProgramUniform2ivEXT = 535;
        glProgramUniform3fEXT = 536;
        glProgramUniform3fvEXT = 537;
        glProgramUniform3iEXT = 538;
        glProgramUniform3ivEXT = 539;
        glProgramUniform4fEXT = 540;
        glProgramUniform4fvEXT = 541;
        glProgramUniform4iEXT = 542;
        glProgramUniform4ivEXT = 543;
        glProgramUniformMatrix2fvEXT = 544;
        glProgramUniformMatrix3fvEXT = 545;
        glProgramUniformMatrix4fvEXT = 546;
        glPushGroupMarkerEXT = 547;
        glReadBufferNV = 548;
        glReadnPixelsEXT = 549;
        glRenderbufferStorageMultisampleANGLE = 550;
        glRenderbufferStorageMultisampleAPPLE = 551;
        glRenderbufferStorageMultisampleEXT = 552;
        glResolveMultisampleFramebufferAPPLE = 553;
        glTexStorage1DEXT = 554;
        glTexStorage2DEXT = 555;
        glTexStorage3DEXT = 556;
        glTextureStorage1DEXT = 557;
        glTextureStorage2DEXT = 558;
        glTextureStorage3DEXT = 559;
        glUseProgramStagesEXT = 560;
        glValidateProgramPipelineEXT = 561;

        eglGetDisplay = 2000;
        eglInitialize = 2001;
        eglTerminate = 2002;
        eglGetConfigs = 2003;
        eglChooseConfig = 2004;
        eglGetConfigAttrib = 2005;
        eglCreateWindowSurface = 2006;
        eglCreatePixmapSurface = 2007;
        eglCreatePbufferSurface = 2008;
        eglDestroySurface = 2009;
        eglQuerySurface = 2010;
        eglCreateContext = 2011;
        eglDestroyContext = 2012;
        eglMakeCurrent = 2013;
        eglGetCurrentContext = 2014;
        eglGetCurrentSurface = 2015;
        eglGetCurrentDisplay = 2016;
        eglQueryContext = 2017;
        eglWaitGL = 2018;
        eglWaitNative = 2019;
        eglSwapBuffers = 2020;
        eglCopyBuffers = 2021;
        eglGetError = 2022;
        eglQueryString = 2023;
        eglGetProcAddress = 2024;
        eglSurfaceAttrib = 2025;
        eglBindTexImage = 2026;
        eglReleaseTexImage = 2027;
        eglSwapInterval = 2028;
        eglBindAPI = 2029;
        eglQueryAPI = 2030;
        eglWaitClient = 2031;
        eglReleaseThread = 2032;
        eglCreatePbufferFromClientBuffer = 2033;
        eglLockSurfaceKHR = 2034;
        eglUnlockSurfaceKHR = 2035;
        eglCreateImageKHR = 2036;
        eglDestroyImageKHR = 2037;
        eglCreateSyncKHR = 2038;
        eglDestroySyncKHR = 2039;
        eglClientWaitSyncKHR = 2040;
        eglGetSyncAttribKHR = 2041;
        eglSetSwapRectangleANDROID = 2042;
        eglGetRenderBufferANDROID = 2043;
        eglGetSystemTimeFrequencyNV = 2044;
        eglGetSystemTimeNV = 2045;

        invalid = 3000;
        glVertexAttribPointerData = 3001;
    }

    // A GL call's return data and arguments are formatted into this DataType
    message DataType {
        enum Type {
            VOID = 1;       // GLvoid
            CHAR = 2;       // GLchar
            BYTE = 3;       // GLbyte, GLubyte
            INT = 4;        // GLbitfield, GLshort, GLint, GLsizei, GLushort, GLuint, GLfixed
            FLOAT = 5;      // GLfloat, GLclampf
            BOOL = 6;       // GLboolean
            ENUM = 7;       // GLenum
        };

        required Type   type = 1 [default = VOID];
        required bool   isArray = 2 [default = false];

        repeated int32  intValue = 3;
        repeated float  floatValue = 4;
        repeated bytes  charValue = 5;
        repeated bytes  rawBytes = 6;
        repeated bool   boolValue = 7;
    }

    message FrameBuffer {
        required int32  width = 1;
        required int32  height = 2;
        repeated bytes  contents = 3;
    }

    required int32      context_id = 1;                     // GL context ID
    required int64      start_time = 2;                     // time when call was invoked
    required int32      duration = 3;                       // duration of the call (MONOTONIC TIME)

    required Function   function = 4 [default = invalid];   // GL function called
    repeated DataType   args = 5;                           // GL function's arguments
    optional DataType   returnValue = 6;                    // GL function's return value

    optional FrameBuffer fb = 7;                            // contents of the framebuffer

    optional int32      threadtime = 8;                     // duration of the call (THREAD TIME)
};
