gltrace_api.cpp revision 0b96e6c44b3c4549bd947fd2947540f4b62a038e
1/*
2 * Copyright 2011, The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 * THIS FILE WAS GENERATED BY A SCRIPT. DO NOT EDIT.
17 */
18
19#include <cutils/log.h>
20#include <utils/Timers.h>
21#include <GLES3/gl3.h>
22
23#include "gltrace.pb.h"
24#include "gltrace_context.h"
25#include "gltrace_fixup.h"
26#include "gltrace_transport.h"
27
28namespace android {
29namespace gltrace {
30
31// Definitions for GL2 APIs
32
33void GLTrace_glActiveTexture(GLenum texture) {
34    GLMessage glmsg;
35    GLTraceContext *glContext = getGLTraceContext();
36
37    glmsg.set_function(GLMessage::glActiveTexture);
38
39    // copy argument texture
40    GLMessage_DataType *arg_texture = glmsg.add_args();
41    arg_texture->set_isarray(false);
42    arg_texture->set_type(GLMessage::DataType::ENUM);
43    arg_texture->add_intvalue((int)texture);
44
45    // call function
46    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
47    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
48    glContext->hooks->gl.glActiveTexture(texture);
49    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
50    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
51
52    void *pointerArgs[] = {
53    };
54
55    fixupGLMessage(glContext, wallStartTime, wallEndTime,
56                              threadStartTime, threadEndTime,
57                              &glmsg, pointerArgs);
58    glContext->traceGLMessage(&glmsg);
59}
60
61void GLTrace_glAttachShader(GLuint program, GLuint shader) {
62    GLMessage glmsg;
63    GLTraceContext *glContext = getGLTraceContext();
64
65    glmsg.set_function(GLMessage::glAttachShader);
66
67    // copy argument program
68    GLMessage_DataType *arg_program = glmsg.add_args();
69    arg_program->set_isarray(false);
70    arg_program->set_type(GLMessage::DataType::INT);
71    arg_program->add_intvalue(program);
72
73    // copy argument shader
74    GLMessage_DataType *arg_shader = glmsg.add_args();
75    arg_shader->set_isarray(false);
76    arg_shader->set_type(GLMessage::DataType::INT);
77    arg_shader->add_intvalue(shader);
78
79    // call function
80    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
81    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
82    glContext->hooks->gl.glAttachShader(program, shader);
83    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
84    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
85
86    void *pointerArgs[] = {
87    };
88
89    fixupGLMessage(glContext, wallStartTime, wallEndTime,
90                              threadStartTime, threadEndTime,
91                              &glmsg, pointerArgs);
92    glContext->traceGLMessage(&glmsg);
93}
94
95void GLTrace_glBindAttribLocation(GLuint program, GLuint index, const GLchar* name) {
96    GLMessage glmsg;
97    GLTraceContext *glContext = getGLTraceContext();
98
99    glmsg.set_function(GLMessage::glBindAttribLocation);
100
101    // copy argument program
102    GLMessage_DataType *arg_program = glmsg.add_args();
103    arg_program->set_isarray(false);
104    arg_program->set_type(GLMessage::DataType::INT);
105    arg_program->add_intvalue(program);
106
107    // copy argument index
108    GLMessage_DataType *arg_index = glmsg.add_args();
109    arg_index->set_isarray(false);
110    arg_index->set_type(GLMessage::DataType::INT);
111    arg_index->add_intvalue(index);
112
113    // copy argument name
114    GLMessage_DataType *arg_name = glmsg.add_args();
115    arg_name->set_isarray(false);
116    arg_name->set_type(GLMessage::DataType::INT64);
117    arg_name->add_int64value((uintptr_t)name);
118
119    // call function
120    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
121    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
122    glContext->hooks->gl.glBindAttribLocation(program, index, name);
123    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
124    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
125
126    void *pointerArgs[] = {
127        (void *) name,
128    };
129
130    fixupGLMessage(glContext, wallStartTime, wallEndTime,
131                              threadStartTime, threadEndTime,
132                              &glmsg, pointerArgs);
133    glContext->traceGLMessage(&glmsg);
134}
135
136void GLTrace_glBindBuffer(GLenum target, GLuint buffer) {
137    GLMessage glmsg;
138    GLTraceContext *glContext = getGLTraceContext();
139
140    glmsg.set_function(GLMessage::glBindBuffer);
141
142    // copy argument target
143    GLMessage_DataType *arg_target = glmsg.add_args();
144    arg_target->set_isarray(false);
145    arg_target->set_type(GLMessage::DataType::ENUM);
146    arg_target->add_intvalue((int)target);
147
148    // copy argument buffer
149    GLMessage_DataType *arg_buffer = glmsg.add_args();
150    arg_buffer->set_isarray(false);
151    arg_buffer->set_type(GLMessage::DataType::INT);
152    arg_buffer->add_intvalue(buffer);
153
154    // call function
155    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
156    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
157    glContext->hooks->gl.glBindBuffer(target, buffer);
158    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
159    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
160
161    void *pointerArgs[] = {
162    };
163
164    fixupGLMessage(glContext, wallStartTime, wallEndTime,
165                              threadStartTime, threadEndTime,
166                              &glmsg, pointerArgs);
167    glContext->traceGLMessage(&glmsg);
168}
169
170void GLTrace_glBindFramebuffer(GLenum target, GLuint framebuffer) {
171    GLMessage glmsg;
172    GLTraceContext *glContext = getGLTraceContext();
173
174    glmsg.set_function(GLMessage::glBindFramebuffer);
175
176    // copy argument target
177    GLMessage_DataType *arg_target = glmsg.add_args();
178    arg_target->set_isarray(false);
179    arg_target->set_type(GLMessage::DataType::ENUM);
180    arg_target->add_intvalue((int)target);
181
182    // copy argument framebuffer
183    GLMessage_DataType *arg_framebuffer = glmsg.add_args();
184    arg_framebuffer->set_isarray(false);
185    arg_framebuffer->set_type(GLMessage::DataType::INT);
186    arg_framebuffer->add_intvalue(framebuffer);
187
188    // call function
189    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
190    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
191    glContext->hooks->gl.glBindFramebuffer(target, framebuffer);
192    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
193    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
194
195    void *pointerArgs[] = {
196    };
197
198    fixupGLMessage(glContext, wallStartTime, wallEndTime,
199                              threadStartTime, threadEndTime,
200                              &glmsg, pointerArgs);
201    glContext->traceGLMessage(&glmsg);
202}
203
204void GLTrace_glBindRenderbuffer(GLenum target, GLuint renderbuffer) {
205    GLMessage glmsg;
206    GLTraceContext *glContext = getGLTraceContext();
207
208    glmsg.set_function(GLMessage::glBindRenderbuffer);
209
210    // copy argument target
211    GLMessage_DataType *arg_target = glmsg.add_args();
212    arg_target->set_isarray(false);
213    arg_target->set_type(GLMessage::DataType::ENUM);
214    arg_target->add_intvalue((int)target);
215
216    // copy argument renderbuffer
217    GLMessage_DataType *arg_renderbuffer = glmsg.add_args();
218    arg_renderbuffer->set_isarray(false);
219    arg_renderbuffer->set_type(GLMessage::DataType::INT);
220    arg_renderbuffer->add_intvalue(renderbuffer);
221
222    // call function
223    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
224    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
225    glContext->hooks->gl.glBindRenderbuffer(target, renderbuffer);
226    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
227    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
228
229    void *pointerArgs[] = {
230    };
231
232    fixupGLMessage(glContext, wallStartTime, wallEndTime,
233                              threadStartTime, threadEndTime,
234                              &glmsg, pointerArgs);
235    glContext->traceGLMessage(&glmsg);
236}
237
238void GLTrace_glBindTexture(GLenum target, GLuint texture) {
239    GLMessage glmsg;
240    GLTraceContext *glContext = getGLTraceContext();
241
242    glmsg.set_function(GLMessage::glBindTexture);
243
244    // copy argument target
245    GLMessage_DataType *arg_target = glmsg.add_args();
246    arg_target->set_isarray(false);
247    arg_target->set_type(GLMessage::DataType::ENUM);
248    arg_target->add_intvalue((int)target);
249
250    // copy argument texture
251    GLMessage_DataType *arg_texture = glmsg.add_args();
252    arg_texture->set_isarray(false);
253    arg_texture->set_type(GLMessage::DataType::INT);
254    arg_texture->add_intvalue(texture);
255
256    // call function
257    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
258    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
259    glContext->hooks->gl.glBindTexture(target, texture);
260    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
261    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
262
263    void *pointerArgs[] = {
264    };
265
266    fixupGLMessage(glContext, wallStartTime, wallEndTime,
267                              threadStartTime, threadEndTime,
268                              &glmsg, pointerArgs);
269    glContext->traceGLMessage(&glmsg);
270}
271
272void GLTrace_glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {
273    GLMessage glmsg;
274    GLTraceContext *glContext = getGLTraceContext();
275
276    glmsg.set_function(GLMessage::glBlendColor);
277
278    // copy argument red
279    GLMessage_DataType *arg_red = glmsg.add_args();
280    arg_red->set_isarray(false);
281    arg_red->set_type(GLMessage::DataType::FLOAT);
282    arg_red->add_floatvalue(red);
283
284    // copy argument green
285    GLMessage_DataType *arg_green = glmsg.add_args();
286    arg_green->set_isarray(false);
287    arg_green->set_type(GLMessage::DataType::FLOAT);
288    arg_green->add_floatvalue(green);
289
290    // copy argument blue
291    GLMessage_DataType *arg_blue = glmsg.add_args();
292    arg_blue->set_isarray(false);
293    arg_blue->set_type(GLMessage::DataType::FLOAT);
294    arg_blue->add_floatvalue(blue);
295
296    // copy argument alpha
297    GLMessage_DataType *arg_alpha = glmsg.add_args();
298    arg_alpha->set_isarray(false);
299    arg_alpha->set_type(GLMessage::DataType::FLOAT);
300    arg_alpha->add_floatvalue(alpha);
301
302    // call function
303    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
304    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
305    glContext->hooks->gl.glBlendColor(red, green, blue, alpha);
306    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
307    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
308
309    void *pointerArgs[] = {
310    };
311
312    fixupGLMessage(glContext, wallStartTime, wallEndTime,
313                              threadStartTime, threadEndTime,
314                              &glmsg, pointerArgs);
315    glContext->traceGLMessage(&glmsg);
316}
317
318void GLTrace_glBlendEquation(GLenum mode) {
319    GLMessage glmsg;
320    GLTraceContext *glContext = getGLTraceContext();
321
322    glmsg.set_function(GLMessage::glBlendEquation);
323
324    // copy argument mode
325    GLMessage_DataType *arg_mode = glmsg.add_args();
326    arg_mode->set_isarray(false);
327    arg_mode->set_type(GLMessage::DataType::ENUM);
328    arg_mode->add_intvalue((int)mode);
329
330    // call function
331    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
332    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
333    glContext->hooks->gl.glBlendEquation(mode);
334    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
335    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
336
337    void *pointerArgs[] = {
338    };
339
340    fixupGLMessage(glContext, wallStartTime, wallEndTime,
341                              threadStartTime, threadEndTime,
342                              &glmsg, pointerArgs);
343    glContext->traceGLMessage(&glmsg);
344}
345
346void GLTrace_glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) {
347    GLMessage glmsg;
348    GLTraceContext *glContext = getGLTraceContext();
349
350    glmsg.set_function(GLMessage::glBlendEquationSeparate);
351
352    // copy argument modeRGB
353    GLMessage_DataType *arg_modeRGB = glmsg.add_args();
354    arg_modeRGB->set_isarray(false);
355    arg_modeRGB->set_type(GLMessage::DataType::ENUM);
356    arg_modeRGB->add_intvalue((int)modeRGB);
357
358    // copy argument modeAlpha
359    GLMessage_DataType *arg_modeAlpha = glmsg.add_args();
360    arg_modeAlpha->set_isarray(false);
361    arg_modeAlpha->set_type(GLMessage::DataType::ENUM);
362    arg_modeAlpha->add_intvalue((int)modeAlpha);
363
364    // call function
365    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
366    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
367    glContext->hooks->gl.glBlendEquationSeparate(modeRGB, modeAlpha);
368    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
369    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
370
371    void *pointerArgs[] = {
372    };
373
374    fixupGLMessage(glContext, wallStartTime, wallEndTime,
375                              threadStartTime, threadEndTime,
376                              &glmsg, pointerArgs);
377    glContext->traceGLMessage(&glmsg);
378}
379
380void GLTrace_glBlendFunc(GLenum sfactor, GLenum dfactor) {
381    GLMessage glmsg;
382    GLTraceContext *glContext = getGLTraceContext();
383
384    glmsg.set_function(GLMessage::glBlendFunc);
385
386    // copy argument sfactor
387    GLMessage_DataType *arg_sfactor = glmsg.add_args();
388    arg_sfactor->set_isarray(false);
389    arg_sfactor->set_type(GLMessage::DataType::ENUM);
390    arg_sfactor->add_intvalue((int)sfactor);
391
392    // copy argument dfactor
393    GLMessage_DataType *arg_dfactor = glmsg.add_args();
394    arg_dfactor->set_isarray(false);
395    arg_dfactor->set_type(GLMessage::DataType::ENUM);
396    arg_dfactor->add_intvalue((int)dfactor);
397
398    // call function
399    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
400    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
401    glContext->hooks->gl.glBlendFunc(sfactor, dfactor);
402    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
403    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
404
405    void *pointerArgs[] = {
406    };
407
408    fixupGLMessage(glContext, wallStartTime, wallEndTime,
409                              threadStartTime, threadEndTime,
410                              &glmsg, pointerArgs);
411    glContext->traceGLMessage(&glmsg);
412}
413
414void GLTrace_glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {
415    GLMessage glmsg;
416    GLTraceContext *glContext = getGLTraceContext();
417
418    glmsg.set_function(GLMessage::glBlendFuncSeparate);
419
420    // copy argument srcRGB
421    GLMessage_DataType *arg_srcRGB = glmsg.add_args();
422    arg_srcRGB->set_isarray(false);
423    arg_srcRGB->set_type(GLMessage::DataType::ENUM);
424    arg_srcRGB->add_intvalue((int)srcRGB);
425
426    // copy argument dstRGB
427    GLMessage_DataType *arg_dstRGB = glmsg.add_args();
428    arg_dstRGB->set_isarray(false);
429    arg_dstRGB->set_type(GLMessage::DataType::ENUM);
430    arg_dstRGB->add_intvalue((int)dstRGB);
431
432    // copy argument srcAlpha
433    GLMessage_DataType *arg_srcAlpha = glmsg.add_args();
434    arg_srcAlpha->set_isarray(false);
435    arg_srcAlpha->set_type(GLMessage::DataType::ENUM);
436    arg_srcAlpha->add_intvalue((int)srcAlpha);
437
438    // copy argument dstAlpha
439    GLMessage_DataType *arg_dstAlpha = glmsg.add_args();
440    arg_dstAlpha->set_isarray(false);
441    arg_dstAlpha->set_type(GLMessage::DataType::ENUM);
442    arg_dstAlpha->add_intvalue((int)dstAlpha);
443
444    // call function
445    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
446    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
447    glContext->hooks->gl.glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
448    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
449    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
450
451    void *pointerArgs[] = {
452    };
453
454    fixupGLMessage(glContext, wallStartTime, wallEndTime,
455                              threadStartTime, threadEndTime,
456                              &glmsg, pointerArgs);
457    glContext->traceGLMessage(&glmsg);
458}
459
460void GLTrace_glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) {
461    GLMessage glmsg;
462    GLTraceContext *glContext = getGLTraceContext();
463
464    glmsg.set_function(GLMessage::glBufferData);
465
466    // copy argument target
467    GLMessage_DataType *arg_target = glmsg.add_args();
468    arg_target->set_isarray(false);
469    arg_target->set_type(GLMessage::DataType::ENUM);
470    arg_target->add_intvalue((int)target);
471
472    // copy argument size
473    GLMessage_DataType *arg_size = glmsg.add_args();
474    arg_size->set_isarray(false);
475    arg_size->set_type(GLMessage::DataType::INT);
476    arg_size->add_intvalue(size);
477
478    // copy argument data
479    GLMessage_DataType *arg_data = glmsg.add_args();
480    arg_data->set_isarray(false);
481    arg_data->set_type(GLMessage::DataType::INT64);
482    arg_data->add_int64value((uintptr_t)data);
483
484    // copy argument usage
485    GLMessage_DataType *arg_usage = glmsg.add_args();
486    arg_usage->set_isarray(false);
487    arg_usage->set_type(GLMessage::DataType::ENUM);
488    arg_usage->add_intvalue((int)usage);
489
490    // call function
491    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
492    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
493    glContext->hooks->gl.glBufferData(target, size, data, usage);
494    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
495    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
496
497    void *pointerArgs[] = {
498        (void *) data,
499    };
500
501    fixupGLMessage(glContext, wallStartTime, wallEndTime,
502                              threadStartTime, threadEndTime,
503                              &glmsg, pointerArgs);
504    glContext->traceGLMessage(&glmsg);
505}
506
507void GLTrace_glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) {
508    GLMessage glmsg;
509    GLTraceContext *glContext = getGLTraceContext();
510
511    glmsg.set_function(GLMessage::glBufferSubData);
512
513    // copy argument target
514    GLMessage_DataType *arg_target = glmsg.add_args();
515    arg_target->set_isarray(false);
516    arg_target->set_type(GLMessage::DataType::ENUM);
517    arg_target->add_intvalue((int)target);
518
519    // copy argument offset
520    GLMessage_DataType *arg_offset = glmsg.add_args();
521    arg_offset->set_isarray(false);
522    arg_offset->set_type(GLMessage::DataType::INT);
523    arg_offset->add_intvalue(offset);
524
525    // copy argument size
526    GLMessage_DataType *arg_size = glmsg.add_args();
527    arg_size->set_isarray(false);
528    arg_size->set_type(GLMessage::DataType::INT);
529    arg_size->add_intvalue(size);
530
531    // copy argument data
532    GLMessage_DataType *arg_data = glmsg.add_args();
533    arg_data->set_isarray(false);
534    arg_data->set_type(GLMessage::DataType::INT64);
535    arg_data->add_int64value((uintptr_t)data);
536
537    // call function
538    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
539    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
540    glContext->hooks->gl.glBufferSubData(target, offset, size, data);
541    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
542    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
543
544    void *pointerArgs[] = {
545        (void *) data,
546    };
547
548    fixupGLMessage(glContext, wallStartTime, wallEndTime,
549                              threadStartTime, threadEndTime,
550                              &glmsg, pointerArgs);
551    glContext->traceGLMessage(&glmsg);
552}
553
554GLenum GLTrace_glCheckFramebufferStatus(GLenum target) {
555    GLMessage glmsg;
556    GLTraceContext *glContext = getGLTraceContext();
557
558    glmsg.set_function(GLMessage::glCheckFramebufferStatus);
559
560    // copy argument target
561    GLMessage_DataType *arg_target = glmsg.add_args();
562    arg_target->set_isarray(false);
563    arg_target->set_type(GLMessage::DataType::ENUM);
564    arg_target->add_intvalue((int)target);
565
566    // call function
567    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
568    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
569    GLenum retValue = glContext->hooks->gl.glCheckFramebufferStatus(target);
570    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
571    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
572
573    // set return value
574    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
575    rt->set_isarray(false);
576    rt->set_type(GLMessage::DataType::ENUM);
577    rt->add_intvalue((int)retValue);
578
579    void *pointerArgs[] = {
580    };
581
582    fixupGLMessage(glContext, wallStartTime, wallEndTime,
583                              threadStartTime, threadEndTime,
584                              &glmsg, pointerArgs);
585    glContext->traceGLMessage(&glmsg);
586
587    return retValue;
588}
589
590void GLTrace_glClear(GLbitfield mask) {
591    GLMessage glmsg;
592    GLTraceContext *glContext = getGLTraceContext();
593
594    glmsg.set_function(GLMessage::glClear);
595
596    // copy argument mask
597    GLMessage_DataType *arg_mask = glmsg.add_args();
598    arg_mask->set_isarray(false);
599    arg_mask->set_type(GLMessage::DataType::INT);
600    arg_mask->add_intvalue(mask);
601
602    // call function
603    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
604    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
605    glContext->hooks->gl.glClear(mask);
606    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
607    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
608
609    void *pointerArgs[] = {
610    };
611
612    fixupGLMessage(glContext, wallStartTime, wallEndTime,
613                              threadStartTime, threadEndTime,
614                              &glmsg, pointerArgs);
615    glContext->traceGLMessage(&glmsg);
616}
617
618void GLTrace_glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {
619    GLMessage glmsg;
620    GLTraceContext *glContext = getGLTraceContext();
621
622    glmsg.set_function(GLMessage::glClearColor);
623
624    // copy argument red
625    GLMessage_DataType *arg_red = glmsg.add_args();
626    arg_red->set_isarray(false);
627    arg_red->set_type(GLMessage::DataType::FLOAT);
628    arg_red->add_floatvalue(red);
629
630    // copy argument green
631    GLMessage_DataType *arg_green = glmsg.add_args();
632    arg_green->set_isarray(false);
633    arg_green->set_type(GLMessage::DataType::FLOAT);
634    arg_green->add_floatvalue(green);
635
636    // copy argument blue
637    GLMessage_DataType *arg_blue = glmsg.add_args();
638    arg_blue->set_isarray(false);
639    arg_blue->set_type(GLMessage::DataType::FLOAT);
640    arg_blue->add_floatvalue(blue);
641
642    // copy argument alpha
643    GLMessage_DataType *arg_alpha = glmsg.add_args();
644    arg_alpha->set_isarray(false);
645    arg_alpha->set_type(GLMessage::DataType::FLOAT);
646    arg_alpha->add_floatvalue(alpha);
647
648    // call function
649    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
650    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
651    glContext->hooks->gl.glClearColor(red, green, blue, alpha);
652    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
653    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
654
655    void *pointerArgs[] = {
656    };
657
658    fixupGLMessage(glContext, wallStartTime, wallEndTime,
659                              threadStartTime, threadEndTime,
660                              &glmsg, pointerArgs);
661    glContext->traceGLMessage(&glmsg);
662}
663
664void GLTrace_glClearDepthf(GLfloat depth) {
665    GLMessage glmsg;
666    GLTraceContext *glContext = getGLTraceContext();
667
668    glmsg.set_function(GLMessage::glClearDepthf);
669
670    // copy argument depth
671    GLMessage_DataType *arg_depth = glmsg.add_args();
672    arg_depth->set_isarray(false);
673    arg_depth->set_type(GLMessage::DataType::FLOAT);
674    arg_depth->add_floatvalue(depth);
675
676    // call function
677    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
678    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
679    glContext->hooks->gl.glClearDepthf(depth);
680    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
681    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
682
683    void *pointerArgs[] = {
684    };
685
686    fixupGLMessage(glContext, wallStartTime, wallEndTime,
687                              threadStartTime, threadEndTime,
688                              &glmsg, pointerArgs);
689    glContext->traceGLMessage(&glmsg);
690}
691
692void GLTrace_glClearStencil(GLint s) {
693    GLMessage glmsg;
694    GLTraceContext *glContext = getGLTraceContext();
695
696    glmsg.set_function(GLMessage::glClearStencil);
697
698    // copy argument s
699    GLMessage_DataType *arg_s = glmsg.add_args();
700    arg_s->set_isarray(false);
701    arg_s->set_type(GLMessage::DataType::INT);
702    arg_s->add_intvalue(s);
703
704    // call function
705    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
706    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
707    glContext->hooks->gl.glClearStencil(s);
708    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
709    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
710
711    void *pointerArgs[] = {
712    };
713
714    fixupGLMessage(glContext, wallStartTime, wallEndTime,
715                              threadStartTime, threadEndTime,
716                              &glmsg, pointerArgs);
717    glContext->traceGLMessage(&glmsg);
718}
719
720void GLTrace_glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) {
721    GLMessage glmsg;
722    GLTraceContext *glContext = getGLTraceContext();
723
724    glmsg.set_function(GLMessage::glColorMask);
725
726    // copy argument red
727    GLMessage_DataType *arg_red = glmsg.add_args();
728    arg_red->set_isarray(false);
729    arg_red->set_type(GLMessage::DataType::BOOL);
730    arg_red->add_boolvalue(red);
731
732    // copy argument green
733    GLMessage_DataType *arg_green = glmsg.add_args();
734    arg_green->set_isarray(false);
735    arg_green->set_type(GLMessage::DataType::BOOL);
736    arg_green->add_boolvalue(green);
737
738    // copy argument blue
739    GLMessage_DataType *arg_blue = glmsg.add_args();
740    arg_blue->set_isarray(false);
741    arg_blue->set_type(GLMessage::DataType::BOOL);
742    arg_blue->add_boolvalue(blue);
743
744    // copy argument alpha
745    GLMessage_DataType *arg_alpha = glmsg.add_args();
746    arg_alpha->set_isarray(false);
747    arg_alpha->set_type(GLMessage::DataType::BOOL);
748    arg_alpha->add_boolvalue(alpha);
749
750    // call function
751    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
752    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
753    glContext->hooks->gl.glColorMask(red, green, blue, alpha);
754    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
755    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
756
757    void *pointerArgs[] = {
758    };
759
760    fixupGLMessage(glContext, wallStartTime, wallEndTime,
761                              threadStartTime, threadEndTime,
762                              &glmsg, pointerArgs);
763    glContext->traceGLMessage(&glmsg);
764}
765
766void GLTrace_glCompileShader(GLuint shader) {
767    GLMessage glmsg;
768    GLTraceContext *glContext = getGLTraceContext();
769
770    glmsg.set_function(GLMessage::glCompileShader);
771
772    // copy argument shader
773    GLMessage_DataType *arg_shader = glmsg.add_args();
774    arg_shader->set_isarray(false);
775    arg_shader->set_type(GLMessage::DataType::INT);
776    arg_shader->add_intvalue(shader);
777
778    // call function
779    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
780    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
781    glContext->hooks->gl.glCompileShader(shader);
782    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
783    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
784
785    void *pointerArgs[] = {
786    };
787
788    fixupGLMessage(glContext, wallStartTime, wallEndTime,
789                              threadStartTime, threadEndTime,
790                              &glmsg, pointerArgs);
791    glContext->traceGLMessage(&glmsg);
792}
793
794void GLTrace_glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) {
795    GLMessage glmsg;
796    GLTraceContext *glContext = getGLTraceContext();
797
798    glmsg.set_function(GLMessage::glCompressedTexImage2D);
799
800    // copy argument target
801    GLMessage_DataType *arg_target = glmsg.add_args();
802    arg_target->set_isarray(false);
803    arg_target->set_type(GLMessage::DataType::ENUM);
804    arg_target->add_intvalue((int)target);
805
806    // copy argument level
807    GLMessage_DataType *arg_level = glmsg.add_args();
808    arg_level->set_isarray(false);
809    arg_level->set_type(GLMessage::DataType::INT);
810    arg_level->add_intvalue(level);
811
812    // copy argument internalformat
813    GLMessage_DataType *arg_internalformat = glmsg.add_args();
814    arg_internalformat->set_isarray(false);
815    arg_internalformat->set_type(GLMessage::DataType::ENUM);
816    arg_internalformat->add_intvalue((int)internalformat);
817
818    // copy argument width
819    GLMessage_DataType *arg_width = glmsg.add_args();
820    arg_width->set_isarray(false);
821    arg_width->set_type(GLMessage::DataType::INT);
822    arg_width->add_intvalue(width);
823
824    // copy argument height
825    GLMessage_DataType *arg_height = glmsg.add_args();
826    arg_height->set_isarray(false);
827    arg_height->set_type(GLMessage::DataType::INT);
828    arg_height->add_intvalue(height);
829
830    // copy argument border
831    GLMessage_DataType *arg_border = glmsg.add_args();
832    arg_border->set_isarray(false);
833    arg_border->set_type(GLMessage::DataType::INT);
834    arg_border->add_intvalue(border);
835
836    // copy argument imageSize
837    GLMessage_DataType *arg_imageSize = glmsg.add_args();
838    arg_imageSize->set_isarray(false);
839    arg_imageSize->set_type(GLMessage::DataType::INT);
840    arg_imageSize->add_intvalue(imageSize);
841
842    // copy argument data
843    GLMessage_DataType *arg_data = glmsg.add_args();
844    arg_data->set_isarray(false);
845    arg_data->set_type(GLMessage::DataType::INT64);
846    arg_data->add_int64value((uintptr_t)data);
847
848    // call function
849    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
850    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
851    glContext->hooks->gl.glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
852    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
853    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
854
855    void *pointerArgs[] = {
856        (void *) data,
857    };
858
859    fixupGLMessage(glContext, wallStartTime, wallEndTime,
860                              threadStartTime, threadEndTime,
861                              &glmsg, pointerArgs);
862    glContext->traceGLMessage(&glmsg);
863}
864
865void GLTrace_glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) {
866    GLMessage glmsg;
867    GLTraceContext *glContext = getGLTraceContext();
868
869    glmsg.set_function(GLMessage::glCompressedTexSubImage2D);
870
871    // copy argument target
872    GLMessage_DataType *arg_target = glmsg.add_args();
873    arg_target->set_isarray(false);
874    arg_target->set_type(GLMessage::DataType::ENUM);
875    arg_target->add_intvalue((int)target);
876
877    // copy argument level
878    GLMessage_DataType *arg_level = glmsg.add_args();
879    arg_level->set_isarray(false);
880    arg_level->set_type(GLMessage::DataType::INT);
881    arg_level->add_intvalue(level);
882
883    // copy argument xoffset
884    GLMessage_DataType *arg_xoffset = glmsg.add_args();
885    arg_xoffset->set_isarray(false);
886    arg_xoffset->set_type(GLMessage::DataType::INT);
887    arg_xoffset->add_intvalue(xoffset);
888
889    // copy argument yoffset
890    GLMessage_DataType *arg_yoffset = glmsg.add_args();
891    arg_yoffset->set_isarray(false);
892    arg_yoffset->set_type(GLMessage::DataType::INT);
893    arg_yoffset->add_intvalue(yoffset);
894
895    // copy argument width
896    GLMessage_DataType *arg_width = glmsg.add_args();
897    arg_width->set_isarray(false);
898    arg_width->set_type(GLMessage::DataType::INT);
899    arg_width->add_intvalue(width);
900
901    // copy argument height
902    GLMessage_DataType *arg_height = glmsg.add_args();
903    arg_height->set_isarray(false);
904    arg_height->set_type(GLMessage::DataType::INT);
905    arg_height->add_intvalue(height);
906
907    // copy argument format
908    GLMessage_DataType *arg_format = glmsg.add_args();
909    arg_format->set_isarray(false);
910    arg_format->set_type(GLMessage::DataType::ENUM);
911    arg_format->add_intvalue((int)format);
912
913    // copy argument imageSize
914    GLMessage_DataType *arg_imageSize = glmsg.add_args();
915    arg_imageSize->set_isarray(false);
916    arg_imageSize->set_type(GLMessage::DataType::INT);
917    arg_imageSize->add_intvalue(imageSize);
918
919    // copy argument data
920    GLMessage_DataType *arg_data = glmsg.add_args();
921    arg_data->set_isarray(false);
922    arg_data->set_type(GLMessage::DataType::INT64);
923    arg_data->add_int64value((uintptr_t)data);
924
925    // call function
926    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
927    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
928    glContext->hooks->gl.glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
929    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
930    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
931
932    void *pointerArgs[] = {
933        (void *) data,
934    };
935
936    fixupGLMessage(glContext, wallStartTime, wallEndTime,
937                              threadStartTime, threadEndTime,
938                              &glmsg, pointerArgs);
939    glContext->traceGLMessage(&glmsg);
940}
941
942void GLTrace_glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) {
943    GLMessage glmsg;
944    GLTraceContext *glContext = getGLTraceContext();
945
946    glmsg.set_function(GLMessage::glCopyTexImage2D);
947
948    // copy argument target
949    GLMessage_DataType *arg_target = glmsg.add_args();
950    arg_target->set_isarray(false);
951    arg_target->set_type(GLMessage::DataType::ENUM);
952    arg_target->add_intvalue((int)target);
953
954    // copy argument level
955    GLMessage_DataType *arg_level = glmsg.add_args();
956    arg_level->set_isarray(false);
957    arg_level->set_type(GLMessage::DataType::INT);
958    arg_level->add_intvalue(level);
959
960    // copy argument internalformat
961    GLMessage_DataType *arg_internalformat = glmsg.add_args();
962    arg_internalformat->set_isarray(false);
963    arg_internalformat->set_type(GLMessage::DataType::ENUM);
964    arg_internalformat->add_intvalue((int)internalformat);
965
966    // copy argument x
967    GLMessage_DataType *arg_x = glmsg.add_args();
968    arg_x->set_isarray(false);
969    arg_x->set_type(GLMessage::DataType::INT);
970    arg_x->add_intvalue(x);
971
972    // copy argument y
973    GLMessage_DataType *arg_y = glmsg.add_args();
974    arg_y->set_isarray(false);
975    arg_y->set_type(GLMessage::DataType::INT);
976    arg_y->add_intvalue(y);
977
978    // copy argument width
979    GLMessage_DataType *arg_width = glmsg.add_args();
980    arg_width->set_isarray(false);
981    arg_width->set_type(GLMessage::DataType::INT);
982    arg_width->add_intvalue(width);
983
984    // copy argument height
985    GLMessage_DataType *arg_height = glmsg.add_args();
986    arg_height->set_isarray(false);
987    arg_height->set_type(GLMessage::DataType::INT);
988    arg_height->add_intvalue(height);
989
990    // copy argument border
991    GLMessage_DataType *arg_border = glmsg.add_args();
992    arg_border->set_isarray(false);
993    arg_border->set_type(GLMessage::DataType::INT);
994    arg_border->add_intvalue(border);
995
996    // call function
997    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
998    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
999    glContext->hooks->gl.glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
1000    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1001    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1002
1003    void *pointerArgs[] = {
1004    };
1005
1006    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1007                              threadStartTime, threadEndTime,
1008                              &glmsg, pointerArgs);
1009    glContext->traceGLMessage(&glmsg);
1010}
1011
1012void GLTrace_glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) {
1013    GLMessage glmsg;
1014    GLTraceContext *glContext = getGLTraceContext();
1015
1016    glmsg.set_function(GLMessage::glCopyTexSubImage2D);
1017
1018    // copy argument target
1019    GLMessage_DataType *arg_target = glmsg.add_args();
1020    arg_target->set_isarray(false);
1021    arg_target->set_type(GLMessage::DataType::ENUM);
1022    arg_target->add_intvalue((int)target);
1023
1024    // copy argument level
1025    GLMessage_DataType *arg_level = glmsg.add_args();
1026    arg_level->set_isarray(false);
1027    arg_level->set_type(GLMessage::DataType::INT);
1028    arg_level->add_intvalue(level);
1029
1030    // copy argument xoffset
1031    GLMessage_DataType *arg_xoffset = glmsg.add_args();
1032    arg_xoffset->set_isarray(false);
1033    arg_xoffset->set_type(GLMessage::DataType::INT);
1034    arg_xoffset->add_intvalue(xoffset);
1035
1036    // copy argument yoffset
1037    GLMessage_DataType *arg_yoffset = glmsg.add_args();
1038    arg_yoffset->set_isarray(false);
1039    arg_yoffset->set_type(GLMessage::DataType::INT);
1040    arg_yoffset->add_intvalue(yoffset);
1041
1042    // copy argument x
1043    GLMessage_DataType *arg_x = glmsg.add_args();
1044    arg_x->set_isarray(false);
1045    arg_x->set_type(GLMessage::DataType::INT);
1046    arg_x->add_intvalue(x);
1047
1048    // copy argument y
1049    GLMessage_DataType *arg_y = glmsg.add_args();
1050    arg_y->set_isarray(false);
1051    arg_y->set_type(GLMessage::DataType::INT);
1052    arg_y->add_intvalue(y);
1053
1054    // copy argument width
1055    GLMessage_DataType *arg_width = glmsg.add_args();
1056    arg_width->set_isarray(false);
1057    arg_width->set_type(GLMessage::DataType::INT);
1058    arg_width->add_intvalue(width);
1059
1060    // copy argument height
1061    GLMessage_DataType *arg_height = glmsg.add_args();
1062    arg_height->set_isarray(false);
1063    arg_height->set_type(GLMessage::DataType::INT);
1064    arg_height->add_intvalue(height);
1065
1066    // call function
1067    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1068    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1069    glContext->hooks->gl.glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
1070    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1071    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1072
1073    void *pointerArgs[] = {
1074    };
1075
1076    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1077                              threadStartTime, threadEndTime,
1078                              &glmsg, pointerArgs);
1079    glContext->traceGLMessage(&glmsg);
1080}
1081
1082GLuint GLTrace_glCreateProgram(void) {
1083    GLMessage glmsg;
1084    GLTraceContext *glContext = getGLTraceContext();
1085
1086    glmsg.set_function(GLMessage::glCreateProgram);
1087
1088    // call function
1089    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1090    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1091    GLuint retValue = glContext->hooks->gl.glCreateProgram();
1092    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1093    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1094
1095    // set return value
1096    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
1097    rt->set_isarray(false);
1098    rt->set_type(GLMessage::DataType::INT);
1099    rt->add_intvalue(retValue);
1100
1101    void *pointerArgs[] = {
1102    };
1103
1104    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1105                              threadStartTime, threadEndTime,
1106                              &glmsg, pointerArgs);
1107    glContext->traceGLMessage(&glmsg);
1108
1109    return retValue;
1110}
1111
1112GLuint GLTrace_glCreateShader(GLenum type) {
1113    GLMessage glmsg;
1114    GLTraceContext *glContext = getGLTraceContext();
1115
1116    glmsg.set_function(GLMessage::glCreateShader);
1117
1118    // copy argument type
1119    GLMessage_DataType *arg_type = glmsg.add_args();
1120    arg_type->set_isarray(false);
1121    arg_type->set_type(GLMessage::DataType::ENUM);
1122    arg_type->add_intvalue((int)type);
1123
1124    // call function
1125    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1126    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1127    GLuint retValue = glContext->hooks->gl.glCreateShader(type);
1128    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1129    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1130
1131    // set return value
1132    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
1133    rt->set_isarray(false);
1134    rt->set_type(GLMessage::DataType::INT);
1135    rt->add_intvalue(retValue);
1136
1137    void *pointerArgs[] = {
1138    };
1139
1140    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1141                              threadStartTime, threadEndTime,
1142                              &glmsg, pointerArgs);
1143    glContext->traceGLMessage(&glmsg);
1144
1145    return retValue;
1146}
1147
1148void GLTrace_glCullFace(GLenum mode) {
1149    GLMessage glmsg;
1150    GLTraceContext *glContext = getGLTraceContext();
1151
1152    glmsg.set_function(GLMessage::glCullFace);
1153
1154    // copy argument mode
1155    GLMessage_DataType *arg_mode = glmsg.add_args();
1156    arg_mode->set_isarray(false);
1157    arg_mode->set_type(GLMessage::DataType::ENUM);
1158    arg_mode->add_intvalue((int)mode);
1159
1160    // call function
1161    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1162    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1163    glContext->hooks->gl.glCullFace(mode);
1164    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1165    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1166
1167    void *pointerArgs[] = {
1168    };
1169
1170    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1171                              threadStartTime, threadEndTime,
1172                              &glmsg, pointerArgs);
1173    glContext->traceGLMessage(&glmsg);
1174}
1175
1176void GLTrace_glDeleteBuffers(GLsizei n, const GLuint* buffers) {
1177    GLMessage glmsg;
1178    GLTraceContext *glContext = getGLTraceContext();
1179
1180    glmsg.set_function(GLMessage::glDeleteBuffers);
1181
1182    // copy argument n
1183    GLMessage_DataType *arg_n = glmsg.add_args();
1184    arg_n->set_isarray(false);
1185    arg_n->set_type(GLMessage::DataType::INT);
1186    arg_n->add_intvalue(n);
1187
1188    // copy argument buffers
1189    GLMessage_DataType *arg_buffers = glmsg.add_args();
1190    arg_buffers->set_isarray(false);
1191    arg_buffers->set_type(GLMessage::DataType::INT64);
1192    arg_buffers->add_int64value((uintptr_t)buffers);
1193
1194    // call function
1195    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1196    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1197    glContext->hooks->gl.glDeleteBuffers(n, buffers);
1198    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1199    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1200
1201    void *pointerArgs[] = {
1202        (void *) buffers,
1203    };
1204
1205    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1206                              threadStartTime, threadEndTime,
1207                              &glmsg, pointerArgs);
1208    glContext->traceGLMessage(&glmsg);
1209}
1210
1211void GLTrace_glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers) {
1212    GLMessage glmsg;
1213    GLTraceContext *glContext = getGLTraceContext();
1214
1215    glmsg.set_function(GLMessage::glDeleteFramebuffers);
1216
1217    // copy argument n
1218    GLMessage_DataType *arg_n = glmsg.add_args();
1219    arg_n->set_isarray(false);
1220    arg_n->set_type(GLMessage::DataType::INT);
1221    arg_n->add_intvalue(n);
1222
1223    // copy argument framebuffers
1224    GLMessage_DataType *arg_framebuffers = glmsg.add_args();
1225    arg_framebuffers->set_isarray(false);
1226    arg_framebuffers->set_type(GLMessage::DataType::INT64);
1227    arg_framebuffers->add_int64value((uintptr_t)framebuffers);
1228
1229    // call function
1230    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1231    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1232    glContext->hooks->gl.glDeleteFramebuffers(n, framebuffers);
1233    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1234    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1235
1236    void *pointerArgs[] = {
1237        (void *) framebuffers,
1238    };
1239
1240    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1241                              threadStartTime, threadEndTime,
1242                              &glmsg, pointerArgs);
1243    glContext->traceGLMessage(&glmsg);
1244}
1245
1246void GLTrace_glDeleteProgram(GLuint program) {
1247    GLMessage glmsg;
1248    GLTraceContext *glContext = getGLTraceContext();
1249
1250    glmsg.set_function(GLMessage::glDeleteProgram);
1251
1252    // copy argument program
1253    GLMessage_DataType *arg_program = glmsg.add_args();
1254    arg_program->set_isarray(false);
1255    arg_program->set_type(GLMessage::DataType::INT);
1256    arg_program->add_intvalue(program);
1257
1258    // call function
1259    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1260    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1261    glContext->hooks->gl.glDeleteProgram(program);
1262    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1263    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1264
1265    void *pointerArgs[] = {
1266    };
1267
1268    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1269                              threadStartTime, threadEndTime,
1270                              &glmsg, pointerArgs);
1271    glContext->traceGLMessage(&glmsg);
1272}
1273
1274void GLTrace_glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) {
1275    GLMessage glmsg;
1276    GLTraceContext *glContext = getGLTraceContext();
1277
1278    glmsg.set_function(GLMessage::glDeleteRenderbuffers);
1279
1280    // copy argument n
1281    GLMessage_DataType *arg_n = glmsg.add_args();
1282    arg_n->set_isarray(false);
1283    arg_n->set_type(GLMessage::DataType::INT);
1284    arg_n->add_intvalue(n);
1285
1286    // copy argument renderbuffers
1287    GLMessage_DataType *arg_renderbuffers = glmsg.add_args();
1288    arg_renderbuffers->set_isarray(false);
1289    arg_renderbuffers->set_type(GLMessage::DataType::INT64);
1290    arg_renderbuffers->add_int64value((uintptr_t)renderbuffers);
1291
1292    // call function
1293    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1294    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1295    glContext->hooks->gl.glDeleteRenderbuffers(n, renderbuffers);
1296    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1297    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1298
1299    void *pointerArgs[] = {
1300        (void *) renderbuffers,
1301    };
1302
1303    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1304                              threadStartTime, threadEndTime,
1305                              &glmsg, pointerArgs);
1306    glContext->traceGLMessage(&glmsg);
1307}
1308
1309void GLTrace_glDeleteShader(GLuint shader) {
1310    GLMessage glmsg;
1311    GLTraceContext *glContext = getGLTraceContext();
1312
1313    glmsg.set_function(GLMessage::glDeleteShader);
1314
1315    // copy argument shader
1316    GLMessage_DataType *arg_shader = glmsg.add_args();
1317    arg_shader->set_isarray(false);
1318    arg_shader->set_type(GLMessage::DataType::INT);
1319    arg_shader->add_intvalue(shader);
1320
1321    // call function
1322    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1323    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1324    glContext->hooks->gl.glDeleteShader(shader);
1325    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1326    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1327
1328    void *pointerArgs[] = {
1329    };
1330
1331    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1332                              threadStartTime, threadEndTime,
1333                              &glmsg, pointerArgs);
1334    glContext->traceGLMessage(&glmsg);
1335}
1336
1337void GLTrace_glDeleteTextures(GLsizei n, const GLuint* textures) {
1338    GLMessage glmsg;
1339    GLTraceContext *glContext = getGLTraceContext();
1340
1341    glmsg.set_function(GLMessage::glDeleteTextures);
1342
1343    // copy argument n
1344    GLMessage_DataType *arg_n = glmsg.add_args();
1345    arg_n->set_isarray(false);
1346    arg_n->set_type(GLMessage::DataType::INT);
1347    arg_n->add_intvalue(n);
1348
1349    // copy argument textures
1350    GLMessage_DataType *arg_textures = glmsg.add_args();
1351    arg_textures->set_isarray(false);
1352    arg_textures->set_type(GLMessage::DataType::INT64);
1353    arg_textures->add_int64value((uintptr_t)textures);
1354
1355    // call function
1356    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1357    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1358    glContext->hooks->gl.glDeleteTextures(n, textures);
1359    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1360    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1361
1362    void *pointerArgs[] = {
1363        (void *) textures,
1364    };
1365
1366    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1367                              threadStartTime, threadEndTime,
1368                              &glmsg, pointerArgs);
1369    glContext->traceGLMessage(&glmsg);
1370}
1371
1372void GLTrace_glDepthFunc(GLenum func) {
1373    GLMessage glmsg;
1374    GLTraceContext *glContext = getGLTraceContext();
1375
1376    glmsg.set_function(GLMessage::glDepthFunc);
1377
1378    // copy argument func
1379    GLMessage_DataType *arg_func = glmsg.add_args();
1380    arg_func->set_isarray(false);
1381    arg_func->set_type(GLMessage::DataType::ENUM);
1382    arg_func->add_intvalue((int)func);
1383
1384    // call function
1385    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1386    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1387    glContext->hooks->gl.glDepthFunc(func);
1388    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1389    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1390
1391    void *pointerArgs[] = {
1392    };
1393
1394    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1395                              threadStartTime, threadEndTime,
1396                              &glmsg, pointerArgs);
1397    glContext->traceGLMessage(&glmsg);
1398}
1399
1400void GLTrace_glDepthMask(GLboolean flag) {
1401    GLMessage glmsg;
1402    GLTraceContext *glContext = getGLTraceContext();
1403
1404    glmsg.set_function(GLMessage::glDepthMask);
1405
1406    // copy argument flag
1407    GLMessage_DataType *arg_flag = glmsg.add_args();
1408    arg_flag->set_isarray(false);
1409    arg_flag->set_type(GLMessage::DataType::BOOL);
1410    arg_flag->add_boolvalue(flag);
1411
1412    // call function
1413    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1414    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1415    glContext->hooks->gl.glDepthMask(flag);
1416    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1417    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1418
1419    void *pointerArgs[] = {
1420    };
1421
1422    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1423                              threadStartTime, threadEndTime,
1424                              &glmsg, pointerArgs);
1425    glContext->traceGLMessage(&glmsg);
1426}
1427
1428void GLTrace_glDepthRangef(GLfloat n, GLfloat f) {
1429    GLMessage glmsg;
1430    GLTraceContext *glContext = getGLTraceContext();
1431
1432    glmsg.set_function(GLMessage::glDepthRangef);
1433
1434    // copy argument n
1435    GLMessage_DataType *arg_n = glmsg.add_args();
1436    arg_n->set_isarray(false);
1437    arg_n->set_type(GLMessage::DataType::FLOAT);
1438    arg_n->add_floatvalue(n);
1439
1440    // copy argument f
1441    GLMessage_DataType *arg_f = glmsg.add_args();
1442    arg_f->set_isarray(false);
1443    arg_f->set_type(GLMessage::DataType::FLOAT);
1444    arg_f->add_floatvalue(f);
1445
1446    // call function
1447    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1448    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1449    glContext->hooks->gl.glDepthRangef(n, f);
1450    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1451    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1452
1453    void *pointerArgs[] = {
1454    };
1455
1456    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1457                              threadStartTime, threadEndTime,
1458                              &glmsg, pointerArgs);
1459    glContext->traceGLMessage(&glmsg);
1460}
1461
1462void GLTrace_glDetachShader(GLuint program, GLuint shader) {
1463    GLMessage glmsg;
1464    GLTraceContext *glContext = getGLTraceContext();
1465
1466    glmsg.set_function(GLMessage::glDetachShader);
1467
1468    // copy argument program
1469    GLMessage_DataType *arg_program = glmsg.add_args();
1470    arg_program->set_isarray(false);
1471    arg_program->set_type(GLMessage::DataType::INT);
1472    arg_program->add_intvalue(program);
1473
1474    // copy argument shader
1475    GLMessage_DataType *arg_shader = glmsg.add_args();
1476    arg_shader->set_isarray(false);
1477    arg_shader->set_type(GLMessage::DataType::INT);
1478    arg_shader->add_intvalue(shader);
1479
1480    // call function
1481    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1482    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1483    glContext->hooks->gl.glDetachShader(program, shader);
1484    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1485    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1486
1487    void *pointerArgs[] = {
1488    };
1489
1490    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1491                              threadStartTime, threadEndTime,
1492                              &glmsg, pointerArgs);
1493    glContext->traceGLMessage(&glmsg);
1494}
1495
1496void GLTrace_glDisable(GLenum cap) {
1497    GLMessage glmsg;
1498    GLTraceContext *glContext = getGLTraceContext();
1499
1500    glmsg.set_function(GLMessage::glDisable);
1501
1502    // copy argument cap
1503    GLMessage_DataType *arg_cap = glmsg.add_args();
1504    arg_cap->set_isarray(false);
1505    arg_cap->set_type(GLMessage::DataType::ENUM);
1506    arg_cap->add_intvalue((int)cap);
1507
1508    // call function
1509    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1510    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1511    glContext->hooks->gl.glDisable(cap);
1512    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1513    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1514
1515    void *pointerArgs[] = {
1516    };
1517
1518    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1519                              threadStartTime, threadEndTime,
1520                              &glmsg, pointerArgs);
1521    glContext->traceGLMessage(&glmsg);
1522}
1523
1524void GLTrace_glDisableVertexAttribArray(GLuint index) {
1525    GLMessage glmsg;
1526    GLTraceContext *glContext = getGLTraceContext();
1527
1528    glmsg.set_function(GLMessage::glDisableVertexAttribArray);
1529
1530    // copy argument index
1531    GLMessage_DataType *arg_index = glmsg.add_args();
1532    arg_index->set_isarray(false);
1533    arg_index->set_type(GLMessage::DataType::INT);
1534    arg_index->add_intvalue(index);
1535
1536    // call function
1537    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1538    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1539    glContext->hooks->gl.glDisableVertexAttribArray(index);
1540    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1541    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1542
1543    void *pointerArgs[] = {
1544    };
1545
1546    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1547                              threadStartTime, threadEndTime,
1548                              &glmsg, pointerArgs);
1549    glContext->traceGLMessage(&glmsg);
1550}
1551
1552void GLTrace_glDrawArrays(GLenum mode, GLint first, GLsizei count) {
1553    GLMessage glmsg;
1554    GLTraceContext *glContext = getGLTraceContext();
1555
1556    glmsg.set_function(GLMessage::glDrawArrays);
1557
1558    // copy argument mode
1559    GLMessage_DataType *arg_mode = glmsg.add_args();
1560    arg_mode->set_isarray(false);
1561    arg_mode->set_type(GLMessage::DataType::ENUM);
1562    arg_mode->add_intvalue((int)mode);
1563
1564    // copy argument first
1565    GLMessage_DataType *arg_first = glmsg.add_args();
1566    arg_first->set_isarray(false);
1567    arg_first->set_type(GLMessage::DataType::INT);
1568    arg_first->add_intvalue(first);
1569
1570    // copy argument count
1571    GLMessage_DataType *arg_count = glmsg.add_args();
1572    arg_count->set_isarray(false);
1573    arg_count->set_type(GLMessage::DataType::INT);
1574    arg_count->add_intvalue(count);
1575
1576    // call function
1577    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1578    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1579    glContext->hooks->gl.glDrawArrays(mode, first, count);
1580    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1581    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1582
1583    void *pointerArgs[] = {
1584    };
1585
1586    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1587                              threadStartTime, threadEndTime,
1588                              &glmsg, pointerArgs);
1589    glContext->traceGLMessage(&glmsg);
1590}
1591
1592void GLTrace_glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices) {
1593    GLMessage glmsg;
1594    GLTraceContext *glContext = getGLTraceContext();
1595
1596    glmsg.set_function(GLMessage::glDrawElements);
1597
1598    // copy argument mode
1599    GLMessage_DataType *arg_mode = glmsg.add_args();
1600    arg_mode->set_isarray(false);
1601    arg_mode->set_type(GLMessage::DataType::ENUM);
1602    arg_mode->add_intvalue((int)mode);
1603
1604    // copy argument count
1605    GLMessage_DataType *arg_count = glmsg.add_args();
1606    arg_count->set_isarray(false);
1607    arg_count->set_type(GLMessage::DataType::INT);
1608    arg_count->add_intvalue(count);
1609
1610    // copy argument type
1611    GLMessage_DataType *arg_type = glmsg.add_args();
1612    arg_type->set_isarray(false);
1613    arg_type->set_type(GLMessage::DataType::ENUM);
1614    arg_type->add_intvalue((int)type);
1615
1616    // copy argument indices
1617    GLMessage_DataType *arg_indices = glmsg.add_args();
1618    arg_indices->set_isarray(false);
1619    arg_indices->set_type(GLMessage::DataType::INT64);
1620    arg_indices->add_int64value((uintptr_t)indices);
1621
1622    // call function
1623    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1624    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1625    glContext->hooks->gl.glDrawElements(mode, count, type, indices);
1626    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1627    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1628
1629    void *pointerArgs[] = {
1630        (void *) indices,
1631    };
1632
1633    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1634                              threadStartTime, threadEndTime,
1635                              &glmsg, pointerArgs);
1636    glContext->traceGLMessage(&glmsg);
1637}
1638
1639void GLTrace_glEnable(GLenum cap) {
1640    GLMessage glmsg;
1641    GLTraceContext *glContext = getGLTraceContext();
1642
1643    glmsg.set_function(GLMessage::glEnable);
1644
1645    // copy argument cap
1646    GLMessage_DataType *arg_cap = glmsg.add_args();
1647    arg_cap->set_isarray(false);
1648    arg_cap->set_type(GLMessage::DataType::ENUM);
1649    arg_cap->add_intvalue((int)cap);
1650
1651    // call function
1652    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1653    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1654    glContext->hooks->gl.glEnable(cap);
1655    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1656    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1657
1658    void *pointerArgs[] = {
1659    };
1660
1661    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1662                              threadStartTime, threadEndTime,
1663                              &glmsg, pointerArgs);
1664    glContext->traceGLMessage(&glmsg);
1665}
1666
1667void GLTrace_glEnableVertexAttribArray(GLuint index) {
1668    GLMessage glmsg;
1669    GLTraceContext *glContext = getGLTraceContext();
1670
1671    glmsg.set_function(GLMessage::glEnableVertexAttribArray);
1672
1673    // copy argument index
1674    GLMessage_DataType *arg_index = glmsg.add_args();
1675    arg_index->set_isarray(false);
1676    arg_index->set_type(GLMessage::DataType::INT);
1677    arg_index->add_intvalue(index);
1678
1679    // call function
1680    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1681    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1682    glContext->hooks->gl.glEnableVertexAttribArray(index);
1683    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1684    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1685
1686    void *pointerArgs[] = {
1687    };
1688
1689    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1690                              threadStartTime, threadEndTime,
1691                              &glmsg, pointerArgs);
1692    glContext->traceGLMessage(&glmsg);
1693}
1694
1695void GLTrace_glFinish(void) {
1696    GLMessage glmsg;
1697    GLTraceContext *glContext = getGLTraceContext();
1698
1699    glmsg.set_function(GLMessage::glFinish);
1700
1701    // call function
1702    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1703    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1704    glContext->hooks->gl.glFinish();
1705    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1706    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1707
1708    void *pointerArgs[] = {
1709    };
1710
1711    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1712                              threadStartTime, threadEndTime,
1713                              &glmsg, pointerArgs);
1714    glContext->traceGLMessage(&glmsg);
1715}
1716
1717void GLTrace_glFlush(void) {
1718    GLMessage glmsg;
1719    GLTraceContext *glContext = getGLTraceContext();
1720
1721    glmsg.set_function(GLMessage::glFlush);
1722
1723    // call function
1724    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1725    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1726    glContext->hooks->gl.glFlush();
1727    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1728    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1729
1730    void *pointerArgs[] = {
1731    };
1732
1733    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1734                              threadStartTime, threadEndTime,
1735                              &glmsg, pointerArgs);
1736    glContext->traceGLMessage(&glmsg);
1737}
1738
1739void GLTrace_glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) {
1740    GLMessage glmsg;
1741    GLTraceContext *glContext = getGLTraceContext();
1742
1743    glmsg.set_function(GLMessage::glFramebufferRenderbuffer);
1744
1745    // copy argument target
1746    GLMessage_DataType *arg_target = glmsg.add_args();
1747    arg_target->set_isarray(false);
1748    arg_target->set_type(GLMessage::DataType::ENUM);
1749    arg_target->add_intvalue((int)target);
1750
1751    // copy argument attachment
1752    GLMessage_DataType *arg_attachment = glmsg.add_args();
1753    arg_attachment->set_isarray(false);
1754    arg_attachment->set_type(GLMessage::DataType::ENUM);
1755    arg_attachment->add_intvalue((int)attachment);
1756
1757    // copy argument renderbuffertarget
1758    GLMessage_DataType *arg_renderbuffertarget = glmsg.add_args();
1759    arg_renderbuffertarget->set_isarray(false);
1760    arg_renderbuffertarget->set_type(GLMessage::DataType::ENUM);
1761    arg_renderbuffertarget->add_intvalue((int)renderbuffertarget);
1762
1763    // copy argument renderbuffer
1764    GLMessage_DataType *arg_renderbuffer = glmsg.add_args();
1765    arg_renderbuffer->set_isarray(false);
1766    arg_renderbuffer->set_type(GLMessage::DataType::INT);
1767    arg_renderbuffer->add_intvalue(renderbuffer);
1768
1769    // call function
1770    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1771    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1772    glContext->hooks->gl.glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
1773    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1774    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1775
1776    void *pointerArgs[] = {
1777    };
1778
1779    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1780                              threadStartTime, threadEndTime,
1781                              &glmsg, pointerArgs);
1782    glContext->traceGLMessage(&glmsg);
1783}
1784
1785void GLTrace_glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {
1786    GLMessage glmsg;
1787    GLTraceContext *glContext = getGLTraceContext();
1788
1789    glmsg.set_function(GLMessage::glFramebufferTexture2D);
1790
1791    // copy argument target
1792    GLMessage_DataType *arg_target = glmsg.add_args();
1793    arg_target->set_isarray(false);
1794    arg_target->set_type(GLMessage::DataType::ENUM);
1795    arg_target->add_intvalue((int)target);
1796
1797    // copy argument attachment
1798    GLMessage_DataType *arg_attachment = glmsg.add_args();
1799    arg_attachment->set_isarray(false);
1800    arg_attachment->set_type(GLMessage::DataType::ENUM);
1801    arg_attachment->add_intvalue((int)attachment);
1802
1803    // copy argument textarget
1804    GLMessage_DataType *arg_textarget = glmsg.add_args();
1805    arg_textarget->set_isarray(false);
1806    arg_textarget->set_type(GLMessage::DataType::ENUM);
1807    arg_textarget->add_intvalue((int)textarget);
1808
1809    // copy argument texture
1810    GLMessage_DataType *arg_texture = glmsg.add_args();
1811    arg_texture->set_isarray(false);
1812    arg_texture->set_type(GLMessage::DataType::INT);
1813    arg_texture->add_intvalue(texture);
1814
1815    // copy argument level
1816    GLMessage_DataType *arg_level = glmsg.add_args();
1817    arg_level->set_isarray(false);
1818    arg_level->set_type(GLMessage::DataType::INT);
1819    arg_level->add_intvalue(level);
1820
1821    // call function
1822    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1823    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1824    glContext->hooks->gl.glFramebufferTexture2D(target, attachment, textarget, texture, level);
1825    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1826    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1827
1828    void *pointerArgs[] = {
1829    };
1830
1831    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1832                              threadStartTime, threadEndTime,
1833                              &glmsg, pointerArgs);
1834    glContext->traceGLMessage(&glmsg);
1835}
1836
1837void GLTrace_glFrontFace(GLenum mode) {
1838    GLMessage glmsg;
1839    GLTraceContext *glContext = getGLTraceContext();
1840
1841    glmsg.set_function(GLMessage::glFrontFace);
1842
1843    // copy argument mode
1844    GLMessage_DataType *arg_mode = glmsg.add_args();
1845    arg_mode->set_isarray(false);
1846    arg_mode->set_type(GLMessage::DataType::ENUM);
1847    arg_mode->add_intvalue((int)mode);
1848
1849    // call function
1850    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1851    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1852    glContext->hooks->gl.glFrontFace(mode);
1853    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1854    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1855
1856    void *pointerArgs[] = {
1857    };
1858
1859    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1860                              threadStartTime, threadEndTime,
1861                              &glmsg, pointerArgs);
1862    glContext->traceGLMessage(&glmsg);
1863}
1864
1865void GLTrace_glGenBuffers(GLsizei n, GLuint* buffers) {
1866    GLMessage glmsg;
1867    GLTraceContext *glContext = getGLTraceContext();
1868
1869    glmsg.set_function(GLMessage::glGenBuffers);
1870
1871    // copy argument n
1872    GLMessage_DataType *arg_n = glmsg.add_args();
1873    arg_n->set_isarray(false);
1874    arg_n->set_type(GLMessage::DataType::INT);
1875    arg_n->add_intvalue(n);
1876
1877    // copy argument buffers
1878    GLMessage_DataType *arg_buffers = glmsg.add_args();
1879    arg_buffers->set_isarray(false);
1880    arg_buffers->set_type(GLMessage::DataType::INT64);
1881    arg_buffers->add_int64value((uintptr_t)buffers);
1882
1883    // call function
1884    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1885    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1886    glContext->hooks->gl.glGenBuffers(n, buffers);
1887    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1888    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1889
1890    void *pointerArgs[] = {
1891        (void *) buffers,
1892    };
1893
1894    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1895                              threadStartTime, threadEndTime,
1896                              &glmsg, pointerArgs);
1897    glContext->traceGLMessage(&glmsg);
1898}
1899
1900void GLTrace_glGenerateMipmap(GLenum target) {
1901    GLMessage glmsg;
1902    GLTraceContext *glContext = getGLTraceContext();
1903
1904    glmsg.set_function(GLMessage::glGenerateMipmap);
1905
1906    // copy argument target
1907    GLMessage_DataType *arg_target = glmsg.add_args();
1908    arg_target->set_isarray(false);
1909    arg_target->set_type(GLMessage::DataType::ENUM);
1910    arg_target->add_intvalue((int)target);
1911
1912    // call function
1913    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1914    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1915    glContext->hooks->gl.glGenerateMipmap(target);
1916    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1917    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1918
1919    void *pointerArgs[] = {
1920    };
1921
1922    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1923                              threadStartTime, threadEndTime,
1924                              &glmsg, pointerArgs);
1925    glContext->traceGLMessage(&glmsg);
1926}
1927
1928void GLTrace_glGenFramebuffers(GLsizei n, GLuint* framebuffers) {
1929    GLMessage glmsg;
1930    GLTraceContext *glContext = getGLTraceContext();
1931
1932    glmsg.set_function(GLMessage::glGenFramebuffers);
1933
1934    // copy argument n
1935    GLMessage_DataType *arg_n = glmsg.add_args();
1936    arg_n->set_isarray(false);
1937    arg_n->set_type(GLMessage::DataType::INT);
1938    arg_n->add_intvalue(n);
1939
1940    // copy argument framebuffers
1941    GLMessage_DataType *arg_framebuffers = glmsg.add_args();
1942    arg_framebuffers->set_isarray(false);
1943    arg_framebuffers->set_type(GLMessage::DataType::INT64);
1944    arg_framebuffers->add_int64value((uintptr_t)framebuffers);
1945
1946    // call function
1947    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1948    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1949    glContext->hooks->gl.glGenFramebuffers(n, framebuffers);
1950    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1951    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1952
1953    void *pointerArgs[] = {
1954        (void *) framebuffers,
1955    };
1956
1957    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1958                              threadStartTime, threadEndTime,
1959                              &glmsg, pointerArgs);
1960    glContext->traceGLMessage(&glmsg);
1961}
1962
1963void GLTrace_glGenRenderbuffers(GLsizei n, GLuint* renderbuffers) {
1964    GLMessage glmsg;
1965    GLTraceContext *glContext = getGLTraceContext();
1966
1967    glmsg.set_function(GLMessage::glGenRenderbuffers);
1968
1969    // copy argument n
1970    GLMessage_DataType *arg_n = glmsg.add_args();
1971    arg_n->set_isarray(false);
1972    arg_n->set_type(GLMessage::DataType::INT);
1973    arg_n->add_intvalue(n);
1974
1975    // copy argument renderbuffers
1976    GLMessage_DataType *arg_renderbuffers = glmsg.add_args();
1977    arg_renderbuffers->set_isarray(false);
1978    arg_renderbuffers->set_type(GLMessage::DataType::INT64);
1979    arg_renderbuffers->add_int64value((uintptr_t)renderbuffers);
1980
1981    // call function
1982    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
1983    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
1984    glContext->hooks->gl.glGenRenderbuffers(n, renderbuffers);
1985    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
1986    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
1987
1988    void *pointerArgs[] = {
1989        (void *) renderbuffers,
1990    };
1991
1992    fixupGLMessage(glContext, wallStartTime, wallEndTime,
1993                              threadStartTime, threadEndTime,
1994                              &glmsg, pointerArgs);
1995    glContext->traceGLMessage(&glmsg);
1996}
1997
1998void GLTrace_glGenTextures(GLsizei n, GLuint* textures) {
1999    GLMessage glmsg;
2000    GLTraceContext *glContext = getGLTraceContext();
2001
2002    glmsg.set_function(GLMessage::glGenTextures);
2003
2004    // copy argument n
2005    GLMessage_DataType *arg_n = glmsg.add_args();
2006    arg_n->set_isarray(false);
2007    arg_n->set_type(GLMessage::DataType::INT);
2008    arg_n->add_intvalue(n);
2009
2010    // copy argument textures
2011    GLMessage_DataType *arg_textures = glmsg.add_args();
2012    arg_textures->set_isarray(false);
2013    arg_textures->set_type(GLMessage::DataType::INT64);
2014    arg_textures->add_int64value((uintptr_t)textures);
2015
2016    // call function
2017    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2018    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2019    glContext->hooks->gl.glGenTextures(n, textures);
2020    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2021    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2022
2023    void *pointerArgs[] = {
2024        (void *) textures,
2025    };
2026
2027    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2028                              threadStartTime, threadEndTime,
2029                              &glmsg, pointerArgs);
2030    glContext->traceGLMessage(&glmsg);
2031}
2032
2033void GLTrace_glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name) {
2034    GLMessage glmsg;
2035    GLTraceContext *glContext = getGLTraceContext();
2036
2037    glmsg.set_function(GLMessage::glGetActiveAttrib);
2038
2039    // copy argument program
2040    GLMessage_DataType *arg_program = glmsg.add_args();
2041    arg_program->set_isarray(false);
2042    arg_program->set_type(GLMessage::DataType::INT);
2043    arg_program->add_intvalue(program);
2044
2045    // copy argument index
2046    GLMessage_DataType *arg_index = glmsg.add_args();
2047    arg_index->set_isarray(false);
2048    arg_index->set_type(GLMessage::DataType::INT);
2049    arg_index->add_intvalue(index);
2050
2051    // copy argument bufsize
2052    GLMessage_DataType *arg_bufsize = glmsg.add_args();
2053    arg_bufsize->set_isarray(false);
2054    arg_bufsize->set_type(GLMessage::DataType::INT);
2055    arg_bufsize->add_intvalue(bufsize);
2056
2057    // copy argument length
2058    GLMessage_DataType *arg_length = glmsg.add_args();
2059    arg_length->set_isarray(false);
2060    arg_length->set_type(GLMessage::DataType::INT64);
2061    arg_length->add_int64value((uintptr_t)length);
2062
2063    // copy argument size
2064    GLMessage_DataType *arg_size = glmsg.add_args();
2065    arg_size->set_isarray(false);
2066    arg_size->set_type(GLMessage::DataType::INT64);
2067    arg_size->add_int64value((uintptr_t)size);
2068
2069    // copy argument type
2070    GLMessage_DataType *arg_type = glmsg.add_args();
2071    arg_type->set_isarray(false);
2072    arg_type->set_type(GLMessage::DataType::INT64);
2073    arg_type->add_int64value((uintptr_t)type);
2074
2075    // copy argument name
2076    GLMessage_DataType *arg_name = glmsg.add_args();
2077    arg_name->set_isarray(false);
2078    arg_name->set_type(GLMessage::DataType::INT64);
2079    arg_name->add_int64value((uintptr_t)name);
2080
2081    // call function
2082    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2083    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2084    glContext->hooks->gl.glGetActiveAttrib(program, index, bufsize, length, size, type, name);
2085    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2086    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2087
2088    void *pointerArgs[] = {
2089        (void *) length,
2090        (void *) size,
2091        (void *) type,
2092        (void *) name,
2093    };
2094
2095    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2096                              threadStartTime, threadEndTime,
2097                              &glmsg, pointerArgs);
2098    glContext->traceGLMessage(&glmsg);
2099}
2100
2101void GLTrace_glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name) {
2102    GLMessage glmsg;
2103    GLTraceContext *glContext = getGLTraceContext();
2104
2105    glmsg.set_function(GLMessage::glGetActiveUniform);
2106
2107    // copy argument program
2108    GLMessage_DataType *arg_program = glmsg.add_args();
2109    arg_program->set_isarray(false);
2110    arg_program->set_type(GLMessage::DataType::INT);
2111    arg_program->add_intvalue(program);
2112
2113    // copy argument index
2114    GLMessage_DataType *arg_index = glmsg.add_args();
2115    arg_index->set_isarray(false);
2116    arg_index->set_type(GLMessage::DataType::INT);
2117    arg_index->add_intvalue(index);
2118
2119    // copy argument bufsize
2120    GLMessage_DataType *arg_bufsize = glmsg.add_args();
2121    arg_bufsize->set_isarray(false);
2122    arg_bufsize->set_type(GLMessage::DataType::INT);
2123    arg_bufsize->add_intvalue(bufsize);
2124
2125    // copy argument length
2126    GLMessage_DataType *arg_length = glmsg.add_args();
2127    arg_length->set_isarray(false);
2128    arg_length->set_type(GLMessage::DataType::INT64);
2129    arg_length->add_int64value((uintptr_t)length);
2130
2131    // copy argument size
2132    GLMessage_DataType *arg_size = glmsg.add_args();
2133    arg_size->set_isarray(false);
2134    arg_size->set_type(GLMessage::DataType::INT64);
2135    arg_size->add_int64value((uintptr_t)size);
2136
2137    // copy argument type
2138    GLMessage_DataType *arg_type = glmsg.add_args();
2139    arg_type->set_isarray(false);
2140    arg_type->set_type(GLMessage::DataType::INT64);
2141    arg_type->add_int64value((uintptr_t)type);
2142
2143    // copy argument name
2144    GLMessage_DataType *arg_name = glmsg.add_args();
2145    arg_name->set_isarray(false);
2146    arg_name->set_type(GLMessage::DataType::INT64);
2147    arg_name->add_int64value((uintptr_t)name);
2148
2149    // call function
2150    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2151    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2152    glContext->hooks->gl.glGetActiveUniform(program, index, bufsize, length, size, type, name);
2153    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2154    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2155
2156    void *pointerArgs[] = {
2157        (void *) length,
2158        (void *) size,
2159        (void *) type,
2160        (void *) name,
2161    };
2162
2163    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2164                              threadStartTime, threadEndTime,
2165                              &glmsg, pointerArgs);
2166    glContext->traceGLMessage(&glmsg);
2167}
2168
2169void GLTrace_glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) {
2170    GLMessage glmsg;
2171    GLTraceContext *glContext = getGLTraceContext();
2172
2173    glmsg.set_function(GLMessage::glGetAttachedShaders);
2174
2175    // copy argument program
2176    GLMessage_DataType *arg_program = glmsg.add_args();
2177    arg_program->set_isarray(false);
2178    arg_program->set_type(GLMessage::DataType::INT);
2179    arg_program->add_intvalue(program);
2180
2181    // copy argument maxcount
2182    GLMessage_DataType *arg_maxcount = glmsg.add_args();
2183    arg_maxcount->set_isarray(false);
2184    arg_maxcount->set_type(GLMessage::DataType::INT);
2185    arg_maxcount->add_intvalue(maxcount);
2186
2187    // copy argument count
2188    GLMessage_DataType *arg_count = glmsg.add_args();
2189    arg_count->set_isarray(false);
2190    arg_count->set_type(GLMessage::DataType::INT64);
2191    arg_count->add_int64value((uintptr_t)count);
2192
2193    // copy argument shaders
2194    GLMessage_DataType *arg_shaders = glmsg.add_args();
2195    arg_shaders->set_isarray(false);
2196    arg_shaders->set_type(GLMessage::DataType::INT64);
2197    arg_shaders->add_int64value((uintptr_t)shaders);
2198
2199    // call function
2200    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2201    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2202    glContext->hooks->gl.glGetAttachedShaders(program, maxcount, count, shaders);
2203    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2204    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2205
2206    void *pointerArgs[] = {
2207        (void *) count,
2208        (void *) shaders,
2209    };
2210
2211    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2212                              threadStartTime, threadEndTime,
2213                              &glmsg, pointerArgs);
2214    glContext->traceGLMessage(&glmsg);
2215}
2216
2217GLint GLTrace_glGetAttribLocation(GLuint program, const GLchar* name) {
2218    GLMessage glmsg;
2219    GLTraceContext *glContext = getGLTraceContext();
2220
2221    glmsg.set_function(GLMessage::glGetAttribLocation);
2222
2223    // copy argument program
2224    GLMessage_DataType *arg_program = glmsg.add_args();
2225    arg_program->set_isarray(false);
2226    arg_program->set_type(GLMessage::DataType::INT);
2227    arg_program->add_intvalue(program);
2228
2229    // copy argument name
2230    GLMessage_DataType *arg_name = glmsg.add_args();
2231    arg_name->set_isarray(false);
2232    arg_name->set_type(GLMessage::DataType::INT64);
2233    arg_name->add_int64value((uintptr_t)name);
2234
2235    // call function
2236    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2237    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2238    GLint retValue = glContext->hooks->gl.glGetAttribLocation(program, name);
2239    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2240    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2241
2242    // set return value
2243    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
2244    rt->set_isarray(false);
2245    rt->set_type(GLMessage::DataType::INT);
2246    rt->add_intvalue(retValue);
2247
2248    void *pointerArgs[] = {
2249        (void *) name,
2250    };
2251
2252    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2253                              threadStartTime, threadEndTime,
2254                              &glmsg, pointerArgs);
2255    glContext->traceGLMessage(&glmsg);
2256
2257    return retValue;
2258}
2259
2260void GLTrace_glGetBooleanv(GLenum pname, GLboolean* params) {
2261    GLMessage glmsg;
2262    GLTraceContext *glContext = getGLTraceContext();
2263
2264    glmsg.set_function(GLMessage::glGetBooleanv);
2265
2266    // copy argument pname
2267    GLMessage_DataType *arg_pname = glmsg.add_args();
2268    arg_pname->set_isarray(false);
2269    arg_pname->set_type(GLMessage::DataType::ENUM);
2270    arg_pname->add_intvalue((int)pname);
2271
2272    // copy argument params
2273    GLMessage_DataType *arg_params = glmsg.add_args();
2274    arg_params->set_isarray(false);
2275    arg_params->set_type(GLMessage::DataType::INT64);
2276    arg_params->add_int64value((uintptr_t)params);
2277
2278    // call function
2279    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2280    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2281    glContext->hooks->gl.glGetBooleanv(pname, params);
2282    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2283    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2284
2285    void *pointerArgs[] = {
2286        (void *) params,
2287    };
2288
2289    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2290                              threadStartTime, threadEndTime,
2291                              &glmsg, pointerArgs);
2292    glContext->traceGLMessage(&glmsg);
2293}
2294
2295void GLTrace_glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params) {
2296    GLMessage glmsg;
2297    GLTraceContext *glContext = getGLTraceContext();
2298
2299    glmsg.set_function(GLMessage::glGetBufferParameteriv);
2300
2301    // copy argument target
2302    GLMessage_DataType *arg_target = glmsg.add_args();
2303    arg_target->set_isarray(false);
2304    arg_target->set_type(GLMessage::DataType::ENUM);
2305    arg_target->add_intvalue((int)target);
2306
2307    // copy argument pname
2308    GLMessage_DataType *arg_pname = glmsg.add_args();
2309    arg_pname->set_isarray(false);
2310    arg_pname->set_type(GLMessage::DataType::ENUM);
2311    arg_pname->add_intvalue((int)pname);
2312
2313    // copy argument params
2314    GLMessage_DataType *arg_params = glmsg.add_args();
2315    arg_params->set_isarray(false);
2316    arg_params->set_type(GLMessage::DataType::INT64);
2317    arg_params->add_int64value((uintptr_t)params);
2318
2319    // call function
2320    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2321    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2322    glContext->hooks->gl.glGetBufferParameteriv(target, pname, params);
2323    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2324    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2325
2326    void *pointerArgs[] = {
2327        (void *) params,
2328    };
2329
2330    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2331                              threadStartTime, threadEndTime,
2332                              &glmsg, pointerArgs);
2333    glContext->traceGLMessage(&glmsg);
2334}
2335
2336GLenum GLTrace_glGetError(void) {
2337    GLMessage glmsg;
2338    GLTraceContext *glContext = getGLTraceContext();
2339
2340    glmsg.set_function(GLMessage::glGetError);
2341
2342    // call function
2343    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2344    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2345    GLenum retValue = glContext->hooks->gl.glGetError();
2346    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2347    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2348
2349    // set return value
2350    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
2351    rt->set_isarray(false);
2352    rt->set_type(GLMessage::DataType::ENUM);
2353    rt->add_intvalue((int)retValue);
2354
2355    void *pointerArgs[] = {
2356    };
2357
2358    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2359                              threadStartTime, threadEndTime,
2360                              &glmsg, pointerArgs);
2361    glContext->traceGLMessage(&glmsg);
2362
2363    return retValue;
2364}
2365
2366void GLTrace_glGetFloatv(GLenum pname, GLfloat* params) {
2367    GLMessage glmsg;
2368    GLTraceContext *glContext = getGLTraceContext();
2369
2370    glmsg.set_function(GLMessage::glGetFloatv);
2371
2372    // copy argument pname
2373    GLMessage_DataType *arg_pname = glmsg.add_args();
2374    arg_pname->set_isarray(false);
2375    arg_pname->set_type(GLMessage::DataType::ENUM);
2376    arg_pname->add_intvalue((int)pname);
2377
2378    // copy argument params
2379    GLMessage_DataType *arg_params = glmsg.add_args();
2380    arg_params->set_isarray(false);
2381    arg_params->set_type(GLMessage::DataType::INT64);
2382    arg_params->add_int64value((uintptr_t)params);
2383
2384    // call function
2385    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2386    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2387    glContext->hooks->gl.glGetFloatv(pname, params);
2388    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2389    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2390
2391    void *pointerArgs[] = {
2392        (void *) params,
2393    };
2394
2395    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2396                              threadStartTime, threadEndTime,
2397                              &glmsg, pointerArgs);
2398    glContext->traceGLMessage(&glmsg);
2399}
2400
2401void GLTrace_glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params) {
2402    GLMessage glmsg;
2403    GLTraceContext *glContext = getGLTraceContext();
2404
2405    glmsg.set_function(GLMessage::glGetFramebufferAttachmentParameteriv);
2406
2407    // copy argument target
2408    GLMessage_DataType *arg_target = glmsg.add_args();
2409    arg_target->set_isarray(false);
2410    arg_target->set_type(GLMessage::DataType::ENUM);
2411    arg_target->add_intvalue((int)target);
2412
2413    // copy argument attachment
2414    GLMessage_DataType *arg_attachment = glmsg.add_args();
2415    arg_attachment->set_isarray(false);
2416    arg_attachment->set_type(GLMessage::DataType::ENUM);
2417    arg_attachment->add_intvalue((int)attachment);
2418
2419    // copy argument pname
2420    GLMessage_DataType *arg_pname = glmsg.add_args();
2421    arg_pname->set_isarray(false);
2422    arg_pname->set_type(GLMessage::DataType::ENUM);
2423    arg_pname->add_intvalue((int)pname);
2424
2425    // copy argument params
2426    GLMessage_DataType *arg_params = glmsg.add_args();
2427    arg_params->set_isarray(false);
2428    arg_params->set_type(GLMessage::DataType::INT64);
2429    arg_params->add_int64value((uintptr_t)params);
2430
2431    // call function
2432    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2433    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2434    glContext->hooks->gl.glGetFramebufferAttachmentParameteriv(target, attachment, pname, params);
2435    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2436    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2437
2438    void *pointerArgs[] = {
2439        (void *) params,
2440    };
2441
2442    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2443                              threadStartTime, threadEndTime,
2444                              &glmsg, pointerArgs);
2445    glContext->traceGLMessage(&glmsg);
2446}
2447
2448void GLTrace_glGetIntegerv(GLenum pname, GLint* params) {
2449    GLMessage glmsg;
2450    GLTraceContext *glContext = getGLTraceContext();
2451
2452    glmsg.set_function(GLMessage::glGetIntegerv);
2453
2454    // copy argument pname
2455    GLMessage_DataType *arg_pname = glmsg.add_args();
2456    arg_pname->set_isarray(false);
2457    arg_pname->set_type(GLMessage::DataType::ENUM);
2458    arg_pname->add_intvalue((int)pname);
2459
2460    // copy argument params
2461    GLMessage_DataType *arg_params = glmsg.add_args();
2462    arg_params->set_isarray(false);
2463    arg_params->set_type(GLMessage::DataType::INT64);
2464    arg_params->add_int64value((uintptr_t)params);
2465
2466    // call function
2467    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2468    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2469    glContext->hooks->gl.glGetIntegerv(pname, params);
2470    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2471    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2472
2473    void *pointerArgs[] = {
2474        (void *) params,
2475    };
2476
2477    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2478                              threadStartTime, threadEndTime,
2479                              &glmsg, pointerArgs);
2480    glContext->traceGLMessage(&glmsg);
2481}
2482
2483void GLTrace_glGetProgramiv(GLuint program, GLenum pname, GLint* params) {
2484    GLMessage glmsg;
2485    GLTraceContext *glContext = getGLTraceContext();
2486
2487    glmsg.set_function(GLMessage::glGetProgramiv);
2488
2489    // copy argument program
2490    GLMessage_DataType *arg_program = glmsg.add_args();
2491    arg_program->set_isarray(false);
2492    arg_program->set_type(GLMessage::DataType::INT);
2493    arg_program->add_intvalue(program);
2494
2495    // copy argument pname
2496    GLMessage_DataType *arg_pname = glmsg.add_args();
2497    arg_pname->set_isarray(false);
2498    arg_pname->set_type(GLMessage::DataType::ENUM);
2499    arg_pname->add_intvalue((int)pname);
2500
2501    // copy argument params
2502    GLMessage_DataType *arg_params = glmsg.add_args();
2503    arg_params->set_isarray(false);
2504    arg_params->set_type(GLMessage::DataType::INT64);
2505    arg_params->add_int64value((uintptr_t)params);
2506
2507    // call function
2508    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2509    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2510    glContext->hooks->gl.glGetProgramiv(program, pname, params);
2511    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2512    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2513
2514    void *pointerArgs[] = {
2515        (void *) params,
2516    };
2517
2518    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2519                              threadStartTime, threadEndTime,
2520                              &glmsg, pointerArgs);
2521    glContext->traceGLMessage(&glmsg);
2522}
2523
2524void GLTrace_glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog) {
2525    GLMessage glmsg;
2526    GLTraceContext *glContext = getGLTraceContext();
2527
2528    glmsg.set_function(GLMessage::glGetProgramInfoLog);
2529
2530    // copy argument program
2531    GLMessage_DataType *arg_program = glmsg.add_args();
2532    arg_program->set_isarray(false);
2533    arg_program->set_type(GLMessage::DataType::INT);
2534    arg_program->add_intvalue(program);
2535
2536    // copy argument bufsize
2537    GLMessage_DataType *arg_bufsize = glmsg.add_args();
2538    arg_bufsize->set_isarray(false);
2539    arg_bufsize->set_type(GLMessage::DataType::INT);
2540    arg_bufsize->add_intvalue(bufsize);
2541
2542    // copy argument length
2543    GLMessage_DataType *arg_length = glmsg.add_args();
2544    arg_length->set_isarray(false);
2545    arg_length->set_type(GLMessage::DataType::INT64);
2546    arg_length->add_int64value((uintptr_t)length);
2547
2548    // copy argument infolog
2549    GLMessage_DataType *arg_infolog = glmsg.add_args();
2550    arg_infolog->set_isarray(false);
2551    arg_infolog->set_type(GLMessage::DataType::INT64);
2552    arg_infolog->add_int64value((uintptr_t)infolog);
2553
2554    // call function
2555    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2556    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2557    glContext->hooks->gl.glGetProgramInfoLog(program, bufsize, length, infolog);
2558    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2559    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2560
2561    void *pointerArgs[] = {
2562        (void *) length,
2563        (void *) infolog,
2564    };
2565
2566    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2567                              threadStartTime, threadEndTime,
2568                              &glmsg, pointerArgs);
2569    glContext->traceGLMessage(&glmsg);
2570}
2571
2572void GLTrace_glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params) {
2573    GLMessage glmsg;
2574    GLTraceContext *glContext = getGLTraceContext();
2575
2576    glmsg.set_function(GLMessage::glGetRenderbufferParameteriv);
2577
2578    // copy argument target
2579    GLMessage_DataType *arg_target = glmsg.add_args();
2580    arg_target->set_isarray(false);
2581    arg_target->set_type(GLMessage::DataType::ENUM);
2582    arg_target->add_intvalue((int)target);
2583
2584    // copy argument pname
2585    GLMessage_DataType *arg_pname = glmsg.add_args();
2586    arg_pname->set_isarray(false);
2587    arg_pname->set_type(GLMessage::DataType::ENUM);
2588    arg_pname->add_intvalue((int)pname);
2589
2590    // copy argument params
2591    GLMessage_DataType *arg_params = glmsg.add_args();
2592    arg_params->set_isarray(false);
2593    arg_params->set_type(GLMessage::DataType::INT64);
2594    arg_params->add_int64value((uintptr_t)params);
2595
2596    // call function
2597    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2598    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2599    glContext->hooks->gl.glGetRenderbufferParameteriv(target, pname, params);
2600    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2601    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2602
2603    void *pointerArgs[] = {
2604        (void *) params,
2605    };
2606
2607    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2608                              threadStartTime, threadEndTime,
2609                              &glmsg, pointerArgs);
2610    glContext->traceGLMessage(&glmsg);
2611}
2612
2613void GLTrace_glGetShaderiv(GLuint shader, GLenum pname, GLint* params) {
2614    GLMessage glmsg;
2615    GLTraceContext *glContext = getGLTraceContext();
2616
2617    glmsg.set_function(GLMessage::glGetShaderiv);
2618
2619    // copy argument shader
2620    GLMessage_DataType *arg_shader = glmsg.add_args();
2621    arg_shader->set_isarray(false);
2622    arg_shader->set_type(GLMessage::DataType::INT);
2623    arg_shader->add_intvalue(shader);
2624
2625    // copy argument pname
2626    GLMessage_DataType *arg_pname = glmsg.add_args();
2627    arg_pname->set_isarray(false);
2628    arg_pname->set_type(GLMessage::DataType::ENUM);
2629    arg_pname->add_intvalue((int)pname);
2630
2631    // copy argument params
2632    GLMessage_DataType *arg_params = glmsg.add_args();
2633    arg_params->set_isarray(false);
2634    arg_params->set_type(GLMessage::DataType::INT64);
2635    arg_params->add_int64value((uintptr_t)params);
2636
2637    // call function
2638    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2639    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2640    glContext->hooks->gl.glGetShaderiv(shader, pname, params);
2641    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2642    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2643
2644    void *pointerArgs[] = {
2645        (void *) params,
2646    };
2647
2648    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2649                              threadStartTime, threadEndTime,
2650                              &glmsg, pointerArgs);
2651    glContext->traceGLMessage(&glmsg);
2652}
2653
2654void GLTrace_glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog) {
2655    GLMessage glmsg;
2656    GLTraceContext *glContext = getGLTraceContext();
2657
2658    glmsg.set_function(GLMessage::glGetShaderInfoLog);
2659
2660    // copy argument shader
2661    GLMessage_DataType *arg_shader = glmsg.add_args();
2662    arg_shader->set_isarray(false);
2663    arg_shader->set_type(GLMessage::DataType::INT);
2664    arg_shader->add_intvalue(shader);
2665
2666    // copy argument bufsize
2667    GLMessage_DataType *arg_bufsize = glmsg.add_args();
2668    arg_bufsize->set_isarray(false);
2669    arg_bufsize->set_type(GLMessage::DataType::INT);
2670    arg_bufsize->add_intvalue(bufsize);
2671
2672    // copy argument length
2673    GLMessage_DataType *arg_length = glmsg.add_args();
2674    arg_length->set_isarray(false);
2675    arg_length->set_type(GLMessage::DataType::INT64);
2676    arg_length->add_int64value((uintptr_t)length);
2677
2678    // copy argument infolog
2679    GLMessage_DataType *arg_infolog = glmsg.add_args();
2680    arg_infolog->set_isarray(false);
2681    arg_infolog->set_type(GLMessage::DataType::INT64);
2682    arg_infolog->add_int64value((uintptr_t)infolog);
2683
2684    // call function
2685    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2686    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2687    glContext->hooks->gl.glGetShaderInfoLog(shader, bufsize, length, infolog);
2688    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2689    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2690
2691    void *pointerArgs[] = {
2692        (void *) length,
2693        (void *) infolog,
2694    };
2695
2696    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2697                              threadStartTime, threadEndTime,
2698                              &glmsg, pointerArgs);
2699    glContext->traceGLMessage(&glmsg);
2700}
2701
2702void GLTrace_glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) {
2703    GLMessage glmsg;
2704    GLTraceContext *glContext = getGLTraceContext();
2705
2706    glmsg.set_function(GLMessage::glGetShaderPrecisionFormat);
2707
2708    // copy argument shadertype
2709    GLMessage_DataType *arg_shadertype = glmsg.add_args();
2710    arg_shadertype->set_isarray(false);
2711    arg_shadertype->set_type(GLMessage::DataType::ENUM);
2712    arg_shadertype->add_intvalue((int)shadertype);
2713
2714    // copy argument precisiontype
2715    GLMessage_DataType *arg_precisiontype = glmsg.add_args();
2716    arg_precisiontype->set_isarray(false);
2717    arg_precisiontype->set_type(GLMessage::DataType::ENUM);
2718    arg_precisiontype->add_intvalue((int)precisiontype);
2719
2720    // copy argument range
2721    GLMessage_DataType *arg_range = glmsg.add_args();
2722    arg_range->set_isarray(false);
2723    arg_range->set_type(GLMessage::DataType::INT64);
2724    arg_range->add_int64value((uintptr_t)range);
2725
2726    // copy argument precision
2727    GLMessage_DataType *arg_precision = glmsg.add_args();
2728    arg_precision->set_isarray(false);
2729    arg_precision->set_type(GLMessage::DataType::INT64);
2730    arg_precision->add_int64value((uintptr_t)precision);
2731
2732    // call function
2733    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2734    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2735    glContext->hooks->gl.glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
2736    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2737    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2738
2739    void *pointerArgs[] = {
2740        (void *) range,
2741        (void *) precision,
2742    };
2743
2744    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2745                              threadStartTime, threadEndTime,
2746                              &glmsg, pointerArgs);
2747    glContext->traceGLMessage(&glmsg);
2748}
2749
2750void GLTrace_glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source) {
2751    GLMessage glmsg;
2752    GLTraceContext *glContext = getGLTraceContext();
2753
2754    glmsg.set_function(GLMessage::glGetShaderSource);
2755
2756    // copy argument shader
2757    GLMessage_DataType *arg_shader = glmsg.add_args();
2758    arg_shader->set_isarray(false);
2759    arg_shader->set_type(GLMessage::DataType::INT);
2760    arg_shader->add_intvalue(shader);
2761
2762    // copy argument bufsize
2763    GLMessage_DataType *arg_bufsize = glmsg.add_args();
2764    arg_bufsize->set_isarray(false);
2765    arg_bufsize->set_type(GLMessage::DataType::INT);
2766    arg_bufsize->add_intvalue(bufsize);
2767
2768    // copy argument length
2769    GLMessage_DataType *arg_length = glmsg.add_args();
2770    arg_length->set_isarray(false);
2771    arg_length->set_type(GLMessage::DataType::INT64);
2772    arg_length->add_int64value((uintptr_t)length);
2773
2774    // copy argument source
2775    GLMessage_DataType *arg_source = glmsg.add_args();
2776    arg_source->set_isarray(false);
2777    arg_source->set_type(GLMessage::DataType::INT64);
2778    arg_source->add_int64value((uintptr_t)source);
2779
2780    // call function
2781    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2782    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2783    glContext->hooks->gl.glGetShaderSource(shader, bufsize, length, source);
2784    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2785    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2786
2787    void *pointerArgs[] = {
2788        (void *) length,
2789        (void *) source,
2790    };
2791
2792    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2793                              threadStartTime, threadEndTime,
2794                              &glmsg, pointerArgs);
2795    glContext->traceGLMessage(&glmsg);
2796}
2797
2798const GLubyte* GLTrace_glGetString(GLenum name) {
2799    GLMessage glmsg;
2800    GLTraceContext *glContext = getGLTraceContext();
2801
2802    glmsg.set_function(GLMessage::glGetString);
2803
2804    // copy argument name
2805    GLMessage_DataType *arg_name = glmsg.add_args();
2806    arg_name->set_isarray(false);
2807    arg_name->set_type(GLMessage::DataType::ENUM);
2808    arg_name->add_intvalue((int)name);
2809
2810    // call function
2811    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2812    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2813    const GLubyte* retValue = glContext->hooks->gl.glGetString(name);
2814    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2815    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2816
2817    // set return value
2818    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
2819    rt->set_isarray(false);
2820    rt->set_type(GLMessage::DataType::INT64);
2821    rt->add_int64value((uintptr_t)retValue);
2822
2823    void *pointerArgs[] = {
2824        (void *) retValue,
2825    };
2826
2827    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2828                              threadStartTime, threadEndTime,
2829                              &glmsg, pointerArgs);
2830    glContext->traceGLMessage(&glmsg);
2831
2832    return retValue;
2833}
2834
2835void GLTrace_glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params) {
2836    GLMessage glmsg;
2837    GLTraceContext *glContext = getGLTraceContext();
2838
2839    glmsg.set_function(GLMessage::glGetTexParameterfv);
2840
2841    // copy argument target
2842    GLMessage_DataType *arg_target = glmsg.add_args();
2843    arg_target->set_isarray(false);
2844    arg_target->set_type(GLMessage::DataType::ENUM);
2845    arg_target->add_intvalue((int)target);
2846
2847    // copy argument pname
2848    GLMessage_DataType *arg_pname = glmsg.add_args();
2849    arg_pname->set_isarray(false);
2850    arg_pname->set_type(GLMessage::DataType::ENUM);
2851    arg_pname->add_intvalue((int)pname);
2852
2853    // copy argument params
2854    GLMessage_DataType *arg_params = glmsg.add_args();
2855    arg_params->set_isarray(false);
2856    arg_params->set_type(GLMessage::DataType::INT64);
2857    arg_params->add_int64value((uintptr_t)params);
2858
2859    // call function
2860    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2861    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2862    glContext->hooks->gl.glGetTexParameterfv(target, pname, params);
2863    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2864    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2865
2866    void *pointerArgs[] = {
2867        (void *) params,
2868    };
2869
2870    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2871                              threadStartTime, threadEndTime,
2872                              &glmsg, pointerArgs);
2873    glContext->traceGLMessage(&glmsg);
2874}
2875
2876void GLTrace_glGetTexParameteriv(GLenum target, GLenum pname, GLint* params) {
2877    GLMessage glmsg;
2878    GLTraceContext *glContext = getGLTraceContext();
2879
2880    glmsg.set_function(GLMessage::glGetTexParameteriv);
2881
2882    // copy argument target
2883    GLMessage_DataType *arg_target = glmsg.add_args();
2884    arg_target->set_isarray(false);
2885    arg_target->set_type(GLMessage::DataType::ENUM);
2886    arg_target->add_intvalue((int)target);
2887
2888    // copy argument pname
2889    GLMessage_DataType *arg_pname = glmsg.add_args();
2890    arg_pname->set_isarray(false);
2891    arg_pname->set_type(GLMessage::DataType::ENUM);
2892    arg_pname->add_intvalue((int)pname);
2893
2894    // copy argument params
2895    GLMessage_DataType *arg_params = glmsg.add_args();
2896    arg_params->set_isarray(false);
2897    arg_params->set_type(GLMessage::DataType::INT64);
2898    arg_params->add_int64value((uintptr_t)params);
2899
2900    // call function
2901    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2902    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2903    glContext->hooks->gl.glGetTexParameteriv(target, pname, params);
2904    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2905    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2906
2907    void *pointerArgs[] = {
2908        (void *) params,
2909    };
2910
2911    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2912                              threadStartTime, threadEndTime,
2913                              &glmsg, pointerArgs);
2914    glContext->traceGLMessage(&glmsg);
2915}
2916
2917void GLTrace_glGetUniformfv(GLuint program, GLint location, GLfloat* params) {
2918    GLMessage glmsg;
2919    GLTraceContext *glContext = getGLTraceContext();
2920
2921    glmsg.set_function(GLMessage::glGetUniformfv);
2922
2923    // copy argument program
2924    GLMessage_DataType *arg_program = glmsg.add_args();
2925    arg_program->set_isarray(false);
2926    arg_program->set_type(GLMessage::DataType::INT);
2927    arg_program->add_intvalue(program);
2928
2929    // copy argument location
2930    GLMessage_DataType *arg_location = glmsg.add_args();
2931    arg_location->set_isarray(false);
2932    arg_location->set_type(GLMessage::DataType::INT);
2933    arg_location->add_intvalue(location);
2934
2935    // copy argument params
2936    GLMessage_DataType *arg_params = glmsg.add_args();
2937    arg_params->set_isarray(false);
2938    arg_params->set_type(GLMessage::DataType::INT64);
2939    arg_params->add_int64value((uintptr_t)params);
2940
2941    // call function
2942    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2943    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2944    glContext->hooks->gl.glGetUniformfv(program, location, params);
2945    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2946    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2947
2948    void *pointerArgs[] = {
2949        (void *) params,
2950    };
2951
2952    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2953                              threadStartTime, threadEndTime,
2954                              &glmsg, pointerArgs);
2955    glContext->traceGLMessage(&glmsg);
2956}
2957
2958void GLTrace_glGetUniformiv(GLuint program, GLint location, GLint* params) {
2959    GLMessage glmsg;
2960    GLTraceContext *glContext = getGLTraceContext();
2961
2962    glmsg.set_function(GLMessage::glGetUniformiv);
2963
2964    // copy argument program
2965    GLMessage_DataType *arg_program = glmsg.add_args();
2966    arg_program->set_isarray(false);
2967    arg_program->set_type(GLMessage::DataType::INT);
2968    arg_program->add_intvalue(program);
2969
2970    // copy argument location
2971    GLMessage_DataType *arg_location = glmsg.add_args();
2972    arg_location->set_isarray(false);
2973    arg_location->set_type(GLMessage::DataType::INT);
2974    arg_location->add_intvalue(location);
2975
2976    // copy argument params
2977    GLMessage_DataType *arg_params = glmsg.add_args();
2978    arg_params->set_isarray(false);
2979    arg_params->set_type(GLMessage::DataType::INT64);
2980    arg_params->add_int64value((uintptr_t)params);
2981
2982    // call function
2983    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
2984    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
2985    glContext->hooks->gl.glGetUniformiv(program, location, params);
2986    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
2987    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
2988
2989    void *pointerArgs[] = {
2990        (void *) params,
2991    };
2992
2993    fixupGLMessage(glContext, wallStartTime, wallEndTime,
2994                              threadStartTime, threadEndTime,
2995                              &glmsg, pointerArgs);
2996    glContext->traceGLMessage(&glmsg);
2997}
2998
2999GLint GLTrace_glGetUniformLocation(GLuint program, const GLchar* name) {
3000    GLMessage glmsg;
3001    GLTraceContext *glContext = getGLTraceContext();
3002
3003    glmsg.set_function(GLMessage::glGetUniformLocation);
3004
3005    // copy argument program
3006    GLMessage_DataType *arg_program = glmsg.add_args();
3007    arg_program->set_isarray(false);
3008    arg_program->set_type(GLMessage::DataType::INT);
3009    arg_program->add_intvalue(program);
3010
3011    // copy argument name
3012    GLMessage_DataType *arg_name = glmsg.add_args();
3013    arg_name->set_isarray(false);
3014    arg_name->set_type(GLMessage::DataType::INT64);
3015    arg_name->add_int64value((uintptr_t)name);
3016
3017    // call function
3018    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3019    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3020    GLint retValue = glContext->hooks->gl.glGetUniformLocation(program, name);
3021    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3022    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3023
3024    // set return value
3025    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
3026    rt->set_isarray(false);
3027    rt->set_type(GLMessage::DataType::INT);
3028    rt->add_intvalue(retValue);
3029
3030    void *pointerArgs[] = {
3031        (void *) name,
3032    };
3033
3034    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3035                              threadStartTime, threadEndTime,
3036                              &glmsg, pointerArgs);
3037    glContext->traceGLMessage(&glmsg);
3038
3039    return retValue;
3040}
3041
3042void GLTrace_glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) {
3043    GLMessage glmsg;
3044    GLTraceContext *glContext = getGLTraceContext();
3045
3046    glmsg.set_function(GLMessage::glGetVertexAttribfv);
3047
3048    // copy argument index
3049    GLMessage_DataType *arg_index = glmsg.add_args();
3050    arg_index->set_isarray(false);
3051    arg_index->set_type(GLMessage::DataType::INT);
3052    arg_index->add_intvalue(index);
3053
3054    // copy argument pname
3055    GLMessage_DataType *arg_pname = glmsg.add_args();
3056    arg_pname->set_isarray(false);
3057    arg_pname->set_type(GLMessage::DataType::ENUM);
3058    arg_pname->add_intvalue((int)pname);
3059
3060    // copy argument params
3061    GLMessage_DataType *arg_params = glmsg.add_args();
3062    arg_params->set_isarray(false);
3063    arg_params->set_type(GLMessage::DataType::INT64);
3064    arg_params->add_int64value((uintptr_t)params);
3065
3066    // call function
3067    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3068    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3069    glContext->hooks->gl.glGetVertexAttribfv(index, pname, params);
3070    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3071    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3072
3073    void *pointerArgs[] = {
3074        (void *) params,
3075    };
3076
3077    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3078                              threadStartTime, threadEndTime,
3079                              &glmsg, pointerArgs);
3080    glContext->traceGLMessage(&glmsg);
3081}
3082
3083void GLTrace_glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params) {
3084    GLMessage glmsg;
3085    GLTraceContext *glContext = getGLTraceContext();
3086
3087    glmsg.set_function(GLMessage::glGetVertexAttribiv);
3088
3089    // copy argument index
3090    GLMessage_DataType *arg_index = glmsg.add_args();
3091    arg_index->set_isarray(false);
3092    arg_index->set_type(GLMessage::DataType::INT);
3093    arg_index->add_intvalue(index);
3094
3095    // copy argument pname
3096    GLMessage_DataType *arg_pname = glmsg.add_args();
3097    arg_pname->set_isarray(false);
3098    arg_pname->set_type(GLMessage::DataType::ENUM);
3099    arg_pname->add_intvalue((int)pname);
3100
3101    // copy argument params
3102    GLMessage_DataType *arg_params = glmsg.add_args();
3103    arg_params->set_isarray(false);
3104    arg_params->set_type(GLMessage::DataType::INT64);
3105    arg_params->add_int64value((uintptr_t)params);
3106
3107    // call function
3108    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3109    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3110    glContext->hooks->gl.glGetVertexAttribiv(index, pname, params);
3111    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3112    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3113
3114    void *pointerArgs[] = {
3115        (void *) params,
3116    };
3117
3118    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3119                              threadStartTime, threadEndTime,
3120                              &glmsg, pointerArgs);
3121    glContext->traceGLMessage(&glmsg);
3122}
3123
3124void GLTrace_glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer) {
3125    GLMessage glmsg;
3126    GLTraceContext *glContext = getGLTraceContext();
3127
3128    glmsg.set_function(GLMessage::glGetVertexAttribPointerv);
3129
3130    // copy argument index
3131    GLMessage_DataType *arg_index = glmsg.add_args();
3132    arg_index->set_isarray(false);
3133    arg_index->set_type(GLMessage::DataType::INT);
3134    arg_index->add_intvalue(index);
3135
3136    // copy argument pname
3137    GLMessage_DataType *arg_pname = glmsg.add_args();
3138    arg_pname->set_isarray(false);
3139    arg_pname->set_type(GLMessage::DataType::ENUM);
3140    arg_pname->add_intvalue((int)pname);
3141
3142    // copy argument pointer
3143    GLMessage_DataType *arg_pointer = glmsg.add_args();
3144    arg_pointer->set_isarray(false);
3145    arg_pointer->set_type(GLMessage::DataType::INT64);
3146    arg_pointer->add_int64value((uintptr_t)pointer);
3147
3148    // call function
3149    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3150    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3151    glContext->hooks->gl.glGetVertexAttribPointerv(index, pname, pointer);
3152    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3153    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3154
3155    void *pointerArgs[] = {
3156        (void *) pointer,
3157    };
3158
3159    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3160                              threadStartTime, threadEndTime,
3161                              &glmsg, pointerArgs);
3162    glContext->traceGLMessage(&glmsg);
3163}
3164
3165void GLTrace_glHint(GLenum target, GLenum mode) {
3166    GLMessage glmsg;
3167    GLTraceContext *glContext = getGLTraceContext();
3168
3169    glmsg.set_function(GLMessage::glHint);
3170
3171    // copy argument target
3172    GLMessage_DataType *arg_target = glmsg.add_args();
3173    arg_target->set_isarray(false);
3174    arg_target->set_type(GLMessage::DataType::ENUM);
3175    arg_target->add_intvalue((int)target);
3176
3177    // copy argument mode
3178    GLMessage_DataType *arg_mode = glmsg.add_args();
3179    arg_mode->set_isarray(false);
3180    arg_mode->set_type(GLMessage::DataType::ENUM);
3181    arg_mode->add_intvalue((int)mode);
3182
3183    // call function
3184    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3185    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3186    glContext->hooks->gl.glHint(target, mode);
3187    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3188    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3189
3190    void *pointerArgs[] = {
3191    };
3192
3193    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3194                              threadStartTime, threadEndTime,
3195                              &glmsg, pointerArgs);
3196    glContext->traceGLMessage(&glmsg);
3197}
3198
3199GLboolean GLTrace_glIsBuffer(GLuint buffer) {
3200    GLMessage glmsg;
3201    GLTraceContext *glContext = getGLTraceContext();
3202
3203    glmsg.set_function(GLMessage::glIsBuffer);
3204
3205    // copy argument buffer
3206    GLMessage_DataType *arg_buffer = glmsg.add_args();
3207    arg_buffer->set_isarray(false);
3208    arg_buffer->set_type(GLMessage::DataType::INT);
3209    arg_buffer->add_intvalue(buffer);
3210
3211    // call function
3212    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3213    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3214    GLboolean retValue = glContext->hooks->gl.glIsBuffer(buffer);
3215    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3216    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3217
3218    // set return value
3219    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
3220    rt->set_isarray(false);
3221    rt->set_type(GLMessage::DataType::BOOL);
3222    rt->add_boolvalue(retValue);
3223
3224    void *pointerArgs[] = {
3225    };
3226
3227    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3228                              threadStartTime, threadEndTime,
3229                              &glmsg, pointerArgs);
3230    glContext->traceGLMessage(&glmsg);
3231
3232    return retValue;
3233}
3234
3235GLboolean GLTrace_glIsEnabled(GLenum cap) {
3236    GLMessage glmsg;
3237    GLTraceContext *glContext = getGLTraceContext();
3238
3239    glmsg.set_function(GLMessage::glIsEnabled);
3240
3241    // copy argument cap
3242    GLMessage_DataType *arg_cap = glmsg.add_args();
3243    arg_cap->set_isarray(false);
3244    arg_cap->set_type(GLMessage::DataType::ENUM);
3245    arg_cap->add_intvalue((int)cap);
3246
3247    // call function
3248    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3249    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3250    GLboolean retValue = glContext->hooks->gl.glIsEnabled(cap);
3251    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3252    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3253
3254    // set return value
3255    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
3256    rt->set_isarray(false);
3257    rt->set_type(GLMessage::DataType::BOOL);
3258    rt->add_boolvalue(retValue);
3259
3260    void *pointerArgs[] = {
3261    };
3262
3263    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3264                              threadStartTime, threadEndTime,
3265                              &glmsg, pointerArgs);
3266    glContext->traceGLMessage(&glmsg);
3267
3268    return retValue;
3269}
3270
3271GLboolean GLTrace_glIsFramebuffer(GLuint framebuffer) {
3272    GLMessage glmsg;
3273    GLTraceContext *glContext = getGLTraceContext();
3274
3275    glmsg.set_function(GLMessage::glIsFramebuffer);
3276
3277    // copy argument framebuffer
3278    GLMessage_DataType *arg_framebuffer = glmsg.add_args();
3279    arg_framebuffer->set_isarray(false);
3280    arg_framebuffer->set_type(GLMessage::DataType::INT);
3281    arg_framebuffer->add_intvalue(framebuffer);
3282
3283    // call function
3284    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3285    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3286    GLboolean retValue = glContext->hooks->gl.glIsFramebuffer(framebuffer);
3287    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3288    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3289
3290    // set return value
3291    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
3292    rt->set_isarray(false);
3293    rt->set_type(GLMessage::DataType::BOOL);
3294    rt->add_boolvalue(retValue);
3295
3296    void *pointerArgs[] = {
3297    };
3298
3299    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3300                              threadStartTime, threadEndTime,
3301                              &glmsg, pointerArgs);
3302    glContext->traceGLMessage(&glmsg);
3303
3304    return retValue;
3305}
3306
3307GLboolean GLTrace_glIsProgram(GLuint program) {
3308    GLMessage glmsg;
3309    GLTraceContext *glContext = getGLTraceContext();
3310
3311    glmsg.set_function(GLMessage::glIsProgram);
3312
3313    // copy argument program
3314    GLMessage_DataType *arg_program = glmsg.add_args();
3315    arg_program->set_isarray(false);
3316    arg_program->set_type(GLMessage::DataType::INT);
3317    arg_program->add_intvalue(program);
3318
3319    // call function
3320    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3321    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3322    GLboolean retValue = glContext->hooks->gl.glIsProgram(program);
3323    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3324    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3325
3326    // set return value
3327    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
3328    rt->set_isarray(false);
3329    rt->set_type(GLMessage::DataType::BOOL);
3330    rt->add_boolvalue(retValue);
3331
3332    void *pointerArgs[] = {
3333    };
3334
3335    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3336                              threadStartTime, threadEndTime,
3337                              &glmsg, pointerArgs);
3338    glContext->traceGLMessage(&glmsg);
3339
3340    return retValue;
3341}
3342
3343GLboolean GLTrace_glIsRenderbuffer(GLuint renderbuffer) {
3344    GLMessage glmsg;
3345    GLTraceContext *glContext = getGLTraceContext();
3346
3347    glmsg.set_function(GLMessage::glIsRenderbuffer);
3348
3349    // copy argument renderbuffer
3350    GLMessage_DataType *arg_renderbuffer = glmsg.add_args();
3351    arg_renderbuffer->set_isarray(false);
3352    arg_renderbuffer->set_type(GLMessage::DataType::INT);
3353    arg_renderbuffer->add_intvalue(renderbuffer);
3354
3355    // call function
3356    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3357    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3358    GLboolean retValue = glContext->hooks->gl.glIsRenderbuffer(renderbuffer);
3359    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3360    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3361
3362    // set return value
3363    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
3364    rt->set_isarray(false);
3365    rt->set_type(GLMessage::DataType::BOOL);
3366    rt->add_boolvalue(retValue);
3367
3368    void *pointerArgs[] = {
3369    };
3370
3371    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3372                              threadStartTime, threadEndTime,
3373                              &glmsg, pointerArgs);
3374    glContext->traceGLMessage(&glmsg);
3375
3376    return retValue;
3377}
3378
3379GLboolean GLTrace_glIsShader(GLuint shader) {
3380    GLMessage glmsg;
3381    GLTraceContext *glContext = getGLTraceContext();
3382
3383    glmsg.set_function(GLMessage::glIsShader);
3384
3385    // copy argument shader
3386    GLMessage_DataType *arg_shader = glmsg.add_args();
3387    arg_shader->set_isarray(false);
3388    arg_shader->set_type(GLMessage::DataType::INT);
3389    arg_shader->add_intvalue(shader);
3390
3391    // call function
3392    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3393    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3394    GLboolean retValue = glContext->hooks->gl.glIsShader(shader);
3395    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3396    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3397
3398    // set return value
3399    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
3400    rt->set_isarray(false);
3401    rt->set_type(GLMessage::DataType::BOOL);
3402    rt->add_boolvalue(retValue);
3403
3404    void *pointerArgs[] = {
3405    };
3406
3407    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3408                              threadStartTime, threadEndTime,
3409                              &glmsg, pointerArgs);
3410    glContext->traceGLMessage(&glmsg);
3411
3412    return retValue;
3413}
3414
3415GLboolean GLTrace_glIsTexture(GLuint texture) {
3416    GLMessage glmsg;
3417    GLTraceContext *glContext = getGLTraceContext();
3418
3419    glmsg.set_function(GLMessage::glIsTexture);
3420
3421    // copy argument texture
3422    GLMessage_DataType *arg_texture = glmsg.add_args();
3423    arg_texture->set_isarray(false);
3424    arg_texture->set_type(GLMessage::DataType::INT);
3425    arg_texture->add_intvalue(texture);
3426
3427    // call function
3428    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3429    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3430    GLboolean retValue = glContext->hooks->gl.glIsTexture(texture);
3431    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3432    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3433
3434    // set return value
3435    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
3436    rt->set_isarray(false);
3437    rt->set_type(GLMessage::DataType::BOOL);
3438    rt->add_boolvalue(retValue);
3439
3440    void *pointerArgs[] = {
3441    };
3442
3443    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3444                              threadStartTime, threadEndTime,
3445                              &glmsg, pointerArgs);
3446    glContext->traceGLMessage(&glmsg);
3447
3448    return retValue;
3449}
3450
3451void GLTrace_glLineWidth(GLfloat width) {
3452    GLMessage glmsg;
3453    GLTraceContext *glContext = getGLTraceContext();
3454
3455    glmsg.set_function(GLMessage::glLineWidth);
3456
3457    // copy argument width
3458    GLMessage_DataType *arg_width = glmsg.add_args();
3459    arg_width->set_isarray(false);
3460    arg_width->set_type(GLMessage::DataType::FLOAT);
3461    arg_width->add_floatvalue(width);
3462
3463    // call function
3464    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3465    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3466    glContext->hooks->gl.glLineWidth(width);
3467    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3468    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3469
3470    void *pointerArgs[] = {
3471    };
3472
3473    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3474                              threadStartTime, threadEndTime,
3475                              &glmsg, pointerArgs);
3476    glContext->traceGLMessage(&glmsg);
3477}
3478
3479void GLTrace_glLinkProgram(GLuint program) {
3480    GLMessage glmsg;
3481    GLTraceContext *glContext = getGLTraceContext();
3482
3483    glmsg.set_function(GLMessage::glLinkProgram);
3484
3485    // copy argument program
3486    GLMessage_DataType *arg_program = glmsg.add_args();
3487    arg_program->set_isarray(false);
3488    arg_program->set_type(GLMessage::DataType::INT);
3489    arg_program->add_intvalue(program);
3490
3491    // call function
3492    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3493    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3494    glContext->hooks->gl.glLinkProgram(program);
3495    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3496    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3497
3498    void *pointerArgs[] = {
3499    };
3500
3501    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3502                              threadStartTime, threadEndTime,
3503                              &glmsg, pointerArgs);
3504    glContext->traceGLMessage(&glmsg);
3505}
3506
3507void GLTrace_glPixelStorei(GLenum pname, GLint param) {
3508    GLMessage glmsg;
3509    GLTraceContext *glContext = getGLTraceContext();
3510
3511    glmsg.set_function(GLMessage::glPixelStorei);
3512
3513    // copy argument pname
3514    GLMessage_DataType *arg_pname = glmsg.add_args();
3515    arg_pname->set_isarray(false);
3516    arg_pname->set_type(GLMessage::DataType::ENUM);
3517    arg_pname->add_intvalue((int)pname);
3518
3519    // copy argument param
3520    GLMessage_DataType *arg_param = glmsg.add_args();
3521    arg_param->set_isarray(false);
3522    arg_param->set_type(GLMessage::DataType::INT);
3523    arg_param->add_intvalue(param);
3524
3525    // call function
3526    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3527    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3528    glContext->hooks->gl.glPixelStorei(pname, param);
3529    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3530    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3531
3532    void *pointerArgs[] = {
3533    };
3534
3535    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3536                              threadStartTime, threadEndTime,
3537                              &glmsg, pointerArgs);
3538    glContext->traceGLMessage(&glmsg);
3539}
3540
3541void GLTrace_glPolygonOffset(GLfloat factor, GLfloat units) {
3542    GLMessage glmsg;
3543    GLTraceContext *glContext = getGLTraceContext();
3544
3545    glmsg.set_function(GLMessage::glPolygonOffset);
3546
3547    // copy argument factor
3548    GLMessage_DataType *arg_factor = glmsg.add_args();
3549    arg_factor->set_isarray(false);
3550    arg_factor->set_type(GLMessage::DataType::FLOAT);
3551    arg_factor->add_floatvalue(factor);
3552
3553    // copy argument units
3554    GLMessage_DataType *arg_units = glmsg.add_args();
3555    arg_units->set_isarray(false);
3556    arg_units->set_type(GLMessage::DataType::FLOAT);
3557    arg_units->add_floatvalue(units);
3558
3559    // call function
3560    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3561    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3562    glContext->hooks->gl.glPolygonOffset(factor, units);
3563    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3564    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3565
3566    void *pointerArgs[] = {
3567    };
3568
3569    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3570                              threadStartTime, threadEndTime,
3571                              &glmsg, pointerArgs);
3572    glContext->traceGLMessage(&glmsg);
3573}
3574
3575void GLTrace_glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels) {
3576    GLMessage glmsg;
3577    GLTraceContext *glContext = getGLTraceContext();
3578
3579    glmsg.set_function(GLMessage::glReadPixels);
3580
3581    // copy argument x
3582    GLMessage_DataType *arg_x = glmsg.add_args();
3583    arg_x->set_isarray(false);
3584    arg_x->set_type(GLMessage::DataType::INT);
3585    arg_x->add_intvalue(x);
3586
3587    // copy argument y
3588    GLMessage_DataType *arg_y = glmsg.add_args();
3589    arg_y->set_isarray(false);
3590    arg_y->set_type(GLMessage::DataType::INT);
3591    arg_y->add_intvalue(y);
3592
3593    // copy argument width
3594    GLMessage_DataType *arg_width = glmsg.add_args();
3595    arg_width->set_isarray(false);
3596    arg_width->set_type(GLMessage::DataType::INT);
3597    arg_width->add_intvalue(width);
3598
3599    // copy argument height
3600    GLMessage_DataType *arg_height = glmsg.add_args();
3601    arg_height->set_isarray(false);
3602    arg_height->set_type(GLMessage::DataType::INT);
3603    arg_height->add_intvalue(height);
3604
3605    // copy argument format
3606    GLMessage_DataType *arg_format = glmsg.add_args();
3607    arg_format->set_isarray(false);
3608    arg_format->set_type(GLMessage::DataType::ENUM);
3609    arg_format->add_intvalue((int)format);
3610
3611    // copy argument type
3612    GLMessage_DataType *arg_type = glmsg.add_args();
3613    arg_type->set_isarray(false);
3614    arg_type->set_type(GLMessage::DataType::ENUM);
3615    arg_type->add_intvalue((int)type);
3616
3617    // copy argument pixels
3618    GLMessage_DataType *arg_pixels = glmsg.add_args();
3619    arg_pixels->set_isarray(false);
3620    arg_pixels->set_type(GLMessage::DataType::INT64);
3621    arg_pixels->add_int64value((uintptr_t)pixels);
3622
3623    // call function
3624    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3625    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3626    glContext->hooks->gl.glReadPixels(x, y, width, height, format, type, pixels);
3627    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3628    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3629
3630    void *pointerArgs[] = {
3631        (void *) pixels,
3632    };
3633
3634    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3635                              threadStartTime, threadEndTime,
3636                              &glmsg, pointerArgs);
3637    glContext->traceGLMessage(&glmsg);
3638}
3639
3640void GLTrace_glReleaseShaderCompiler(void) {
3641    GLMessage glmsg;
3642    GLTraceContext *glContext = getGLTraceContext();
3643
3644    glmsg.set_function(GLMessage::glReleaseShaderCompiler);
3645
3646    // call function
3647    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3648    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3649    glContext->hooks->gl.glReleaseShaderCompiler();
3650    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3651    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3652
3653    void *pointerArgs[] = {
3654    };
3655
3656    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3657                              threadStartTime, threadEndTime,
3658                              &glmsg, pointerArgs);
3659    glContext->traceGLMessage(&glmsg);
3660}
3661
3662void GLTrace_glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) {
3663    GLMessage glmsg;
3664    GLTraceContext *glContext = getGLTraceContext();
3665
3666    glmsg.set_function(GLMessage::glRenderbufferStorage);
3667
3668    // copy argument target
3669    GLMessage_DataType *arg_target = glmsg.add_args();
3670    arg_target->set_isarray(false);
3671    arg_target->set_type(GLMessage::DataType::ENUM);
3672    arg_target->add_intvalue((int)target);
3673
3674    // copy argument internalformat
3675    GLMessage_DataType *arg_internalformat = glmsg.add_args();
3676    arg_internalformat->set_isarray(false);
3677    arg_internalformat->set_type(GLMessage::DataType::ENUM);
3678    arg_internalformat->add_intvalue((int)internalformat);
3679
3680    // copy argument width
3681    GLMessage_DataType *arg_width = glmsg.add_args();
3682    arg_width->set_isarray(false);
3683    arg_width->set_type(GLMessage::DataType::INT);
3684    arg_width->add_intvalue(width);
3685
3686    // copy argument height
3687    GLMessage_DataType *arg_height = glmsg.add_args();
3688    arg_height->set_isarray(false);
3689    arg_height->set_type(GLMessage::DataType::INT);
3690    arg_height->add_intvalue(height);
3691
3692    // call function
3693    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3694    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3695    glContext->hooks->gl.glRenderbufferStorage(target, internalformat, width, height);
3696    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3697    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3698
3699    void *pointerArgs[] = {
3700    };
3701
3702    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3703                              threadStartTime, threadEndTime,
3704                              &glmsg, pointerArgs);
3705    glContext->traceGLMessage(&glmsg);
3706}
3707
3708void GLTrace_glSampleCoverage(GLfloat value, GLboolean invert) {
3709    GLMessage glmsg;
3710    GLTraceContext *glContext = getGLTraceContext();
3711
3712    glmsg.set_function(GLMessage::glSampleCoverage);
3713
3714    // copy argument value
3715    GLMessage_DataType *arg_value = glmsg.add_args();
3716    arg_value->set_isarray(false);
3717    arg_value->set_type(GLMessage::DataType::FLOAT);
3718    arg_value->add_floatvalue(value);
3719
3720    // copy argument invert
3721    GLMessage_DataType *arg_invert = glmsg.add_args();
3722    arg_invert->set_isarray(false);
3723    arg_invert->set_type(GLMessage::DataType::BOOL);
3724    arg_invert->add_boolvalue(invert);
3725
3726    // call function
3727    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3728    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3729    glContext->hooks->gl.glSampleCoverage(value, invert);
3730    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3731    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3732
3733    void *pointerArgs[] = {
3734    };
3735
3736    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3737                              threadStartTime, threadEndTime,
3738                              &glmsg, pointerArgs);
3739    glContext->traceGLMessage(&glmsg);
3740}
3741
3742void GLTrace_glScissor(GLint x, GLint y, GLsizei width, GLsizei height) {
3743    GLMessage glmsg;
3744    GLTraceContext *glContext = getGLTraceContext();
3745
3746    glmsg.set_function(GLMessage::glScissor);
3747
3748    // copy argument x
3749    GLMessage_DataType *arg_x = glmsg.add_args();
3750    arg_x->set_isarray(false);
3751    arg_x->set_type(GLMessage::DataType::INT);
3752    arg_x->add_intvalue(x);
3753
3754    // copy argument y
3755    GLMessage_DataType *arg_y = glmsg.add_args();
3756    arg_y->set_isarray(false);
3757    arg_y->set_type(GLMessage::DataType::INT);
3758    arg_y->add_intvalue(y);
3759
3760    // copy argument width
3761    GLMessage_DataType *arg_width = glmsg.add_args();
3762    arg_width->set_isarray(false);
3763    arg_width->set_type(GLMessage::DataType::INT);
3764    arg_width->add_intvalue(width);
3765
3766    // copy argument height
3767    GLMessage_DataType *arg_height = glmsg.add_args();
3768    arg_height->set_isarray(false);
3769    arg_height->set_type(GLMessage::DataType::INT);
3770    arg_height->add_intvalue(height);
3771
3772    // call function
3773    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3774    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3775    glContext->hooks->gl.glScissor(x, y, width, height);
3776    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3777    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3778
3779    void *pointerArgs[] = {
3780    };
3781
3782    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3783                              threadStartTime, threadEndTime,
3784                              &glmsg, pointerArgs);
3785    glContext->traceGLMessage(&glmsg);
3786}
3787
3788void GLTrace_glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length) {
3789    GLMessage glmsg;
3790    GLTraceContext *glContext = getGLTraceContext();
3791
3792    glmsg.set_function(GLMessage::glShaderBinary);
3793
3794    // copy argument n
3795    GLMessage_DataType *arg_n = glmsg.add_args();
3796    arg_n->set_isarray(false);
3797    arg_n->set_type(GLMessage::DataType::INT);
3798    arg_n->add_intvalue(n);
3799
3800    // copy argument shaders
3801    GLMessage_DataType *arg_shaders = glmsg.add_args();
3802    arg_shaders->set_isarray(false);
3803    arg_shaders->set_type(GLMessage::DataType::INT64);
3804    arg_shaders->add_int64value((uintptr_t)shaders);
3805
3806    // copy argument binaryformat
3807    GLMessage_DataType *arg_binaryformat = glmsg.add_args();
3808    arg_binaryformat->set_isarray(false);
3809    arg_binaryformat->set_type(GLMessage::DataType::ENUM);
3810    arg_binaryformat->add_intvalue((int)binaryformat);
3811
3812    // copy argument binary
3813    GLMessage_DataType *arg_binary = glmsg.add_args();
3814    arg_binary->set_isarray(false);
3815    arg_binary->set_type(GLMessage::DataType::INT64);
3816    arg_binary->add_int64value((uintptr_t)binary);
3817
3818    // copy argument length
3819    GLMessage_DataType *arg_length = glmsg.add_args();
3820    arg_length->set_isarray(false);
3821    arg_length->set_type(GLMessage::DataType::INT);
3822    arg_length->add_intvalue(length);
3823
3824    // call function
3825    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3826    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3827    glContext->hooks->gl.glShaderBinary(n, shaders, binaryformat, binary, length);
3828    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3829    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3830
3831    void *pointerArgs[] = {
3832        (void *) shaders,
3833        (void *) binary,
3834    };
3835
3836    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3837                              threadStartTime, threadEndTime,
3838                              &glmsg, pointerArgs);
3839    glContext->traceGLMessage(&glmsg);
3840}
3841
3842void GLTrace_glShaderSource(GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length) {
3843    GLMessage glmsg;
3844    GLTraceContext *glContext = getGLTraceContext();
3845
3846    glmsg.set_function(GLMessage::glShaderSource);
3847
3848    // copy argument shader
3849    GLMessage_DataType *arg_shader = glmsg.add_args();
3850    arg_shader->set_isarray(false);
3851    arg_shader->set_type(GLMessage::DataType::INT);
3852    arg_shader->add_intvalue(shader);
3853
3854    // copy argument count
3855    GLMessage_DataType *arg_count = glmsg.add_args();
3856    arg_count->set_isarray(false);
3857    arg_count->set_type(GLMessage::DataType::INT);
3858    arg_count->add_intvalue(count);
3859
3860    // copy argument string
3861    GLMessage_DataType *arg_string = glmsg.add_args();
3862    arg_string->set_isarray(false);
3863    arg_string->set_type(GLMessage::DataType::INT64);
3864    arg_string->add_int64value((uintptr_t)string);
3865
3866    // copy argument length
3867    GLMessage_DataType *arg_length = glmsg.add_args();
3868    arg_length->set_isarray(false);
3869    arg_length->set_type(GLMessage::DataType::INT64);
3870    arg_length->add_int64value((uintptr_t)length);
3871
3872    // call function
3873    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3874    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3875    glContext->hooks->gl.glShaderSource(shader, count, string, length);
3876    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3877    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3878
3879    void *pointerArgs[] = {
3880        (void *) string,
3881        (void *) length,
3882    };
3883
3884    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3885                              threadStartTime, threadEndTime,
3886                              &glmsg, pointerArgs);
3887    glContext->traceGLMessage(&glmsg);
3888}
3889
3890void GLTrace_glStencilFunc(GLenum func, GLint ref, GLuint mask) {
3891    GLMessage glmsg;
3892    GLTraceContext *glContext = getGLTraceContext();
3893
3894    glmsg.set_function(GLMessage::glStencilFunc);
3895
3896    // copy argument func
3897    GLMessage_DataType *arg_func = glmsg.add_args();
3898    arg_func->set_isarray(false);
3899    arg_func->set_type(GLMessage::DataType::ENUM);
3900    arg_func->add_intvalue((int)func);
3901
3902    // copy argument ref
3903    GLMessage_DataType *arg_ref = glmsg.add_args();
3904    arg_ref->set_isarray(false);
3905    arg_ref->set_type(GLMessage::DataType::INT);
3906    arg_ref->add_intvalue(ref);
3907
3908    // copy argument mask
3909    GLMessage_DataType *arg_mask = glmsg.add_args();
3910    arg_mask->set_isarray(false);
3911    arg_mask->set_type(GLMessage::DataType::INT);
3912    arg_mask->add_intvalue(mask);
3913
3914    // call function
3915    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3916    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3917    glContext->hooks->gl.glStencilFunc(func, ref, mask);
3918    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3919    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3920
3921    void *pointerArgs[] = {
3922    };
3923
3924    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3925                              threadStartTime, threadEndTime,
3926                              &glmsg, pointerArgs);
3927    glContext->traceGLMessage(&glmsg);
3928}
3929
3930void GLTrace_glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) {
3931    GLMessage glmsg;
3932    GLTraceContext *glContext = getGLTraceContext();
3933
3934    glmsg.set_function(GLMessage::glStencilFuncSeparate);
3935
3936    // copy argument face
3937    GLMessage_DataType *arg_face = glmsg.add_args();
3938    arg_face->set_isarray(false);
3939    arg_face->set_type(GLMessage::DataType::ENUM);
3940    arg_face->add_intvalue((int)face);
3941
3942    // copy argument func
3943    GLMessage_DataType *arg_func = glmsg.add_args();
3944    arg_func->set_isarray(false);
3945    arg_func->set_type(GLMessage::DataType::ENUM);
3946    arg_func->add_intvalue((int)func);
3947
3948    // copy argument ref
3949    GLMessage_DataType *arg_ref = glmsg.add_args();
3950    arg_ref->set_isarray(false);
3951    arg_ref->set_type(GLMessage::DataType::INT);
3952    arg_ref->add_intvalue(ref);
3953
3954    // copy argument mask
3955    GLMessage_DataType *arg_mask = glmsg.add_args();
3956    arg_mask->set_isarray(false);
3957    arg_mask->set_type(GLMessage::DataType::INT);
3958    arg_mask->add_intvalue(mask);
3959
3960    // call function
3961    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3962    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3963    glContext->hooks->gl.glStencilFuncSeparate(face, func, ref, mask);
3964    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3965    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3966
3967    void *pointerArgs[] = {
3968    };
3969
3970    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3971                              threadStartTime, threadEndTime,
3972                              &glmsg, pointerArgs);
3973    glContext->traceGLMessage(&glmsg);
3974}
3975
3976void GLTrace_glStencilMask(GLuint mask) {
3977    GLMessage glmsg;
3978    GLTraceContext *glContext = getGLTraceContext();
3979
3980    glmsg.set_function(GLMessage::glStencilMask);
3981
3982    // copy argument mask
3983    GLMessage_DataType *arg_mask = glmsg.add_args();
3984    arg_mask->set_isarray(false);
3985    arg_mask->set_type(GLMessage::DataType::INT);
3986    arg_mask->add_intvalue(mask);
3987
3988    // call function
3989    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
3990    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
3991    glContext->hooks->gl.glStencilMask(mask);
3992    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
3993    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
3994
3995    void *pointerArgs[] = {
3996    };
3997
3998    fixupGLMessage(glContext, wallStartTime, wallEndTime,
3999                              threadStartTime, threadEndTime,
4000                              &glmsg, pointerArgs);
4001    glContext->traceGLMessage(&glmsg);
4002}
4003
4004void GLTrace_glStencilMaskSeparate(GLenum face, GLuint mask) {
4005    GLMessage glmsg;
4006    GLTraceContext *glContext = getGLTraceContext();
4007
4008    glmsg.set_function(GLMessage::glStencilMaskSeparate);
4009
4010    // copy argument face
4011    GLMessage_DataType *arg_face = glmsg.add_args();
4012    arg_face->set_isarray(false);
4013    arg_face->set_type(GLMessage::DataType::ENUM);
4014    arg_face->add_intvalue((int)face);
4015
4016    // copy argument mask
4017    GLMessage_DataType *arg_mask = glmsg.add_args();
4018    arg_mask->set_isarray(false);
4019    arg_mask->set_type(GLMessage::DataType::INT);
4020    arg_mask->add_intvalue(mask);
4021
4022    // call function
4023    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4024    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4025    glContext->hooks->gl.glStencilMaskSeparate(face, mask);
4026    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4027    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4028
4029    void *pointerArgs[] = {
4030    };
4031
4032    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4033                              threadStartTime, threadEndTime,
4034                              &glmsg, pointerArgs);
4035    glContext->traceGLMessage(&glmsg);
4036}
4037
4038void GLTrace_glStencilOp(GLenum fail, GLenum zfail, GLenum zpass) {
4039    GLMessage glmsg;
4040    GLTraceContext *glContext = getGLTraceContext();
4041
4042    glmsg.set_function(GLMessage::glStencilOp);
4043
4044    // copy argument fail
4045    GLMessage_DataType *arg_fail = glmsg.add_args();
4046    arg_fail->set_isarray(false);
4047    arg_fail->set_type(GLMessage::DataType::ENUM);
4048    arg_fail->add_intvalue((int)fail);
4049
4050    // copy argument zfail
4051    GLMessage_DataType *arg_zfail = glmsg.add_args();
4052    arg_zfail->set_isarray(false);
4053    arg_zfail->set_type(GLMessage::DataType::ENUM);
4054    arg_zfail->add_intvalue((int)zfail);
4055
4056    // copy argument zpass
4057    GLMessage_DataType *arg_zpass = glmsg.add_args();
4058    arg_zpass->set_isarray(false);
4059    arg_zpass->set_type(GLMessage::DataType::ENUM);
4060    arg_zpass->add_intvalue((int)zpass);
4061
4062    // call function
4063    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4064    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4065    glContext->hooks->gl.glStencilOp(fail, zfail, zpass);
4066    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4067    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4068
4069    void *pointerArgs[] = {
4070    };
4071
4072    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4073                              threadStartTime, threadEndTime,
4074                              &glmsg, pointerArgs);
4075    glContext->traceGLMessage(&glmsg);
4076}
4077
4078void GLTrace_glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass) {
4079    GLMessage glmsg;
4080    GLTraceContext *glContext = getGLTraceContext();
4081
4082    glmsg.set_function(GLMessage::glStencilOpSeparate);
4083
4084    // copy argument face
4085    GLMessage_DataType *arg_face = glmsg.add_args();
4086    arg_face->set_isarray(false);
4087    arg_face->set_type(GLMessage::DataType::ENUM);
4088    arg_face->add_intvalue((int)face);
4089
4090    // copy argument fail
4091    GLMessage_DataType *arg_fail = glmsg.add_args();
4092    arg_fail->set_isarray(false);
4093    arg_fail->set_type(GLMessage::DataType::ENUM);
4094    arg_fail->add_intvalue((int)fail);
4095
4096    // copy argument zfail
4097    GLMessage_DataType *arg_zfail = glmsg.add_args();
4098    arg_zfail->set_isarray(false);
4099    arg_zfail->set_type(GLMessage::DataType::ENUM);
4100    arg_zfail->add_intvalue((int)zfail);
4101
4102    // copy argument zpass
4103    GLMessage_DataType *arg_zpass = glmsg.add_args();
4104    arg_zpass->set_isarray(false);
4105    arg_zpass->set_type(GLMessage::DataType::ENUM);
4106    arg_zpass->add_intvalue((int)zpass);
4107
4108    // call function
4109    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4110    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4111    glContext->hooks->gl.glStencilOpSeparate(face, fail, zfail, zpass);
4112    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4113    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4114
4115    void *pointerArgs[] = {
4116    };
4117
4118    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4119                              threadStartTime, threadEndTime,
4120                              &glmsg, pointerArgs);
4121    glContext->traceGLMessage(&glmsg);
4122}
4123
4124void GLTrace_glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels) {
4125    GLMessage glmsg;
4126    GLTraceContext *glContext = getGLTraceContext();
4127
4128    glmsg.set_function(GLMessage::glTexImage2D);
4129
4130    // copy argument target
4131    GLMessage_DataType *arg_target = glmsg.add_args();
4132    arg_target->set_isarray(false);
4133    arg_target->set_type(GLMessage::DataType::ENUM);
4134    arg_target->add_intvalue((int)target);
4135
4136    // copy argument level
4137    GLMessage_DataType *arg_level = glmsg.add_args();
4138    arg_level->set_isarray(false);
4139    arg_level->set_type(GLMessage::DataType::INT);
4140    arg_level->add_intvalue(level);
4141
4142    // copy argument internalformat
4143    GLMessage_DataType *arg_internalformat = glmsg.add_args();
4144    arg_internalformat->set_isarray(false);
4145    arg_internalformat->set_type(GLMessage::DataType::INT);
4146    arg_internalformat->add_intvalue(internalformat);
4147
4148    // copy argument width
4149    GLMessage_DataType *arg_width = glmsg.add_args();
4150    arg_width->set_isarray(false);
4151    arg_width->set_type(GLMessage::DataType::INT);
4152    arg_width->add_intvalue(width);
4153
4154    // copy argument height
4155    GLMessage_DataType *arg_height = glmsg.add_args();
4156    arg_height->set_isarray(false);
4157    arg_height->set_type(GLMessage::DataType::INT);
4158    arg_height->add_intvalue(height);
4159
4160    // copy argument border
4161    GLMessage_DataType *arg_border = glmsg.add_args();
4162    arg_border->set_isarray(false);
4163    arg_border->set_type(GLMessage::DataType::INT);
4164    arg_border->add_intvalue(border);
4165
4166    // copy argument format
4167    GLMessage_DataType *arg_format = glmsg.add_args();
4168    arg_format->set_isarray(false);
4169    arg_format->set_type(GLMessage::DataType::ENUM);
4170    arg_format->add_intvalue((int)format);
4171
4172    // copy argument type
4173    GLMessage_DataType *arg_type = glmsg.add_args();
4174    arg_type->set_isarray(false);
4175    arg_type->set_type(GLMessage::DataType::ENUM);
4176    arg_type->add_intvalue((int)type);
4177
4178    // copy argument pixels
4179    GLMessage_DataType *arg_pixels = glmsg.add_args();
4180    arg_pixels->set_isarray(false);
4181    arg_pixels->set_type(GLMessage::DataType::INT64);
4182    arg_pixels->add_int64value((uintptr_t)pixels);
4183
4184    // call function
4185    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4186    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4187    glContext->hooks->gl.glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
4188    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4189    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4190
4191    void *pointerArgs[] = {
4192        (void *) pixels,
4193    };
4194
4195    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4196                              threadStartTime, threadEndTime,
4197                              &glmsg, pointerArgs);
4198    glContext->traceGLMessage(&glmsg);
4199}
4200
4201void GLTrace_glTexParameterf(GLenum target, GLenum pname, GLfloat param) {
4202    GLMessage glmsg;
4203    GLTraceContext *glContext = getGLTraceContext();
4204
4205    glmsg.set_function(GLMessage::glTexParameterf);
4206
4207    // copy argument target
4208    GLMessage_DataType *arg_target = glmsg.add_args();
4209    arg_target->set_isarray(false);
4210    arg_target->set_type(GLMessage::DataType::ENUM);
4211    arg_target->add_intvalue((int)target);
4212
4213    // copy argument pname
4214    GLMessage_DataType *arg_pname = glmsg.add_args();
4215    arg_pname->set_isarray(false);
4216    arg_pname->set_type(GLMessage::DataType::ENUM);
4217    arg_pname->add_intvalue((int)pname);
4218
4219    // copy argument param
4220    GLMessage_DataType *arg_param = glmsg.add_args();
4221    arg_param->set_isarray(false);
4222    arg_param->set_type(GLMessage::DataType::FLOAT);
4223    arg_param->add_floatvalue(param);
4224
4225    // call function
4226    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4227    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4228    glContext->hooks->gl.glTexParameterf(target, pname, param);
4229    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4230    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4231
4232    void *pointerArgs[] = {
4233    };
4234
4235    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4236                              threadStartTime, threadEndTime,
4237                              &glmsg, pointerArgs);
4238    glContext->traceGLMessage(&glmsg);
4239}
4240
4241void GLTrace_glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params) {
4242    GLMessage glmsg;
4243    GLTraceContext *glContext = getGLTraceContext();
4244
4245    glmsg.set_function(GLMessage::glTexParameterfv);
4246
4247    // copy argument target
4248    GLMessage_DataType *arg_target = glmsg.add_args();
4249    arg_target->set_isarray(false);
4250    arg_target->set_type(GLMessage::DataType::ENUM);
4251    arg_target->add_intvalue((int)target);
4252
4253    // copy argument pname
4254    GLMessage_DataType *arg_pname = glmsg.add_args();
4255    arg_pname->set_isarray(false);
4256    arg_pname->set_type(GLMessage::DataType::ENUM);
4257    arg_pname->add_intvalue((int)pname);
4258
4259    // copy argument params
4260    GLMessage_DataType *arg_params = glmsg.add_args();
4261    arg_params->set_isarray(false);
4262    arg_params->set_type(GLMessage::DataType::INT64);
4263    arg_params->add_int64value((uintptr_t)params);
4264
4265    // call function
4266    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4267    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4268    glContext->hooks->gl.glTexParameterfv(target, pname, params);
4269    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4270    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4271
4272    void *pointerArgs[] = {
4273        (void *) params,
4274    };
4275
4276    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4277                              threadStartTime, threadEndTime,
4278                              &glmsg, pointerArgs);
4279    glContext->traceGLMessage(&glmsg);
4280}
4281
4282void GLTrace_glTexParameteri(GLenum target, GLenum pname, GLint param) {
4283    GLMessage glmsg;
4284    GLTraceContext *glContext = getGLTraceContext();
4285
4286    glmsg.set_function(GLMessage::glTexParameteri);
4287
4288    // copy argument target
4289    GLMessage_DataType *arg_target = glmsg.add_args();
4290    arg_target->set_isarray(false);
4291    arg_target->set_type(GLMessage::DataType::ENUM);
4292    arg_target->add_intvalue((int)target);
4293
4294    // copy argument pname
4295    GLMessage_DataType *arg_pname = glmsg.add_args();
4296    arg_pname->set_isarray(false);
4297    arg_pname->set_type(GLMessage::DataType::ENUM);
4298    arg_pname->add_intvalue((int)pname);
4299
4300    // copy argument param
4301    GLMessage_DataType *arg_param = glmsg.add_args();
4302    arg_param->set_isarray(false);
4303    arg_param->set_type(GLMessage::DataType::INT);
4304    arg_param->add_intvalue(param);
4305
4306    // call function
4307    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4308    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4309    glContext->hooks->gl.glTexParameteri(target, pname, param);
4310    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4311    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4312
4313    void *pointerArgs[] = {
4314    };
4315
4316    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4317                              threadStartTime, threadEndTime,
4318                              &glmsg, pointerArgs);
4319    glContext->traceGLMessage(&glmsg);
4320}
4321
4322void GLTrace_glTexParameteriv(GLenum target, GLenum pname, const GLint* params) {
4323    GLMessage glmsg;
4324    GLTraceContext *glContext = getGLTraceContext();
4325
4326    glmsg.set_function(GLMessage::glTexParameteriv);
4327
4328    // copy argument target
4329    GLMessage_DataType *arg_target = glmsg.add_args();
4330    arg_target->set_isarray(false);
4331    arg_target->set_type(GLMessage::DataType::ENUM);
4332    arg_target->add_intvalue((int)target);
4333
4334    // copy argument pname
4335    GLMessage_DataType *arg_pname = glmsg.add_args();
4336    arg_pname->set_isarray(false);
4337    arg_pname->set_type(GLMessage::DataType::ENUM);
4338    arg_pname->add_intvalue((int)pname);
4339
4340    // copy argument params
4341    GLMessage_DataType *arg_params = glmsg.add_args();
4342    arg_params->set_isarray(false);
4343    arg_params->set_type(GLMessage::DataType::INT64);
4344    arg_params->add_int64value((uintptr_t)params);
4345
4346    // call function
4347    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4348    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4349    glContext->hooks->gl.glTexParameteriv(target, pname, params);
4350    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4351    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4352
4353    void *pointerArgs[] = {
4354        (void *) params,
4355    };
4356
4357    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4358                              threadStartTime, threadEndTime,
4359                              &glmsg, pointerArgs);
4360    glContext->traceGLMessage(&glmsg);
4361}
4362
4363void GLTrace_glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels) {
4364    GLMessage glmsg;
4365    GLTraceContext *glContext = getGLTraceContext();
4366
4367    glmsg.set_function(GLMessage::glTexSubImage2D);
4368
4369    // copy argument target
4370    GLMessage_DataType *arg_target = glmsg.add_args();
4371    arg_target->set_isarray(false);
4372    arg_target->set_type(GLMessage::DataType::ENUM);
4373    arg_target->add_intvalue((int)target);
4374
4375    // copy argument level
4376    GLMessage_DataType *arg_level = glmsg.add_args();
4377    arg_level->set_isarray(false);
4378    arg_level->set_type(GLMessage::DataType::INT);
4379    arg_level->add_intvalue(level);
4380
4381    // copy argument xoffset
4382    GLMessage_DataType *arg_xoffset = glmsg.add_args();
4383    arg_xoffset->set_isarray(false);
4384    arg_xoffset->set_type(GLMessage::DataType::INT);
4385    arg_xoffset->add_intvalue(xoffset);
4386
4387    // copy argument yoffset
4388    GLMessage_DataType *arg_yoffset = glmsg.add_args();
4389    arg_yoffset->set_isarray(false);
4390    arg_yoffset->set_type(GLMessage::DataType::INT);
4391    arg_yoffset->add_intvalue(yoffset);
4392
4393    // copy argument width
4394    GLMessage_DataType *arg_width = glmsg.add_args();
4395    arg_width->set_isarray(false);
4396    arg_width->set_type(GLMessage::DataType::INT);
4397    arg_width->add_intvalue(width);
4398
4399    // copy argument height
4400    GLMessage_DataType *arg_height = glmsg.add_args();
4401    arg_height->set_isarray(false);
4402    arg_height->set_type(GLMessage::DataType::INT);
4403    arg_height->add_intvalue(height);
4404
4405    // copy argument format
4406    GLMessage_DataType *arg_format = glmsg.add_args();
4407    arg_format->set_isarray(false);
4408    arg_format->set_type(GLMessage::DataType::ENUM);
4409    arg_format->add_intvalue((int)format);
4410
4411    // copy argument type
4412    GLMessage_DataType *arg_type = glmsg.add_args();
4413    arg_type->set_isarray(false);
4414    arg_type->set_type(GLMessage::DataType::ENUM);
4415    arg_type->add_intvalue((int)type);
4416
4417    // copy argument pixels
4418    GLMessage_DataType *arg_pixels = glmsg.add_args();
4419    arg_pixels->set_isarray(false);
4420    arg_pixels->set_type(GLMessage::DataType::INT64);
4421    arg_pixels->add_int64value((uintptr_t)pixels);
4422
4423    // call function
4424    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4425    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4426    glContext->hooks->gl.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
4427    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4428    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4429
4430    void *pointerArgs[] = {
4431        (void *) pixels,
4432    };
4433
4434    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4435                              threadStartTime, threadEndTime,
4436                              &glmsg, pointerArgs);
4437    glContext->traceGLMessage(&glmsg);
4438}
4439
4440void GLTrace_glUniform1f(GLint location, GLfloat x) {
4441    GLMessage glmsg;
4442    GLTraceContext *glContext = getGLTraceContext();
4443
4444    glmsg.set_function(GLMessage::glUniform1f);
4445
4446    // copy argument location
4447    GLMessage_DataType *arg_location = glmsg.add_args();
4448    arg_location->set_isarray(false);
4449    arg_location->set_type(GLMessage::DataType::INT);
4450    arg_location->add_intvalue(location);
4451
4452    // copy argument x
4453    GLMessage_DataType *arg_x = glmsg.add_args();
4454    arg_x->set_isarray(false);
4455    arg_x->set_type(GLMessage::DataType::FLOAT);
4456    arg_x->add_floatvalue(x);
4457
4458    // call function
4459    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4460    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4461    glContext->hooks->gl.glUniform1f(location, x);
4462    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4463    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4464
4465    void *pointerArgs[] = {
4466    };
4467
4468    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4469                              threadStartTime, threadEndTime,
4470                              &glmsg, pointerArgs);
4471    glContext->traceGLMessage(&glmsg);
4472}
4473
4474void GLTrace_glUniform1fv(GLint location, GLsizei count, const GLfloat* v) {
4475    GLMessage glmsg;
4476    GLTraceContext *glContext = getGLTraceContext();
4477
4478    glmsg.set_function(GLMessage::glUniform1fv);
4479
4480    // copy argument location
4481    GLMessage_DataType *arg_location = glmsg.add_args();
4482    arg_location->set_isarray(false);
4483    arg_location->set_type(GLMessage::DataType::INT);
4484    arg_location->add_intvalue(location);
4485
4486    // copy argument count
4487    GLMessage_DataType *arg_count = glmsg.add_args();
4488    arg_count->set_isarray(false);
4489    arg_count->set_type(GLMessage::DataType::INT);
4490    arg_count->add_intvalue(count);
4491
4492    // copy argument v
4493    GLMessage_DataType *arg_v = glmsg.add_args();
4494    arg_v->set_isarray(false);
4495    arg_v->set_type(GLMessage::DataType::INT64);
4496    arg_v->add_int64value((uintptr_t)v);
4497
4498    // call function
4499    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4500    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4501    glContext->hooks->gl.glUniform1fv(location, count, v);
4502    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4503    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4504
4505    void *pointerArgs[] = {
4506        (void *) v,
4507    };
4508
4509    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4510                              threadStartTime, threadEndTime,
4511                              &glmsg, pointerArgs);
4512    glContext->traceGLMessage(&glmsg);
4513}
4514
4515void GLTrace_glUniform1i(GLint location, GLint x) {
4516    GLMessage glmsg;
4517    GLTraceContext *glContext = getGLTraceContext();
4518
4519    glmsg.set_function(GLMessage::glUniform1i);
4520
4521    // copy argument location
4522    GLMessage_DataType *arg_location = glmsg.add_args();
4523    arg_location->set_isarray(false);
4524    arg_location->set_type(GLMessage::DataType::INT);
4525    arg_location->add_intvalue(location);
4526
4527    // copy argument x
4528    GLMessage_DataType *arg_x = glmsg.add_args();
4529    arg_x->set_isarray(false);
4530    arg_x->set_type(GLMessage::DataType::INT);
4531    arg_x->add_intvalue(x);
4532
4533    // call function
4534    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4535    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4536    glContext->hooks->gl.glUniform1i(location, x);
4537    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4538    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4539
4540    void *pointerArgs[] = {
4541    };
4542
4543    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4544                              threadStartTime, threadEndTime,
4545                              &glmsg, pointerArgs);
4546    glContext->traceGLMessage(&glmsg);
4547}
4548
4549void GLTrace_glUniform1iv(GLint location, GLsizei count, const GLint* v) {
4550    GLMessage glmsg;
4551    GLTraceContext *glContext = getGLTraceContext();
4552
4553    glmsg.set_function(GLMessage::glUniform1iv);
4554
4555    // copy argument location
4556    GLMessage_DataType *arg_location = glmsg.add_args();
4557    arg_location->set_isarray(false);
4558    arg_location->set_type(GLMessage::DataType::INT);
4559    arg_location->add_intvalue(location);
4560
4561    // copy argument count
4562    GLMessage_DataType *arg_count = glmsg.add_args();
4563    arg_count->set_isarray(false);
4564    arg_count->set_type(GLMessage::DataType::INT);
4565    arg_count->add_intvalue(count);
4566
4567    // copy argument v
4568    GLMessage_DataType *arg_v = glmsg.add_args();
4569    arg_v->set_isarray(false);
4570    arg_v->set_type(GLMessage::DataType::INT64);
4571    arg_v->add_int64value((uintptr_t)v);
4572
4573    // call function
4574    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4575    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4576    glContext->hooks->gl.glUniform1iv(location, count, v);
4577    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4578    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4579
4580    void *pointerArgs[] = {
4581        (void *) v,
4582    };
4583
4584    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4585                              threadStartTime, threadEndTime,
4586                              &glmsg, pointerArgs);
4587    glContext->traceGLMessage(&glmsg);
4588}
4589
4590void GLTrace_glUniform2f(GLint location, GLfloat x, GLfloat y) {
4591    GLMessage glmsg;
4592    GLTraceContext *glContext = getGLTraceContext();
4593
4594    glmsg.set_function(GLMessage::glUniform2f);
4595
4596    // copy argument location
4597    GLMessage_DataType *arg_location = glmsg.add_args();
4598    arg_location->set_isarray(false);
4599    arg_location->set_type(GLMessage::DataType::INT);
4600    arg_location->add_intvalue(location);
4601
4602    // copy argument x
4603    GLMessage_DataType *arg_x = glmsg.add_args();
4604    arg_x->set_isarray(false);
4605    arg_x->set_type(GLMessage::DataType::FLOAT);
4606    arg_x->add_floatvalue(x);
4607
4608    // copy argument y
4609    GLMessage_DataType *arg_y = glmsg.add_args();
4610    arg_y->set_isarray(false);
4611    arg_y->set_type(GLMessage::DataType::FLOAT);
4612    arg_y->add_floatvalue(y);
4613
4614    // call function
4615    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4616    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4617    glContext->hooks->gl.glUniform2f(location, x, y);
4618    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4619    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4620
4621    void *pointerArgs[] = {
4622    };
4623
4624    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4625                              threadStartTime, threadEndTime,
4626                              &glmsg, pointerArgs);
4627    glContext->traceGLMessage(&glmsg);
4628}
4629
4630void GLTrace_glUniform2fv(GLint location, GLsizei count, const GLfloat* v) {
4631    GLMessage glmsg;
4632    GLTraceContext *glContext = getGLTraceContext();
4633
4634    glmsg.set_function(GLMessage::glUniform2fv);
4635
4636    // copy argument location
4637    GLMessage_DataType *arg_location = glmsg.add_args();
4638    arg_location->set_isarray(false);
4639    arg_location->set_type(GLMessage::DataType::INT);
4640    arg_location->add_intvalue(location);
4641
4642    // copy argument count
4643    GLMessage_DataType *arg_count = glmsg.add_args();
4644    arg_count->set_isarray(false);
4645    arg_count->set_type(GLMessage::DataType::INT);
4646    arg_count->add_intvalue(count);
4647
4648    // copy argument v
4649    GLMessage_DataType *arg_v = glmsg.add_args();
4650    arg_v->set_isarray(false);
4651    arg_v->set_type(GLMessage::DataType::INT64);
4652    arg_v->add_int64value((uintptr_t)v);
4653
4654    // call function
4655    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4656    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4657    glContext->hooks->gl.glUniform2fv(location, count, v);
4658    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4659    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4660
4661    void *pointerArgs[] = {
4662        (void *) v,
4663    };
4664
4665    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4666                              threadStartTime, threadEndTime,
4667                              &glmsg, pointerArgs);
4668    glContext->traceGLMessage(&glmsg);
4669}
4670
4671void GLTrace_glUniform2i(GLint location, GLint x, GLint y) {
4672    GLMessage glmsg;
4673    GLTraceContext *glContext = getGLTraceContext();
4674
4675    glmsg.set_function(GLMessage::glUniform2i);
4676
4677    // copy argument location
4678    GLMessage_DataType *arg_location = glmsg.add_args();
4679    arg_location->set_isarray(false);
4680    arg_location->set_type(GLMessage::DataType::INT);
4681    arg_location->add_intvalue(location);
4682
4683    // copy argument x
4684    GLMessage_DataType *arg_x = glmsg.add_args();
4685    arg_x->set_isarray(false);
4686    arg_x->set_type(GLMessage::DataType::INT);
4687    arg_x->add_intvalue(x);
4688
4689    // copy argument y
4690    GLMessage_DataType *arg_y = glmsg.add_args();
4691    arg_y->set_isarray(false);
4692    arg_y->set_type(GLMessage::DataType::INT);
4693    arg_y->add_intvalue(y);
4694
4695    // call function
4696    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4697    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4698    glContext->hooks->gl.glUniform2i(location, x, y);
4699    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4700    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4701
4702    void *pointerArgs[] = {
4703    };
4704
4705    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4706                              threadStartTime, threadEndTime,
4707                              &glmsg, pointerArgs);
4708    glContext->traceGLMessage(&glmsg);
4709}
4710
4711void GLTrace_glUniform2iv(GLint location, GLsizei count, const GLint* v) {
4712    GLMessage glmsg;
4713    GLTraceContext *glContext = getGLTraceContext();
4714
4715    glmsg.set_function(GLMessage::glUniform2iv);
4716
4717    // copy argument location
4718    GLMessage_DataType *arg_location = glmsg.add_args();
4719    arg_location->set_isarray(false);
4720    arg_location->set_type(GLMessage::DataType::INT);
4721    arg_location->add_intvalue(location);
4722
4723    // copy argument count
4724    GLMessage_DataType *arg_count = glmsg.add_args();
4725    arg_count->set_isarray(false);
4726    arg_count->set_type(GLMessage::DataType::INT);
4727    arg_count->add_intvalue(count);
4728
4729    // copy argument v
4730    GLMessage_DataType *arg_v = glmsg.add_args();
4731    arg_v->set_isarray(false);
4732    arg_v->set_type(GLMessage::DataType::INT64);
4733    arg_v->add_int64value((uintptr_t)v);
4734
4735    // call function
4736    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4737    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4738    glContext->hooks->gl.glUniform2iv(location, count, v);
4739    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4740    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4741
4742    void *pointerArgs[] = {
4743        (void *) v,
4744    };
4745
4746    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4747                              threadStartTime, threadEndTime,
4748                              &glmsg, pointerArgs);
4749    glContext->traceGLMessage(&glmsg);
4750}
4751
4752void GLTrace_glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z) {
4753    GLMessage glmsg;
4754    GLTraceContext *glContext = getGLTraceContext();
4755
4756    glmsg.set_function(GLMessage::glUniform3f);
4757
4758    // copy argument location
4759    GLMessage_DataType *arg_location = glmsg.add_args();
4760    arg_location->set_isarray(false);
4761    arg_location->set_type(GLMessage::DataType::INT);
4762    arg_location->add_intvalue(location);
4763
4764    // copy argument x
4765    GLMessage_DataType *arg_x = glmsg.add_args();
4766    arg_x->set_isarray(false);
4767    arg_x->set_type(GLMessage::DataType::FLOAT);
4768    arg_x->add_floatvalue(x);
4769
4770    // copy argument y
4771    GLMessage_DataType *arg_y = glmsg.add_args();
4772    arg_y->set_isarray(false);
4773    arg_y->set_type(GLMessage::DataType::FLOAT);
4774    arg_y->add_floatvalue(y);
4775
4776    // copy argument z
4777    GLMessage_DataType *arg_z = glmsg.add_args();
4778    arg_z->set_isarray(false);
4779    arg_z->set_type(GLMessage::DataType::FLOAT);
4780    arg_z->add_floatvalue(z);
4781
4782    // call function
4783    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4784    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4785    glContext->hooks->gl.glUniform3f(location, x, y, z);
4786    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4787    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4788
4789    void *pointerArgs[] = {
4790    };
4791
4792    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4793                              threadStartTime, threadEndTime,
4794                              &glmsg, pointerArgs);
4795    glContext->traceGLMessage(&glmsg);
4796}
4797
4798void GLTrace_glUniform3fv(GLint location, GLsizei count, const GLfloat* v) {
4799    GLMessage glmsg;
4800    GLTraceContext *glContext = getGLTraceContext();
4801
4802    glmsg.set_function(GLMessage::glUniform3fv);
4803
4804    // copy argument location
4805    GLMessage_DataType *arg_location = glmsg.add_args();
4806    arg_location->set_isarray(false);
4807    arg_location->set_type(GLMessage::DataType::INT);
4808    arg_location->add_intvalue(location);
4809
4810    // copy argument count
4811    GLMessage_DataType *arg_count = glmsg.add_args();
4812    arg_count->set_isarray(false);
4813    arg_count->set_type(GLMessage::DataType::INT);
4814    arg_count->add_intvalue(count);
4815
4816    // copy argument v
4817    GLMessage_DataType *arg_v = glmsg.add_args();
4818    arg_v->set_isarray(false);
4819    arg_v->set_type(GLMessage::DataType::INT64);
4820    arg_v->add_int64value((uintptr_t)v);
4821
4822    // call function
4823    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4824    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4825    glContext->hooks->gl.glUniform3fv(location, count, v);
4826    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4827    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4828
4829    void *pointerArgs[] = {
4830        (void *) v,
4831    };
4832
4833    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4834                              threadStartTime, threadEndTime,
4835                              &glmsg, pointerArgs);
4836    glContext->traceGLMessage(&glmsg);
4837}
4838
4839void GLTrace_glUniform3i(GLint location, GLint x, GLint y, GLint z) {
4840    GLMessage glmsg;
4841    GLTraceContext *glContext = getGLTraceContext();
4842
4843    glmsg.set_function(GLMessage::glUniform3i);
4844
4845    // copy argument location
4846    GLMessage_DataType *arg_location = glmsg.add_args();
4847    arg_location->set_isarray(false);
4848    arg_location->set_type(GLMessage::DataType::INT);
4849    arg_location->add_intvalue(location);
4850
4851    // copy argument x
4852    GLMessage_DataType *arg_x = glmsg.add_args();
4853    arg_x->set_isarray(false);
4854    arg_x->set_type(GLMessage::DataType::INT);
4855    arg_x->add_intvalue(x);
4856
4857    // copy argument y
4858    GLMessage_DataType *arg_y = glmsg.add_args();
4859    arg_y->set_isarray(false);
4860    arg_y->set_type(GLMessage::DataType::INT);
4861    arg_y->add_intvalue(y);
4862
4863    // copy argument z
4864    GLMessage_DataType *arg_z = glmsg.add_args();
4865    arg_z->set_isarray(false);
4866    arg_z->set_type(GLMessage::DataType::INT);
4867    arg_z->add_intvalue(z);
4868
4869    // call function
4870    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4871    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4872    glContext->hooks->gl.glUniform3i(location, x, y, z);
4873    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4874    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4875
4876    void *pointerArgs[] = {
4877    };
4878
4879    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4880                              threadStartTime, threadEndTime,
4881                              &glmsg, pointerArgs);
4882    glContext->traceGLMessage(&glmsg);
4883}
4884
4885void GLTrace_glUniform3iv(GLint location, GLsizei count, const GLint* v) {
4886    GLMessage glmsg;
4887    GLTraceContext *glContext = getGLTraceContext();
4888
4889    glmsg.set_function(GLMessage::glUniform3iv);
4890
4891    // copy argument location
4892    GLMessage_DataType *arg_location = glmsg.add_args();
4893    arg_location->set_isarray(false);
4894    arg_location->set_type(GLMessage::DataType::INT);
4895    arg_location->add_intvalue(location);
4896
4897    // copy argument count
4898    GLMessage_DataType *arg_count = glmsg.add_args();
4899    arg_count->set_isarray(false);
4900    arg_count->set_type(GLMessage::DataType::INT);
4901    arg_count->add_intvalue(count);
4902
4903    // copy argument v
4904    GLMessage_DataType *arg_v = glmsg.add_args();
4905    arg_v->set_isarray(false);
4906    arg_v->set_type(GLMessage::DataType::INT64);
4907    arg_v->add_int64value((uintptr_t)v);
4908
4909    // call function
4910    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4911    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4912    glContext->hooks->gl.glUniform3iv(location, count, v);
4913    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4914    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4915
4916    void *pointerArgs[] = {
4917        (void *) v,
4918    };
4919
4920    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4921                              threadStartTime, threadEndTime,
4922                              &glmsg, pointerArgs);
4923    glContext->traceGLMessage(&glmsg);
4924}
4925
4926void GLTrace_glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
4927    GLMessage glmsg;
4928    GLTraceContext *glContext = getGLTraceContext();
4929
4930    glmsg.set_function(GLMessage::glUniform4f);
4931
4932    // copy argument location
4933    GLMessage_DataType *arg_location = glmsg.add_args();
4934    arg_location->set_isarray(false);
4935    arg_location->set_type(GLMessage::DataType::INT);
4936    arg_location->add_intvalue(location);
4937
4938    // copy argument x
4939    GLMessage_DataType *arg_x = glmsg.add_args();
4940    arg_x->set_isarray(false);
4941    arg_x->set_type(GLMessage::DataType::FLOAT);
4942    arg_x->add_floatvalue(x);
4943
4944    // copy argument y
4945    GLMessage_DataType *arg_y = glmsg.add_args();
4946    arg_y->set_isarray(false);
4947    arg_y->set_type(GLMessage::DataType::FLOAT);
4948    arg_y->add_floatvalue(y);
4949
4950    // copy argument z
4951    GLMessage_DataType *arg_z = glmsg.add_args();
4952    arg_z->set_isarray(false);
4953    arg_z->set_type(GLMessage::DataType::FLOAT);
4954    arg_z->add_floatvalue(z);
4955
4956    // copy argument w
4957    GLMessage_DataType *arg_w = glmsg.add_args();
4958    arg_w->set_isarray(false);
4959    arg_w->set_type(GLMessage::DataType::FLOAT);
4960    arg_w->add_floatvalue(w);
4961
4962    // call function
4963    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
4964    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
4965    glContext->hooks->gl.glUniform4f(location, x, y, z, w);
4966    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
4967    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
4968
4969    void *pointerArgs[] = {
4970    };
4971
4972    fixupGLMessage(glContext, wallStartTime, wallEndTime,
4973                              threadStartTime, threadEndTime,
4974                              &glmsg, pointerArgs);
4975    glContext->traceGLMessage(&glmsg);
4976}
4977
4978void GLTrace_glUniform4fv(GLint location, GLsizei count, const GLfloat* v) {
4979    GLMessage glmsg;
4980    GLTraceContext *glContext = getGLTraceContext();
4981
4982    glmsg.set_function(GLMessage::glUniform4fv);
4983
4984    // copy argument location
4985    GLMessage_DataType *arg_location = glmsg.add_args();
4986    arg_location->set_isarray(false);
4987    arg_location->set_type(GLMessage::DataType::INT);
4988    arg_location->add_intvalue(location);
4989
4990    // copy argument count
4991    GLMessage_DataType *arg_count = glmsg.add_args();
4992    arg_count->set_isarray(false);
4993    arg_count->set_type(GLMessage::DataType::INT);
4994    arg_count->add_intvalue(count);
4995
4996    // copy argument v
4997    GLMessage_DataType *arg_v = glmsg.add_args();
4998    arg_v->set_isarray(false);
4999    arg_v->set_type(GLMessage::DataType::INT64);
5000    arg_v->add_int64value((uintptr_t)v);
5001
5002    // call function
5003    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5004    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5005    glContext->hooks->gl.glUniform4fv(location, count, v);
5006    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5007    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5008
5009    void *pointerArgs[] = {
5010        (void *) v,
5011    };
5012
5013    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5014                              threadStartTime, threadEndTime,
5015                              &glmsg, pointerArgs);
5016    glContext->traceGLMessage(&glmsg);
5017}
5018
5019void GLTrace_glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w) {
5020    GLMessage glmsg;
5021    GLTraceContext *glContext = getGLTraceContext();
5022
5023    glmsg.set_function(GLMessage::glUniform4i);
5024
5025    // copy argument location
5026    GLMessage_DataType *arg_location = glmsg.add_args();
5027    arg_location->set_isarray(false);
5028    arg_location->set_type(GLMessage::DataType::INT);
5029    arg_location->add_intvalue(location);
5030
5031    // copy argument x
5032    GLMessage_DataType *arg_x = glmsg.add_args();
5033    arg_x->set_isarray(false);
5034    arg_x->set_type(GLMessage::DataType::INT);
5035    arg_x->add_intvalue(x);
5036
5037    // copy argument y
5038    GLMessage_DataType *arg_y = glmsg.add_args();
5039    arg_y->set_isarray(false);
5040    arg_y->set_type(GLMessage::DataType::INT);
5041    arg_y->add_intvalue(y);
5042
5043    // copy argument z
5044    GLMessage_DataType *arg_z = glmsg.add_args();
5045    arg_z->set_isarray(false);
5046    arg_z->set_type(GLMessage::DataType::INT);
5047    arg_z->add_intvalue(z);
5048
5049    // copy argument w
5050    GLMessage_DataType *arg_w = glmsg.add_args();
5051    arg_w->set_isarray(false);
5052    arg_w->set_type(GLMessage::DataType::INT);
5053    arg_w->add_intvalue(w);
5054
5055    // call function
5056    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5057    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5058    glContext->hooks->gl.glUniform4i(location, x, y, z, w);
5059    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5060    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5061
5062    void *pointerArgs[] = {
5063    };
5064
5065    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5066                              threadStartTime, threadEndTime,
5067                              &glmsg, pointerArgs);
5068    glContext->traceGLMessage(&glmsg);
5069}
5070
5071void GLTrace_glUniform4iv(GLint location, GLsizei count, const GLint* v) {
5072    GLMessage glmsg;
5073    GLTraceContext *glContext = getGLTraceContext();
5074
5075    glmsg.set_function(GLMessage::glUniform4iv);
5076
5077    // copy argument location
5078    GLMessage_DataType *arg_location = glmsg.add_args();
5079    arg_location->set_isarray(false);
5080    arg_location->set_type(GLMessage::DataType::INT);
5081    arg_location->add_intvalue(location);
5082
5083    // copy argument count
5084    GLMessage_DataType *arg_count = glmsg.add_args();
5085    arg_count->set_isarray(false);
5086    arg_count->set_type(GLMessage::DataType::INT);
5087    arg_count->add_intvalue(count);
5088
5089    // copy argument v
5090    GLMessage_DataType *arg_v = glmsg.add_args();
5091    arg_v->set_isarray(false);
5092    arg_v->set_type(GLMessage::DataType::INT64);
5093    arg_v->add_int64value((uintptr_t)v);
5094
5095    // call function
5096    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5097    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5098    glContext->hooks->gl.glUniform4iv(location, count, v);
5099    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5100    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5101
5102    void *pointerArgs[] = {
5103        (void *) v,
5104    };
5105
5106    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5107                              threadStartTime, threadEndTime,
5108                              &glmsg, pointerArgs);
5109    glContext->traceGLMessage(&glmsg);
5110}
5111
5112void GLTrace_glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
5113    GLMessage glmsg;
5114    GLTraceContext *glContext = getGLTraceContext();
5115
5116    glmsg.set_function(GLMessage::glUniformMatrix2fv);
5117
5118    // copy argument location
5119    GLMessage_DataType *arg_location = glmsg.add_args();
5120    arg_location->set_isarray(false);
5121    arg_location->set_type(GLMessage::DataType::INT);
5122    arg_location->add_intvalue(location);
5123
5124    // copy argument count
5125    GLMessage_DataType *arg_count = glmsg.add_args();
5126    arg_count->set_isarray(false);
5127    arg_count->set_type(GLMessage::DataType::INT);
5128    arg_count->add_intvalue(count);
5129
5130    // copy argument transpose
5131    GLMessage_DataType *arg_transpose = glmsg.add_args();
5132    arg_transpose->set_isarray(false);
5133    arg_transpose->set_type(GLMessage::DataType::BOOL);
5134    arg_transpose->add_boolvalue(transpose);
5135
5136    // copy argument value
5137    GLMessage_DataType *arg_value = glmsg.add_args();
5138    arg_value->set_isarray(false);
5139    arg_value->set_type(GLMessage::DataType::INT64);
5140    arg_value->add_int64value((uintptr_t)value);
5141
5142    // call function
5143    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5144    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5145    glContext->hooks->gl.glUniformMatrix2fv(location, count, transpose, value);
5146    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5147    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5148
5149    void *pointerArgs[] = {
5150        (void *) value,
5151    };
5152
5153    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5154                              threadStartTime, threadEndTime,
5155                              &glmsg, pointerArgs);
5156    glContext->traceGLMessage(&glmsg);
5157}
5158
5159void GLTrace_glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
5160    GLMessage glmsg;
5161    GLTraceContext *glContext = getGLTraceContext();
5162
5163    glmsg.set_function(GLMessage::glUniformMatrix3fv);
5164
5165    // copy argument location
5166    GLMessage_DataType *arg_location = glmsg.add_args();
5167    arg_location->set_isarray(false);
5168    arg_location->set_type(GLMessage::DataType::INT);
5169    arg_location->add_intvalue(location);
5170
5171    // copy argument count
5172    GLMessage_DataType *arg_count = glmsg.add_args();
5173    arg_count->set_isarray(false);
5174    arg_count->set_type(GLMessage::DataType::INT);
5175    arg_count->add_intvalue(count);
5176
5177    // copy argument transpose
5178    GLMessage_DataType *arg_transpose = glmsg.add_args();
5179    arg_transpose->set_isarray(false);
5180    arg_transpose->set_type(GLMessage::DataType::BOOL);
5181    arg_transpose->add_boolvalue(transpose);
5182
5183    // copy argument value
5184    GLMessage_DataType *arg_value = glmsg.add_args();
5185    arg_value->set_isarray(false);
5186    arg_value->set_type(GLMessage::DataType::INT64);
5187    arg_value->add_int64value((uintptr_t)value);
5188
5189    // call function
5190    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5191    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5192    glContext->hooks->gl.glUniformMatrix3fv(location, count, transpose, value);
5193    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5194    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5195
5196    void *pointerArgs[] = {
5197        (void *) value,
5198    };
5199
5200    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5201                              threadStartTime, threadEndTime,
5202                              &glmsg, pointerArgs);
5203    glContext->traceGLMessage(&glmsg);
5204}
5205
5206void GLTrace_glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
5207    GLMessage glmsg;
5208    GLTraceContext *glContext = getGLTraceContext();
5209
5210    glmsg.set_function(GLMessage::glUniformMatrix4fv);
5211
5212    // copy argument location
5213    GLMessage_DataType *arg_location = glmsg.add_args();
5214    arg_location->set_isarray(false);
5215    arg_location->set_type(GLMessage::DataType::INT);
5216    arg_location->add_intvalue(location);
5217
5218    // copy argument count
5219    GLMessage_DataType *arg_count = glmsg.add_args();
5220    arg_count->set_isarray(false);
5221    arg_count->set_type(GLMessage::DataType::INT);
5222    arg_count->add_intvalue(count);
5223
5224    // copy argument transpose
5225    GLMessage_DataType *arg_transpose = glmsg.add_args();
5226    arg_transpose->set_isarray(false);
5227    arg_transpose->set_type(GLMessage::DataType::BOOL);
5228    arg_transpose->add_boolvalue(transpose);
5229
5230    // copy argument value
5231    GLMessage_DataType *arg_value = glmsg.add_args();
5232    arg_value->set_isarray(false);
5233    arg_value->set_type(GLMessage::DataType::INT64);
5234    arg_value->add_int64value((uintptr_t)value);
5235
5236    // call function
5237    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5238    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5239    glContext->hooks->gl.glUniformMatrix4fv(location, count, transpose, value);
5240    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5241    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5242
5243    void *pointerArgs[] = {
5244        (void *) value,
5245    };
5246
5247    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5248                              threadStartTime, threadEndTime,
5249                              &glmsg, pointerArgs);
5250    glContext->traceGLMessage(&glmsg);
5251}
5252
5253void GLTrace_glUseProgram(GLuint program) {
5254    GLMessage glmsg;
5255    GLTraceContext *glContext = getGLTraceContext();
5256
5257    glmsg.set_function(GLMessage::glUseProgram);
5258
5259    // copy argument program
5260    GLMessage_DataType *arg_program = glmsg.add_args();
5261    arg_program->set_isarray(false);
5262    arg_program->set_type(GLMessage::DataType::INT);
5263    arg_program->add_intvalue(program);
5264
5265    // call function
5266    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5267    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5268    glContext->hooks->gl.glUseProgram(program);
5269    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5270    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5271
5272    void *pointerArgs[] = {
5273    };
5274
5275    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5276                              threadStartTime, threadEndTime,
5277                              &glmsg, pointerArgs);
5278    glContext->traceGLMessage(&glmsg);
5279}
5280
5281void GLTrace_glValidateProgram(GLuint program) {
5282    GLMessage glmsg;
5283    GLTraceContext *glContext = getGLTraceContext();
5284
5285    glmsg.set_function(GLMessage::glValidateProgram);
5286
5287    // copy argument program
5288    GLMessage_DataType *arg_program = glmsg.add_args();
5289    arg_program->set_isarray(false);
5290    arg_program->set_type(GLMessage::DataType::INT);
5291    arg_program->add_intvalue(program);
5292
5293    // call function
5294    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5295    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5296    glContext->hooks->gl.glValidateProgram(program);
5297    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5298    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5299
5300    void *pointerArgs[] = {
5301    };
5302
5303    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5304                              threadStartTime, threadEndTime,
5305                              &glmsg, pointerArgs);
5306    glContext->traceGLMessage(&glmsg);
5307}
5308
5309void GLTrace_glVertexAttrib1f(GLuint indx, GLfloat x) {
5310    GLMessage glmsg;
5311    GLTraceContext *glContext = getGLTraceContext();
5312
5313    glmsg.set_function(GLMessage::glVertexAttrib1f);
5314
5315    // copy argument indx
5316    GLMessage_DataType *arg_indx = glmsg.add_args();
5317    arg_indx->set_isarray(false);
5318    arg_indx->set_type(GLMessage::DataType::INT);
5319    arg_indx->add_intvalue(indx);
5320
5321    // copy argument x
5322    GLMessage_DataType *arg_x = glmsg.add_args();
5323    arg_x->set_isarray(false);
5324    arg_x->set_type(GLMessage::DataType::FLOAT);
5325    arg_x->add_floatvalue(x);
5326
5327    // call function
5328    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5329    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5330    glContext->hooks->gl.glVertexAttrib1f(indx, x);
5331    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5332    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5333
5334    void *pointerArgs[] = {
5335    };
5336
5337    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5338                              threadStartTime, threadEndTime,
5339                              &glmsg, pointerArgs);
5340    glContext->traceGLMessage(&glmsg);
5341}
5342
5343void GLTrace_glVertexAttrib1fv(GLuint indx, const GLfloat* values) {
5344    GLMessage glmsg;
5345    GLTraceContext *glContext = getGLTraceContext();
5346
5347    glmsg.set_function(GLMessage::glVertexAttrib1fv);
5348
5349    // copy argument indx
5350    GLMessage_DataType *arg_indx = glmsg.add_args();
5351    arg_indx->set_isarray(false);
5352    arg_indx->set_type(GLMessage::DataType::INT);
5353    arg_indx->add_intvalue(indx);
5354
5355    // copy argument values
5356    GLMessage_DataType *arg_values = glmsg.add_args();
5357    arg_values->set_isarray(false);
5358    arg_values->set_type(GLMessage::DataType::INT64);
5359    arg_values->add_int64value((uintptr_t)values);
5360
5361    // call function
5362    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5363    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5364    glContext->hooks->gl.glVertexAttrib1fv(indx, values);
5365    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5366    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5367
5368    void *pointerArgs[] = {
5369        (void *) values,
5370    };
5371
5372    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5373                              threadStartTime, threadEndTime,
5374                              &glmsg, pointerArgs);
5375    glContext->traceGLMessage(&glmsg);
5376}
5377
5378void GLTrace_glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) {
5379    GLMessage glmsg;
5380    GLTraceContext *glContext = getGLTraceContext();
5381
5382    glmsg.set_function(GLMessage::glVertexAttrib2f);
5383
5384    // copy argument indx
5385    GLMessage_DataType *arg_indx = glmsg.add_args();
5386    arg_indx->set_isarray(false);
5387    arg_indx->set_type(GLMessage::DataType::INT);
5388    arg_indx->add_intvalue(indx);
5389
5390    // copy argument x
5391    GLMessage_DataType *arg_x = glmsg.add_args();
5392    arg_x->set_isarray(false);
5393    arg_x->set_type(GLMessage::DataType::FLOAT);
5394    arg_x->add_floatvalue(x);
5395
5396    // copy argument y
5397    GLMessage_DataType *arg_y = glmsg.add_args();
5398    arg_y->set_isarray(false);
5399    arg_y->set_type(GLMessage::DataType::FLOAT);
5400    arg_y->add_floatvalue(y);
5401
5402    // call function
5403    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5404    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5405    glContext->hooks->gl.glVertexAttrib2f(indx, x, y);
5406    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5407    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5408
5409    void *pointerArgs[] = {
5410    };
5411
5412    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5413                              threadStartTime, threadEndTime,
5414                              &glmsg, pointerArgs);
5415    glContext->traceGLMessage(&glmsg);
5416}
5417
5418void GLTrace_glVertexAttrib2fv(GLuint indx, const GLfloat* values) {
5419    GLMessage glmsg;
5420    GLTraceContext *glContext = getGLTraceContext();
5421
5422    glmsg.set_function(GLMessage::glVertexAttrib2fv);
5423
5424    // copy argument indx
5425    GLMessage_DataType *arg_indx = glmsg.add_args();
5426    arg_indx->set_isarray(false);
5427    arg_indx->set_type(GLMessage::DataType::INT);
5428    arg_indx->add_intvalue(indx);
5429
5430    // copy argument values
5431    GLMessage_DataType *arg_values = glmsg.add_args();
5432    arg_values->set_isarray(false);
5433    arg_values->set_type(GLMessage::DataType::INT64);
5434    arg_values->add_int64value((uintptr_t)values);
5435
5436    // call function
5437    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5438    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5439    glContext->hooks->gl.glVertexAttrib2fv(indx, values);
5440    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5441    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5442
5443    void *pointerArgs[] = {
5444        (void *) values,
5445    };
5446
5447    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5448                              threadStartTime, threadEndTime,
5449                              &glmsg, pointerArgs);
5450    glContext->traceGLMessage(&glmsg);
5451}
5452
5453void GLTrace_glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z) {
5454    GLMessage glmsg;
5455    GLTraceContext *glContext = getGLTraceContext();
5456
5457    glmsg.set_function(GLMessage::glVertexAttrib3f);
5458
5459    // copy argument indx
5460    GLMessage_DataType *arg_indx = glmsg.add_args();
5461    arg_indx->set_isarray(false);
5462    arg_indx->set_type(GLMessage::DataType::INT);
5463    arg_indx->add_intvalue(indx);
5464
5465    // copy argument x
5466    GLMessage_DataType *arg_x = glmsg.add_args();
5467    arg_x->set_isarray(false);
5468    arg_x->set_type(GLMessage::DataType::FLOAT);
5469    arg_x->add_floatvalue(x);
5470
5471    // copy argument y
5472    GLMessage_DataType *arg_y = glmsg.add_args();
5473    arg_y->set_isarray(false);
5474    arg_y->set_type(GLMessage::DataType::FLOAT);
5475    arg_y->add_floatvalue(y);
5476
5477    // copy argument z
5478    GLMessage_DataType *arg_z = glmsg.add_args();
5479    arg_z->set_isarray(false);
5480    arg_z->set_type(GLMessage::DataType::FLOAT);
5481    arg_z->add_floatvalue(z);
5482
5483    // call function
5484    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5485    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5486    glContext->hooks->gl.glVertexAttrib3f(indx, x, y, z);
5487    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5488    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5489
5490    void *pointerArgs[] = {
5491    };
5492
5493    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5494                              threadStartTime, threadEndTime,
5495                              &glmsg, pointerArgs);
5496    glContext->traceGLMessage(&glmsg);
5497}
5498
5499void GLTrace_glVertexAttrib3fv(GLuint indx, const GLfloat* values) {
5500    GLMessage glmsg;
5501    GLTraceContext *glContext = getGLTraceContext();
5502
5503    glmsg.set_function(GLMessage::glVertexAttrib3fv);
5504
5505    // copy argument indx
5506    GLMessage_DataType *arg_indx = glmsg.add_args();
5507    arg_indx->set_isarray(false);
5508    arg_indx->set_type(GLMessage::DataType::INT);
5509    arg_indx->add_intvalue(indx);
5510
5511    // copy argument values
5512    GLMessage_DataType *arg_values = glmsg.add_args();
5513    arg_values->set_isarray(false);
5514    arg_values->set_type(GLMessage::DataType::INT64);
5515    arg_values->add_int64value((uintptr_t)values);
5516
5517    // call function
5518    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5519    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5520    glContext->hooks->gl.glVertexAttrib3fv(indx, values);
5521    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5522    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5523
5524    void *pointerArgs[] = {
5525        (void *) values,
5526    };
5527
5528    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5529                              threadStartTime, threadEndTime,
5530                              &glmsg, pointerArgs);
5531    glContext->traceGLMessage(&glmsg);
5532}
5533
5534void GLTrace_glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
5535    GLMessage glmsg;
5536    GLTraceContext *glContext = getGLTraceContext();
5537
5538    glmsg.set_function(GLMessage::glVertexAttrib4f);
5539
5540    // copy argument indx
5541    GLMessage_DataType *arg_indx = glmsg.add_args();
5542    arg_indx->set_isarray(false);
5543    arg_indx->set_type(GLMessage::DataType::INT);
5544    arg_indx->add_intvalue(indx);
5545
5546    // copy argument x
5547    GLMessage_DataType *arg_x = glmsg.add_args();
5548    arg_x->set_isarray(false);
5549    arg_x->set_type(GLMessage::DataType::FLOAT);
5550    arg_x->add_floatvalue(x);
5551
5552    // copy argument y
5553    GLMessage_DataType *arg_y = glmsg.add_args();
5554    arg_y->set_isarray(false);
5555    arg_y->set_type(GLMessage::DataType::FLOAT);
5556    arg_y->add_floatvalue(y);
5557
5558    // copy argument z
5559    GLMessage_DataType *arg_z = glmsg.add_args();
5560    arg_z->set_isarray(false);
5561    arg_z->set_type(GLMessage::DataType::FLOAT);
5562    arg_z->add_floatvalue(z);
5563
5564    // copy argument w
5565    GLMessage_DataType *arg_w = glmsg.add_args();
5566    arg_w->set_isarray(false);
5567    arg_w->set_type(GLMessage::DataType::FLOAT);
5568    arg_w->add_floatvalue(w);
5569
5570    // call function
5571    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5572    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5573    glContext->hooks->gl.glVertexAttrib4f(indx, x, y, z, w);
5574    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5575    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5576
5577    void *pointerArgs[] = {
5578    };
5579
5580    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5581                              threadStartTime, threadEndTime,
5582                              &glmsg, pointerArgs);
5583    glContext->traceGLMessage(&glmsg);
5584}
5585
5586void GLTrace_glVertexAttrib4fv(GLuint indx, const GLfloat* values) {
5587    GLMessage glmsg;
5588    GLTraceContext *glContext = getGLTraceContext();
5589
5590    glmsg.set_function(GLMessage::glVertexAttrib4fv);
5591
5592    // copy argument indx
5593    GLMessage_DataType *arg_indx = glmsg.add_args();
5594    arg_indx->set_isarray(false);
5595    arg_indx->set_type(GLMessage::DataType::INT);
5596    arg_indx->add_intvalue(indx);
5597
5598    // copy argument values
5599    GLMessage_DataType *arg_values = glmsg.add_args();
5600    arg_values->set_isarray(false);
5601    arg_values->set_type(GLMessage::DataType::INT64);
5602    arg_values->add_int64value((uintptr_t)values);
5603
5604    // call function
5605    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5606    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5607    glContext->hooks->gl.glVertexAttrib4fv(indx, values);
5608    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5609    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5610
5611    void *pointerArgs[] = {
5612        (void *) values,
5613    };
5614
5615    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5616                              threadStartTime, threadEndTime,
5617                              &glmsg, pointerArgs);
5618    glContext->traceGLMessage(&glmsg);
5619}
5620
5621void GLTrace_glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr) {
5622    GLMessage glmsg;
5623    GLTraceContext *glContext = getGLTraceContext();
5624
5625    glmsg.set_function(GLMessage::glVertexAttribPointer);
5626
5627    // copy argument indx
5628    GLMessage_DataType *arg_indx = glmsg.add_args();
5629    arg_indx->set_isarray(false);
5630    arg_indx->set_type(GLMessage::DataType::INT);
5631    arg_indx->add_intvalue(indx);
5632
5633    // copy argument size
5634    GLMessage_DataType *arg_size = glmsg.add_args();
5635    arg_size->set_isarray(false);
5636    arg_size->set_type(GLMessage::DataType::INT);
5637    arg_size->add_intvalue(size);
5638
5639    // copy argument type
5640    GLMessage_DataType *arg_type = glmsg.add_args();
5641    arg_type->set_isarray(false);
5642    arg_type->set_type(GLMessage::DataType::ENUM);
5643    arg_type->add_intvalue((int)type);
5644
5645    // copy argument normalized
5646    GLMessage_DataType *arg_normalized = glmsg.add_args();
5647    arg_normalized->set_isarray(false);
5648    arg_normalized->set_type(GLMessage::DataType::BOOL);
5649    arg_normalized->add_boolvalue(normalized);
5650
5651    // copy argument stride
5652    GLMessage_DataType *arg_stride = glmsg.add_args();
5653    arg_stride->set_isarray(false);
5654    arg_stride->set_type(GLMessage::DataType::INT);
5655    arg_stride->add_intvalue(stride);
5656
5657    // copy argument ptr
5658    GLMessage_DataType *arg_ptr = glmsg.add_args();
5659    arg_ptr->set_isarray(false);
5660    arg_ptr->set_type(GLMessage::DataType::INT64);
5661    arg_ptr->add_int64value((uintptr_t)ptr);
5662
5663    // call function
5664    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5665    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5666    glContext->hooks->gl.glVertexAttribPointer(indx, size, type, normalized, stride, ptr);
5667    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5668    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5669
5670    void *pointerArgs[] = {
5671        (void *) ptr,
5672    };
5673
5674    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5675                              threadStartTime, threadEndTime,
5676                              &glmsg, pointerArgs);
5677    glContext->traceGLMessage(&glmsg);
5678}
5679
5680void GLTrace_glViewport(GLint x, GLint y, GLsizei width, GLsizei height) {
5681    GLMessage glmsg;
5682    GLTraceContext *glContext = getGLTraceContext();
5683
5684    glmsg.set_function(GLMessage::glViewport);
5685
5686    // copy argument x
5687    GLMessage_DataType *arg_x = glmsg.add_args();
5688    arg_x->set_isarray(false);
5689    arg_x->set_type(GLMessage::DataType::INT);
5690    arg_x->add_intvalue(x);
5691
5692    // copy argument y
5693    GLMessage_DataType *arg_y = glmsg.add_args();
5694    arg_y->set_isarray(false);
5695    arg_y->set_type(GLMessage::DataType::INT);
5696    arg_y->add_intvalue(y);
5697
5698    // copy argument width
5699    GLMessage_DataType *arg_width = glmsg.add_args();
5700    arg_width->set_isarray(false);
5701    arg_width->set_type(GLMessage::DataType::INT);
5702    arg_width->add_intvalue(width);
5703
5704    // copy argument height
5705    GLMessage_DataType *arg_height = glmsg.add_args();
5706    arg_height->set_isarray(false);
5707    arg_height->set_type(GLMessage::DataType::INT);
5708    arg_height->add_intvalue(height);
5709
5710    // call function
5711    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5712    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5713    glContext->hooks->gl.glViewport(x, y, width, height);
5714    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5715    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5716
5717    void *pointerArgs[] = {
5718    };
5719
5720    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5721                              threadStartTime, threadEndTime,
5722                              &glmsg, pointerArgs);
5723    glContext->traceGLMessage(&glmsg);
5724}
5725
5726void GLTrace_glReadBuffer(GLenum mode) {
5727    GLMessage glmsg;
5728    GLTraceContext *glContext = getGLTraceContext();
5729
5730    glmsg.set_function(GLMessage::glReadBuffer);
5731
5732    // copy argument mode
5733    GLMessage_DataType *arg_mode = glmsg.add_args();
5734    arg_mode->set_isarray(false);
5735    arg_mode->set_type(GLMessage::DataType::ENUM);
5736    arg_mode->add_intvalue((int)mode);
5737
5738    // call function
5739    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5740    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5741    glContext->hooks->gl.glReadBuffer(mode);
5742    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5743    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5744
5745    void *pointerArgs[] = {
5746    };
5747
5748    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5749                              threadStartTime, threadEndTime,
5750                              &glmsg, pointerArgs);
5751    glContext->traceGLMessage(&glmsg);
5752}
5753
5754void GLTrace_glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices) {
5755    GLMessage glmsg;
5756    GLTraceContext *glContext = getGLTraceContext();
5757
5758    glmsg.set_function(GLMessage::glDrawRangeElements);
5759
5760    // copy argument mode
5761    GLMessage_DataType *arg_mode = glmsg.add_args();
5762    arg_mode->set_isarray(false);
5763    arg_mode->set_type(GLMessage::DataType::ENUM);
5764    arg_mode->add_intvalue((int)mode);
5765
5766    // copy argument start
5767    GLMessage_DataType *arg_start = glmsg.add_args();
5768    arg_start->set_isarray(false);
5769    arg_start->set_type(GLMessage::DataType::INT);
5770    arg_start->add_intvalue(start);
5771
5772    // copy argument end
5773    GLMessage_DataType *arg_end = glmsg.add_args();
5774    arg_end->set_isarray(false);
5775    arg_end->set_type(GLMessage::DataType::INT);
5776    arg_end->add_intvalue(end);
5777
5778    // copy argument count
5779    GLMessage_DataType *arg_count = glmsg.add_args();
5780    arg_count->set_isarray(false);
5781    arg_count->set_type(GLMessage::DataType::INT);
5782    arg_count->add_intvalue(count);
5783
5784    // copy argument type
5785    GLMessage_DataType *arg_type = glmsg.add_args();
5786    arg_type->set_isarray(false);
5787    arg_type->set_type(GLMessage::DataType::ENUM);
5788    arg_type->add_intvalue((int)type);
5789
5790    // copy argument indices
5791    GLMessage_DataType *arg_indices = glmsg.add_args();
5792    arg_indices->set_isarray(false);
5793    arg_indices->set_type(GLMessage::DataType::INT64);
5794    arg_indices->add_int64value((uintptr_t)indices);
5795
5796    // call function
5797    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5798    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5799    glContext->hooks->gl.glDrawRangeElements(mode, start, end, count, type, indices);
5800    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5801    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5802
5803    void *pointerArgs[] = {
5804        (void *) indices,
5805    };
5806
5807    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5808                              threadStartTime, threadEndTime,
5809                              &glmsg, pointerArgs);
5810    glContext->traceGLMessage(&glmsg);
5811}
5812
5813void GLTrace_glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels) {
5814    GLMessage glmsg;
5815    GLTraceContext *glContext = getGLTraceContext();
5816
5817    glmsg.set_function(GLMessage::glTexImage3D);
5818
5819    // copy argument target
5820    GLMessage_DataType *arg_target = glmsg.add_args();
5821    arg_target->set_isarray(false);
5822    arg_target->set_type(GLMessage::DataType::ENUM);
5823    arg_target->add_intvalue((int)target);
5824
5825    // copy argument level
5826    GLMessage_DataType *arg_level = glmsg.add_args();
5827    arg_level->set_isarray(false);
5828    arg_level->set_type(GLMessage::DataType::INT);
5829    arg_level->add_intvalue(level);
5830
5831    // copy argument internalformat
5832    GLMessage_DataType *arg_internalformat = glmsg.add_args();
5833    arg_internalformat->set_isarray(false);
5834    arg_internalformat->set_type(GLMessage::DataType::INT);
5835    arg_internalformat->add_intvalue(internalformat);
5836
5837    // copy argument width
5838    GLMessage_DataType *arg_width = glmsg.add_args();
5839    arg_width->set_isarray(false);
5840    arg_width->set_type(GLMessage::DataType::INT);
5841    arg_width->add_intvalue(width);
5842
5843    // copy argument height
5844    GLMessage_DataType *arg_height = glmsg.add_args();
5845    arg_height->set_isarray(false);
5846    arg_height->set_type(GLMessage::DataType::INT);
5847    arg_height->add_intvalue(height);
5848
5849    // copy argument depth
5850    GLMessage_DataType *arg_depth = glmsg.add_args();
5851    arg_depth->set_isarray(false);
5852    arg_depth->set_type(GLMessage::DataType::INT);
5853    arg_depth->add_intvalue(depth);
5854
5855    // copy argument border
5856    GLMessage_DataType *arg_border = glmsg.add_args();
5857    arg_border->set_isarray(false);
5858    arg_border->set_type(GLMessage::DataType::INT);
5859    arg_border->add_intvalue(border);
5860
5861    // copy argument format
5862    GLMessage_DataType *arg_format = glmsg.add_args();
5863    arg_format->set_isarray(false);
5864    arg_format->set_type(GLMessage::DataType::ENUM);
5865    arg_format->add_intvalue((int)format);
5866
5867    // copy argument type
5868    GLMessage_DataType *arg_type = glmsg.add_args();
5869    arg_type->set_isarray(false);
5870    arg_type->set_type(GLMessage::DataType::ENUM);
5871    arg_type->add_intvalue((int)type);
5872
5873    // copy argument pixels
5874    GLMessage_DataType *arg_pixels = glmsg.add_args();
5875    arg_pixels->set_isarray(false);
5876    arg_pixels->set_type(GLMessage::DataType::INT64);
5877    arg_pixels->add_int64value((uintptr_t)pixels);
5878
5879    // call function
5880    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5881    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5882    glContext->hooks->gl.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels);
5883    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5884    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5885
5886    void *pointerArgs[] = {
5887        (void *) pixels,
5888    };
5889
5890    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5891                              threadStartTime, threadEndTime,
5892                              &glmsg, pointerArgs);
5893    glContext->traceGLMessage(&glmsg);
5894}
5895
5896void GLTrace_glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels) {
5897    GLMessage glmsg;
5898    GLTraceContext *glContext = getGLTraceContext();
5899
5900    glmsg.set_function(GLMessage::glTexSubImage3D);
5901
5902    // copy argument target
5903    GLMessage_DataType *arg_target = glmsg.add_args();
5904    arg_target->set_isarray(false);
5905    arg_target->set_type(GLMessage::DataType::ENUM);
5906    arg_target->add_intvalue((int)target);
5907
5908    // copy argument level
5909    GLMessage_DataType *arg_level = glmsg.add_args();
5910    arg_level->set_isarray(false);
5911    arg_level->set_type(GLMessage::DataType::INT);
5912    arg_level->add_intvalue(level);
5913
5914    // copy argument xoffset
5915    GLMessage_DataType *arg_xoffset = glmsg.add_args();
5916    arg_xoffset->set_isarray(false);
5917    arg_xoffset->set_type(GLMessage::DataType::INT);
5918    arg_xoffset->add_intvalue(xoffset);
5919
5920    // copy argument yoffset
5921    GLMessage_DataType *arg_yoffset = glmsg.add_args();
5922    arg_yoffset->set_isarray(false);
5923    arg_yoffset->set_type(GLMessage::DataType::INT);
5924    arg_yoffset->add_intvalue(yoffset);
5925
5926    // copy argument zoffset
5927    GLMessage_DataType *arg_zoffset = glmsg.add_args();
5928    arg_zoffset->set_isarray(false);
5929    arg_zoffset->set_type(GLMessage::DataType::INT);
5930    arg_zoffset->add_intvalue(zoffset);
5931
5932    // copy argument width
5933    GLMessage_DataType *arg_width = glmsg.add_args();
5934    arg_width->set_isarray(false);
5935    arg_width->set_type(GLMessage::DataType::INT);
5936    arg_width->add_intvalue(width);
5937
5938    // copy argument height
5939    GLMessage_DataType *arg_height = glmsg.add_args();
5940    arg_height->set_isarray(false);
5941    arg_height->set_type(GLMessage::DataType::INT);
5942    arg_height->add_intvalue(height);
5943
5944    // copy argument depth
5945    GLMessage_DataType *arg_depth = glmsg.add_args();
5946    arg_depth->set_isarray(false);
5947    arg_depth->set_type(GLMessage::DataType::INT);
5948    arg_depth->add_intvalue(depth);
5949
5950    // copy argument format
5951    GLMessage_DataType *arg_format = glmsg.add_args();
5952    arg_format->set_isarray(false);
5953    arg_format->set_type(GLMessage::DataType::ENUM);
5954    arg_format->add_intvalue((int)format);
5955
5956    // copy argument type
5957    GLMessage_DataType *arg_type = glmsg.add_args();
5958    arg_type->set_isarray(false);
5959    arg_type->set_type(GLMessage::DataType::ENUM);
5960    arg_type->add_intvalue((int)type);
5961
5962    // copy argument pixels
5963    GLMessage_DataType *arg_pixels = glmsg.add_args();
5964    arg_pixels->set_isarray(false);
5965    arg_pixels->set_type(GLMessage::DataType::INT64);
5966    arg_pixels->add_int64value((uintptr_t)pixels);
5967
5968    // call function
5969    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
5970    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
5971    glContext->hooks->gl.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
5972    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
5973    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
5974
5975    void *pointerArgs[] = {
5976        (void *) pixels,
5977    };
5978
5979    fixupGLMessage(glContext, wallStartTime, wallEndTime,
5980                              threadStartTime, threadEndTime,
5981                              &glmsg, pointerArgs);
5982    glContext->traceGLMessage(&glmsg);
5983}
5984
5985void GLTrace_glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) {
5986    GLMessage glmsg;
5987    GLTraceContext *glContext = getGLTraceContext();
5988
5989    glmsg.set_function(GLMessage::glCopyTexSubImage3D);
5990
5991    // copy argument target
5992    GLMessage_DataType *arg_target = glmsg.add_args();
5993    arg_target->set_isarray(false);
5994    arg_target->set_type(GLMessage::DataType::ENUM);
5995    arg_target->add_intvalue((int)target);
5996
5997    // copy argument level
5998    GLMessage_DataType *arg_level = glmsg.add_args();
5999    arg_level->set_isarray(false);
6000    arg_level->set_type(GLMessage::DataType::INT);
6001    arg_level->add_intvalue(level);
6002
6003    // copy argument xoffset
6004    GLMessage_DataType *arg_xoffset = glmsg.add_args();
6005    arg_xoffset->set_isarray(false);
6006    arg_xoffset->set_type(GLMessage::DataType::INT);
6007    arg_xoffset->add_intvalue(xoffset);
6008
6009    // copy argument yoffset
6010    GLMessage_DataType *arg_yoffset = glmsg.add_args();
6011    arg_yoffset->set_isarray(false);
6012    arg_yoffset->set_type(GLMessage::DataType::INT);
6013    arg_yoffset->add_intvalue(yoffset);
6014
6015    // copy argument zoffset
6016    GLMessage_DataType *arg_zoffset = glmsg.add_args();
6017    arg_zoffset->set_isarray(false);
6018    arg_zoffset->set_type(GLMessage::DataType::INT);
6019    arg_zoffset->add_intvalue(zoffset);
6020
6021    // copy argument x
6022    GLMessage_DataType *arg_x = glmsg.add_args();
6023    arg_x->set_isarray(false);
6024    arg_x->set_type(GLMessage::DataType::INT);
6025    arg_x->add_intvalue(x);
6026
6027    // copy argument y
6028    GLMessage_DataType *arg_y = glmsg.add_args();
6029    arg_y->set_isarray(false);
6030    arg_y->set_type(GLMessage::DataType::INT);
6031    arg_y->add_intvalue(y);
6032
6033    // copy argument width
6034    GLMessage_DataType *arg_width = glmsg.add_args();
6035    arg_width->set_isarray(false);
6036    arg_width->set_type(GLMessage::DataType::INT);
6037    arg_width->add_intvalue(width);
6038
6039    // copy argument height
6040    GLMessage_DataType *arg_height = glmsg.add_args();
6041    arg_height->set_isarray(false);
6042    arg_height->set_type(GLMessage::DataType::INT);
6043    arg_height->add_intvalue(height);
6044
6045    // call function
6046    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6047    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6048    glContext->hooks->gl.glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
6049    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6050    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6051
6052    void *pointerArgs[] = {
6053    };
6054
6055    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6056                              threadStartTime, threadEndTime,
6057                              &glmsg, pointerArgs);
6058    glContext->traceGLMessage(&glmsg);
6059}
6060
6061void GLTrace_glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) {
6062    GLMessage glmsg;
6063    GLTraceContext *glContext = getGLTraceContext();
6064
6065    glmsg.set_function(GLMessage::glCompressedTexImage3D);
6066
6067    // copy argument target
6068    GLMessage_DataType *arg_target = glmsg.add_args();
6069    arg_target->set_isarray(false);
6070    arg_target->set_type(GLMessage::DataType::ENUM);
6071    arg_target->add_intvalue((int)target);
6072
6073    // copy argument level
6074    GLMessage_DataType *arg_level = glmsg.add_args();
6075    arg_level->set_isarray(false);
6076    arg_level->set_type(GLMessage::DataType::INT);
6077    arg_level->add_intvalue(level);
6078
6079    // copy argument internalformat
6080    GLMessage_DataType *arg_internalformat = glmsg.add_args();
6081    arg_internalformat->set_isarray(false);
6082    arg_internalformat->set_type(GLMessage::DataType::ENUM);
6083    arg_internalformat->add_intvalue((int)internalformat);
6084
6085    // copy argument width
6086    GLMessage_DataType *arg_width = glmsg.add_args();
6087    arg_width->set_isarray(false);
6088    arg_width->set_type(GLMessage::DataType::INT);
6089    arg_width->add_intvalue(width);
6090
6091    // copy argument height
6092    GLMessage_DataType *arg_height = glmsg.add_args();
6093    arg_height->set_isarray(false);
6094    arg_height->set_type(GLMessage::DataType::INT);
6095    arg_height->add_intvalue(height);
6096
6097    // copy argument depth
6098    GLMessage_DataType *arg_depth = glmsg.add_args();
6099    arg_depth->set_isarray(false);
6100    arg_depth->set_type(GLMessage::DataType::INT);
6101    arg_depth->add_intvalue(depth);
6102
6103    // copy argument border
6104    GLMessage_DataType *arg_border = glmsg.add_args();
6105    arg_border->set_isarray(false);
6106    arg_border->set_type(GLMessage::DataType::INT);
6107    arg_border->add_intvalue(border);
6108
6109    // copy argument imageSize
6110    GLMessage_DataType *arg_imageSize = glmsg.add_args();
6111    arg_imageSize->set_isarray(false);
6112    arg_imageSize->set_type(GLMessage::DataType::INT);
6113    arg_imageSize->add_intvalue(imageSize);
6114
6115    // copy argument data
6116    GLMessage_DataType *arg_data = glmsg.add_args();
6117    arg_data->set_isarray(false);
6118    arg_data->set_type(GLMessage::DataType::INT64);
6119    arg_data->add_int64value((uintptr_t)data);
6120
6121    // call function
6122    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6123    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6124    glContext->hooks->gl.glCompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data);
6125    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6126    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6127
6128    void *pointerArgs[] = {
6129        (void *) data,
6130    };
6131
6132    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6133                              threadStartTime, threadEndTime,
6134                              &glmsg, pointerArgs);
6135    glContext->traceGLMessage(&glmsg);
6136}
6137
6138void GLTrace_glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) {
6139    GLMessage glmsg;
6140    GLTraceContext *glContext = getGLTraceContext();
6141
6142    glmsg.set_function(GLMessage::glCompressedTexSubImage3D);
6143
6144    // copy argument target
6145    GLMessage_DataType *arg_target = glmsg.add_args();
6146    arg_target->set_isarray(false);
6147    arg_target->set_type(GLMessage::DataType::ENUM);
6148    arg_target->add_intvalue((int)target);
6149
6150    // copy argument level
6151    GLMessage_DataType *arg_level = glmsg.add_args();
6152    arg_level->set_isarray(false);
6153    arg_level->set_type(GLMessage::DataType::INT);
6154    arg_level->add_intvalue(level);
6155
6156    // copy argument xoffset
6157    GLMessage_DataType *arg_xoffset = glmsg.add_args();
6158    arg_xoffset->set_isarray(false);
6159    arg_xoffset->set_type(GLMessage::DataType::INT);
6160    arg_xoffset->add_intvalue(xoffset);
6161
6162    // copy argument yoffset
6163    GLMessage_DataType *arg_yoffset = glmsg.add_args();
6164    arg_yoffset->set_isarray(false);
6165    arg_yoffset->set_type(GLMessage::DataType::INT);
6166    arg_yoffset->add_intvalue(yoffset);
6167
6168    // copy argument zoffset
6169    GLMessage_DataType *arg_zoffset = glmsg.add_args();
6170    arg_zoffset->set_isarray(false);
6171    arg_zoffset->set_type(GLMessage::DataType::INT);
6172    arg_zoffset->add_intvalue(zoffset);
6173
6174    // copy argument width
6175    GLMessage_DataType *arg_width = glmsg.add_args();
6176    arg_width->set_isarray(false);
6177    arg_width->set_type(GLMessage::DataType::INT);
6178    arg_width->add_intvalue(width);
6179
6180    // copy argument height
6181    GLMessage_DataType *arg_height = glmsg.add_args();
6182    arg_height->set_isarray(false);
6183    arg_height->set_type(GLMessage::DataType::INT);
6184    arg_height->add_intvalue(height);
6185
6186    // copy argument depth
6187    GLMessage_DataType *arg_depth = glmsg.add_args();
6188    arg_depth->set_isarray(false);
6189    arg_depth->set_type(GLMessage::DataType::INT);
6190    arg_depth->add_intvalue(depth);
6191
6192    // copy argument format
6193    GLMessage_DataType *arg_format = glmsg.add_args();
6194    arg_format->set_isarray(false);
6195    arg_format->set_type(GLMessage::DataType::ENUM);
6196    arg_format->add_intvalue((int)format);
6197
6198    // copy argument imageSize
6199    GLMessage_DataType *arg_imageSize = glmsg.add_args();
6200    arg_imageSize->set_isarray(false);
6201    arg_imageSize->set_type(GLMessage::DataType::INT);
6202    arg_imageSize->add_intvalue(imageSize);
6203
6204    // copy argument data
6205    GLMessage_DataType *arg_data = glmsg.add_args();
6206    arg_data->set_isarray(false);
6207    arg_data->set_type(GLMessage::DataType::INT64);
6208    arg_data->add_int64value((uintptr_t)data);
6209
6210    // call function
6211    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6212    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6213    glContext->hooks->gl.glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
6214    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6215    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6216
6217    void *pointerArgs[] = {
6218        (void *) data,
6219    };
6220
6221    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6222                              threadStartTime, threadEndTime,
6223                              &glmsg, pointerArgs);
6224    glContext->traceGLMessage(&glmsg);
6225}
6226
6227void GLTrace_glGenQueries(GLsizei n, GLuint* ids) {
6228    GLMessage glmsg;
6229    GLTraceContext *glContext = getGLTraceContext();
6230
6231    glmsg.set_function(GLMessage::glGenQueries);
6232
6233    // copy argument n
6234    GLMessage_DataType *arg_n = glmsg.add_args();
6235    arg_n->set_isarray(false);
6236    arg_n->set_type(GLMessage::DataType::INT);
6237    arg_n->add_intvalue(n);
6238
6239    // copy argument ids
6240    GLMessage_DataType *arg_ids = glmsg.add_args();
6241    arg_ids->set_isarray(false);
6242    arg_ids->set_type(GLMessage::DataType::INT64);
6243    arg_ids->add_int64value((uintptr_t)ids);
6244
6245    // call function
6246    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6247    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6248    glContext->hooks->gl.glGenQueries(n, ids);
6249    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6250    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6251
6252    void *pointerArgs[] = {
6253        (void *) ids,
6254    };
6255
6256    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6257                              threadStartTime, threadEndTime,
6258                              &glmsg, pointerArgs);
6259    glContext->traceGLMessage(&glmsg);
6260}
6261
6262void GLTrace_glDeleteQueries(GLsizei n, const GLuint* ids) {
6263    GLMessage glmsg;
6264    GLTraceContext *glContext = getGLTraceContext();
6265
6266    glmsg.set_function(GLMessage::glDeleteQueries);
6267
6268    // copy argument n
6269    GLMessage_DataType *arg_n = glmsg.add_args();
6270    arg_n->set_isarray(false);
6271    arg_n->set_type(GLMessage::DataType::INT);
6272    arg_n->add_intvalue(n);
6273
6274    // copy argument ids
6275    GLMessage_DataType *arg_ids = glmsg.add_args();
6276    arg_ids->set_isarray(false);
6277    arg_ids->set_type(GLMessage::DataType::INT64);
6278    arg_ids->add_int64value((uintptr_t)ids);
6279
6280    // call function
6281    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6282    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6283    glContext->hooks->gl.glDeleteQueries(n, ids);
6284    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6285    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6286
6287    void *pointerArgs[] = {
6288        (void *) ids,
6289    };
6290
6291    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6292                              threadStartTime, threadEndTime,
6293                              &glmsg, pointerArgs);
6294    glContext->traceGLMessage(&glmsg);
6295}
6296
6297GLboolean GLTrace_glIsQuery(GLuint id) {
6298    GLMessage glmsg;
6299    GLTraceContext *glContext = getGLTraceContext();
6300
6301    glmsg.set_function(GLMessage::glIsQuery);
6302
6303    // copy argument id
6304    GLMessage_DataType *arg_id = glmsg.add_args();
6305    arg_id->set_isarray(false);
6306    arg_id->set_type(GLMessage::DataType::INT);
6307    arg_id->add_intvalue(id);
6308
6309    // call function
6310    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6311    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6312    GLboolean retValue = glContext->hooks->gl.glIsQuery(id);
6313    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6314    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6315
6316    // set return value
6317    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
6318    rt->set_isarray(false);
6319    rt->set_type(GLMessage::DataType::BOOL);
6320    rt->add_boolvalue(retValue);
6321
6322    void *pointerArgs[] = {
6323    };
6324
6325    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6326                              threadStartTime, threadEndTime,
6327                              &glmsg, pointerArgs);
6328    glContext->traceGLMessage(&glmsg);
6329
6330    return retValue;
6331}
6332
6333void GLTrace_glBeginQuery(GLenum target, GLuint id) {
6334    GLMessage glmsg;
6335    GLTraceContext *glContext = getGLTraceContext();
6336
6337    glmsg.set_function(GLMessage::glBeginQuery);
6338
6339    // copy argument target
6340    GLMessage_DataType *arg_target = glmsg.add_args();
6341    arg_target->set_isarray(false);
6342    arg_target->set_type(GLMessage::DataType::ENUM);
6343    arg_target->add_intvalue((int)target);
6344
6345    // copy argument id
6346    GLMessage_DataType *arg_id = glmsg.add_args();
6347    arg_id->set_isarray(false);
6348    arg_id->set_type(GLMessage::DataType::INT);
6349    arg_id->add_intvalue(id);
6350
6351    // call function
6352    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6353    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6354    glContext->hooks->gl.glBeginQuery(target, id);
6355    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6356    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6357
6358    void *pointerArgs[] = {
6359    };
6360
6361    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6362                              threadStartTime, threadEndTime,
6363                              &glmsg, pointerArgs);
6364    glContext->traceGLMessage(&glmsg);
6365}
6366
6367void GLTrace_glEndQuery(GLenum target) {
6368    GLMessage glmsg;
6369    GLTraceContext *glContext = getGLTraceContext();
6370
6371    glmsg.set_function(GLMessage::glEndQuery);
6372
6373    // copy argument target
6374    GLMessage_DataType *arg_target = glmsg.add_args();
6375    arg_target->set_isarray(false);
6376    arg_target->set_type(GLMessage::DataType::ENUM);
6377    arg_target->add_intvalue((int)target);
6378
6379    // call function
6380    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6381    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6382    glContext->hooks->gl.glEndQuery(target);
6383    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6384    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6385
6386    void *pointerArgs[] = {
6387    };
6388
6389    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6390                              threadStartTime, threadEndTime,
6391                              &glmsg, pointerArgs);
6392    glContext->traceGLMessage(&glmsg);
6393}
6394
6395void GLTrace_glGetQueryiv(GLenum target, GLenum pname, GLint* params) {
6396    GLMessage glmsg;
6397    GLTraceContext *glContext = getGLTraceContext();
6398
6399    glmsg.set_function(GLMessage::glGetQueryiv);
6400
6401    // copy argument target
6402    GLMessage_DataType *arg_target = glmsg.add_args();
6403    arg_target->set_isarray(false);
6404    arg_target->set_type(GLMessage::DataType::ENUM);
6405    arg_target->add_intvalue((int)target);
6406
6407    // copy argument pname
6408    GLMessage_DataType *arg_pname = glmsg.add_args();
6409    arg_pname->set_isarray(false);
6410    arg_pname->set_type(GLMessage::DataType::ENUM);
6411    arg_pname->add_intvalue((int)pname);
6412
6413    // copy argument params
6414    GLMessage_DataType *arg_params = glmsg.add_args();
6415    arg_params->set_isarray(false);
6416    arg_params->set_type(GLMessage::DataType::INT64);
6417    arg_params->add_int64value((uintptr_t)params);
6418
6419    // call function
6420    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6421    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6422    glContext->hooks->gl.glGetQueryiv(target, pname, params);
6423    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6424    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6425
6426    void *pointerArgs[] = {
6427        (void *) params,
6428    };
6429
6430    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6431                              threadStartTime, threadEndTime,
6432                              &glmsg, pointerArgs);
6433    glContext->traceGLMessage(&glmsg);
6434}
6435
6436void GLTrace_glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params) {
6437    GLMessage glmsg;
6438    GLTraceContext *glContext = getGLTraceContext();
6439
6440    glmsg.set_function(GLMessage::glGetQueryObjectuiv);
6441
6442    // copy argument id
6443    GLMessage_DataType *arg_id = glmsg.add_args();
6444    arg_id->set_isarray(false);
6445    arg_id->set_type(GLMessage::DataType::INT);
6446    arg_id->add_intvalue(id);
6447
6448    // copy argument pname
6449    GLMessage_DataType *arg_pname = glmsg.add_args();
6450    arg_pname->set_isarray(false);
6451    arg_pname->set_type(GLMessage::DataType::ENUM);
6452    arg_pname->add_intvalue((int)pname);
6453
6454    // copy argument params
6455    GLMessage_DataType *arg_params = glmsg.add_args();
6456    arg_params->set_isarray(false);
6457    arg_params->set_type(GLMessage::DataType::INT64);
6458    arg_params->add_int64value((uintptr_t)params);
6459
6460    // call function
6461    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6462    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6463    glContext->hooks->gl.glGetQueryObjectuiv(id, pname, params);
6464    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6465    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6466
6467    void *pointerArgs[] = {
6468        (void *) params,
6469    };
6470
6471    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6472                              threadStartTime, threadEndTime,
6473                              &glmsg, pointerArgs);
6474    glContext->traceGLMessage(&glmsg);
6475}
6476
6477GLboolean GLTrace_glUnmapBuffer(GLenum target) {
6478    GLMessage glmsg;
6479    GLTraceContext *glContext = getGLTraceContext();
6480
6481    glmsg.set_function(GLMessage::glUnmapBuffer);
6482
6483    // copy argument target
6484    GLMessage_DataType *arg_target = glmsg.add_args();
6485    arg_target->set_isarray(false);
6486    arg_target->set_type(GLMessage::DataType::ENUM);
6487    arg_target->add_intvalue((int)target);
6488
6489    // call function
6490    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6491    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6492    GLboolean retValue = glContext->hooks->gl.glUnmapBuffer(target);
6493    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6494    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6495
6496    // set return value
6497    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
6498    rt->set_isarray(false);
6499    rt->set_type(GLMessage::DataType::BOOL);
6500    rt->add_boolvalue(retValue);
6501
6502    void *pointerArgs[] = {
6503    };
6504
6505    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6506                              threadStartTime, threadEndTime,
6507                              &glmsg, pointerArgs);
6508    glContext->traceGLMessage(&glmsg);
6509
6510    return retValue;
6511}
6512
6513void GLTrace_glGetBufferPointerv(GLenum target, GLenum pname, GLvoid** params) {
6514    GLMessage glmsg;
6515    GLTraceContext *glContext = getGLTraceContext();
6516
6517    glmsg.set_function(GLMessage::glGetBufferPointerv);
6518
6519    // copy argument target
6520    GLMessage_DataType *arg_target = glmsg.add_args();
6521    arg_target->set_isarray(false);
6522    arg_target->set_type(GLMessage::DataType::ENUM);
6523    arg_target->add_intvalue((int)target);
6524
6525    // copy argument pname
6526    GLMessage_DataType *arg_pname = glmsg.add_args();
6527    arg_pname->set_isarray(false);
6528    arg_pname->set_type(GLMessage::DataType::ENUM);
6529    arg_pname->add_intvalue((int)pname);
6530
6531    // copy argument params
6532    GLMessage_DataType *arg_params = glmsg.add_args();
6533    arg_params->set_isarray(false);
6534    arg_params->set_type(GLMessage::DataType::INT64);
6535    arg_params->add_int64value((uintptr_t)params);
6536
6537    // call function
6538    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6539    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6540    glContext->hooks->gl.glGetBufferPointerv(target, pname, params);
6541    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6542    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6543
6544    void *pointerArgs[] = {
6545        (void *) params,
6546    };
6547
6548    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6549                              threadStartTime, threadEndTime,
6550                              &glmsg, pointerArgs);
6551    glContext->traceGLMessage(&glmsg);
6552}
6553
6554void GLTrace_glDrawBuffers(GLsizei n, const GLenum* bufs) {
6555    GLMessage glmsg;
6556    GLTraceContext *glContext = getGLTraceContext();
6557
6558    glmsg.set_function(GLMessage::glDrawBuffers);
6559
6560    // copy argument n
6561    GLMessage_DataType *arg_n = glmsg.add_args();
6562    arg_n->set_isarray(false);
6563    arg_n->set_type(GLMessage::DataType::INT);
6564    arg_n->add_intvalue(n);
6565
6566    // copy argument bufs
6567    GLMessage_DataType *arg_bufs = glmsg.add_args();
6568    arg_bufs->set_isarray(false);
6569    arg_bufs->set_type(GLMessage::DataType::INT64);
6570    arg_bufs->add_int64value((uintptr_t)bufs);
6571
6572    // call function
6573    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6574    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6575    glContext->hooks->gl.glDrawBuffers(n, bufs);
6576    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6577    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6578
6579    void *pointerArgs[] = {
6580        (void *) bufs,
6581    };
6582
6583    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6584                              threadStartTime, threadEndTime,
6585                              &glmsg, pointerArgs);
6586    glContext->traceGLMessage(&glmsg);
6587}
6588
6589void GLTrace_glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
6590    GLMessage glmsg;
6591    GLTraceContext *glContext = getGLTraceContext();
6592
6593    glmsg.set_function(GLMessage::glUniformMatrix2x3fv);
6594
6595    // copy argument location
6596    GLMessage_DataType *arg_location = glmsg.add_args();
6597    arg_location->set_isarray(false);
6598    arg_location->set_type(GLMessage::DataType::INT);
6599    arg_location->add_intvalue(location);
6600
6601    // copy argument count
6602    GLMessage_DataType *arg_count = glmsg.add_args();
6603    arg_count->set_isarray(false);
6604    arg_count->set_type(GLMessage::DataType::INT);
6605    arg_count->add_intvalue(count);
6606
6607    // copy argument transpose
6608    GLMessage_DataType *arg_transpose = glmsg.add_args();
6609    arg_transpose->set_isarray(false);
6610    arg_transpose->set_type(GLMessage::DataType::BOOL);
6611    arg_transpose->add_boolvalue(transpose);
6612
6613    // copy argument value
6614    GLMessage_DataType *arg_value = glmsg.add_args();
6615    arg_value->set_isarray(false);
6616    arg_value->set_type(GLMessage::DataType::INT64);
6617    arg_value->add_int64value((uintptr_t)value);
6618
6619    // call function
6620    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6621    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6622    glContext->hooks->gl.glUniformMatrix2x3fv(location, count, transpose, value);
6623    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6624    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6625
6626    void *pointerArgs[] = {
6627        (void *) value,
6628    };
6629
6630    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6631                              threadStartTime, threadEndTime,
6632                              &glmsg, pointerArgs);
6633    glContext->traceGLMessage(&glmsg);
6634}
6635
6636void GLTrace_glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
6637    GLMessage glmsg;
6638    GLTraceContext *glContext = getGLTraceContext();
6639
6640    glmsg.set_function(GLMessage::glUniformMatrix3x2fv);
6641
6642    // copy argument location
6643    GLMessage_DataType *arg_location = glmsg.add_args();
6644    arg_location->set_isarray(false);
6645    arg_location->set_type(GLMessage::DataType::INT);
6646    arg_location->add_intvalue(location);
6647
6648    // copy argument count
6649    GLMessage_DataType *arg_count = glmsg.add_args();
6650    arg_count->set_isarray(false);
6651    arg_count->set_type(GLMessage::DataType::INT);
6652    arg_count->add_intvalue(count);
6653
6654    // copy argument transpose
6655    GLMessage_DataType *arg_transpose = glmsg.add_args();
6656    arg_transpose->set_isarray(false);
6657    arg_transpose->set_type(GLMessage::DataType::BOOL);
6658    arg_transpose->add_boolvalue(transpose);
6659
6660    // copy argument value
6661    GLMessage_DataType *arg_value = glmsg.add_args();
6662    arg_value->set_isarray(false);
6663    arg_value->set_type(GLMessage::DataType::INT64);
6664    arg_value->add_int64value((uintptr_t)value);
6665
6666    // call function
6667    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6668    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6669    glContext->hooks->gl.glUniformMatrix3x2fv(location, count, transpose, value);
6670    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6671    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6672
6673    void *pointerArgs[] = {
6674        (void *) value,
6675    };
6676
6677    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6678                              threadStartTime, threadEndTime,
6679                              &glmsg, pointerArgs);
6680    glContext->traceGLMessage(&glmsg);
6681}
6682
6683void GLTrace_glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
6684    GLMessage glmsg;
6685    GLTraceContext *glContext = getGLTraceContext();
6686
6687    glmsg.set_function(GLMessage::glUniformMatrix2x4fv);
6688
6689    // copy argument location
6690    GLMessage_DataType *arg_location = glmsg.add_args();
6691    arg_location->set_isarray(false);
6692    arg_location->set_type(GLMessage::DataType::INT);
6693    arg_location->add_intvalue(location);
6694
6695    // copy argument count
6696    GLMessage_DataType *arg_count = glmsg.add_args();
6697    arg_count->set_isarray(false);
6698    arg_count->set_type(GLMessage::DataType::INT);
6699    arg_count->add_intvalue(count);
6700
6701    // copy argument transpose
6702    GLMessage_DataType *arg_transpose = glmsg.add_args();
6703    arg_transpose->set_isarray(false);
6704    arg_transpose->set_type(GLMessage::DataType::BOOL);
6705    arg_transpose->add_boolvalue(transpose);
6706
6707    // copy argument value
6708    GLMessage_DataType *arg_value = glmsg.add_args();
6709    arg_value->set_isarray(false);
6710    arg_value->set_type(GLMessage::DataType::INT64);
6711    arg_value->add_int64value((uintptr_t)value);
6712
6713    // call function
6714    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6715    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6716    glContext->hooks->gl.glUniformMatrix2x4fv(location, count, transpose, value);
6717    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6718    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6719
6720    void *pointerArgs[] = {
6721        (void *) value,
6722    };
6723
6724    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6725                              threadStartTime, threadEndTime,
6726                              &glmsg, pointerArgs);
6727    glContext->traceGLMessage(&glmsg);
6728}
6729
6730void GLTrace_glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
6731    GLMessage glmsg;
6732    GLTraceContext *glContext = getGLTraceContext();
6733
6734    glmsg.set_function(GLMessage::glUniformMatrix4x2fv);
6735
6736    // copy argument location
6737    GLMessage_DataType *arg_location = glmsg.add_args();
6738    arg_location->set_isarray(false);
6739    arg_location->set_type(GLMessage::DataType::INT);
6740    arg_location->add_intvalue(location);
6741
6742    // copy argument count
6743    GLMessage_DataType *arg_count = glmsg.add_args();
6744    arg_count->set_isarray(false);
6745    arg_count->set_type(GLMessage::DataType::INT);
6746    arg_count->add_intvalue(count);
6747
6748    // copy argument transpose
6749    GLMessage_DataType *arg_transpose = glmsg.add_args();
6750    arg_transpose->set_isarray(false);
6751    arg_transpose->set_type(GLMessage::DataType::BOOL);
6752    arg_transpose->add_boolvalue(transpose);
6753
6754    // copy argument value
6755    GLMessage_DataType *arg_value = glmsg.add_args();
6756    arg_value->set_isarray(false);
6757    arg_value->set_type(GLMessage::DataType::INT64);
6758    arg_value->add_int64value((uintptr_t)value);
6759
6760    // call function
6761    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6762    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6763    glContext->hooks->gl.glUniformMatrix4x2fv(location, count, transpose, value);
6764    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6765    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6766
6767    void *pointerArgs[] = {
6768        (void *) value,
6769    };
6770
6771    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6772                              threadStartTime, threadEndTime,
6773                              &glmsg, pointerArgs);
6774    glContext->traceGLMessage(&glmsg);
6775}
6776
6777void GLTrace_glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
6778    GLMessage glmsg;
6779    GLTraceContext *glContext = getGLTraceContext();
6780
6781    glmsg.set_function(GLMessage::glUniformMatrix3x4fv);
6782
6783    // copy argument location
6784    GLMessage_DataType *arg_location = glmsg.add_args();
6785    arg_location->set_isarray(false);
6786    arg_location->set_type(GLMessage::DataType::INT);
6787    arg_location->add_intvalue(location);
6788
6789    // copy argument count
6790    GLMessage_DataType *arg_count = glmsg.add_args();
6791    arg_count->set_isarray(false);
6792    arg_count->set_type(GLMessage::DataType::INT);
6793    arg_count->add_intvalue(count);
6794
6795    // copy argument transpose
6796    GLMessage_DataType *arg_transpose = glmsg.add_args();
6797    arg_transpose->set_isarray(false);
6798    arg_transpose->set_type(GLMessage::DataType::BOOL);
6799    arg_transpose->add_boolvalue(transpose);
6800
6801    // copy argument value
6802    GLMessage_DataType *arg_value = glmsg.add_args();
6803    arg_value->set_isarray(false);
6804    arg_value->set_type(GLMessage::DataType::INT64);
6805    arg_value->add_int64value((uintptr_t)value);
6806
6807    // call function
6808    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6809    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6810    glContext->hooks->gl.glUniformMatrix3x4fv(location, count, transpose, value);
6811    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6812    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6813
6814    void *pointerArgs[] = {
6815        (void *) value,
6816    };
6817
6818    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6819                              threadStartTime, threadEndTime,
6820                              &glmsg, pointerArgs);
6821    glContext->traceGLMessage(&glmsg);
6822}
6823
6824void GLTrace_glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
6825    GLMessage glmsg;
6826    GLTraceContext *glContext = getGLTraceContext();
6827
6828    glmsg.set_function(GLMessage::glUniformMatrix4x3fv);
6829
6830    // copy argument location
6831    GLMessage_DataType *arg_location = glmsg.add_args();
6832    arg_location->set_isarray(false);
6833    arg_location->set_type(GLMessage::DataType::INT);
6834    arg_location->add_intvalue(location);
6835
6836    // copy argument count
6837    GLMessage_DataType *arg_count = glmsg.add_args();
6838    arg_count->set_isarray(false);
6839    arg_count->set_type(GLMessage::DataType::INT);
6840    arg_count->add_intvalue(count);
6841
6842    // copy argument transpose
6843    GLMessage_DataType *arg_transpose = glmsg.add_args();
6844    arg_transpose->set_isarray(false);
6845    arg_transpose->set_type(GLMessage::DataType::BOOL);
6846    arg_transpose->add_boolvalue(transpose);
6847
6848    // copy argument value
6849    GLMessage_DataType *arg_value = glmsg.add_args();
6850    arg_value->set_isarray(false);
6851    arg_value->set_type(GLMessage::DataType::INT64);
6852    arg_value->add_int64value((uintptr_t)value);
6853
6854    // call function
6855    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6856    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6857    glContext->hooks->gl.glUniformMatrix4x3fv(location, count, transpose, value);
6858    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6859    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6860
6861    void *pointerArgs[] = {
6862        (void *) value,
6863    };
6864
6865    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6866                              threadStartTime, threadEndTime,
6867                              &glmsg, pointerArgs);
6868    glContext->traceGLMessage(&glmsg);
6869}
6870
6871void GLTrace_glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {
6872    GLMessage glmsg;
6873    GLTraceContext *glContext = getGLTraceContext();
6874
6875    glmsg.set_function(GLMessage::glBlitFramebuffer);
6876
6877    // copy argument srcX0
6878    GLMessage_DataType *arg_srcX0 = glmsg.add_args();
6879    arg_srcX0->set_isarray(false);
6880    arg_srcX0->set_type(GLMessage::DataType::INT);
6881    arg_srcX0->add_intvalue(srcX0);
6882
6883    // copy argument srcY0
6884    GLMessage_DataType *arg_srcY0 = glmsg.add_args();
6885    arg_srcY0->set_isarray(false);
6886    arg_srcY0->set_type(GLMessage::DataType::INT);
6887    arg_srcY0->add_intvalue(srcY0);
6888
6889    // copy argument srcX1
6890    GLMessage_DataType *arg_srcX1 = glmsg.add_args();
6891    arg_srcX1->set_isarray(false);
6892    arg_srcX1->set_type(GLMessage::DataType::INT);
6893    arg_srcX1->add_intvalue(srcX1);
6894
6895    // copy argument srcY1
6896    GLMessage_DataType *arg_srcY1 = glmsg.add_args();
6897    arg_srcY1->set_isarray(false);
6898    arg_srcY1->set_type(GLMessage::DataType::INT);
6899    arg_srcY1->add_intvalue(srcY1);
6900
6901    // copy argument dstX0
6902    GLMessage_DataType *arg_dstX0 = glmsg.add_args();
6903    arg_dstX0->set_isarray(false);
6904    arg_dstX0->set_type(GLMessage::DataType::INT);
6905    arg_dstX0->add_intvalue(dstX0);
6906
6907    // copy argument dstY0
6908    GLMessage_DataType *arg_dstY0 = glmsg.add_args();
6909    arg_dstY0->set_isarray(false);
6910    arg_dstY0->set_type(GLMessage::DataType::INT);
6911    arg_dstY0->add_intvalue(dstY0);
6912
6913    // copy argument dstX1
6914    GLMessage_DataType *arg_dstX1 = glmsg.add_args();
6915    arg_dstX1->set_isarray(false);
6916    arg_dstX1->set_type(GLMessage::DataType::INT);
6917    arg_dstX1->add_intvalue(dstX1);
6918
6919    // copy argument dstY1
6920    GLMessage_DataType *arg_dstY1 = glmsg.add_args();
6921    arg_dstY1->set_isarray(false);
6922    arg_dstY1->set_type(GLMessage::DataType::INT);
6923    arg_dstY1->add_intvalue(dstY1);
6924
6925    // copy argument mask
6926    GLMessage_DataType *arg_mask = glmsg.add_args();
6927    arg_mask->set_isarray(false);
6928    arg_mask->set_type(GLMessage::DataType::INT);
6929    arg_mask->add_intvalue(mask);
6930
6931    // copy argument filter
6932    GLMessage_DataType *arg_filter = glmsg.add_args();
6933    arg_filter->set_isarray(false);
6934    arg_filter->set_type(GLMessage::DataType::ENUM);
6935    arg_filter->add_intvalue((int)filter);
6936
6937    // call function
6938    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6939    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6940    glContext->hooks->gl.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
6941    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6942    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6943
6944    void *pointerArgs[] = {
6945    };
6946
6947    fixupGLMessage(glContext, wallStartTime, wallEndTime,
6948                              threadStartTime, threadEndTime,
6949                              &glmsg, pointerArgs);
6950    glContext->traceGLMessage(&glmsg);
6951}
6952
6953void GLTrace_glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
6954    GLMessage glmsg;
6955    GLTraceContext *glContext = getGLTraceContext();
6956
6957    glmsg.set_function(GLMessage::glRenderbufferStorageMultisample);
6958
6959    // copy argument target
6960    GLMessage_DataType *arg_target = glmsg.add_args();
6961    arg_target->set_isarray(false);
6962    arg_target->set_type(GLMessage::DataType::ENUM);
6963    arg_target->add_intvalue((int)target);
6964
6965    // copy argument samples
6966    GLMessage_DataType *arg_samples = glmsg.add_args();
6967    arg_samples->set_isarray(false);
6968    arg_samples->set_type(GLMessage::DataType::INT);
6969    arg_samples->add_intvalue(samples);
6970
6971    // copy argument internalformat
6972    GLMessage_DataType *arg_internalformat = glmsg.add_args();
6973    arg_internalformat->set_isarray(false);
6974    arg_internalformat->set_type(GLMessage::DataType::ENUM);
6975    arg_internalformat->add_intvalue((int)internalformat);
6976
6977    // copy argument width
6978    GLMessage_DataType *arg_width = glmsg.add_args();
6979    arg_width->set_isarray(false);
6980    arg_width->set_type(GLMessage::DataType::INT);
6981    arg_width->add_intvalue(width);
6982
6983    // copy argument height
6984    GLMessage_DataType *arg_height = glmsg.add_args();
6985    arg_height->set_isarray(false);
6986    arg_height->set_type(GLMessage::DataType::INT);
6987    arg_height->add_intvalue(height);
6988
6989    // call function
6990    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
6991    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
6992    glContext->hooks->gl.glRenderbufferStorageMultisample(target, samples, internalformat, width, height);
6993    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
6994    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
6995
6996    void *pointerArgs[] = {
6997    };
6998
6999    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7000                              threadStartTime, threadEndTime,
7001                              &glmsg, pointerArgs);
7002    glContext->traceGLMessage(&glmsg);
7003}
7004
7005void GLTrace_glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) {
7006    GLMessage glmsg;
7007    GLTraceContext *glContext = getGLTraceContext();
7008
7009    glmsg.set_function(GLMessage::glFramebufferTextureLayer);
7010
7011    // copy argument target
7012    GLMessage_DataType *arg_target = glmsg.add_args();
7013    arg_target->set_isarray(false);
7014    arg_target->set_type(GLMessage::DataType::ENUM);
7015    arg_target->add_intvalue((int)target);
7016
7017    // copy argument attachment
7018    GLMessage_DataType *arg_attachment = glmsg.add_args();
7019    arg_attachment->set_isarray(false);
7020    arg_attachment->set_type(GLMessage::DataType::ENUM);
7021    arg_attachment->add_intvalue((int)attachment);
7022
7023    // copy argument texture
7024    GLMessage_DataType *arg_texture = glmsg.add_args();
7025    arg_texture->set_isarray(false);
7026    arg_texture->set_type(GLMessage::DataType::INT);
7027    arg_texture->add_intvalue(texture);
7028
7029    // copy argument level
7030    GLMessage_DataType *arg_level = glmsg.add_args();
7031    arg_level->set_isarray(false);
7032    arg_level->set_type(GLMessage::DataType::INT);
7033    arg_level->add_intvalue(level);
7034
7035    // copy argument layer
7036    GLMessage_DataType *arg_layer = glmsg.add_args();
7037    arg_layer->set_isarray(false);
7038    arg_layer->set_type(GLMessage::DataType::INT);
7039    arg_layer->add_intvalue(layer);
7040
7041    // call function
7042    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7043    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7044    glContext->hooks->gl.glFramebufferTextureLayer(target, attachment, texture, level, layer);
7045    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7046    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7047
7048    void *pointerArgs[] = {
7049    };
7050
7051    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7052                              threadStartTime, threadEndTime,
7053                              &glmsg, pointerArgs);
7054    glContext->traceGLMessage(&glmsg);
7055}
7056
7057GLvoid* GLTrace_glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) {
7058    GLMessage glmsg;
7059    GLTraceContext *glContext = getGLTraceContext();
7060
7061    glmsg.set_function(GLMessage::glMapBufferRange);
7062
7063    // copy argument target
7064    GLMessage_DataType *arg_target = glmsg.add_args();
7065    arg_target->set_isarray(false);
7066    arg_target->set_type(GLMessage::DataType::ENUM);
7067    arg_target->add_intvalue((int)target);
7068
7069    // copy argument offset
7070    GLMessage_DataType *arg_offset = glmsg.add_args();
7071    arg_offset->set_isarray(false);
7072    arg_offset->set_type(GLMessage::DataType::INT);
7073    arg_offset->add_intvalue(offset);
7074
7075    // copy argument length
7076    GLMessage_DataType *arg_length = glmsg.add_args();
7077    arg_length->set_isarray(false);
7078    arg_length->set_type(GLMessage::DataType::INT);
7079    arg_length->add_intvalue(length);
7080
7081    // copy argument access
7082    GLMessage_DataType *arg_access = glmsg.add_args();
7083    arg_access->set_isarray(false);
7084    arg_access->set_type(GLMessage::DataType::INT);
7085    arg_access->add_intvalue(access);
7086
7087    // call function
7088    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7089    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7090    GLvoid* retValue = glContext->hooks->gl.glMapBufferRange(target, offset, length, access);
7091    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7092    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7093
7094    // set return value
7095    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
7096    rt->set_isarray(false);
7097    rt->set_type(GLMessage::DataType::INT64);
7098    rt->add_int64value((uintptr_t)retValue);
7099
7100    void *pointerArgs[] = {
7101        (void *) retValue,
7102    };
7103
7104    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7105                              threadStartTime, threadEndTime,
7106                              &glmsg, pointerArgs);
7107    glContext->traceGLMessage(&glmsg);
7108
7109    return retValue;
7110}
7111
7112void GLTrace_glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length) {
7113    GLMessage glmsg;
7114    GLTraceContext *glContext = getGLTraceContext();
7115
7116    glmsg.set_function(GLMessage::glFlushMappedBufferRange);
7117
7118    // copy argument target
7119    GLMessage_DataType *arg_target = glmsg.add_args();
7120    arg_target->set_isarray(false);
7121    arg_target->set_type(GLMessage::DataType::ENUM);
7122    arg_target->add_intvalue((int)target);
7123
7124    // copy argument offset
7125    GLMessage_DataType *arg_offset = glmsg.add_args();
7126    arg_offset->set_isarray(false);
7127    arg_offset->set_type(GLMessage::DataType::INT);
7128    arg_offset->add_intvalue(offset);
7129
7130    // copy argument length
7131    GLMessage_DataType *arg_length = glmsg.add_args();
7132    arg_length->set_isarray(false);
7133    arg_length->set_type(GLMessage::DataType::INT);
7134    arg_length->add_intvalue(length);
7135
7136    // call function
7137    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7138    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7139    glContext->hooks->gl.glFlushMappedBufferRange(target, offset, length);
7140    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7141    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7142
7143    void *pointerArgs[] = {
7144    };
7145
7146    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7147                              threadStartTime, threadEndTime,
7148                              &glmsg, pointerArgs);
7149    glContext->traceGLMessage(&glmsg);
7150}
7151
7152void GLTrace_glBindVertexArray(GLuint array) {
7153    GLMessage glmsg;
7154    GLTraceContext *glContext = getGLTraceContext();
7155
7156    glmsg.set_function(GLMessage::glBindVertexArray);
7157
7158    // copy argument array
7159    GLMessage_DataType *arg_array = glmsg.add_args();
7160    arg_array->set_isarray(false);
7161    arg_array->set_type(GLMessage::DataType::INT);
7162    arg_array->add_intvalue(array);
7163
7164    // call function
7165    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7166    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7167    glContext->hooks->gl.glBindVertexArray(array);
7168    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7169    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7170
7171    void *pointerArgs[] = {
7172    };
7173
7174    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7175                              threadStartTime, threadEndTime,
7176                              &glmsg, pointerArgs);
7177    glContext->traceGLMessage(&glmsg);
7178}
7179
7180void GLTrace_glDeleteVertexArrays(GLsizei n, const GLuint* arrays) {
7181    GLMessage glmsg;
7182    GLTraceContext *glContext = getGLTraceContext();
7183
7184    glmsg.set_function(GLMessage::glDeleteVertexArrays);
7185
7186    // copy argument n
7187    GLMessage_DataType *arg_n = glmsg.add_args();
7188    arg_n->set_isarray(false);
7189    arg_n->set_type(GLMessage::DataType::INT);
7190    arg_n->add_intvalue(n);
7191
7192    // copy argument arrays
7193    GLMessage_DataType *arg_arrays = glmsg.add_args();
7194    arg_arrays->set_isarray(false);
7195    arg_arrays->set_type(GLMessage::DataType::INT64);
7196    arg_arrays->add_int64value((uintptr_t)arrays);
7197
7198    // call function
7199    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7200    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7201    glContext->hooks->gl.glDeleteVertexArrays(n, arrays);
7202    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7203    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7204
7205    void *pointerArgs[] = {
7206        (void *) arrays,
7207    };
7208
7209    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7210                              threadStartTime, threadEndTime,
7211                              &glmsg, pointerArgs);
7212    glContext->traceGLMessage(&glmsg);
7213}
7214
7215void GLTrace_glGenVertexArrays(GLsizei n, GLuint* arrays) {
7216    GLMessage glmsg;
7217    GLTraceContext *glContext = getGLTraceContext();
7218
7219    glmsg.set_function(GLMessage::glGenVertexArrays);
7220
7221    // copy argument n
7222    GLMessage_DataType *arg_n = glmsg.add_args();
7223    arg_n->set_isarray(false);
7224    arg_n->set_type(GLMessage::DataType::INT);
7225    arg_n->add_intvalue(n);
7226
7227    // copy argument arrays
7228    GLMessage_DataType *arg_arrays = glmsg.add_args();
7229    arg_arrays->set_isarray(false);
7230    arg_arrays->set_type(GLMessage::DataType::INT64);
7231    arg_arrays->add_int64value((uintptr_t)arrays);
7232
7233    // call function
7234    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7235    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7236    glContext->hooks->gl.glGenVertexArrays(n, arrays);
7237    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7238    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7239
7240    void *pointerArgs[] = {
7241        (void *) arrays,
7242    };
7243
7244    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7245                              threadStartTime, threadEndTime,
7246                              &glmsg, pointerArgs);
7247    glContext->traceGLMessage(&glmsg);
7248}
7249
7250GLboolean GLTrace_glIsVertexArray(GLuint array) {
7251    GLMessage glmsg;
7252    GLTraceContext *glContext = getGLTraceContext();
7253
7254    glmsg.set_function(GLMessage::glIsVertexArray);
7255
7256    // copy argument array
7257    GLMessage_DataType *arg_array = glmsg.add_args();
7258    arg_array->set_isarray(false);
7259    arg_array->set_type(GLMessage::DataType::INT);
7260    arg_array->add_intvalue(array);
7261
7262    // call function
7263    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7264    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7265    GLboolean retValue = glContext->hooks->gl.glIsVertexArray(array);
7266    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7267    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7268
7269    // set return value
7270    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
7271    rt->set_isarray(false);
7272    rt->set_type(GLMessage::DataType::BOOL);
7273    rt->add_boolvalue(retValue);
7274
7275    void *pointerArgs[] = {
7276    };
7277
7278    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7279                              threadStartTime, threadEndTime,
7280                              &glmsg, pointerArgs);
7281    glContext->traceGLMessage(&glmsg);
7282
7283    return retValue;
7284}
7285
7286void GLTrace_glGetIntegeri_v(GLenum target, GLuint index, GLint* data) {
7287    GLMessage glmsg;
7288    GLTraceContext *glContext = getGLTraceContext();
7289
7290    glmsg.set_function(GLMessage::glGetIntegeri_v);
7291
7292    // copy argument target
7293    GLMessage_DataType *arg_target = glmsg.add_args();
7294    arg_target->set_isarray(false);
7295    arg_target->set_type(GLMessage::DataType::ENUM);
7296    arg_target->add_intvalue((int)target);
7297
7298    // copy argument index
7299    GLMessage_DataType *arg_index = glmsg.add_args();
7300    arg_index->set_isarray(false);
7301    arg_index->set_type(GLMessage::DataType::INT);
7302    arg_index->add_intvalue(index);
7303
7304    // copy argument data
7305    GLMessage_DataType *arg_data = glmsg.add_args();
7306    arg_data->set_isarray(false);
7307    arg_data->set_type(GLMessage::DataType::INT64);
7308    arg_data->add_int64value((uintptr_t)data);
7309
7310    // call function
7311    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7312    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7313    glContext->hooks->gl.glGetIntegeri_v(target, index, data);
7314    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7315    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7316
7317    void *pointerArgs[] = {
7318        (void *) data,
7319    };
7320
7321    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7322                              threadStartTime, threadEndTime,
7323                              &glmsg, pointerArgs);
7324    glContext->traceGLMessage(&glmsg);
7325}
7326
7327void GLTrace_glBeginTransformFeedback(GLenum primitiveMode) {
7328    GLMessage glmsg;
7329    GLTraceContext *glContext = getGLTraceContext();
7330
7331    glmsg.set_function(GLMessage::glBeginTransformFeedback);
7332
7333    // copy argument primitiveMode
7334    GLMessage_DataType *arg_primitiveMode = glmsg.add_args();
7335    arg_primitiveMode->set_isarray(false);
7336    arg_primitiveMode->set_type(GLMessage::DataType::ENUM);
7337    arg_primitiveMode->add_intvalue((int)primitiveMode);
7338
7339    // call function
7340    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7341    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7342    glContext->hooks->gl.glBeginTransformFeedback(primitiveMode);
7343    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7344    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7345
7346    void *pointerArgs[] = {
7347    };
7348
7349    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7350                              threadStartTime, threadEndTime,
7351                              &glmsg, pointerArgs);
7352    glContext->traceGLMessage(&glmsg);
7353}
7354
7355void GLTrace_glEndTransformFeedback(void) {
7356    GLMessage glmsg;
7357    GLTraceContext *glContext = getGLTraceContext();
7358
7359    glmsg.set_function(GLMessage::glEndTransformFeedback);
7360
7361    // call function
7362    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7363    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7364    glContext->hooks->gl.glEndTransformFeedback();
7365    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7366    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7367
7368    void *pointerArgs[] = {
7369    };
7370
7371    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7372                              threadStartTime, threadEndTime,
7373                              &glmsg, pointerArgs);
7374    glContext->traceGLMessage(&glmsg);
7375}
7376
7377void GLTrace_glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) {
7378    GLMessage glmsg;
7379    GLTraceContext *glContext = getGLTraceContext();
7380
7381    glmsg.set_function(GLMessage::glBindBufferRange);
7382
7383    // copy argument target
7384    GLMessage_DataType *arg_target = glmsg.add_args();
7385    arg_target->set_isarray(false);
7386    arg_target->set_type(GLMessage::DataType::ENUM);
7387    arg_target->add_intvalue((int)target);
7388
7389    // copy argument index
7390    GLMessage_DataType *arg_index = glmsg.add_args();
7391    arg_index->set_isarray(false);
7392    arg_index->set_type(GLMessage::DataType::INT);
7393    arg_index->add_intvalue(index);
7394
7395    // copy argument buffer
7396    GLMessage_DataType *arg_buffer = glmsg.add_args();
7397    arg_buffer->set_isarray(false);
7398    arg_buffer->set_type(GLMessage::DataType::INT);
7399    arg_buffer->add_intvalue(buffer);
7400
7401    // copy argument offset
7402    GLMessage_DataType *arg_offset = glmsg.add_args();
7403    arg_offset->set_isarray(false);
7404    arg_offset->set_type(GLMessage::DataType::INT);
7405    arg_offset->add_intvalue(offset);
7406
7407    // copy argument size
7408    GLMessage_DataType *arg_size = glmsg.add_args();
7409    arg_size->set_isarray(false);
7410    arg_size->set_type(GLMessage::DataType::INT);
7411    arg_size->add_intvalue(size);
7412
7413    // call function
7414    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7415    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7416    glContext->hooks->gl.glBindBufferRange(target, index, buffer, offset, size);
7417    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7418    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7419
7420    void *pointerArgs[] = {
7421    };
7422
7423    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7424                              threadStartTime, threadEndTime,
7425                              &glmsg, pointerArgs);
7426    glContext->traceGLMessage(&glmsg);
7427}
7428
7429void GLTrace_glBindBufferBase(GLenum target, GLuint index, GLuint buffer) {
7430    GLMessage glmsg;
7431    GLTraceContext *glContext = getGLTraceContext();
7432
7433    glmsg.set_function(GLMessage::glBindBufferBase);
7434
7435    // copy argument target
7436    GLMessage_DataType *arg_target = glmsg.add_args();
7437    arg_target->set_isarray(false);
7438    arg_target->set_type(GLMessage::DataType::ENUM);
7439    arg_target->add_intvalue((int)target);
7440
7441    // copy argument index
7442    GLMessage_DataType *arg_index = glmsg.add_args();
7443    arg_index->set_isarray(false);
7444    arg_index->set_type(GLMessage::DataType::INT);
7445    arg_index->add_intvalue(index);
7446
7447    // copy argument buffer
7448    GLMessage_DataType *arg_buffer = glmsg.add_args();
7449    arg_buffer->set_isarray(false);
7450    arg_buffer->set_type(GLMessage::DataType::INT);
7451    arg_buffer->add_intvalue(buffer);
7452
7453    // call function
7454    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7455    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7456    glContext->hooks->gl.glBindBufferBase(target, index, buffer);
7457    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7458    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7459
7460    void *pointerArgs[] = {
7461    };
7462
7463    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7464                              threadStartTime, threadEndTime,
7465                              &glmsg, pointerArgs);
7466    glContext->traceGLMessage(&glmsg);
7467}
7468
7469void GLTrace_glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode) {
7470    GLMessage glmsg;
7471    GLTraceContext *glContext = getGLTraceContext();
7472
7473    glmsg.set_function(GLMessage::glTransformFeedbackVaryings);
7474
7475    // copy argument program
7476    GLMessage_DataType *arg_program = glmsg.add_args();
7477    arg_program->set_isarray(false);
7478    arg_program->set_type(GLMessage::DataType::INT);
7479    arg_program->add_intvalue(program);
7480
7481    // copy argument count
7482    GLMessage_DataType *arg_count = glmsg.add_args();
7483    arg_count->set_isarray(false);
7484    arg_count->set_type(GLMessage::DataType::INT);
7485    arg_count->add_intvalue(count);
7486
7487    // copy argument varyings
7488    GLMessage_DataType *arg_varyings = glmsg.add_args();
7489    arg_varyings->set_isarray(false);
7490    arg_varyings->set_type(GLMessage::DataType::INT64);
7491    arg_varyings->add_int64value((uintptr_t)varyings);
7492
7493    // copy argument bufferMode
7494    GLMessage_DataType *arg_bufferMode = glmsg.add_args();
7495    arg_bufferMode->set_isarray(false);
7496    arg_bufferMode->set_type(GLMessage::DataType::ENUM);
7497    arg_bufferMode->add_intvalue((int)bufferMode);
7498
7499    // call function
7500    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7501    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7502    glContext->hooks->gl.glTransformFeedbackVaryings(program, count, varyings, bufferMode);
7503    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7504    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7505
7506    void *pointerArgs[] = {
7507        (void *) varyings,
7508    };
7509
7510    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7511                              threadStartTime, threadEndTime,
7512                              &glmsg, pointerArgs);
7513    glContext->traceGLMessage(&glmsg);
7514}
7515
7516void GLTrace_glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name) {
7517    GLMessage glmsg;
7518    GLTraceContext *glContext = getGLTraceContext();
7519
7520    glmsg.set_function(GLMessage::glGetTransformFeedbackVarying);
7521
7522    // copy argument program
7523    GLMessage_DataType *arg_program = glmsg.add_args();
7524    arg_program->set_isarray(false);
7525    arg_program->set_type(GLMessage::DataType::INT);
7526    arg_program->add_intvalue(program);
7527
7528    // copy argument index
7529    GLMessage_DataType *arg_index = glmsg.add_args();
7530    arg_index->set_isarray(false);
7531    arg_index->set_type(GLMessage::DataType::INT);
7532    arg_index->add_intvalue(index);
7533
7534    // copy argument bufSize
7535    GLMessage_DataType *arg_bufSize = glmsg.add_args();
7536    arg_bufSize->set_isarray(false);
7537    arg_bufSize->set_type(GLMessage::DataType::INT);
7538    arg_bufSize->add_intvalue(bufSize);
7539
7540    // copy argument length
7541    GLMessage_DataType *arg_length = glmsg.add_args();
7542    arg_length->set_isarray(false);
7543    arg_length->set_type(GLMessage::DataType::INT64);
7544    arg_length->add_int64value((uintptr_t)length);
7545
7546    // copy argument size
7547    GLMessage_DataType *arg_size = glmsg.add_args();
7548    arg_size->set_isarray(false);
7549    arg_size->set_type(GLMessage::DataType::INT64);
7550    arg_size->add_int64value((uintptr_t)size);
7551
7552    // copy argument type
7553    GLMessage_DataType *arg_type = glmsg.add_args();
7554    arg_type->set_isarray(false);
7555    arg_type->set_type(GLMessage::DataType::INT64);
7556    arg_type->add_int64value((uintptr_t)type);
7557
7558    // copy argument name
7559    GLMessage_DataType *arg_name = glmsg.add_args();
7560    arg_name->set_isarray(false);
7561    arg_name->set_type(GLMessage::DataType::INT64);
7562    arg_name->add_int64value((uintptr_t)name);
7563
7564    // call function
7565    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7566    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7567    glContext->hooks->gl.glGetTransformFeedbackVarying(program, index, bufSize, length, size, type, name);
7568    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7569    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7570
7571    void *pointerArgs[] = {
7572        (void *) length,
7573        (void *) size,
7574        (void *) type,
7575        (void *) name,
7576    };
7577
7578    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7579                              threadStartTime, threadEndTime,
7580                              &glmsg, pointerArgs);
7581    glContext->traceGLMessage(&glmsg);
7582}
7583
7584void GLTrace_glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer) {
7585    GLMessage glmsg;
7586    GLTraceContext *glContext = getGLTraceContext();
7587
7588    glmsg.set_function(GLMessage::glVertexAttribIPointer);
7589
7590    // copy argument index
7591    GLMessage_DataType *arg_index = glmsg.add_args();
7592    arg_index->set_isarray(false);
7593    arg_index->set_type(GLMessage::DataType::INT);
7594    arg_index->add_intvalue(index);
7595
7596    // copy argument size
7597    GLMessage_DataType *arg_size = glmsg.add_args();
7598    arg_size->set_isarray(false);
7599    arg_size->set_type(GLMessage::DataType::INT);
7600    arg_size->add_intvalue(size);
7601
7602    // copy argument type
7603    GLMessage_DataType *arg_type = glmsg.add_args();
7604    arg_type->set_isarray(false);
7605    arg_type->set_type(GLMessage::DataType::ENUM);
7606    arg_type->add_intvalue((int)type);
7607
7608    // copy argument stride
7609    GLMessage_DataType *arg_stride = glmsg.add_args();
7610    arg_stride->set_isarray(false);
7611    arg_stride->set_type(GLMessage::DataType::INT);
7612    arg_stride->add_intvalue(stride);
7613
7614    // copy argument pointer
7615    GLMessage_DataType *arg_pointer = glmsg.add_args();
7616    arg_pointer->set_isarray(false);
7617    arg_pointer->set_type(GLMessage::DataType::INT64);
7618    arg_pointer->add_int64value((uintptr_t)pointer);
7619
7620    // call function
7621    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7622    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7623    glContext->hooks->gl.glVertexAttribIPointer(index, size, type, stride, pointer);
7624    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7625    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7626
7627    void *pointerArgs[] = {
7628        (void *) pointer,
7629    };
7630
7631    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7632                              threadStartTime, threadEndTime,
7633                              &glmsg, pointerArgs);
7634    glContext->traceGLMessage(&glmsg);
7635}
7636
7637void GLTrace_glGetVertexAttribIiv(GLuint index, GLenum pname, GLint* params) {
7638    GLMessage glmsg;
7639    GLTraceContext *glContext = getGLTraceContext();
7640
7641    glmsg.set_function(GLMessage::glGetVertexAttribIiv);
7642
7643    // copy argument index
7644    GLMessage_DataType *arg_index = glmsg.add_args();
7645    arg_index->set_isarray(false);
7646    arg_index->set_type(GLMessage::DataType::INT);
7647    arg_index->add_intvalue(index);
7648
7649    // copy argument pname
7650    GLMessage_DataType *arg_pname = glmsg.add_args();
7651    arg_pname->set_isarray(false);
7652    arg_pname->set_type(GLMessage::DataType::ENUM);
7653    arg_pname->add_intvalue((int)pname);
7654
7655    // copy argument params
7656    GLMessage_DataType *arg_params = glmsg.add_args();
7657    arg_params->set_isarray(false);
7658    arg_params->set_type(GLMessage::DataType::INT64);
7659    arg_params->add_int64value((uintptr_t)params);
7660
7661    // call function
7662    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7663    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7664    glContext->hooks->gl.glGetVertexAttribIiv(index, pname, params);
7665    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7666    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7667
7668    void *pointerArgs[] = {
7669        (void *) params,
7670    };
7671
7672    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7673                              threadStartTime, threadEndTime,
7674                              &glmsg, pointerArgs);
7675    glContext->traceGLMessage(&glmsg);
7676}
7677
7678void GLTrace_glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params) {
7679    GLMessage glmsg;
7680    GLTraceContext *glContext = getGLTraceContext();
7681
7682    glmsg.set_function(GLMessage::glGetVertexAttribIuiv);
7683
7684    // copy argument index
7685    GLMessage_DataType *arg_index = glmsg.add_args();
7686    arg_index->set_isarray(false);
7687    arg_index->set_type(GLMessage::DataType::INT);
7688    arg_index->add_intvalue(index);
7689
7690    // copy argument pname
7691    GLMessage_DataType *arg_pname = glmsg.add_args();
7692    arg_pname->set_isarray(false);
7693    arg_pname->set_type(GLMessage::DataType::ENUM);
7694    arg_pname->add_intvalue((int)pname);
7695
7696    // copy argument params
7697    GLMessage_DataType *arg_params = glmsg.add_args();
7698    arg_params->set_isarray(false);
7699    arg_params->set_type(GLMessage::DataType::INT64);
7700    arg_params->add_int64value((uintptr_t)params);
7701
7702    // call function
7703    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7704    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7705    glContext->hooks->gl.glGetVertexAttribIuiv(index, pname, params);
7706    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7707    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7708
7709    void *pointerArgs[] = {
7710        (void *) params,
7711    };
7712
7713    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7714                              threadStartTime, threadEndTime,
7715                              &glmsg, pointerArgs);
7716    glContext->traceGLMessage(&glmsg);
7717}
7718
7719void GLTrace_glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w) {
7720    GLMessage glmsg;
7721    GLTraceContext *glContext = getGLTraceContext();
7722
7723    glmsg.set_function(GLMessage::glVertexAttribI4i);
7724
7725    // copy argument index
7726    GLMessage_DataType *arg_index = glmsg.add_args();
7727    arg_index->set_isarray(false);
7728    arg_index->set_type(GLMessage::DataType::INT);
7729    arg_index->add_intvalue(index);
7730
7731    // copy argument x
7732    GLMessage_DataType *arg_x = glmsg.add_args();
7733    arg_x->set_isarray(false);
7734    arg_x->set_type(GLMessage::DataType::INT);
7735    arg_x->add_intvalue(x);
7736
7737    // copy argument y
7738    GLMessage_DataType *arg_y = glmsg.add_args();
7739    arg_y->set_isarray(false);
7740    arg_y->set_type(GLMessage::DataType::INT);
7741    arg_y->add_intvalue(y);
7742
7743    // copy argument z
7744    GLMessage_DataType *arg_z = glmsg.add_args();
7745    arg_z->set_isarray(false);
7746    arg_z->set_type(GLMessage::DataType::INT);
7747    arg_z->add_intvalue(z);
7748
7749    // copy argument w
7750    GLMessage_DataType *arg_w = glmsg.add_args();
7751    arg_w->set_isarray(false);
7752    arg_w->set_type(GLMessage::DataType::INT);
7753    arg_w->add_intvalue(w);
7754
7755    // call function
7756    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7757    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7758    glContext->hooks->gl.glVertexAttribI4i(index, x, y, z, w);
7759    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7760    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7761
7762    void *pointerArgs[] = {
7763    };
7764
7765    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7766                              threadStartTime, threadEndTime,
7767                              &glmsg, pointerArgs);
7768    glContext->traceGLMessage(&glmsg);
7769}
7770
7771void GLTrace_glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) {
7772    GLMessage glmsg;
7773    GLTraceContext *glContext = getGLTraceContext();
7774
7775    glmsg.set_function(GLMessage::glVertexAttribI4ui);
7776
7777    // copy argument index
7778    GLMessage_DataType *arg_index = glmsg.add_args();
7779    arg_index->set_isarray(false);
7780    arg_index->set_type(GLMessage::DataType::INT);
7781    arg_index->add_intvalue(index);
7782
7783    // copy argument x
7784    GLMessage_DataType *arg_x = glmsg.add_args();
7785    arg_x->set_isarray(false);
7786    arg_x->set_type(GLMessage::DataType::INT);
7787    arg_x->add_intvalue(x);
7788
7789    // copy argument y
7790    GLMessage_DataType *arg_y = glmsg.add_args();
7791    arg_y->set_isarray(false);
7792    arg_y->set_type(GLMessage::DataType::INT);
7793    arg_y->add_intvalue(y);
7794
7795    // copy argument z
7796    GLMessage_DataType *arg_z = glmsg.add_args();
7797    arg_z->set_isarray(false);
7798    arg_z->set_type(GLMessage::DataType::INT);
7799    arg_z->add_intvalue(z);
7800
7801    // copy argument w
7802    GLMessage_DataType *arg_w = glmsg.add_args();
7803    arg_w->set_isarray(false);
7804    arg_w->set_type(GLMessage::DataType::INT);
7805    arg_w->add_intvalue(w);
7806
7807    // call function
7808    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7809    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7810    glContext->hooks->gl.glVertexAttribI4ui(index, x, y, z, w);
7811    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7812    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7813
7814    void *pointerArgs[] = {
7815    };
7816
7817    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7818                              threadStartTime, threadEndTime,
7819                              &glmsg, pointerArgs);
7820    glContext->traceGLMessage(&glmsg);
7821}
7822
7823void GLTrace_glVertexAttribI4iv(GLuint index, const GLint* v) {
7824    GLMessage glmsg;
7825    GLTraceContext *glContext = getGLTraceContext();
7826
7827    glmsg.set_function(GLMessage::glVertexAttribI4iv);
7828
7829    // copy argument index
7830    GLMessage_DataType *arg_index = glmsg.add_args();
7831    arg_index->set_isarray(false);
7832    arg_index->set_type(GLMessage::DataType::INT);
7833    arg_index->add_intvalue(index);
7834
7835    // copy argument v
7836    GLMessage_DataType *arg_v = glmsg.add_args();
7837    arg_v->set_isarray(false);
7838    arg_v->set_type(GLMessage::DataType::INT64);
7839    arg_v->add_int64value((uintptr_t)v);
7840
7841    // call function
7842    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7843    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7844    glContext->hooks->gl.glVertexAttribI4iv(index, v);
7845    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7846    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7847
7848    void *pointerArgs[] = {
7849        (void *) v,
7850    };
7851
7852    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7853                              threadStartTime, threadEndTime,
7854                              &glmsg, pointerArgs);
7855    glContext->traceGLMessage(&glmsg);
7856}
7857
7858void GLTrace_glVertexAttribI4uiv(GLuint index, const GLuint* v) {
7859    GLMessage glmsg;
7860    GLTraceContext *glContext = getGLTraceContext();
7861
7862    glmsg.set_function(GLMessage::glVertexAttribI4uiv);
7863
7864    // copy argument index
7865    GLMessage_DataType *arg_index = glmsg.add_args();
7866    arg_index->set_isarray(false);
7867    arg_index->set_type(GLMessage::DataType::INT);
7868    arg_index->add_intvalue(index);
7869
7870    // copy argument v
7871    GLMessage_DataType *arg_v = glmsg.add_args();
7872    arg_v->set_isarray(false);
7873    arg_v->set_type(GLMessage::DataType::INT64);
7874    arg_v->add_int64value((uintptr_t)v);
7875
7876    // call function
7877    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7878    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7879    glContext->hooks->gl.glVertexAttribI4uiv(index, v);
7880    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7881    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7882
7883    void *pointerArgs[] = {
7884        (void *) v,
7885    };
7886
7887    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7888                              threadStartTime, threadEndTime,
7889                              &glmsg, pointerArgs);
7890    glContext->traceGLMessage(&glmsg);
7891}
7892
7893void GLTrace_glGetUniformuiv(GLuint program, GLint location, GLuint* params) {
7894    GLMessage glmsg;
7895    GLTraceContext *glContext = getGLTraceContext();
7896
7897    glmsg.set_function(GLMessage::glGetUniformuiv);
7898
7899    // copy argument program
7900    GLMessage_DataType *arg_program = glmsg.add_args();
7901    arg_program->set_isarray(false);
7902    arg_program->set_type(GLMessage::DataType::INT);
7903    arg_program->add_intvalue(program);
7904
7905    // copy argument location
7906    GLMessage_DataType *arg_location = glmsg.add_args();
7907    arg_location->set_isarray(false);
7908    arg_location->set_type(GLMessage::DataType::INT);
7909    arg_location->add_intvalue(location);
7910
7911    // copy argument params
7912    GLMessage_DataType *arg_params = glmsg.add_args();
7913    arg_params->set_isarray(false);
7914    arg_params->set_type(GLMessage::DataType::INT64);
7915    arg_params->add_int64value((uintptr_t)params);
7916
7917    // call function
7918    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7919    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7920    glContext->hooks->gl.glGetUniformuiv(program, location, params);
7921    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7922    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7923
7924    void *pointerArgs[] = {
7925        (void *) params,
7926    };
7927
7928    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7929                              threadStartTime, threadEndTime,
7930                              &glmsg, pointerArgs);
7931    glContext->traceGLMessage(&glmsg);
7932}
7933
7934GLint GLTrace_glGetFragDataLocation(GLuint program, const GLchar *name) {
7935    GLMessage glmsg;
7936    GLTraceContext *glContext = getGLTraceContext();
7937
7938    glmsg.set_function(GLMessage::glGetFragDataLocation);
7939
7940    // copy argument program
7941    GLMessage_DataType *arg_program = glmsg.add_args();
7942    arg_program->set_isarray(false);
7943    arg_program->set_type(GLMessage::DataType::INT);
7944    arg_program->add_intvalue(program);
7945
7946    // copy argument name
7947    GLMessage_DataType *arg_name = glmsg.add_args();
7948    arg_name->set_isarray(false);
7949    arg_name->set_type(GLMessage::DataType::INT64);
7950    arg_name->add_int64value((uintptr_t)name);
7951
7952    // call function
7953    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7954    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7955    GLint retValue = glContext->hooks->gl.glGetFragDataLocation(program, name);
7956    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
7957    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
7958
7959    // set return value
7960    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
7961    rt->set_isarray(false);
7962    rt->set_type(GLMessage::DataType::INT);
7963    rt->add_intvalue(retValue);
7964
7965    void *pointerArgs[] = {
7966        (void *) name,
7967    };
7968
7969    fixupGLMessage(glContext, wallStartTime, wallEndTime,
7970                              threadStartTime, threadEndTime,
7971                              &glmsg, pointerArgs);
7972    glContext->traceGLMessage(&glmsg);
7973
7974    return retValue;
7975}
7976
7977void GLTrace_glUniform1ui(GLint location, GLuint v0) {
7978    GLMessage glmsg;
7979    GLTraceContext *glContext = getGLTraceContext();
7980
7981    glmsg.set_function(GLMessage::glUniform1ui);
7982
7983    // copy argument location
7984    GLMessage_DataType *arg_location = glmsg.add_args();
7985    arg_location->set_isarray(false);
7986    arg_location->set_type(GLMessage::DataType::INT);
7987    arg_location->add_intvalue(location);
7988
7989    // copy argument v0
7990    GLMessage_DataType *arg_v0 = glmsg.add_args();
7991    arg_v0->set_isarray(false);
7992    arg_v0->set_type(GLMessage::DataType::INT);
7993    arg_v0->add_intvalue(v0);
7994
7995    // call function
7996    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
7997    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
7998    glContext->hooks->gl.glUniform1ui(location, v0);
7999    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8000    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8001
8002    void *pointerArgs[] = {
8003    };
8004
8005    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8006                              threadStartTime, threadEndTime,
8007                              &glmsg, pointerArgs);
8008    glContext->traceGLMessage(&glmsg);
8009}
8010
8011void GLTrace_glUniform2ui(GLint location, GLuint v0, GLuint v1) {
8012    GLMessage glmsg;
8013    GLTraceContext *glContext = getGLTraceContext();
8014
8015    glmsg.set_function(GLMessage::glUniform2ui);
8016
8017    // copy argument location
8018    GLMessage_DataType *arg_location = glmsg.add_args();
8019    arg_location->set_isarray(false);
8020    arg_location->set_type(GLMessage::DataType::INT);
8021    arg_location->add_intvalue(location);
8022
8023    // copy argument v0
8024    GLMessage_DataType *arg_v0 = glmsg.add_args();
8025    arg_v0->set_isarray(false);
8026    arg_v0->set_type(GLMessage::DataType::INT);
8027    arg_v0->add_intvalue(v0);
8028
8029    // copy argument v1
8030    GLMessage_DataType *arg_v1 = glmsg.add_args();
8031    arg_v1->set_isarray(false);
8032    arg_v1->set_type(GLMessage::DataType::INT);
8033    arg_v1->add_intvalue(v1);
8034
8035    // call function
8036    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8037    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8038    glContext->hooks->gl.glUniform2ui(location, v0, v1);
8039    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8040    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8041
8042    void *pointerArgs[] = {
8043    };
8044
8045    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8046                              threadStartTime, threadEndTime,
8047                              &glmsg, pointerArgs);
8048    glContext->traceGLMessage(&glmsg);
8049}
8050
8051void GLTrace_glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2) {
8052    GLMessage glmsg;
8053    GLTraceContext *glContext = getGLTraceContext();
8054
8055    glmsg.set_function(GLMessage::glUniform3ui);
8056
8057    // copy argument location
8058    GLMessage_DataType *arg_location = glmsg.add_args();
8059    arg_location->set_isarray(false);
8060    arg_location->set_type(GLMessage::DataType::INT);
8061    arg_location->add_intvalue(location);
8062
8063    // copy argument v0
8064    GLMessage_DataType *arg_v0 = glmsg.add_args();
8065    arg_v0->set_isarray(false);
8066    arg_v0->set_type(GLMessage::DataType::INT);
8067    arg_v0->add_intvalue(v0);
8068
8069    // copy argument v1
8070    GLMessage_DataType *arg_v1 = glmsg.add_args();
8071    arg_v1->set_isarray(false);
8072    arg_v1->set_type(GLMessage::DataType::INT);
8073    arg_v1->add_intvalue(v1);
8074
8075    // copy argument v2
8076    GLMessage_DataType *arg_v2 = glmsg.add_args();
8077    arg_v2->set_isarray(false);
8078    arg_v2->set_type(GLMessage::DataType::INT);
8079    arg_v2->add_intvalue(v2);
8080
8081    // call function
8082    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8083    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8084    glContext->hooks->gl.glUniform3ui(location, v0, v1, v2);
8085    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8086    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8087
8088    void *pointerArgs[] = {
8089    };
8090
8091    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8092                              threadStartTime, threadEndTime,
8093                              &glmsg, pointerArgs);
8094    glContext->traceGLMessage(&glmsg);
8095}
8096
8097void GLTrace_glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) {
8098    GLMessage glmsg;
8099    GLTraceContext *glContext = getGLTraceContext();
8100
8101    glmsg.set_function(GLMessage::glUniform4ui);
8102
8103    // copy argument location
8104    GLMessage_DataType *arg_location = glmsg.add_args();
8105    arg_location->set_isarray(false);
8106    arg_location->set_type(GLMessage::DataType::INT);
8107    arg_location->add_intvalue(location);
8108
8109    // copy argument v0
8110    GLMessage_DataType *arg_v0 = glmsg.add_args();
8111    arg_v0->set_isarray(false);
8112    arg_v0->set_type(GLMessage::DataType::INT);
8113    arg_v0->add_intvalue(v0);
8114
8115    // copy argument v1
8116    GLMessage_DataType *arg_v1 = glmsg.add_args();
8117    arg_v1->set_isarray(false);
8118    arg_v1->set_type(GLMessage::DataType::INT);
8119    arg_v1->add_intvalue(v1);
8120
8121    // copy argument v2
8122    GLMessage_DataType *arg_v2 = glmsg.add_args();
8123    arg_v2->set_isarray(false);
8124    arg_v2->set_type(GLMessage::DataType::INT);
8125    arg_v2->add_intvalue(v2);
8126
8127    // copy argument v3
8128    GLMessage_DataType *arg_v3 = glmsg.add_args();
8129    arg_v3->set_isarray(false);
8130    arg_v3->set_type(GLMessage::DataType::INT);
8131    arg_v3->add_intvalue(v3);
8132
8133    // call function
8134    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8135    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8136    glContext->hooks->gl.glUniform4ui(location, v0, v1, v2, v3);
8137    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8138    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8139
8140    void *pointerArgs[] = {
8141    };
8142
8143    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8144                              threadStartTime, threadEndTime,
8145                              &glmsg, pointerArgs);
8146    glContext->traceGLMessage(&glmsg);
8147}
8148
8149void GLTrace_glUniform1uiv(GLint location, GLsizei count, const GLuint* value) {
8150    GLMessage glmsg;
8151    GLTraceContext *glContext = getGLTraceContext();
8152
8153    glmsg.set_function(GLMessage::glUniform1uiv);
8154
8155    // copy argument location
8156    GLMessage_DataType *arg_location = glmsg.add_args();
8157    arg_location->set_isarray(false);
8158    arg_location->set_type(GLMessage::DataType::INT);
8159    arg_location->add_intvalue(location);
8160
8161    // copy argument count
8162    GLMessage_DataType *arg_count = glmsg.add_args();
8163    arg_count->set_isarray(false);
8164    arg_count->set_type(GLMessage::DataType::INT);
8165    arg_count->add_intvalue(count);
8166
8167    // copy argument value
8168    GLMessage_DataType *arg_value = glmsg.add_args();
8169    arg_value->set_isarray(false);
8170    arg_value->set_type(GLMessage::DataType::INT64);
8171    arg_value->add_int64value((uintptr_t)value);
8172
8173    // call function
8174    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8175    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8176    glContext->hooks->gl.glUniform1uiv(location, count, value);
8177    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8178    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8179
8180    void *pointerArgs[] = {
8181        (void *) value,
8182    };
8183
8184    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8185                              threadStartTime, threadEndTime,
8186                              &glmsg, pointerArgs);
8187    glContext->traceGLMessage(&glmsg);
8188}
8189
8190void GLTrace_glUniform2uiv(GLint location, GLsizei count, const GLuint* value) {
8191    GLMessage glmsg;
8192    GLTraceContext *glContext = getGLTraceContext();
8193
8194    glmsg.set_function(GLMessage::glUniform2uiv);
8195
8196    // copy argument location
8197    GLMessage_DataType *arg_location = glmsg.add_args();
8198    arg_location->set_isarray(false);
8199    arg_location->set_type(GLMessage::DataType::INT);
8200    arg_location->add_intvalue(location);
8201
8202    // copy argument count
8203    GLMessage_DataType *arg_count = glmsg.add_args();
8204    arg_count->set_isarray(false);
8205    arg_count->set_type(GLMessage::DataType::INT);
8206    arg_count->add_intvalue(count);
8207
8208    // copy argument value
8209    GLMessage_DataType *arg_value = glmsg.add_args();
8210    arg_value->set_isarray(false);
8211    arg_value->set_type(GLMessage::DataType::INT64);
8212    arg_value->add_int64value((uintptr_t)value);
8213
8214    // call function
8215    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8216    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8217    glContext->hooks->gl.glUniform2uiv(location, count, value);
8218    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8219    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8220
8221    void *pointerArgs[] = {
8222        (void *) value,
8223    };
8224
8225    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8226                              threadStartTime, threadEndTime,
8227                              &glmsg, pointerArgs);
8228    glContext->traceGLMessage(&glmsg);
8229}
8230
8231void GLTrace_glUniform3uiv(GLint location, GLsizei count, const GLuint* value) {
8232    GLMessage glmsg;
8233    GLTraceContext *glContext = getGLTraceContext();
8234
8235    glmsg.set_function(GLMessage::glUniform3uiv);
8236
8237    // copy argument location
8238    GLMessage_DataType *arg_location = glmsg.add_args();
8239    arg_location->set_isarray(false);
8240    arg_location->set_type(GLMessage::DataType::INT);
8241    arg_location->add_intvalue(location);
8242
8243    // copy argument count
8244    GLMessage_DataType *arg_count = glmsg.add_args();
8245    arg_count->set_isarray(false);
8246    arg_count->set_type(GLMessage::DataType::INT);
8247    arg_count->add_intvalue(count);
8248
8249    // copy argument value
8250    GLMessage_DataType *arg_value = glmsg.add_args();
8251    arg_value->set_isarray(false);
8252    arg_value->set_type(GLMessage::DataType::INT64);
8253    arg_value->add_int64value((uintptr_t)value);
8254
8255    // call function
8256    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8257    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8258    glContext->hooks->gl.glUniform3uiv(location, count, value);
8259    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8260    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8261
8262    void *pointerArgs[] = {
8263        (void *) value,
8264    };
8265
8266    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8267                              threadStartTime, threadEndTime,
8268                              &glmsg, pointerArgs);
8269    glContext->traceGLMessage(&glmsg);
8270}
8271
8272void GLTrace_glUniform4uiv(GLint location, GLsizei count, const GLuint* value) {
8273    GLMessage glmsg;
8274    GLTraceContext *glContext = getGLTraceContext();
8275
8276    glmsg.set_function(GLMessage::glUniform4uiv);
8277
8278    // copy argument location
8279    GLMessage_DataType *arg_location = glmsg.add_args();
8280    arg_location->set_isarray(false);
8281    arg_location->set_type(GLMessage::DataType::INT);
8282    arg_location->add_intvalue(location);
8283
8284    // copy argument count
8285    GLMessage_DataType *arg_count = glmsg.add_args();
8286    arg_count->set_isarray(false);
8287    arg_count->set_type(GLMessage::DataType::INT);
8288    arg_count->add_intvalue(count);
8289
8290    // copy argument value
8291    GLMessage_DataType *arg_value = glmsg.add_args();
8292    arg_value->set_isarray(false);
8293    arg_value->set_type(GLMessage::DataType::INT64);
8294    arg_value->add_int64value((uintptr_t)value);
8295
8296    // call function
8297    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8298    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8299    glContext->hooks->gl.glUniform4uiv(location, count, value);
8300    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8301    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8302
8303    void *pointerArgs[] = {
8304        (void *) value,
8305    };
8306
8307    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8308                              threadStartTime, threadEndTime,
8309                              &glmsg, pointerArgs);
8310    glContext->traceGLMessage(&glmsg);
8311}
8312
8313void GLTrace_glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value) {
8314    GLMessage glmsg;
8315    GLTraceContext *glContext = getGLTraceContext();
8316
8317    glmsg.set_function(GLMessage::glClearBufferiv);
8318
8319    // copy argument buffer
8320    GLMessage_DataType *arg_buffer = glmsg.add_args();
8321    arg_buffer->set_isarray(false);
8322    arg_buffer->set_type(GLMessage::DataType::ENUM);
8323    arg_buffer->add_intvalue((int)buffer);
8324
8325    // copy argument drawbuffer
8326    GLMessage_DataType *arg_drawbuffer = glmsg.add_args();
8327    arg_drawbuffer->set_isarray(false);
8328    arg_drawbuffer->set_type(GLMessage::DataType::INT);
8329    arg_drawbuffer->add_intvalue(drawbuffer);
8330
8331    // copy argument value
8332    GLMessage_DataType *arg_value = glmsg.add_args();
8333    arg_value->set_isarray(false);
8334    arg_value->set_type(GLMessage::DataType::INT64);
8335    arg_value->add_int64value((uintptr_t)value);
8336
8337    // call function
8338    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8339    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8340    glContext->hooks->gl.glClearBufferiv(buffer, drawbuffer, value);
8341    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8342    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8343
8344    void *pointerArgs[] = {
8345        (void *) value,
8346    };
8347
8348    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8349                              threadStartTime, threadEndTime,
8350                              &glmsg, pointerArgs);
8351    glContext->traceGLMessage(&glmsg);
8352}
8353
8354void GLTrace_glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value) {
8355    GLMessage glmsg;
8356    GLTraceContext *glContext = getGLTraceContext();
8357
8358    glmsg.set_function(GLMessage::glClearBufferuiv);
8359
8360    // copy argument buffer
8361    GLMessage_DataType *arg_buffer = glmsg.add_args();
8362    arg_buffer->set_isarray(false);
8363    arg_buffer->set_type(GLMessage::DataType::ENUM);
8364    arg_buffer->add_intvalue((int)buffer);
8365
8366    // copy argument drawbuffer
8367    GLMessage_DataType *arg_drawbuffer = glmsg.add_args();
8368    arg_drawbuffer->set_isarray(false);
8369    arg_drawbuffer->set_type(GLMessage::DataType::INT);
8370    arg_drawbuffer->add_intvalue(drawbuffer);
8371
8372    // copy argument value
8373    GLMessage_DataType *arg_value = glmsg.add_args();
8374    arg_value->set_isarray(false);
8375    arg_value->set_type(GLMessage::DataType::INT64);
8376    arg_value->add_int64value((uintptr_t)value);
8377
8378    // call function
8379    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8380    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8381    glContext->hooks->gl.glClearBufferuiv(buffer, drawbuffer, value);
8382    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8383    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8384
8385    void *pointerArgs[] = {
8386        (void *) value,
8387    };
8388
8389    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8390                              threadStartTime, threadEndTime,
8391                              &glmsg, pointerArgs);
8392    glContext->traceGLMessage(&glmsg);
8393}
8394
8395void GLTrace_glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value) {
8396    GLMessage glmsg;
8397    GLTraceContext *glContext = getGLTraceContext();
8398
8399    glmsg.set_function(GLMessage::glClearBufferfv);
8400
8401    // copy argument buffer
8402    GLMessage_DataType *arg_buffer = glmsg.add_args();
8403    arg_buffer->set_isarray(false);
8404    arg_buffer->set_type(GLMessage::DataType::ENUM);
8405    arg_buffer->add_intvalue((int)buffer);
8406
8407    // copy argument drawbuffer
8408    GLMessage_DataType *arg_drawbuffer = glmsg.add_args();
8409    arg_drawbuffer->set_isarray(false);
8410    arg_drawbuffer->set_type(GLMessage::DataType::INT);
8411    arg_drawbuffer->add_intvalue(drawbuffer);
8412
8413    // copy argument value
8414    GLMessage_DataType *arg_value = glmsg.add_args();
8415    arg_value->set_isarray(false);
8416    arg_value->set_type(GLMessage::DataType::INT64);
8417    arg_value->add_int64value((uintptr_t)value);
8418
8419    // call function
8420    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8421    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8422    glContext->hooks->gl.glClearBufferfv(buffer, drawbuffer, value);
8423    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8424    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8425
8426    void *pointerArgs[] = {
8427        (void *) value,
8428    };
8429
8430    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8431                              threadStartTime, threadEndTime,
8432                              &glmsg, pointerArgs);
8433    glContext->traceGLMessage(&glmsg);
8434}
8435
8436void GLTrace_glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) {
8437    GLMessage glmsg;
8438    GLTraceContext *glContext = getGLTraceContext();
8439
8440    glmsg.set_function(GLMessage::glClearBufferfi);
8441
8442    // copy argument buffer
8443    GLMessage_DataType *arg_buffer = glmsg.add_args();
8444    arg_buffer->set_isarray(false);
8445    arg_buffer->set_type(GLMessage::DataType::ENUM);
8446    arg_buffer->add_intvalue((int)buffer);
8447
8448    // copy argument drawbuffer
8449    GLMessage_DataType *arg_drawbuffer = glmsg.add_args();
8450    arg_drawbuffer->set_isarray(false);
8451    arg_drawbuffer->set_type(GLMessage::DataType::INT);
8452    arg_drawbuffer->add_intvalue(drawbuffer);
8453
8454    // copy argument depth
8455    GLMessage_DataType *arg_depth = glmsg.add_args();
8456    arg_depth->set_isarray(false);
8457    arg_depth->set_type(GLMessage::DataType::FLOAT);
8458    arg_depth->add_floatvalue(depth);
8459
8460    // copy argument stencil
8461    GLMessage_DataType *arg_stencil = glmsg.add_args();
8462    arg_stencil->set_isarray(false);
8463    arg_stencil->set_type(GLMessage::DataType::INT);
8464    arg_stencil->add_intvalue(stencil);
8465
8466    // call function
8467    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8468    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8469    glContext->hooks->gl.glClearBufferfi(buffer, drawbuffer, depth, stencil);
8470    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8471    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8472
8473    void *pointerArgs[] = {
8474    };
8475
8476    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8477                              threadStartTime, threadEndTime,
8478                              &glmsg, pointerArgs);
8479    glContext->traceGLMessage(&glmsg);
8480}
8481
8482const GLubyte* GLTrace_glGetStringi(GLenum name, GLuint index) {
8483    GLMessage glmsg;
8484    GLTraceContext *glContext = getGLTraceContext();
8485
8486    glmsg.set_function(GLMessage::glGetStringi);
8487
8488    // copy argument name
8489    GLMessage_DataType *arg_name = glmsg.add_args();
8490    arg_name->set_isarray(false);
8491    arg_name->set_type(GLMessage::DataType::ENUM);
8492    arg_name->add_intvalue((int)name);
8493
8494    // copy argument index
8495    GLMessage_DataType *arg_index = glmsg.add_args();
8496    arg_index->set_isarray(false);
8497    arg_index->set_type(GLMessage::DataType::INT);
8498    arg_index->add_intvalue(index);
8499
8500    // call function
8501    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8502    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8503    const GLubyte* retValue = glContext->hooks->gl.glGetStringi(name, index);
8504    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8505    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8506
8507    // set return value
8508    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
8509    rt->set_isarray(false);
8510    rt->set_type(GLMessage::DataType::INT64);
8511    rt->add_int64value((uintptr_t)retValue);
8512
8513    void *pointerArgs[] = {
8514        (void *) retValue,
8515    };
8516
8517    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8518                              threadStartTime, threadEndTime,
8519                              &glmsg, pointerArgs);
8520    glContext->traceGLMessage(&glmsg);
8521
8522    return retValue;
8523}
8524
8525void GLTrace_glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) {
8526    GLMessage glmsg;
8527    GLTraceContext *glContext = getGLTraceContext();
8528
8529    glmsg.set_function(GLMessage::glCopyBufferSubData);
8530
8531    // copy argument readTarget
8532    GLMessage_DataType *arg_readTarget = glmsg.add_args();
8533    arg_readTarget->set_isarray(false);
8534    arg_readTarget->set_type(GLMessage::DataType::ENUM);
8535    arg_readTarget->add_intvalue((int)readTarget);
8536
8537    // copy argument writeTarget
8538    GLMessage_DataType *arg_writeTarget = glmsg.add_args();
8539    arg_writeTarget->set_isarray(false);
8540    arg_writeTarget->set_type(GLMessage::DataType::ENUM);
8541    arg_writeTarget->add_intvalue((int)writeTarget);
8542
8543    // copy argument readOffset
8544    GLMessage_DataType *arg_readOffset = glmsg.add_args();
8545    arg_readOffset->set_isarray(false);
8546    arg_readOffset->set_type(GLMessage::DataType::INT);
8547    arg_readOffset->add_intvalue(readOffset);
8548
8549    // copy argument writeOffset
8550    GLMessage_DataType *arg_writeOffset = glmsg.add_args();
8551    arg_writeOffset->set_isarray(false);
8552    arg_writeOffset->set_type(GLMessage::DataType::INT);
8553    arg_writeOffset->add_intvalue(writeOffset);
8554
8555    // copy argument size
8556    GLMessage_DataType *arg_size = glmsg.add_args();
8557    arg_size->set_isarray(false);
8558    arg_size->set_type(GLMessage::DataType::INT);
8559    arg_size->add_intvalue(size);
8560
8561    // call function
8562    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8563    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8564    glContext->hooks->gl.glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
8565    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8566    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8567
8568    void *pointerArgs[] = {
8569    };
8570
8571    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8572                              threadStartTime, threadEndTime,
8573                              &glmsg, pointerArgs);
8574    glContext->traceGLMessage(&glmsg);
8575}
8576
8577void GLTrace_glGetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices) {
8578    GLMessage glmsg;
8579    GLTraceContext *glContext = getGLTraceContext();
8580
8581    glmsg.set_function(GLMessage::glGetUniformIndices);
8582
8583    // copy argument program
8584    GLMessage_DataType *arg_program = glmsg.add_args();
8585    arg_program->set_isarray(false);
8586    arg_program->set_type(GLMessage::DataType::INT);
8587    arg_program->add_intvalue(program);
8588
8589    // copy argument uniformCount
8590    GLMessage_DataType *arg_uniformCount = glmsg.add_args();
8591    arg_uniformCount->set_isarray(false);
8592    arg_uniformCount->set_type(GLMessage::DataType::INT);
8593    arg_uniformCount->add_intvalue(uniformCount);
8594
8595    // copy argument uniformNames
8596    GLMessage_DataType *arg_uniformNames = glmsg.add_args();
8597    arg_uniformNames->set_isarray(false);
8598    arg_uniformNames->set_type(GLMessage::DataType::INT64);
8599    arg_uniformNames->add_int64value((uintptr_t)uniformNames);
8600
8601    // copy argument uniformIndices
8602    GLMessage_DataType *arg_uniformIndices = glmsg.add_args();
8603    arg_uniformIndices->set_isarray(false);
8604    arg_uniformIndices->set_type(GLMessage::DataType::INT64);
8605    arg_uniformIndices->add_int64value((uintptr_t)uniformIndices);
8606
8607    // call function
8608    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8609    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8610    glContext->hooks->gl.glGetUniformIndices(program, uniformCount, uniformNames, uniformIndices);
8611    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8612    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8613
8614    void *pointerArgs[] = {
8615        (void *) uniformNames,
8616        (void *) uniformIndices,
8617    };
8618
8619    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8620                              threadStartTime, threadEndTime,
8621                              &glmsg, pointerArgs);
8622    glContext->traceGLMessage(&glmsg);
8623}
8624
8625void GLTrace_glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) {
8626    GLMessage glmsg;
8627    GLTraceContext *glContext = getGLTraceContext();
8628
8629    glmsg.set_function(GLMessage::glGetActiveUniformsiv);
8630
8631    // copy argument program
8632    GLMessage_DataType *arg_program = glmsg.add_args();
8633    arg_program->set_isarray(false);
8634    arg_program->set_type(GLMessage::DataType::INT);
8635    arg_program->add_intvalue(program);
8636
8637    // copy argument uniformCount
8638    GLMessage_DataType *arg_uniformCount = glmsg.add_args();
8639    arg_uniformCount->set_isarray(false);
8640    arg_uniformCount->set_type(GLMessage::DataType::INT);
8641    arg_uniformCount->add_intvalue(uniformCount);
8642
8643    // copy argument uniformIndices
8644    GLMessage_DataType *arg_uniformIndices = glmsg.add_args();
8645    arg_uniformIndices->set_isarray(false);
8646    arg_uniformIndices->set_type(GLMessage::DataType::INT64);
8647    arg_uniformIndices->add_int64value((uintptr_t)uniformIndices);
8648
8649    // copy argument pname
8650    GLMessage_DataType *arg_pname = glmsg.add_args();
8651    arg_pname->set_isarray(false);
8652    arg_pname->set_type(GLMessage::DataType::ENUM);
8653    arg_pname->add_intvalue((int)pname);
8654
8655    // copy argument params
8656    GLMessage_DataType *arg_params = glmsg.add_args();
8657    arg_params->set_isarray(false);
8658    arg_params->set_type(GLMessage::DataType::INT64);
8659    arg_params->add_int64value((uintptr_t)params);
8660
8661    // call function
8662    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8663    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8664    glContext->hooks->gl.glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
8665    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8666    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8667
8668    void *pointerArgs[] = {
8669        (void *) uniformIndices,
8670        (void *) params,
8671    };
8672
8673    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8674                              threadStartTime, threadEndTime,
8675                              &glmsg, pointerArgs);
8676    glContext->traceGLMessage(&glmsg);
8677}
8678
8679GLuint GLTrace_glGetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName) {
8680    GLMessage glmsg;
8681    GLTraceContext *glContext = getGLTraceContext();
8682
8683    glmsg.set_function(GLMessage::glGetUniformBlockIndex);
8684
8685    // copy argument program
8686    GLMessage_DataType *arg_program = glmsg.add_args();
8687    arg_program->set_isarray(false);
8688    arg_program->set_type(GLMessage::DataType::INT);
8689    arg_program->add_intvalue(program);
8690
8691    // copy argument uniformBlockName
8692    GLMessage_DataType *arg_uniformBlockName = glmsg.add_args();
8693    arg_uniformBlockName->set_isarray(false);
8694    arg_uniformBlockName->set_type(GLMessage::DataType::INT64);
8695    arg_uniformBlockName->add_int64value((uintptr_t)uniformBlockName);
8696
8697    // call function
8698    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8699    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8700    GLuint retValue = glContext->hooks->gl.glGetUniformBlockIndex(program, uniformBlockName);
8701    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8702    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8703
8704    // set return value
8705    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
8706    rt->set_isarray(false);
8707    rt->set_type(GLMessage::DataType::INT);
8708    rt->add_intvalue(retValue);
8709
8710    void *pointerArgs[] = {
8711        (void *) uniformBlockName,
8712    };
8713
8714    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8715                              threadStartTime, threadEndTime,
8716                              &glmsg, pointerArgs);
8717    glContext->traceGLMessage(&glmsg);
8718
8719    return retValue;
8720}
8721
8722void GLTrace_glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) {
8723    GLMessage glmsg;
8724    GLTraceContext *glContext = getGLTraceContext();
8725
8726    glmsg.set_function(GLMessage::glGetActiveUniformBlockiv);
8727
8728    // copy argument program
8729    GLMessage_DataType *arg_program = glmsg.add_args();
8730    arg_program->set_isarray(false);
8731    arg_program->set_type(GLMessage::DataType::INT);
8732    arg_program->add_intvalue(program);
8733
8734    // copy argument uniformBlockIndex
8735    GLMessage_DataType *arg_uniformBlockIndex = glmsg.add_args();
8736    arg_uniformBlockIndex->set_isarray(false);
8737    arg_uniformBlockIndex->set_type(GLMessage::DataType::INT);
8738    arg_uniformBlockIndex->add_intvalue(uniformBlockIndex);
8739
8740    // copy argument pname
8741    GLMessage_DataType *arg_pname = glmsg.add_args();
8742    arg_pname->set_isarray(false);
8743    arg_pname->set_type(GLMessage::DataType::ENUM);
8744    arg_pname->add_intvalue((int)pname);
8745
8746    // copy argument params
8747    GLMessage_DataType *arg_params = glmsg.add_args();
8748    arg_params->set_isarray(false);
8749    arg_params->set_type(GLMessage::DataType::INT64);
8750    arg_params->add_int64value((uintptr_t)params);
8751
8752    // call function
8753    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8754    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8755    glContext->hooks->gl.glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
8756    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8757    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8758
8759    void *pointerArgs[] = {
8760        (void *) params,
8761    };
8762
8763    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8764                              threadStartTime, threadEndTime,
8765                              &glmsg, pointerArgs);
8766    glContext->traceGLMessage(&glmsg);
8767}
8768
8769void GLTrace_glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) {
8770    GLMessage glmsg;
8771    GLTraceContext *glContext = getGLTraceContext();
8772
8773    glmsg.set_function(GLMessage::glGetActiveUniformBlockName);
8774
8775    // copy argument program
8776    GLMessage_DataType *arg_program = glmsg.add_args();
8777    arg_program->set_isarray(false);
8778    arg_program->set_type(GLMessage::DataType::INT);
8779    arg_program->add_intvalue(program);
8780
8781    // copy argument uniformBlockIndex
8782    GLMessage_DataType *arg_uniformBlockIndex = glmsg.add_args();
8783    arg_uniformBlockIndex->set_isarray(false);
8784    arg_uniformBlockIndex->set_type(GLMessage::DataType::INT);
8785    arg_uniformBlockIndex->add_intvalue(uniformBlockIndex);
8786
8787    // copy argument bufSize
8788    GLMessage_DataType *arg_bufSize = glmsg.add_args();
8789    arg_bufSize->set_isarray(false);
8790    arg_bufSize->set_type(GLMessage::DataType::INT);
8791    arg_bufSize->add_intvalue(bufSize);
8792
8793    // copy argument length
8794    GLMessage_DataType *arg_length = glmsg.add_args();
8795    arg_length->set_isarray(false);
8796    arg_length->set_type(GLMessage::DataType::INT64);
8797    arg_length->add_int64value((uintptr_t)length);
8798
8799    // copy argument uniformBlockName
8800    GLMessage_DataType *arg_uniformBlockName = glmsg.add_args();
8801    arg_uniformBlockName->set_isarray(false);
8802    arg_uniformBlockName->set_type(GLMessage::DataType::INT64);
8803    arg_uniformBlockName->add_int64value((uintptr_t)uniformBlockName);
8804
8805    // call function
8806    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8807    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8808    glContext->hooks->gl.glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName);
8809    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8810    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8811
8812    void *pointerArgs[] = {
8813        (void *) length,
8814        (void *) uniformBlockName,
8815    };
8816
8817    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8818                              threadStartTime, threadEndTime,
8819                              &glmsg, pointerArgs);
8820    glContext->traceGLMessage(&glmsg);
8821}
8822
8823void GLTrace_glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) {
8824    GLMessage glmsg;
8825    GLTraceContext *glContext = getGLTraceContext();
8826
8827    glmsg.set_function(GLMessage::glUniformBlockBinding);
8828
8829    // copy argument program
8830    GLMessage_DataType *arg_program = glmsg.add_args();
8831    arg_program->set_isarray(false);
8832    arg_program->set_type(GLMessage::DataType::INT);
8833    arg_program->add_intvalue(program);
8834
8835    // copy argument uniformBlockIndex
8836    GLMessage_DataType *arg_uniformBlockIndex = glmsg.add_args();
8837    arg_uniformBlockIndex->set_isarray(false);
8838    arg_uniformBlockIndex->set_type(GLMessage::DataType::INT);
8839    arg_uniformBlockIndex->add_intvalue(uniformBlockIndex);
8840
8841    // copy argument uniformBlockBinding
8842    GLMessage_DataType *arg_uniformBlockBinding = glmsg.add_args();
8843    arg_uniformBlockBinding->set_isarray(false);
8844    arg_uniformBlockBinding->set_type(GLMessage::DataType::INT);
8845    arg_uniformBlockBinding->add_intvalue(uniformBlockBinding);
8846
8847    // call function
8848    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8849    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8850    glContext->hooks->gl.glUniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
8851    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8852    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8853
8854    void *pointerArgs[] = {
8855    };
8856
8857    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8858                              threadStartTime, threadEndTime,
8859                              &glmsg, pointerArgs);
8860    glContext->traceGLMessage(&glmsg);
8861}
8862
8863void GLTrace_glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount) {
8864    GLMessage glmsg;
8865    GLTraceContext *glContext = getGLTraceContext();
8866
8867    glmsg.set_function(GLMessage::glDrawArraysInstanced);
8868
8869    // copy argument mode
8870    GLMessage_DataType *arg_mode = glmsg.add_args();
8871    arg_mode->set_isarray(false);
8872    arg_mode->set_type(GLMessage::DataType::ENUM);
8873    arg_mode->add_intvalue((int)mode);
8874
8875    // copy argument first
8876    GLMessage_DataType *arg_first = glmsg.add_args();
8877    arg_first->set_isarray(false);
8878    arg_first->set_type(GLMessage::DataType::INT);
8879    arg_first->add_intvalue(first);
8880
8881    // copy argument count
8882    GLMessage_DataType *arg_count = glmsg.add_args();
8883    arg_count->set_isarray(false);
8884    arg_count->set_type(GLMessage::DataType::INT);
8885    arg_count->add_intvalue(count);
8886
8887    // copy argument instanceCount
8888    GLMessage_DataType *arg_instanceCount = glmsg.add_args();
8889    arg_instanceCount->set_isarray(false);
8890    arg_instanceCount->set_type(GLMessage::DataType::INT);
8891    arg_instanceCount->add_intvalue(instanceCount);
8892
8893    // call function
8894    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8895    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8896    glContext->hooks->gl.glDrawArraysInstanced(mode, first, count, instanceCount);
8897    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8898    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8899
8900    void *pointerArgs[] = {
8901    };
8902
8903    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8904                              threadStartTime, threadEndTime,
8905                              &glmsg, pointerArgs);
8906    glContext->traceGLMessage(&glmsg);
8907}
8908
8909void GLTrace_glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount) {
8910    GLMessage glmsg;
8911    GLTraceContext *glContext = getGLTraceContext();
8912
8913    glmsg.set_function(GLMessage::glDrawElementsInstanced);
8914
8915    // copy argument mode
8916    GLMessage_DataType *arg_mode = glmsg.add_args();
8917    arg_mode->set_isarray(false);
8918    arg_mode->set_type(GLMessage::DataType::ENUM);
8919    arg_mode->add_intvalue((int)mode);
8920
8921    // copy argument count
8922    GLMessage_DataType *arg_count = glmsg.add_args();
8923    arg_count->set_isarray(false);
8924    arg_count->set_type(GLMessage::DataType::INT);
8925    arg_count->add_intvalue(count);
8926
8927    // copy argument type
8928    GLMessage_DataType *arg_type = glmsg.add_args();
8929    arg_type->set_isarray(false);
8930    arg_type->set_type(GLMessage::DataType::ENUM);
8931    arg_type->add_intvalue((int)type);
8932
8933    // copy argument indices
8934    GLMessage_DataType *arg_indices = glmsg.add_args();
8935    arg_indices->set_isarray(false);
8936    arg_indices->set_type(GLMessage::DataType::INT64);
8937    arg_indices->add_int64value((uintptr_t)indices);
8938
8939    // copy argument instanceCount
8940    GLMessage_DataType *arg_instanceCount = glmsg.add_args();
8941    arg_instanceCount->set_isarray(false);
8942    arg_instanceCount->set_type(GLMessage::DataType::INT);
8943    arg_instanceCount->add_intvalue(instanceCount);
8944
8945    // call function
8946    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8947    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8948    glContext->hooks->gl.glDrawElementsInstanced(mode, count, type, indices, instanceCount);
8949    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8950    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8951
8952    void *pointerArgs[] = {
8953        (void *) indices,
8954    };
8955
8956    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8957                              threadStartTime, threadEndTime,
8958                              &glmsg, pointerArgs);
8959    glContext->traceGLMessage(&glmsg);
8960}
8961
8962GLsync GLTrace_glFenceSync(GLenum condition, GLbitfield flags) {
8963    GLMessage glmsg;
8964    GLTraceContext *glContext = getGLTraceContext();
8965
8966    glmsg.set_function(GLMessage::glFenceSync);
8967
8968    // copy argument condition
8969    GLMessage_DataType *arg_condition = glmsg.add_args();
8970    arg_condition->set_isarray(false);
8971    arg_condition->set_type(GLMessage::DataType::ENUM);
8972    arg_condition->add_intvalue((int)condition);
8973
8974    // copy argument flags
8975    GLMessage_DataType *arg_flags = glmsg.add_args();
8976    arg_flags->set_isarray(false);
8977    arg_flags->set_type(GLMessage::DataType::INT);
8978    arg_flags->add_intvalue(flags);
8979
8980    // call function
8981    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
8982    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
8983    GLsync retValue = glContext->hooks->gl.glFenceSync(condition, flags);
8984    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
8985    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
8986
8987    // set return value
8988    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
8989    rt->set_isarray(false);
8990    rt->set_type(GLMessage::DataType::INT64);
8991    rt->add_int64value((uintptr_t)retValue);
8992
8993    void *pointerArgs[] = {
8994        (void *) retValue,
8995    };
8996
8997    fixupGLMessage(glContext, wallStartTime, wallEndTime,
8998                              threadStartTime, threadEndTime,
8999                              &glmsg, pointerArgs);
9000    glContext->traceGLMessage(&glmsg);
9001
9002    return retValue;
9003}
9004
9005GLboolean GLTrace_glIsSync(GLsync sync) {
9006    GLMessage glmsg;
9007    GLTraceContext *glContext = getGLTraceContext();
9008
9009    glmsg.set_function(GLMessage::glIsSync);
9010
9011    // copy argument sync
9012    GLMessage_DataType *arg_sync = glmsg.add_args();
9013    arg_sync->set_isarray(false);
9014    arg_sync->set_type(GLMessage::DataType::INT64);
9015    arg_sync->add_int64value((uintptr_t)sync);
9016
9017    // call function
9018    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9019    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9020    GLboolean retValue = glContext->hooks->gl.glIsSync(sync);
9021    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9022    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9023
9024    // set return value
9025    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
9026    rt->set_isarray(false);
9027    rt->set_type(GLMessage::DataType::BOOL);
9028    rt->add_boolvalue(retValue);
9029
9030    void *pointerArgs[] = {
9031        (void *) sync,
9032    };
9033
9034    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9035                              threadStartTime, threadEndTime,
9036                              &glmsg, pointerArgs);
9037    glContext->traceGLMessage(&glmsg);
9038
9039    return retValue;
9040}
9041
9042void GLTrace_glDeleteSync(GLsync sync) {
9043    GLMessage glmsg;
9044    GLTraceContext *glContext = getGLTraceContext();
9045
9046    glmsg.set_function(GLMessage::glDeleteSync);
9047
9048    // copy argument sync
9049    GLMessage_DataType *arg_sync = glmsg.add_args();
9050    arg_sync->set_isarray(false);
9051    arg_sync->set_type(GLMessage::DataType::INT64);
9052    arg_sync->add_int64value((uintptr_t)sync);
9053
9054    // call function
9055    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9056    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9057    glContext->hooks->gl.glDeleteSync(sync);
9058    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9059    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9060
9061    void *pointerArgs[] = {
9062        (void *) sync,
9063    };
9064
9065    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9066                              threadStartTime, threadEndTime,
9067                              &glmsg, pointerArgs);
9068    glContext->traceGLMessage(&glmsg);
9069}
9070
9071GLenum GLTrace_glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) {
9072    GLMessage glmsg;
9073    GLTraceContext *glContext = getGLTraceContext();
9074
9075    glmsg.set_function(GLMessage::glClientWaitSync);
9076
9077    // copy argument sync
9078    GLMessage_DataType *arg_sync = glmsg.add_args();
9079    arg_sync->set_isarray(false);
9080    arg_sync->set_type(GLMessage::DataType::INT64);
9081    arg_sync->add_int64value((uintptr_t)sync);
9082
9083    // copy argument flags
9084    GLMessage_DataType *arg_flags = glmsg.add_args();
9085    arg_flags->set_isarray(false);
9086    arg_flags->set_type(GLMessage::DataType::INT);
9087    arg_flags->add_intvalue(flags);
9088
9089    // copy argument timeout
9090    GLMessage_DataType *arg_timeout = glmsg.add_args();
9091    arg_timeout->set_isarray(false);
9092    arg_timeout->set_type(GLMessage::DataType::INT64);
9093    arg_timeout->add_int64value(timeout);
9094
9095    // call function
9096    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9097    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9098    GLenum retValue = glContext->hooks->gl.glClientWaitSync(sync, flags, timeout);
9099    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9100    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9101
9102    // set return value
9103    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
9104    rt->set_isarray(false);
9105    rt->set_type(GLMessage::DataType::ENUM);
9106    rt->add_intvalue((int)retValue);
9107
9108    void *pointerArgs[] = {
9109        (void *) sync,
9110    };
9111
9112    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9113                              threadStartTime, threadEndTime,
9114                              &glmsg, pointerArgs);
9115    glContext->traceGLMessage(&glmsg);
9116
9117    return retValue;
9118}
9119
9120void GLTrace_glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) {
9121    GLMessage glmsg;
9122    GLTraceContext *glContext = getGLTraceContext();
9123
9124    glmsg.set_function(GLMessage::glWaitSync);
9125
9126    // copy argument sync
9127    GLMessage_DataType *arg_sync = glmsg.add_args();
9128    arg_sync->set_isarray(false);
9129    arg_sync->set_type(GLMessage::DataType::INT64);
9130    arg_sync->add_int64value((uintptr_t)sync);
9131
9132    // copy argument flags
9133    GLMessage_DataType *arg_flags = glmsg.add_args();
9134    arg_flags->set_isarray(false);
9135    arg_flags->set_type(GLMessage::DataType::INT);
9136    arg_flags->add_intvalue(flags);
9137
9138    // copy argument timeout
9139    GLMessage_DataType *arg_timeout = glmsg.add_args();
9140    arg_timeout->set_isarray(false);
9141    arg_timeout->set_type(GLMessage::DataType::INT64);
9142    arg_timeout->add_int64value(timeout);
9143
9144    // call function
9145    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9146    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9147    glContext->hooks->gl.glWaitSync(sync, flags, timeout);
9148    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9149    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9150
9151    void *pointerArgs[] = {
9152        (void *) sync,
9153    };
9154
9155    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9156                              threadStartTime, threadEndTime,
9157                              &glmsg, pointerArgs);
9158    glContext->traceGLMessage(&glmsg);
9159}
9160
9161void GLTrace_glGetInteger64v(GLenum pname, GLint64* params) {
9162    GLMessage glmsg;
9163    GLTraceContext *glContext = getGLTraceContext();
9164
9165    glmsg.set_function(GLMessage::glGetInteger64v);
9166
9167    // copy argument pname
9168    GLMessage_DataType *arg_pname = glmsg.add_args();
9169    arg_pname->set_isarray(false);
9170    arg_pname->set_type(GLMessage::DataType::ENUM);
9171    arg_pname->add_intvalue((int)pname);
9172
9173    // copy argument params
9174    GLMessage_DataType *arg_params = glmsg.add_args();
9175    arg_params->set_isarray(false);
9176    arg_params->set_type(GLMessage::DataType::INT64);
9177    arg_params->add_int64value((uintptr_t)params);
9178
9179    // call function
9180    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9181    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9182    glContext->hooks->gl.glGetInteger64v(pname, params);
9183    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9184    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9185
9186    void *pointerArgs[] = {
9187        (void *) params,
9188    };
9189
9190    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9191                              threadStartTime, threadEndTime,
9192                              &glmsg, pointerArgs);
9193    glContext->traceGLMessage(&glmsg);
9194}
9195
9196void GLTrace_glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) {
9197    GLMessage glmsg;
9198    GLTraceContext *glContext = getGLTraceContext();
9199
9200    glmsg.set_function(GLMessage::glGetSynciv);
9201
9202    // copy argument sync
9203    GLMessage_DataType *arg_sync = glmsg.add_args();
9204    arg_sync->set_isarray(false);
9205    arg_sync->set_type(GLMessage::DataType::INT64);
9206    arg_sync->add_int64value((uintptr_t)sync);
9207
9208    // copy argument pname
9209    GLMessage_DataType *arg_pname = glmsg.add_args();
9210    arg_pname->set_isarray(false);
9211    arg_pname->set_type(GLMessage::DataType::ENUM);
9212    arg_pname->add_intvalue((int)pname);
9213
9214    // copy argument bufSize
9215    GLMessage_DataType *arg_bufSize = glmsg.add_args();
9216    arg_bufSize->set_isarray(false);
9217    arg_bufSize->set_type(GLMessage::DataType::INT);
9218    arg_bufSize->add_intvalue(bufSize);
9219
9220    // copy argument length
9221    GLMessage_DataType *arg_length = glmsg.add_args();
9222    arg_length->set_isarray(false);
9223    arg_length->set_type(GLMessage::DataType::INT64);
9224    arg_length->add_int64value((uintptr_t)length);
9225
9226    // copy argument values
9227    GLMessage_DataType *arg_values = glmsg.add_args();
9228    arg_values->set_isarray(false);
9229    arg_values->set_type(GLMessage::DataType::INT64);
9230    arg_values->add_int64value((uintptr_t)values);
9231
9232    // call function
9233    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9234    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9235    glContext->hooks->gl.glGetSynciv(sync, pname, bufSize, length, values);
9236    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9237    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9238
9239    void *pointerArgs[] = {
9240        (void *) sync,
9241        (void *) length,
9242        (void *) values,
9243    };
9244
9245    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9246                              threadStartTime, threadEndTime,
9247                              &glmsg, pointerArgs);
9248    glContext->traceGLMessage(&glmsg);
9249}
9250
9251void GLTrace_glGetInteger64i_v(GLenum target, GLuint index, GLint64* data) {
9252    GLMessage glmsg;
9253    GLTraceContext *glContext = getGLTraceContext();
9254
9255    glmsg.set_function(GLMessage::glGetInteger64i_v);
9256
9257    // copy argument target
9258    GLMessage_DataType *arg_target = glmsg.add_args();
9259    arg_target->set_isarray(false);
9260    arg_target->set_type(GLMessage::DataType::ENUM);
9261    arg_target->add_intvalue((int)target);
9262
9263    // copy argument index
9264    GLMessage_DataType *arg_index = glmsg.add_args();
9265    arg_index->set_isarray(false);
9266    arg_index->set_type(GLMessage::DataType::INT);
9267    arg_index->add_intvalue(index);
9268
9269    // copy argument data
9270    GLMessage_DataType *arg_data = glmsg.add_args();
9271    arg_data->set_isarray(false);
9272    arg_data->set_type(GLMessage::DataType::INT64);
9273    arg_data->add_int64value((uintptr_t)data);
9274
9275    // call function
9276    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9277    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9278    glContext->hooks->gl.glGetInteger64i_v(target, index, data);
9279    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9280    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9281
9282    void *pointerArgs[] = {
9283        (void *) data,
9284    };
9285
9286    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9287                              threadStartTime, threadEndTime,
9288                              &glmsg, pointerArgs);
9289    glContext->traceGLMessage(&glmsg);
9290}
9291
9292void GLTrace_glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params) {
9293    GLMessage glmsg;
9294    GLTraceContext *glContext = getGLTraceContext();
9295
9296    glmsg.set_function(GLMessage::glGetBufferParameteri64v);
9297
9298    // copy argument target
9299    GLMessage_DataType *arg_target = glmsg.add_args();
9300    arg_target->set_isarray(false);
9301    arg_target->set_type(GLMessage::DataType::ENUM);
9302    arg_target->add_intvalue((int)target);
9303
9304    // copy argument pname
9305    GLMessage_DataType *arg_pname = glmsg.add_args();
9306    arg_pname->set_isarray(false);
9307    arg_pname->set_type(GLMessage::DataType::ENUM);
9308    arg_pname->add_intvalue((int)pname);
9309
9310    // copy argument params
9311    GLMessage_DataType *arg_params = glmsg.add_args();
9312    arg_params->set_isarray(false);
9313    arg_params->set_type(GLMessage::DataType::INT64);
9314    arg_params->add_int64value((uintptr_t)params);
9315
9316    // call function
9317    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9318    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9319    glContext->hooks->gl.glGetBufferParameteri64v(target, pname, params);
9320    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9321    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9322
9323    void *pointerArgs[] = {
9324        (void *) params,
9325    };
9326
9327    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9328                              threadStartTime, threadEndTime,
9329                              &glmsg, pointerArgs);
9330    glContext->traceGLMessage(&glmsg);
9331}
9332
9333void GLTrace_glGenSamplers(GLsizei count, GLuint* samplers) {
9334    GLMessage glmsg;
9335    GLTraceContext *glContext = getGLTraceContext();
9336
9337    glmsg.set_function(GLMessage::glGenSamplers);
9338
9339    // copy argument count
9340    GLMessage_DataType *arg_count = glmsg.add_args();
9341    arg_count->set_isarray(false);
9342    arg_count->set_type(GLMessage::DataType::INT);
9343    arg_count->add_intvalue(count);
9344
9345    // copy argument samplers
9346    GLMessage_DataType *arg_samplers = glmsg.add_args();
9347    arg_samplers->set_isarray(false);
9348    arg_samplers->set_type(GLMessage::DataType::INT64);
9349    arg_samplers->add_int64value((uintptr_t)samplers);
9350
9351    // call function
9352    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9353    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9354    glContext->hooks->gl.glGenSamplers(count, samplers);
9355    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9356    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9357
9358    void *pointerArgs[] = {
9359        (void *) samplers,
9360    };
9361
9362    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9363                              threadStartTime, threadEndTime,
9364                              &glmsg, pointerArgs);
9365    glContext->traceGLMessage(&glmsg);
9366}
9367
9368void GLTrace_glDeleteSamplers(GLsizei count, const GLuint* samplers) {
9369    GLMessage glmsg;
9370    GLTraceContext *glContext = getGLTraceContext();
9371
9372    glmsg.set_function(GLMessage::glDeleteSamplers);
9373
9374    // copy argument count
9375    GLMessage_DataType *arg_count = glmsg.add_args();
9376    arg_count->set_isarray(false);
9377    arg_count->set_type(GLMessage::DataType::INT);
9378    arg_count->add_intvalue(count);
9379
9380    // copy argument samplers
9381    GLMessage_DataType *arg_samplers = glmsg.add_args();
9382    arg_samplers->set_isarray(false);
9383    arg_samplers->set_type(GLMessage::DataType::INT64);
9384    arg_samplers->add_int64value((uintptr_t)samplers);
9385
9386    // call function
9387    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9388    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9389    glContext->hooks->gl.glDeleteSamplers(count, samplers);
9390    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9391    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9392
9393    void *pointerArgs[] = {
9394        (void *) samplers,
9395    };
9396
9397    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9398                              threadStartTime, threadEndTime,
9399                              &glmsg, pointerArgs);
9400    glContext->traceGLMessage(&glmsg);
9401}
9402
9403GLboolean GLTrace_glIsSampler(GLuint sampler) {
9404    GLMessage glmsg;
9405    GLTraceContext *glContext = getGLTraceContext();
9406
9407    glmsg.set_function(GLMessage::glIsSampler);
9408
9409    // copy argument sampler
9410    GLMessage_DataType *arg_sampler = glmsg.add_args();
9411    arg_sampler->set_isarray(false);
9412    arg_sampler->set_type(GLMessage::DataType::INT);
9413    arg_sampler->add_intvalue(sampler);
9414
9415    // call function
9416    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9417    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9418    GLboolean retValue = glContext->hooks->gl.glIsSampler(sampler);
9419    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9420    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9421
9422    // set return value
9423    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
9424    rt->set_isarray(false);
9425    rt->set_type(GLMessage::DataType::BOOL);
9426    rt->add_boolvalue(retValue);
9427
9428    void *pointerArgs[] = {
9429    };
9430
9431    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9432                              threadStartTime, threadEndTime,
9433                              &glmsg, pointerArgs);
9434    glContext->traceGLMessage(&glmsg);
9435
9436    return retValue;
9437}
9438
9439void GLTrace_glBindSampler(GLuint unit, GLuint sampler) {
9440    GLMessage glmsg;
9441    GLTraceContext *glContext = getGLTraceContext();
9442
9443    glmsg.set_function(GLMessage::glBindSampler);
9444
9445    // copy argument unit
9446    GLMessage_DataType *arg_unit = glmsg.add_args();
9447    arg_unit->set_isarray(false);
9448    arg_unit->set_type(GLMessage::DataType::INT);
9449    arg_unit->add_intvalue(unit);
9450
9451    // copy argument sampler
9452    GLMessage_DataType *arg_sampler = glmsg.add_args();
9453    arg_sampler->set_isarray(false);
9454    arg_sampler->set_type(GLMessage::DataType::INT);
9455    arg_sampler->add_intvalue(sampler);
9456
9457    // call function
9458    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9459    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9460    glContext->hooks->gl.glBindSampler(unit, sampler);
9461    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9462    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9463
9464    void *pointerArgs[] = {
9465    };
9466
9467    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9468                              threadStartTime, threadEndTime,
9469                              &glmsg, pointerArgs);
9470    glContext->traceGLMessage(&glmsg);
9471}
9472
9473void GLTrace_glSamplerParameteri(GLuint sampler, GLenum pname, GLint param) {
9474    GLMessage glmsg;
9475    GLTraceContext *glContext = getGLTraceContext();
9476
9477    glmsg.set_function(GLMessage::glSamplerParameteri);
9478
9479    // copy argument sampler
9480    GLMessage_DataType *arg_sampler = glmsg.add_args();
9481    arg_sampler->set_isarray(false);
9482    arg_sampler->set_type(GLMessage::DataType::INT);
9483    arg_sampler->add_intvalue(sampler);
9484
9485    // copy argument pname
9486    GLMessage_DataType *arg_pname = glmsg.add_args();
9487    arg_pname->set_isarray(false);
9488    arg_pname->set_type(GLMessage::DataType::ENUM);
9489    arg_pname->add_intvalue((int)pname);
9490
9491    // copy argument param
9492    GLMessage_DataType *arg_param = glmsg.add_args();
9493    arg_param->set_isarray(false);
9494    arg_param->set_type(GLMessage::DataType::INT);
9495    arg_param->add_intvalue(param);
9496
9497    // call function
9498    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9499    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9500    glContext->hooks->gl.glSamplerParameteri(sampler, pname, param);
9501    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9502    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9503
9504    void *pointerArgs[] = {
9505    };
9506
9507    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9508                              threadStartTime, threadEndTime,
9509                              &glmsg, pointerArgs);
9510    glContext->traceGLMessage(&glmsg);
9511}
9512
9513void GLTrace_glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param) {
9514    GLMessage glmsg;
9515    GLTraceContext *glContext = getGLTraceContext();
9516
9517    glmsg.set_function(GLMessage::glSamplerParameteriv);
9518
9519    // copy argument sampler
9520    GLMessage_DataType *arg_sampler = glmsg.add_args();
9521    arg_sampler->set_isarray(false);
9522    arg_sampler->set_type(GLMessage::DataType::INT);
9523    arg_sampler->add_intvalue(sampler);
9524
9525    // copy argument pname
9526    GLMessage_DataType *arg_pname = glmsg.add_args();
9527    arg_pname->set_isarray(false);
9528    arg_pname->set_type(GLMessage::DataType::ENUM);
9529    arg_pname->add_intvalue((int)pname);
9530
9531    // copy argument param
9532    GLMessage_DataType *arg_param = glmsg.add_args();
9533    arg_param->set_isarray(false);
9534    arg_param->set_type(GLMessage::DataType::INT64);
9535    arg_param->add_int64value((uintptr_t)param);
9536
9537    // call function
9538    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9539    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9540    glContext->hooks->gl.glSamplerParameteriv(sampler, pname, param);
9541    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9542    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9543
9544    void *pointerArgs[] = {
9545        (void *) param,
9546    };
9547
9548    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9549                              threadStartTime, threadEndTime,
9550                              &glmsg, pointerArgs);
9551    glContext->traceGLMessage(&glmsg);
9552}
9553
9554void GLTrace_glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) {
9555    GLMessage glmsg;
9556    GLTraceContext *glContext = getGLTraceContext();
9557
9558    glmsg.set_function(GLMessage::glSamplerParameterf);
9559
9560    // copy argument sampler
9561    GLMessage_DataType *arg_sampler = glmsg.add_args();
9562    arg_sampler->set_isarray(false);
9563    arg_sampler->set_type(GLMessage::DataType::INT);
9564    arg_sampler->add_intvalue(sampler);
9565
9566    // copy argument pname
9567    GLMessage_DataType *arg_pname = glmsg.add_args();
9568    arg_pname->set_isarray(false);
9569    arg_pname->set_type(GLMessage::DataType::ENUM);
9570    arg_pname->add_intvalue((int)pname);
9571
9572    // copy argument param
9573    GLMessage_DataType *arg_param = glmsg.add_args();
9574    arg_param->set_isarray(false);
9575    arg_param->set_type(GLMessage::DataType::FLOAT);
9576    arg_param->add_floatvalue(param);
9577
9578    // call function
9579    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9580    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9581    glContext->hooks->gl.glSamplerParameterf(sampler, pname, param);
9582    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9583    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9584
9585    void *pointerArgs[] = {
9586    };
9587
9588    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9589                              threadStartTime, threadEndTime,
9590                              &glmsg, pointerArgs);
9591    glContext->traceGLMessage(&glmsg);
9592}
9593
9594void GLTrace_glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param) {
9595    GLMessage glmsg;
9596    GLTraceContext *glContext = getGLTraceContext();
9597
9598    glmsg.set_function(GLMessage::glSamplerParameterfv);
9599
9600    // copy argument sampler
9601    GLMessage_DataType *arg_sampler = glmsg.add_args();
9602    arg_sampler->set_isarray(false);
9603    arg_sampler->set_type(GLMessage::DataType::INT);
9604    arg_sampler->add_intvalue(sampler);
9605
9606    // copy argument pname
9607    GLMessage_DataType *arg_pname = glmsg.add_args();
9608    arg_pname->set_isarray(false);
9609    arg_pname->set_type(GLMessage::DataType::ENUM);
9610    arg_pname->add_intvalue((int)pname);
9611
9612    // copy argument param
9613    GLMessage_DataType *arg_param = glmsg.add_args();
9614    arg_param->set_isarray(false);
9615    arg_param->set_type(GLMessage::DataType::INT64);
9616    arg_param->add_int64value((uintptr_t)param);
9617
9618    // call function
9619    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9620    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9621    glContext->hooks->gl.glSamplerParameterfv(sampler, pname, param);
9622    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9623    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9624
9625    void *pointerArgs[] = {
9626        (void *) param,
9627    };
9628
9629    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9630                              threadStartTime, threadEndTime,
9631                              &glmsg, pointerArgs);
9632    glContext->traceGLMessage(&glmsg);
9633}
9634
9635void GLTrace_glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params) {
9636    GLMessage glmsg;
9637    GLTraceContext *glContext = getGLTraceContext();
9638
9639    glmsg.set_function(GLMessage::glGetSamplerParameteriv);
9640
9641    // copy argument sampler
9642    GLMessage_DataType *arg_sampler = glmsg.add_args();
9643    arg_sampler->set_isarray(false);
9644    arg_sampler->set_type(GLMessage::DataType::INT);
9645    arg_sampler->add_intvalue(sampler);
9646
9647    // copy argument pname
9648    GLMessage_DataType *arg_pname = glmsg.add_args();
9649    arg_pname->set_isarray(false);
9650    arg_pname->set_type(GLMessage::DataType::ENUM);
9651    arg_pname->add_intvalue((int)pname);
9652
9653    // copy argument params
9654    GLMessage_DataType *arg_params = glmsg.add_args();
9655    arg_params->set_isarray(false);
9656    arg_params->set_type(GLMessage::DataType::INT64);
9657    arg_params->add_int64value((uintptr_t)params);
9658
9659    // call function
9660    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9661    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9662    glContext->hooks->gl.glGetSamplerParameteriv(sampler, pname, params);
9663    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9664    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9665
9666    void *pointerArgs[] = {
9667        (void *) params,
9668    };
9669
9670    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9671                              threadStartTime, threadEndTime,
9672                              &glmsg, pointerArgs);
9673    glContext->traceGLMessage(&glmsg);
9674}
9675
9676void GLTrace_glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params) {
9677    GLMessage glmsg;
9678    GLTraceContext *glContext = getGLTraceContext();
9679
9680    glmsg.set_function(GLMessage::glGetSamplerParameterfv);
9681
9682    // copy argument sampler
9683    GLMessage_DataType *arg_sampler = glmsg.add_args();
9684    arg_sampler->set_isarray(false);
9685    arg_sampler->set_type(GLMessage::DataType::INT);
9686    arg_sampler->add_intvalue(sampler);
9687
9688    // copy argument pname
9689    GLMessage_DataType *arg_pname = glmsg.add_args();
9690    arg_pname->set_isarray(false);
9691    arg_pname->set_type(GLMessage::DataType::ENUM);
9692    arg_pname->add_intvalue((int)pname);
9693
9694    // copy argument params
9695    GLMessage_DataType *arg_params = glmsg.add_args();
9696    arg_params->set_isarray(false);
9697    arg_params->set_type(GLMessage::DataType::INT64);
9698    arg_params->add_int64value((uintptr_t)params);
9699
9700    // call function
9701    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9702    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9703    glContext->hooks->gl.glGetSamplerParameterfv(sampler, pname, params);
9704    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9705    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9706
9707    void *pointerArgs[] = {
9708        (void *) params,
9709    };
9710
9711    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9712                              threadStartTime, threadEndTime,
9713                              &glmsg, pointerArgs);
9714    glContext->traceGLMessage(&glmsg);
9715}
9716
9717void GLTrace_glVertexAttribDivisor(GLuint index, GLuint divisor) {
9718    GLMessage glmsg;
9719    GLTraceContext *glContext = getGLTraceContext();
9720
9721    glmsg.set_function(GLMessage::glVertexAttribDivisor);
9722
9723    // copy argument index
9724    GLMessage_DataType *arg_index = glmsg.add_args();
9725    arg_index->set_isarray(false);
9726    arg_index->set_type(GLMessage::DataType::INT);
9727    arg_index->add_intvalue(index);
9728
9729    // copy argument divisor
9730    GLMessage_DataType *arg_divisor = glmsg.add_args();
9731    arg_divisor->set_isarray(false);
9732    arg_divisor->set_type(GLMessage::DataType::INT);
9733    arg_divisor->add_intvalue(divisor);
9734
9735    // call function
9736    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9737    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9738    glContext->hooks->gl.glVertexAttribDivisor(index, divisor);
9739    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9740    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9741
9742    void *pointerArgs[] = {
9743    };
9744
9745    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9746                              threadStartTime, threadEndTime,
9747                              &glmsg, pointerArgs);
9748    glContext->traceGLMessage(&glmsg);
9749}
9750
9751void GLTrace_glBindTransformFeedback(GLenum target, GLuint id) {
9752    GLMessage glmsg;
9753    GLTraceContext *glContext = getGLTraceContext();
9754
9755    glmsg.set_function(GLMessage::glBindTransformFeedback);
9756
9757    // copy argument target
9758    GLMessage_DataType *arg_target = glmsg.add_args();
9759    arg_target->set_isarray(false);
9760    arg_target->set_type(GLMessage::DataType::ENUM);
9761    arg_target->add_intvalue((int)target);
9762
9763    // copy argument id
9764    GLMessage_DataType *arg_id = glmsg.add_args();
9765    arg_id->set_isarray(false);
9766    arg_id->set_type(GLMessage::DataType::INT);
9767    arg_id->add_intvalue(id);
9768
9769    // call function
9770    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9771    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9772    glContext->hooks->gl.glBindTransformFeedback(target, id);
9773    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9774    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9775
9776    void *pointerArgs[] = {
9777    };
9778
9779    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9780                              threadStartTime, threadEndTime,
9781                              &glmsg, pointerArgs);
9782    glContext->traceGLMessage(&glmsg);
9783}
9784
9785void GLTrace_glDeleteTransformFeedbacks(GLsizei n, const GLuint* ids) {
9786    GLMessage glmsg;
9787    GLTraceContext *glContext = getGLTraceContext();
9788
9789    glmsg.set_function(GLMessage::glDeleteTransformFeedbacks);
9790
9791    // copy argument n
9792    GLMessage_DataType *arg_n = glmsg.add_args();
9793    arg_n->set_isarray(false);
9794    arg_n->set_type(GLMessage::DataType::INT);
9795    arg_n->add_intvalue(n);
9796
9797    // copy argument ids
9798    GLMessage_DataType *arg_ids = glmsg.add_args();
9799    arg_ids->set_isarray(false);
9800    arg_ids->set_type(GLMessage::DataType::INT64);
9801    arg_ids->add_int64value((uintptr_t)ids);
9802
9803    // call function
9804    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9805    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9806    glContext->hooks->gl.glDeleteTransformFeedbacks(n, ids);
9807    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9808    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9809
9810    void *pointerArgs[] = {
9811        (void *) ids,
9812    };
9813
9814    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9815                              threadStartTime, threadEndTime,
9816                              &glmsg, pointerArgs);
9817    glContext->traceGLMessage(&glmsg);
9818}
9819
9820void GLTrace_glGenTransformFeedbacks(GLsizei n, GLuint* ids) {
9821    GLMessage glmsg;
9822    GLTraceContext *glContext = getGLTraceContext();
9823
9824    glmsg.set_function(GLMessage::glGenTransformFeedbacks);
9825
9826    // copy argument n
9827    GLMessage_DataType *arg_n = glmsg.add_args();
9828    arg_n->set_isarray(false);
9829    arg_n->set_type(GLMessage::DataType::INT);
9830    arg_n->add_intvalue(n);
9831
9832    // copy argument ids
9833    GLMessage_DataType *arg_ids = glmsg.add_args();
9834    arg_ids->set_isarray(false);
9835    arg_ids->set_type(GLMessage::DataType::INT64);
9836    arg_ids->add_int64value((uintptr_t)ids);
9837
9838    // call function
9839    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9840    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9841    glContext->hooks->gl.glGenTransformFeedbacks(n, ids);
9842    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9843    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9844
9845    void *pointerArgs[] = {
9846        (void *) ids,
9847    };
9848
9849    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9850                              threadStartTime, threadEndTime,
9851                              &glmsg, pointerArgs);
9852    glContext->traceGLMessage(&glmsg);
9853}
9854
9855GLboolean GLTrace_glIsTransformFeedback(GLuint id) {
9856    GLMessage glmsg;
9857    GLTraceContext *glContext = getGLTraceContext();
9858
9859    glmsg.set_function(GLMessage::glIsTransformFeedback);
9860
9861    // copy argument id
9862    GLMessage_DataType *arg_id = glmsg.add_args();
9863    arg_id->set_isarray(false);
9864    arg_id->set_type(GLMessage::DataType::INT);
9865    arg_id->add_intvalue(id);
9866
9867    // call function
9868    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9869    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9870    GLboolean retValue = glContext->hooks->gl.glIsTransformFeedback(id);
9871    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9872    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9873
9874    // set return value
9875    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
9876    rt->set_isarray(false);
9877    rt->set_type(GLMessage::DataType::BOOL);
9878    rt->add_boolvalue(retValue);
9879
9880    void *pointerArgs[] = {
9881    };
9882
9883    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9884                              threadStartTime, threadEndTime,
9885                              &glmsg, pointerArgs);
9886    glContext->traceGLMessage(&glmsg);
9887
9888    return retValue;
9889}
9890
9891void GLTrace_glPauseTransformFeedback(void) {
9892    GLMessage glmsg;
9893    GLTraceContext *glContext = getGLTraceContext();
9894
9895    glmsg.set_function(GLMessage::glPauseTransformFeedback);
9896
9897    // call function
9898    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9899    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9900    glContext->hooks->gl.glPauseTransformFeedback();
9901    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9902    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9903
9904    void *pointerArgs[] = {
9905    };
9906
9907    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9908                              threadStartTime, threadEndTime,
9909                              &glmsg, pointerArgs);
9910    glContext->traceGLMessage(&glmsg);
9911}
9912
9913void GLTrace_glResumeTransformFeedback(void) {
9914    GLMessage glmsg;
9915    GLTraceContext *glContext = getGLTraceContext();
9916
9917    glmsg.set_function(GLMessage::glResumeTransformFeedback);
9918
9919    // call function
9920    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9921    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9922    glContext->hooks->gl.glResumeTransformFeedback();
9923    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9924    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9925
9926    void *pointerArgs[] = {
9927    };
9928
9929    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9930                              threadStartTime, threadEndTime,
9931                              &glmsg, pointerArgs);
9932    glContext->traceGLMessage(&glmsg);
9933}
9934
9935void GLTrace_glGetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary) {
9936    GLMessage glmsg;
9937    GLTraceContext *glContext = getGLTraceContext();
9938
9939    glmsg.set_function(GLMessage::glGetProgramBinary);
9940
9941    // copy argument program
9942    GLMessage_DataType *arg_program = glmsg.add_args();
9943    arg_program->set_isarray(false);
9944    arg_program->set_type(GLMessage::DataType::INT);
9945    arg_program->add_intvalue(program);
9946
9947    // copy argument bufSize
9948    GLMessage_DataType *arg_bufSize = glmsg.add_args();
9949    arg_bufSize->set_isarray(false);
9950    arg_bufSize->set_type(GLMessage::DataType::INT);
9951    arg_bufSize->add_intvalue(bufSize);
9952
9953    // copy argument length
9954    GLMessage_DataType *arg_length = glmsg.add_args();
9955    arg_length->set_isarray(false);
9956    arg_length->set_type(GLMessage::DataType::INT64);
9957    arg_length->add_int64value((uintptr_t)length);
9958
9959    // copy argument binaryFormat
9960    GLMessage_DataType *arg_binaryFormat = glmsg.add_args();
9961    arg_binaryFormat->set_isarray(false);
9962    arg_binaryFormat->set_type(GLMessage::DataType::INT64);
9963    arg_binaryFormat->add_int64value((uintptr_t)binaryFormat);
9964
9965    // copy argument binary
9966    GLMessage_DataType *arg_binary = glmsg.add_args();
9967    arg_binary->set_isarray(false);
9968    arg_binary->set_type(GLMessage::DataType::INT64);
9969    arg_binary->add_int64value((uintptr_t)binary);
9970
9971    // call function
9972    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
9973    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
9974    glContext->hooks->gl.glGetProgramBinary(program, bufSize, length, binaryFormat, binary);
9975    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
9976    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
9977
9978    void *pointerArgs[] = {
9979        (void *) length,
9980        (void *) binaryFormat,
9981        (void *) binary,
9982    };
9983
9984    fixupGLMessage(glContext, wallStartTime, wallEndTime,
9985                              threadStartTime, threadEndTime,
9986                              &glmsg, pointerArgs);
9987    glContext->traceGLMessage(&glmsg);
9988}
9989
9990void GLTrace_glProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length) {
9991    GLMessage glmsg;
9992    GLTraceContext *glContext = getGLTraceContext();
9993
9994    glmsg.set_function(GLMessage::glProgramBinary);
9995
9996    // copy argument program
9997    GLMessage_DataType *arg_program = glmsg.add_args();
9998    arg_program->set_isarray(false);
9999    arg_program->set_type(GLMessage::DataType::INT);
10000    arg_program->add_intvalue(program);
10001
10002    // copy argument binaryFormat
10003    GLMessage_DataType *arg_binaryFormat = glmsg.add_args();
10004    arg_binaryFormat->set_isarray(false);
10005    arg_binaryFormat->set_type(GLMessage::DataType::ENUM);
10006    arg_binaryFormat->add_intvalue((int)binaryFormat);
10007
10008    // copy argument binary
10009    GLMessage_DataType *arg_binary = glmsg.add_args();
10010    arg_binary->set_isarray(false);
10011    arg_binary->set_type(GLMessage::DataType::INT64);
10012    arg_binary->add_int64value((uintptr_t)binary);
10013
10014    // copy argument length
10015    GLMessage_DataType *arg_length = glmsg.add_args();
10016    arg_length->set_isarray(false);
10017    arg_length->set_type(GLMessage::DataType::INT);
10018    arg_length->add_intvalue(length);
10019
10020    // call function
10021    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10022    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10023    glContext->hooks->gl.glProgramBinary(program, binaryFormat, binary, length);
10024    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10025    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10026
10027    void *pointerArgs[] = {
10028        (void *) binary,
10029    };
10030
10031    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10032                              threadStartTime, threadEndTime,
10033                              &glmsg, pointerArgs);
10034    glContext->traceGLMessage(&glmsg);
10035}
10036
10037void GLTrace_glProgramParameteri(GLuint program, GLenum pname, GLint value) {
10038    GLMessage glmsg;
10039    GLTraceContext *glContext = getGLTraceContext();
10040
10041    glmsg.set_function(GLMessage::glProgramParameteri);
10042
10043    // copy argument program
10044    GLMessage_DataType *arg_program = glmsg.add_args();
10045    arg_program->set_isarray(false);
10046    arg_program->set_type(GLMessage::DataType::INT);
10047    arg_program->add_intvalue(program);
10048
10049    // copy argument pname
10050    GLMessage_DataType *arg_pname = glmsg.add_args();
10051    arg_pname->set_isarray(false);
10052    arg_pname->set_type(GLMessage::DataType::ENUM);
10053    arg_pname->add_intvalue((int)pname);
10054
10055    // copy argument value
10056    GLMessage_DataType *arg_value = glmsg.add_args();
10057    arg_value->set_isarray(false);
10058    arg_value->set_type(GLMessage::DataType::INT);
10059    arg_value->add_intvalue(value);
10060
10061    // call function
10062    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10063    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10064    glContext->hooks->gl.glProgramParameteri(program, pname, value);
10065    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10066    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10067
10068    void *pointerArgs[] = {
10069    };
10070
10071    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10072                              threadStartTime, threadEndTime,
10073                              &glmsg, pointerArgs);
10074    glContext->traceGLMessage(&glmsg);
10075}
10076
10077void GLTrace_glInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments) {
10078    GLMessage glmsg;
10079    GLTraceContext *glContext = getGLTraceContext();
10080
10081    glmsg.set_function(GLMessage::glInvalidateFramebuffer);
10082
10083    // copy argument target
10084    GLMessage_DataType *arg_target = glmsg.add_args();
10085    arg_target->set_isarray(false);
10086    arg_target->set_type(GLMessage::DataType::ENUM);
10087    arg_target->add_intvalue((int)target);
10088
10089    // copy argument numAttachments
10090    GLMessage_DataType *arg_numAttachments = glmsg.add_args();
10091    arg_numAttachments->set_isarray(false);
10092    arg_numAttachments->set_type(GLMessage::DataType::INT);
10093    arg_numAttachments->add_intvalue(numAttachments);
10094
10095    // copy argument attachments
10096    GLMessage_DataType *arg_attachments = glmsg.add_args();
10097    arg_attachments->set_isarray(false);
10098    arg_attachments->set_type(GLMessage::DataType::INT64);
10099    arg_attachments->add_int64value((uintptr_t)attachments);
10100
10101    // call function
10102    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10103    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10104    glContext->hooks->gl.glInvalidateFramebuffer(target, numAttachments, attachments);
10105    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10106    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10107
10108    void *pointerArgs[] = {
10109        (void *) attachments,
10110    };
10111
10112    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10113                              threadStartTime, threadEndTime,
10114                              &glmsg, pointerArgs);
10115    glContext->traceGLMessage(&glmsg);
10116}
10117
10118void GLTrace_glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height) {
10119    GLMessage glmsg;
10120    GLTraceContext *glContext = getGLTraceContext();
10121
10122    glmsg.set_function(GLMessage::glInvalidateSubFramebuffer);
10123
10124    // copy argument target
10125    GLMessage_DataType *arg_target = glmsg.add_args();
10126    arg_target->set_isarray(false);
10127    arg_target->set_type(GLMessage::DataType::ENUM);
10128    arg_target->add_intvalue((int)target);
10129
10130    // copy argument numAttachments
10131    GLMessage_DataType *arg_numAttachments = glmsg.add_args();
10132    arg_numAttachments->set_isarray(false);
10133    arg_numAttachments->set_type(GLMessage::DataType::INT);
10134    arg_numAttachments->add_intvalue(numAttachments);
10135
10136    // copy argument attachments
10137    GLMessage_DataType *arg_attachments = glmsg.add_args();
10138    arg_attachments->set_isarray(false);
10139    arg_attachments->set_type(GLMessage::DataType::INT64);
10140    arg_attachments->add_int64value((uintptr_t)attachments);
10141
10142    // copy argument x
10143    GLMessage_DataType *arg_x = glmsg.add_args();
10144    arg_x->set_isarray(false);
10145    arg_x->set_type(GLMessage::DataType::INT);
10146    arg_x->add_intvalue(x);
10147
10148    // copy argument y
10149    GLMessage_DataType *arg_y = glmsg.add_args();
10150    arg_y->set_isarray(false);
10151    arg_y->set_type(GLMessage::DataType::INT);
10152    arg_y->add_intvalue(y);
10153
10154    // copy argument width
10155    GLMessage_DataType *arg_width = glmsg.add_args();
10156    arg_width->set_isarray(false);
10157    arg_width->set_type(GLMessage::DataType::INT);
10158    arg_width->add_intvalue(width);
10159
10160    // copy argument height
10161    GLMessage_DataType *arg_height = glmsg.add_args();
10162    arg_height->set_isarray(false);
10163    arg_height->set_type(GLMessage::DataType::INT);
10164    arg_height->add_intvalue(height);
10165
10166    // call function
10167    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10168    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10169    glContext->hooks->gl.glInvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);
10170    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10171    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10172
10173    void *pointerArgs[] = {
10174        (void *) attachments,
10175    };
10176
10177    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10178                              threadStartTime, threadEndTime,
10179                              &glmsg, pointerArgs);
10180    glContext->traceGLMessage(&glmsg);
10181}
10182
10183void GLTrace_glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) {
10184    GLMessage glmsg;
10185    GLTraceContext *glContext = getGLTraceContext();
10186
10187    glmsg.set_function(GLMessage::glTexStorage2D);
10188
10189    // copy argument target
10190    GLMessage_DataType *arg_target = glmsg.add_args();
10191    arg_target->set_isarray(false);
10192    arg_target->set_type(GLMessage::DataType::ENUM);
10193    arg_target->add_intvalue((int)target);
10194
10195    // copy argument levels
10196    GLMessage_DataType *arg_levels = glmsg.add_args();
10197    arg_levels->set_isarray(false);
10198    arg_levels->set_type(GLMessage::DataType::INT);
10199    arg_levels->add_intvalue(levels);
10200
10201    // copy argument internalformat
10202    GLMessage_DataType *arg_internalformat = glmsg.add_args();
10203    arg_internalformat->set_isarray(false);
10204    arg_internalformat->set_type(GLMessage::DataType::ENUM);
10205    arg_internalformat->add_intvalue((int)internalformat);
10206
10207    // copy argument width
10208    GLMessage_DataType *arg_width = glmsg.add_args();
10209    arg_width->set_isarray(false);
10210    arg_width->set_type(GLMessage::DataType::INT);
10211    arg_width->add_intvalue(width);
10212
10213    // copy argument height
10214    GLMessage_DataType *arg_height = glmsg.add_args();
10215    arg_height->set_isarray(false);
10216    arg_height->set_type(GLMessage::DataType::INT);
10217    arg_height->add_intvalue(height);
10218
10219    // call function
10220    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10221    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10222    glContext->hooks->gl.glTexStorage2D(target, levels, internalformat, width, height);
10223    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10224    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10225
10226    void *pointerArgs[] = {
10227    };
10228
10229    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10230                              threadStartTime, threadEndTime,
10231                              &glmsg, pointerArgs);
10232    glContext->traceGLMessage(&glmsg);
10233}
10234
10235void GLTrace_glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) {
10236    GLMessage glmsg;
10237    GLTraceContext *glContext = getGLTraceContext();
10238
10239    glmsg.set_function(GLMessage::glTexStorage3D);
10240
10241    // copy argument target
10242    GLMessage_DataType *arg_target = glmsg.add_args();
10243    arg_target->set_isarray(false);
10244    arg_target->set_type(GLMessage::DataType::ENUM);
10245    arg_target->add_intvalue((int)target);
10246
10247    // copy argument levels
10248    GLMessage_DataType *arg_levels = glmsg.add_args();
10249    arg_levels->set_isarray(false);
10250    arg_levels->set_type(GLMessage::DataType::INT);
10251    arg_levels->add_intvalue(levels);
10252
10253    // copy argument internalformat
10254    GLMessage_DataType *arg_internalformat = glmsg.add_args();
10255    arg_internalformat->set_isarray(false);
10256    arg_internalformat->set_type(GLMessage::DataType::ENUM);
10257    arg_internalformat->add_intvalue((int)internalformat);
10258
10259    // copy argument width
10260    GLMessage_DataType *arg_width = glmsg.add_args();
10261    arg_width->set_isarray(false);
10262    arg_width->set_type(GLMessage::DataType::INT);
10263    arg_width->add_intvalue(width);
10264
10265    // copy argument height
10266    GLMessage_DataType *arg_height = glmsg.add_args();
10267    arg_height->set_isarray(false);
10268    arg_height->set_type(GLMessage::DataType::INT);
10269    arg_height->add_intvalue(height);
10270
10271    // copy argument depth
10272    GLMessage_DataType *arg_depth = glmsg.add_args();
10273    arg_depth->set_isarray(false);
10274    arg_depth->set_type(GLMessage::DataType::INT);
10275    arg_depth->add_intvalue(depth);
10276
10277    // call function
10278    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10279    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10280    glContext->hooks->gl.glTexStorage3D(target, levels, internalformat, width, height, depth);
10281    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10282    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10283
10284    void *pointerArgs[] = {
10285    };
10286
10287    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10288                              threadStartTime, threadEndTime,
10289                              &glmsg, pointerArgs);
10290    glContext->traceGLMessage(&glmsg);
10291}
10292
10293void GLTrace_glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params) {
10294    GLMessage glmsg;
10295    GLTraceContext *glContext = getGLTraceContext();
10296
10297    glmsg.set_function(GLMessage::glGetInternalformativ);
10298
10299    // copy argument target
10300    GLMessage_DataType *arg_target = glmsg.add_args();
10301    arg_target->set_isarray(false);
10302    arg_target->set_type(GLMessage::DataType::ENUM);
10303    arg_target->add_intvalue((int)target);
10304
10305    // copy argument internalformat
10306    GLMessage_DataType *arg_internalformat = glmsg.add_args();
10307    arg_internalformat->set_isarray(false);
10308    arg_internalformat->set_type(GLMessage::DataType::ENUM);
10309    arg_internalformat->add_intvalue((int)internalformat);
10310
10311    // copy argument pname
10312    GLMessage_DataType *arg_pname = glmsg.add_args();
10313    arg_pname->set_isarray(false);
10314    arg_pname->set_type(GLMessage::DataType::ENUM);
10315    arg_pname->add_intvalue((int)pname);
10316
10317    // copy argument bufSize
10318    GLMessage_DataType *arg_bufSize = glmsg.add_args();
10319    arg_bufSize->set_isarray(false);
10320    arg_bufSize->set_type(GLMessage::DataType::INT);
10321    arg_bufSize->add_intvalue(bufSize);
10322
10323    // copy argument params
10324    GLMessage_DataType *arg_params = glmsg.add_args();
10325    arg_params->set_isarray(false);
10326    arg_params->set_type(GLMessage::DataType::INT64);
10327    arg_params->add_int64value((uintptr_t)params);
10328
10329    // call function
10330    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10331    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10332    glContext->hooks->gl.glGetInternalformativ(target, internalformat, pname, bufSize, params);
10333    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10334    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10335
10336    void *pointerArgs[] = {
10337        (void *) params,
10338    };
10339
10340    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10341                              threadStartTime, threadEndTime,
10342                              &glmsg, pointerArgs);
10343    glContext->traceGLMessage(&glmsg);
10344}
10345
10346
10347// Definitions for GL2Ext APIs
10348
10349void GLTrace_glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image) {
10350    GLMessage glmsg;
10351    GLTraceContext *glContext = getGLTraceContext();
10352
10353    glmsg.set_function(GLMessage::glEGLImageTargetTexture2DOES);
10354
10355    // copy argument target
10356    GLMessage_DataType *arg_target = glmsg.add_args();
10357    arg_target->set_isarray(false);
10358    arg_target->set_type(GLMessage::DataType::ENUM);
10359    arg_target->add_intvalue((int)target);
10360
10361    // copy argument image
10362    GLMessage_DataType *arg_image = glmsg.add_args();
10363    arg_image->set_isarray(false);
10364    arg_image->set_type(GLMessage::DataType::INT64);
10365    arg_image->add_int64value((uintptr_t)image);
10366
10367    // call function
10368    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10369    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10370    glContext->hooks->gl.glEGLImageTargetTexture2DOES(target, image);
10371    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10372    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10373
10374    void *pointerArgs[] = {
10375        (void *) image,
10376    };
10377
10378    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10379                              threadStartTime, threadEndTime,
10380                              &glmsg, pointerArgs);
10381    glContext->traceGLMessage(&glmsg);
10382}
10383
10384void GLTrace_glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image) {
10385    GLMessage glmsg;
10386    GLTraceContext *glContext = getGLTraceContext();
10387
10388    glmsg.set_function(GLMessage::glEGLImageTargetRenderbufferStorageOES);
10389
10390    // copy argument target
10391    GLMessage_DataType *arg_target = glmsg.add_args();
10392    arg_target->set_isarray(false);
10393    arg_target->set_type(GLMessage::DataType::ENUM);
10394    arg_target->add_intvalue((int)target);
10395
10396    // copy argument image
10397    GLMessage_DataType *arg_image = glmsg.add_args();
10398    arg_image->set_isarray(false);
10399    arg_image->set_type(GLMessage::DataType::INT64);
10400    arg_image->add_int64value((uintptr_t)image);
10401
10402    // call function
10403    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10404    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10405    glContext->hooks->gl.glEGLImageTargetRenderbufferStorageOES(target, image);
10406    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10407    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10408
10409    void *pointerArgs[] = {
10410        (void *) image,
10411    };
10412
10413    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10414                              threadStartTime, threadEndTime,
10415                              &glmsg, pointerArgs);
10416    glContext->traceGLMessage(&glmsg);
10417}
10418
10419void GLTrace_glGetProgramBinaryOES(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary) {
10420    GLMessage glmsg;
10421    GLTraceContext *glContext = getGLTraceContext();
10422
10423    glmsg.set_function(GLMessage::glGetProgramBinaryOES);
10424
10425    // copy argument program
10426    GLMessage_DataType *arg_program = glmsg.add_args();
10427    arg_program->set_isarray(false);
10428    arg_program->set_type(GLMessage::DataType::INT);
10429    arg_program->add_intvalue(program);
10430
10431    // copy argument bufSize
10432    GLMessage_DataType *arg_bufSize = glmsg.add_args();
10433    arg_bufSize->set_isarray(false);
10434    arg_bufSize->set_type(GLMessage::DataType::INT);
10435    arg_bufSize->add_intvalue(bufSize);
10436
10437    // copy argument length
10438    GLMessage_DataType *arg_length = glmsg.add_args();
10439    arg_length->set_isarray(false);
10440    arg_length->set_type(GLMessage::DataType::INT64);
10441    arg_length->add_int64value((uintptr_t)length);
10442
10443    // copy argument binaryFormat
10444    GLMessage_DataType *arg_binaryFormat = glmsg.add_args();
10445    arg_binaryFormat->set_isarray(false);
10446    arg_binaryFormat->set_type(GLMessage::DataType::INT64);
10447    arg_binaryFormat->add_int64value((uintptr_t)binaryFormat);
10448
10449    // copy argument binary
10450    GLMessage_DataType *arg_binary = glmsg.add_args();
10451    arg_binary->set_isarray(false);
10452    arg_binary->set_type(GLMessage::DataType::INT64);
10453    arg_binary->add_int64value((uintptr_t)binary);
10454
10455    // call function
10456    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10457    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10458    glContext->hooks->gl.glGetProgramBinaryOES(program, bufSize, length, binaryFormat, binary);
10459    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10460    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10461
10462    void *pointerArgs[] = {
10463        (void *) length,
10464        (void *) binaryFormat,
10465        (void *) binary,
10466    };
10467
10468    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10469                              threadStartTime, threadEndTime,
10470                              &glmsg, pointerArgs);
10471    glContext->traceGLMessage(&glmsg);
10472}
10473
10474void GLTrace_glProgramBinaryOES(GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length) {
10475    GLMessage glmsg;
10476    GLTraceContext *glContext = getGLTraceContext();
10477
10478    glmsg.set_function(GLMessage::glProgramBinaryOES);
10479
10480    // copy argument program
10481    GLMessage_DataType *arg_program = glmsg.add_args();
10482    arg_program->set_isarray(false);
10483    arg_program->set_type(GLMessage::DataType::INT);
10484    arg_program->add_intvalue(program);
10485
10486    // copy argument binaryFormat
10487    GLMessage_DataType *arg_binaryFormat = glmsg.add_args();
10488    arg_binaryFormat->set_isarray(false);
10489    arg_binaryFormat->set_type(GLMessage::DataType::ENUM);
10490    arg_binaryFormat->add_intvalue((int)binaryFormat);
10491
10492    // copy argument binary
10493    GLMessage_DataType *arg_binary = glmsg.add_args();
10494    arg_binary->set_isarray(false);
10495    arg_binary->set_type(GLMessage::DataType::INT64);
10496    arg_binary->add_int64value((uintptr_t)binary);
10497
10498    // copy argument length
10499    GLMessage_DataType *arg_length = glmsg.add_args();
10500    arg_length->set_isarray(false);
10501    arg_length->set_type(GLMessage::DataType::INT);
10502    arg_length->add_intvalue(length);
10503
10504    // call function
10505    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10506    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10507    glContext->hooks->gl.glProgramBinaryOES(program, binaryFormat, binary, length);
10508    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10509    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10510
10511    void *pointerArgs[] = {
10512        (void *) binary,
10513    };
10514
10515    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10516                              threadStartTime, threadEndTime,
10517                              &glmsg, pointerArgs);
10518    glContext->traceGLMessage(&glmsg);
10519}
10520
10521void* GLTrace_glMapBufferOES(GLenum target, GLenum access) {
10522    GLMessage glmsg;
10523    GLTraceContext *glContext = getGLTraceContext();
10524
10525    glmsg.set_function(GLMessage::glMapBufferOES);
10526
10527    // copy argument target
10528    GLMessage_DataType *arg_target = glmsg.add_args();
10529    arg_target->set_isarray(false);
10530    arg_target->set_type(GLMessage::DataType::ENUM);
10531    arg_target->add_intvalue((int)target);
10532
10533    // copy argument access
10534    GLMessage_DataType *arg_access = glmsg.add_args();
10535    arg_access->set_isarray(false);
10536    arg_access->set_type(GLMessage::DataType::ENUM);
10537    arg_access->add_intvalue((int)access);
10538
10539    // call function
10540    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10541    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10542    void* retValue = glContext->hooks->gl.glMapBufferOES(target, access);
10543    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10544    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10545
10546    // set return value
10547    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
10548    rt->set_isarray(false);
10549    rt->set_type(GLMessage::DataType::INT64);
10550    rt->add_int64value((uintptr_t)retValue);
10551
10552    void *pointerArgs[] = {
10553        (void *) retValue,
10554    };
10555
10556    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10557                              threadStartTime, threadEndTime,
10558                              &glmsg, pointerArgs);
10559    glContext->traceGLMessage(&glmsg);
10560
10561    return retValue;
10562}
10563
10564GLboolean GLTrace_glUnmapBufferOES(GLenum target) {
10565    GLMessage glmsg;
10566    GLTraceContext *glContext = getGLTraceContext();
10567
10568    glmsg.set_function(GLMessage::glUnmapBufferOES);
10569
10570    // copy argument target
10571    GLMessage_DataType *arg_target = glmsg.add_args();
10572    arg_target->set_isarray(false);
10573    arg_target->set_type(GLMessage::DataType::ENUM);
10574    arg_target->add_intvalue((int)target);
10575
10576    // call function
10577    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10578    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10579    GLboolean retValue = glContext->hooks->gl.glUnmapBufferOES(target);
10580    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10581    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10582
10583    // set return value
10584    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
10585    rt->set_isarray(false);
10586    rt->set_type(GLMessage::DataType::BOOL);
10587    rt->add_boolvalue(retValue);
10588
10589    void *pointerArgs[] = {
10590    };
10591
10592    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10593                              threadStartTime, threadEndTime,
10594                              &glmsg, pointerArgs);
10595    glContext->traceGLMessage(&glmsg);
10596
10597    return retValue;
10598}
10599
10600void GLTrace_glGetBufferPointervOES(GLenum target, GLenum pname, GLvoid** params) {
10601    GLMessage glmsg;
10602    GLTraceContext *glContext = getGLTraceContext();
10603
10604    glmsg.set_function(GLMessage::glGetBufferPointervOES);
10605
10606    // copy argument target
10607    GLMessage_DataType *arg_target = glmsg.add_args();
10608    arg_target->set_isarray(false);
10609    arg_target->set_type(GLMessage::DataType::ENUM);
10610    arg_target->add_intvalue((int)target);
10611
10612    // copy argument pname
10613    GLMessage_DataType *arg_pname = glmsg.add_args();
10614    arg_pname->set_isarray(false);
10615    arg_pname->set_type(GLMessage::DataType::ENUM);
10616    arg_pname->add_intvalue((int)pname);
10617
10618    // copy argument params
10619    GLMessage_DataType *arg_params = glmsg.add_args();
10620    arg_params->set_isarray(false);
10621    arg_params->set_type(GLMessage::DataType::INT64);
10622    arg_params->add_int64value((uintptr_t)params);
10623
10624    // call function
10625    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10626    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10627    glContext->hooks->gl.glGetBufferPointervOES(target, pname, params);
10628    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10629    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10630
10631    void *pointerArgs[] = {
10632        (void *) params,
10633    };
10634
10635    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10636                              threadStartTime, threadEndTime,
10637                              &glmsg, pointerArgs);
10638    glContext->traceGLMessage(&glmsg);
10639}
10640
10641void GLTrace_glTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels) {
10642    GLMessage glmsg;
10643    GLTraceContext *glContext = getGLTraceContext();
10644
10645    glmsg.set_function(GLMessage::glTexImage3DOES);
10646
10647    // copy argument target
10648    GLMessage_DataType *arg_target = glmsg.add_args();
10649    arg_target->set_isarray(false);
10650    arg_target->set_type(GLMessage::DataType::ENUM);
10651    arg_target->add_intvalue((int)target);
10652
10653    // copy argument level
10654    GLMessage_DataType *arg_level = glmsg.add_args();
10655    arg_level->set_isarray(false);
10656    arg_level->set_type(GLMessage::DataType::INT);
10657    arg_level->add_intvalue(level);
10658
10659    // copy argument internalformat
10660    GLMessage_DataType *arg_internalformat = glmsg.add_args();
10661    arg_internalformat->set_isarray(false);
10662    arg_internalformat->set_type(GLMessage::DataType::ENUM);
10663    arg_internalformat->add_intvalue((int)internalformat);
10664
10665    // copy argument width
10666    GLMessage_DataType *arg_width = glmsg.add_args();
10667    arg_width->set_isarray(false);
10668    arg_width->set_type(GLMessage::DataType::INT);
10669    arg_width->add_intvalue(width);
10670
10671    // copy argument height
10672    GLMessage_DataType *arg_height = glmsg.add_args();
10673    arg_height->set_isarray(false);
10674    arg_height->set_type(GLMessage::DataType::INT);
10675    arg_height->add_intvalue(height);
10676
10677    // copy argument depth
10678    GLMessage_DataType *arg_depth = glmsg.add_args();
10679    arg_depth->set_isarray(false);
10680    arg_depth->set_type(GLMessage::DataType::INT);
10681    arg_depth->add_intvalue(depth);
10682
10683    // copy argument border
10684    GLMessage_DataType *arg_border = glmsg.add_args();
10685    arg_border->set_isarray(false);
10686    arg_border->set_type(GLMessage::DataType::INT);
10687    arg_border->add_intvalue(border);
10688
10689    // copy argument format
10690    GLMessage_DataType *arg_format = glmsg.add_args();
10691    arg_format->set_isarray(false);
10692    arg_format->set_type(GLMessage::DataType::ENUM);
10693    arg_format->add_intvalue((int)format);
10694
10695    // copy argument type
10696    GLMessage_DataType *arg_type = glmsg.add_args();
10697    arg_type->set_isarray(false);
10698    arg_type->set_type(GLMessage::DataType::ENUM);
10699    arg_type->add_intvalue((int)type);
10700
10701    // copy argument pixels
10702    GLMessage_DataType *arg_pixels = glmsg.add_args();
10703    arg_pixels->set_isarray(false);
10704    arg_pixels->set_type(GLMessage::DataType::INT64);
10705    arg_pixels->add_int64value((uintptr_t)pixels);
10706
10707    // call function
10708    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10709    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10710    glContext->hooks->gl.glTexImage3DOES(target, level, internalformat, width, height, depth, border, format, type, pixels);
10711    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10712    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10713
10714    void *pointerArgs[] = {
10715        (void *) pixels,
10716    };
10717
10718    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10719                              threadStartTime, threadEndTime,
10720                              &glmsg, pointerArgs);
10721    glContext->traceGLMessage(&glmsg);
10722}
10723
10724void GLTrace_glTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels) {
10725    GLMessage glmsg;
10726    GLTraceContext *glContext = getGLTraceContext();
10727
10728    glmsg.set_function(GLMessage::glTexSubImage3DOES);
10729
10730    // copy argument target
10731    GLMessage_DataType *arg_target = glmsg.add_args();
10732    arg_target->set_isarray(false);
10733    arg_target->set_type(GLMessage::DataType::ENUM);
10734    arg_target->add_intvalue((int)target);
10735
10736    // copy argument level
10737    GLMessage_DataType *arg_level = glmsg.add_args();
10738    arg_level->set_isarray(false);
10739    arg_level->set_type(GLMessage::DataType::INT);
10740    arg_level->add_intvalue(level);
10741
10742    // copy argument xoffset
10743    GLMessage_DataType *arg_xoffset = glmsg.add_args();
10744    arg_xoffset->set_isarray(false);
10745    arg_xoffset->set_type(GLMessage::DataType::INT);
10746    arg_xoffset->add_intvalue(xoffset);
10747
10748    // copy argument yoffset
10749    GLMessage_DataType *arg_yoffset = glmsg.add_args();
10750    arg_yoffset->set_isarray(false);
10751    arg_yoffset->set_type(GLMessage::DataType::INT);
10752    arg_yoffset->add_intvalue(yoffset);
10753
10754    // copy argument zoffset
10755    GLMessage_DataType *arg_zoffset = glmsg.add_args();
10756    arg_zoffset->set_isarray(false);
10757    arg_zoffset->set_type(GLMessage::DataType::INT);
10758    arg_zoffset->add_intvalue(zoffset);
10759
10760    // copy argument width
10761    GLMessage_DataType *arg_width = glmsg.add_args();
10762    arg_width->set_isarray(false);
10763    arg_width->set_type(GLMessage::DataType::INT);
10764    arg_width->add_intvalue(width);
10765
10766    // copy argument height
10767    GLMessage_DataType *arg_height = glmsg.add_args();
10768    arg_height->set_isarray(false);
10769    arg_height->set_type(GLMessage::DataType::INT);
10770    arg_height->add_intvalue(height);
10771
10772    // copy argument depth
10773    GLMessage_DataType *arg_depth = glmsg.add_args();
10774    arg_depth->set_isarray(false);
10775    arg_depth->set_type(GLMessage::DataType::INT);
10776    arg_depth->add_intvalue(depth);
10777
10778    // copy argument format
10779    GLMessage_DataType *arg_format = glmsg.add_args();
10780    arg_format->set_isarray(false);
10781    arg_format->set_type(GLMessage::DataType::ENUM);
10782    arg_format->add_intvalue((int)format);
10783
10784    // copy argument type
10785    GLMessage_DataType *arg_type = glmsg.add_args();
10786    arg_type->set_isarray(false);
10787    arg_type->set_type(GLMessage::DataType::ENUM);
10788    arg_type->add_intvalue((int)type);
10789
10790    // copy argument pixels
10791    GLMessage_DataType *arg_pixels = glmsg.add_args();
10792    arg_pixels->set_isarray(false);
10793    arg_pixels->set_type(GLMessage::DataType::INT64);
10794    arg_pixels->add_int64value((uintptr_t)pixels);
10795
10796    // call function
10797    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10798    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10799    glContext->hooks->gl.glTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
10800    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10801    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10802
10803    void *pointerArgs[] = {
10804        (void *) pixels,
10805    };
10806
10807    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10808                              threadStartTime, threadEndTime,
10809                              &glmsg, pointerArgs);
10810    glContext->traceGLMessage(&glmsg);
10811}
10812
10813void GLTrace_glCopyTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) {
10814    GLMessage glmsg;
10815    GLTraceContext *glContext = getGLTraceContext();
10816
10817    glmsg.set_function(GLMessage::glCopyTexSubImage3DOES);
10818
10819    // copy argument target
10820    GLMessage_DataType *arg_target = glmsg.add_args();
10821    arg_target->set_isarray(false);
10822    arg_target->set_type(GLMessage::DataType::ENUM);
10823    arg_target->add_intvalue((int)target);
10824
10825    // copy argument level
10826    GLMessage_DataType *arg_level = glmsg.add_args();
10827    arg_level->set_isarray(false);
10828    arg_level->set_type(GLMessage::DataType::INT);
10829    arg_level->add_intvalue(level);
10830
10831    // copy argument xoffset
10832    GLMessage_DataType *arg_xoffset = glmsg.add_args();
10833    arg_xoffset->set_isarray(false);
10834    arg_xoffset->set_type(GLMessage::DataType::INT);
10835    arg_xoffset->add_intvalue(xoffset);
10836
10837    // copy argument yoffset
10838    GLMessage_DataType *arg_yoffset = glmsg.add_args();
10839    arg_yoffset->set_isarray(false);
10840    arg_yoffset->set_type(GLMessage::DataType::INT);
10841    arg_yoffset->add_intvalue(yoffset);
10842
10843    // copy argument zoffset
10844    GLMessage_DataType *arg_zoffset = glmsg.add_args();
10845    arg_zoffset->set_isarray(false);
10846    arg_zoffset->set_type(GLMessage::DataType::INT);
10847    arg_zoffset->add_intvalue(zoffset);
10848
10849    // copy argument x
10850    GLMessage_DataType *arg_x = glmsg.add_args();
10851    arg_x->set_isarray(false);
10852    arg_x->set_type(GLMessage::DataType::INT);
10853    arg_x->add_intvalue(x);
10854
10855    // copy argument y
10856    GLMessage_DataType *arg_y = glmsg.add_args();
10857    arg_y->set_isarray(false);
10858    arg_y->set_type(GLMessage::DataType::INT);
10859    arg_y->add_intvalue(y);
10860
10861    // copy argument width
10862    GLMessage_DataType *arg_width = glmsg.add_args();
10863    arg_width->set_isarray(false);
10864    arg_width->set_type(GLMessage::DataType::INT);
10865    arg_width->add_intvalue(width);
10866
10867    // copy argument height
10868    GLMessage_DataType *arg_height = glmsg.add_args();
10869    arg_height->set_isarray(false);
10870    arg_height->set_type(GLMessage::DataType::INT);
10871    arg_height->add_intvalue(height);
10872
10873    // call function
10874    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10875    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10876    glContext->hooks->gl.glCopyTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, x, y, width, height);
10877    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10878    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10879
10880    void *pointerArgs[] = {
10881    };
10882
10883    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10884                              threadStartTime, threadEndTime,
10885                              &glmsg, pointerArgs);
10886    glContext->traceGLMessage(&glmsg);
10887}
10888
10889void GLTrace_glCompressedTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) {
10890    GLMessage glmsg;
10891    GLTraceContext *glContext = getGLTraceContext();
10892
10893    glmsg.set_function(GLMessage::glCompressedTexImage3DOES);
10894
10895    // copy argument target
10896    GLMessage_DataType *arg_target = glmsg.add_args();
10897    arg_target->set_isarray(false);
10898    arg_target->set_type(GLMessage::DataType::ENUM);
10899    arg_target->add_intvalue((int)target);
10900
10901    // copy argument level
10902    GLMessage_DataType *arg_level = glmsg.add_args();
10903    arg_level->set_isarray(false);
10904    arg_level->set_type(GLMessage::DataType::INT);
10905    arg_level->add_intvalue(level);
10906
10907    // copy argument internalformat
10908    GLMessage_DataType *arg_internalformat = glmsg.add_args();
10909    arg_internalformat->set_isarray(false);
10910    arg_internalformat->set_type(GLMessage::DataType::ENUM);
10911    arg_internalformat->add_intvalue((int)internalformat);
10912
10913    // copy argument width
10914    GLMessage_DataType *arg_width = glmsg.add_args();
10915    arg_width->set_isarray(false);
10916    arg_width->set_type(GLMessage::DataType::INT);
10917    arg_width->add_intvalue(width);
10918
10919    // copy argument height
10920    GLMessage_DataType *arg_height = glmsg.add_args();
10921    arg_height->set_isarray(false);
10922    arg_height->set_type(GLMessage::DataType::INT);
10923    arg_height->add_intvalue(height);
10924
10925    // copy argument depth
10926    GLMessage_DataType *arg_depth = glmsg.add_args();
10927    arg_depth->set_isarray(false);
10928    arg_depth->set_type(GLMessage::DataType::INT);
10929    arg_depth->add_intvalue(depth);
10930
10931    // copy argument border
10932    GLMessage_DataType *arg_border = glmsg.add_args();
10933    arg_border->set_isarray(false);
10934    arg_border->set_type(GLMessage::DataType::INT);
10935    arg_border->add_intvalue(border);
10936
10937    // copy argument imageSize
10938    GLMessage_DataType *arg_imageSize = glmsg.add_args();
10939    arg_imageSize->set_isarray(false);
10940    arg_imageSize->set_type(GLMessage::DataType::INT);
10941    arg_imageSize->add_intvalue(imageSize);
10942
10943    // copy argument data
10944    GLMessage_DataType *arg_data = glmsg.add_args();
10945    arg_data->set_isarray(false);
10946    arg_data->set_type(GLMessage::DataType::INT64);
10947    arg_data->add_int64value((uintptr_t)data);
10948
10949    // call function
10950    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
10951    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
10952    glContext->hooks->gl.glCompressedTexImage3DOES(target, level, internalformat, width, height, depth, border, imageSize, data);
10953    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
10954    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
10955
10956    void *pointerArgs[] = {
10957        (void *) data,
10958    };
10959
10960    fixupGLMessage(glContext, wallStartTime, wallEndTime,
10961                              threadStartTime, threadEndTime,
10962                              &glmsg, pointerArgs);
10963    glContext->traceGLMessage(&glmsg);
10964}
10965
10966void GLTrace_glCompressedTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) {
10967    GLMessage glmsg;
10968    GLTraceContext *glContext = getGLTraceContext();
10969
10970    glmsg.set_function(GLMessage::glCompressedTexSubImage3DOES);
10971
10972    // copy argument target
10973    GLMessage_DataType *arg_target = glmsg.add_args();
10974    arg_target->set_isarray(false);
10975    arg_target->set_type(GLMessage::DataType::ENUM);
10976    arg_target->add_intvalue((int)target);
10977
10978    // copy argument level
10979    GLMessage_DataType *arg_level = glmsg.add_args();
10980    arg_level->set_isarray(false);
10981    arg_level->set_type(GLMessage::DataType::INT);
10982    arg_level->add_intvalue(level);
10983
10984    // copy argument xoffset
10985    GLMessage_DataType *arg_xoffset = glmsg.add_args();
10986    arg_xoffset->set_isarray(false);
10987    arg_xoffset->set_type(GLMessage::DataType::INT);
10988    arg_xoffset->add_intvalue(xoffset);
10989
10990    // copy argument yoffset
10991    GLMessage_DataType *arg_yoffset = glmsg.add_args();
10992    arg_yoffset->set_isarray(false);
10993    arg_yoffset->set_type(GLMessage::DataType::INT);
10994    arg_yoffset->add_intvalue(yoffset);
10995
10996    // copy argument zoffset
10997    GLMessage_DataType *arg_zoffset = glmsg.add_args();
10998    arg_zoffset->set_isarray(false);
10999    arg_zoffset->set_type(GLMessage::DataType::INT);
11000    arg_zoffset->add_intvalue(zoffset);
11001
11002    // copy argument width
11003    GLMessage_DataType *arg_width = glmsg.add_args();
11004    arg_width->set_isarray(false);
11005    arg_width->set_type(GLMessage::DataType::INT);
11006    arg_width->add_intvalue(width);
11007
11008    // copy argument height
11009    GLMessage_DataType *arg_height = glmsg.add_args();
11010    arg_height->set_isarray(false);
11011    arg_height->set_type(GLMessage::DataType::INT);
11012    arg_height->add_intvalue(height);
11013
11014    // copy argument depth
11015    GLMessage_DataType *arg_depth = glmsg.add_args();
11016    arg_depth->set_isarray(false);
11017    arg_depth->set_type(GLMessage::DataType::INT);
11018    arg_depth->add_intvalue(depth);
11019
11020    // copy argument format
11021    GLMessage_DataType *arg_format = glmsg.add_args();
11022    arg_format->set_isarray(false);
11023    arg_format->set_type(GLMessage::DataType::ENUM);
11024    arg_format->add_intvalue((int)format);
11025
11026    // copy argument imageSize
11027    GLMessage_DataType *arg_imageSize = glmsg.add_args();
11028    arg_imageSize->set_isarray(false);
11029    arg_imageSize->set_type(GLMessage::DataType::INT);
11030    arg_imageSize->add_intvalue(imageSize);
11031
11032    // copy argument data
11033    GLMessage_DataType *arg_data = glmsg.add_args();
11034    arg_data->set_isarray(false);
11035    arg_data->set_type(GLMessage::DataType::INT64);
11036    arg_data->add_int64value((uintptr_t)data);
11037
11038    // call function
11039    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11040    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11041    glContext->hooks->gl.glCompressedTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
11042    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11043    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11044
11045    void *pointerArgs[] = {
11046        (void *) data,
11047    };
11048
11049    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11050                              threadStartTime, threadEndTime,
11051                              &glmsg, pointerArgs);
11052    glContext->traceGLMessage(&glmsg);
11053}
11054
11055void GLTrace_glFramebufferTexture3DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) {
11056    GLMessage glmsg;
11057    GLTraceContext *glContext = getGLTraceContext();
11058
11059    glmsg.set_function(GLMessage::glFramebufferTexture3DOES);
11060
11061    // copy argument target
11062    GLMessage_DataType *arg_target = glmsg.add_args();
11063    arg_target->set_isarray(false);
11064    arg_target->set_type(GLMessage::DataType::ENUM);
11065    arg_target->add_intvalue((int)target);
11066
11067    // copy argument attachment
11068    GLMessage_DataType *arg_attachment = glmsg.add_args();
11069    arg_attachment->set_isarray(false);
11070    arg_attachment->set_type(GLMessage::DataType::ENUM);
11071    arg_attachment->add_intvalue((int)attachment);
11072
11073    // copy argument textarget
11074    GLMessage_DataType *arg_textarget = glmsg.add_args();
11075    arg_textarget->set_isarray(false);
11076    arg_textarget->set_type(GLMessage::DataType::ENUM);
11077    arg_textarget->add_intvalue((int)textarget);
11078
11079    // copy argument texture
11080    GLMessage_DataType *arg_texture = glmsg.add_args();
11081    arg_texture->set_isarray(false);
11082    arg_texture->set_type(GLMessage::DataType::INT);
11083    arg_texture->add_intvalue(texture);
11084
11085    // copy argument level
11086    GLMessage_DataType *arg_level = glmsg.add_args();
11087    arg_level->set_isarray(false);
11088    arg_level->set_type(GLMessage::DataType::INT);
11089    arg_level->add_intvalue(level);
11090
11091    // copy argument zoffset
11092    GLMessage_DataType *arg_zoffset = glmsg.add_args();
11093    arg_zoffset->set_isarray(false);
11094    arg_zoffset->set_type(GLMessage::DataType::INT);
11095    arg_zoffset->add_intvalue(zoffset);
11096
11097    // call function
11098    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11099    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11100    glContext->hooks->gl.glFramebufferTexture3DOES(target, attachment, textarget, texture, level, zoffset);
11101    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11102    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11103
11104    void *pointerArgs[] = {
11105    };
11106
11107    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11108                              threadStartTime, threadEndTime,
11109                              &glmsg, pointerArgs);
11110    glContext->traceGLMessage(&glmsg);
11111}
11112
11113void GLTrace_glBindVertexArrayOES(GLuint array) {
11114    GLMessage glmsg;
11115    GLTraceContext *glContext = getGLTraceContext();
11116
11117    glmsg.set_function(GLMessage::glBindVertexArrayOES);
11118
11119    // copy argument array
11120    GLMessage_DataType *arg_array = glmsg.add_args();
11121    arg_array->set_isarray(false);
11122    arg_array->set_type(GLMessage::DataType::INT);
11123    arg_array->add_intvalue(array);
11124
11125    // call function
11126    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11127    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11128    glContext->hooks->gl.glBindVertexArrayOES(array);
11129    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11130    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11131
11132    void *pointerArgs[] = {
11133    };
11134
11135    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11136                              threadStartTime, threadEndTime,
11137                              &glmsg, pointerArgs);
11138    glContext->traceGLMessage(&glmsg);
11139}
11140
11141void GLTrace_glDeleteVertexArraysOES(GLsizei n, const GLuint *arrays) {
11142    GLMessage glmsg;
11143    GLTraceContext *glContext = getGLTraceContext();
11144
11145    glmsg.set_function(GLMessage::glDeleteVertexArraysOES);
11146
11147    // copy argument n
11148    GLMessage_DataType *arg_n = glmsg.add_args();
11149    arg_n->set_isarray(false);
11150    arg_n->set_type(GLMessage::DataType::INT);
11151    arg_n->add_intvalue(n);
11152
11153    // copy argument arrays
11154    GLMessage_DataType *arg_arrays = glmsg.add_args();
11155    arg_arrays->set_isarray(false);
11156    arg_arrays->set_type(GLMessage::DataType::INT64);
11157    arg_arrays->add_int64value((uintptr_t)arrays);
11158
11159    // call function
11160    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11161    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11162    glContext->hooks->gl.glDeleteVertexArraysOES(n, arrays);
11163    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11164    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11165
11166    void *pointerArgs[] = {
11167        (void *) arrays,
11168    };
11169
11170    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11171                              threadStartTime, threadEndTime,
11172                              &glmsg, pointerArgs);
11173    glContext->traceGLMessage(&glmsg);
11174}
11175
11176void GLTrace_glGenVertexArraysOES(GLsizei n, GLuint *arrays) {
11177    GLMessage glmsg;
11178    GLTraceContext *glContext = getGLTraceContext();
11179
11180    glmsg.set_function(GLMessage::glGenVertexArraysOES);
11181
11182    // copy argument n
11183    GLMessage_DataType *arg_n = glmsg.add_args();
11184    arg_n->set_isarray(false);
11185    arg_n->set_type(GLMessage::DataType::INT);
11186    arg_n->add_intvalue(n);
11187
11188    // copy argument arrays
11189    GLMessage_DataType *arg_arrays = glmsg.add_args();
11190    arg_arrays->set_isarray(false);
11191    arg_arrays->set_type(GLMessage::DataType::INT64);
11192    arg_arrays->add_int64value((uintptr_t)arrays);
11193
11194    // call function
11195    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11196    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11197    glContext->hooks->gl.glGenVertexArraysOES(n, arrays);
11198    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11199    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11200
11201    void *pointerArgs[] = {
11202        (void *) arrays,
11203    };
11204
11205    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11206                              threadStartTime, threadEndTime,
11207                              &glmsg, pointerArgs);
11208    glContext->traceGLMessage(&glmsg);
11209}
11210
11211GLboolean GLTrace_glIsVertexArrayOES(GLuint array) {
11212    GLMessage glmsg;
11213    GLTraceContext *glContext = getGLTraceContext();
11214
11215    glmsg.set_function(GLMessage::glIsVertexArrayOES);
11216
11217    // copy argument array
11218    GLMessage_DataType *arg_array = glmsg.add_args();
11219    arg_array->set_isarray(false);
11220    arg_array->set_type(GLMessage::DataType::INT);
11221    arg_array->add_intvalue(array);
11222
11223    // call function
11224    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11225    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11226    GLboolean retValue = glContext->hooks->gl.glIsVertexArrayOES(array);
11227    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11228    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11229
11230    // set return value
11231    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
11232    rt->set_isarray(false);
11233    rt->set_type(GLMessage::DataType::BOOL);
11234    rt->add_boolvalue(retValue);
11235
11236    void *pointerArgs[] = {
11237    };
11238
11239    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11240                              threadStartTime, threadEndTime,
11241                              &glmsg, pointerArgs);
11242    glContext->traceGLMessage(&glmsg);
11243
11244    return retValue;
11245}
11246
11247void GLTrace_glGetPerfMonitorGroupsAMD(GLint *numGroups, GLsizei groupsSize, GLuint *groups) {
11248    GLMessage glmsg;
11249    GLTraceContext *glContext = getGLTraceContext();
11250
11251    glmsg.set_function(GLMessage::glGetPerfMonitorGroupsAMD);
11252
11253    // copy argument numGroups
11254    GLMessage_DataType *arg_numGroups = glmsg.add_args();
11255    arg_numGroups->set_isarray(false);
11256    arg_numGroups->set_type(GLMessage::DataType::INT64);
11257    arg_numGroups->add_int64value((uintptr_t)numGroups);
11258
11259    // copy argument groupsSize
11260    GLMessage_DataType *arg_groupsSize = glmsg.add_args();
11261    arg_groupsSize->set_isarray(false);
11262    arg_groupsSize->set_type(GLMessage::DataType::INT);
11263    arg_groupsSize->add_intvalue(groupsSize);
11264
11265    // copy argument groups
11266    GLMessage_DataType *arg_groups = glmsg.add_args();
11267    arg_groups->set_isarray(false);
11268    arg_groups->set_type(GLMessage::DataType::INT64);
11269    arg_groups->add_int64value((uintptr_t)groups);
11270
11271    // call function
11272    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11273    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11274    glContext->hooks->gl.glGetPerfMonitorGroupsAMD(numGroups, groupsSize, groups);
11275    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11276    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11277
11278    void *pointerArgs[] = {
11279        (void *) numGroups,
11280        (void *) groups,
11281    };
11282
11283    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11284                              threadStartTime, threadEndTime,
11285                              &glmsg, pointerArgs);
11286    glContext->traceGLMessage(&glmsg);
11287}
11288
11289void GLTrace_glGetPerfMonitorCountersAMD(GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters) {
11290    GLMessage glmsg;
11291    GLTraceContext *glContext = getGLTraceContext();
11292
11293    glmsg.set_function(GLMessage::glGetPerfMonitorCountersAMD);
11294
11295    // copy argument group
11296    GLMessage_DataType *arg_group = glmsg.add_args();
11297    arg_group->set_isarray(false);
11298    arg_group->set_type(GLMessage::DataType::INT);
11299    arg_group->add_intvalue(group);
11300
11301    // copy argument numCounters
11302    GLMessage_DataType *arg_numCounters = glmsg.add_args();
11303    arg_numCounters->set_isarray(false);
11304    arg_numCounters->set_type(GLMessage::DataType::INT64);
11305    arg_numCounters->add_int64value((uintptr_t)numCounters);
11306
11307    // copy argument maxActiveCounters
11308    GLMessage_DataType *arg_maxActiveCounters = glmsg.add_args();
11309    arg_maxActiveCounters->set_isarray(false);
11310    arg_maxActiveCounters->set_type(GLMessage::DataType::INT64);
11311    arg_maxActiveCounters->add_int64value((uintptr_t)maxActiveCounters);
11312
11313    // copy argument counterSize
11314    GLMessage_DataType *arg_counterSize = glmsg.add_args();
11315    arg_counterSize->set_isarray(false);
11316    arg_counterSize->set_type(GLMessage::DataType::INT);
11317    arg_counterSize->add_intvalue(counterSize);
11318
11319    // copy argument counters
11320    GLMessage_DataType *arg_counters = glmsg.add_args();
11321    arg_counters->set_isarray(false);
11322    arg_counters->set_type(GLMessage::DataType::INT64);
11323    arg_counters->add_int64value((uintptr_t)counters);
11324
11325    // call function
11326    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11327    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11328    glContext->hooks->gl.glGetPerfMonitorCountersAMD(group, numCounters, maxActiveCounters, counterSize, counters);
11329    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11330    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11331
11332    void *pointerArgs[] = {
11333        (void *) numCounters,
11334        (void *) maxActiveCounters,
11335        (void *) counters,
11336    };
11337
11338    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11339                              threadStartTime, threadEndTime,
11340                              &glmsg, pointerArgs);
11341    glContext->traceGLMessage(&glmsg);
11342}
11343
11344void GLTrace_glGetPerfMonitorGroupStringAMD(GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString) {
11345    GLMessage glmsg;
11346    GLTraceContext *glContext = getGLTraceContext();
11347
11348    glmsg.set_function(GLMessage::glGetPerfMonitorGroupStringAMD);
11349
11350    // copy argument group
11351    GLMessage_DataType *arg_group = glmsg.add_args();
11352    arg_group->set_isarray(false);
11353    arg_group->set_type(GLMessage::DataType::INT);
11354    arg_group->add_intvalue(group);
11355
11356    // copy argument bufSize
11357    GLMessage_DataType *arg_bufSize = glmsg.add_args();
11358    arg_bufSize->set_isarray(false);
11359    arg_bufSize->set_type(GLMessage::DataType::INT);
11360    arg_bufSize->add_intvalue(bufSize);
11361
11362    // copy argument length
11363    GLMessage_DataType *arg_length = glmsg.add_args();
11364    arg_length->set_isarray(false);
11365    arg_length->set_type(GLMessage::DataType::INT64);
11366    arg_length->add_int64value((uintptr_t)length);
11367
11368    // copy argument groupString
11369    GLMessage_DataType *arg_groupString = glmsg.add_args();
11370    arg_groupString->set_isarray(false);
11371    arg_groupString->set_type(GLMessage::DataType::INT64);
11372    arg_groupString->add_int64value((uintptr_t)groupString);
11373
11374    // call function
11375    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11376    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11377    glContext->hooks->gl.glGetPerfMonitorGroupStringAMD(group, bufSize, length, groupString);
11378    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11379    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11380
11381    void *pointerArgs[] = {
11382        (void *) length,
11383        (void *) groupString,
11384    };
11385
11386    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11387                              threadStartTime, threadEndTime,
11388                              &glmsg, pointerArgs);
11389    glContext->traceGLMessage(&glmsg);
11390}
11391
11392void GLTrace_glGetPerfMonitorCounterStringAMD(GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString) {
11393    GLMessage glmsg;
11394    GLTraceContext *glContext = getGLTraceContext();
11395
11396    glmsg.set_function(GLMessage::glGetPerfMonitorCounterStringAMD);
11397
11398    // copy argument group
11399    GLMessage_DataType *arg_group = glmsg.add_args();
11400    arg_group->set_isarray(false);
11401    arg_group->set_type(GLMessage::DataType::INT);
11402    arg_group->add_intvalue(group);
11403
11404    // copy argument counter
11405    GLMessage_DataType *arg_counter = glmsg.add_args();
11406    arg_counter->set_isarray(false);
11407    arg_counter->set_type(GLMessage::DataType::INT);
11408    arg_counter->add_intvalue(counter);
11409
11410    // copy argument bufSize
11411    GLMessage_DataType *arg_bufSize = glmsg.add_args();
11412    arg_bufSize->set_isarray(false);
11413    arg_bufSize->set_type(GLMessage::DataType::INT);
11414    arg_bufSize->add_intvalue(bufSize);
11415
11416    // copy argument length
11417    GLMessage_DataType *arg_length = glmsg.add_args();
11418    arg_length->set_isarray(false);
11419    arg_length->set_type(GLMessage::DataType::INT64);
11420    arg_length->add_int64value((uintptr_t)length);
11421
11422    // copy argument counterString
11423    GLMessage_DataType *arg_counterString = glmsg.add_args();
11424    arg_counterString->set_isarray(false);
11425    arg_counterString->set_type(GLMessage::DataType::INT64);
11426    arg_counterString->add_int64value((uintptr_t)counterString);
11427
11428    // call function
11429    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11430    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11431    glContext->hooks->gl.glGetPerfMonitorCounterStringAMD(group, counter, bufSize, length, counterString);
11432    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11433    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11434
11435    void *pointerArgs[] = {
11436        (void *) length,
11437        (void *) counterString,
11438    };
11439
11440    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11441                              threadStartTime, threadEndTime,
11442                              &glmsg, pointerArgs);
11443    glContext->traceGLMessage(&glmsg);
11444}
11445
11446void GLTrace_glGetPerfMonitorCounterInfoAMD(GLuint group, GLuint counter, GLenum pname, GLvoid *data) {
11447    GLMessage glmsg;
11448    GLTraceContext *glContext = getGLTraceContext();
11449
11450    glmsg.set_function(GLMessage::glGetPerfMonitorCounterInfoAMD);
11451
11452    // copy argument group
11453    GLMessage_DataType *arg_group = glmsg.add_args();
11454    arg_group->set_isarray(false);
11455    arg_group->set_type(GLMessage::DataType::INT);
11456    arg_group->add_intvalue(group);
11457
11458    // copy argument counter
11459    GLMessage_DataType *arg_counter = glmsg.add_args();
11460    arg_counter->set_isarray(false);
11461    arg_counter->set_type(GLMessage::DataType::INT);
11462    arg_counter->add_intvalue(counter);
11463
11464    // copy argument pname
11465    GLMessage_DataType *arg_pname = glmsg.add_args();
11466    arg_pname->set_isarray(false);
11467    arg_pname->set_type(GLMessage::DataType::ENUM);
11468    arg_pname->add_intvalue((int)pname);
11469
11470    // copy argument data
11471    GLMessage_DataType *arg_data = glmsg.add_args();
11472    arg_data->set_isarray(false);
11473    arg_data->set_type(GLMessage::DataType::INT64);
11474    arg_data->add_int64value((uintptr_t)data);
11475
11476    // call function
11477    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11478    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11479    glContext->hooks->gl.glGetPerfMonitorCounterInfoAMD(group, counter, pname, data);
11480    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11481    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11482
11483    void *pointerArgs[] = {
11484        (void *) data,
11485    };
11486
11487    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11488                              threadStartTime, threadEndTime,
11489                              &glmsg, pointerArgs);
11490    glContext->traceGLMessage(&glmsg);
11491}
11492
11493void GLTrace_glGenPerfMonitorsAMD(GLsizei n, GLuint *monitors) {
11494    GLMessage glmsg;
11495    GLTraceContext *glContext = getGLTraceContext();
11496
11497    glmsg.set_function(GLMessage::glGenPerfMonitorsAMD);
11498
11499    // copy argument n
11500    GLMessage_DataType *arg_n = glmsg.add_args();
11501    arg_n->set_isarray(false);
11502    arg_n->set_type(GLMessage::DataType::INT);
11503    arg_n->add_intvalue(n);
11504
11505    // copy argument monitors
11506    GLMessage_DataType *arg_monitors = glmsg.add_args();
11507    arg_monitors->set_isarray(false);
11508    arg_monitors->set_type(GLMessage::DataType::INT64);
11509    arg_monitors->add_int64value((uintptr_t)monitors);
11510
11511    // call function
11512    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11513    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11514    glContext->hooks->gl.glGenPerfMonitorsAMD(n, monitors);
11515    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11516    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11517
11518    void *pointerArgs[] = {
11519        (void *) monitors,
11520    };
11521
11522    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11523                              threadStartTime, threadEndTime,
11524                              &glmsg, pointerArgs);
11525    glContext->traceGLMessage(&glmsg);
11526}
11527
11528void GLTrace_glDeletePerfMonitorsAMD(GLsizei n, GLuint *monitors) {
11529    GLMessage glmsg;
11530    GLTraceContext *glContext = getGLTraceContext();
11531
11532    glmsg.set_function(GLMessage::glDeletePerfMonitorsAMD);
11533
11534    // copy argument n
11535    GLMessage_DataType *arg_n = glmsg.add_args();
11536    arg_n->set_isarray(false);
11537    arg_n->set_type(GLMessage::DataType::INT);
11538    arg_n->add_intvalue(n);
11539
11540    // copy argument monitors
11541    GLMessage_DataType *arg_monitors = glmsg.add_args();
11542    arg_monitors->set_isarray(false);
11543    arg_monitors->set_type(GLMessage::DataType::INT64);
11544    arg_monitors->add_int64value((uintptr_t)monitors);
11545
11546    // call function
11547    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11548    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11549    glContext->hooks->gl.glDeletePerfMonitorsAMD(n, monitors);
11550    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11551    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11552
11553    void *pointerArgs[] = {
11554        (void *) monitors,
11555    };
11556
11557    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11558                              threadStartTime, threadEndTime,
11559                              &glmsg, pointerArgs);
11560    glContext->traceGLMessage(&glmsg);
11561}
11562
11563void GLTrace_glSelectPerfMonitorCountersAMD(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList) {
11564    GLMessage glmsg;
11565    GLTraceContext *glContext = getGLTraceContext();
11566
11567    glmsg.set_function(GLMessage::glSelectPerfMonitorCountersAMD);
11568
11569    // copy argument monitor
11570    GLMessage_DataType *arg_monitor = glmsg.add_args();
11571    arg_monitor->set_isarray(false);
11572    arg_monitor->set_type(GLMessage::DataType::INT);
11573    arg_monitor->add_intvalue(monitor);
11574
11575    // copy argument enable
11576    GLMessage_DataType *arg_enable = glmsg.add_args();
11577    arg_enable->set_isarray(false);
11578    arg_enable->set_type(GLMessage::DataType::BOOL);
11579    arg_enable->add_boolvalue(enable);
11580
11581    // copy argument group
11582    GLMessage_DataType *arg_group = glmsg.add_args();
11583    arg_group->set_isarray(false);
11584    arg_group->set_type(GLMessage::DataType::INT);
11585    arg_group->add_intvalue(group);
11586
11587    // copy argument numCounters
11588    GLMessage_DataType *arg_numCounters = glmsg.add_args();
11589    arg_numCounters->set_isarray(false);
11590    arg_numCounters->set_type(GLMessage::DataType::INT);
11591    arg_numCounters->add_intvalue(numCounters);
11592
11593    // copy argument countersList
11594    GLMessage_DataType *arg_countersList = glmsg.add_args();
11595    arg_countersList->set_isarray(false);
11596    arg_countersList->set_type(GLMessage::DataType::INT64);
11597    arg_countersList->add_int64value((uintptr_t)countersList);
11598
11599    // call function
11600    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11601    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11602    glContext->hooks->gl.glSelectPerfMonitorCountersAMD(monitor, enable, group, numCounters, countersList);
11603    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11604    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11605
11606    void *pointerArgs[] = {
11607        (void *) countersList,
11608    };
11609
11610    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11611                              threadStartTime, threadEndTime,
11612                              &glmsg, pointerArgs);
11613    glContext->traceGLMessage(&glmsg);
11614}
11615
11616void GLTrace_glBeginPerfMonitorAMD(GLuint monitor) {
11617    GLMessage glmsg;
11618    GLTraceContext *glContext = getGLTraceContext();
11619
11620    glmsg.set_function(GLMessage::glBeginPerfMonitorAMD);
11621
11622    // copy argument monitor
11623    GLMessage_DataType *arg_monitor = glmsg.add_args();
11624    arg_monitor->set_isarray(false);
11625    arg_monitor->set_type(GLMessage::DataType::INT);
11626    arg_monitor->add_intvalue(monitor);
11627
11628    // call function
11629    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11630    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11631    glContext->hooks->gl.glBeginPerfMonitorAMD(monitor);
11632    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11633    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11634
11635    void *pointerArgs[] = {
11636    };
11637
11638    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11639                              threadStartTime, threadEndTime,
11640                              &glmsg, pointerArgs);
11641    glContext->traceGLMessage(&glmsg);
11642}
11643
11644void GLTrace_glEndPerfMonitorAMD(GLuint monitor) {
11645    GLMessage glmsg;
11646    GLTraceContext *glContext = getGLTraceContext();
11647
11648    glmsg.set_function(GLMessage::glEndPerfMonitorAMD);
11649
11650    // copy argument monitor
11651    GLMessage_DataType *arg_monitor = glmsg.add_args();
11652    arg_monitor->set_isarray(false);
11653    arg_monitor->set_type(GLMessage::DataType::INT);
11654    arg_monitor->add_intvalue(monitor);
11655
11656    // call function
11657    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11658    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11659    glContext->hooks->gl.glEndPerfMonitorAMD(monitor);
11660    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11661    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11662
11663    void *pointerArgs[] = {
11664    };
11665
11666    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11667                              threadStartTime, threadEndTime,
11668                              &glmsg, pointerArgs);
11669    glContext->traceGLMessage(&glmsg);
11670}
11671
11672void GLTrace_glGetPerfMonitorCounterDataAMD(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten) {
11673    GLMessage glmsg;
11674    GLTraceContext *glContext = getGLTraceContext();
11675
11676    glmsg.set_function(GLMessage::glGetPerfMonitorCounterDataAMD);
11677
11678    // copy argument monitor
11679    GLMessage_DataType *arg_monitor = glmsg.add_args();
11680    arg_monitor->set_isarray(false);
11681    arg_monitor->set_type(GLMessage::DataType::INT);
11682    arg_monitor->add_intvalue(monitor);
11683
11684    // copy argument pname
11685    GLMessage_DataType *arg_pname = glmsg.add_args();
11686    arg_pname->set_isarray(false);
11687    arg_pname->set_type(GLMessage::DataType::ENUM);
11688    arg_pname->add_intvalue((int)pname);
11689
11690    // copy argument dataSize
11691    GLMessage_DataType *arg_dataSize = glmsg.add_args();
11692    arg_dataSize->set_isarray(false);
11693    arg_dataSize->set_type(GLMessage::DataType::INT);
11694    arg_dataSize->add_intvalue(dataSize);
11695
11696    // copy argument data
11697    GLMessage_DataType *arg_data = glmsg.add_args();
11698    arg_data->set_isarray(false);
11699    arg_data->set_type(GLMessage::DataType::INT64);
11700    arg_data->add_int64value((uintptr_t)data);
11701
11702    // copy argument bytesWritten
11703    GLMessage_DataType *arg_bytesWritten = glmsg.add_args();
11704    arg_bytesWritten->set_isarray(false);
11705    arg_bytesWritten->set_type(GLMessage::DataType::INT64);
11706    arg_bytesWritten->add_int64value((uintptr_t)bytesWritten);
11707
11708    // call function
11709    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11710    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11711    glContext->hooks->gl.glGetPerfMonitorCounterDataAMD(monitor, pname, dataSize, data, bytesWritten);
11712    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11713    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11714
11715    void *pointerArgs[] = {
11716        (void *) data,
11717        (void *) bytesWritten,
11718    };
11719
11720    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11721                              threadStartTime, threadEndTime,
11722                              &glmsg, pointerArgs);
11723    glContext->traceGLMessage(&glmsg);
11724}
11725
11726void GLTrace_glBlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {
11727    GLMessage glmsg;
11728    GLTraceContext *glContext = getGLTraceContext();
11729
11730    glmsg.set_function(GLMessage::glBlitFramebufferANGLE);
11731
11732    // copy argument srcX0
11733    GLMessage_DataType *arg_srcX0 = glmsg.add_args();
11734    arg_srcX0->set_isarray(false);
11735    arg_srcX0->set_type(GLMessage::DataType::INT);
11736    arg_srcX0->add_intvalue(srcX0);
11737
11738    // copy argument srcY0
11739    GLMessage_DataType *arg_srcY0 = glmsg.add_args();
11740    arg_srcY0->set_isarray(false);
11741    arg_srcY0->set_type(GLMessage::DataType::INT);
11742    arg_srcY0->add_intvalue(srcY0);
11743
11744    // copy argument srcX1
11745    GLMessage_DataType *arg_srcX1 = glmsg.add_args();
11746    arg_srcX1->set_isarray(false);
11747    arg_srcX1->set_type(GLMessage::DataType::INT);
11748    arg_srcX1->add_intvalue(srcX1);
11749
11750    // copy argument srcY1
11751    GLMessage_DataType *arg_srcY1 = glmsg.add_args();
11752    arg_srcY1->set_isarray(false);
11753    arg_srcY1->set_type(GLMessage::DataType::INT);
11754    arg_srcY1->add_intvalue(srcY1);
11755
11756    // copy argument dstX0
11757    GLMessage_DataType *arg_dstX0 = glmsg.add_args();
11758    arg_dstX0->set_isarray(false);
11759    arg_dstX0->set_type(GLMessage::DataType::INT);
11760    arg_dstX0->add_intvalue(dstX0);
11761
11762    // copy argument dstY0
11763    GLMessage_DataType *arg_dstY0 = glmsg.add_args();
11764    arg_dstY0->set_isarray(false);
11765    arg_dstY0->set_type(GLMessage::DataType::INT);
11766    arg_dstY0->add_intvalue(dstY0);
11767
11768    // copy argument dstX1
11769    GLMessage_DataType *arg_dstX1 = glmsg.add_args();
11770    arg_dstX1->set_isarray(false);
11771    arg_dstX1->set_type(GLMessage::DataType::INT);
11772    arg_dstX1->add_intvalue(dstX1);
11773
11774    // copy argument dstY1
11775    GLMessage_DataType *arg_dstY1 = glmsg.add_args();
11776    arg_dstY1->set_isarray(false);
11777    arg_dstY1->set_type(GLMessage::DataType::INT);
11778    arg_dstY1->add_intvalue(dstY1);
11779
11780    // copy argument mask
11781    GLMessage_DataType *arg_mask = glmsg.add_args();
11782    arg_mask->set_isarray(false);
11783    arg_mask->set_type(GLMessage::DataType::INT);
11784    arg_mask->add_intvalue(mask);
11785
11786    // copy argument filter
11787    GLMessage_DataType *arg_filter = glmsg.add_args();
11788    arg_filter->set_isarray(false);
11789    arg_filter->set_type(GLMessage::DataType::ENUM);
11790    arg_filter->add_intvalue((int)filter);
11791
11792    // call function
11793    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11794    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11795    glContext->hooks->gl.glBlitFramebufferANGLE(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
11796    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11797    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11798
11799    void *pointerArgs[] = {
11800    };
11801
11802    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11803                              threadStartTime, threadEndTime,
11804                              &glmsg, pointerArgs);
11805    glContext->traceGLMessage(&glmsg);
11806}
11807
11808void GLTrace_glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
11809    GLMessage glmsg;
11810    GLTraceContext *glContext = getGLTraceContext();
11811
11812    glmsg.set_function(GLMessage::glRenderbufferStorageMultisampleANGLE);
11813
11814    // copy argument target
11815    GLMessage_DataType *arg_target = glmsg.add_args();
11816    arg_target->set_isarray(false);
11817    arg_target->set_type(GLMessage::DataType::ENUM);
11818    arg_target->add_intvalue((int)target);
11819
11820    // copy argument samples
11821    GLMessage_DataType *arg_samples = glmsg.add_args();
11822    arg_samples->set_isarray(false);
11823    arg_samples->set_type(GLMessage::DataType::INT);
11824    arg_samples->add_intvalue(samples);
11825
11826    // copy argument internalformat
11827    GLMessage_DataType *arg_internalformat = glmsg.add_args();
11828    arg_internalformat->set_isarray(false);
11829    arg_internalformat->set_type(GLMessage::DataType::ENUM);
11830    arg_internalformat->add_intvalue((int)internalformat);
11831
11832    // copy argument width
11833    GLMessage_DataType *arg_width = glmsg.add_args();
11834    arg_width->set_isarray(false);
11835    arg_width->set_type(GLMessage::DataType::INT);
11836    arg_width->add_intvalue(width);
11837
11838    // copy argument height
11839    GLMessage_DataType *arg_height = glmsg.add_args();
11840    arg_height->set_isarray(false);
11841    arg_height->set_type(GLMessage::DataType::INT);
11842    arg_height->add_intvalue(height);
11843
11844    // call function
11845    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11846    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11847    glContext->hooks->gl.glRenderbufferStorageMultisampleANGLE(target, samples, internalformat, width, height);
11848    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11849    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11850
11851    void *pointerArgs[] = {
11852    };
11853
11854    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11855                              threadStartTime, threadEndTime,
11856                              &glmsg, pointerArgs);
11857    glContext->traceGLMessage(&glmsg);
11858}
11859
11860void GLTrace_glRenderbufferStorageMultisampleAPPLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
11861    GLMessage glmsg;
11862    GLTraceContext *glContext = getGLTraceContext();
11863
11864    glmsg.set_function(GLMessage::glRenderbufferStorageMultisampleAPPLE);
11865
11866    // copy argument target
11867    GLMessage_DataType *arg_target = glmsg.add_args();
11868    arg_target->set_isarray(false);
11869    arg_target->set_type(GLMessage::DataType::ENUM);
11870    arg_target->add_intvalue((int)target);
11871
11872    // copy argument samples
11873    GLMessage_DataType *arg_samples = glmsg.add_args();
11874    arg_samples->set_isarray(false);
11875    arg_samples->set_type(GLMessage::DataType::INT);
11876    arg_samples->add_intvalue(samples);
11877
11878    // copy argument internalformat
11879    GLMessage_DataType *arg_internalformat = glmsg.add_args();
11880    arg_internalformat->set_isarray(false);
11881    arg_internalformat->set_type(GLMessage::DataType::ENUM);
11882    arg_internalformat->add_intvalue((int)internalformat);
11883
11884    // copy argument width
11885    GLMessage_DataType *arg_width = glmsg.add_args();
11886    arg_width->set_isarray(false);
11887    arg_width->set_type(GLMessage::DataType::INT);
11888    arg_width->add_intvalue(width);
11889
11890    // copy argument height
11891    GLMessage_DataType *arg_height = glmsg.add_args();
11892    arg_height->set_isarray(false);
11893    arg_height->set_type(GLMessage::DataType::INT);
11894    arg_height->add_intvalue(height);
11895
11896    // call function
11897    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11898    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11899    glContext->hooks->gl.glRenderbufferStorageMultisampleAPPLE(target, samples, internalformat, width, height);
11900    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11901    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11902
11903    void *pointerArgs[] = {
11904    };
11905
11906    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11907                              threadStartTime, threadEndTime,
11908                              &glmsg, pointerArgs);
11909    glContext->traceGLMessage(&glmsg);
11910}
11911
11912void GLTrace_glResolveMultisampleFramebufferAPPLE(void) {
11913    GLMessage glmsg;
11914    GLTraceContext *glContext = getGLTraceContext();
11915
11916    glmsg.set_function(GLMessage::glResolveMultisampleFramebufferAPPLE);
11917
11918    // call function
11919    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11920    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11921    glContext->hooks->gl.glResolveMultisampleFramebufferAPPLE();
11922    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11923    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11924
11925    void *pointerArgs[] = {
11926    };
11927
11928    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11929                              threadStartTime, threadEndTime,
11930                              &glmsg, pointerArgs);
11931    glContext->traceGLMessage(&glmsg);
11932}
11933
11934void GLTrace_glLabelObjectEXT(GLenum type, GLuint object, GLsizei length, const GLchar *label) {
11935    GLMessage glmsg;
11936    GLTraceContext *glContext = getGLTraceContext();
11937
11938    glmsg.set_function(GLMessage::glLabelObjectEXT);
11939
11940    // copy argument type
11941    GLMessage_DataType *arg_type = glmsg.add_args();
11942    arg_type->set_isarray(false);
11943    arg_type->set_type(GLMessage::DataType::ENUM);
11944    arg_type->add_intvalue((int)type);
11945
11946    // copy argument object
11947    GLMessage_DataType *arg_object = glmsg.add_args();
11948    arg_object->set_isarray(false);
11949    arg_object->set_type(GLMessage::DataType::INT);
11950    arg_object->add_intvalue(object);
11951
11952    // copy argument length
11953    GLMessage_DataType *arg_length = glmsg.add_args();
11954    arg_length->set_isarray(false);
11955    arg_length->set_type(GLMessage::DataType::INT);
11956    arg_length->add_intvalue(length);
11957
11958    // copy argument label
11959    GLMessage_DataType *arg_label = glmsg.add_args();
11960    arg_label->set_isarray(false);
11961    arg_label->set_type(GLMessage::DataType::INT64);
11962    arg_label->add_int64value((uintptr_t)label);
11963
11964    // call function
11965    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
11966    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
11967    glContext->hooks->gl.glLabelObjectEXT(type, object, length, label);
11968    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
11969    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
11970
11971    void *pointerArgs[] = {
11972        (void *) label,
11973    };
11974
11975    fixupGLMessage(glContext, wallStartTime, wallEndTime,
11976                              threadStartTime, threadEndTime,
11977                              &glmsg, pointerArgs);
11978    glContext->traceGLMessage(&glmsg);
11979}
11980
11981void GLTrace_glGetObjectLabelEXT(GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label) {
11982    GLMessage glmsg;
11983    GLTraceContext *glContext = getGLTraceContext();
11984
11985    glmsg.set_function(GLMessage::glGetObjectLabelEXT);
11986
11987    // copy argument type
11988    GLMessage_DataType *arg_type = glmsg.add_args();
11989    arg_type->set_isarray(false);
11990    arg_type->set_type(GLMessage::DataType::ENUM);
11991    arg_type->add_intvalue((int)type);
11992
11993    // copy argument object
11994    GLMessage_DataType *arg_object = glmsg.add_args();
11995    arg_object->set_isarray(false);
11996    arg_object->set_type(GLMessage::DataType::INT);
11997    arg_object->add_intvalue(object);
11998
11999    // copy argument bufSize
12000    GLMessage_DataType *arg_bufSize = glmsg.add_args();
12001    arg_bufSize->set_isarray(false);
12002    arg_bufSize->set_type(GLMessage::DataType::INT);
12003    arg_bufSize->add_intvalue(bufSize);
12004
12005    // copy argument length
12006    GLMessage_DataType *arg_length = glmsg.add_args();
12007    arg_length->set_isarray(false);
12008    arg_length->set_type(GLMessage::DataType::INT64);
12009    arg_length->add_int64value((uintptr_t)length);
12010
12011    // copy argument label
12012    GLMessage_DataType *arg_label = glmsg.add_args();
12013    arg_label->set_isarray(false);
12014    arg_label->set_type(GLMessage::DataType::INT64);
12015    arg_label->add_int64value((uintptr_t)label);
12016
12017    // call function
12018    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12019    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12020    glContext->hooks->gl.glGetObjectLabelEXT(type, object, bufSize, length, label);
12021    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12022    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12023
12024    void *pointerArgs[] = {
12025        (void *) length,
12026        (void *) label,
12027    };
12028
12029    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12030                              threadStartTime, threadEndTime,
12031                              &glmsg, pointerArgs);
12032    glContext->traceGLMessage(&glmsg);
12033}
12034
12035void GLTrace_glInsertEventMarkerEXT(GLsizei length, const GLchar *marker) {
12036    GLMessage glmsg;
12037    GLTraceContext *glContext = getGLTraceContext();
12038
12039    glmsg.set_function(GLMessage::glInsertEventMarkerEXT);
12040
12041    // copy argument length
12042    GLMessage_DataType *arg_length = glmsg.add_args();
12043    arg_length->set_isarray(false);
12044    arg_length->set_type(GLMessage::DataType::INT);
12045    arg_length->add_intvalue(length);
12046
12047    // copy argument marker
12048    GLMessage_DataType *arg_marker = glmsg.add_args();
12049    arg_marker->set_isarray(false);
12050    arg_marker->set_type(GLMessage::DataType::INT64);
12051    arg_marker->add_int64value((uintptr_t)marker);
12052
12053    // call function
12054    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12055    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12056    glContext->hooks->gl.glInsertEventMarkerEXT(length, marker);
12057    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12058    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12059
12060    void *pointerArgs[] = {
12061        (void *) marker,
12062    };
12063
12064    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12065                              threadStartTime, threadEndTime,
12066                              &glmsg, pointerArgs);
12067    glContext->traceGLMessage(&glmsg);
12068}
12069
12070void GLTrace_glPushGroupMarkerEXT(GLsizei length, const GLchar *marker) {
12071    GLMessage glmsg;
12072    GLTraceContext *glContext = getGLTraceContext();
12073
12074    glmsg.set_function(GLMessage::glPushGroupMarkerEXT);
12075
12076    // copy argument length
12077    GLMessage_DataType *arg_length = glmsg.add_args();
12078    arg_length->set_isarray(false);
12079    arg_length->set_type(GLMessage::DataType::INT);
12080    arg_length->add_intvalue(length);
12081
12082    // copy argument marker
12083    GLMessage_DataType *arg_marker = glmsg.add_args();
12084    arg_marker->set_isarray(false);
12085    arg_marker->set_type(GLMessage::DataType::INT64);
12086    arg_marker->add_int64value((uintptr_t)marker);
12087
12088    // call function
12089    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12090    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12091    glContext->hooks->gl.glPushGroupMarkerEXT(length, marker);
12092    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12093    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12094
12095    void *pointerArgs[] = {
12096        (void *) marker,
12097    };
12098
12099    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12100                              threadStartTime, threadEndTime,
12101                              &glmsg, pointerArgs);
12102    glContext->traceGLMessage(&glmsg);
12103}
12104
12105void GLTrace_glPopGroupMarkerEXT(void) {
12106    GLMessage glmsg;
12107    GLTraceContext *glContext = getGLTraceContext();
12108
12109    glmsg.set_function(GLMessage::glPopGroupMarkerEXT);
12110
12111    // call function
12112    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12113    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12114    glContext->hooks->gl.glPopGroupMarkerEXT();
12115    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12116    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12117
12118    void *pointerArgs[] = {
12119    };
12120
12121    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12122                              threadStartTime, threadEndTime,
12123                              &glmsg, pointerArgs);
12124    glContext->traceGLMessage(&glmsg);
12125}
12126
12127void GLTrace_glDiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum *attachments) {
12128    GLMessage glmsg;
12129    GLTraceContext *glContext = getGLTraceContext();
12130
12131    glmsg.set_function(GLMessage::glDiscardFramebufferEXT);
12132
12133    // copy argument target
12134    GLMessage_DataType *arg_target = glmsg.add_args();
12135    arg_target->set_isarray(false);
12136    arg_target->set_type(GLMessage::DataType::ENUM);
12137    arg_target->add_intvalue((int)target);
12138
12139    // copy argument numAttachments
12140    GLMessage_DataType *arg_numAttachments = glmsg.add_args();
12141    arg_numAttachments->set_isarray(false);
12142    arg_numAttachments->set_type(GLMessage::DataType::INT);
12143    arg_numAttachments->add_intvalue(numAttachments);
12144
12145    // copy argument attachments
12146    GLMessage_DataType *arg_attachments = glmsg.add_args();
12147    arg_attachments->set_isarray(false);
12148    arg_attachments->set_type(GLMessage::DataType::INT64);
12149    arg_attachments->add_int64value((uintptr_t)attachments);
12150
12151    // call function
12152    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12153    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12154    glContext->hooks->gl.glDiscardFramebufferEXT(target, numAttachments, attachments);
12155    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12156    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12157
12158    void *pointerArgs[] = {
12159        (void *) attachments,
12160    };
12161
12162    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12163                              threadStartTime, threadEndTime,
12164                              &glmsg, pointerArgs);
12165    glContext->traceGLMessage(&glmsg);
12166}
12167
12168void GLTrace_glRenderbufferStorageMultisampleEXT(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
12169    GLMessage glmsg;
12170    GLTraceContext *glContext = getGLTraceContext();
12171
12172    glmsg.set_function(GLMessage::glRenderbufferStorageMultisampleEXT);
12173
12174    // copy argument target
12175    GLMessage_DataType *arg_target = glmsg.add_args();
12176    arg_target->set_isarray(false);
12177    arg_target->set_type(GLMessage::DataType::ENUM);
12178    arg_target->add_intvalue((int)target);
12179
12180    // copy argument samples
12181    GLMessage_DataType *arg_samples = glmsg.add_args();
12182    arg_samples->set_isarray(false);
12183    arg_samples->set_type(GLMessage::DataType::INT);
12184    arg_samples->add_intvalue(samples);
12185
12186    // copy argument internalformat
12187    GLMessage_DataType *arg_internalformat = glmsg.add_args();
12188    arg_internalformat->set_isarray(false);
12189    arg_internalformat->set_type(GLMessage::DataType::ENUM);
12190    arg_internalformat->add_intvalue((int)internalformat);
12191
12192    // copy argument width
12193    GLMessage_DataType *arg_width = glmsg.add_args();
12194    arg_width->set_isarray(false);
12195    arg_width->set_type(GLMessage::DataType::INT);
12196    arg_width->add_intvalue(width);
12197
12198    // copy argument height
12199    GLMessage_DataType *arg_height = glmsg.add_args();
12200    arg_height->set_isarray(false);
12201    arg_height->set_type(GLMessage::DataType::INT);
12202    arg_height->add_intvalue(height);
12203
12204    // call function
12205    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12206    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12207    glContext->hooks->gl.glRenderbufferStorageMultisampleEXT(target, samples, internalformat, width, height);
12208    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12209    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12210
12211    void *pointerArgs[] = {
12212    };
12213
12214    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12215                              threadStartTime, threadEndTime,
12216                              &glmsg, pointerArgs);
12217    glContext->traceGLMessage(&glmsg);
12218}
12219
12220void GLTrace_glFramebufferTexture2DMultisampleEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) {
12221    GLMessage glmsg;
12222    GLTraceContext *glContext = getGLTraceContext();
12223
12224    glmsg.set_function(GLMessage::glFramebufferTexture2DMultisampleEXT);
12225
12226    // copy argument target
12227    GLMessage_DataType *arg_target = glmsg.add_args();
12228    arg_target->set_isarray(false);
12229    arg_target->set_type(GLMessage::DataType::ENUM);
12230    arg_target->add_intvalue((int)target);
12231
12232    // copy argument attachment
12233    GLMessage_DataType *arg_attachment = glmsg.add_args();
12234    arg_attachment->set_isarray(false);
12235    arg_attachment->set_type(GLMessage::DataType::ENUM);
12236    arg_attachment->add_intvalue((int)attachment);
12237
12238    // copy argument textarget
12239    GLMessage_DataType *arg_textarget = glmsg.add_args();
12240    arg_textarget->set_isarray(false);
12241    arg_textarget->set_type(GLMessage::DataType::ENUM);
12242    arg_textarget->add_intvalue((int)textarget);
12243
12244    // copy argument texture
12245    GLMessage_DataType *arg_texture = glmsg.add_args();
12246    arg_texture->set_isarray(false);
12247    arg_texture->set_type(GLMessage::DataType::INT);
12248    arg_texture->add_intvalue(texture);
12249
12250    // copy argument level
12251    GLMessage_DataType *arg_level = glmsg.add_args();
12252    arg_level->set_isarray(false);
12253    arg_level->set_type(GLMessage::DataType::INT);
12254    arg_level->add_intvalue(level);
12255
12256    // copy argument samples
12257    GLMessage_DataType *arg_samples = glmsg.add_args();
12258    arg_samples->set_isarray(false);
12259    arg_samples->set_type(GLMessage::DataType::INT);
12260    arg_samples->add_intvalue(samples);
12261
12262    // call function
12263    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12264    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12265    glContext->hooks->gl.glFramebufferTexture2DMultisampleEXT(target, attachment, textarget, texture, level, samples);
12266    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12267    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12268
12269    void *pointerArgs[] = {
12270    };
12271
12272    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12273                              threadStartTime, threadEndTime,
12274                              &glmsg, pointerArgs);
12275    glContext->traceGLMessage(&glmsg);
12276}
12277
12278void GLTrace_glMultiDrawArraysEXT(GLenum mode, GLint *first, GLsizei *count, GLsizei primcount) {
12279    GLMessage glmsg;
12280    GLTraceContext *glContext = getGLTraceContext();
12281
12282    glmsg.set_function(GLMessage::glMultiDrawArraysEXT);
12283
12284    // copy argument mode
12285    GLMessage_DataType *arg_mode = glmsg.add_args();
12286    arg_mode->set_isarray(false);
12287    arg_mode->set_type(GLMessage::DataType::ENUM);
12288    arg_mode->add_intvalue((int)mode);
12289
12290    // copy argument first
12291    GLMessage_DataType *arg_first = glmsg.add_args();
12292    arg_first->set_isarray(false);
12293    arg_first->set_type(GLMessage::DataType::INT64);
12294    arg_first->add_int64value((uintptr_t)first);
12295
12296    // copy argument count
12297    GLMessage_DataType *arg_count = glmsg.add_args();
12298    arg_count->set_isarray(false);
12299    arg_count->set_type(GLMessage::DataType::INT64);
12300    arg_count->add_int64value((uintptr_t)count);
12301
12302    // copy argument primcount
12303    GLMessage_DataType *arg_primcount = glmsg.add_args();
12304    arg_primcount->set_isarray(false);
12305    arg_primcount->set_type(GLMessage::DataType::INT);
12306    arg_primcount->add_intvalue(primcount);
12307
12308    // call function
12309    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12310    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12311    glContext->hooks->gl.glMultiDrawArraysEXT(mode, first, count, primcount);
12312    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12313    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12314
12315    void *pointerArgs[] = {
12316        (void *) first,
12317        (void *) count,
12318    };
12319
12320    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12321                              threadStartTime, threadEndTime,
12322                              &glmsg, pointerArgs);
12323    glContext->traceGLMessage(&glmsg);
12324}
12325
12326void GLTrace_glMultiDrawElementsEXT(GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount) {
12327    GLMessage glmsg;
12328    GLTraceContext *glContext = getGLTraceContext();
12329
12330    glmsg.set_function(GLMessage::glMultiDrawElementsEXT);
12331
12332    // copy argument mode
12333    GLMessage_DataType *arg_mode = glmsg.add_args();
12334    arg_mode->set_isarray(false);
12335    arg_mode->set_type(GLMessage::DataType::ENUM);
12336    arg_mode->add_intvalue((int)mode);
12337
12338    // copy argument count
12339    GLMessage_DataType *arg_count = glmsg.add_args();
12340    arg_count->set_isarray(false);
12341    arg_count->set_type(GLMessage::DataType::INT64);
12342    arg_count->add_int64value((uintptr_t)count);
12343
12344    // copy argument type
12345    GLMessage_DataType *arg_type = glmsg.add_args();
12346    arg_type->set_isarray(false);
12347    arg_type->set_type(GLMessage::DataType::ENUM);
12348    arg_type->add_intvalue((int)type);
12349
12350    // copy argument indices
12351    GLMessage_DataType *arg_indices = glmsg.add_args();
12352    arg_indices->set_isarray(false);
12353    arg_indices->set_type(GLMessage::DataType::INT64);
12354    arg_indices->add_int64value((uintptr_t)indices);
12355
12356    // copy argument primcount
12357    GLMessage_DataType *arg_primcount = glmsg.add_args();
12358    arg_primcount->set_isarray(false);
12359    arg_primcount->set_type(GLMessage::DataType::INT);
12360    arg_primcount->add_intvalue(primcount);
12361
12362    // call function
12363    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12364    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12365    glContext->hooks->gl.glMultiDrawElementsEXT(mode, count, type, indices, primcount);
12366    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12367    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12368
12369    void *pointerArgs[] = {
12370        (void *) count,
12371        (void *) indices,
12372    };
12373
12374    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12375                              threadStartTime, threadEndTime,
12376                              &glmsg, pointerArgs);
12377    glContext->traceGLMessage(&glmsg);
12378}
12379
12380void GLTrace_glGenQueriesEXT(GLsizei n, GLuint *ids) {
12381    GLMessage glmsg;
12382    GLTraceContext *glContext = getGLTraceContext();
12383
12384    glmsg.set_function(GLMessage::glGenQueriesEXT);
12385
12386    // copy argument n
12387    GLMessage_DataType *arg_n = glmsg.add_args();
12388    arg_n->set_isarray(false);
12389    arg_n->set_type(GLMessage::DataType::INT);
12390    arg_n->add_intvalue(n);
12391
12392    // copy argument ids
12393    GLMessage_DataType *arg_ids = glmsg.add_args();
12394    arg_ids->set_isarray(false);
12395    arg_ids->set_type(GLMessage::DataType::INT64);
12396    arg_ids->add_int64value((uintptr_t)ids);
12397
12398    // call function
12399    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12400    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12401    glContext->hooks->gl.glGenQueriesEXT(n, ids);
12402    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12403    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12404
12405    void *pointerArgs[] = {
12406        (void *) ids,
12407    };
12408
12409    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12410                              threadStartTime, threadEndTime,
12411                              &glmsg, pointerArgs);
12412    glContext->traceGLMessage(&glmsg);
12413}
12414
12415void GLTrace_glDeleteQueriesEXT(GLsizei n, const GLuint *ids) {
12416    GLMessage glmsg;
12417    GLTraceContext *glContext = getGLTraceContext();
12418
12419    glmsg.set_function(GLMessage::glDeleteQueriesEXT);
12420
12421    // copy argument n
12422    GLMessage_DataType *arg_n = glmsg.add_args();
12423    arg_n->set_isarray(false);
12424    arg_n->set_type(GLMessage::DataType::INT);
12425    arg_n->add_intvalue(n);
12426
12427    // copy argument ids
12428    GLMessage_DataType *arg_ids = glmsg.add_args();
12429    arg_ids->set_isarray(false);
12430    arg_ids->set_type(GLMessage::DataType::INT64);
12431    arg_ids->add_int64value((uintptr_t)ids);
12432
12433    // call function
12434    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12435    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12436    glContext->hooks->gl.glDeleteQueriesEXT(n, ids);
12437    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12438    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12439
12440    void *pointerArgs[] = {
12441        (void *) ids,
12442    };
12443
12444    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12445                              threadStartTime, threadEndTime,
12446                              &glmsg, pointerArgs);
12447    glContext->traceGLMessage(&glmsg);
12448}
12449
12450GLboolean GLTrace_glIsQueryEXT(GLuint id) {
12451    GLMessage glmsg;
12452    GLTraceContext *glContext = getGLTraceContext();
12453
12454    glmsg.set_function(GLMessage::glIsQueryEXT);
12455
12456    // copy argument id
12457    GLMessage_DataType *arg_id = glmsg.add_args();
12458    arg_id->set_isarray(false);
12459    arg_id->set_type(GLMessage::DataType::INT);
12460    arg_id->add_intvalue(id);
12461
12462    // call function
12463    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12464    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12465    GLboolean retValue = glContext->hooks->gl.glIsQueryEXT(id);
12466    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12467    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12468
12469    // set return value
12470    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
12471    rt->set_isarray(false);
12472    rt->set_type(GLMessage::DataType::BOOL);
12473    rt->add_boolvalue(retValue);
12474
12475    void *pointerArgs[] = {
12476    };
12477
12478    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12479                              threadStartTime, threadEndTime,
12480                              &glmsg, pointerArgs);
12481    glContext->traceGLMessage(&glmsg);
12482
12483    return retValue;
12484}
12485
12486void GLTrace_glBeginQueryEXT(GLenum target, GLuint id) {
12487    GLMessage glmsg;
12488    GLTraceContext *glContext = getGLTraceContext();
12489
12490    glmsg.set_function(GLMessage::glBeginQueryEXT);
12491
12492    // copy argument target
12493    GLMessage_DataType *arg_target = glmsg.add_args();
12494    arg_target->set_isarray(false);
12495    arg_target->set_type(GLMessage::DataType::ENUM);
12496    arg_target->add_intvalue((int)target);
12497
12498    // copy argument id
12499    GLMessage_DataType *arg_id = glmsg.add_args();
12500    arg_id->set_isarray(false);
12501    arg_id->set_type(GLMessage::DataType::INT);
12502    arg_id->add_intvalue(id);
12503
12504    // call function
12505    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12506    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12507    glContext->hooks->gl.glBeginQueryEXT(target, id);
12508    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12509    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12510
12511    void *pointerArgs[] = {
12512    };
12513
12514    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12515                              threadStartTime, threadEndTime,
12516                              &glmsg, pointerArgs);
12517    glContext->traceGLMessage(&glmsg);
12518}
12519
12520void GLTrace_glEndQueryEXT(GLenum target) {
12521    GLMessage glmsg;
12522    GLTraceContext *glContext = getGLTraceContext();
12523
12524    glmsg.set_function(GLMessage::glEndQueryEXT);
12525
12526    // copy argument target
12527    GLMessage_DataType *arg_target = glmsg.add_args();
12528    arg_target->set_isarray(false);
12529    arg_target->set_type(GLMessage::DataType::ENUM);
12530    arg_target->add_intvalue((int)target);
12531
12532    // call function
12533    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12534    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12535    glContext->hooks->gl.glEndQueryEXT(target);
12536    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12537    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12538
12539    void *pointerArgs[] = {
12540    };
12541
12542    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12543                              threadStartTime, threadEndTime,
12544                              &glmsg, pointerArgs);
12545    glContext->traceGLMessage(&glmsg);
12546}
12547
12548void GLTrace_glGetQueryivEXT(GLenum target, GLenum pname, GLint *params) {
12549    GLMessage glmsg;
12550    GLTraceContext *glContext = getGLTraceContext();
12551
12552    glmsg.set_function(GLMessage::glGetQueryivEXT);
12553
12554    // copy argument target
12555    GLMessage_DataType *arg_target = glmsg.add_args();
12556    arg_target->set_isarray(false);
12557    arg_target->set_type(GLMessage::DataType::ENUM);
12558    arg_target->add_intvalue((int)target);
12559
12560    // copy argument pname
12561    GLMessage_DataType *arg_pname = glmsg.add_args();
12562    arg_pname->set_isarray(false);
12563    arg_pname->set_type(GLMessage::DataType::ENUM);
12564    arg_pname->add_intvalue((int)pname);
12565
12566    // copy argument params
12567    GLMessage_DataType *arg_params = glmsg.add_args();
12568    arg_params->set_isarray(false);
12569    arg_params->set_type(GLMessage::DataType::INT64);
12570    arg_params->add_int64value((uintptr_t)params);
12571
12572    // call function
12573    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12574    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12575    glContext->hooks->gl.glGetQueryivEXT(target, pname, params);
12576    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12577    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12578
12579    void *pointerArgs[] = {
12580        (void *) params,
12581    };
12582
12583    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12584                              threadStartTime, threadEndTime,
12585                              &glmsg, pointerArgs);
12586    glContext->traceGLMessage(&glmsg);
12587}
12588
12589void GLTrace_glGetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint *params) {
12590    GLMessage glmsg;
12591    GLTraceContext *glContext = getGLTraceContext();
12592
12593    glmsg.set_function(GLMessage::glGetQueryObjectuivEXT);
12594
12595    // copy argument id
12596    GLMessage_DataType *arg_id = glmsg.add_args();
12597    arg_id->set_isarray(false);
12598    arg_id->set_type(GLMessage::DataType::INT);
12599    arg_id->add_intvalue(id);
12600
12601    // copy argument pname
12602    GLMessage_DataType *arg_pname = glmsg.add_args();
12603    arg_pname->set_isarray(false);
12604    arg_pname->set_type(GLMessage::DataType::ENUM);
12605    arg_pname->add_intvalue((int)pname);
12606
12607    // copy argument params
12608    GLMessage_DataType *arg_params = glmsg.add_args();
12609    arg_params->set_isarray(false);
12610    arg_params->set_type(GLMessage::DataType::INT64);
12611    arg_params->add_int64value((uintptr_t)params);
12612
12613    // call function
12614    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12615    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12616    glContext->hooks->gl.glGetQueryObjectuivEXT(id, pname, params);
12617    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12618    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12619
12620    void *pointerArgs[] = {
12621        (void *) params,
12622    };
12623
12624    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12625                              threadStartTime, threadEndTime,
12626                              &glmsg, pointerArgs);
12627    glContext->traceGLMessage(&glmsg);
12628}
12629
12630GLenum GLTrace_glGetGraphicsResetStatusEXT(void) {
12631    GLMessage glmsg;
12632    GLTraceContext *glContext = getGLTraceContext();
12633
12634    glmsg.set_function(GLMessage::glGetGraphicsResetStatusEXT);
12635
12636    // call function
12637    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12638    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12639    GLenum retValue = glContext->hooks->gl.glGetGraphicsResetStatusEXT();
12640    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12641    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12642
12643    // set return value
12644    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
12645    rt->set_isarray(false);
12646    rt->set_type(GLMessage::DataType::ENUM);
12647    rt->add_intvalue((int)retValue);
12648
12649    void *pointerArgs[] = {
12650    };
12651
12652    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12653                              threadStartTime, threadEndTime,
12654                              &glmsg, pointerArgs);
12655    glContext->traceGLMessage(&glmsg);
12656
12657    return retValue;
12658}
12659
12660void GLTrace_glReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data) {
12661    GLMessage glmsg;
12662    GLTraceContext *glContext = getGLTraceContext();
12663
12664    glmsg.set_function(GLMessage::glReadnPixelsEXT);
12665
12666    // copy argument x
12667    GLMessage_DataType *arg_x = glmsg.add_args();
12668    arg_x->set_isarray(false);
12669    arg_x->set_type(GLMessage::DataType::INT);
12670    arg_x->add_intvalue(x);
12671
12672    // copy argument y
12673    GLMessage_DataType *arg_y = glmsg.add_args();
12674    arg_y->set_isarray(false);
12675    arg_y->set_type(GLMessage::DataType::INT);
12676    arg_y->add_intvalue(y);
12677
12678    // copy argument width
12679    GLMessage_DataType *arg_width = glmsg.add_args();
12680    arg_width->set_isarray(false);
12681    arg_width->set_type(GLMessage::DataType::INT);
12682    arg_width->add_intvalue(width);
12683
12684    // copy argument height
12685    GLMessage_DataType *arg_height = glmsg.add_args();
12686    arg_height->set_isarray(false);
12687    arg_height->set_type(GLMessage::DataType::INT);
12688    arg_height->add_intvalue(height);
12689
12690    // copy argument format
12691    GLMessage_DataType *arg_format = glmsg.add_args();
12692    arg_format->set_isarray(false);
12693    arg_format->set_type(GLMessage::DataType::ENUM);
12694    arg_format->add_intvalue((int)format);
12695
12696    // copy argument type
12697    GLMessage_DataType *arg_type = glmsg.add_args();
12698    arg_type->set_isarray(false);
12699    arg_type->set_type(GLMessage::DataType::ENUM);
12700    arg_type->add_intvalue((int)type);
12701
12702    // copy argument bufSize
12703    GLMessage_DataType *arg_bufSize = glmsg.add_args();
12704    arg_bufSize->set_isarray(false);
12705    arg_bufSize->set_type(GLMessage::DataType::INT);
12706    arg_bufSize->add_intvalue(bufSize);
12707
12708    // copy argument data
12709    GLMessage_DataType *arg_data = glmsg.add_args();
12710    arg_data->set_isarray(false);
12711    arg_data->set_type(GLMessage::DataType::INT64);
12712    arg_data->add_int64value((uintptr_t)data);
12713
12714    // call function
12715    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12716    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12717    glContext->hooks->gl.glReadnPixelsEXT(x, y, width, height, format, type, bufSize, data);
12718    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12719    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12720
12721    void *pointerArgs[] = {
12722        (void *) data,
12723    };
12724
12725    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12726                              threadStartTime, threadEndTime,
12727                              &glmsg, pointerArgs);
12728    glContext->traceGLMessage(&glmsg);
12729}
12730
12731void GLTrace_glGetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, float *params) {
12732    GLMessage glmsg;
12733    GLTraceContext *glContext = getGLTraceContext();
12734
12735    glmsg.set_function(GLMessage::glGetnUniformfvEXT);
12736
12737    // copy argument program
12738    GLMessage_DataType *arg_program = glmsg.add_args();
12739    arg_program->set_isarray(false);
12740    arg_program->set_type(GLMessage::DataType::INT);
12741    arg_program->add_intvalue(program);
12742
12743    // copy argument location
12744    GLMessage_DataType *arg_location = glmsg.add_args();
12745    arg_location->set_isarray(false);
12746    arg_location->set_type(GLMessage::DataType::INT);
12747    arg_location->add_intvalue(location);
12748
12749    // copy argument bufSize
12750    GLMessage_DataType *arg_bufSize = glmsg.add_args();
12751    arg_bufSize->set_isarray(false);
12752    arg_bufSize->set_type(GLMessage::DataType::INT);
12753    arg_bufSize->add_intvalue(bufSize);
12754
12755    // copy argument params
12756    GLMessage_DataType *arg_params = glmsg.add_args();
12757    arg_params->set_isarray(false);
12758    arg_params->set_type(GLMessage::DataType::INT64);
12759    arg_params->add_int64value((uintptr_t)params);
12760
12761    // call function
12762    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12763    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12764    glContext->hooks->gl.glGetnUniformfvEXT(program, location, bufSize, params);
12765    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12766    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12767
12768    void *pointerArgs[] = {
12769        (void *) params,
12770    };
12771
12772    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12773                              threadStartTime, threadEndTime,
12774                              &glmsg, pointerArgs);
12775    glContext->traceGLMessage(&glmsg);
12776}
12777
12778void GLTrace_glGetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint *params) {
12779    GLMessage glmsg;
12780    GLTraceContext *glContext = getGLTraceContext();
12781
12782    glmsg.set_function(GLMessage::glGetnUniformivEXT);
12783
12784    // copy argument program
12785    GLMessage_DataType *arg_program = glmsg.add_args();
12786    arg_program->set_isarray(false);
12787    arg_program->set_type(GLMessage::DataType::INT);
12788    arg_program->add_intvalue(program);
12789
12790    // copy argument location
12791    GLMessage_DataType *arg_location = glmsg.add_args();
12792    arg_location->set_isarray(false);
12793    arg_location->set_type(GLMessage::DataType::INT);
12794    arg_location->add_intvalue(location);
12795
12796    // copy argument bufSize
12797    GLMessage_DataType *arg_bufSize = glmsg.add_args();
12798    arg_bufSize->set_isarray(false);
12799    arg_bufSize->set_type(GLMessage::DataType::INT);
12800    arg_bufSize->add_intvalue(bufSize);
12801
12802    // copy argument params
12803    GLMessage_DataType *arg_params = glmsg.add_args();
12804    arg_params->set_isarray(false);
12805    arg_params->set_type(GLMessage::DataType::INT64);
12806    arg_params->add_int64value((uintptr_t)params);
12807
12808    // call function
12809    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12810    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12811    glContext->hooks->gl.glGetnUniformivEXT(program, location, bufSize, params);
12812    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12813    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12814
12815    void *pointerArgs[] = {
12816        (void *) params,
12817    };
12818
12819    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12820                              threadStartTime, threadEndTime,
12821                              &glmsg, pointerArgs);
12822    glContext->traceGLMessage(&glmsg);
12823}
12824
12825void GLTrace_glUseProgramStagesEXT(GLuint pipeline, GLbitfield stages, GLuint program) {
12826    GLMessage glmsg;
12827    GLTraceContext *glContext = getGLTraceContext();
12828
12829    glmsg.set_function(GLMessage::glUseProgramStagesEXT);
12830
12831    // copy argument pipeline
12832    GLMessage_DataType *arg_pipeline = glmsg.add_args();
12833    arg_pipeline->set_isarray(false);
12834    arg_pipeline->set_type(GLMessage::DataType::INT);
12835    arg_pipeline->add_intvalue(pipeline);
12836
12837    // copy argument stages
12838    GLMessage_DataType *arg_stages = glmsg.add_args();
12839    arg_stages->set_isarray(false);
12840    arg_stages->set_type(GLMessage::DataType::INT);
12841    arg_stages->add_intvalue(stages);
12842
12843    // copy argument program
12844    GLMessage_DataType *arg_program = glmsg.add_args();
12845    arg_program->set_isarray(false);
12846    arg_program->set_type(GLMessage::DataType::INT);
12847    arg_program->add_intvalue(program);
12848
12849    // call function
12850    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12851    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12852    glContext->hooks->gl.glUseProgramStagesEXT(pipeline, stages, program);
12853    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12854    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12855
12856    void *pointerArgs[] = {
12857    };
12858
12859    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12860                              threadStartTime, threadEndTime,
12861                              &glmsg, pointerArgs);
12862    glContext->traceGLMessage(&glmsg);
12863}
12864
12865void GLTrace_glActiveShaderProgramEXT(GLuint pipeline, GLuint program) {
12866    GLMessage glmsg;
12867    GLTraceContext *glContext = getGLTraceContext();
12868
12869    glmsg.set_function(GLMessage::glActiveShaderProgramEXT);
12870
12871    // copy argument pipeline
12872    GLMessage_DataType *arg_pipeline = glmsg.add_args();
12873    arg_pipeline->set_isarray(false);
12874    arg_pipeline->set_type(GLMessage::DataType::INT);
12875    arg_pipeline->add_intvalue(pipeline);
12876
12877    // copy argument program
12878    GLMessage_DataType *arg_program = glmsg.add_args();
12879    arg_program->set_isarray(false);
12880    arg_program->set_type(GLMessage::DataType::INT);
12881    arg_program->add_intvalue(program);
12882
12883    // call function
12884    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12885    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12886    glContext->hooks->gl.glActiveShaderProgramEXT(pipeline, program);
12887    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12888    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12889
12890    void *pointerArgs[] = {
12891    };
12892
12893    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12894                              threadStartTime, threadEndTime,
12895                              &glmsg, pointerArgs);
12896    glContext->traceGLMessage(&glmsg);
12897}
12898
12899GLuint GLTrace_glCreateShaderProgramvEXT(GLenum type, GLsizei count, const GLchar **strings) {
12900    GLMessage glmsg;
12901    GLTraceContext *glContext = getGLTraceContext();
12902
12903    glmsg.set_function(GLMessage::glCreateShaderProgramvEXT);
12904
12905    // copy argument type
12906    GLMessage_DataType *arg_type = glmsg.add_args();
12907    arg_type->set_isarray(false);
12908    arg_type->set_type(GLMessage::DataType::ENUM);
12909    arg_type->add_intvalue((int)type);
12910
12911    // copy argument count
12912    GLMessage_DataType *arg_count = glmsg.add_args();
12913    arg_count->set_isarray(false);
12914    arg_count->set_type(GLMessage::DataType::INT);
12915    arg_count->add_intvalue(count);
12916
12917    // copy argument strings
12918    GLMessage_DataType *arg_strings = glmsg.add_args();
12919    arg_strings->set_isarray(false);
12920    arg_strings->set_type(GLMessage::DataType::INT64);
12921    arg_strings->add_int64value((uintptr_t)strings);
12922
12923    // call function
12924    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12925    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12926    GLuint retValue = glContext->hooks->gl.glCreateShaderProgramvEXT(type, count, strings);
12927    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12928    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12929
12930    // set return value
12931    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
12932    rt->set_isarray(false);
12933    rt->set_type(GLMessage::DataType::INT);
12934    rt->add_intvalue(retValue);
12935
12936    void *pointerArgs[] = {
12937        (void *) strings,
12938    };
12939
12940    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12941                              threadStartTime, threadEndTime,
12942                              &glmsg, pointerArgs);
12943    glContext->traceGLMessage(&glmsg);
12944
12945    return retValue;
12946}
12947
12948void GLTrace_glBindProgramPipelineEXT(GLuint pipeline) {
12949    GLMessage glmsg;
12950    GLTraceContext *glContext = getGLTraceContext();
12951
12952    glmsg.set_function(GLMessage::glBindProgramPipelineEXT);
12953
12954    // copy argument pipeline
12955    GLMessage_DataType *arg_pipeline = glmsg.add_args();
12956    arg_pipeline->set_isarray(false);
12957    arg_pipeline->set_type(GLMessage::DataType::INT);
12958    arg_pipeline->add_intvalue(pipeline);
12959
12960    // call function
12961    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12962    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12963    glContext->hooks->gl.glBindProgramPipelineEXT(pipeline);
12964    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12965    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
12966
12967    void *pointerArgs[] = {
12968    };
12969
12970    fixupGLMessage(glContext, wallStartTime, wallEndTime,
12971                              threadStartTime, threadEndTime,
12972                              &glmsg, pointerArgs);
12973    glContext->traceGLMessage(&glmsg);
12974}
12975
12976void GLTrace_glDeleteProgramPipelinesEXT(GLsizei n, const GLuint *pipelines) {
12977    GLMessage glmsg;
12978    GLTraceContext *glContext = getGLTraceContext();
12979
12980    glmsg.set_function(GLMessage::glDeleteProgramPipelinesEXT);
12981
12982    // copy argument n
12983    GLMessage_DataType *arg_n = glmsg.add_args();
12984    arg_n->set_isarray(false);
12985    arg_n->set_type(GLMessage::DataType::INT);
12986    arg_n->add_intvalue(n);
12987
12988    // copy argument pipelines
12989    GLMessage_DataType *arg_pipelines = glmsg.add_args();
12990    arg_pipelines->set_isarray(false);
12991    arg_pipelines->set_type(GLMessage::DataType::INT64);
12992    arg_pipelines->add_int64value((uintptr_t)pipelines);
12993
12994    // call function
12995    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
12996    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
12997    glContext->hooks->gl.glDeleteProgramPipelinesEXT(n, pipelines);
12998    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
12999    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13000
13001    void *pointerArgs[] = {
13002        (void *) pipelines,
13003    };
13004
13005    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13006                              threadStartTime, threadEndTime,
13007                              &glmsg, pointerArgs);
13008    glContext->traceGLMessage(&glmsg);
13009}
13010
13011void GLTrace_glGenProgramPipelinesEXT(GLsizei n, GLuint *pipelines) {
13012    GLMessage glmsg;
13013    GLTraceContext *glContext = getGLTraceContext();
13014
13015    glmsg.set_function(GLMessage::glGenProgramPipelinesEXT);
13016
13017    // copy argument n
13018    GLMessage_DataType *arg_n = glmsg.add_args();
13019    arg_n->set_isarray(false);
13020    arg_n->set_type(GLMessage::DataType::INT);
13021    arg_n->add_intvalue(n);
13022
13023    // copy argument pipelines
13024    GLMessage_DataType *arg_pipelines = glmsg.add_args();
13025    arg_pipelines->set_isarray(false);
13026    arg_pipelines->set_type(GLMessage::DataType::INT64);
13027    arg_pipelines->add_int64value((uintptr_t)pipelines);
13028
13029    // call function
13030    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13031    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13032    glContext->hooks->gl.glGenProgramPipelinesEXT(n, pipelines);
13033    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13034    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13035
13036    void *pointerArgs[] = {
13037        (void *) pipelines,
13038    };
13039
13040    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13041                              threadStartTime, threadEndTime,
13042                              &glmsg, pointerArgs);
13043    glContext->traceGLMessage(&glmsg);
13044}
13045
13046GLboolean GLTrace_glIsProgramPipelineEXT(GLuint pipeline) {
13047    GLMessage glmsg;
13048    GLTraceContext *glContext = getGLTraceContext();
13049
13050    glmsg.set_function(GLMessage::glIsProgramPipelineEXT);
13051
13052    // copy argument pipeline
13053    GLMessage_DataType *arg_pipeline = glmsg.add_args();
13054    arg_pipeline->set_isarray(false);
13055    arg_pipeline->set_type(GLMessage::DataType::INT);
13056    arg_pipeline->add_intvalue(pipeline);
13057
13058    // call function
13059    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13060    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13061    GLboolean retValue = glContext->hooks->gl.glIsProgramPipelineEXT(pipeline);
13062    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13063    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13064
13065    // set return value
13066    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
13067    rt->set_isarray(false);
13068    rt->set_type(GLMessage::DataType::BOOL);
13069    rt->add_boolvalue(retValue);
13070
13071    void *pointerArgs[] = {
13072    };
13073
13074    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13075                              threadStartTime, threadEndTime,
13076                              &glmsg, pointerArgs);
13077    glContext->traceGLMessage(&glmsg);
13078
13079    return retValue;
13080}
13081
13082void GLTrace_glProgramParameteriEXT(GLuint program, GLenum pname, GLint value) {
13083    GLMessage glmsg;
13084    GLTraceContext *glContext = getGLTraceContext();
13085
13086    glmsg.set_function(GLMessage::glProgramParameteriEXT);
13087
13088    // copy argument program
13089    GLMessage_DataType *arg_program = glmsg.add_args();
13090    arg_program->set_isarray(false);
13091    arg_program->set_type(GLMessage::DataType::INT);
13092    arg_program->add_intvalue(program);
13093
13094    // copy argument pname
13095    GLMessage_DataType *arg_pname = glmsg.add_args();
13096    arg_pname->set_isarray(false);
13097    arg_pname->set_type(GLMessage::DataType::ENUM);
13098    arg_pname->add_intvalue((int)pname);
13099
13100    // copy argument value
13101    GLMessage_DataType *arg_value = glmsg.add_args();
13102    arg_value->set_isarray(false);
13103    arg_value->set_type(GLMessage::DataType::INT);
13104    arg_value->add_intvalue(value);
13105
13106    // call function
13107    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13108    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13109    glContext->hooks->gl.glProgramParameteriEXT(program, pname, value);
13110    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13111    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13112
13113    void *pointerArgs[] = {
13114    };
13115
13116    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13117                              threadStartTime, threadEndTime,
13118                              &glmsg, pointerArgs);
13119    glContext->traceGLMessage(&glmsg);
13120}
13121
13122void GLTrace_glGetProgramPipelineivEXT(GLuint pipeline, GLenum pname, GLint *params) {
13123    GLMessage glmsg;
13124    GLTraceContext *glContext = getGLTraceContext();
13125
13126    glmsg.set_function(GLMessage::glGetProgramPipelineivEXT);
13127
13128    // copy argument pipeline
13129    GLMessage_DataType *arg_pipeline = glmsg.add_args();
13130    arg_pipeline->set_isarray(false);
13131    arg_pipeline->set_type(GLMessage::DataType::INT);
13132    arg_pipeline->add_intvalue(pipeline);
13133
13134    // copy argument pname
13135    GLMessage_DataType *arg_pname = glmsg.add_args();
13136    arg_pname->set_isarray(false);
13137    arg_pname->set_type(GLMessage::DataType::ENUM);
13138    arg_pname->add_intvalue((int)pname);
13139
13140    // copy argument params
13141    GLMessage_DataType *arg_params = glmsg.add_args();
13142    arg_params->set_isarray(false);
13143    arg_params->set_type(GLMessage::DataType::INT64);
13144    arg_params->add_int64value((uintptr_t)params);
13145
13146    // call function
13147    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13148    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13149    glContext->hooks->gl.glGetProgramPipelineivEXT(pipeline, pname, params);
13150    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13151    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13152
13153    void *pointerArgs[] = {
13154        (void *) params,
13155    };
13156
13157    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13158                              threadStartTime, threadEndTime,
13159                              &glmsg, pointerArgs);
13160    glContext->traceGLMessage(&glmsg);
13161}
13162
13163void GLTrace_glProgramUniform1iEXT(GLuint program, GLint location, GLint x) {
13164    GLMessage glmsg;
13165    GLTraceContext *glContext = getGLTraceContext();
13166
13167    glmsg.set_function(GLMessage::glProgramUniform1iEXT);
13168
13169    // copy argument program
13170    GLMessage_DataType *arg_program = glmsg.add_args();
13171    arg_program->set_isarray(false);
13172    arg_program->set_type(GLMessage::DataType::INT);
13173    arg_program->add_intvalue(program);
13174
13175    // copy argument location
13176    GLMessage_DataType *arg_location = glmsg.add_args();
13177    arg_location->set_isarray(false);
13178    arg_location->set_type(GLMessage::DataType::INT);
13179    arg_location->add_intvalue(location);
13180
13181    // copy argument x
13182    GLMessage_DataType *arg_x = glmsg.add_args();
13183    arg_x->set_isarray(false);
13184    arg_x->set_type(GLMessage::DataType::INT);
13185    arg_x->add_intvalue(x);
13186
13187    // call function
13188    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13189    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13190    glContext->hooks->gl.glProgramUniform1iEXT(program, location, x);
13191    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13192    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13193
13194    void *pointerArgs[] = {
13195    };
13196
13197    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13198                              threadStartTime, threadEndTime,
13199                              &glmsg, pointerArgs);
13200    glContext->traceGLMessage(&glmsg);
13201}
13202
13203void GLTrace_glProgramUniform2iEXT(GLuint program, GLint location, GLint x, GLint y) {
13204    GLMessage glmsg;
13205    GLTraceContext *glContext = getGLTraceContext();
13206
13207    glmsg.set_function(GLMessage::glProgramUniform2iEXT);
13208
13209    // copy argument program
13210    GLMessage_DataType *arg_program = glmsg.add_args();
13211    arg_program->set_isarray(false);
13212    arg_program->set_type(GLMessage::DataType::INT);
13213    arg_program->add_intvalue(program);
13214
13215    // copy argument location
13216    GLMessage_DataType *arg_location = glmsg.add_args();
13217    arg_location->set_isarray(false);
13218    arg_location->set_type(GLMessage::DataType::INT);
13219    arg_location->add_intvalue(location);
13220
13221    // copy argument x
13222    GLMessage_DataType *arg_x = glmsg.add_args();
13223    arg_x->set_isarray(false);
13224    arg_x->set_type(GLMessage::DataType::INT);
13225    arg_x->add_intvalue(x);
13226
13227    // copy argument y
13228    GLMessage_DataType *arg_y = glmsg.add_args();
13229    arg_y->set_isarray(false);
13230    arg_y->set_type(GLMessage::DataType::INT);
13231    arg_y->add_intvalue(y);
13232
13233    // call function
13234    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13235    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13236    glContext->hooks->gl.glProgramUniform2iEXT(program, location, x, y);
13237    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13238    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13239
13240    void *pointerArgs[] = {
13241    };
13242
13243    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13244                              threadStartTime, threadEndTime,
13245                              &glmsg, pointerArgs);
13246    glContext->traceGLMessage(&glmsg);
13247}
13248
13249void GLTrace_glProgramUniform3iEXT(GLuint program, GLint location, GLint x, GLint y, GLint z) {
13250    GLMessage glmsg;
13251    GLTraceContext *glContext = getGLTraceContext();
13252
13253    glmsg.set_function(GLMessage::glProgramUniform3iEXT);
13254
13255    // copy argument program
13256    GLMessage_DataType *arg_program = glmsg.add_args();
13257    arg_program->set_isarray(false);
13258    arg_program->set_type(GLMessage::DataType::INT);
13259    arg_program->add_intvalue(program);
13260
13261    // copy argument location
13262    GLMessage_DataType *arg_location = glmsg.add_args();
13263    arg_location->set_isarray(false);
13264    arg_location->set_type(GLMessage::DataType::INT);
13265    arg_location->add_intvalue(location);
13266
13267    // copy argument x
13268    GLMessage_DataType *arg_x = glmsg.add_args();
13269    arg_x->set_isarray(false);
13270    arg_x->set_type(GLMessage::DataType::INT);
13271    arg_x->add_intvalue(x);
13272
13273    // copy argument y
13274    GLMessage_DataType *arg_y = glmsg.add_args();
13275    arg_y->set_isarray(false);
13276    arg_y->set_type(GLMessage::DataType::INT);
13277    arg_y->add_intvalue(y);
13278
13279    // copy argument z
13280    GLMessage_DataType *arg_z = glmsg.add_args();
13281    arg_z->set_isarray(false);
13282    arg_z->set_type(GLMessage::DataType::INT);
13283    arg_z->add_intvalue(z);
13284
13285    // call function
13286    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13287    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13288    glContext->hooks->gl.glProgramUniform3iEXT(program, location, x, y, z);
13289    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13290    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13291
13292    void *pointerArgs[] = {
13293    };
13294
13295    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13296                              threadStartTime, threadEndTime,
13297                              &glmsg, pointerArgs);
13298    glContext->traceGLMessage(&glmsg);
13299}
13300
13301void GLTrace_glProgramUniform4iEXT(GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w) {
13302    GLMessage glmsg;
13303    GLTraceContext *glContext = getGLTraceContext();
13304
13305    glmsg.set_function(GLMessage::glProgramUniform4iEXT);
13306
13307    // copy argument program
13308    GLMessage_DataType *arg_program = glmsg.add_args();
13309    arg_program->set_isarray(false);
13310    arg_program->set_type(GLMessage::DataType::INT);
13311    arg_program->add_intvalue(program);
13312
13313    // copy argument location
13314    GLMessage_DataType *arg_location = glmsg.add_args();
13315    arg_location->set_isarray(false);
13316    arg_location->set_type(GLMessage::DataType::INT);
13317    arg_location->add_intvalue(location);
13318
13319    // copy argument x
13320    GLMessage_DataType *arg_x = glmsg.add_args();
13321    arg_x->set_isarray(false);
13322    arg_x->set_type(GLMessage::DataType::INT);
13323    arg_x->add_intvalue(x);
13324
13325    // copy argument y
13326    GLMessage_DataType *arg_y = glmsg.add_args();
13327    arg_y->set_isarray(false);
13328    arg_y->set_type(GLMessage::DataType::INT);
13329    arg_y->add_intvalue(y);
13330
13331    // copy argument z
13332    GLMessage_DataType *arg_z = glmsg.add_args();
13333    arg_z->set_isarray(false);
13334    arg_z->set_type(GLMessage::DataType::INT);
13335    arg_z->add_intvalue(z);
13336
13337    // copy argument w
13338    GLMessage_DataType *arg_w = glmsg.add_args();
13339    arg_w->set_isarray(false);
13340    arg_w->set_type(GLMessage::DataType::INT);
13341    arg_w->add_intvalue(w);
13342
13343    // call function
13344    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13345    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13346    glContext->hooks->gl.glProgramUniform4iEXT(program, location, x, y, z, w);
13347    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13348    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13349
13350    void *pointerArgs[] = {
13351    };
13352
13353    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13354                              threadStartTime, threadEndTime,
13355                              &glmsg, pointerArgs);
13356    glContext->traceGLMessage(&glmsg);
13357}
13358
13359void GLTrace_glProgramUniform1fEXT(GLuint program, GLint location, GLfloat x) {
13360    GLMessage glmsg;
13361    GLTraceContext *glContext = getGLTraceContext();
13362
13363    glmsg.set_function(GLMessage::glProgramUniform1fEXT);
13364
13365    // copy argument program
13366    GLMessage_DataType *arg_program = glmsg.add_args();
13367    arg_program->set_isarray(false);
13368    arg_program->set_type(GLMessage::DataType::INT);
13369    arg_program->add_intvalue(program);
13370
13371    // copy argument location
13372    GLMessage_DataType *arg_location = glmsg.add_args();
13373    arg_location->set_isarray(false);
13374    arg_location->set_type(GLMessage::DataType::INT);
13375    arg_location->add_intvalue(location);
13376
13377    // copy argument x
13378    GLMessage_DataType *arg_x = glmsg.add_args();
13379    arg_x->set_isarray(false);
13380    arg_x->set_type(GLMessage::DataType::FLOAT);
13381    arg_x->add_floatvalue(x);
13382
13383    // call function
13384    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13385    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13386    glContext->hooks->gl.glProgramUniform1fEXT(program, location, x);
13387    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13388    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13389
13390    void *pointerArgs[] = {
13391    };
13392
13393    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13394                              threadStartTime, threadEndTime,
13395                              &glmsg, pointerArgs);
13396    glContext->traceGLMessage(&glmsg);
13397}
13398
13399void GLTrace_glProgramUniform2fEXT(GLuint program, GLint location, GLfloat x, GLfloat y) {
13400    GLMessage glmsg;
13401    GLTraceContext *glContext = getGLTraceContext();
13402
13403    glmsg.set_function(GLMessage::glProgramUniform2fEXT);
13404
13405    // copy argument program
13406    GLMessage_DataType *arg_program = glmsg.add_args();
13407    arg_program->set_isarray(false);
13408    arg_program->set_type(GLMessage::DataType::INT);
13409    arg_program->add_intvalue(program);
13410
13411    // copy argument location
13412    GLMessage_DataType *arg_location = glmsg.add_args();
13413    arg_location->set_isarray(false);
13414    arg_location->set_type(GLMessage::DataType::INT);
13415    arg_location->add_intvalue(location);
13416
13417    // copy argument x
13418    GLMessage_DataType *arg_x = glmsg.add_args();
13419    arg_x->set_isarray(false);
13420    arg_x->set_type(GLMessage::DataType::FLOAT);
13421    arg_x->add_floatvalue(x);
13422
13423    // copy argument y
13424    GLMessage_DataType *arg_y = glmsg.add_args();
13425    arg_y->set_isarray(false);
13426    arg_y->set_type(GLMessage::DataType::FLOAT);
13427    arg_y->add_floatvalue(y);
13428
13429    // call function
13430    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13431    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13432    glContext->hooks->gl.glProgramUniform2fEXT(program, location, x, y);
13433    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13434    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13435
13436    void *pointerArgs[] = {
13437    };
13438
13439    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13440                              threadStartTime, threadEndTime,
13441                              &glmsg, pointerArgs);
13442    glContext->traceGLMessage(&glmsg);
13443}
13444
13445void GLTrace_glProgramUniform3fEXT(GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z) {
13446    GLMessage glmsg;
13447    GLTraceContext *glContext = getGLTraceContext();
13448
13449    glmsg.set_function(GLMessage::glProgramUniform3fEXT);
13450
13451    // copy argument program
13452    GLMessage_DataType *arg_program = glmsg.add_args();
13453    arg_program->set_isarray(false);
13454    arg_program->set_type(GLMessage::DataType::INT);
13455    arg_program->add_intvalue(program);
13456
13457    // copy argument location
13458    GLMessage_DataType *arg_location = glmsg.add_args();
13459    arg_location->set_isarray(false);
13460    arg_location->set_type(GLMessage::DataType::INT);
13461    arg_location->add_intvalue(location);
13462
13463    // copy argument x
13464    GLMessage_DataType *arg_x = glmsg.add_args();
13465    arg_x->set_isarray(false);
13466    arg_x->set_type(GLMessage::DataType::FLOAT);
13467    arg_x->add_floatvalue(x);
13468
13469    // copy argument y
13470    GLMessage_DataType *arg_y = glmsg.add_args();
13471    arg_y->set_isarray(false);
13472    arg_y->set_type(GLMessage::DataType::FLOAT);
13473    arg_y->add_floatvalue(y);
13474
13475    // copy argument z
13476    GLMessage_DataType *arg_z = glmsg.add_args();
13477    arg_z->set_isarray(false);
13478    arg_z->set_type(GLMessage::DataType::FLOAT);
13479    arg_z->add_floatvalue(z);
13480
13481    // call function
13482    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13483    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13484    glContext->hooks->gl.glProgramUniform3fEXT(program, location, x, y, z);
13485    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13486    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13487
13488    void *pointerArgs[] = {
13489    };
13490
13491    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13492                              threadStartTime, threadEndTime,
13493                              &glmsg, pointerArgs);
13494    glContext->traceGLMessage(&glmsg);
13495}
13496
13497void GLTrace_glProgramUniform4fEXT(GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
13498    GLMessage glmsg;
13499    GLTraceContext *glContext = getGLTraceContext();
13500
13501    glmsg.set_function(GLMessage::glProgramUniform4fEXT);
13502
13503    // copy argument program
13504    GLMessage_DataType *arg_program = glmsg.add_args();
13505    arg_program->set_isarray(false);
13506    arg_program->set_type(GLMessage::DataType::INT);
13507    arg_program->add_intvalue(program);
13508
13509    // copy argument location
13510    GLMessage_DataType *arg_location = glmsg.add_args();
13511    arg_location->set_isarray(false);
13512    arg_location->set_type(GLMessage::DataType::INT);
13513    arg_location->add_intvalue(location);
13514
13515    // copy argument x
13516    GLMessage_DataType *arg_x = glmsg.add_args();
13517    arg_x->set_isarray(false);
13518    arg_x->set_type(GLMessage::DataType::FLOAT);
13519    arg_x->add_floatvalue(x);
13520
13521    // copy argument y
13522    GLMessage_DataType *arg_y = glmsg.add_args();
13523    arg_y->set_isarray(false);
13524    arg_y->set_type(GLMessage::DataType::FLOAT);
13525    arg_y->add_floatvalue(y);
13526
13527    // copy argument z
13528    GLMessage_DataType *arg_z = glmsg.add_args();
13529    arg_z->set_isarray(false);
13530    arg_z->set_type(GLMessage::DataType::FLOAT);
13531    arg_z->add_floatvalue(z);
13532
13533    // copy argument w
13534    GLMessage_DataType *arg_w = glmsg.add_args();
13535    arg_w->set_isarray(false);
13536    arg_w->set_type(GLMessage::DataType::FLOAT);
13537    arg_w->add_floatvalue(w);
13538
13539    // call function
13540    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13541    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13542    glContext->hooks->gl.glProgramUniform4fEXT(program, location, x, y, z, w);
13543    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13544    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13545
13546    void *pointerArgs[] = {
13547    };
13548
13549    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13550                              threadStartTime, threadEndTime,
13551                              &glmsg, pointerArgs);
13552    glContext->traceGLMessage(&glmsg);
13553}
13554
13555void GLTrace_glProgramUniform1ivEXT(GLuint program, GLint location, GLsizei count, const GLint *value) {
13556    GLMessage glmsg;
13557    GLTraceContext *glContext = getGLTraceContext();
13558
13559    glmsg.set_function(GLMessage::glProgramUniform1ivEXT);
13560
13561    // copy argument program
13562    GLMessage_DataType *arg_program = glmsg.add_args();
13563    arg_program->set_isarray(false);
13564    arg_program->set_type(GLMessage::DataType::INT);
13565    arg_program->add_intvalue(program);
13566
13567    // copy argument location
13568    GLMessage_DataType *arg_location = glmsg.add_args();
13569    arg_location->set_isarray(false);
13570    arg_location->set_type(GLMessage::DataType::INT);
13571    arg_location->add_intvalue(location);
13572
13573    // copy argument count
13574    GLMessage_DataType *arg_count = glmsg.add_args();
13575    arg_count->set_isarray(false);
13576    arg_count->set_type(GLMessage::DataType::INT);
13577    arg_count->add_intvalue(count);
13578
13579    // copy argument value
13580    GLMessage_DataType *arg_value = glmsg.add_args();
13581    arg_value->set_isarray(false);
13582    arg_value->set_type(GLMessage::DataType::INT64);
13583    arg_value->add_int64value((uintptr_t)value);
13584
13585    // call function
13586    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13587    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13588    glContext->hooks->gl.glProgramUniform1ivEXT(program, location, count, value);
13589    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13590    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13591
13592    void *pointerArgs[] = {
13593        (void *) value,
13594    };
13595
13596    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13597                              threadStartTime, threadEndTime,
13598                              &glmsg, pointerArgs);
13599    glContext->traceGLMessage(&glmsg);
13600}
13601
13602void GLTrace_glProgramUniform2ivEXT(GLuint program, GLint location, GLsizei count, const GLint *value) {
13603    GLMessage glmsg;
13604    GLTraceContext *glContext = getGLTraceContext();
13605
13606    glmsg.set_function(GLMessage::glProgramUniform2ivEXT);
13607
13608    // copy argument program
13609    GLMessage_DataType *arg_program = glmsg.add_args();
13610    arg_program->set_isarray(false);
13611    arg_program->set_type(GLMessage::DataType::INT);
13612    arg_program->add_intvalue(program);
13613
13614    // copy argument location
13615    GLMessage_DataType *arg_location = glmsg.add_args();
13616    arg_location->set_isarray(false);
13617    arg_location->set_type(GLMessage::DataType::INT);
13618    arg_location->add_intvalue(location);
13619
13620    // copy argument count
13621    GLMessage_DataType *arg_count = glmsg.add_args();
13622    arg_count->set_isarray(false);
13623    arg_count->set_type(GLMessage::DataType::INT);
13624    arg_count->add_intvalue(count);
13625
13626    // copy argument value
13627    GLMessage_DataType *arg_value = glmsg.add_args();
13628    arg_value->set_isarray(false);
13629    arg_value->set_type(GLMessage::DataType::INT64);
13630    arg_value->add_int64value((uintptr_t)value);
13631
13632    // call function
13633    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13634    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13635    glContext->hooks->gl.glProgramUniform2ivEXT(program, location, count, value);
13636    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13637    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13638
13639    void *pointerArgs[] = {
13640        (void *) value,
13641    };
13642
13643    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13644                              threadStartTime, threadEndTime,
13645                              &glmsg, pointerArgs);
13646    glContext->traceGLMessage(&glmsg);
13647}
13648
13649void GLTrace_glProgramUniform3ivEXT(GLuint program, GLint location, GLsizei count, const GLint *value) {
13650    GLMessage glmsg;
13651    GLTraceContext *glContext = getGLTraceContext();
13652
13653    glmsg.set_function(GLMessage::glProgramUniform3ivEXT);
13654
13655    // copy argument program
13656    GLMessage_DataType *arg_program = glmsg.add_args();
13657    arg_program->set_isarray(false);
13658    arg_program->set_type(GLMessage::DataType::INT);
13659    arg_program->add_intvalue(program);
13660
13661    // copy argument location
13662    GLMessage_DataType *arg_location = glmsg.add_args();
13663    arg_location->set_isarray(false);
13664    arg_location->set_type(GLMessage::DataType::INT);
13665    arg_location->add_intvalue(location);
13666
13667    // copy argument count
13668    GLMessage_DataType *arg_count = glmsg.add_args();
13669    arg_count->set_isarray(false);
13670    arg_count->set_type(GLMessage::DataType::INT);
13671    arg_count->add_intvalue(count);
13672
13673    // copy argument value
13674    GLMessage_DataType *arg_value = glmsg.add_args();
13675    arg_value->set_isarray(false);
13676    arg_value->set_type(GLMessage::DataType::INT64);
13677    arg_value->add_int64value((uintptr_t)value);
13678
13679    // call function
13680    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13681    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13682    glContext->hooks->gl.glProgramUniform3ivEXT(program, location, count, value);
13683    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13684    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13685
13686    void *pointerArgs[] = {
13687        (void *) value,
13688    };
13689
13690    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13691                              threadStartTime, threadEndTime,
13692                              &glmsg, pointerArgs);
13693    glContext->traceGLMessage(&glmsg);
13694}
13695
13696void GLTrace_glProgramUniform4ivEXT(GLuint program, GLint location, GLsizei count, const GLint *value) {
13697    GLMessage glmsg;
13698    GLTraceContext *glContext = getGLTraceContext();
13699
13700    glmsg.set_function(GLMessage::glProgramUniform4ivEXT);
13701
13702    // copy argument program
13703    GLMessage_DataType *arg_program = glmsg.add_args();
13704    arg_program->set_isarray(false);
13705    arg_program->set_type(GLMessage::DataType::INT);
13706    arg_program->add_intvalue(program);
13707
13708    // copy argument location
13709    GLMessage_DataType *arg_location = glmsg.add_args();
13710    arg_location->set_isarray(false);
13711    arg_location->set_type(GLMessage::DataType::INT);
13712    arg_location->add_intvalue(location);
13713
13714    // copy argument count
13715    GLMessage_DataType *arg_count = glmsg.add_args();
13716    arg_count->set_isarray(false);
13717    arg_count->set_type(GLMessage::DataType::INT);
13718    arg_count->add_intvalue(count);
13719
13720    // copy argument value
13721    GLMessage_DataType *arg_value = glmsg.add_args();
13722    arg_value->set_isarray(false);
13723    arg_value->set_type(GLMessage::DataType::INT64);
13724    arg_value->add_int64value((uintptr_t)value);
13725
13726    // call function
13727    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13728    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13729    glContext->hooks->gl.glProgramUniform4ivEXT(program, location, count, value);
13730    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13731    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13732
13733    void *pointerArgs[] = {
13734        (void *) value,
13735    };
13736
13737    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13738                              threadStartTime, threadEndTime,
13739                              &glmsg, pointerArgs);
13740    glContext->traceGLMessage(&glmsg);
13741}
13742
13743void GLTrace_glProgramUniform1fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat *value) {
13744    GLMessage glmsg;
13745    GLTraceContext *glContext = getGLTraceContext();
13746
13747    glmsg.set_function(GLMessage::glProgramUniform1fvEXT);
13748
13749    // copy argument program
13750    GLMessage_DataType *arg_program = glmsg.add_args();
13751    arg_program->set_isarray(false);
13752    arg_program->set_type(GLMessage::DataType::INT);
13753    arg_program->add_intvalue(program);
13754
13755    // copy argument location
13756    GLMessage_DataType *arg_location = glmsg.add_args();
13757    arg_location->set_isarray(false);
13758    arg_location->set_type(GLMessage::DataType::INT);
13759    arg_location->add_intvalue(location);
13760
13761    // copy argument count
13762    GLMessage_DataType *arg_count = glmsg.add_args();
13763    arg_count->set_isarray(false);
13764    arg_count->set_type(GLMessage::DataType::INT);
13765    arg_count->add_intvalue(count);
13766
13767    // copy argument value
13768    GLMessage_DataType *arg_value = glmsg.add_args();
13769    arg_value->set_isarray(false);
13770    arg_value->set_type(GLMessage::DataType::INT64);
13771    arg_value->add_int64value((uintptr_t)value);
13772
13773    // call function
13774    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13775    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13776    glContext->hooks->gl.glProgramUniform1fvEXT(program, location, count, value);
13777    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13778    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13779
13780    void *pointerArgs[] = {
13781        (void *) value,
13782    };
13783
13784    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13785                              threadStartTime, threadEndTime,
13786                              &glmsg, pointerArgs);
13787    glContext->traceGLMessage(&glmsg);
13788}
13789
13790void GLTrace_glProgramUniform2fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat *value) {
13791    GLMessage glmsg;
13792    GLTraceContext *glContext = getGLTraceContext();
13793
13794    glmsg.set_function(GLMessage::glProgramUniform2fvEXT);
13795
13796    // copy argument program
13797    GLMessage_DataType *arg_program = glmsg.add_args();
13798    arg_program->set_isarray(false);
13799    arg_program->set_type(GLMessage::DataType::INT);
13800    arg_program->add_intvalue(program);
13801
13802    // copy argument location
13803    GLMessage_DataType *arg_location = glmsg.add_args();
13804    arg_location->set_isarray(false);
13805    arg_location->set_type(GLMessage::DataType::INT);
13806    arg_location->add_intvalue(location);
13807
13808    // copy argument count
13809    GLMessage_DataType *arg_count = glmsg.add_args();
13810    arg_count->set_isarray(false);
13811    arg_count->set_type(GLMessage::DataType::INT);
13812    arg_count->add_intvalue(count);
13813
13814    // copy argument value
13815    GLMessage_DataType *arg_value = glmsg.add_args();
13816    arg_value->set_isarray(false);
13817    arg_value->set_type(GLMessage::DataType::INT64);
13818    arg_value->add_int64value((uintptr_t)value);
13819
13820    // call function
13821    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13822    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13823    glContext->hooks->gl.glProgramUniform2fvEXT(program, location, count, value);
13824    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13825    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13826
13827    void *pointerArgs[] = {
13828        (void *) value,
13829    };
13830
13831    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13832                              threadStartTime, threadEndTime,
13833                              &glmsg, pointerArgs);
13834    glContext->traceGLMessage(&glmsg);
13835}
13836
13837void GLTrace_glProgramUniform3fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat *value) {
13838    GLMessage glmsg;
13839    GLTraceContext *glContext = getGLTraceContext();
13840
13841    glmsg.set_function(GLMessage::glProgramUniform3fvEXT);
13842
13843    // copy argument program
13844    GLMessage_DataType *arg_program = glmsg.add_args();
13845    arg_program->set_isarray(false);
13846    arg_program->set_type(GLMessage::DataType::INT);
13847    arg_program->add_intvalue(program);
13848
13849    // copy argument location
13850    GLMessage_DataType *arg_location = glmsg.add_args();
13851    arg_location->set_isarray(false);
13852    arg_location->set_type(GLMessage::DataType::INT);
13853    arg_location->add_intvalue(location);
13854
13855    // copy argument count
13856    GLMessage_DataType *arg_count = glmsg.add_args();
13857    arg_count->set_isarray(false);
13858    arg_count->set_type(GLMessage::DataType::INT);
13859    arg_count->add_intvalue(count);
13860
13861    // copy argument value
13862    GLMessage_DataType *arg_value = glmsg.add_args();
13863    arg_value->set_isarray(false);
13864    arg_value->set_type(GLMessage::DataType::INT64);
13865    arg_value->add_int64value((uintptr_t)value);
13866
13867    // call function
13868    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13869    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13870    glContext->hooks->gl.glProgramUniform3fvEXT(program, location, count, value);
13871    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13872    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13873
13874    void *pointerArgs[] = {
13875        (void *) value,
13876    };
13877
13878    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13879                              threadStartTime, threadEndTime,
13880                              &glmsg, pointerArgs);
13881    glContext->traceGLMessage(&glmsg);
13882}
13883
13884void GLTrace_glProgramUniform4fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat *value) {
13885    GLMessage glmsg;
13886    GLTraceContext *glContext = getGLTraceContext();
13887
13888    glmsg.set_function(GLMessage::glProgramUniform4fvEXT);
13889
13890    // copy argument program
13891    GLMessage_DataType *arg_program = glmsg.add_args();
13892    arg_program->set_isarray(false);
13893    arg_program->set_type(GLMessage::DataType::INT);
13894    arg_program->add_intvalue(program);
13895
13896    // copy argument location
13897    GLMessage_DataType *arg_location = glmsg.add_args();
13898    arg_location->set_isarray(false);
13899    arg_location->set_type(GLMessage::DataType::INT);
13900    arg_location->add_intvalue(location);
13901
13902    // copy argument count
13903    GLMessage_DataType *arg_count = glmsg.add_args();
13904    arg_count->set_isarray(false);
13905    arg_count->set_type(GLMessage::DataType::INT);
13906    arg_count->add_intvalue(count);
13907
13908    // copy argument value
13909    GLMessage_DataType *arg_value = glmsg.add_args();
13910    arg_value->set_isarray(false);
13911    arg_value->set_type(GLMessage::DataType::INT64);
13912    arg_value->add_int64value((uintptr_t)value);
13913
13914    // call function
13915    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13916    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13917    glContext->hooks->gl.glProgramUniform4fvEXT(program, location, count, value);
13918    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13919    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13920
13921    void *pointerArgs[] = {
13922        (void *) value,
13923    };
13924
13925    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13926                              threadStartTime, threadEndTime,
13927                              &glmsg, pointerArgs);
13928    glContext->traceGLMessage(&glmsg);
13929}
13930
13931void GLTrace_glProgramUniformMatrix2fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
13932    GLMessage glmsg;
13933    GLTraceContext *glContext = getGLTraceContext();
13934
13935    glmsg.set_function(GLMessage::glProgramUniformMatrix2fvEXT);
13936
13937    // copy argument program
13938    GLMessage_DataType *arg_program = glmsg.add_args();
13939    arg_program->set_isarray(false);
13940    arg_program->set_type(GLMessage::DataType::INT);
13941    arg_program->add_intvalue(program);
13942
13943    // copy argument location
13944    GLMessage_DataType *arg_location = glmsg.add_args();
13945    arg_location->set_isarray(false);
13946    arg_location->set_type(GLMessage::DataType::INT);
13947    arg_location->add_intvalue(location);
13948
13949    // copy argument count
13950    GLMessage_DataType *arg_count = glmsg.add_args();
13951    arg_count->set_isarray(false);
13952    arg_count->set_type(GLMessage::DataType::INT);
13953    arg_count->add_intvalue(count);
13954
13955    // copy argument transpose
13956    GLMessage_DataType *arg_transpose = glmsg.add_args();
13957    arg_transpose->set_isarray(false);
13958    arg_transpose->set_type(GLMessage::DataType::BOOL);
13959    arg_transpose->add_boolvalue(transpose);
13960
13961    // copy argument value
13962    GLMessage_DataType *arg_value = glmsg.add_args();
13963    arg_value->set_isarray(false);
13964    arg_value->set_type(GLMessage::DataType::INT64);
13965    arg_value->add_int64value((uintptr_t)value);
13966
13967    // call function
13968    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
13969    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
13970    glContext->hooks->gl.glProgramUniformMatrix2fvEXT(program, location, count, transpose, value);
13971    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
13972    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
13973
13974    void *pointerArgs[] = {
13975        (void *) value,
13976    };
13977
13978    fixupGLMessage(glContext, wallStartTime, wallEndTime,
13979                              threadStartTime, threadEndTime,
13980                              &glmsg, pointerArgs);
13981    glContext->traceGLMessage(&glmsg);
13982}
13983
13984void GLTrace_glProgramUniformMatrix3fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
13985    GLMessage glmsg;
13986    GLTraceContext *glContext = getGLTraceContext();
13987
13988    glmsg.set_function(GLMessage::glProgramUniformMatrix3fvEXT);
13989
13990    // copy argument program
13991    GLMessage_DataType *arg_program = glmsg.add_args();
13992    arg_program->set_isarray(false);
13993    arg_program->set_type(GLMessage::DataType::INT);
13994    arg_program->add_intvalue(program);
13995
13996    // copy argument location
13997    GLMessage_DataType *arg_location = glmsg.add_args();
13998    arg_location->set_isarray(false);
13999    arg_location->set_type(GLMessage::DataType::INT);
14000    arg_location->add_intvalue(location);
14001
14002    // copy argument count
14003    GLMessage_DataType *arg_count = glmsg.add_args();
14004    arg_count->set_isarray(false);
14005    arg_count->set_type(GLMessage::DataType::INT);
14006    arg_count->add_intvalue(count);
14007
14008    // copy argument transpose
14009    GLMessage_DataType *arg_transpose = glmsg.add_args();
14010    arg_transpose->set_isarray(false);
14011    arg_transpose->set_type(GLMessage::DataType::BOOL);
14012    arg_transpose->add_boolvalue(transpose);
14013
14014    // copy argument value
14015    GLMessage_DataType *arg_value = glmsg.add_args();
14016    arg_value->set_isarray(false);
14017    arg_value->set_type(GLMessage::DataType::INT64);
14018    arg_value->add_int64value((uintptr_t)value);
14019
14020    // call function
14021    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14022    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14023    glContext->hooks->gl.glProgramUniformMatrix3fvEXT(program, location, count, transpose, value);
14024    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14025    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14026
14027    void *pointerArgs[] = {
14028        (void *) value,
14029    };
14030
14031    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14032                              threadStartTime, threadEndTime,
14033                              &glmsg, pointerArgs);
14034    glContext->traceGLMessage(&glmsg);
14035}
14036
14037void GLTrace_glProgramUniformMatrix4fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
14038    GLMessage glmsg;
14039    GLTraceContext *glContext = getGLTraceContext();
14040
14041    glmsg.set_function(GLMessage::glProgramUniformMatrix4fvEXT);
14042
14043    // copy argument program
14044    GLMessage_DataType *arg_program = glmsg.add_args();
14045    arg_program->set_isarray(false);
14046    arg_program->set_type(GLMessage::DataType::INT);
14047    arg_program->add_intvalue(program);
14048
14049    // copy argument location
14050    GLMessage_DataType *arg_location = glmsg.add_args();
14051    arg_location->set_isarray(false);
14052    arg_location->set_type(GLMessage::DataType::INT);
14053    arg_location->add_intvalue(location);
14054
14055    // copy argument count
14056    GLMessage_DataType *arg_count = glmsg.add_args();
14057    arg_count->set_isarray(false);
14058    arg_count->set_type(GLMessage::DataType::INT);
14059    arg_count->add_intvalue(count);
14060
14061    // copy argument transpose
14062    GLMessage_DataType *arg_transpose = glmsg.add_args();
14063    arg_transpose->set_isarray(false);
14064    arg_transpose->set_type(GLMessage::DataType::BOOL);
14065    arg_transpose->add_boolvalue(transpose);
14066
14067    // copy argument value
14068    GLMessage_DataType *arg_value = glmsg.add_args();
14069    arg_value->set_isarray(false);
14070    arg_value->set_type(GLMessage::DataType::INT64);
14071    arg_value->add_int64value((uintptr_t)value);
14072
14073    // call function
14074    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14075    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14076    glContext->hooks->gl.glProgramUniformMatrix4fvEXT(program, location, count, transpose, value);
14077    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14078    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14079
14080    void *pointerArgs[] = {
14081        (void *) value,
14082    };
14083
14084    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14085                              threadStartTime, threadEndTime,
14086                              &glmsg, pointerArgs);
14087    glContext->traceGLMessage(&glmsg);
14088}
14089
14090void GLTrace_glValidateProgramPipelineEXT(GLuint pipeline) {
14091    GLMessage glmsg;
14092    GLTraceContext *glContext = getGLTraceContext();
14093
14094    glmsg.set_function(GLMessage::glValidateProgramPipelineEXT);
14095
14096    // copy argument pipeline
14097    GLMessage_DataType *arg_pipeline = glmsg.add_args();
14098    arg_pipeline->set_isarray(false);
14099    arg_pipeline->set_type(GLMessage::DataType::INT);
14100    arg_pipeline->add_intvalue(pipeline);
14101
14102    // call function
14103    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14104    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14105    glContext->hooks->gl.glValidateProgramPipelineEXT(pipeline);
14106    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14107    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14108
14109    void *pointerArgs[] = {
14110    };
14111
14112    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14113                              threadStartTime, threadEndTime,
14114                              &glmsg, pointerArgs);
14115    glContext->traceGLMessage(&glmsg);
14116}
14117
14118void GLTrace_glGetProgramPipelineInfoLogEXT(GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog) {
14119    GLMessage glmsg;
14120    GLTraceContext *glContext = getGLTraceContext();
14121
14122    glmsg.set_function(GLMessage::glGetProgramPipelineInfoLogEXT);
14123
14124    // copy argument pipeline
14125    GLMessage_DataType *arg_pipeline = glmsg.add_args();
14126    arg_pipeline->set_isarray(false);
14127    arg_pipeline->set_type(GLMessage::DataType::INT);
14128    arg_pipeline->add_intvalue(pipeline);
14129
14130    // copy argument bufSize
14131    GLMessage_DataType *arg_bufSize = glmsg.add_args();
14132    arg_bufSize->set_isarray(false);
14133    arg_bufSize->set_type(GLMessage::DataType::INT);
14134    arg_bufSize->add_intvalue(bufSize);
14135
14136    // copy argument length
14137    GLMessage_DataType *arg_length = glmsg.add_args();
14138    arg_length->set_isarray(false);
14139    arg_length->set_type(GLMessage::DataType::INT64);
14140    arg_length->add_int64value((uintptr_t)length);
14141
14142    // copy argument infoLog
14143    GLMessage_DataType *arg_infoLog = glmsg.add_args();
14144    arg_infoLog->set_isarray(false);
14145    arg_infoLog->set_type(GLMessage::DataType::INT64);
14146    arg_infoLog->add_int64value((uintptr_t)infoLog);
14147
14148    // call function
14149    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14150    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14151    glContext->hooks->gl.glGetProgramPipelineInfoLogEXT(pipeline, bufSize, length, infoLog);
14152    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14153    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14154
14155    void *pointerArgs[] = {
14156        (void *) length,
14157        (void *) infoLog,
14158    };
14159
14160    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14161                              threadStartTime, threadEndTime,
14162                              &glmsg, pointerArgs);
14163    glContext->traceGLMessage(&glmsg);
14164}
14165
14166void GLTrace_glTexStorage1DEXT(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) {
14167    GLMessage glmsg;
14168    GLTraceContext *glContext = getGLTraceContext();
14169
14170    glmsg.set_function(GLMessage::glTexStorage1DEXT);
14171
14172    // copy argument target
14173    GLMessage_DataType *arg_target = glmsg.add_args();
14174    arg_target->set_isarray(false);
14175    arg_target->set_type(GLMessage::DataType::ENUM);
14176    arg_target->add_intvalue((int)target);
14177
14178    // copy argument levels
14179    GLMessage_DataType *arg_levels = glmsg.add_args();
14180    arg_levels->set_isarray(false);
14181    arg_levels->set_type(GLMessage::DataType::INT);
14182    arg_levels->add_intvalue(levels);
14183
14184    // copy argument internalformat
14185    GLMessage_DataType *arg_internalformat = glmsg.add_args();
14186    arg_internalformat->set_isarray(false);
14187    arg_internalformat->set_type(GLMessage::DataType::ENUM);
14188    arg_internalformat->add_intvalue((int)internalformat);
14189
14190    // copy argument width
14191    GLMessage_DataType *arg_width = glmsg.add_args();
14192    arg_width->set_isarray(false);
14193    arg_width->set_type(GLMessage::DataType::INT);
14194    arg_width->add_intvalue(width);
14195
14196    // call function
14197    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14198    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14199    glContext->hooks->gl.glTexStorage1DEXT(target, levels, internalformat, width);
14200    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14201    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14202
14203    void *pointerArgs[] = {
14204    };
14205
14206    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14207                              threadStartTime, threadEndTime,
14208                              &glmsg, pointerArgs);
14209    glContext->traceGLMessage(&glmsg);
14210}
14211
14212void GLTrace_glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) {
14213    GLMessage glmsg;
14214    GLTraceContext *glContext = getGLTraceContext();
14215
14216    glmsg.set_function(GLMessage::glTexStorage2DEXT);
14217
14218    // copy argument target
14219    GLMessage_DataType *arg_target = glmsg.add_args();
14220    arg_target->set_isarray(false);
14221    arg_target->set_type(GLMessage::DataType::ENUM);
14222    arg_target->add_intvalue((int)target);
14223
14224    // copy argument levels
14225    GLMessage_DataType *arg_levels = glmsg.add_args();
14226    arg_levels->set_isarray(false);
14227    arg_levels->set_type(GLMessage::DataType::INT);
14228    arg_levels->add_intvalue(levels);
14229
14230    // copy argument internalformat
14231    GLMessage_DataType *arg_internalformat = glmsg.add_args();
14232    arg_internalformat->set_isarray(false);
14233    arg_internalformat->set_type(GLMessage::DataType::ENUM);
14234    arg_internalformat->add_intvalue((int)internalformat);
14235
14236    // copy argument width
14237    GLMessage_DataType *arg_width = glmsg.add_args();
14238    arg_width->set_isarray(false);
14239    arg_width->set_type(GLMessage::DataType::INT);
14240    arg_width->add_intvalue(width);
14241
14242    // copy argument height
14243    GLMessage_DataType *arg_height = glmsg.add_args();
14244    arg_height->set_isarray(false);
14245    arg_height->set_type(GLMessage::DataType::INT);
14246    arg_height->add_intvalue(height);
14247
14248    // call function
14249    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14250    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14251    glContext->hooks->gl.glTexStorage2DEXT(target, levels, internalformat, width, height);
14252    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14253    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14254
14255    void *pointerArgs[] = {
14256    };
14257
14258    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14259                              threadStartTime, threadEndTime,
14260                              &glmsg, pointerArgs);
14261    glContext->traceGLMessage(&glmsg);
14262}
14263
14264void GLTrace_glTexStorage3DEXT(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) {
14265    GLMessage glmsg;
14266    GLTraceContext *glContext = getGLTraceContext();
14267
14268    glmsg.set_function(GLMessage::glTexStorage3DEXT);
14269
14270    // copy argument target
14271    GLMessage_DataType *arg_target = glmsg.add_args();
14272    arg_target->set_isarray(false);
14273    arg_target->set_type(GLMessage::DataType::ENUM);
14274    arg_target->add_intvalue((int)target);
14275
14276    // copy argument levels
14277    GLMessage_DataType *arg_levels = glmsg.add_args();
14278    arg_levels->set_isarray(false);
14279    arg_levels->set_type(GLMessage::DataType::INT);
14280    arg_levels->add_intvalue(levels);
14281
14282    // copy argument internalformat
14283    GLMessage_DataType *arg_internalformat = glmsg.add_args();
14284    arg_internalformat->set_isarray(false);
14285    arg_internalformat->set_type(GLMessage::DataType::ENUM);
14286    arg_internalformat->add_intvalue((int)internalformat);
14287
14288    // copy argument width
14289    GLMessage_DataType *arg_width = glmsg.add_args();
14290    arg_width->set_isarray(false);
14291    arg_width->set_type(GLMessage::DataType::INT);
14292    arg_width->add_intvalue(width);
14293
14294    // copy argument height
14295    GLMessage_DataType *arg_height = glmsg.add_args();
14296    arg_height->set_isarray(false);
14297    arg_height->set_type(GLMessage::DataType::INT);
14298    arg_height->add_intvalue(height);
14299
14300    // copy argument depth
14301    GLMessage_DataType *arg_depth = glmsg.add_args();
14302    arg_depth->set_isarray(false);
14303    arg_depth->set_type(GLMessage::DataType::INT);
14304    arg_depth->add_intvalue(depth);
14305
14306    // call function
14307    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14308    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14309    glContext->hooks->gl.glTexStorage3DEXT(target, levels, internalformat, width, height, depth);
14310    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14311    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14312
14313    void *pointerArgs[] = {
14314    };
14315
14316    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14317                              threadStartTime, threadEndTime,
14318                              &glmsg, pointerArgs);
14319    glContext->traceGLMessage(&glmsg);
14320}
14321
14322void GLTrace_glTextureStorage1DEXT(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) {
14323    GLMessage glmsg;
14324    GLTraceContext *glContext = getGLTraceContext();
14325
14326    glmsg.set_function(GLMessage::glTextureStorage1DEXT);
14327
14328    // copy argument texture
14329    GLMessage_DataType *arg_texture = glmsg.add_args();
14330    arg_texture->set_isarray(false);
14331    arg_texture->set_type(GLMessage::DataType::INT);
14332    arg_texture->add_intvalue(texture);
14333
14334    // copy argument target
14335    GLMessage_DataType *arg_target = glmsg.add_args();
14336    arg_target->set_isarray(false);
14337    arg_target->set_type(GLMessage::DataType::ENUM);
14338    arg_target->add_intvalue((int)target);
14339
14340    // copy argument levels
14341    GLMessage_DataType *arg_levels = glmsg.add_args();
14342    arg_levels->set_isarray(false);
14343    arg_levels->set_type(GLMessage::DataType::INT);
14344    arg_levels->add_intvalue(levels);
14345
14346    // copy argument internalformat
14347    GLMessage_DataType *arg_internalformat = glmsg.add_args();
14348    arg_internalformat->set_isarray(false);
14349    arg_internalformat->set_type(GLMessage::DataType::ENUM);
14350    arg_internalformat->add_intvalue((int)internalformat);
14351
14352    // copy argument width
14353    GLMessage_DataType *arg_width = glmsg.add_args();
14354    arg_width->set_isarray(false);
14355    arg_width->set_type(GLMessage::DataType::INT);
14356    arg_width->add_intvalue(width);
14357
14358    // call function
14359    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14360    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14361    glContext->hooks->gl.glTextureStorage1DEXT(texture, target, levels, internalformat, width);
14362    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14363    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14364
14365    void *pointerArgs[] = {
14366    };
14367
14368    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14369                              threadStartTime, threadEndTime,
14370                              &glmsg, pointerArgs);
14371    glContext->traceGLMessage(&glmsg);
14372}
14373
14374void GLTrace_glTextureStorage2DEXT(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) {
14375    GLMessage glmsg;
14376    GLTraceContext *glContext = getGLTraceContext();
14377
14378    glmsg.set_function(GLMessage::glTextureStorage2DEXT);
14379
14380    // copy argument texture
14381    GLMessage_DataType *arg_texture = glmsg.add_args();
14382    arg_texture->set_isarray(false);
14383    arg_texture->set_type(GLMessage::DataType::INT);
14384    arg_texture->add_intvalue(texture);
14385
14386    // copy argument target
14387    GLMessage_DataType *arg_target = glmsg.add_args();
14388    arg_target->set_isarray(false);
14389    arg_target->set_type(GLMessage::DataType::ENUM);
14390    arg_target->add_intvalue((int)target);
14391
14392    // copy argument levels
14393    GLMessage_DataType *arg_levels = glmsg.add_args();
14394    arg_levels->set_isarray(false);
14395    arg_levels->set_type(GLMessage::DataType::INT);
14396    arg_levels->add_intvalue(levels);
14397
14398    // copy argument internalformat
14399    GLMessage_DataType *arg_internalformat = glmsg.add_args();
14400    arg_internalformat->set_isarray(false);
14401    arg_internalformat->set_type(GLMessage::DataType::ENUM);
14402    arg_internalformat->add_intvalue((int)internalformat);
14403
14404    // copy argument width
14405    GLMessage_DataType *arg_width = glmsg.add_args();
14406    arg_width->set_isarray(false);
14407    arg_width->set_type(GLMessage::DataType::INT);
14408    arg_width->add_intvalue(width);
14409
14410    // copy argument height
14411    GLMessage_DataType *arg_height = glmsg.add_args();
14412    arg_height->set_isarray(false);
14413    arg_height->set_type(GLMessage::DataType::INT);
14414    arg_height->add_intvalue(height);
14415
14416    // call function
14417    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14418    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14419    glContext->hooks->gl.glTextureStorage2DEXT(texture, target, levels, internalformat, width, height);
14420    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14421    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14422
14423    void *pointerArgs[] = {
14424    };
14425
14426    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14427                              threadStartTime, threadEndTime,
14428                              &glmsg, pointerArgs);
14429    glContext->traceGLMessage(&glmsg);
14430}
14431
14432void GLTrace_glTextureStorage3DEXT(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) {
14433    GLMessage glmsg;
14434    GLTraceContext *glContext = getGLTraceContext();
14435
14436    glmsg.set_function(GLMessage::glTextureStorage3DEXT);
14437
14438    // copy argument texture
14439    GLMessage_DataType *arg_texture = glmsg.add_args();
14440    arg_texture->set_isarray(false);
14441    arg_texture->set_type(GLMessage::DataType::INT);
14442    arg_texture->add_intvalue(texture);
14443
14444    // copy argument target
14445    GLMessage_DataType *arg_target = glmsg.add_args();
14446    arg_target->set_isarray(false);
14447    arg_target->set_type(GLMessage::DataType::ENUM);
14448    arg_target->add_intvalue((int)target);
14449
14450    // copy argument levels
14451    GLMessage_DataType *arg_levels = glmsg.add_args();
14452    arg_levels->set_isarray(false);
14453    arg_levels->set_type(GLMessage::DataType::INT);
14454    arg_levels->add_intvalue(levels);
14455
14456    // copy argument internalformat
14457    GLMessage_DataType *arg_internalformat = glmsg.add_args();
14458    arg_internalformat->set_isarray(false);
14459    arg_internalformat->set_type(GLMessage::DataType::ENUM);
14460    arg_internalformat->add_intvalue((int)internalformat);
14461
14462    // copy argument width
14463    GLMessage_DataType *arg_width = glmsg.add_args();
14464    arg_width->set_isarray(false);
14465    arg_width->set_type(GLMessage::DataType::INT);
14466    arg_width->add_intvalue(width);
14467
14468    // copy argument height
14469    GLMessage_DataType *arg_height = glmsg.add_args();
14470    arg_height->set_isarray(false);
14471    arg_height->set_type(GLMessage::DataType::INT);
14472    arg_height->add_intvalue(height);
14473
14474    // copy argument depth
14475    GLMessage_DataType *arg_depth = glmsg.add_args();
14476    arg_depth->set_isarray(false);
14477    arg_depth->set_type(GLMessage::DataType::INT);
14478    arg_depth->add_intvalue(depth);
14479
14480    // call function
14481    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14482    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14483    glContext->hooks->gl.glTextureStorage3DEXT(texture, target, levels, internalformat, width, height, depth);
14484    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14485    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14486
14487    void *pointerArgs[] = {
14488    };
14489
14490    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14491                              threadStartTime, threadEndTime,
14492                              &glmsg, pointerArgs);
14493    glContext->traceGLMessage(&glmsg);
14494}
14495
14496void GLTrace_glRenderbufferStorageMultisampleIMG(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
14497    GLMessage glmsg;
14498    GLTraceContext *glContext = getGLTraceContext();
14499
14500    glmsg.set_function(GLMessage::glRenderbufferStorageMultisampleIMG);
14501
14502    // copy argument target
14503    GLMessage_DataType *arg_target = glmsg.add_args();
14504    arg_target->set_isarray(false);
14505    arg_target->set_type(GLMessage::DataType::ENUM);
14506    arg_target->add_intvalue((int)target);
14507
14508    // copy argument samples
14509    GLMessage_DataType *arg_samples = glmsg.add_args();
14510    arg_samples->set_isarray(false);
14511    arg_samples->set_type(GLMessage::DataType::INT);
14512    arg_samples->add_intvalue(samples);
14513
14514    // copy argument internalformat
14515    GLMessage_DataType *arg_internalformat = glmsg.add_args();
14516    arg_internalformat->set_isarray(false);
14517    arg_internalformat->set_type(GLMessage::DataType::ENUM);
14518    arg_internalformat->add_intvalue((int)internalformat);
14519
14520    // copy argument width
14521    GLMessage_DataType *arg_width = glmsg.add_args();
14522    arg_width->set_isarray(false);
14523    arg_width->set_type(GLMessage::DataType::INT);
14524    arg_width->add_intvalue(width);
14525
14526    // copy argument height
14527    GLMessage_DataType *arg_height = glmsg.add_args();
14528    arg_height->set_isarray(false);
14529    arg_height->set_type(GLMessage::DataType::INT);
14530    arg_height->add_intvalue(height);
14531
14532    // call function
14533    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14534    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14535    glContext->hooks->gl.glRenderbufferStorageMultisampleIMG(target, samples, internalformat, width, height);
14536    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14537    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14538
14539    void *pointerArgs[] = {
14540    };
14541
14542    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14543                              threadStartTime, threadEndTime,
14544                              &glmsg, pointerArgs);
14545    glContext->traceGLMessage(&glmsg);
14546}
14547
14548void GLTrace_glFramebufferTexture2DMultisampleIMG(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) {
14549    GLMessage glmsg;
14550    GLTraceContext *glContext = getGLTraceContext();
14551
14552    glmsg.set_function(GLMessage::glFramebufferTexture2DMultisampleIMG);
14553
14554    // copy argument target
14555    GLMessage_DataType *arg_target = glmsg.add_args();
14556    arg_target->set_isarray(false);
14557    arg_target->set_type(GLMessage::DataType::ENUM);
14558    arg_target->add_intvalue((int)target);
14559
14560    // copy argument attachment
14561    GLMessage_DataType *arg_attachment = glmsg.add_args();
14562    arg_attachment->set_isarray(false);
14563    arg_attachment->set_type(GLMessage::DataType::ENUM);
14564    arg_attachment->add_intvalue((int)attachment);
14565
14566    // copy argument textarget
14567    GLMessage_DataType *arg_textarget = glmsg.add_args();
14568    arg_textarget->set_isarray(false);
14569    arg_textarget->set_type(GLMessage::DataType::ENUM);
14570    arg_textarget->add_intvalue((int)textarget);
14571
14572    // copy argument texture
14573    GLMessage_DataType *arg_texture = glmsg.add_args();
14574    arg_texture->set_isarray(false);
14575    arg_texture->set_type(GLMessage::DataType::INT);
14576    arg_texture->add_intvalue(texture);
14577
14578    // copy argument level
14579    GLMessage_DataType *arg_level = glmsg.add_args();
14580    arg_level->set_isarray(false);
14581    arg_level->set_type(GLMessage::DataType::INT);
14582    arg_level->add_intvalue(level);
14583
14584    // copy argument samples
14585    GLMessage_DataType *arg_samples = glmsg.add_args();
14586    arg_samples->set_isarray(false);
14587    arg_samples->set_type(GLMessage::DataType::INT);
14588    arg_samples->add_intvalue(samples);
14589
14590    // call function
14591    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14592    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14593    glContext->hooks->gl.glFramebufferTexture2DMultisampleIMG(target, attachment, textarget, texture, level, samples);
14594    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14595    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14596
14597    void *pointerArgs[] = {
14598    };
14599
14600    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14601                              threadStartTime, threadEndTime,
14602                              &glmsg, pointerArgs);
14603    glContext->traceGLMessage(&glmsg);
14604}
14605
14606void GLTrace_glCoverageMaskNV(GLboolean mask) {
14607    GLMessage glmsg;
14608    GLTraceContext *glContext = getGLTraceContext();
14609
14610    glmsg.set_function(GLMessage::glCoverageMaskNV);
14611
14612    // copy argument mask
14613    GLMessage_DataType *arg_mask = glmsg.add_args();
14614    arg_mask->set_isarray(false);
14615    arg_mask->set_type(GLMessage::DataType::BOOL);
14616    arg_mask->add_boolvalue(mask);
14617
14618    // call function
14619    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14620    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14621    glContext->hooks->gl.glCoverageMaskNV(mask);
14622    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14623    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14624
14625    void *pointerArgs[] = {
14626    };
14627
14628    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14629                              threadStartTime, threadEndTime,
14630                              &glmsg, pointerArgs);
14631    glContext->traceGLMessage(&glmsg);
14632}
14633
14634void GLTrace_glCoverageOperationNV(GLenum operation) {
14635    GLMessage glmsg;
14636    GLTraceContext *glContext = getGLTraceContext();
14637
14638    glmsg.set_function(GLMessage::glCoverageOperationNV);
14639
14640    // copy argument operation
14641    GLMessage_DataType *arg_operation = glmsg.add_args();
14642    arg_operation->set_isarray(false);
14643    arg_operation->set_type(GLMessage::DataType::ENUM);
14644    arg_operation->add_intvalue((int)operation);
14645
14646    // call function
14647    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14648    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14649    glContext->hooks->gl.glCoverageOperationNV(operation);
14650    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14651    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14652
14653    void *pointerArgs[] = {
14654    };
14655
14656    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14657                              threadStartTime, threadEndTime,
14658                              &glmsg, pointerArgs);
14659    glContext->traceGLMessage(&glmsg);
14660}
14661
14662void GLTrace_glDrawBuffersNV(GLsizei n, const GLenum *bufs) {
14663    GLMessage glmsg;
14664    GLTraceContext *glContext = getGLTraceContext();
14665
14666    glmsg.set_function(GLMessage::glDrawBuffersNV);
14667
14668    // copy argument n
14669    GLMessage_DataType *arg_n = glmsg.add_args();
14670    arg_n->set_isarray(false);
14671    arg_n->set_type(GLMessage::DataType::INT);
14672    arg_n->add_intvalue(n);
14673
14674    // copy argument bufs
14675    GLMessage_DataType *arg_bufs = glmsg.add_args();
14676    arg_bufs->set_isarray(false);
14677    arg_bufs->set_type(GLMessage::DataType::INT64);
14678    arg_bufs->add_int64value((uintptr_t)bufs);
14679
14680    // call function
14681    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14682    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14683    glContext->hooks->gl.glDrawBuffersNV(n, bufs);
14684    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14685    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14686
14687    void *pointerArgs[] = {
14688        (void *) bufs,
14689    };
14690
14691    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14692                              threadStartTime, threadEndTime,
14693                              &glmsg, pointerArgs);
14694    glContext->traceGLMessage(&glmsg);
14695}
14696
14697void GLTrace_glDeleteFencesNV(GLsizei n, const GLuint *fences) {
14698    GLMessage glmsg;
14699    GLTraceContext *glContext = getGLTraceContext();
14700
14701    glmsg.set_function(GLMessage::glDeleteFencesNV);
14702
14703    // copy argument n
14704    GLMessage_DataType *arg_n = glmsg.add_args();
14705    arg_n->set_isarray(false);
14706    arg_n->set_type(GLMessage::DataType::INT);
14707    arg_n->add_intvalue(n);
14708
14709    // copy argument fences
14710    GLMessage_DataType *arg_fences = glmsg.add_args();
14711    arg_fences->set_isarray(false);
14712    arg_fences->set_type(GLMessage::DataType::INT64);
14713    arg_fences->add_int64value((uintptr_t)fences);
14714
14715    // call function
14716    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14717    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14718    glContext->hooks->gl.glDeleteFencesNV(n, fences);
14719    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14720    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14721
14722    void *pointerArgs[] = {
14723        (void *) fences,
14724    };
14725
14726    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14727                              threadStartTime, threadEndTime,
14728                              &glmsg, pointerArgs);
14729    glContext->traceGLMessage(&glmsg);
14730}
14731
14732void GLTrace_glGenFencesNV(GLsizei n, GLuint *fences) {
14733    GLMessage glmsg;
14734    GLTraceContext *glContext = getGLTraceContext();
14735
14736    glmsg.set_function(GLMessage::glGenFencesNV);
14737
14738    // copy argument n
14739    GLMessage_DataType *arg_n = glmsg.add_args();
14740    arg_n->set_isarray(false);
14741    arg_n->set_type(GLMessage::DataType::INT);
14742    arg_n->add_intvalue(n);
14743
14744    // copy argument fences
14745    GLMessage_DataType *arg_fences = glmsg.add_args();
14746    arg_fences->set_isarray(false);
14747    arg_fences->set_type(GLMessage::DataType::INT64);
14748    arg_fences->add_int64value((uintptr_t)fences);
14749
14750    // call function
14751    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14752    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14753    glContext->hooks->gl.glGenFencesNV(n, fences);
14754    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14755    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14756
14757    void *pointerArgs[] = {
14758        (void *) fences,
14759    };
14760
14761    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14762                              threadStartTime, threadEndTime,
14763                              &glmsg, pointerArgs);
14764    glContext->traceGLMessage(&glmsg);
14765}
14766
14767GLboolean GLTrace_glIsFenceNV(GLuint fence) {
14768    GLMessage glmsg;
14769    GLTraceContext *glContext = getGLTraceContext();
14770
14771    glmsg.set_function(GLMessage::glIsFenceNV);
14772
14773    // copy argument fence
14774    GLMessage_DataType *arg_fence = glmsg.add_args();
14775    arg_fence->set_isarray(false);
14776    arg_fence->set_type(GLMessage::DataType::INT);
14777    arg_fence->add_intvalue(fence);
14778
14779    // call function
14780    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14781    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14782    GLboolean retValue = glContext->hooks->gl.glIsFenceNV(fence);
14783    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14784    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14785
14786    // set return value
14787    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
14788    rt->set_isarray(false);
14789    rt->set_type(GLMessage::DataType::BOOL);
14790    rt->add_boolvalue(retValue);
14791
14792    void *pointerArgs[] = {
14793    };
14794
14795    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14796                              threadStartTime, threadEndTime,
14797                              &glmsg, pointerArgs);
14798    glContext->traceGLMessage(&glmsg);
14799
14800    return retValue;
14801}
14802
14803GLboolean GLTrace_glTestFenceNV(GLuint fence) {
14804    GLMessage glmsg;
14805    GLTraceContext *glContext = getGLTraceContext();
14806
14807    glmsg.set_function(GLMessage::glTestFenceNV);
14808
14809    // copy argument fence
14810    GLMessage_DataType *arg_fence = glmsg.add_args();
14811    arg_fence->set_isarray(false);
14812    arg_fence->set_type(GLMessage::DataType::INT);
14813    arg_fence->add_intvalue(fence);
14814
14815    // call function
14816    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14817    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14818    GLboolean retValue = glContext->hooks->gl.glTestFenceNV(fence);
14819    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14820    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14821
14822    // set return value
14823    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
14824    rt->set_isarray(false);
14825    rt->set_type(GLMessage::DataType::BOOL);
14826    rt->add_boolvalue(retValue);
14827
14828    void *pointerArgs[] = {
14829    };
14830
14831    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14832                              threadStartTime, threadEndTime,
14833                              &glmsg, pointerArgs);
14834    glContext->traceGLMessage(&glmsg);
14835
14836    return retValue;
14837}
14838
14839void GLTrace_glGetFenceivNV(GLuint fence, GLenum pname, GLint *params) {
14840    GLMessage glmsg;
14841    GLTraceContext *glContext = getGLTraceContext();
14842
14843    glmsg.set_function(GLMessage::glGetFenceivNV);
14844
14845    // copy argument fence
14846    GLMessage_DataType *arg_fence = glmsg.add_args();
14847    arg_fence->set_isarray(false);
14848    arg_fence->set_type(GLMessage::DataType::INT);
14849    arg_fence->add_intvalue(fence);
14850
14851    // copy argument pname
14852    GLMessage_DataType *arg_pname = glmsg.add_args();
14853    arg_pname->set_isarray(false);
14854    arg_pname->set_type(GLMessage::DataType::ENUM);
14855    arg_pname->add_intvalue((int)pname);
14856
14857    // copy argument params
14858    GLMessage_DataType *arg_params = glmsg.add_args();
14859    arg_params->set_isarray(false);
14860    arg_params->set_type(GLMessage::DataType::INT64);
14861    arg_params->add_int64value((uintptr_t)params);
14862
14863    // call function
14864    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14865    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14866    glContext->hooks->gl.glGetFenceivNV(fence, pname, params);
14867    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14868    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14869
14870    void *pointerArgs[] = {
14871        (void *) params,
14872    };
14873
14874    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14875                              threadStartTime, threadEndTime,
14876                              &glmsg, pointerArgs);
14877    glContext->traceGLMessage(&glmsg);
14878}
14879
14880void GLTrace_glFinishFenceNV(GLuint fence) {
14881    GLMessage glmsg;
14882    GLTraceContext *glContext = getGLTraceContext();
14883
14884    glmsg.set_function(GLMessage::glFinishFenceNV);
14885
14886    // copy argument fence
14887    GLMessage_DataType *arg_fence = glmsg.add_args();
14888    arg_fence->set_isarray(false);
14889    arg_fence->set_type(GLMessage::DataType::INT);
14890    arg_fence->add_intvalue(fence);
14891
14892    // call function
14893    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14894    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14895    glContext->hooks->gl.glFinishFenceNV(fence);
14896    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14897    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14898
14899    void *pointerArgs[] = {
14900    };
14901
14902    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14903                              threadStartTime, threadEndTime,
14904                              &glmsg, pointerArgs);
14905    glContext->traceGLMessage(&glmsg);
14906}
14907
14908void GLTrace_glSetFenceNV(GLuint fence, GLenum condition) {
14909    GLMessage glmsg;
14910    GLTraceContext *glContext = getGLTraceContext();
14911
14912    glmsg.set_function(GLMessage::glSetFenceNV);
14913
14914    // copy argument fence
14915    GLMessage_DataType *arg_fence = glmsg.add_args();
14916    arg_fence->set_isarray(false);
14917    arg_fence->set_type(GLMessage::DataType::INT);
14918    arg_fence->add_intvalue(fence);
14919
14920    // copy argument condition
14921    GLMessage_DataType *arg_condition = glmsg.add_args();
14922    arg_condition->set_isarray(false);
14923    arg_condition->set_type(GLMessage::DataType::ENUM);
14924    arg_condition->add_intvalue((int)condition);
14925
14926    // call function
14927    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14928    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14929    glContext->hooks->gl.glSetFenceNV(fence, condition);
14930    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14931    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14932
14933    void *pointerArgs[] = {
14934    };
14935
14936    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14937                              threadStartTime, threadEndTime,
14938                              &glmsg, pointerArgs);
14939    glContext->traceGLMessage(&glmsg);
14940}
14941
14942void GLTrace_glReadBufferNV(GLenum mode) {
14943    GLMessage glmsg;
14944    GLTraceContext *glContext = getGLTraceContext();
14945
14946    glmsg.set_function(GLMessage::glReadBufferNV);
14947
14948    // copy argument mode
14949    GLMessage_DataType *arg_mode = glmsg.add_args();
14950    arg_mode->set_isarray(false);
14951    arg_mode->set_type(GLMessage::DataType::ENUM);
14952    arg_mode->add_intvalue((int)mode);
14953
14954    // call function
14955    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14956    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14957    glContext->hooks->gl.glReadBufferNV(mode);
14958    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14959    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14960
14961    void *pointerArgs[] = {
14962    };
14963
14964    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14965                              threadStartTime, threadEndTime,
14966                              &glmsg, pointerArgs);
14967    glContext->traceGLMessage(&glmsg);
14968}
14969
14970void GLTrace_glAlphaFuncQCOM(GLenum func, GLclampf ref) {
14971    GLMessage glmsg;
14972    GLTraceContext *glContext = getGLTraceContext();
14973
14974    glmsg.set_function(GLMessage::glAlphaFuncQCOM);
14975
14976    // copy argument func
14977    GLMessage_DataType *arg_func = glmsg.add_args();
14978    arg_func->set_isarray(false);
14979    arg_func->set_type(GLMessage::DataType::ENUM);
14980    arg_func->add_intvalue((int)func);
14981
14982    // copy argument ref
14983    GLMessage_DataType *arg_ref = glmsg.add_args();
14984    arg_ref->set_isarray(false);
14985    arg_ref->set_type(GLMessage::DataType::FLOAT);
14986    arg_ref->add_floatvalue(ref);
14987
14988    // call function
14989    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
14990    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
14991    glContext->hooks->gl.glAlphaFuncQCOM(func, ref);
14992    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
14993    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
14994
14995    void *pointerArgs[] = {
14996    };
14997
14998    fixupGLMessage(glContext, wallStartTime, wallEndTime,
14999                              threadStartTime, threadEndTime,
15000                              &glmsg, pointerArgs);
15001    glContext->traceGLMessage(&glmsg);
15002}
15003
15004void GLTrace_glGetDriverControlsQCOM(GLint *num, GLsizei size, GLuint *driverControls) {
15005    GLMessage glmsg;
15006    GLTraceContext *glContext = getGLTraceContext();
15007
15008    glmsg.set_function(GLMessage::glGetDriverControlsQCOM);
15009
15010    // copy argument num
15011    GLMessage_DataType *arg_num = glmsg.add_args();
15012    arg_num->set_isarray(false);
15013    arg_num->set_type(GLMessage::DataType::INT64);
15014    arg_num->add_int64value((uintptr_t)num);
15015
15016    // copy argument size
15017    GLMessage_DataType *arg_size = glmsg.add_args();
15018    arg_size->set_isarray(false);
15019    arg_size->set_type(GLMessage::DataType::INT);
15020    arg_size->add_intvalue(size);
15021
15022    // copy argument driverControls
15023    GLMessage_DataType *arg_driverControls = glmsg.add_args();
15024    arg_driverControls->set_isarray(false);
15025    arg_driverControls->set_type(GLMessage::DataType::INT64);
15026    arg_driverControls->add_int64value((uintptr_t)driverControls);
15027
15028    // call function
15029    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15030    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15031    glContext->hooks->gl.glGetDriverControlsQCOM(num, size, driverControls);
15032    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15033    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15034
15035    void *pointerArgs[] = {
15036        (void *) num,
15037        (void *) driverControls,
15038    };
15039
15040    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15041                              threadStartTime, threadEndTime,
15042                              &glmsg, pointerArgs);
15043    glContext->traceGLMessage(&glmsg);
15044}
15045
15046void GLTrace_glGetDriverControlStringQCOM(GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString) {
15047    GLMessage glmsg;
15048    GLTraceContext *glContext = getGLTraceContext();
15049
15050    glmsg.set_function(GLMessage::glGetDriverControlStringQCOM);
15051
15052    // copy argument driverControl
15053    GLMessage_DataType *arg_driverControl = glmsg.add_args();
15054    arg_driverControl->set_isarray(false);
15055    arg_driverControl->set_type(GLMessage::DataType::INT);
15056    arg_driverControl->add_intvalue(driverControl);
15057
15058    // copy argument bufSize
15059    GLMessage_DataType *arg_bufSize = glmsg.add_args();
15060    arg_bufSize->set_isarray(false);
15061    arg_bufSize->set_type(GLMessage::DataType::INT);
15062    arg_bufSize->add_intvalue(bufSize);
15063
15064    // copy argument length
15065    GLMessage_DataType *arg_length = glmsg.add_args();
15066    arg_length->set_isarray(false);
15067    arg_length->set_type(GLMessage::DataType::INT64);
15068    arg_length->add_int64value((uintptr_t)length);
15069
15070    // copy argument driverControlString
15071    GLMessage_DataType *arg_driverControlString = glmsg.add_args();
15072    arg_driverControlString->set_isarray(false);
15073    arg_driverControlString->set_type(GLMessage::DataType::INT64);
15074    arg_driverControlString->add_int64value((uintptr_t)driverControlString);
15075
15076    // call function
15077    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15078    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15079    glContext->hooks->gl.glGetDriverControlStringQCOM(driverControl, bufSize, length, driverControlString);
15080    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15081    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15082
15083    void *pointerArgs[] = {
15084        (void *) length,
15085        (void *) driverControlString,
15086    };
15087
15088    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15089                              threadStartTime, threadEndTime,
15090                              &glmsg, pointerArgs);
15091    glContext->traceGLMessage(&glmsg);
15092}
15093
15094void GLTrace_glEnableDriverControlQCOM(GLuint driverControl) {
15095    GLMessage glmsg;
15096    GLTraceContext *glContext = getGLTraceContext();
15097
15098    glmsg.set_function(GLMessage::glEnableDriverControlQCOM);
15099
15100    // copy argument driverControl
15101    GLMessage_DataType *arg_driverControl = glmsg.add_args();
15102    arg_driverControl->set_isarray(false);
15103    arg_driverControl->set_type(GLMessage::DataType::INT);
15104    arg_driverControl->add_intvalue(driverControl);
15105
15106    // call function
15107    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15108    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15109    glContext->hooks->gl.glEnableDriverControlQCOM(driverControl);
15110    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15111    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15112
15113    void *pointerArgs[] = {
15114    };
15115
15116    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15117                              threadStartTime, threadEndTime,
15118                              &glmsg, pointerArgs);
15119    glContext->traceGLMessage(&glmsg);
15120}
15121
15122void GLTrace_glDisableDriverControlQCOM(GLuint driverControl) {
15123    GLMessage glmsg;
15124    GLTraceContext *glContext = getGLTraceContext();
15125
15126    glmsg.set_function(GLMessage::glDisableDriverControlQCOM);
15127
15128    // copy argument driverControl
15129    GLMessage_DataType *arg_driverControl = glmsg.add_args();
15130    arg_driverControl->set_isarray(false);
15131    arg_driverControl->set_type(GLMessage::DataType::INT);
15132    arg_driverControl->add_intvalue(driverControl);
15133
15134    // call function
15135    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15136    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15137    glContext->hooks->gl.glDisableDriverControlQCOM(driverControl);
15138    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15139    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15140
15141    void *pointerArgs[] = {
15142    };
15143
15144    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15145                              threadStartTime, threadEndTime,
15146                              &glmsg, pointerArgs);
15147    glContext->traceGLMessage(&glmsg);
15148}
15149
15150void GLTrace_glExtGetTexturesQCOM(GLuint *textures, GLint maxTextures, GLint *numTextures) {
15151    GLMessage glmsg;
15152    GLTraceContext *glContext = getGLTraceContext();
15153
15154    glmsg.set_function(GLMessage::glExtGetTexturesQCOM);
15155
15156    // copy argument textures
15157    GLMessage_DataType *arg_textures = glmsg.add_args();
15158    arg_textures->set_isarray(false);
15159    arg_textures->set_type(GLMessage::DataType::INT64);
15160    arg_textures->add_int64value((uintptr_t)textures);
15161
15162    // copy argument maxTextures
15163    GLMessage_DataType *arg_maxTextures = glmsg.add_args();
15164    arg_maxTextures->set_isarray(false);
15165    arg_maxTextures->set_type(GLMessage::DataType::INT);
15166    arg_maxTextures->add_intvalue(maxTextures);
15167
15168    // copy argument numTextures
15169    GLMessage_DataType *arg_numTextures = glmsg.add_args();
15170    arg_numTextures->set_isarray(false);
15171    arg_numTextures->set_type(GLMessage::DataType::INT64);
15172    arg_numTextures->add_int64value((uintptr_t)numTextures);
15173
15174    // call function
15175    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15176    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15177    glContext->hooks->gl.glExtGetTexturesQCOM(textures, maxTextures, numTextures);
15178    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15179    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15180
15181    void *pointerArgs[] = {
15182        (void *) textures,
15183        (void *) numTextures,
15184    };
15185
15186    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15187                              threadStartTime, threadEndTime,
15188                              &glmsg, pointerArgs);
15189    glContext->traceGLMessage(&glmsg);
15190}
15191
15192void GLTrace_glExtGetBuffersQCOM(GLuint *buffers, GLint maxBuffers, GLint *numBuffers) {
15193    GLMessage glmsg;
15194    GLTraceContext *glContext = getGLTraceContext();
15195
15196    glmsg.set_function(GLMessage::glExtGetBuffersQCOM);
15197
15198    // copy argument buffers
15199    GLMessage_DataType *arg_buffers = glmsg.add_args();
15200    arg_buffers->set_isarray(false);
15201    arg_buffers->set_type(GLMessage::DataType::INT64);
15202    arg_buffers->add_int64value((uintptr_t)buffers);
15203
15204    // copy argument maxBuffers
15205    GLMessage_DataType *arg_maxBuffers = glmsg.add_args();
15206    arg_maxBuffers->set_isarray(false);
15207    arg_maxBuffers->set_type(GLMessage::DataType::INT);
15208    arg_maxBuffers->add_intvalue(maxBuffers);
15209
15210    // copy argument numBuffers
15211    GLMessage_DataType *arg_numBuffers = glmsg.add_args();
15212    arg_numBuffers->set_isarray(false);
15213    arg_numBuffers->set_type(GLMessage::DataType::INT64);
15214    arg_numBuffers->add_int64value((uintptr_t)numBuffers);
15215
15216    // call function
15217    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15218    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15219    glContext->hooks->gl.glExtGetBuffersQCOM(buffers, maxBuffers, numBuffers);
15220    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15221    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15222
15223    void *pointerArgs[] = {
15224        (void *) buffers,
15225        (void *) numBuffers,
15226    };
15227
15228    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15229                              threadStartTime, threadEndTime,
15230                              &glmsg, pointerArgs);
15231    glContext->traceGLMessage(&glmsg);
15232}
15233
15234void GLTrace_glExtGetRenderbuffersQCOM(GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers) {
15235    GLMessage glmsg;
15236    GLTraceContext *glContext = getGLTraceContext();
15237
15238    glmsg.set_function(GLMessage::glExtGetRenderbuffersQCOM);
15239
15240    // copy argument renderbuffers
15241    GLMessage_DataType *arg_renderbuffers = glmsg.add_args();
15242    arg_renderbuffers->set_isarray(false);
15243    arg_renderbuffers->set_type(GLMessage::DataType::INT64);
15244    arg_renderbuffers->add_int64value((uintptr_t)renderbuffers);
15245
15246    // copy argument maxRenderbuffers
15247    GLMessage_DataType *arg_maxRenderbuffers = glmsg.add_args();
15248    arg_maxRenderbuffers->set_isarray(false);
15249    arg_maxRenderbuffers->set_type(GLMessage::DataType::INT);
15250    arg_maxRenderbuffers->add_intvalue(maxRenderbuffers);
15251
15252    // copy argument numRenderbuffers
15253    GLMessage_DataType *arg_numRenderbuffers = glmsg.add_args();
15254    arg_numRenderbuffers->set_isarray(false);
15255    arg_numRenderbuffers->set_type(GLMessage::DataType::INT64);
15256    arg_numRenderbuffers->add_int64value((uintptr_t)numRenderbuffers);
15257
15258    // call function
15259    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15260    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15261    glContext->hooks->gl.glExtGetRenderbuffersQCOM(renderbuffers, maxRenderbuffers, numRenderbuffers);
15262    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15263    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15264
15265    void *pointerArgs[] = {
15266        (void *) renderbuffers,
15267        (void *) numRenderbuffers,
15268    };
15269
15270    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15271                              threadStartTime, threadEndTime,
15272                              &glmsg, pointerArgs);
15273    glContext->traceGLMessage(&glmsg);
15274}
15275
15276void GLTrace_glExtGetFramebuffersQCOM(GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers) {
15277    GLMessage glmsg;
15278    GLTraceContext *glContext = getGLTraceContext();
15279
15280    glmsg.set_function(GLMessage::glExtGetFramebuffersQCOM);
15281
15282    // copy argument framebuffers
15283    GLMessage_DataType *arg_framebuffers = glmsg.add_args();
15284    arg_framebuffers->set_isarray(false);
15285    arg_framebuffers->set_type(GLMessage::DataType::INT64);
15286    arg_framebuffers->add_int64value((uintptr_t)framebuffers);
15287
15288    // copy argument maxFramebuffers
15289    GLMessage_DataType *arg_maxFramebuffers = glmsg.add_args();
15290    arg_maxFramebuffers->set_isarray(false);
15291    arg_maxFramebuffers->set_type(GLMessage::DataType::INT);
15292    arg_maxFramebuffers->add_intvalue(maxFramebuffers);
15293
15294    // copy argument numFramebuffers
15295    GLMessage_DataType *arg_numFramebuffers = glmsg.add_args();
15296    arg_numFramebuffers->set_isarray(false);
15297    arg_numFramebuffers->set_type(GLMessage::DataType::INT64);
15298    arg_numFramebuffers->add_int64value((uintptr_t)numFramebuffers);
15299
15300    // call function
15301    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15302    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15303    glContext->hooks->gl.glExtGetFramebuffersQCOM(framebuffers, maxFramebuffers, numFramebuffers);
15304    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15305    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15306
15307    void *pointerArgs[] = {
15308        (void *) framebuffers,
15309        (void *) numFramebuffers,
15310    };
15311
15312    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15313                              threadStartTime, threadEndTime,
15314                              &glmsg, pointerArgs);
15315    glContext->traceGLMessage(&glmsg);
15316}
15317
15318void GLTrace_glExtGetTexLevelParameterivQCOM(GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params) {
15319    GLMessage glmsg;
15320    GLTraceContext *glContext = getGLTraceContext();
15321
15322    glmsg.set_function(GLMessage::glExtGetTexLevelParameterivQCOM);
15323
15324    // copy argument texture
15325    GLMessage_DataType *arg_texture = glmsg.add_args();
15326    arg_texture->set_isarray(false);
15327    arg_texture->set_type(GLMessage::DataType::INT);
15328    arg_texture->add_intvalue(texture);
15329
15330    // copy argument face
15331    GLMessage_DataType *arg_face = glmsg.add_args();
15332    arg_face->set_isarray(false);
15333    arg_face->set_type(GLMessage::DataType::ENUM);
15334    arg_face->add_intvalue((int)face);
15335
15336    // copy argument level
15337    GLMessage_DataType *arg_level = glmsg.add_args();
15338    arg_level->set_isarray(false);
15339    arg_level->set_type(GLMessage::DataType::INT);
15340    arg_level->add_intvalue(level);
15341
15342    // copy argument pname
15343    GLMessage_DataType *arg_pname = glmsg.add_args();
15344    arg_pname->set_isarray(false);
15345    arg_pname->set_type(GLMessage::DataType::ENUM);
15346    arg_pname->add_intvalue((int)pname);
15347
15348    // copy argument params
15349    GLMessage_DataType *arg_params = glmsg.add_args();
15350    arg_params->set_isarray(false);
15351    arg_params->set_type(GLMessage::DataType::INT64);
15352    arg_params->add_int64value((uintptr_t)params);
15353
15354    // call function
15355    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15356    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15357    glContext->hooks->gl.glExtGetTexLevelParameterivQCOM(texture, face, level, pname, params);
15358    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15359    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15360
15361    void *pointerArgs[] = {
15362        (void *) params,
15363    };
15364
15365    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15366                              threadStartTime, threadEndTime,
15367                              &glmsg, pointerArgs);
15368    glContext->traceGLMessage(&glmsg);
15369}
15370
15371void GLTrace_glExtTexObjectStateOverrideiQCOM(GLenum target, GLenum pname, GLint param) {
15372    GLMessage glmsg;
15373    GLTraceContext *glContext = getGLTraceContext();
15374
15375    glmsg.set_function(GLMessage::glExtTexObjectStateOverrideiQCOM);
15376
15377    // copy argument target
15378    GLMessage_DataType *arg_target = glmsg.add_args();
15379    arg_target->set_isarray(false);
15380    arg_target->set_type(GLMessage::DataType::ENUM);
15381    arg_target->add_intvalue((int)target);
15382
15383    // copy argument pname
15384    GLMessage_DataType *arg_pname = glmsg.add_args();
15385    arg_pname->set_isarray(false);
15386    arg_pname->set_type(GLMessage::DataType::ENUM);
15387    arg_pname->add_intvalue((int)pname);
15388
15389    // copy argument param
15390    GLMessage_DataType *arg_param = glmsg.add_args();
15391    arg_param->set_isarray(false);
15392    arg_param->set_type(GLMessage::DataType::INT);
15393    arg_param->add_intvalue(param);
15394
15395    // call function
15396    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15397    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15398    glContext->hooks->gl.glExtTexObjectStateOverrideiQCOM(target, pname, param);
15399    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15400    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15401
15402    void *pointerArgs[] = {
15403    };
15404
15405    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15406                              threadStartTime, threadEndTime,
15407                              &glmsg, pointerArgs);
15408    glContext->traceGLMessage(&glmsg);
15409}
15410
15411void GLTrace_glExtGetTexSubImageQCOM(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels) {
15412    GLMessage glmsg;
15413    GLTraceContext *glContext = getGLTraceContext();
15414
15415    glmsg.set_function(GLMessage::glExtGetTexSubImageQCOM);
15416
15417    // copy argument target
15418    GLMessage_DataType *arg_target = glmsg.add_args();
15419    arg_target->set_isarray(false);
15420    arg_target->set_type(GLMessage::DataType::ENUM);
15421    arg_target->add_intvalue((int)target);
15422
15423    // copy argument level
15424    GLMessage_DataType *arg_level = glmsg.add_args();
15425    arg_level->set_isarray(false);
15426    arg_level->set_type(GLMessage::DataType::INT);
15427    arg_level->add_intvalue(level);
15428
15429    // copy argument xoffset
15430    GLMessage_DataType *arg_xoffset = glmsg.add_args();
15431    arg_xoffset->set_isarray(false);
15432    arg_xoffset->set_type(GLMessage::DataType::INT);
15433    arg_xoffset->add_intvalue(xoffset);
15434
15435    // copy argument yoffset
15436    GLMessage_DataType *arg_yoffset = glmsg.add_args();
15437    arg_yoffset->set_isarray(false);
15438    arg_yoffset->set_type(GLMessage::DataType::INT);
15439    arg_yoffset->add_intvalue(yoffset);
15440
15441    // copy argument zoffset
15442    GLMessage_DataType *arg_zoffset = glmsg.add_args();
15443    arg_zoffset->set_isarray(false);
15444    arg_zoffset->set_type(GLMessage::DataType::INT);
15445    arg_zoffset->add_intvalue(zoffset);
15446
15447    // copy argument width
15448    GLMessage_DataType *arg_width = glmsg.add_args();
15449    arg_width->set_isarray(false);
15450    arg_width->set_type(GLMessage::DataType::INT);
15451    arg_width->add_intvalue(width);
15452
15453    // copy argument height
15454    GLMessage_DataType *arg_height = glmsg.add_args();
15455    arg_height->set_isarray(false);
15456    arg_height->set_type(GLMessage::DataType::INT);
15457    arg_height->add_intvalue(height);
15458
15459    // copy argument depth
15460    GLMessage_DataType *arg_depth = glmsg.add_args();
15461    arg_depth->set_isarray(false);
15462    arg_depth->set_type(GLMessage::DataType::INT);
15463    arg_depth->add_intvalue(depth);
15464
15465    // copy argument format
15466    GLMessage_DataType *arg_format = glmsg.add_args();
15467    arg_format->set_isarray(false);
15468    arg_format->set_type(GLMessage::DataType::ENUM);
15469    arg_format->add_intvalue((int)format);
15470
15471    // copy argument type
15472    GLMessage_DataType *arg_type = glmsg.add_args();
15473    arg_type->set_isarray(false);
15474    arg_type->set_type(GLMessage::DataType::ENUM);
15475    arg_type->add_intvalue((int)type);
15476
15477    // copy argument texels
15478    GLMessage_DataType *arg_texels = glmsg.add_args();
15479    arg_texels->set_isarray(false);
15480    arg_texels->set_type(GLMessage::DataType::INT64);
15481    arg_texels->add_int64value((uintptr_t)texels);
15482
15483    // call function
15484    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15485    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15486    glContext->hooks->gl.glExtGetTexSubImageQCOM(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, texels);
15487    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15488    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15489
15490    void *pointerArgs[] = {
15491        (void *) texels,
15492    };
15493
15494    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15495                              threadStartTime, threadEndTime,
15496                              &glmsg, pointerArgs);
15497    glContext->traceGLMessage(&glmsg);
15498}
15499
15500void GLTrace_glExtGetBufferPointervQCOM(GLenum target, GLvoid **params) {
15501    GLMessage glmsg;
15502    GLTraceContext *glContext = getGLTraceContext();
15503
15504    glmsg.set_function(GLMessage::glExtGetBufferPointervQCOM);
15505
15506    // copy argument target
15507    GLMessage_DataType *arg_target = glmsg.add_args();
15508    arg_target->set_isarray(false);
15509    arg_target->set_type(GLMessage::DataType::ENUM);
15510    arg_target->add_intvalue((int)target);
15511
15512    // copy argument params
15513    GLMessage_DataType *arg_params = glmsg.add_args();
15514    arg_params->set_isarray(false);
15515    arg_params->set_type(GLMessage::DataType::INT64);
15516    arg_params->add_int64value((uintptr_t)params);
15517
15518    // call function
15519    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15520    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15521    glContext->hooks->gl.glExtGetBufferPointervQCOM(target, params);
15522    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15523    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15524
15525    void *pointerArgs[] = {
15526        (void *) params,
15527    };
15528
15529    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15530                              threadStartTime, threadEndTime,
15531                              &glmsg, pointerArgs);
15532    glContext->traceGLMessage(&glmsg);
15533}
15534
15535void GLTrace_glExtGetShadersQCOM(GLuint *shaders, GLint maxShaders, GLint *numShaders) {
15536    GLMessage glmsg;
15537    GLTraceContext *glContext = getGLTraceContext();
15538
15539    glmsg.set_function(GLMessage::glExtGetShadersQCOM);
15540
15541    // copy argument shaders
15542    GLMessage_DataType *arg_shaders = glmsg.add_args();
15543    arg_shaders->set_isarray(false);
15544    arg_shaders->set_type(GLMessage::DataType::INT64);
15545    arg_shaders->add_int64value((uintptr_t)shaders);
15546
15547    // copy argument maxShaders
15548    GLMessage_DataType *arg_maxShaders = glmsg.add_args();
15549    arg_maxShaders->set_isarray(false);
15550    arg_maxShaders->set_type(GLMessage::DataType::INT);
15551    arg_maxShaders->add_intvalue(maxShaders);
15552
15553    // copy argument numShaders
15554    GLMessage_DataType *arg_numShaders = glmsg.add_args();
15555    arg_numShaders->set_isarray(false);
15556    arg_numShaders->set_type(GLMessage::DataType::INT64);
15557    arg_numShaders->add_int64value((uintptr_t)numShaders);
15558
15559    // call function
15560    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15561    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15562    glContext->hooks->gl.glExtGetShadersQCOM(shaders, maxShaders, numShaders);
15563    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15564    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15565
15566    void *pointerArgs[] = {
15567        (void *) shaders,
15568        (void *) numShaders,
15569    };
15570
15571    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15572                              threadStartTime, threadEndTime,
15573                              &glmsg, pointerArgs);
15574    glContext->traceGLMessage(&glmsg);
15575}
15576
15577void GLTrace_glExtGetProgramsQCOM(GLuint *programs, GLint maxPrograms, GLint *numPrograms) {
15578    GLMessage glmsg;
15579    GLTraceContext *glContext = getGLTraceContext();
15580
15581    glmsg.set_function(GLMessage::glExtGetProgramsQCOM);
15582
15583    // copy argument programs
15584    GLMessage_DataType *arg_programs = glmsg.add_args();
15585    arg_programs->set_isarray(false);
15586    arg_programs->set_type(GLMessage::DataType::INT64);
15587    arg_programs->add_int64value((uintptr_t)programs);
15588
15589    // copy argument maxPrograms
15590    GLMessage_DataType *arg_maxPrograms = glmsg.add_args();
15591    arg_maxPrograms->set_isarray(false);
15592    arg_maxPrograms->set_type(GLMessage::DataType::INT);
15593    arg_maxPrograms->add_intvalue(maxPrograms);
15594
15595    // copy argument numPrograms
15596    GLMessage_DataType *arg_numPrograms = glmsg.add_args();
15597    arg_numPrograms->set_isarray(false);
15598    arg_numPrograms->set_type(GLMessage::DataType::INT64);
15599    arg_numPrograms->add_int64value((uintptr_t)numPrograms);
15600
15601    // call function
15602    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15603    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15604    glContext->hooks->gl.glExtGetProgramsQCOM(programs, maxPrograms, numPrograms);
15605    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15606    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15607
15608    void *pointerArgs[] = {
15609        (void *) programs,
15610        (void *) numPrograms,
15611    };
15612
15613    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15614                              threadStartTime, threadEndTime,
15615                              &glmsg, pointerArgs);
15616    glContext->traceGLMessage(&glmsg);
15617}
15618
15619GLboolean GLTrace_glExtIsProgramBinaryQCOM(GLuint program) {
15620    GLMessage glmsg;
15621    GLTraceContext *glContext = getGLTraceContext();
15622
15623    glmsg.set_function(GLMessage::glExtIsProgramBinaryQCOM);
15624
15625    // copy argument program
15626    GLMessage_DataType *arg_program = glmsg.add_args();
15627    arg_program->set_isarray(false);
15628    arg_program->set_type(GLMessage::DataType::INT);
15629    arg_program->add_intvalue(program);
15630
15631    // call function
15632    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15633    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15634    GLboolean retValue = glContext->hooks->gl.glExtIsProgramBinaryQCOM(program);
15635    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15636    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15637
15638    // set return value
15639    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
15640    rt->set_isarray(false);
15641    rt->set_type(GLMessage::DataType::BOOL);
15642    rt->add_boolvalue(retValue);
15643
15644    void *pointerArgs[] = {
15645    };
15646
15647    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15648                              threadStartTime, threadEndTime,
15649                              &glmsg, pointerArgs);
15650    glContext->traceGLMessage(&glmsg);
15651
15652    return retValue;
15653}
15654
15655void GLTrace_glExtGetProgramBinarySourceQCOM(GLuint program, GLenum shadertype, GLchar *source, GLint *length) {
15656    GLMessage glmsg;
15657    GLTraceContext *glContext = getGLTraceContext();
15658
15659    glmsg.set_function(GLMessage::glExtGetProgramBinarySourceQCOM);
15660
15661    // copy argument program
15662    GLMessage_DataType *arg_program = glmsg.add_args();
15663    arg_program->set_isarray(false);
15664    arg_program->set_type(GLMessage::DataType::INT);
15665    arg_program->add_intvalue(program);
15666
15667    // copy argument shadertype
15668    GLMessage_DataType *arg_shadertype = glmsg.add_args();
15669    arg_shadertype->set_isarray(false);
15670    arg_shadertype->set_type(GLMessage::DataType::ENUM);
15671    arg_shadertype->add_intvalue((int)shadertype);
15672
15673    // copy argument source
15674    GLMessage_DataType *arg_source = glmsg.add_args();
15675    arg_source->set_isarray(false);
15676    arg_source->set_type(GLMessage::DataType::INT64);
15677    arg_source->add_int64value((uintptr_t)source);
15678
15679    // copy argument length
15680    GLMessage_DataType *arg_length = glmsg.add_args();
15681    arg_length->set_isarray(false);
15682    arg_length->set_type(GLMessage::DataType::INT64);
15683    arg_length->add_int64value((uintptr_t)length);
15684
15685    // call function
15686    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15687    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15688    glContext->hooks->gl.glExtGetProgramBinarySourceQCOM(program, shadertype, source, length);
15689    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15690    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15691
15692    void *pointerArgs[] = {
15693        (void *) source,
15694        (void *) length,
15695    };
15696
15697    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15698                              threadStartTime, threadEndTime,
15699                              &glmsg, pointerArgs);
15700    glContext->traceGLMessage(&glmsg);
15701}
15702
15703void GLTrace_glStartTilingQCOM(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask) {
15704    GLMessage glmsg;
15705    GLTraceContext *glContext = getGLTraceContext();
15706
15707    glmsg.set_function(GLMessage::glStartTilingQCOM);
15708
15709    // copy argument x
15710    GLMessage_DataType *arg_x = glmsg.add_args();
15711    arg_x->set_isarray(false);
15712    arg_x->set_type(GLMessage::DataType::INT);
15713    arg_x->add_intvalue(x);
15714
15715    // copy argument y
15716    GLMessage_DataType *arg_y = glmsg.add_args();
15717    arg_y->set_isarray(false);
15718    arg_y->set_type(GLMessage::DataType::INT);
15719    arg_y->add_intvalue(y);
15720
15721    // copy argument width
15722    GLMessage_DataType *arg_width = glmsg.add_args();
15723    arg_width->set_isarray(false);
15724    arg_width->set_type(GLMessage::DataType::INT);
15725    arg_width->add_intvalue(width);
15726
15727    // copy argument height
15728    GLMessage_DataType *arg_height = glmsg.add_args();
15729    arg_height->set_isarray(false);
15730    arg_height->set_type(GLMessage::DataType::INT);
15731    arg_height->add_intvalue(height);
15732
15733    // copy argument preserveMask
15734    GLMessage_DataType *arg_preserveMask = glmsg.add_args();
15735    arg_preserveMask->set_isarray(false);
15736    arg_preserveMask->set_type(GLMessage::DataType::INT);
15737    arg_preserveMask->add_intvalue(preserveMask);
15738
15739    // call function
15740    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15741    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15742    glContext->hooks->gl.glStartTilingQCOM(x, y, width, height, preserveMask);
15743    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15744    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15745
15746    void *pointerArgs[] = {
15747    };
15748
15749    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15750                              threadStartTime, threadEndTime,
15751                              &glmsg, pointerArgs);
15752    glContext->traceGLMessage(&glmsg);
15753}
15754
15755void GLTrace_glEndTilingQCOM(GLbitfield preserveMask) {
15756    GLMessage glmsg;
15757    GLTraceContext *glContext = getGLTraceContext();
15758
15759    glmsg.set_function(GLMessage::glEndTilingQCOM);
15760
15761    // copy argument preserveMask
15762    GLMessage_DataType *arg_preserveMask = glmsg.add_args();
15763    arg_preserveMask->set_isarray(false);
15764    arg_preserveMask->set_type(GLMessage::DataType::INT);
15765    arg_preserveMask->add_intvalue(preserveMask);
15766
15767    // call function
15768    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15769    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15770    glContext->hooks->gl.glEndTilingQCOM(preserveMask);
15771    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15772    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15773
15774    void *pointerArgs[] = {
15775    };
15776
15777    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15778                              threadStartTime, threadEndTime,
15779                              &glmsg, pointerArgs);
15780    glContext->traceGLMessage(&glmsg);
15781}
15782
15783
15784// Definitions for GL1 APIs
15785
15786void GLTrace_glAlphaFunc(GLenum func, GLclampf ref) {
15787    GLMessage glmsg;
15788    GLTraceContext *glContext = getGLTraceContext();
15789
15790    glmsg.set_function(GLMessage::glAlphaFunc);
15791
15792    // copy argument func
15793    GLMessage_DataType *arg_func = glmsg.add_args();
15794    arg_func->set_isarray(false);
15795    arg_func->set_type(GLMessage::DataType::ENUM);
15796    arg_func->add_intvalue((int)func);
15797
15798    // copy argument ref
15799    GLMessage_DataType *arg_ref = glmsg.add_args();
15800    arg_ref->set_isarray(false);
15801    arg_ref->set_type(GLMessage::DataType::FLOAT);
15802    arg_ref->add_floatvalue(ref);
15803
15804    // call function
15805    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15806    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15807    glContext->hooks->gl.glAlphaFunc(func, ref);
15808    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15809    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15810
15811    void *pointerArgs[] = {
15812    };
15813
15814    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15815                              threadStartTime, threadEndTime,
15816                              &glmsg, pointerArgs);
15817    glContext->traceGLMessage(&glmsg);
15818}
15819
15820void GLTrace_glClipPlanef(GLenum plane, const GLfloat *equation) {
15821    GLMessage glmsg;
15822    GLTraceContext *glContext = getGLTraceContext();
15823
15824    glmsg.set_function(GLMessage::glClipPlanef);
15825
15826    // copy argument plane
15827    GLMessage_DataType *arg_plane = glmsg.add_args();
15828    arg_plane->set_isarray(false);
15829    arg_plane->set_type(GLMessage::DataType::ENUM);
15830    arg_plane->add_intvalue((int)plane);
15831
15832    // copy argument equation
15833    GLMessage_DataType *arg_equation = glmsg.add_args();
15834    arg_equation->set_isarray(false);
15835    arg_equation->set_type(GLMessage::DataType::INT64);
15836    arg_equation->add_int64value((uintptr_t)equation);
15837
15838    // call function
15839    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15840    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15841    glContext->hooks->gl.glClipPlanef(plane, equation);
15842    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15843    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15844
15845    void *pointerArgs[] = {
15846        (void *) equation,
15847    };
15848
15849    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15850                              threadStartTime, threadEndTime,
15851                              &glmsg, pointerArgs);
15852    glContext->traceGLMessage(&glmsg);
15853}
15854
15855void GLTrace_glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {
15856    GLMessage glmsg;
15857    GLTraceContext *glContext = getGLTraceContext();
15858
15859    glmsg.set_function(GLMessage::glColor4f);
15860
15861    // copy argument red
15862    GLMessage_DataType *arg_red = glmsg.add_args();
15863    arg_red->set_isarray(false);
15864    arg_red->set_type(GLMessage::DataType::FLOAT);
15865    arg_red->add_floatvalue(red);
15866
15867    // copy argument green
15868    GLMessage_DataType *arg_green = glmsg.add_args();
15869    arg_green->set_isarray(false);
15870    arg_green->set_type(GLMessage::DataType::FLOAT);
15871    arg_green->add_floatvalue(green);
15872
15873    // copy argument blue
15874    GLMessage_DataType *arg_blue = glmsg.add_args();
15875    arg_blue->set_isarray(false);
15876    arg_blue->set_type(GLMessage::DataType::FLOAT);
15877    arg_blue->add_floatvalue(blue);
15878
15879    // copy argument alpha
15880    GLMessage_DataType *arg_alpha = glmsg.add_args();
15881    arg_alpha->set_isarray(false);
15882    arg_alpha->set_type(GLMessage::DataType::FLOAT);
15883    arg_alpha->add_floatvalue(alpha);
15884
15885    // call function
15886    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15887    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15888    glContext->hooks->gl.glColor4f(red, green, blue, alpha);
15889    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15890    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15891
15892    void *pointerArgs[] = {
15893    };
15894
15895    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15896                              threadStartTime, threadEndTime,
15897                              &glmsg, pointerArgs);
15898    glContext->traceGLMessage(&glmsg);
15899}
15900
15901void GLTrace_glFogf(GLenum pname, GLfloat param) {
15902    GLMessage glmsg;
15903    GLTraceContext *glContext = getGLTraceContext();
15904
15905    glmsg.set_function(GLMessage::glFogf);
15906
15907    // copy argument pname
15908    GLMessage_DataType *arg_pname = glmsg.add_args();
15909    arg_pname->set_isarray(false);
15910    arg_pname->set_type(GLMessage::DataType::ENUM);
15911    arg_pname->add_intvalue((int)pname);
15912
15913    // copy argument param
15914    GLMessage_DataType *arg_param = glmsg.add_args();
15915    arg_param->set_isarray(false);
15916    arg_param->set_type(GLMessage::DataType::FLOAT);
15917    arg_param->add_floatvalue(param);
15918
15919    // call function
15920    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15921    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15922    glContext->hooks->gl.glFogf(pname, param);
15923    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15924    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15925
15926    void *pointerArgs[] = {
15927    };
15928
15929    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15930                              threadStartTime, threadEndTime,
15931                              &glmsg, pointerArgs);
15932    glContext->traceGLMessage(&glmsg);
15933}
15934
15935void GLTrace_glFogfv(GLenum pname, const GLfloat *params) {
15936    GLMessage glmsg;
15937    GLTraceContext *glContext = getGLTraceContext();
15938
15939    glmsg.set_function(GLMessage::glFogfv);
15940
15941    // copy argument pname
15942    GLMessage_DataType *arg_pname = glmsg.add_args();
15943    arg_pname->set_isarray(false);
15944    arg_pname->set_type(GLMessage::DataType::ENUM);
15945    arg_pname->add_intvalue((int)pname);
15946
15947    // copy argument params
15948    GLMessage_DataType *arg_params = glmsg.add_args();
15949    arg_params->set_isarray(false);
15950    arg_params->set_type(GLMessage::DataType::INT64);
15951    arg_params->add_int64value((uintptr_t)params);
15952
15953    // call function
15954    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
15955    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
15956    glContext->hooks->gl.glFogfv(pname, params);
15957    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
15958    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
15959
15960    void *pointerArgs[] = {
15961        (void *) params,
15962    };
15963
15964    fixupGLMessage(glContext, wallStartTime, wallEndTime,
15965                              threadStartTime, threadEndTime,
15966                              &glmsg, pointerArgs);
15967    glContext->traceGLMessage(&glmsg);
15968}
15969
15970void GLTrace_glFrustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) {
15971    GLMessage glmsg;
15972    GLTraceContext *glContext = getGLTraceContext();
15973
15974    glmsg.set_function(GLMessage::glFrustumf);
15975
15976    // copy argument left
15977    GLMessage_DataType *arg_left = glmsg.add_args();
15978    arg_left->set_isarray(false);
15979    arg_left->set_type(GLMessage::DataType::FLOAT);
15980    arg_left->add_floatvalue(left);
15981
15982    // copy argument right
15983    GLMessage_DataType *arg_right = glmsg.add_args();
15984    arg_right->set_isarray(false);
15985    arg_right->set_type(GLMessage::DataType::FLOAT);
15986    arg_right->add_floatvalue(right);
15987
15988    // copy argument bottom
15989    GLMessage_DataType *arg_bottom = glmsg.add_args();
15990    arg_bottom->set_isarray(false);
15991    arg_bottom->set_type(GLMessage::DataType::FLOAT);
15992    arg_bottom->add_floatvalue(bottom);
15993
15994    // copy argument top
15995    GLMessage_DataType *arg_top = glmsg.add_args();
15996    arg_top->set_isarray(false);
15997    arg_top->set_type(GLMessage::DataType::FLOAT);
15998    arg_top->add_floatvalue(top);
15999
16000    // copy argument zNear
16001    GLMessage_DataType *arg_zNear = glmsg.add_args();
16002    arg_zNear->set_isarray(false);
16003    arg_zNear->set_type(GLMessage::DataType::FLOAT);
16004    arg_zNear->add_floatvalue(zNear);
16005
16006    // copy argument zFar
16007    GLMessage_DataType *arg_zFar = glmsg.add_args();
16008    arg_zFar->set_isarray(false);
16009    arg_zFar->set_type(GLMessage::DataType::FLOAT);
16010    arg_zFar->add_floatvalue(zFar);
16011
16012    // call function
16013    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16014    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16015    glContext->hooks->gl.glFrustumf(left, right, bottom, top, zNear, zFar);
16016    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16017    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16018
16019    void *pointerArgs[] = {
16020    };
16021
16022    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16023                              threadStartTime, threadEndTime,
16024                              &glmsg, pointerArgs);
16025    glContext->traceGLMessage(&glmsg);
16026}
16027
16028void GLTrace_glGetClipPlanef(GLenum pname, GLfloat eqn[4]) {
16029    GLMessage glmsg;
16030    GLTraceContext *glContext = getGLTraceContext();
16031
16032    glmsg.set_function(GLMessage::glGetClipPlanef);
16033
16034    // copy argument pname
16035    GLMessage_DataType *arg_pname = glmsg.add_args();
16036    arg_pname->set_isarray(false);
16037    arg_pname->set_type(GLMessage::DataType::ENUM);
16038    arg_pname->add_intvalue((int)pname);
16039
16040    // copy argument eqn
16041    GLMessage_DataType *arg_eqn = glmsg.add_args();
16042    arg_eqn->set_isarray(false);
16043    arg_eqn->set_type(GLMessage::DataType::INT64);
16044    arg_eqn->add_int64value((uintptr_t)eqn);
16045
16046    // call function
16047    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16048    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16049    glContext->hooks->gl.glGetClipPlanef(pname, eqn);
16050    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16051    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16052
16053    void *pointerArgs[] = {
16054        (void *) eqn,
16055    };
16056
16057    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16058                              threadStartTime, threadEndTime,
16059                              &glmsg, pointerArgs);
16060    glContext->traceGLMessage(&glmsg);
16061}
16062
16063void GLTrace_glGetLightfv(GLenum light, GLenum pname, GLfloat *params) {
16064    GLMessage glmsg;
16065    GLTraceContext *glContext = getGLTraceContext();
16066
16067    glmsg.set_function(GLMessage::glGetLightfv);
16068
16069    // copy argument light
16070    GLMessage_DataType *arg_light = glmsg.add_args();
16071    arg_light->set_isarray(false);
16072    arg_light->set_type(GLMessage::DataType::ENUM);
16073    arg_light->add_intvalue((int)light);
16074
16075    // copy argument pname
16076    GLMessage_DataType *arg_pname = glmsg.add_args();
16077    arg_pname->set_isarray(false);
16078    arg_pname->set_type(GLMessage::DataType::ENUM);
16079    arg_pname->add_intvalue((int)pname);
16080
16081    // copy argument params
16082    GLMessage_DataType *arg_params = glmsg.add_args();
16083    arg_params->set_isarray(false);
16084    arg_params->set_type(GLMessage::DataType::INT64);
16085    arg_params->add_int64value((uintptr_t)params);
16086
16087    // call function
16088    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16089    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16090    glContext->hooks->gl.glGetLightfv(light, pname, params);
16091    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16092    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16093
16094    void *pointerArgs[] = {
16095        (void *) params,
16096    };
16097
16098    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16099                              threadStartTime, threadEndTime,
16100                              &glmsg, pointerArgs);
16101    glContext->traceGLMessage(&glmsg);
16102}
16103
16104void GLTrace_glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params) {
16105    GLMessage glmsg;
16106    GLTraceContext *glContext = getGLTraceContext();
16107
16108    glmsg.set_function(GLMessage::glGetMaterialfv);
16109
16110    // copy argument face
16111    GLMessage_DataType *arg_face = glmsg.add_args();
16112    arg_face->set_isarray(false);
16113    arg_face->set_type(GLMessage::DataType::ENUM);
16114    arg_face->add_intvalue((int)face);
16115
16116    // copy argument pname
16117    GLMessage_DataType *arg_pname = glmsg.add_args();
16118    arg_pname->set_isarray(false);
16119    arg_pname->set_type(GLMessage::DataType::ENUM);
16120    arg_pname->add_intvalue((int)pname);
16121
16122    // copy argument params
16123    GLMessage_DataType *arg_params = glmsg.add_args();
16124    arg_params->set_isarray(false);
16125    arg_params->set_type(GLMessage::DataType::INT64);
16126    arg_params->add_int64value((uintptr_t)params);
16127
16128    // call function
16129    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16130    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16131    glContext->hooks->gl.glGetMaterialfv(face, pname, params);
16132    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16133    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16134
16135    void *pointerArgs[] = {
16136        (void *) params,
16137    };
16138
16139    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16140                              threadStartTime, threadEndTime,
16141                              &glmsg, pointerArgs);
16142    glContext->traceGLMessage(&glmsg);
16143}
16144
16145void GLTrace_glGetTexEnvfv(GLenum env, GLenum pname, GLfloat *params) {
16146    GLMessage glmsg;
16147    GLTraceContext *glContext = getGLTraceContext();
16148
16149    glmsg.set_function(GLMessage::glGetTexEnvfv);
16150
16151    // copy argument env
16152    GLMessage_DataType *arg_env = glmsg.add_args();
16153    arg_env->set_isarray(false);
16154    arg_env->set_type(GLMessage::DataType::ENUM);
16155    arg_env->add_intvalue((int)env);
16156
16157    // copy argument pname
16158    GLMessage_DataType *arg_pname = glmsg.add_args();
16159    arg_pname->set_isarray(false);
16160    arg_pname->set_type(GLMessage::DataType::ENUM);
16161    arg_pname->add_intvalue((int)pname);
16162
16163    // copy argument params
16164    GLMessage_DataType *arg_params = glmsg.add_args();
16165    arg_params->set_isarray(false);
16166    arg_params->set_type(GLMessage::DataType::INT64);
16167    arg_params->add_int64value((uintptr_t)params);
16168
16169    // call function
16170    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16171    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16172    glContext->hooks->gl.glGetTexEnvfv(env, pname, params);
16173    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16174    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16175
16176    void *pointerArgs[] = {
16177        (void *) params,
16178    };
16179
16180    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16181                              threadStartTime, threadEndTime,
16182                              &glmsg, pointerArgs);
16183    glContext->traceGLMessage(&glmsg);
16184}
16185
16186void GLTrace_glLightModelf(GLenum pname, GLfloat param) {
16187    GLMessage glmsg;
16188    GLTraceContext *glContext = getGLTraceContext();
16189
16190    glmsg.set_function(GLMessage::glLightModelf);
16191
16192    // copy argument pname
16193    GLMessage_DataType *arg_pname = glmsg.add_args();
16194    arg_pname->set_isarray(false);
16195    arg_pname->set_type(GLMessage::DataType::ENUM);
16196    arg_pname->add_intvalue((int)pname);
16197
16198    // copy argument param
16199    GLMessage_DataType *arg_param = glmsg.add_args();
16200    arg_param->set_isarray(false);
16201    arg_param->set_type(GLMessage::DataType::FLOAT);
16202    arg_param->add_floatvalue(param);
16203
16204    // call function
16205    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16206    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16207    glContext->hooks->gl.glLightModelf(pname, param);
16208    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16209    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16210
16211    void *pointerArgs[] = {
16212    };
16213
16214    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16215                              threadStartTime, threadEndTime,
16216                              &glmsg, pointerArgs);
16217    glContext->traceGLMessage(&glmsg);
16218}
16219
16220void GLTrace_glLightModelfv(GLenum pname, const GLfloat *params) {
16221    GLMessage glmsg;
16222    GLTraceContext *glContext = getGLTraceContext();
16223
16224    glmsg.set_function(GLMessage::glLightModelfv);
16225
16226    // copy argument pname
16227    GLMessage_DataType *arg_pname = glmsg.add_args();
16228    arg_pname->set_isarray(false);
16229    arg_pname->set_type(GLMessage::DataType::ENUM);
16230    arg_pname->add_intvalue((int)pname);
16231
16232    // copy argument params
16233    GLMessage_DataType *arg_params = glmsg.add_args();
16234    arg_params->set_isarray(false);
16235    arg_params->set_type(GLMessage::DataType::INT64);
16236    arg_params->add_int64value((uintptr_t)params);
16237
16238    // call function
16239    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16240    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16241    glContext->hooks->gl.glLightModelfv(pname, params);
16242    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16243    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16244
16245    void *pointerArgs[] = {
16246        (void *) params,
16247    };
16248
16249    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16250                              threadStartTime, threadEndTime,
16251                              &glmsg, pointerArgs);
16252    glContext->traceGLMessage(&glmsg);
16253}
16254
16255void GLTrace_glLightf(GLenum light, GLenum pname, GLfloat param) {
16256    GLMessage glmsg;
16257    GLTraceContext *glContext = getGLTraceContext();
16258
16259    glmsg.set_function(GLMessage::glLightf);
16260
16261    // copy argument light
16262    GLMessage_DataType *arg_light = glmsg.add_args();
16263    arg_light->set_isarray(false);
16264    arg_light->set_type(GLMessage::DataType::ENUM);
16265    arg_light->add_intvalue((int)light);
16266
16267    // copy argument pname
16268    GLMessage_DataType *arg_pname = glmsg.add_args();
16269    arg_pname->set_isarray(false);
16270    arg_pname->set_type(GLMessage::DataType::ENUM);
16271    arg_pname->add_intvalue((int)pname);
16272
16273    // copy argument param
16274    GLMessage_DataType *arg_param = glmsg.add_args();
16275    arg_param->set_isarray(false);
16276    arg_param->set_type(GLMessage::DataType::FLOAT);
16277    arg_param->add_floatvalue(param);
16278
16279    // call function
16280    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16281    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16282    glContext->hooks->gl.glLightf(light, pname, param);
16283    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16284    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16285
16286    void *pointerArgs[] = {
16287    };
16288
16289    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16290                              threadStartTime, threadEndTime,
16291                              &glmsg, pointerArgs);
16292    glContext->traceGLMessage(&glmsg);
16293}
16294
16295void GLTrace_glLightfv(GLenum light, GLenum pname, const GLfloat *params) {
16296    GLMessage glmsg;
16297    GLTraceContext *glContext = getGLTraceContext();
16298
16299    glmsg.set_function(GLMessage::glLightfv);
16300
16301    // copy argument light
16302    GLMessage_DataType *arg_light = glmsg.add_args();
16303    arg_light->set_isarray(false);
16304    arg_light->set_type(GLMessage::DataType::ENUM);
16305    arg_light->add_intvalue((int)light);
16306
16307    // copy argument pname
16308    GLMessage_DataType *arg_pname = glmsg.add_args();
16309    arg_pname->set_isarray(false);
16310    arg_pname->set_type(GLMessage::DataType::ENUM);
16311    arg_pname->add_intvalue((int)pname);
16312
16313    // copy argument params
16314    GLMessage_DataType *arg_params = glmsg.add_args();
16315    arg_params->set_isarray(false);
16316    arg_params->set_type(GLMessage::DataType::INT64);
16317    arg_params->add_int64value((uintptr_t)params);
16318
16319    // call function
16320    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16321    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16322    glContext->hooks->gl.glLightfv(light, pname, params);
16323    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16324    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16325
16326    void *pointerArgs[] = {
16327        (void *) params,
16328    };
16329
16330    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16331                              threadStartTime, threadEndTime,
16332                              &glmsg, pointerArgs);
16333    glContext->traceGLMessage(&glmsg);
16334}
16335
16336void GLTrace_glLoadMatrixf(const GLfloat *m) {
16337    GLMessage glmsg;
16338    GLTraceContext *glContext = getGLTraceContext();
16339
16340    glmsg.set_function(GLMessage::glLoadMatrixf);
16341
16342    // copy argument m
16343    GLMessage_DataType *arg_m = glmsg.add_args();
16344    arg_m->set_isarray(false);
16345    arg_m->set_type(GLMessage::DataType::INT64);
16346    arg_m->add_int64value((uintptr_t)m);
16347
16348    // call function
16349    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16350    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16351    glContext->hooks->gl.glLoadMatrixf(m);
16352    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16353    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16354
16355    void *pointerArgs[] = {
16356        (void *) m,
16357    };
16358
16359    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16360                              threadStartTime, threadEndTime,
16361                              &glmsg, pointerArgs);
16362    glContext->traceGLMessage(&glmsg);
16363}
16364
16365void GLTrace_glMaterialf(GLenum face, GLenum pname, GLfloat param) {
16366    GLMessage glmsg;
16367    GLTraceContext *glContext = getGLTraceContext();
16368
16369    glmsg.set_function(GLMessage::glMaterialf);
16370
16371    // copy argument face
16372    GLMessage_DataType *arg_face = glmsg.add_args();
16373    arg_face->set_isarray(false);
16374    arg_face->set_type(GLMessage::DataType::ENUM);
16375    arg_face->add_intvalue((int)face);
16376
16377    // copy argument pname
16378    GLMessage_DataType *arg_pname = glmsg.add_args();
16379    arg_pname->set_isarray(false);
16380    arg_pname->set_type(GLMessage::DataType::ENUM);
16381    arg_pname->add_intvalue((int)pname);
16382
16383    // copy argument param
16384    GLMessage_DataType *arg_param = glmsg.add_args();
16385    arg_param->set_isarray(false);
16386    arg_param->set_type(GLMessage::DataType::FLOAT);
16387    arg_param->add_floatvalue(param);
16388
16389    // call function
16390    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16391    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16392    glContext->hooks->gl.glMaterialf(face, pname, param);
16393    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16394    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16395
16396    void *pointerArgs[] = {
16397    };
16398
16399    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16400                              threadStartTime, threadEndTime,
16401                              &glmsg, pointerArgs);
16402    glContext->traceGLMessage(&glmsg);
16403}
16404
16405void GLTrace_glMaterialfv(GLenum face, GLenum pname, const GLfloat *params) {
16406    GLMessage glmsg;
16407    GLTraceContext *glContext = getGLTraceContext();
16408
16409    glmsg.set_function(GLMessage::glMaterialfv);
16410
16411    // copy argument face
16412    GLMessage_DataType *arg_face = glmsg.add_args();
16413    arg_face->set_isarray(false);
16414    arg_face->set_type(GLMessage::DataType::ENUM);
16415    arg_face->add_intvalue((int)face);
16416
16417    // copy argument pname
16418    GLMessage_DataType *arg_pname = glmsg.add_args();
16419    arg_pname->set_isarray(false);
16420    arg_pname->set_type(GLMessage::DataType::ENUM);
16421    arg_pname->add_intvalue((int)pname);
16422
16423    // copy argument params
16424    GLMessage_DataType *arg_params = glmsg.add_args();
16425    arg_params->set_isarray(false);
16426    arg_params->set_type(GLMessage::DataType::INT64);
16427    arg_params->add_int64value((uintptr_t)params);
16428
16429    // call function
16430    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16431    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16432    glContext->hooks->gl.glMaterialfv(face, pname, params);
16433    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16434    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16435
16436    void *pointerArgs[] = {
16437        (void *) params,
16438    };
16439
16440    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16441                              threadStartTime, threadEndTime,
16442                              &glmsg, pointerArgs);
16443    glContext->traceGLMessage(&glmsg);
16444}
16445
16446void GLTrace_glMultMatrixf(const GLfloat *m) {
16447    GLMessage glmsg;
16448    GLTraceContext *glContext = getGLTraceContext();
16449
16450    glmsg.set_function(GLMessage::glMultMatrixf);
16451
16452    // copy argument m
16453    GLMessage_DataType *arg_m = glmsg.add_args();
16454    arg_m->set_isarray(false);
16455    arg_m->set_type(GLMessage::DataType::INT64);
16456    arg_m->add_int64value((uintptr_t)m);
16457
16458    // call function
16459    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16460    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16461    glContext->hooks->gl.glMultMatrixf(m);
16462    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16463    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16464
16465    void *pointerArgs[] = {
16466        (void *) m,
16467    };
16468
16469    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16470                              threadStartTime, threadEndTime,
16471                              &glmsg, pointerArgs);
16472    glContext->traceGLMessage(&glmsg);
16473}
16474
16475void GLTrace_glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) {
16476    GLMessage glmsg;
16477    GLTraceContext *glContext = getGLTraceContext();
16478
16479    glmsg.set_function(GLMessage::glMultiTexCoord4f);
16480
16481    // copy argument target
16482    GLMessage_DataType *arg_target = glmsg.add_args();
16483    arg_target->set_isarray(false);
16484    arg_target->set_type(GLMessage::DataType::ENUM);
16485    arg_target->add_intvalue((int)target);
16486
16487    // copy argument s
16488    GLMessage_DataType *arg_s = glmsg.add_args();
16489    arg_s->set_isarray(false);
16490    arg_s->set_type(GLMessage::DataType::FLOAT);
16491    arg_s->add_floatvalue(s);
16492
16493    // copy argument t
16494    GLMessage_DataType *arg_t = glmsg.add_args();
16495    arg_t->set_isarray(false);
16496    arg_t->set_type(GLMessage::DataType::FLOAT);
16497    arg_t->add_floatvalue(t);
16498
16499    // copy argument r
16500    GLMessage_DataType *arg_r = glmsg.add_args();
16501    arg_r->set_isarray(false);
16502    arg_r->set_type(GLMessage::DataType::FLOAT);
16503    arg_r->add_floatvalue(r);
16504
16505    // copy argument q
16506    GLMessage_DataType *arg_q = glmsg.add_args();
16507    arg_q->set_isarray(false);
16508    arg_q->set_type(GLMessage::DataType::FLOAT);
16509    arg_q->add_floatvalue(q);
16510
16511    // call function
16512    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16513    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16514    glContext->hooks->gl.glMultiTexCoord4f(target, s, t, r, q);
16515    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16516    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16517
16518    void *pointerArgs[] = {
16519    };
16520
16521    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16522                              threadStartTime, threadEndTime,
16523                              &glmsg, pointerArgs);
16524    glContext->traceGLMessage(&glmsg);
16525}
16526
16527void GLTrace_glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz) {
16528    GLMessage glmsg;
16529    GLTraceContext *glContext = getGLTraceContext();
16530
16531    glmsg.set_function(GLMessage::glNormal3f);
16532
16533    // copy argument nx
16534    GLMessage_DataType *arg_nx = glmsg.add_args();
16535    arg_nx->set_isarray(false);
16536    arg_nx->set_type(GLMessage::DataType::FLOAT);
16537    arg_nx->add_floatvalue(nx);
16538
16539    // copy argument ny
16540    GLMessage_DataType *arg_ny = glmsg.add_args();
16541    arg_ny->set_isarray(false);
16542    arg_ny->set_type(GLMessage::DataType::FLOAT);
16543    arg_ny->add_floatvalue(ny);
16544
16545    // copy argument nz
16546    GLMessage_DataType *arg_nz = glmsg.add_args();
16547    arg_nz->set_isarray(false);
16548    arg_nz->set_type(GLMessage::DataType::FLOAT);
16549    arg_nz->add_floatvalue(nz);
16550
16551    // call function
16552    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16553    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16554    glContext->hooks->gl.glNormal3f(nx, ny, nz);
16555    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16556    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16557
16558    void *pointerArgs[] = {
16559    };
16560
16561    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16562                              threadStartTime, threadEndTime,
16563                              &glmsg, pointerArgs);
16564    glContext->traceGLMessage(&glmsg);
16565}
16566
16567void GLTrace_glOrthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) {
16568    GLMessage glmsg;
16569    GLTraceContext *glContext = getGLTraceContext();
16570
16571    glmsg.set_function(GLMessage::glOrthof);
16572
16573    // copy argument left
16574    GLMessage_DataType *arg_left = glmsg.add_args();
16575    arg_left->set_isarray(false);
16576    arg_left->set_type(GLMessage::DataType::FLOAT);
16577    arg_left->add_floatvalue(left);
16578
16579    // copy argument right
16580    GLMessage_DataType *arg_right = glmsg.add_args();
16581    arg_right->set_isarray(false);
16582    arg_right->set_type(GLMessage::DataType::FLOAT);
16583    arg_right->add_floatvalue(right);
16584
16585    // copy argument bottom
16586    GLMessage_DataType *arg_bottom = glmsg.add_args();
16587    arg_bottom->set_isarray(false);
16588    arg_bottom->set_type(GLMessage::DataType::FLOAT);
16589    arg_bottom->add_floatvalue(bottom);
16590
16591    // copy argument top
16592    GLMessage_DataType *arg_top = glmsg.add_args();
16593    arg_top->set_isarray(false);
16594    arg_top->set_type(GLMessage::DataType::FLOAT);
16595    arg_top->add_floatvalue(top);
16596
16597    // copy argument zNear
16598    GLMessage_DataType *arg_zNear = glmsg.add_args();
16599    arg_zNear->set_isarray(false);
16600    arg_zNear->set_type(GLMessage::DataType::FLOAT);
16601    arg_zNear->add_floatvalue(zNear);
16602
16603    // copy argument zFar
16604    GLMessage_DataType *arg_zFar = glmsg.add_args();
16605    arg_zFar->set_isarray(false);
16606    arg_zFar->set_type(GLMessage::DataType::FLOAT);
16607    arg_zFar->add_floatvalue(zFar);
16608
16609    // call function
16610    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16611    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16612    glContext->hooks->gl.glOrthof(left, right, bottom, top, zNear, zFar);
16613    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16614    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16615
16616    void *pointerArgs[] = {
16617    };
16618
16619    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16620                              threadStartTime, threadEndTime,
16621                              &glmsg, pointerArgs);
16622    glContext->traceGLMessage(&glmsg);
16623}
16624
16625void GLTrace_glPointParameterf(GLenum pname, GLfloat param) {
16626    GLMessage glmsg;
16627    GLTraceContext *glContext = getGLTraceContext();
16628
16629    glmsg.set_function(GLMessage::glPointParameterf);
16630
16631    // copy argument pname
16632    GLMessage_DataType *arg_pname = glmsg.add_args();
16633    arg_pname->set_isarray(false);
16634    arg_pname->set_type(GLMessage::DataType::ENUM);
16635    arg_pname->add_intvalue((int)pname);
16636
16637    // copy argument param
16638    GLMessage_DataType *arg_param = glmsg.add_args();
16639    arg_param->set_isarray(false);
16640    arg_param->set_type(GLMessage::DataType::FLOAT);
16641    arg_param->add_floatvalue(param);
16642
16643    // call function
16644    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16645    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16646    glContext->hooks->gl.glPointParameterf(pname, param);
16647    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16648    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16649
16650    void *pointerArgs[] = {
16651    };
16652
16653    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16654                              threadStartTime, threadEndTime,
16655                              &glmsg, pointerArgs);
16656    glContext->traceGLMessage(&glmsg);
16657}
16658
16659void GLTrace_glPointParameterfv(GLenum pname, const GLfloat *params) {
16660    GLMessage glmsg;
16661    GLTraceContext *glContext = getGLTraceContext();
16662
16663    glmsg.set_function(GLMessage::glPointParameterfv);
16664
16665    // copy argument pname
16666    GLMessage_DataType *arg_pname = glmsg.add_args();
16667    arg_pname->set_isarray(false);
16668    arg_pname->set_type(GLMessage::DataType::ENUM);
16669    arg_pname->add_intvalue((int)pname);
16670
16671    // copy argument params
16672    GLMessage_DataType *arg_params = glmsg.add_args();
16673    arg_params->set_isarray(false);
16674    arg_params->set_type(GLMessage::DataType::INT64);
16675    arg_params->add_int64value((uintptr_t)params);
16676
16677    // call function
16678    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16679    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16680    glContext->hooks->gl.glPointParameterfv(pname, params);
16681    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16682    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16683
16684    void *pointerArgs[] = {
16685        (void *) params,
16686    };
16687
16688    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16689                              threadStartTime, threadEndTime,
16690                              &glmsg, pointerArgs);
16691    glContext->traceGLMessage(&glmsg);
16692}
16693
16694void GLTrace_glPointSize(GLfloat size) {
16695    GLMessage glmsg;
16696    GLTraceContext *glContext = getGLTraceContext();
16697
16698    glmsg.set_function(GLMessage::glPointSize);
16699
16700    // copy argument size
16701    GLMessage_DataType *arg_size = glmsg.add_args();
16702    arg_size->set_isarray(false);
16703    arg_size->set_type(GLMessage::DataType::FLOAT);
16704    arg_size->add_floatvalue(size);
16705
16706    // call function
16707    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16708    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16709    glContext->hooks->gl.glPointSize(size);
16710    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16711    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16712
16713    void *pointerArgs[] = {
16714    };
16715
16716    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16717                              threadStartTime, threadEndTime,
16718                              &glmsg, pointerArgs);
16719    glContext->traceGLMessage(&glmsg);
16720}
16721
16722void GLTrace_glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) {
16723    GLMessage glmsg;
16724    GLTraceContext *glContext = getGLTraceContext();
16725
16726    glmsg.set_function(GLMessage::glRotatef);
16727
16728    // copy argument angle
16729    GLMessage_DataType *arg_angle = glmsg.add_args();
16730    arg_angle->set_isarray(false);
16731    arg_angle->set_type(GLMessage::DataType::FLOAT);
16732    arg_angle->add_floatvalue(angle);
16733
16734    // copy argument x
16735    GLMessage_DataType *arg_x = glmsg.add_args();
16736    arg_x->set_isarray(false);
16737    arg_x->set_type(GLMessage::DataType::FLOAT);
16738    arg_x->add_floatvalue(x);
16739
16740    // copy argument y
16741    GLMessage_DataType *arg_y = glmsg.add_args();
16742    arg_y->set_isarray(false);
16743    arg_y->set_type(GLMessage::DataType::FLOAT);
16744    arg_y->add_floatvalue(y);
16745
16746    // copy argument z
16747    GLMessage_DataType *arg_z = glmsg.add_args();
16748    arg_z->set_isarray(false);
16749    arg_z->set_type(GLMessage::DataType::FLOAT);
16750    arg_z->add_floatvalue(z);
16751
16752    // call function
16753    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16754    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16755    glContext->hooks->gl.glRotatef(angle, x, y, z);
16756    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16757    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16758
16759    void *pointerArgs[] = {
16760    };
16761
16762    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16763                              threadStartTime, threadEndTime,
16764                              &glmsg, pointerArgs);
16765    glContext->traceGLMessage(&glmsg);
16766}
16767
16768void GLTrace_glScalef(GLfloat x, GLfloat y, GLfloat z) {
16769    GLMessage glmsg;
16770    GLTraceContext *glContext = getGLTraceContext();
16771
16772    glmsg.set_function(GLMessage::glScalef);
16773
16774    // copy argument x
16775    GLMessage_DataType *arg_x = glmsg.add_args();
16776    arg_x->set_isarray(false);
16777    arg_x->set_type(GLMessage::DataType::FLOAT);
16778    arg_x->add_floatvalue(x);
16779
16780    // copy argument y
16781    GLMessage_DataType *arg_y = glmsg.add_args();
16782    arg_y->set_isarray(false);
16783    arg_y->set_type(GLMessage::DataType::FLOAT);
16784    arg_y->add_floatvalue(y);
16785
16786    // copy argument z
16787    GLMessage_DataType *arg_z = glmsg.add_args();
16788    arg_z->set_isarray(false);
16789    arg_z->set_type(GLMessage::DataType::FLOAT);
16790    arg_z->add_floatvalue(z);
16791
16792    // call function
16793    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16794    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16795    glContext->hooks->gl.glScalef(x, y, z);
16796    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16797    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16798
16799    void *pointerArgs[] = {
16800    };
16801
16802    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16803                              threadStartTime, threadEndTime,
16804                              &glmsg, pointerArgs);
16805    glContext->traceGLMessage(&glmsg);
16806}
16807
16808void GLTrace_glTexEnvf(GLenum target, GLenum pname, GLfloat param) {
16809    GLMessage glmsg;
16810    GLTraceContext *glContext = getGLTraceContext();
16811
16812    glmsg.set_function(GLMessage::glTexEnvf);
16813
16814    // copy argument target
16815    GLMessage_DataType *arg_target = glmsg.add_args();
16816    arg_target->set_isarray(false);
16817    arg_target->set_type(GLMessage::DataType::ENUM);
16818    arg_target->add_intvalue((int)target);
16819
16820    // copy argument pname
16821    GLMessage_DataType *arg_pname = glmsg.add_args();
16822    arg_pname->set_isarray(false);
16823    arg_pname->set_type(GLMessage::DataType::ENUM);
16824    arg_pname->add_intvalue((int)pname);
16825
16826    // copy argument param
16827    GLMessage_DataType *arg_param = glmsg.add_args();
16828    arg_param->set_isarray(false);
16829    arg_param->set_type(GLMessage::DataType::FLOAT);
16830    arg_param->add_floatvalue(param);
16831
16832    // call function
16833    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16834    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16835    glContext->hooks->gl.glTexEnvf(target, pname, param);
16836    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16837    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16838
16839    void *pointerArgs[] = {
16840    };
16841
16842    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16843                              threadStartTime, threadEndTime,
16844                              &glmsg, pointerArgs);
16845    glContext->traceGLMessage(&glmsg);
16846}
16847
16848void GLTrace_glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params) {
16849    GLMessage glmsg;
16850    GLTraceContext *glContext = getGLTraceContext();
16851
16852    glmsg.set_function(GLMessage::glTexEnvfv);
16853
16854    // copy argument target
16855    GLMessage_DataType *arg_target = glmsg.add_args();
16856    arg_target->set_isarray(false);
16857    arg_target->set_type(GLMessage::DataType::ENUM);
16858    arg_target->add_intvalue((int)target);
16859
16860    // copy argument pname
16861    GLMessage_DataType *arg_pname = glmsg.add_args();
16862    arg_pname->set_isarray(false);
16863    arg_pname->set_type(GLMessage::DataType::ENUM);
16864    arg_pname->add_intvalue((int)pname);
16865
16866    // copy argument params
16867    GLMessage_DataType *arg_params = glmsg.add_args();
16868    arg_params->set_isarray(false);
16869    arg_params->set_type(GLMessage::DataType::INT64);
16870    arg_params->add_int64value((uintptr_t)params);
16871
16872    // call function
16873    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16874    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16875    glContext->hooks->gl.glTexEnvfv(target, pname, params);
16876    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16877    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16878
16879    void *pointerArgs[] = {
16880        (void *) params,
16881    };
16882
16883    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16884                              threadStartTime, threadEndTime,
16885                              &glmsg, pointerArgs);
16886    glContext->traceGLMessage(&glmsg);
16887}
16888
16889void GLTrace_glTranslatef(GLfloat x, GLfloat y, GLfloat z) {
16890    GLMessage glmsg;
16891    GLTraceContext *glContext = getGLTraceContext();
16892
16893    glmsg.set_function(GLMessage::glTranslatef);
16894
16895    // copy argument x
16896    GLMessage_DataType *arg_x = glmsg.add_args();
16897    arg_x->set_isarray(false);
16898    arg_x->set_type(GLMessage::DataType::FLOAT);
16899    arg_x->add_floatvalue(x);
16900
16901    // copy argument y
16902    GLMessage_DataType *arg_y = glmsg.add_args();
16903    arg_y->set_isarray(false);
16904    arg_y->set_type(GLMessage::DataType::FLOAT);
16905    arg_y->add_floatvalue(y);
16906
16907    // copy argument z
16908    GLMessage_DataType *arg_z = glmsg.add_args();
16909    arg_z->set_isarray(false);
16910    arg_z->set_type(GLMessage::DataType::FLOAT);
16911    arg_z->add_floatvalue(z);
16912
16913    // call function
16914    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16915    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16916    glContext->hooks->gl.glTranslatef(x, y, z);
16917    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16918    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16919
16920    void *pointerArgs[] = {
16921    };
16922
16923    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16924                              threadStartTime, threadEndTime,
16925                              &glmsg, pointerArgs);
16926    glContext->traceGLMessage(&glmsg);
16927}
16928
16929void GLTrace_glAlphaFuncx(GLenum func, GLclampx ref) {
16930    GLMessage glmsg;
16931    GLTraceContext *glContext = getGLTraceContext();
16932
16933    glmsg.set_function(GLMessage::glAlphaFuncx);
16934
16935    // copy argument func
16936    GLMessage_DataType *arg_func = glmsg.add_args();
16937    arg_func->set_isarray(false);
16938    arg_func->set_type(GLMessage::DataType::ENUM);
16939    arg_func->add_intvalue((int)func);
16940
16941    // copy argument ref
16942    GLMessage_DataType *arg_ref = glmsg.add_args();
16943    arg_ref->set_isarray(false);
16944    arg_ref->set_type(GLMessage::DataType::INT);
16945    arg_ref->add_intvalue(ref);
16946
16947    // call function
16948    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16949    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16950    glContext->hooks->gl.glAlphaFuncx(func, ref);
16951    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16952    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16953
16954    void *pointerArgs[] = {
16955    };
16956
16957    fixupGLMessage(glContext, wallStartTime, wallEndTime,
16958                              threadStartTime, threadEndTime,
16959                              &glmsg, pointerArgs);
16960    glContext->traceGLMessage(&glmsg);
16961}
16962
16963void GLTrace_glClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha) {
16964    GLMessage glmsg;
16965    GLTraceContext *glContext = getGLTraceContext();
16966
16967    glmsg.set_function(GLMessage::glClearColorx);
16968
16969    // copy argument red
16970    GLMessage_DataType *arg_red = glmsg.add_args();
16971    arg_red->set_isarray(false);
16972    arg_red->set_type(GLMessage::DataType::INT);
16973    arg_red->add_intvalue(red);
16974
16975    // copy argument green
16976    GLMessage_DataType *arg_green = glmsg.add_args();
16977    arg_green->set_isarray(false);
16978    arg_green->set_type(GLMessage::DataType::INT);
16979    arg_green->add_intvalue(green);
16980
16981    // copy argument blue
16982    GLMessage_DataType *arg_blue = glmsg.add_args();
16983    arg_blue->set_isarray(false);
16984    arg_blue->set_type(GLMessage::DataType::INT);
16985    arg_blue->add_intvalue(blue);
16986
16987    // copy argument alpha
16988    GLMessage_DataType *arg_alpha = glmsg.add_args();
16989    arg_alpha->set_isarray(false);
16990    arg_alpha->set_type(GLMessage::DataType::INT);
16991    arg_alpha->add_intvalue(alpha);
16992
16993    // call function
16994    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
16995    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
16996    glContext->hooks->gl.glClearColorx(red, green, blue, alpha);
16997    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
16998    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
16999
17000    void *pointerArgs[] = {
17001    };
17002
17003    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17004                              threadStartTime, threadEndTime,
17005                              &glmsg, pointerArgs);
17006    glContext->traceGLMessage(&glmsg);
17007}
17008
17009void GLTrace_glClearDepthx(GLclampx depth) {
17010    GLMessage glmsg;
17011    GLTraceContext *glContext = getGLTraceContext();
17012
17013    glmsg.set_function(GLMessage::glClearDepthx);
17014
17015    // copy argument depth
17016    GLMessage_DataType *arg_depth = glmsg.add_args();
17017    arg_depth->set_isarray(false);
17018    arg_depth->set_type(GLMessage::DataType::INT);
17019    arg_depth->add_intvalue(depth);
17020
17021    // call function
17022    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17023    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17024    glContext->hooks->gl.glClearDepthx(depth);
17025    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17026    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17027
17028    void *pointerArgs[] = {
17029    };
17030
17031    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17032                              threadStartTime, threadEndTime,
17033                              &glmsg, pointerArgs);
17034    glContext->traceGLMessage(&glmsg);
17035}
17036
17037void GLTrace_glClientActiveTexture(GLenum texture) {
17038    GLMessage glmsg;
17039    GLTraceContext *glContext = getGLTraceContext();
17040
17041    glmsg.set_function(GLMessage::glClientActiveTexture);
17042
17043    // copy argument texture
17044    GLMessage_DataType *arg_texture = glmsg.add_args();
17045    arg_texture->set_isarray(false);
17046    arg_texture->set_type(GLMessage::DataType::ENUM);
17047    arg_texture->add_intvalue((int)texture);
17048
17049    // call function
17050    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17051    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17052    glContext->hooks->gl.glClientActiveTexture(texture);
17053    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17054    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17055
17056    void *pointerArgs[] = {
17057    };
17058
17059    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17060                              threadStartTime, threadEndTime,
17061                              &glmsg, pointerArgs);
17062    glContext->traceGLMessage(&glmsg);
17063}
17064
17065void GLTrace_glClipPlanex(GLenum plane, const GLfixed *equation) {
17066    GLMessage glmsg;
17067    GLTraceContext *glContext = getGLTraceContext();
17068
17069    glmsg.set_function(GLMessage::glClipPlanex);
17070
17071    // copy argument plane
17072    GLMessage_DataType *arg_plane = glmsg.add_args();
17073    arg_plane->set_isarray(false);
17074    arg_plane->set_type(GLMessage::DataType::ENUM);
17075    arg_plane->add_intvalue((int)plane);
17076
17077    // copy argument equation
17078    GLMessage_DataType *arg_equation = glmsg.add_args();
17079    arg_equation->set_isarray(false);
17080    arg_equation->set_type(GLMessage::DataType::INT64);
17081    arg_equation->add_int64value((uintptr_t)equation);
17082
17083    // call function
17084    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17085    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17086    glContext->hooks->gl.glClipPlanex(plane, equation);
17087    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17088    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17089
17090    void *pointerArgs[] = {
17091        (void *) equation,
17092    };
17093
17094    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17095                              threadStartTime, threadEndTime,
17096                              &glmsg, pointerArgs);
17097    glContext->traceGLMessage(&glmsg);
17098}
17099
17100void GLTrace_glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) {
17101    GLMessage glmsg;
17102    GLTraceContext *glContext = getGLTraceContext();
17103
17104    glmsg.set_function(GLMessage::glColor4ub);
17105
17106    // copy argument red
17107    GLMessage_DataType *arg_red = glmsg.add_args();
17108    arg_red->set_isarray(false);
17109    arg_red->set_type(GLMessage::DataType::BYTE);
17110    arg_red->add_intvalue((int)red);
17111
17112    // copy argument green
17113    GLMessage_DataType *arg_green = glmsg.add_args();
17114    arg_green->set_isarray(false);
17115    arg_green->set_type(GLMessage::DataType::BYTE);
17116    arg_green->add_intvalue((int)green);
17117
17118    // copy argument blue
17119    GLMessage_DataType *arg_blue = glmsg.add_args();
17120    arg_blue->set_isarray(false);
17121    arg_blue->set_type(GLMessage::DataType::BYTE);
17122    arg_blue->add_intvalue((int)blue);
17123
17124    // copy argument alpha
17125    GLMessage_DataType *arg_alpha = glmsg.add_args();
17126    arg_alpha->set_isarray(false);
17127    arg_alpha->set_type(GLMessage::DataType::BYTE);
17128    arg_alpha->add_intvalue((int)alpha);
17129
17130    // call function
17131    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17132    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17133    glContext->hooks->gl.glColor4ub(red, green, blue, alpha);
17134    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17135    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17136
17137    void *pointerArgs[] = {
17138    };
17139
17140    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17141                              threadStartTime, threadEndTime,
17142                              &glmsg, pointerArgs);
17143    glContext->traceGLMessage(&glmsg);
17144}
17145
17146void GLTrace_glColor4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) {
17147    GLMessage glmsg;
17148    GLTraceContext *glContext = getGLTraceContext();
17149
17150    glmsg.set_function(GLMessage::glColor4x);
17151
17152    // copy argument red
17153    GLMessage_DataType *arg_red = glmsg.add_args();
17154    arg_red->set_isarray(false);
17155    arg_red->set_type(GLMessage::DataType::INT);
17156    arg_red->add_intvalue(red);
17157
17158    // copy argument green
17159    GLMessage_DataType *arg_green = glmsg.add_args();
17160    arg_green->set_isarray(false);
17161    arg_green->set_type(GLMessage::DataType::INT);
17162    arg_green->add_intvalue(green);
17163
17164    // copy argument blue
17165    GLMessage_DataType *arg_blue = glmsg.add_args();
17166    arg_blue->set_isarray(false);
17167    arg_blue->set_type(GLMessage::DataType::INT);
17168    arg_blue->add_intvalue(blue);
17169
17170    // copy argument alpha
17171    GLMessage_DataType *arg_alpha = glmsg.add_args();
17172    arg_alpha->set_isarray(false);
17173    arg_alpha->set_type(GLMessage::DataType::INT);
17174    arg_alpha->add_intvalue(alpha);
17175
17176    // call function
17177    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17178    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17179    glContext->hooks->gl.glColor4x(red, green, blue, alpha);
17180    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17181    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17182
17183    void *pointerArgs[] = {
17184    };
17185
17186    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17187                              threadStartTime, threadEndTime,
17188                              &glmsg, pointerArgs);
17189    glContext->traceGLMessage(&glmsg);
17190}
17191
17192void GLTrace_glColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) {
17193    GLMessage glmsg;
17194    GLTraceContext *glContext = getGLTraceContext();
17195
17196    glmsg.set_function(GLMessage::glColorPointer);
17197
17198    // copy argument size
17199    GLMessage_DataType *arg_size = glmsg.add_args();
17200    arg_size->set_isarray(false);
17201    arg_size->set_type(GLMessage::DataType::INT);
17202    arg_size->add_intvalue(size);
17203
17204    // copy argument type
17205    GLMessage_DataType *arg_type = glmsg.add_args();
17206    arg_type->set_isarray(false);
17207    arg_type->set_type(GLMessage::DataType::ENUM);
17208    arg_type->add_intvalue((int)type);
17209
17210    // copy argument stride
17211    GLMessage_DataType *arg_stride = glmsg.add_args();
17212    arg_stride->set_isarray(false);
17213    arg_stride->set_type(GLMessage::DataType::INT);
17214    arg_stride->add_intvalue(stride);
17215
17216    // copy argument pointer
17217    GLMessage_DataType *arg_pointer = glmsg.add_args();
17218    arg_pointer->set_isarray(false);
17219    arg_pointer->set_type(GLMessage::DataType::INT64);
17220    arg_pointer->add_int64value((uintptr_t)pointer);
17221
17222    // call function
17223    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17224    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17225    glContext->hooks->gl.glColorPointer(size, type, stride, pointer);
17226    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17227    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17228
17229    void *pointerArgs[] = {
17230        (void *) pointer,
17231    };
17232
17233    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17234                              threadStartTime, threadEndTime,
17235                              &glmsg, pointerArgs);
17236    glContext->traceGLMessage(&glmsg);
17237}
17238
17239void GLTrace_glDepthRangex(GLclampx zNear, GLclampx zFar) {
17240    GLMessage glmsg;
17241    GLTraceContext *glContext = getGLTraceContext();
17242
17243    glmsg.set_function(GLMessage::glDepthRangex);
17244
17245    // copy argument zNear
17246    GLMessage_DataType *arg_zNear = glmsg.add_args();
17247    arg_zNear->set_isarray(false);
17248    arg_zNear->set_type(GLMessage::DataType::INT);
17249    arg_zNear->add_intvalue(zNear);
17250
17251    // copy argument zFar
17252    GLMessage_DataType *arg_zFar = glmsg.add_args();
17253    arg_zFar->set_isarray(false);
17254    arg_zFar->set_type(GLMessage::DataType::INT);
17255    arg_zFar->add_intvalue(zFar);
17256
17257    // call function
17258    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17259    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17260    glContext->hooks->gl.glDepthRangex(zNear, zFar);
17261    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17262    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17263
17264    void *pointerArgs[] = {
17265    };
17266
17267    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17268                              threadStartTime, threadEndTime,
17269                              &glmsg, pointerArgs);
17270    glContext->traceGLMessage(&glmsg);
17271}
17272
17273void GLTrace_glDisableClientState(GLenum array) {
17274    GLMessage glmsg;
17275    GLTraceContext *glContext = getGLTraceContext();
17276
17277    glmsg.set_function(GLMessage::glDisableClientState);
17278
17279    // copy argument array
17280    GLMessage_DataType *arg_array = glmsg.add_args();
17281    arg_array->set_isarray(false);
17282    arg_array->set_type(GLMessage::DataType::ENUM);
17283    arg_array->add_intvalue((int)array);
17284
17285    // call function
17286    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17287    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17288    glContext->hooks->gl.glDisableClientState(array);
17289    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17290    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17291
17292    void *pointerArgs[] = {
17293    };
17294
17295    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17296                              threadStartTime, threadEndTime,
17297                              &glmsg, pointerArgs);
17298    glContext->traceGLMessage(&glmsg);
17299}
17300
17301void GLTrace_glEnableClientState(GLenum array) {
17302    GLMessage glmsg;
17303    GLTraceContext *glContext = getGLTraceContext();
17304
17305    glmsg.set_function(GLMessage::glEnableClientState);
17306
17307    // copy argument array
17308    GLMessage_DataType *arg_array = glmsg.add_args();
17309    arg_array->set_isarray(false);
17310    arg_array->set_type(GLMessage::DataType::ENUM);
17311    arg_array->add_intvalue((int)array);
17312
17313    // call function
17314    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17315    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17316    glContext->hooks->gl.glEnableClientState(array);
17317    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17318    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17319
17320    void *pointerArgs[] = {
17321    };
17322
17323    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17324                              threadStartTime, threadEndTime,
17325                              &glmsg, pointerArgs);
17326    glContext->traceGLMessage(&glmsg);
17327}
17328
17329void GLTrace_glFogx(GLenum pname, GLfixed param) {
17330    GLMessage glmsg;
17331    GLTraceContext *glContext = getGLTraceContext();
17332
17333    glmsg.set_function(GLMessage::glFogx);
17334
17335    // copy argument pname
17336    GLMessage_DataType *arg_pname = glmsg.add_args();
17337    arg_pname->set_isarray(false);
17338    arg_pname->set_type(GLMessage::DataType::ENUM);
17339    arg_pname->add_intvalue((int)pname);
17340
17341    // copy argument param
17342    GLMessage_DataType *arg_param = glmsg.add_args();
17343    arg_param->set_isarray(false);
17344    arg_param->set_type(GLMessage::DataType::INT);
17345    arg_param->add_intvalue(param);
17346
17347    // call function
17348    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17349    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17350    glContext->hooks->gl.glFogx(pname, param);
17351    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17352    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17353
17354    void *pointerArgs[] = {
17355    };
17356
17357    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17358                              threadStartTime, threadEndTime,
17359                              &glmsg, pointerArgs);
17360    glContext->traceGLMessage(&glmsg);
17361}
17362
17363void GLTrace_glFogxv(GLenum pname, const GLfixed *params) {
17364    GLMessage glmsg;
17365    GLTraceContext *glContext = getGLTraceContext();
17366
17367    glmsg.set_function(GLMessage::glFogxv);
17368
17369    // copy argument pname
17370    GLMessage_DataType *arg_pname = glmsg.add_args();
17371    arg_pname->set_isarray(false);
17372    arg_pname->set_type(GLMessage::DataType::ENUM);
17373    arg_pname->add_intvalue((int)pname);
17374
17375    // copy argument params
17376    GLMessage_DataType *arg_params = glmsg.add_args();
17377    arg_params->set_isarray(false);
17378    arg_params->set_type(GLMessage::DataType::INT64);
17379    arg_params->add_int64value((uintptr_t)params);
17380
17381    // call function
17382    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17383    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17384    glContext->hooks->gl.glFogxv(pname, params);
17385    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17386    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17387
17388    void *pointerArgs[] = {
17389        (void *) params,
17390    };
17391
17392    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17393                              threadStartTime, threadEndTime,
17394                              &glmsg, pointerArgs);
17395    glContext->traceGLMessage(&glmsg);
17396}
17397
17398void GLTrace_glFrustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar) {
17399    GLMessage glmsg;
17400    GLTraceContext *glContext = getGLTraceContext();
17401
17402    glmsg.set_function(GLMessage::glFrustumx);
17403
17404    // copy argument left
17405    GLMessage_DataType *arg_left = glmsg.add_args();
17406    arg_left->set_isarray(false);
17407    arg_left->set_type(GLMessage::DataType::INT);
17408    arg_left->add_intvalue(left);
17409
17410    // copy argument right
17411    GLMessage_DataType *arg_right = glmsg.add_args();
17412    arg_right->set_isarray(false);
17413    arg_right->set_type(GLMessage::DataType::INT);
17414    arg_right->add_intvalue(right);
17415
17416    // copy argument bottom
17417    GLMessage_DataType *arg_bottom = glmsg.add_args();
17418    arg_bottom->set_isarray(false);
17419    arg_bottom->set_type(GLMessage::DataType::INT);
17420    arg_bottom->add_intvalue(bottom);
17421
17422    // copy argument top
17423    GLMessage_DataType *arg_top = glmsg.add_args();
17424    arg_top->set_isarray(false);
17425    arg_top->set_type(GLMessage::DataType::INT);
17426    arg_top->add_intvalue(top);
17427
17428    // copy argument zNear
17429    GLMessage_DataType *arg_zNear = glmsg.add_args();
17430    arg_zNear->set_isarray(false);
17431    arg_zNear->set_type(GLMessage::DataType::INT);
17432    arg_zNear->add_intvalue(zNear);
17433
17434    // copy argument zFar
17435    GLMessage_DataType *arg_zFar = glmsg.add_args();
17436    arg_zFar->set_isarray(false);
17437    arg_zFar->set_type(GLMessage::DataType::INT);
17438    arg_zFar->add_intvalue(zFar);
17439
17440    // call function
17441    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17442    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17443    glContext->hooks->gl.glFrustumx(left, right, bottom, top, zNear, zFar);
17444    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17445    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17446
17447    void *pointerArgs[] = {
17448    };
17449
17450    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17451                              threadStartTime, threadEndTime,
17452                              &glmsg, pointerArgs);
17453    glContext->traceGLMessage(&glmsg);
17454}
17455
17456void GLTrace_glGetClipPlanex(GLenum pname, GLfixed eqn[4]) {
17457    GLMessage glmsg;
17458    GLTraceContext *glContext = getGLTraceContext();
17459
17460    glmsg.set_function(GLMessage::glGetClipPlanex);
17461
17462    // copy argument pname
17463    GLMessage_DataType *arg_pname = glmsg.add_args();
17464    arg_pname->set_isarray(false);
17465    arg_pname->set_type(GLMessage::DataType::ENUM);
17466    arg_pname->add_intvalue((int)pname);
17467
17468    // copy argument eqn
17469    GLMessage_DataType *arg_eqn = glmsg.add_args();
17470    arg_eqn->set_isarray(false);
17471    arg_eqn->set_type(GLMessage::DataType::INT64);
17472    arg_eqn->add_int64value((uintptr_t)eqn);
17473
17474    // call function
17475    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17476    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17477    glContext->hooks->gl.glGetClipPlanex(pname, eqn);
17478    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17479    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17480
17481    void *pointerArgs[] = {
17482        (void *) eqn,
17483    };
17484
17485    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17486                              threadStartTime, threadEndTime,
17487                              &glmsg, pointerArgs);
17488    glContext->traceGLMessage(&glmsg);
17489}
17490
17491void GLTrace_glGetFixedv(GLenum pname, GLfixed *params) {
17492    GLMessage glmsg;
17493    GLTraceContext *glContext = getGLTraceContext();
17494
17495    glmsg.set_function(GLMessage::glGetFixedv);
17496
17497    // copy argument pname
17498    GLMessage_DataType *arg_pname = glmsg.add_args();
17499    arg_pname->set_isarray(false);
17500    arg_pname->set_type(GLMessage::DataType::ENUM);
17501    arg_pname->add_intvalue((int)pname);
17502
17503    // copy argument params
17504    GLMessage_DataType *arg_params = glmsg.add_args();
17505    arg_params->set_isarray(false);
17506    arg_params->set_type(GLMessage::DataType::INT64);
17507    arg_params->add_int64value((uintptr_t)params);
17508
17509    // call function
17510    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17511    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17512    glContext->hooks->gl.glGetFixedv(pname, params);
17513    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17514    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17515
17516    void *pointerArgs[] = {
17517        (void *) params,
17518    };
17519
17520    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17521                              threadStartTime, threadEndTime,
17522                              &glmsg, pointerArgs);
17523    glContext->traceGLMessage(&glmsg);
17524}
17525
17526void GLTrace_glGetLightxv(GLenum light, GLenum pname, GLfixed *params) {
17527    GLMessage glmsg;
17528    GLTraceContext *glContext = getGLTraceContext();
17529
17530    glmsg.set_function(GLMessage::glGetLightxv);
17531
17532    // copy argument light
17533    GLMessage_DataType *arg_light = glmsg.add_args();
17534    arg_light->set_isarray(false);
17535    arg_light->set_type(GLMessage::DataType::ENUM);
17536    arg_light->add_intvalue((int)light);
17537
17538    // copy argument pname
17539    GLMessage_DataType *arg_pname = glmsg.add_args();
17540    arg_pname->set_isarray(false);
17541    arg_pname->set_type(GLMessage::DataType::ENUM);
17542    arg_pname->add_intvalue((int)pname);
17543
17544    // copy argument params
17545    GLMessage_DataType *arg_params = glmsg.add_args();
17546    arg_params->set_isarray(false);
17547    arg_params->set_type(GLMessage::DataType::INT64);
17548    arg_params->add_int64value((uintptr_t)params);
17549
17550    // call function
17551    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17552    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17553    glContext->hooks->gl.glGetLightxv(light, pname, params);
17554    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17555    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17556
17557    void *pointerArgs[] = {
17558        (void *) params,
17559    };
17560
17561    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17562                              threadStartTime, threadEndTime,
17563                              &glmsg, pointerArgs);
17564    glContext->traceGLMessage(&glmsg);
17565}
17566
17567void GLTrace_glGetMaterialxv(GLenum face, GLenum pname, GLfixed *params) {
17568    GLMessage glmsg;
17569    GLTraceContext *glContext = getGLTraceContext();
17570
17571    glmsg.set_function(GLMessage::glGetMaterialxv);
17572
17573    // copy argument face
17574    GLMessage_DataType *arg_face = glmsg.add_args();
17575    arg_face->set_isarray(false);
17576    arg_face->set_type(GLMessage::DataType::ENUM);
17577    arg_face->add_intvalue((int)face);
17578
17579    // copy argument pname
17580    GLMessage_DataType *arg_pname = glmsg.add_args();
17581    arg_pname->set_isarray(false);
17582    arg_pname->set_type(GLMessage::DataType::ENUM);
17583    arg_pname->add_intvalue((int)pname);
17584
17585    // copy argument params
17586    GLMessage_DataType *arg_params = glmsg.add_args();
17587    arg_params->set_isarray(false);
17588    arg_params->set_type(GLMessage::DataType::INT64);
17589    arg_params->add_int64value((uintptr_t)params);
17590
17591    // call function
17592    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17593    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17594    glContext->hooks->gl.glGetMaterialxv(face, pname, params);
17595    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17596    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17597
17598    void *pointerArgs[] = {
17599        (void *) params,
17600    };
17601
17602    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17603                              threadStartTime, threadEndTime,
17604                              &glmsg, pointerArgs);
17605    glContext->traceGLMessage(&glmsg);
17606}
17607
17608void GLTrace_glGetPointerv(GLenum pname, GLvoid **params) {
17609    GLMessage glmsg;
17610    GLTraceContext *glContext = getGLTraceContext();
17611
17612    glmsg.set_function(GLMessage::glGetPointerv);
17613
17614    // copy argument pname
17615    GLMessage_DataType *arg_pname = glmsg.add_args();
17616    arg_pname->set_isarray(false);
17617    arg_pname->set_type(GLMessage::DataType::ENUM);
17618    arg_pname->add_intvalue((int)pname);
17619
17620    // copy argument params
17621    GLMessage_DataType *arg_params = glmsg.add_args();
17622    arg_params->set_isarray(false);
17623    arg_params->set_type(GLMessage::DataType::INT64);
17624    arg_params->add_int64value((uintptr_t)params);
17625
17626    // call function
17627    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17628    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17629    glContext->hooks->gl.glGetPointerv(pname, params);
17630    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17631    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17632
17633    void *pointerArgs[] = {
17634        (void *) params,
17635    };
17636
17637    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17638                              threadStartTime, threadEndTime,
17639                              &glmsg, pointerArgs);
17640    glContext->traceGLMessage(&glmsg);
17641}
17642
17643void GLTrace_glGetTexEnviv(GLenum env, GLenum pname, GLint *params) {
17644    GLMessage glmsg;
17645    GLTraceContext *glContext = getGLTraceContext();
17646
17647    glmsg.set_function(GLMessage::glGetTexEnviv);
17648
17649    // copy argument env
17650    GLMessage_DataType *arg_env = glmsg.add_args();
17651    arg_env->set_isarray(false);
17652    arg_env->set_type(GLMessage::DataType::ENUM);
17653    arg_env->add_intvalue((int)env);
17654
17655    // copy argument pname
17656    GLMessage_DataType *arg_pname = glmsg.add_args();
17657    arg_pname->set_isarray(false);
17658    arg_pname->set_type(GLMessage::DataType::ENUM);
17659    arg_pname->add_intvalue((int)pname);
17660
17661    // copy argument params
17662    GLMessage_DataType *arg_params = glmsg.add_args();
17663    arg_params->set_isarray(false);
17664    arg_params->set_type(GLMessage::DataType::INT64);
17665    arg_params->add_int64value((uintptr_t)params);
17666
17667    // call function
17668    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17669    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17670    glContext->hooks->gl.glGetTexEnviv(env, pname, params);
17671    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17672    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17673
17674    void *pointerArgs[] = {
17675        (void *) params,
17676    };
17677
17678    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17679                              threadStartTime, threadEndTime,
17680                              &glmsg, pointerArgs);
17681    glContext->traceGLMessage(&glmsg);
17682}
17683
17684void GLTrace_glGetTexEnvxv(GLenum env, GLenum pname, GLfixed *params) {
17685    GLMessage glmsg;
17686    GLTraceContext *glContext = getGLTraceContext();
17687
17688    glmsg.set_function(GLMessage::glGetTexEnvxv);
17689
17690    // copy argument env
17691    GLMessage_DataType *arg_env = glmsg.add_args();
17692    arg_env->set_isarray(false);
17693    arg_env->set_type(GLMessage::DataType::ENUM);
17694    arg_env->add_intvalue((int)env);
17695
17696    // copy argument pname
17697    GLMessage_DataType *arg_pname = glmsg.add_args();
17698    arg_pname->set_isarray(false);
17699    arg_pname->set_type(GLMessage::DataType::ENUM);
17700    arg_pname->add_intvalue((int)pname);
17701
17702    // copy argument params
17703    GLMessage_DataType *arg_params = glmsg.add_args();
17704    arg_params->set_isarray(false);
17705    arg_params->set_type(GLMessage::DataType::INT64);
17706    arg_params->add_int64value((uintptr_t)params);
17707
17708    // call function
17709    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17710    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17711    glContext->hooks->gl.glGetTexEnvxv(env, pname, params);
17712    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17713    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17714
17715    void *pointerArgs[] = {
17716        (void *) params,
17717    };
17718
17719    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17720                              threadStartTime, threadEndTime,
17721                              &glmsg, pointerArgs);
17722    glContext->traceGLMessage(&glmsg);
17723}
17724
17725void GLTrace_glGetTexParameterxv(GLenum target, GLenum pname, GLfixed *params) {
17726    GLMessage glmsg;
17727    GLTraceContext *glContext = getGLTraceContext();
17728
17729    glmsg.set_function(GLMessage::glGetTexParameterxv);
17730
17731    // copy argument target
17732    GLMessage_DataType *arg_target = glmsg.add_args();
17733    arg_target->set_isarray(false);
17734    arg_target->set_type(GLMessage::DataType::ENUM);
17735    arg_target->add_intvalue((int)target);
17736
17737    // copy argument pname
17738    GLMessage_DataType *arg_pname = glmsg.add_args();
17739    arg_pname->set_isarray(false);
17740    arg_pname->set_type(GLMessage::DataType::ENUM);
17741    arg_pname->add_intvalue((int)pname);
17742
17743    // copy argument params
17744    GLMessage_DataType *arg_params = glmsg.add_args();
17745    arg_params->set_isarray(false);
17746    arg_params->set_type(GLMessage::DataType::INT64);
17747    arg_params->add_int64value((uintptr_t)params);
17748
17749    // call function
17750    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17751    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17752    glContext->hooks->gl.glGetTexParameterxv(target, pname, params);
17753    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17754    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17755
17756    void *pointerArgs[] = {
17757        (void *) params,
17758    };
17759
17760    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17761                              threadStartTime, threadEndTime,
17762                              &glmsg, pointerArgs);
17763    glContext->traceGLMessage(&glmsg);
17764}
17765
17766void GLTrace_glLightModelx(GLenum pname, GLfixed param) {
17767    GLMessage glmsg;
17768    GLTraceContext *glContext = getGLTraceContext();
17769
17770    glmsg.set_function(GLMessage::glLightModelx);
17771
17772    // copy argument pname
17773    GLMessage_DataType *arg_pname = glmsg.add_args();
17774    arg_pname->set_isarray(false);
17775    arg_pname->set_type(GLMessage::DataType::ENUM);
17776    arg_pname->add_intvalue((int)pname);
17777
17778    // copy argument param
17779    GLMessage_DataType *arg_param = glmsg.add_args();
17780    arg_param->set_isarray(false);
17781    arg_param->set_type(GLMessage::DataType::INT);
17782    arg_param->add_intvalue(param);
17783
17784    // call function
17785    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17786    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17787    glContext->hooks->gl.glLightModelx(pname, param);
17788    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17789    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17790
17791    void *pointerArgs[] = {
17792    };
17793
17794    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17795                              threadStartTime, threadEndTime,
17796                              &glmsg, pointerArgs);
17797    glContext->traceGLMessage(&glmsg);
17798}
17799
17800void GLTrace_glLightModelxv(GLenum pname, const GLfixed *params) {
17801    GLMessage glmsg;
17802    GLTraceContext *glContext = getGLTraceContext();
17803
17804    glmsg.set_function(GLMessage::glLightModelxv);
17805
17806    // copy argument pname
17807    GLMessage_DataType *arg_pname = glmsg.add_args();
17808    arg_pname->set_isarray(false);
17809    arg_pname->set_type(GLMessage::DataType::ENUM);
17810    arg_pname->add_intvalue((int)pname);
17811
17812    // copy argument params
17813    GLMessage_DataType *arg_params = glmsg.add_args();
17814    arg_params->set_isarray(false);
17815    arg_params->set_type(GLMessage::DataType::INT64);
17816    arg_params->add_int64value((uintptr_t)params);
17817
17818    // call function
17819    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17820    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17821    glContext->hooks->gl.glLightModelxv(pname, params);
17822    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17823    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17824
17825    void *pointerArgs[] = {
17826        (void *) params,
17827    };
17828
17829    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17830                              threadStartTime, threadEndTime,
17831                              &glmsg, pointerArgs);
17832    glContext->traceGLMessage(&glmsg);
17833}
17834
17835void GLTrace_glLightx(GLenum light, GLenum pname, GLfixed param) {
17836    GLMessage glmsg;
17837    GLTraceContext *glContext = getGLTraceContext();
17838
17839    glmsg.set_function(GLMessage::glLightx);
17840
17841    // copy argument light
17842    GLMessage_DataType *arg_light = glmsg.add_args();
17843    arg_light->set_isarray(false);
17844    arg_light->set_type(GLMessage::DataType::ENUM);
17845    arg_light->add_intvalue((int)light);
17846
17847    // copy argument pname
17848    GLMessage_DataType *arg_pname = glmsg.add_args();
17849    arg_pname->set_isarray(false);
17850    arg_pname->set_type(GLMessage::DataType::ENUM);
17851    arg_pname->add_intvalue((int)pname);
17852
17853    // copy argument param
17854    GLMessage_DataType *arg_param = glmsg.add_args();
17855    arg_param->set_isarray(false);
17856    arg_param->set_type(GLMessage::DataType::INT);
17857    arg_param->add_intvalue(param);
17858
17859    // call function
17860    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17861    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17862    glContext->hooks->gl.glLightx(light, pname, param);
17863    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17864    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17865
17866    void *pointerArgs[] = {
17867    };
17868
17869    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17870                              threadStartTime, threadEndTime,
17871                              &glmsg, pointerArgs);
17872    glContext->traceGLMessage(&glmsg);
17873}
17874
17875void GLTrace_glLightxv(GLenum light, GLenum pname, const GLfixed *params) {
17876    GLMessage glmsg;
17877    GLTraceContext *glContext = getGLTraceContext();
17878
17879    glmsg.set_function(GLMessage::glLightxv);
17880
17881    // copy argument light
17882    GLMessage_DataType *arg_light = glmsg.add_args();
17883    arg_light->set_isarray(false);
17884    arg_light->set_type(GLMessage::DataType::ENUM);
17885    arg_light->add_intvalue((int)light);
17886
17887    // copy argument pname
17888    GLMessage_DataType *arg_pname = glmsg.add_args();
17889    arg_pname->set_isarray(false);
17890    arg_pname->set_type(GLMessage::DataType::ENUM);
17891    arg_pname->add_intvalue((int)pname);
17892
17893    // copy argument params
17894    GLMessage_DataType *arg_params = glmsg.add_args();
17895    arg_params->set_isarray(false);
17896    arg_params->set_type(GLMessage::DataType::INT64);
17897    arg_params->add_int64value((uintptr_t)params);
17898
17899    // call function
17900    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17901    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17902    glContext->hooks->gl.glLightxv(light, pname, params);
17903    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17904    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17905
17906    void *pointerArgs[] = {
17907        (void *) params,
17908    };
17909
17910    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17911                              threadStartTime, threadEndTime,
17912                              &glmsg, pointerArgs);
17913    glContext->traceGLMessage(&glmsg);
17914}
17915
17916void GLTrace_glLineWidthx(GLfixed width) {
17917    GLMessage glmsg;
17918    GLTraceContext *glContext = getGLTraceContext();
17919
17920    glmsg.set_function(GLMessage::glLineWidthx);
17921
17922    // copy argument width
17923    GLMessage_DataType *arg_width = glmsg.add_args();
17924    arg_width->set_isarray(false);
17925    arg_width->set_type(GLMessage::DataType::INT);
17926    arg_width->add_intvalue(width);
17927
17928    // call function
17929    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17930    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17931    glContext->hooks->gl.glLineWidthx(width);
17932    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17933    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17934
17935    void *pointerArgs[] = {
17936    };
17937
17938    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17939                              threadStartTime, threadEndTime,
17940                              &glmsg, pointerArgs);
17941    glContext->traceGLMessage(&glmsg);
17942}
17943
17944void GLTrace_glLoadIdentity(void) {
17945    GLMessage glmsg;
17946    GLTraceContext *glContext = getGLTraceContext();
17947
17948    glmsg.set_function(GLMessage::glLoadIdentity);
17949
17950    // call function
17951    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17952    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17953    glContext->hooks->gl.glLoadIdentity();
17954    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17955    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17956
17957    void *pointerArgs[] = {
17958    };
17959
17960    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17961                              threadStartTime, threadEndTime,
17962                              &glmsg, pointerArgs);
17963    glContext->traceGLMessage(&glmsg);
17964}
17965
17966void GLTrace_glLoadMatrixx(const GLfixed *m) {
17967    GLMessage glmsg;
17968    GLTraceContext *glContext = getGLTraceContext();
17969
17970    glmsg.set_function(GLMessage::glLoadMatrixx);
17971
17972    // copy argument m
17973    GLMessage_DataType *arg_m = glmsg.add_args();
17974    arg_m->set_isarray(false);
17975    arg_m->set_type(GLMessage::DataType::INT64);
17976    arg_m->add_int64value((uintptr_t)m);
17977
17978    // call function
17979    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
17980    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
17981    glContext->hooks->gl.glLoadMatrixx(m);
17982    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
17983    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
17984
17985    void *pointerArgs[] = {
17986        (void *) m,
17987    };
17988
17989    fixupGLMessage(glContext, wallStartTime, wallEndTime,
17990                              threadStartTime, threadEndTime,
17991                              &glmsg, pointerArgs);
17992    glContext->traceGLMessage(&glmsg);
17993}
17994
17995void GLTrace_glLogicOp(GLenum opcode) {
17996    GLMessage glmsg;
17997    GLTraceContext *glContext = getGLTraceContext();
17998
17999    glmsg.set_function(GLMessage::glLogicOp);
18000
18001    // copy argument opcode
18002    GLMessage_DataType *arg_opcode = glmsg.add_args();
18003    arg_opcode->set_isarray(false);
18004    arg_opcode->set_type(GLMessage::DataType::ENUM);
18005    arg_opcode->add_intvalue((int)opcode);
18006
18007    // call function
18008    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18009    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18010    glContext->hooks->gl.glLogicOp(opcode);
18011    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18012    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18013
18014    void *pointerArgs[] = {
18015    };
18016
18017    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18018                              threadStartTime, threadEndTime,
18019                              &glmsg, pointerArgs);
18020    glContext->traceGLMessage(&glmsg);
18021}
18022
18023void GLTrace_glMaterialx(GLenum face, GLenum pname, GLfixed param) {
18024    GLMessage glmsg;
18025    GLTraceContext *glContext = getGLTraceContext();
18026
18027    glmsg.set_function(GLMessage::glMaterialx);
18028
18029    // copy argument face
18030    GLMessage_DataType *arg_face = glmsg.add_args();
18031    arg_face->set_isarray(false);
18032    arg_face->set_type(GLMessage::DataType::ENUM);
18033    arg_face->add_intvalue((int)face);
18034
18035    // copy argument pname
18036    GLMessage_DataType *arg_pname = glmsg.add_args();
18037    arg_pname->set_isarray(false);
18038    arg_pname->set_type(GLMessage::DataType::ENUM);
18039    arg_pname->add_intvalue((int)pname);
18040
18041    // copy argument param
18042    GLMessage_DataType *arg_param = glmsg.add_args();
18043    arg_param->set_isarray(false);
18044    arg_param->set_type(GLMessage::DataType::INT);
18045    arg_param->add_intvalue(param);
18046
18047    // call function
18048    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18049    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18050    glContext->hooks->gl.glMaterialx(face, pname, param);
18051    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18052    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18053
18054    void *pointerArgs[] = {
18055    };
18056
18057    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18058                              threadStartTime, threadEndTime,
18059                              &glmsg, pointerArgs);
18060    glContext->traceGLMessage(&glmsg);
18061}
18062
18063void GLTrace_glMaterialxv(GLenum face, GLenum pname, const GLfixed *params) {
18064    GLMessage glmsg;
18065    GLTraceContext *glContext = getGLTraceContext();
18066
18067    glmsg.set_function(GLMessage::glMaterialxv);
18068
18069    // copy argument face
18070    GLMessage_DataType *arg_face = glmsg.add_args();
18071    arg_face->set_isarray(false);
18072    arg_face->set_type(GLMessage::DataType::ENUM);
18073    arg_face->add_intvalue((int)face);
18074
18075    // copy argument pname
18076    GLMessage_DataType *arg_pname = glmsg.add_args();
18077    arg_pname->set_isarray(false);
18078    arg_pname->set_type(GLMessage::DataType::ENUM);
18079    arg_pname->add_intvalue((int)pname);
18080
18081    // copy argument params
18082    GLMessage_DataType *arg_params = glmsg.add_args();
18083    arg_params->set_isarray(false);
18084    arg_params->set_type(GLMessage::DataType::INT64);
18085    arg_params->add_int64value((uintptr_t)params);
18086
18087    // call function
18088    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18089    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18090    glContext->hooks->gl.glMaterialxv(face, pname, params);
18091    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18092    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18093
18094    void *pointerArgs[] = {
18095        (void *) params,
18096    };
18097
18098    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18099                              threadStartTime, threadEndTime,
18100                              &glmsg, pointerArgs);
18101    glContext->traceGLMessage(&glmsg);
18102}
18103
18104void GLTrace_glMatrixMode(GLenum mode) {
18105    GLMessage glmsg;
18106    GLTraceContext *glContext = getGLTraceContext();
18107
18108    glmsg.set_function(GLMessage::glMatrixMode);
18109
18110    // copy argument mode
18111    GLMessage_DataType *arg_mode = glmsg.add_args();
18112    arg_mode->set_isarray(false);
18113    arg_mode->set_type(GLMessage::DataType::ENUM);
18114    arg_mode->add_intvalue((int)mode);
18115
18116    // call function
18117    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18118    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18119    glContext->hooks->gl.glMatrixMode(mode);
18120    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18121    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18122
18123    void *pointerArgs[] = {
18124    };
18125
18126    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18127                              threadStartTime, threadEndTime,
18128                              &glmsg, pointerArgs);
18129    glContext->traceGLMessage(&glmsg);
18130}
18131
18132void GLTrace_glMultMatrixx(const GLfixed *m) {
18133    GLMessage glmsg;
18134    GLTraceContext *glContext = getGLTraceContext();
18135
18136    glmsg.set_function(GLMessage::glMultMatrixx);
18137
18138    // copy argument m
18139    GLMessage_DataType *arg_m = glmsg.add_args();
18140    arg_m->set_isarray(false);
18141    arg_m->set_type(GLMessage::DataType::INT64);
18142    arg_m->add_int64value((uintptr_t)m);
18143
18144    // call function
18145    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18146    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18147    glContext->hooks->gl.glMultMatrixx(m);
18148    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18149    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18150
18151    void *pointerArgs[] = {
18152        (void *) m,
18153    };
18154
18155    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18156                              threadStartTime, threadEndTime,
18157                              &glmsg, pointerArgs);
18158    glContext->traceGLMessage(&glmsg);
18159}
18160
18161void GLTrace_glMultiTexCoord4x(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q) {
18162    GLMessage glmsg;
18163    GLTraceContext *glContext = getGLTraceContext();
18164
18165    glmsg.set_function(GLMessage::glMultiTexCoord4x);
18166
18167    // copy argument target
18168    GLMessage_DataType *arg_target = glmsg.add_args();
18169    arg_target->set_isarray(false);
18170    arg_target->set_type(GLMessage::DataType::ENUM);
18171    arg_target->add_intvalue((int)target);
18172
18173    // copy argument s
18174    GLMessage_DataType *arg_s = glmsg.add_args();
18175    arg_s->set_isarray(false);
18176    arg_s->set_type(GLMessage::DataType::INT);
18177    arg_s->add_intvalue(s);
18178
18179    // copy argument t
18180    GLMessage_DataType *arg_t = glmsg.add_args();
18181    arg_t->set_isarray(false);
18182    arg_t->set_type(GLMessage::DataType::INT);
18183    arg_t->add_intvalue(t);
18184
18185    // copy argument r
18186    GLMessage_DataType *arg_r = glmsg.add_args();
18187    arg_r->set_isarray(false);
18188    arg_r->set_type(GLMessage::DataType::INT);
18189    arg_r->add_intvalue(r);
18190
18191    // copy argument q
18192    GLMessage_DataType *arg_q = glmsg.add_args();
18193    arg_q->set_isarray(false);
18194    arg_q->set_type(GLMessage::DataType::INT);
18195    arg_q->add_intvalue(q);
18196
18197    // call function
18198    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18199    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18200    glContext->hooks->gl.glMultiTexCoord4x(target, s, t, r, q);
18201    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18202    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18203
18204    void *pointerArgs[] = {
18205    };
18206
18207    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18208                              threadStartTime, threadEndTime,
18209                              &glmsg, pointerArgs);
18210    glContext->traceGLMessage(&glmsg);
18211}
18212
18213void GLTrace_glNormal3x(GLfixed nx, GLfixed ny, GLfixed nz) {
18214    GLMessage glmsg;
18215    GLTraceContext *glContext = getGLTraceContext();
18216
18217    glmsg.set_function(GLMessage::glNormal3x);
18218
18219    // copy argument nx
18220    GLMessage_DataType *arg_nx = glmsg.add_args();
18221    arg_nx->set_isarray(false);
18222    arg_nx->set_type(GLMessage::DataType::INT);
18223    arg_nx->add_intvalue(nx);
18224
18225    // copy argument ny
18226    GLMessage_DataType *arg_ny = glmsg.add_args();
18227    arg_ny->set_isarray(false);
18228    arg_ny->set_type(GLMessage::DataType::INT);
18229    arg_ny->add_intvalue(ny);
18230
18231    // copy argument nz
18232    GLMessage_DataType *arg_nz = glmsg.add_args();
18233    arg_nz->set_isarray(false);
18234    arg_nz->set_type(GLMessage::DataType::INT);
18235    arg_nz->add_intvalue(nz);
18236
18237    // call function
18238    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18239    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18240    glContext->hooks->gl.glNormal3x(nx, ny, nz);
18241    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18242    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18243
18244    void *pointerArgs[] = {
18245    };
18246
18247    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18248                              threadStartTime, threadEndTime,
18249                              &glmsg, pointerArgs);
18250    glContext->traceGLMessage(&glmsg);
18251}
18252
18253void GLTrace_glNormalPointer(GLenum type, GLsizei stride, const GLvoid *pointer) {
18254    GLMessage glmsg;
18255    GLTraceContext *glContext = getGLTraceContext();
18256
18257    glmsg.set_function(GLMessage::glNormalPointer);
18258
18259    // copy argument type
18260    GLMessage_DataType *arg_type = glmsg.add_args();
18261    arg_type->set_isarray(false);
18262    arg_type->set_type(GLMessage::DataType::ENUM);
18263    arg_type->add_intvalue((int)type);
18264
18265    // copy argument stride
18266    GLMessage_DataType *arg_stride = glmsg.add_args();
18267    arg_stride->set_isarray(false);
18268    arg_stride->set_type(GLMessage::DataType::INT);
18269    arg_stride->add_intvalue(stride);
18270
18271    // copy argument pointer
18272    GLMessage_DataType *arg_pointer = glmsg.add_args();
18273    arg_pointer->set_isarray(false);
18274    arg_pointer->set_type(GLMessage::DataType::INT64);
18275    arg_pointer->add_int64value((uintptr_t)pointer);
18276
18277    // call function
18278    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18279    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18280    glContext->hooks->gl.glNormalPointer(type, stride, pointer);
18281    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18282    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18283
18284    void *pointerArgs[] = {
18285        (void *) pointer,
18286    };
18287
18288    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18289                              threadStartTime, threadEndTime,
18290                              &glmsg, pointerArgs);
18291    glContext->traceGLMessage(&glmsg);
18292}
18293
18294void GLTrace_glOrthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar) {
18295    GLMessage glmsg;
18296    GLTraceContext *glContext = getGLTraceContext();
18297
18298    glmsg.set_function(GLMessage::glOrthox);
18299
18300    // copy argument left
18301    GLMessage_DataType *arg_left = glmsg.add_args();
18302    arg_left->set_isarray(false);
18303    arg_left->set_type(GLMessage::DataType::INT);
18304    arg_left->add_intvalue(left);
18305
18306    // copy argument right
18307    GLMessage_DataType *arg_right = glmsg.add_args();
18308    arg_right->set_isarray(false);
18309    arg_right->set_type(GLMessage::DataType::INT);
18310    arg_right->add_intvalue(right);
18311
18312    // copy argument bottom
18313    GLMessage_DataType *arg_bottom = glmsg.add_args();
18314    arg_bottom->set_isarray(false);
18315    arg_bottom->set_type(GLMessage::DataType::INT);
18316    arg_bottom->add_intvalue(bottom);
18317
18318    // copy argument top
18319    GLMessage_DataType *arg_top = glmsg.add_args();
18320    arg_top->set_isarray(false);
18321    arg_top->set_type(GLMessage::DataType::INT);
18322    arg_top->add_intvalue(top);
18323
18324    // copy argument zNear
18325    GLMessage_DataType *arg_zNear = glmsg.add_args();
18326    arg_zNear->set_isarray(false);
18327    arg_zNear->set_type(GLMessage::DataType::INT);
18328    arg_zNear->add_intvalue(zNear);
18329
18330    // copy argument zFar
18331    GLMessage_DataType *arg_zFar = glmsg.add_args();
18332    arg_zFar->set_isarray(false);
18333    arg_zFar->set_type(GLMessage::DataType::INT);
18334    arg_zFar->add_intvalue(zFar);
18335
18336    // call function
18337    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18338    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18339    glContext->hooks->gl.glOrthox(left, right, bottom, top, zNear, zFar);
18340    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18341    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18342
18343    void *pointerArgs[] = {
18344    };
18345
18346    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18347                              threadStartTime, threadEndTime,
18348                              &glmsg, pointerArgs);
18349    glContext->traceGLMessage(&glmsg);
18350}
18351
18352void GLTrace_glPointParameterx(GLenum pname, GLfixed param) {
18353    GLMessage glmsg;
18354    GLTraceContext *glContext = getGLTraceContext();
18355
18356    glmsg.set_function(GLMessage::glPointParameterx);
18357
18358    // copy argument pname
18359    GLMessage_DataType *arg_pname = glmsg.add_args();
18360    arg_pname->set_isarray(false);
18361    arg_pname->set_type(GLMessage::DataType::ENUM);
18362    arg_pname->add_intvalue((int)pname);
18363
18364    // copy argument param
18365    GLMessage_DataType *arg_param = glmsg.add_args();
18366    arg_param->set_isarray(false);
18367    arg_param->set_type(GLMessage::DataType::INT);
18368    arg_param->add_intvalue(param);
18369
18370    // call function
18371    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18372    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18373    glContext->hooks->gl.glPointParameterx(pname, param);
18374    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18375    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18376
18377    void *pointerArgs[] = {
18378    };
18379
18380    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18381                              threadStartTime, threadEndTime,
18382                              &glmsg, pointerArgs);
18383    glContext->traceGLMessage(&glmsg);
18384}
18385
18386void GLTrace_glPointParameterxv(GLenum pname, const GLfixed *params) {
18387    GLMessage glmsg;
18388    GLTraceContext *glContext = getGLTraceContext();
18389
18390    glmsg.set_function(GLMessage::glPointParameterxv);
18391
18392    // copy argument pname
18393    GLMessage_DataType *arg_pname = glmsg.add_args();
18394    arg_pname->set_isarray(false);
18395    arg_pname->set_type(GLMessage::DataType::ENUM);
18396    arg_pname->add_intvalue((int)pname);
18397
18398    // copy argument params
18399    GLMessage_DataType *arg_params = glmsg.add_args();
18400    arg_params->set_isarray(false);
18401    arg_params->set_type(GLMessage::DataType::INT64);
18402    arg_params->add_int64value((uintptr_t)params);
18403
18404    // call function
18405    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18406    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18407    glContext->hooks->gl.glPointParameterxv(pname, params);
18408    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18409    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18410
18411    void *pointerArgs[] = {
18412        (void *) params,
18413    };
18414
18415    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18416                              threadStartTime, threadEndTime,
18417                              &glmsg, pointerArgs);
18418    glContext->traceGLMessage(&glmsg);
18419}
18420
18421void GLTrace_glPointSizex(GLfixed size) {
18422    GLMessage glmsg;
18423    GLTraceContext *glContext = getGLTraceContext();
18424
18425    glmsg.set_function(GLMessage::glPointSizex);
18426
18427    // copy argument size
18428    GLMessage_DataType *arg_size = glmsg.add_args();
18429    arg_size->set_isarray(false);
18430    arg_size->set_type(GLMessage::DataType::INT);
18431    arg_size->add_intvalue(size);
18432
18433    // call function
18434    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18435    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18436    glContext->hooks->gl.glPointSizex(size);
18437    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18438    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18439
18440    void *pointerArgs[] = {
18441    };
18442
18443    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18444                              threadStartTime, threadEndTime,
18445                              &glmsg, pointerArgs);
18446    glContext->traceGLMessage(&glmsg);
18447}
18448
18449void GLTrace_glPolygonOffsetx(GLfixed factor, GLfixed units) {
18450    GLMessage glmsg;
18451    GLTraceContext *glContext = getGLTraceContext();
18452
18453    glmsg.set_function(GLMessage::glPolygonOffsetx);
18454
18455    // copy argument factor
18456    GLMessage_DataType *arg_factor = glmsg.add_args();
18457    arg_factor->set_isarray(false);
18458    arg_factor->set_type(GLMessage::DataType::INT);
18459    arg_factor->add_intvalue(factor);
18460
18461    // copy argument units
18462    GLMessage_DataType *arg_units = glmsg.add_args();
18463    arg_units->set_isarray(false);
18464    arg_units->set_type(GLMessage::DataType::INT);
18465    arg_units->add_intvalue(units);
18466
18467    // call function
18468    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18469    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18470    glContext->hooks->gl.glPolygonOffsetx(factor, units);
18471    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18472    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18473
18474    void *pointerArgs[] = {
18475    };
18476
18477    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18478                              threadStartTime, threadEndTime,
18479                              &glmsg, pointerArgs);
18480    glContext->traceGLMessage(&glmsg);
18481}
18482
18483void GLTrace_glPopMatrix(void) {
18484    GLMessage glmsg;
18485    GLTraceContext *glContext = getGLTraceContext();
18486
18487    glmsg.set_function(GLMessage::glPopMatrix);
18488
18489    // call function
18490    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18491    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18492    glContext->hooks->gl.glPopMatrix();
18493    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18494    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18495
18496    void *pointerArgs[] = {
18497    };
18498
18499    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18500                              threadStartTime, threadEndTime,
18501                              &glmsg, pointerArgs);
18502    glContext->traceGLMessage(&glmsg);
18503}
18504
18505void GLTrace_glPushMatrix(void) {
18506    GLMessage glmsg;
18507    GLTraceContext *glContext = getGLTraceContext();
18508
18509    glmsg.set_function(GLMessage::glPushMatrix);
18510
18511    // call function
18512    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18513    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18514    glContext->hooks->gl.glPushMatrix();
18515    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18516    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18517
18518    void *pointerArgs[] = {
18519    };
18520
18521    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18522                              threadStartTime, threadEndTime,
18523                              &glmsg, pointerArgs);
18524    glContext->traceGLMessage(&glmsg);
18525}
18526
18527void GLTrace_glRotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z) {
18528    GLMessage glmsg;
18529    GLTraceContext *glContext = getGLTraceContext();
18530
18531    glmsg.set_function(GLMessage::glRotatex);
18532
18533    // copy argument angle
18534    GLMessage_DataType *arg_angle = glmsg.add_args();
18535    arg_angle->set_isarray(false);
18536    arg_angle->set_type(GLMessage::DataType::INT);
18537    arg_angle->add_intvalue(angle);
18538
18539    // copy argument x
18540    GLMessage_DataType *arg_x = glmsg.add_args();
18541    arg_x->set_isarray(false);
18542    arg_x->set_type(GLMessage::DataType::INT);
18543    arg_x->add_intvalue(x);
18544
18545    // copy argument y
18546    GLMessage_DataType *arg_y = glmsg.add_args();
18547    arg_y->set_isarray(false);
18548    arg_y->set_type(GLMessage::DataType::INT);
18549    arg_y->add_intvalue(y);
18550
18551    // copy argument z
18552    GLMessage_DataType *arg_z = glmsg.add_args();
18553    arg_z->set_isarray(false);
18554    arg_z->set_type(GLMessage::DataType::INT);
18555    arg_z->add_intvalue(z);
18556
18557    // call function
18558    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18559    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18560    glContext->hooks->gl.glRotatex(angle, x, y, z);
18561    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18562    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18563
18564    void *pointerArgs[] = {
18565    };
18566
18567    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18568                              threadStartTime, threadEndTime,
18569                              &glmsg, pointerArgs);
18570    glContext->traceGLMessage(&glmsg);
18571}
18572
18573void GLTrace_glSampleCoveragex(GLclampx value, GLboolean invert) {
18574    GLMessage glmsg;
18575    GLTraceContext *glContext = getGLTraceContext();
18576
18577    glmsg.set_function(GLMessage::glSampleCoveragex);
18578
18579    // copy argument value
18580    GLMessage_DataType *arg_value = glmsg.add_args();
18581    arg_value->set_isarray(false);
18582    arg_value->set_type(GLMessage::DataType::INT);
18583    arg_value->add_intvalue(value);
18584
18585    // copy argument invert
18586    GLMessage_DataType *arg_invert = glmsg.add_args();
18587    arg_invert->set_isarray(false);
18588    arg_invert->set_type(GLMessage::DataType::BOOL);
18589    arg_invert->add_boolvalue(invert);
18590
18591    // call function
18592    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18593    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18594    glContext->hooks->gl.glSampleCoveragex(value, invert);
18595    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18596    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18597
18598    void *pointerArgs[] = {
18599    };
18600
18601    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18602                              threadStartTime, threadEndTime,
18603                              &glmsg, pointerArgs);
18604    glContext->traceGLMessage(&glmsg);
18605}
18606
18607void GLTrace_glScalex(GLfixed x, GLfixed y, GLfixed z) {
18608    GLMessage glmsg;
18609    GLTraceContext *glContext = getGLTraceContext();
18610
18611    glmsg.set_function(GLMessage::glScalex);
18612
18613    // copy argument x
18614    GLMessage_DataType *arg_x = glmsg.add_args();
18615    arg_x->set_isarray(false);
18616    arg_x->set_type(GLMessage::DataType::INT);
18617    arg_x->add_intvalue(x);
18618
18619    // copy argument y
18620    GLMessage_DataType *arg_y = glmsg.add_args();
18621    arg_y->set_isarray(false);
18622    arg_y->set_type(GLMessage::DataType::INT);
18623    arg_y->add_intvalue(y);
18624
18625    // copy argument z
18626    GLMessage_DataType *arg_z = glmsg.add_args();
18627    arg_z->set_isarray(false);
18628    arg_z->set_type(GLMessage::DataType::INT);
18629    arg_z->add_intvalue(z);
18630
18631    // call function
18632    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18633    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18634    glContext->hooks->gl.glScalex(x, y, z);
18635    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18636    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18637
18638    void *pointerArgs[] = {
18639    };
18640
18641    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18642                              threadStartTime, threadEndTime,
18643                              &glmsg, pointerArgs);
18644    glContext->traceGLMessage(&glmsg);
18645}
18646
18647void GLTrace_glShadeModel(GLenum mode) {
18648    GLMessage glmsg;
18649    GLTraceContext *glContext = getGLTraceContext();
18650
18651    glmsg.set_function(GLMessage::glShadeModel);
18652
18653    // copy argument mode
18654    GLMessage_DataType *arg_mode = glmsg.add_args();
18655    arg_mode->set_isarray(false);
18656    arg_mode->set_type(GLMessage::DataType::ENUM);
18657    arg_mode->add_intvalue((int)mode);
18658
18659    // call function
18660    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18661    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18662    glContext->hooks->gl.glShadeModel(mode);
18663    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18664    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18665
18666    void *pointerArgs[] = {
18667    };
18668
18669    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18670                              threadStartTime, threadEndTime,
18671                              &glmsg, pointerArgs);
18672    glContext->traceGLMessage(&glmsg);
18673}
18674
18675void GLTrace_glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) {
18676    GLMessage glmsg;
18677    GLTraceContext *glContext = getGLTraceContext();
18678
18679    glmsg.set_function(GLMessage::glTexCoordPointer);
18680
18681    // copy argument size
18682    GLMessage_DataType *arg_size = glmsg.add_args();
18683    arg_size->set_isarray(false);
18684    arg_size->set_type(GLMessage::DataType::INT);
18685    arg_size->add_intvalue(size);
18686
18687    // copy argument type
18688    GLMessage_DataType *arg_type = glmsg.add_args();
18689    arg_type->set_isarray(false);
18690    arg_type->set_type(GLMessage::DataType::ENUM);
18691    arg_type->add_intvalue((int)type);
18692
18693    // copy argument stride
18694    GLMessage_DataType *arg_stride = glmsg.add_args();
18695    arg_stride->set_isarray(false);
18696    arg_stride->set_type(GLMessage::DataType::INT);
18697    arg_stride->add_intvalue(stride);
18698
18699    // copy argument pointer
18700    GLMessage_DataType *arg_pointer = glmsg.add_args();
18701    arg_pointer->set_isarray(false);
18702    arg_pointer->set_type(GLMessage::DataType::INT64);
18703    arg_pointer->add_int64value((uintptr_t)pointer);
18704
18705    // call function
18706    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18707    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18708    glContext->hooks->gl.glTexCoordPointer(size, type, stride, pointer);
18709    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18710    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18711
18712    void *pointerArgs[] = {
18713        (void *) pointer,
18714    };
18715
18716    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18717                              threadStartTime, threadEndTime,
18718                              &glmsg, pointerArgs);
18719    glContext->traceGLMessage(&glmsg);
18720}
18721
18722void GLTrace_glTexEnvi(GLenum target, GLenum pname, GLint param) {
18723    GLMessage glmsg;
18724    GLTraceContext *glContext = getGLTraceContext();
18725
18726    glmsg.set_function(GLMessage::glTexEnvi);
18727
18728    // copy argument target
18729    GLMessage_DataType *arg_target = glmsg.add_args();
18730    arg_target->set_isarray(false);
18731    arg_target->set_type(GLMessage::DataType::ENUM);
18732    arg_target->add_intvalue((int)target);
18733
18734    // copy argument pname
18735    GLMessage_DataType *arg_pname = glmsg.add_args();
18736    arg_pname->set_isarray(false);
18737    arg_pname->set_type(GLMessage::DataType::ENUM);
18738    arg_pname->add_intvalue((int)pname);
18739
18740    // copy argument param
18741    GLMessage_DataType *arg_param = glmsg.add_args();
18742    arg_param->set_isarray(false);
18743    arg_param->set_type(GLMessage::DataType::INT);
18744    arg_param->add_intvalue(param);
18745
18746    // call function
18747    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18748    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18749    glContext->hooks->gl.glTexEnvi(target, pname, param);
18750    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18751    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18752
18753    void *pointerArgs[] = {
18754    };
18755
18756    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18757                              threadStartTime, threadEndTime,
18758                              &glmsg, pointerArgs);
18759    glContext->traceGLMessage(&glmsg);
18760}
18761
18762void GLTrace_glTexEnvx(GLenum target, GLenum pname, GLfixed param) {
18763    GLMessage glmsg;
18764    GLTraceContext *glContext = getGLTraceContext();
18765
18766    glmsg.set_function(GLMessage::glTexEnvx);
18767
18768    // copy argument target
18769    GLMessage_DataType *arg_target = glmsg.add_args();
18770    arg_target->set_isarray(false);
18771    arg_target->set_type(GLMessage::DataType::ENUM);
18772    arg_target->add_intvalue((int)target);
18773
18774    // copy argument pname
18775    GLMessage_DataType *arg_pname = glmsg.add_args();
18776    arg_pname->set_isarray(false);
18777    arg_pname->set_type(GLMessage::DataType::ENUM);
18778    arg_pname->add_intvalue((int)pname);
18779
18780    // copy argument param
18781    GLMessage_DataType *arg_param = glmsg.add_args();
18782    arg_param->set_isarray(false);
18783    arg_param->set_type(GLMessage::DataType::INT);
18784    arg_param->add_intvalue(param);
18785
18786    // call function
18787    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18788    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18789    glContext->hooks->gl.glTexEnvx(target, pname, param);
18790    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18791    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18792
18793    void *pointerArgs[] = {
18794    };
18795
18796    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18797                              threadStartTime, threadEndTime,
18798                              &glmsg, pointerArgs);
18799    glContext->traceGLMessage(&glmsg);
18800}
18801
18802void GLTrace_glTexEnviv(GLenum target, GLenum pname, const GLint *params) {
18803    GLMessage glmsg;
18804    GLTraceContext *glContext = getGLTraceContext();
18805
18806    glmsg.set_function(GLMessage::glTexEnviv);
18807
18808    // copy argument target
18809    GLMessage_DataType *arg_target = glmsg.add_args();
18810    arg_target->set_isarray(false);
18811    arg_target->set_type(GLMessage::DataType::ENUM);
18812    arg_target->add_intvalue((int)target);
18813
18814    // copy argument pname
18815    GLMessage_DataType *arg_pname = glmsg.add_args();
18816    arg_pname->set_isarray(false);
18817    arg_pname->set_type(GLMessage::DataType::ENUM);
18818    arg_pname->add_intvalue((int)pname);
18819
18820    // copy argument params
18821    GLMessage_DataType *arg_params = glmsg.add_args();
18822    arg_params->set_isarray(false);
18823    arg_params->set_type(GLMessage::DataType::INT64);
18824    arg_params->add_int64value((uintptr_t)params);
18825
18826    // call function
18827    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18828    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18829    glContext->hooks->gl.glTexEnviv(target, pname, params);
18830    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18831    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18832
18833    void *pointerArgs[] = {
18834        (void *) params,
18835    };
18836
18837    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18838                              threadStartTime, threadEndTime,
18839                              &glmsg, pointerArgs);
18840    glContext->traceGLMessage(&glmsg);
18841}
18842
18843void GLTrace_glTexEnvxv(GLenum target, GLenum pname, const GLfixed *params) {
18844    GLMessage glmsg;
18845    GLTraceContext *glContext = getGLTraceContext();
18846
18847    glmsg.set_function(GLMessage::glTexEnvxv);
18848
18849    // copy argument target
18850    GLMessage_DataType *arg_target = glmsg.add_args();
18851    arg_target->set_isarray(false);
18852    arg_target->set_type(GLMessage::DataType::ENUM);
18853    arg_target->add_intvalue((int)target);
18854
18855    // copy argument pname
18856    GLMessage_DataType *arg_pname = glmsg.add_args();
18857    arg_pname->set_isarray(false);
18858    arg_pname->set_type(GLMessage::DataType::ENUM);
18859    arg_pname->add_intvalue((int)pname);
18860
18861    // copy argument params
18862    GLMessage_DataType *arg_params = glmsg.add_args();
18863    arg_params->set_isarray(false);
18864    arg_params->set_type(GLMessage::DataType::INT64);
18865    arg_params->add_int64value((uintptr_t)params);
18866
18867    // call function
18868    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18869    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18870    glContext->hooks->gl.glTexEnvxv(target, pname, params);
18871    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18872    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18873
18874    void *pointerArgs[] = {
18875        (void *) params,
18876    };
18877
18878    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18879                              threadStartTime, threadEndTime,
18880                              &glmsg, pointerArgs);
18881    glContext->traceGLMessage(&glmsg);
18882}
18883
18884void GLTrace_glTexParameterx(GLenum target, GLenum pname, GLfixed param) {
18885    GLMessage glmsg;
18886    GLTraceContext *glContext = getGLTraceContext();
18887
18888    glmsg.set_function(GLMessage::glTexParameterx);
18889
18890    // copy argument target
18891    GLMessage_DataType *arg_target = glmsg.add_args();
18892    arg_target->set_isarray(false);
18893    arg_target->set_type(GLMessage::DataType::ENUM);
18894    arg_target->add_intvalue((int)target);
18895
18896    // copy argument pname
18897    GLMessage_DataType *arg_pname = glmsg.add_args();
18898    arg_pname->set_isarray(false);
18899    arg_pname->set_type(GLMessage::DataType::ENUM);
18900    arg_pname->add_intvalue((int)pname);
18901
18902    // copy argument param
18903    GLMessage_DataType *arg_param = glmsg.add_args();
18904    arg_param->set_isarray(false);
18905    arg_param->set_type(GLMessage::DataType::INT);
18906    arg_param->add_intvalue(param);
18907
18908    // call function
18909    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18910    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18911    glContext->hooks->gl.glTexParameterx(target, pname, param);
18912    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18913    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18914
18915    void *pointerArgs[] = {
18916    };
18917
18918    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18919                              threadStartTime, threadEndTime,
18920                              &glmsg, pointerArgs);
18921    glContext->traceGLMessage(&glmsg);
18922}
18923
18924void GLTrace_glTexParameterxv(GLenum target, GLenum pname, const GLfixed *params) {
18925    GLMessage glmsg;
18926    GLTraceContext *glContext = getGLTraceContext();
18927
18928    glmsg.set_function(GLMessage::glTexParameterxv);
18929
18930    // copy argument target
18931    GLMessage_DataType *arg_target = glmsg.add_args();
18932    arg_target->set_isarray(false);
18933    arg_target->set_type(GLMessage::DataType::ENUM);
18934    arg_target->add_intvalue((int)target);
18935
18936    // copy argument pname
18937    GLMessage_DataType *arg_pname = glmsg.add_args();
18938    arg_pname->set_isarray(false);
18939    arg_pname->set_type(GLMessage::DataType::ENUM);
18940    arg_pname->add_intvalue((int)pname);
18941
18942    // copy argument params
18943    GLMessage_DataType *arg_params = glmsg.add_args();
18944    arg_params->set_isarray(false);
18945    arg_params->set_type(GLMessage::DataType::INT64);
18946    arg_params->add_int64value((uintptr_t)params);
18947
18948    // call function
18949    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18950    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18951    glContext->hooks->gl.glTexParameterxv(target, pname, params);
18952    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18953    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18954
18955    void *pointerArgs[] = {
18956        (void *) params,
18957    };
18958
18959    fixupGLMessage(glContext, wallStartTime, wallEndTime,
18960                              threadStartTime, threadEndTime,
18961                              &glmsg, pointerArgs);
18962    glContext->traceGLMessage(&glmsg);
18963}
18964
18965void GLTrace_glTranslatex(GLfixed x, GLfixed y, GLfixed z) {
18966    GLMessage glmsg;
18967    GLTraceContext *glContext = getGLTraceContext();
18968
18969    glmsg.set_function(GLMessage::glTranslatex);
18970
18971    // copy argument x
18972    GLMessage_DataType *arg_x = glmsg.add_args();
18973    arg_x->set_isarray(false);
18974    arg_x->set_type(GLMessage::DataType::INT);
18975    arg_x->add_intvalue(x);
18976
18977    // copy argument y
18978    GLMessage_DataType *arg_y = glmsg.add_args();
18979    arg_y->set_isarray(false);
18980    arg_y->set_type(GLMessage::DataType::INT);
18981    arg_y->add_intvalue(y);
18982
18983    // copy argument z
18984    GLMessage_DataType *arg_z = glmsg.add_args();
18985    arg_z->set_isarray(false);
18986    arg_z->set_type(GLMessage::DataType::INT);
18987    arg_z->add_intvalue(z);
18988
18989    // call function
18990    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
18991    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
18992    glContext->hooks->gl.glTranslatex(x, y, z);
18993    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
18994    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
18995
18996    void *pointerArgs[] = {
18997    };
18998
18999    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19000                              threadStartTime, threadEndTime,
19001                              &glmsg, pointerArgs);
19002    glContext->traceGLMessage(&glmsg);
19003}
19004
19005void GLTrace_glVertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) {
19006    GLMessage glmsg;
19007    GLTraceContext *glContext = getGLTraceContext();
19008
19009    glmsg.set_function(GLMessage::glVertexPointer);
19010
19011    // copy argument size
19012    GLMessage_DataType *arg_size = glmsg.add_args();
19013    arg_size->set_isarray(false);
19014    arg_size->set_type(GLMessage::DataType::INT);
19015    arg_size->add_intvalue(size);
19016
19017    // copy argument type
19018    GLMessage_DataType *arg_type = glmsg.add_args();
19019    arg_type->set_isarray(false);
19020    arg_type->set_type(GLMessage::DataType::ENUM);
19021    arg_type->add_intvalue((int)type);
19022
19023    // copy argument stride
19024    GLMessage_DataType *arg_stride = glmsg.add_args();
19025    arg_stride->set_isarray(false);
19026    arg_stride->set_type(GLMessage::DataType::INT);
19027    arg_stride->add_intvalue(stride);
19028
19029    // copy argument pointer
19030    GLMessage_DataType *arg_pointer = glmsg.add_args();
19031    arg_pointer->set_isarray(false);
19032    arg_pointer->set_type(GLMessage::DataType::INT64);
19033    arg_pointer->add_int64value((uintptr_t)pointer);
19034
19035    // call function
19036    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19037    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19038    glContext->hooks->gl.glVertexPointer(size, type, stride, pointer);
19039    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19040    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19041
19042    void *pointerArgs[] = {
19043        (void *) pointer,
19044    };
19045
19046    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19047                              threadStartTime, threadEndTime,
19048                              &glmsg, pointerArgs);
19049    glContext->traceGLMessage(&glmsg);
19050}
19051
19052void GLTrace_glPointSizePointerOES(GLenum type, GLsizei stride, const GLvoid *pointer) {
19053    GLMessage glmsg;
19054    GLTraceContext *glContext = getGLTraceContext();
19055
19056    glmsg.set_function(GLMessage::glPointSizePointerOES);
19057
19058    // copy argument type
19059    GLMessage_DataType *arg_type = glmsg.add_args();
19060    arg_type->set_isarray(false);
19061    arg_type->set_type(GLMessage::DataType::ENUM);
19062    arg_type->add_intvalue((int)type);
19063
19064    // copy argument stride
19065    GLMessage_DataType *arg_stride = glmsg.add_args();
19066    arg_stride->set_isarray(false);
19067    arg_stride->set_type(GLMessage::DataType::INT);
19068    arg_stride->add_intvalue(stride);
19069
19070    // copy argument pointer
19071    GLMessage_DataType *arg_pointer = glmsg.add_args();
19072    arg_pointer->set_isarray(false);
19073    arg_pointer->set_type(GLMessage::DataType::INT64);
19074    arg_pointer->add_int64value((uintptr_t)pointer);
19075
19076    // call function
19077    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19078    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19079    glContext->hooks->gl.glPointSizePointerOES(type, stride, pointer);
19080    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19081    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19082
19083    void *pointerArgs[] = {
19084        (void *) pointer,
19085    };
19086
19087    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19088                              threadStartTime, threadEndTime,
19089                              &glmsg, pointerArgs);
19090    glContext->traceGLMessage(&glmsg);
19091}
19092
19093
19094// Definitions for GL1Ext APIs
19095
19096void GLTrace_glBlendEquationSeparateOES(GLenum modeRGB, GLenum modeAlpha) {
19097    GLMessage glmsg;
19098    GLTraceContext *glContext = getGLTraceContext();
19099
19100    glmsg.set_function(GLMessage::glBlendEquationSeparateOES);
19101
19102    // copy argument modeRGB
19103    GLMessage_DataType *arg_modeRGB = glmsg.add_args();
19104    arg_modeRGB->set_isarray(false);
19105    arg_modeRGB->set_type(GLMessage::DataType::ENUM);
19106    arg_modeRGB->add_intvalue((int)modeRGB);
19107
19108    // copy argument modeAlpha
19109    GLMessage_DataType *arg_modeAlpha = glmsg.add_args();
19110    arg_modeAlpha->set_isarray(false);
19111    arg_modeAlpha->set_type(GLMessage::DataType::ENUM);
19112    arg_modeAlpha->add_intvalue((int)modeAlpha);
19113
19114    // call function
19115    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19116    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19117    glContext->hooks->gl.glBlendEquationSeparateOES(modeRGB, modeAlpha);
19118    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19119    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19120
19121    void *pointerArgs[] = {
19122    };
19123
19124    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19125                              threadStartTime, threadEndTime,
19126                              &glmsg, pointerArgs);
19127    glContext->traceGLMessage(&glmsg);
19128}
19129
19130void GLTrace_glBlendFuncSeparateOES(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {
19131    GLMessage glmsg;
19132    GLTraceContext *glContext = getGLTraceContext();
19133
19134    glmsg.set_function(GLMessage::glBlendFuncSeparateOES);
19135
19136    // copy argument srcRGB
19137    GLMessage_DataType *arg_srcRGB = glmsg.add_args();
19138    arg_srcRGB->set_isarray(false);
19139    arg_srcRGB->set_type(GLMessage::DataType::ENUM);
19140    arg_srcRGB->add_intvalue((int)srcRGB);
19141
19142    // copy argument dstRGB
19143    GLMessage_DataType *arg_dstRGB = glmsg.add_args();
19144    arg_dstRGB->set_isarray(false);
19145    arg_dstRGB->set_type(GLMessage::DataType::ENUM);
19146    arg_dstRGB->add_intvalue((int)dstRGB);
19147
19148    // copy argument srcAlpha
19149    GLMessage_DataType *arg_srcAlpha = glmsg.add_args();
19150    arg_srcAlpha->set_isarray(false);
19151    arg_srcAlpha->set_type(GLMessage::DataType::ENUM);
19152    arg_srcAlpha->add_intvalue((int)srcAlpha);
19153
19154    // copy argument dstAlpha
19155    GLMessage_DataType *arg_dstAlpha = glmsg.add_args();
19156    arg_dstAlpha->set_isarray(false);
19157    arg_dstAlpha->set_type(GLMessage::DataType::ENUM);
19158    arg_dstAlpha->add_intvalue((int)dstAlpha);
19159
19160    // call function
19161    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19162    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19163    glContext->hooks->gl.glBlendFuncSeparateOES(srcRGB, dstRGB, srcAlpha, dstAlpha);
19164    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19165    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19166
19167    void *pointerArgs[] = {
19168    };
19169
19170    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19171                              threadStartTime, threadEndTime,
19172                              &glmsg, pointerArgs);
19173    glContext->traceGLMessage(&glmsg);
19174}
19175
19176void GLTrace_glBlendEquationOES(GLenum mode) {
19177    GLMessage glmsg;
19178    GLTraceContext *glContext = getGLTraceContext();
19179
19180    glmsg.set_function(GLMessage::glBlendEquationOES);
19181
19182    // copy argument mode
19183    GLMessage_DataType *arg_mode = glmsg.add_args();
19184    arg_mode->set_isarray(false);
19185    arg_mode->set_type(GLMessage::DataType::ENUM);
19186    arg_mode->add_intvalue((int)mode);
19187
19188    // call function
19189    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19190    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19191    glContext->hooks->gl.glBlendEquationOES(mode);
19192    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19193    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19194
19195    void *pointerArgs[] = {
19196    };
19197
19198    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19199                              threadStartTime, threadEndTime,
19200                              &glmsg, pointerArgs);
19201    glContext->traceGLMessage(&glmsg);
19202}
19203
19204void GLTrace_glDrawTexsOES(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height) {
19205    GLMessage glmsg;
19206    GLTraceContext *glContext = getGLTraceContext();
19207
19208    glmsg.set_function(GLMessage::glDrawTexsOES);
19209
19210    // copy argument x
19211    GLMessage_DataType *arg_x = glmsg.add_args();
19212    arg_x->set_isarray(false);
19213    arg_x->set_type(GLMessage::DataType::INT);
19214    arg_x->add_intvalue(x);
19215
19216    // copy argument y
19217    GLMessage_DataType *arg_y = glmsg.add_args();
19218    arg_y->set_isarray(false);
19219    arg_y->set_type(GLMessage::DataType::INT);
19220    arg_y->add_intvalue(y);
19221
19222    // copy argument z
19223    GLMessage_DataType *arg_z = glmsg.add_args();
19224    arg_z->set_isarray(false);
19225    arg_z->set_type(GLMessage::DataType::INT);
19226    arg_z->add_intvalue(z);
19227
19228    // copy argument width
19229    GLMessage_DataType *arg_width = glmsg.add_args();
19230    arg_width->set_isarray(false);
19231    arg_width->set_type(GLMessage::DataType::INT);
19232    arg_width->add_intvalue(width);
19233
19234    // copy argument height
19235    GLMessage_DataType *arg_height = glmsg.add_args();
19236    arg_height->set_isarray(false);
19237    arg_height->set_type(GLMessage::DataType::INT);
19238    arg_height->add_intvalue(height);
19239
19240    // call function
19241    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19242    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19243    glContext->hooks->gl.glDrawTexsOES(x, y, z, width, height);
19244    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19245    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19246
19247    void *pointerArgs[] = {
19248    };
19249
19250    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19251                              threadStartTime, threadEndTime,
19252                              &glmsg, pointerArgs);
19253    glContext->traceGLMessage(&glmsg);
19254}
19255
19256void GLTrace_glDrawTexiOES(GLint x, GLint y, GLint z, GLint width, GLint height) {
19257    GLMessage glmsg;
19258    GLTraceContext *glContext = getGLTraceContext();
19259
19260    glmsg.set_function(GLMessage::glDrawTexiOES);
19261
19262    // copy argument x
19263    GLMessage_DataType *arg_x = glmsg.add_args();
19264    arg_x->set_isarray(false);
19265    arg_x->set_type(GLMessage::DataType::INT);
19266    arg_x->add_intvalue(x);
19267
19268    // copy argument y
19269    GLMessage_DataType *arg_y = glmsg.add_args();
19270    arg_y->set_isarray(false);
19271    arg_y->set_type(GLMessage::DataType::INT);
19272    arg_y->add_intvalue(y);
19273
19274    // copy argument z
19275    GLMessage_DataType *arg_z = glmsg.add_args();
19276    arg_z->set_isarray(false);
19277    arg_z->set_type(GLMessage::DataType::INT);
19278    arg_z->add_intvalue(z);
19279
19280    // copy argument width
19281    GLMessage_DataType *arg_width = glmsg.add_args();
19282    arg_width->set_isarray(false);
19283    arg_width->set_type(GLMessage::DataType::INT);
19284    arg_width->add_intvalue(width);
19285
19286    // copy argument height
19287    GLMessage_DataType *arg_height = glmsg.add_args();
19288    arg_height->set_isarray(false);
19289    arg_height->set_type(GLMessage::DataType::INT);
19290    arg_height->add_intvalue(height);
19291
19292    // call function
19293    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19294    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19295    glContext->hooks->gl.glDrawTexiOES(x, y, z, width, height);
19296    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19297    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19298
19299    void *pointerArgs[] = {
19300    };
19301
19302    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19303                              threadStartTime, threadEndTime,
19304                              &glmsg, pointerArgs);
19305    glContext->traceGLMessage(&glmsg);
19306}
19307
19308void GLTrace_glDrawTexxOES(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height) {
19309    GLMessage glmsg;
19310    GLTraceContext *glContext = getGLTraceContext();
19311
19312    glmsg.set_function(GLMessage::glDrawTexxOES);
19313
19314    // copy argument x
19315    GLMessage_DataType *arg_x = glmsg.add_args();
19316    arg_x->set_isarray(false);
19317    arg_x->set_type(GLMessage::DataType::INT);
19318    arg_x->add_intvalue(x);
19319
19320    // copy argument y
19321    GLMessage_DataType *arg_y = glmsg.add_args();
19322    arg_y->set_isarray(false);
19323    arg_y->set_type(GLMessage::DataType::INT);
19324    arg_y->add_intvalue(y);
19325
19326    // copy argument z
19327    GLMessage_DataType *arg_z = glmsg.add_args();
19328    arg_z->set_isarray(false);
19329    arg_z->set_type(GLMessage::DataType::INT);
19330    arg_z->add_intvalue(z);
19331
19332    // copy argument width
19333    GLMessage_DataType *arg_width = glmsg.add_args();
19334    arg_width->set_isarray(false);
19335    arg_width->set_type(GLMessage::DataType::INT);
19336    arg_width->add_intvalue(width);
19337
19338    // copy argument height
19339    GLMessage_DataType *arg_height = glmsg.add_args();
19340    arg_height->set_isarray(false);
19341    arg_height->set_type(GLMessage::DataType::INT);
19342    arg_height->add_intvalue(height);
19343
19344    // call function
19345    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19346    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19347    glContext->hooks->gl.glDrawTexxOES(x, y, z, width, height);
19348    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19349    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19350
19351    void *pointerArgs[] = {
19352    };
19353
19354    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19355                              threadStartTime, threadEndTime,
19356                              &glmsg, pointerArgs);
19357    glContext->traceGLMessage(&glmsg);
19358}
19359
19360void GLTrace_glDrawTexsvOES(const GLshort *coords) {
19361    GLMessage glmsg;
19362    GLTraceContext *glContext = getGLTraceContext();
19363
19364    glmsg.set_function(GLMessage::glDrawTexsvOES);
19365
19366    // copy argument coords
19367    GLMessage_DataType *arg_coords = glmsg.add_args();
19368    arg_coords->set_isarray(false);
19369    arg_coords->set_type(GLMessage::DataType::INT64);
19370    arg_coords->add_int64value((uintptr_t)coords);
19371
19372    // call function
19373    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19374    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19375    glContext->hooks->gl.glDrawTexsvOES(coords);
19376    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19377    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19378
19379    void *pointerArgs[] = {
19380        (void *) coords,
19381    };
19382
19383    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19384                              threadStartTime, threadEndTime,
19385                              &glmsg, pointerArgs);
19386    glContext->traceGLMessage(&glmsg);
19387}
19388
19389void GLTrace_glDrawTexivOES(const GLint *coords) {
19390    GLMessage glmsg;
19391    GLTraceContext *glContext = getGLTraceContext();
19392
19393    glmsg.set_function(GLMessage::glDrawTexivOES);
19394
19395    // copy argument coords
19396    GLMessage_DataType *arg_coords = glmsg.add_args();
19397    arg_coords->set_isarray(false);
19398    arg_coords->set_type(GLMessage::DataType::INT64);
19399    arg_coords->add_int64value((uintptr_t)coords);
19400
19401    // call function
19402    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19403    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19404    glContext->hooks->gl.glDrawTexivOES(coords);
19405    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19406    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19407
19408    void *pointerArgs[] = {
19409        (void *) coords,
19410    };
19411
19412    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19413                              threadStartTime, threadEndTime,
19414                              &glmsg, pointerArgs);
19415    glContext->traceGLMessage(&glmsg);
19416}
19417
19418void GLTrace_glDrawTexxvOES(const GLfixed *coords) {
19419    GLMessage glmsg;
19420    GLTraceContext *glContext = getGLTraceContext();
19421
19422    glmsg.set_function(GLMessage::glDrawTexxvOES);
19423
19424    // copy argument coords
19425    GLMessage_DataType *arg_coords = glmsg.add_args();
19426    arg_coords->set_isarray(false);
19427    arg_coords->set_type(GLMessage::DataType::INT64);
19428    arg_coords->add_int64value((uintptr_t)coords);
19429
19430    // call function
19431    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19432    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19433    glContext->hooks->gl.glDrawTexxvOES(coords);
19434    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19435    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19436
19437    void *pointerArgs[] = {
19438        (void *) coords,
19439    };
19440
19441    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19442                              threadStartTime, threadEndTime,
19443                              &glmsg, pointerArgs);
19444    glContext->traceGLMessage(&glmsg);
19445}
19446
19447void GLTrace_glDrawTexfOES(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height) {
19448    GLMessage glmsg;
19449    GLTraceContext *glContext = getGLTraceContext();
19450
19451    glmsg.set_function(GLMessage::glDrawTexfOES);
19452
19453    // copy argument x
19454    GLMessage_DataType *arg_x = glmsg.add_args();
19455    arg_x->set_isarray(false);
19456    arg_x->set_type(GLMessage::DataType::FLOAT);
19457    arg_x->add_floatvalue(x);
19458
19459    // copy argument y
19460    GLMessage_DataType *arg_y = glmsg.add_args();
19461    arg_y->set_isarray(false);
19462    arg_y->set_type(GLMessage::DataType::FLOAT);
19463    arg_y->add_floatvalue(y);
19464
19465    // copy argument z
19466    GLMessage_DataType *arg_z = glmsg.add_args();
19467    arg_z->set_isarray(false);
19468    arg_z->set_type(GLMessage::DataType::FLOAT);
19469    arg_z->add_floatvalue(z);
19470
19471    // copy argument width
19472    GLMessage_DataType *arg_width = glmsg.add_args();
19473    arg_width->set_isarray(false);
19474    arg_width->set_type(GLMessage::DataType::FLOAT);
19475    arg_width->add_floatvalue(width);
19476
19477    // copy argument height
19478    GLMessage_DataType *arg_height = glmsg.add_args();
19479    arg_height->set_isarray(false);
19480    arg_height->set_type(GLMessage::DataType::FLOAT);
19481    arg_height->add_floatvalue(height);
19482
19483    // call function
19484    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19485    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19486    glContext->hooks->gl.glDrawTexfOES(x, y, z, width, height);
19487    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19488    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19489
19490    void *pointerArgs[] = {
19491    };
19492
19493    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19494                              threadStartTime, threadEndTime,
19495                              &glmsg, pointerArgs);
19496    glContext->traceGLMessage(&glmsg);
19497}
19498
19499void GLTrace_glDrawTexfvOES(const GLfloat *coords) {
19500    GLMessage glmsg;
19501    GLTraceContext *glContext = getGLTraceContext();
19502
19503    glmsg.set_function(GLMessage::glDrawTexfvOES);
19504
19505    // copy argument coords
19506    GLMessage_DataType *arg_coords = glmsg.add_args();
19507    arg_coords->set_isarray(false);
19508    arg_coords->set_type(GLMessage::DataType::INT64);
19509    arg_coords->add_int64value((uintptr_t)coords);
19510
19511    // call function
19512    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19513    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19514    glContext->hooks->gl.glDrawTexfvOES(coords);
19515    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19516    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19517
19518    void *pointerArgs[] = {
19519        (void *) coords,
19520    };
19521
19522    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19523                              threadStartTime, threadEndTime,
19524                              &glmsg, pointerArgs);
19525    glContext->traceGLMessage(&glmsg);
19526}
19527
19528void GLTrace_glAlphaFuncxOES(GLenum func, GLclampx ref) {
19529    GLMessage glmsg;
19530    GLTraceContext *glContext = getGLTraceContext();
19531
19532    glmsg.set_function(GLMessage::glAlphaFuncxOES);
19533
19534    // copy argument func
19535    GLMessage_DataType *arg_func = glmsg.add_args();
19536    arg_func->set_isarray(false);
19537    arg_func->set_type(GLMessage::DataType::ENUM);
19538    arg_func->add_intvalue((int)func);
19539
19540    // copy argument ref
19541    GLMessage_DataType *arg_ref = glmsg.add_args();
19542    arg_ref->set_isarray(false);
19543    arg_ref->set_type(GLMessage::DataType::INT);
19544    arg_ref->add_intvalue(ref);
19545
19546    // call function
19547    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19548    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19549    glContext->hooks->gl.glAlphaFuncxOES(func, ref);
19550    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19551    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19552
19553    void *pointerArgs[] = {
19554    };
19555
19556    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19557                              threadStartTime, threadEndTime,
19558                              &glmsg, pointerArgs);
19559    glContext->traceGLMessage(&glmsg);
19560}
19561
19562void GLTrace_glClearColorxOES(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha) {
19563    GLMessage glmsg;
19564    GLTraceContext *glContext = getGLTraceContext();
19565
19566    glmsg.set_function(GLMessage::glClearColorxOES);
19567
19568    // copy argument red
19569    GLMessage_DataType *arg_red = glmsg.add_args();
19570    arg_red->set_isarray(false);
19571    arg_red->set_type(GLMessage::DataType::INT);
19572    arg_red->add_intvalue(red);
19573
19574    // copy argument green
19575    GLMessage_DataType *arg_green = glmsg.add_args();
19576    arg_green->set_isarray(false);
19577    arg_green->set_type(GLMessage::DataType::INT);
19578    arg_green->add_intvalue(green);
19579
19580    // copy argument blue
19581    GLMessage_DataType *arg_blue = glmsg.add_args();
19582    arg_blue->set_isarray(false);
19583    arg_blue->set_type(GLMessage::DataType::INT);
19584    arg_blue->add_intvalue(blue);
19585
19586    // copy argument alpha
19587    GLMessage_DataType *arg_alpha = glmsg.add_args();
19588    arg_alpha->set_isarray(false);
19589    arg_alpha->set_type(GLMessage::DataType::INT);
19590    arg_alpha->add_intvalue(alpha);
19591
19592    // call function
19593    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19594    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19595    glContext->hooks->gl.glClearColorxOES(red, green, blue, alpha);
19596    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19597    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19598
19599    void *pointerArgs[] = {
19600    };
19601
19602    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19603                              threadStartTime, threadEndTime,
19604                              &glmsg, pointerArgs);
19605    glContext->traceGLMessage(&glmsg);
19606}
19607
19608void GLTrace_glClearDepthxOES(GLclampx depth) {
19609    GLMessage glmsg;
19610    GLTraceContext *glContext = getGLTraceContext();
19611
19612    glmsg.set_function(GLMessage::glClearDepthxOES);
19613
19614    // copy argument depth
19615    GLMessage_DataType *arg_depth = glmsg.add_args();
19616    arg_depth->set_isarray(false);
19617    arg_depth->set_type(GLMessage::DataType::INT);
19618    arg_depth->add_intvalue(depth);
19619
19620    // call function
19621    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19622    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19623    glContext->hooks->gl.glClearDepthxOES(depth);
19624    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19625    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19626
19627    void *pointerArgs[] = {
19628    };
19629
19630    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19631                              threadStartTime, threadEndTime,
19632                              &glmsg, pointerArgs);
19633    glContext->traceGLMessage(&glmsg);
19634}
19635
19636void GLTrace_glClipPlanexOES(GLenum plane, const GLfixed *equation) {
19637    GLMessage glmsg;
19638    GLTraceContext *glContext = getGLTraceContext();
19639
19640    glmsg.set_function(GLMessage::glClipPlanexOES);
19641
19642    // copy argument plane
19643    GLMessage_DataType *arg_plane = glmsg.add_args();
19644    arg_plane->set_isarray(false);
19645    arg_plane->set_type(GLMessage::DataType::ENUM);
19646    arg_plane->add_intvalue((int)plane);
19647
19648    // copy argument equation
19649    GLMessage_DataType *arg_equation = glmsg.add_args();
19650    arg_equation->set_isarray(false);
19651    arg_equation->set_type(GLMessage::DataType::INT64);
19652    arg_equation->add_int64value((uintptr_t)equation);
19653
19654    // call function
19655    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19656    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19657    glContext->hooks->gl.glClipPlanexOES(plane, equation);
19658    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19659    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19660
19661    void *pointerArgs[] = {
19662        (void *) equation,
19663    };
19664
19665    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19666                              threadStartTime, threadEndTime,
19667                              &glmsg, pointerArgs);
19668    glContext->traceGLMessage(&glmsg);
19669}
19670
19671void GLTrace_glColor4xOES(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) {
19672    GLMessage glmsg;
19673    GLTraceContext *glContext = getGLTraceContext();
19674
19675    glmsg.set_function(GLMessage::glColor4xOES);
19676
19677    // copy argument red
19678    GLMessage_DataType *arg_red = glmsg.add_args();
19679    arg_red->set_isarray(false);
19680    arg_red->set_type(GLMessage::DataType::INT);
19681    arg_red->add_intvalue(red);
19682
19683    // copy argument green
19684    GLMessage_DataType *arg_green = glmsg.add_args();
19685    arg_green->set_isarray(false);
19686    arg_green->set_type(GLMessage::DataType::INT);
19687    arg_green->add_intvalue(green);
19688
19689    // copy argument blue
19690    GLMessage_DataType *arg_blue = glmsg.add_args();
19691    arg_blue->set_isarray(false);
19692    arg_blue->set_type(GLMessage::DataType::INT);
19693    arg_blue->add_intvalue(blue);
19694
19695    // copy argument alpha
19696    GLMessage_DataType *arg_alpha = glmsg.add_args();
19697    arg_alpha->set_isarray(false);
19698    arg_alpha->set_type(GLMessage::DataType::INT);
19699    arg_alpha->add_intvalue(alpha);
19700
19701    // call function
19702    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19703    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19704    glContext->hooks->gl.glColor4xOES(red, green, blue, alpha);
19705    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19706    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19707
19708    void *pointerArgs[] = {
19709    };
19710
19711    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19712                              threadStartTime, threadEndTime,
19713                              &glmsg, pointerArgs);
19714    glContext->traceGLMessage(&glmsg);
19715}
19716
19717void GLTrace_glDepthRangexOES(GLclampx zNear, GLclampx zFar) {
19718    GLMessage glmsg;
19719    GLTraceContext *glContext = getGLTraceContext();
19720
19721    glmsg.set_function(GLMessage::glDepthRangexOES);
19722
19723    // copy argument zNear
19724    GLMessage_DataType *arg_zNear = glmsg.add_args();
19725    arg_zNear->set_isarray(false);
19726    arg_zNear->set_type(GLMessage::DataType::INT);
19727    arg_zNear->add_intvalue(zNear);
19728
19729    // copy argument zFar
19730    GLMessage_DataType *arg_zFar = glmsg.add_args();
19731    arg_zFar->set_isarray(false);
19732    arg_zFar->set_type(GLMessage::DataType::INT);
19733    arg_zFar->add_intvalue(zFar);
19734
19735    // call function
19736    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19737    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19738    glContext->hooks->gl.glDepthRangexOES(zNear, zFar);
19739    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19740    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19741
19742    void *pointerArgs[] = {
19743    };
19744
19745    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19746                              threadStartTime, threadEndTime,
19747                              &glmsg, pointerArgs);
19748    glContext->traceGLMessage(&glmsg);
19749}
19750
19751void GLTrace_glFogxOES(GLenum pname, GLfixed param) {
19752    GLMessage glmsg;
19753    GLTraceContext *glContext = getGLTraceContext();
19754
19755    glmsg.set_function(GLMessage::glFogxOES);
19756
19757    // copy argument pname
19758    GLMessage_DataType *arg_pname = glmsg.add_args();
19759    arg_pname->set_isarray(false);
19760    arg_pname->set_type(GLMessage::DataType::ENUM);
19761    arg_pname->add_intvalue((int)pname);
19762
19763    // copy argument param
19764    GLMessage_DataType *arg_param = glmsg.add_args();
19765    arg_param->set_isarray(false);
19766    arg_param->set_type(GLMessage::DataType::INT);
19767    arg_param->add_intvalue(param);
19768
19769    // call function
19770    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19771    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19772    glContext->hooks->gl.glFogxOES(pname, param);
19773    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19774    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19775
19776    void *pointerArgs[] = {
19777    };
19778
19779    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19780                              threadStartTime, threadEndTime,
19781                              &glmsg, pointerArgs);
19782    glContext->traceGLMessage(&glmsg);
19783}
19784
19785void GLTrace_glFogxvOES(GLenum pname, const GLfixed *params) {
19786    GLMessage glmsg;
19787    GLTraceContext *glContext = getGLTraceContext();
19788
19789    glmsg.set_function(GLMessage::glFogxvOES);
19790
19791    // copy argument pname
19792    GLMessage_DataType *arg_pname = glmsg.add_args();
19793    arg_pname->set_isarray(false);
19794    arg_pname->set_type(GLMessage::DataType::ENUM);
19795    arg_pname->add_intvalue((int)pname);
19796
19797    // copy argument params
19798    GLMessage_DataType *arg_params = glmsg.add_args();
19799    arg_params->set_isarray(false);
19800    arg_params->set_type(GLMessage::DataType::INT64);
19801    arg_params->add_int64value((uintptr_t)params);
19802
19803    // call function
19804    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19805    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19806    glContext->hooks->gl.glFogxvOES(pname, params);
19807    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19808    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19809
19810    void *pointerArgs[] = {
19811        (void *) params,
19812    };
19813
19814    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19815                              threadStartTime, threadEndTime,
19816                              &glmsg, pointerArgs);
19817    glContext->traceGLMessage(&glmsg);
19818}
19819
19820void GLTrace_glFrustumxOES(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar) {
19821    GLMessage glmsg;
19822    GLTraceContext *glContext = getGLTraceContext();
19823
19824    glmsg.set_function(GLMessage::glFrustumxOES);
19825
19826    // copy argument left
19827    GLMessage_DataType *arg_left = glmsg.add_args();
19828    arg_left->set_isarray(false);
19829    arg_left->set_type(GLMessage::DataType::INT);
19830    arg_left->add_intvalue(left);
19831
19832    // copy argument right
19833    GLMessage_DataType *arg_right = glmsg.add_args();
19834    arg_right->set_isarray(false);
19835    arg_right->set_type(GLMessage::DataType::INT);
19836    arg_right->add_intvalue(right);
19837
19838    // copy argument bottom
19839    GLMessage_DataType *arg_bottom = glmsg.add_args();
19840    arg_bottom->set_isarray(false);
19841    arg_bottom->set_type(GLMessage::DataType::INT);
19842    arg_bottom->add_intvalue(bottom);
19843
19844    // copy argument top
19845    GLMessage_DataType *arg_top = glmsg.add_args();
19846    arg_top->set_isarray(false);
19847    arg_top->set_type(GLMessage::DataType::INT);
19848    arg_top->add_intvalue(top);
19849
19850    // copy argument zNear
19851    GLMessage_DataType *arg_zNear = glmsg.add_args();
19852    arg_zNear->set_isarray(false);
19853    arg_zNear->set_type(GLMessage::DataType::INT);
19854    arg_zNear->add_intvalue(zNear);
19855
19856    // copy argument zFar
19857    GLMessage_DataType *arg_zFar = glmsg.add_args();
19858    arg_zFar->set_isarray(false);
19859    arg_zFar->set_type(GLMessage::DataType::INT);
19860    arg_zFar->add_intvalue(zFar);
19861
19862    // call function
19863    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19864    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19865    glContext->hooks->gl.glFrustumxOES(left, right, bottom, top, zNear, zFar);
19866    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19867    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19868
19869    void *pointerArgs[] = {
19870    };
19871
19872    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19873                              threadStartTime, threadEndTime,
19874                              &glmsg, pointerArgs);
19875    glContext->traceGLMessage(&glmsg);
19876}
19877
19878void GLTrace_glGetClipPlanexOES(GLenum pname, GLfixed eqn[4]) {
19879    GLMessage glmsg;
19880    GLTraceContext *glContext = getGLTraceContext();
19881
19882    glmsg.set_function(GLMessage::glGetClipPlanexOES);
19883
19884    // copy argument pname
19885    GLMessage_DataType *arg_pname = glmsg.add_args();
19886    arg_pname->set_isarray(false);
19887    arg_pname->set_type(GLMessage::DataType::ENUM);
19888    arg_pname->add_intvalue((int)pname);
19889
19890    // copy argument eqn
19891    GLMessage_DataType *arg_eqn = glmsg.add_args();
19892    arg_eqn->set_isarray(false);
19893    arg_eqn->set_type(GLMessage::DataType::INT64);
19894    arg_eqn->add_int64value((uintptr_t)eqn);
19895
19896    // call function
19897    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19898    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19899    glContext->hooks->gl.glGetClipPlanexOES(pname, eqn);
19900    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19901    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19902
19903    void *pointerArgs[] = {
19904        (void *) eqn,
19905    };
19906
19907    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19908                              threadStartTime, threadEndTime,
19909                              &glmsg, pointerArgs);
19910    glContext->traceGLMessage(&glmsg);
19911}
19912
19913void GLTrace_glGetFixedvOES(GLenum pname, GLfixed *params) {
19914    GLMessage glmsg;
19915    GLTraceContext *glContext = getGLTraceContext();
19916
19917    glmsg.set_function(GLMessage::glGetFixedvOES);
19918
19919    // copy argument pname
19920    GLMessage_DataType *arg_pname = glmsg.add_args();
19921    arg_pname->set_isarray(false);
19922    arg_pname->set_type(GLMessage::DataType::ENUM);
19923    arg_pname->add_intvalue((int)pname);
19924
19925    // copy argument params
19926    GLMessage_DataType *arg_params = glmsg.add_args();
19927    arg_params->set_isarray(false);
19928    arg_params->set_type(GLMessage::DataType::INT64);
19929    arg_params->add_int64value((uintptr_t)params);
19930
19931    // call function
19932    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19933    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19934    glContext->hooks->gl.glGetFixedvOES(pname, params);
19935    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19936    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19937
19938    void *pointerArgs[] = {
19939        (void *) params,
19940    };
19941
19942    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19943                              threadStartTime, threadEndTime,
19944                              &glmsg, pointerArgs);
19945    glContext->traceGLMessage(&glmsg);
19946}
19947
19948void GLTrace_glGetLightxvOES(GLenum light, GLenum pname, GLfixed *params) {
19949    GLMessage glmsg;
19950    GLTraceContext *glContext = getGLTraceContext();
19951
19952    glmsg.set_function(GLMessage::glGetLightxvOES);
19953
19954    // copy argument light
19955    GLMessage_DataType *arg_light = glmsg.add_args();
19956    arg_light->set_isarray(false);
19957    arg_light->set_type(GLMessage::DataType::ENUM);
19958    arg_light->add_intvalue((int)light);
19959
19960    // copy argument pname
19961    GLMessage_DataType *arg_pname = glmsg.add_args();
19962    arg_pname->set_isarray(false);
19963    arg_pname->set_type(GLMessage::DataType::ENUM);
19964    arg_pname->add_intvalue((int)pname);
19965
19966    // copy argument params
19967    GLMessage_DataType *arg_params = glmsg.add_args();
19968    arg_params->set_isarray(false);
19969    arg_params->set_type(GLMessage::DataType::INT64);
19970    arg_params->add_int64value((uintptr_t)params);
19971
19972    // call function
19973    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
19974    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
19975    glContext->hooks->gl.glGetLightxvOES(light, pname, params);
19976    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
19977    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
19978
19979    void *pointerArgs[] = {
19980        (void *) params,
19981    };
19982
19983    fixupGLMessage(glContext, wallStartTime, wallEndTime,
19984                              threadStartTime, threadEndTime,
19985                              &glmsg, pointerArgs);
19986    glContext->traceGLMessage(&glmsg);
19987}
19988
19989void GLTrace_glGetMaterialxvOES(GLenum face, GLenum pname, GLfixed *params) {
19990    GLMessage glmsg;
19991    GLTraceContext *glContext = getGLTraceContext();
19992
19993    glmsg.set_function(GLMessage::glGetMaterialxvOES);
19994
19995    // copy argument face
19996    GLMessage_DataType *arg_face = glmsg.add_args();
19997    arg_face->set_isarray(false);
19998    arg_face->set_type(GLMessage::DataType::ENUM);
19999    arg_face->add_intvalue((int)face);
20000
20001    // copy argument pname
20002    GLMessage_DataType *arg_pname = glmsg.add_args();
20003    arg_pname->set_isarray(false);
20004    arg_pname->set_type(GLMessage::DataType::ENUM);
20005    arg_pname->add_intvalue((int)pname);
20006
20007    // copy argument params
20008    GLMessage_DataType *arg_params = glmsg.add_args();
20009    arg_params->set_isarray(false);
20010    arg_params->set_type(GLMessage::DataType::INT64);
20011    arg_params->add_int64value((uintptr_t)params);
20012
20013    // call function
20014    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20015    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20016    glContext->hooks->gl.glGetMaterialxvOES(face, pname, params);
20017    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20018    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20019
20020    void *pointerArgs[] = {
20021        (void *) params,
20022    };
20023
20024    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20025                              threadStartTime, threadEndTime,
20026                              &glmsg, pointerArgs);
20027    glContext->traceGLMessage(&glmsg);
20028}
20029
20030void GLTrace_glGetTexEnvxvOES(GLenum env, GLenum pname, GLfixed *params) {
20031    GLMessage glmsg;
20032    GLTraceContext *glContext = getGLTraceContext();
20033
20034    glmsg.set_function(GLMessage::glGetTexEnvxvOES);
20035
20036    // copy argument env
20037    GLMessage_DataType *arg_env = glmsg.add_args();
20038    arg_env->set_isarray(false);
20039    arg_env->set_type(GLMessage::DataType::ENUM);
20040    arg_env->add_intvalue((int)env);
20041
20042    // copy argument pname
20043    GLMessage_DataType *arg_pname = glmsg.add_args();
20044    arg_pname->set_isarray(false);
20045    arg_pname->set_type(GLMessage::DataType::ENUM);
20046    arg_pname->add_intvalue((int)pname);
20047
20048    // copy argument params
20049    GLMessage_DataType *arg_params = glmsg.add_args();
20050    arg_params->set_isarray(false);
20051    arg_params->set_type(GLMessage::DataType::INT64);
20052    arg_params->add_int64value((uintptr_t)params);
20053
20054    // call function
20055    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20056    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20057    glContext->hooks->gl.glGetTexEnvxvOES(env, pname, params);
20058    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20059    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20060
20061    void *pointerArgs[] = {
20062        (void *) params,
20063    };
20064
20065    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20066                              threadStartTime, threadEndTime,
20067                              &glmsg, pointerArgs);
20068    glContext->traceGLMessage(&glmsg);
20069}
20070
20071void GLTrace_glGetTexParameterxvOES(GLenum target, GLenum pname, GLfixed *params) {
20072    GLMessage glmsg;
20073    GLTraceContext *glContext = getGLTraceContext();
20074
20075    glmsg.set_function(GLMessage::glGetTexParameterxvOES);
20076
20077    // copy argument target
20078    GLMessage_DataType *arg_target = glmsg.add_args();
20079    arg_target->set_isarray(false);
20080    arg_target->set_type(GLMessage::DataType::ENUM);
20081    arg_target->add_intvalue((int)target);
20082
20083    // copy argument pname
20084    GLMessage_DataType *arg_pname = glmsg.add_args();
20085    arg_pname->set_isarray(false);
20086    arg_pname->set_type(GLMessage::DataType::ENUM);
20087    arg_pname->add_intvalue((int)pname);
20088
20089    // copy argument params
20090    GLMessage_DataType *arg_params = glmsg.add_args();
20091    arg_params->set_isarray(false);
20092    arg_params->set_type(GLMessage::DataType::INT64);
20093    arg_params->add_int64value((uintptr_t)params);
20094
20095    // call function
20096    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20097    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20098    glContext->hooks->gl.glGetTexParameterxvOES(target, pname, params);
20099    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20100    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20101
20102    void *pointerArgs[] = {
20103        (void *) params,
20104    };
20105
20106    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20107                              threadStartTime, threadEndTime,
20108                              &glmsg, pointerArgs);
20109    glContext->traceGLMessage(&glmsg);
20110}
20111
20112void GLTrace_glLightModelxOES(GLenum pname, GLfixed param) {
20113    GLMessage glmsg;
20114    GLTraceContext *glContext = getGLTraceContext();
20115
20116    glmsg.set_function(GLMessage::glLightModelxOES);
20117
20118    // copy argument pname
20119    GLMessage_DataType *arg_pname = glmsg.add_args();
20120    arg_pname->set_isarray(false);
20121    arg_pname->set_type(GLMessage::DataType::ENUM);
20122    arg_pname->add_intvalue((int)pname);
20123
20124    // copy argument param
20125    GLMessage_DataType *arg_param = glmsg.add_args();
20126    arg_param->set_isarray(false);
20127    arg_param->set_type(GLMessage::DataType::INT);
20128    arg_param->add_intvalue(param);
20129
20130    // call function
20131    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20132    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20133    glContext->hooks->gl.glLightModelxOES(pname, param);
20134    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20135    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20136
20137    void *pointerArgs[] = {
20138    };
20139
20140    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20141                              threadStartTime, threadEndTime,
20142                              &glmsg, pointerArgs);
20143    glContext->traceGLMessage(&glmsg);
20144}
20145
20146void GLTrace_glLightModelxvOES(GLenum pname, const GLfixed *params) {
20147    GLMessage glmsg;
20148    GLTraceContext *glContext = getGLTraceContext();
20149
20150    glmsg.set_function(GLMessage::glLightModelxvOES);
20151
20152    // copy argument pname
20153    GLMessage_DataType *arg_pname = glmsg.add_args();
20154    arg_pname->set_isarray(false);
20155    arg_pname->set_type(GLMessage::DataType::ENUM);
20156    arg_pname->add_intvalue((int)pname);
20157
20158    // copy argument params
20159    GLMessage_DataType *arg_params = glmsg.add_args();
20160    arg_params->set_isarray(false);
20161    arg_params->set_type(GLMessage::DataType::INT64);
20162    arg_params->add_int64value((uintptr_t)params);
20163
20164    // call function
20165    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20166    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20167    glContext->hooks->gl.glLightModelxvOES(pname, params);
20168    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20169    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20170
20171    void *pointerArgs[] = {
20172        (void *) params,
20173    };
20174
20175    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20176                              threadStartTime, threadEndTime,
20177                              &glmsg, pointerArgs);
20178    glContext->traceGLMessage(&glmsg);
20179}
20180
20181void GLTrace_glLightxOES(GLenum light, GLenum pname, GLfixed param) {
20182    GLMessage glmsg;
20183    GLTraceContext *glContext = getGLTraceContext();
20184
20185    glmsg.set_function(GLMessage::glLightxOES);
20186
20187    // copy argument light
20188    GLMessage_DataType *arg_light = glmsg.add_args();
20189    arg_light->set_isarray(false);
20190    arg_light->set_type(GLMessage::DataType::ENUM);
20191    arg_light->add_intvalue((int)light);
20192
20193    // copy argument pname
20194    GLMessage_DataType *arg_pname = glmsg.add_args();
20195    arg_pname->set_isarray(false);
20196    arg_pname->set_type(GLMessage::DataType::ENUM);
20197    arg_pname->add_intvalue((int)pname);
20198
20199    // copy argument param
20200    GLMessage_DataType *arg_param = glmsg.add_args();
20201    arg_param->set_isarray(false);
20202    arg_param->set_type(GLMessage::DataType::INT);
20203    arg_param->add_intvalue(param);
20204
20205    // call function
20206    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20207    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20208    glContext->hooks->gl.glLightxOES(light, pname, param);
20209    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20210    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20211
20212    void *pointerArgs[] = {
20213    };
20214
20215    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20216                              threadStartTime, threadEndTime,
20217                              &glmsg, pointerArgs);
20218    glContext->traceGLMessage(&glmsg);
20219}
20220
20221void GLTrace_glLightxvOES(GLenum light, GLenum pname, const GLfixed *params) {
20222    GLMessage glmsg;
20223    GLTraceContext *glContext = getGLTraceContext();
20224
20225    glmsg.set_function(GLMessage::glLightxvOES);
20226
20227    // copy argument light
20228    GLMessage_DataType *arg_light = glmsg.add_args();
20229    arg_light->set_isarray(false);
20230    arg_light->set_type(GLMessage::DataType::ENUM);
20231    arg_light->add_intvalue((int)light);
20232
20233    // copy argument pname
20234    GLMessage_DataType *arg_pname = glmsg.add_args();
20235    arg_pname->set_isarray(false);
20236    arg_pname->set_type(GLMessage::DataType::ENUM);
20237    arg_pname->add_intvalue((int)pname);
20238
20239    // copy argument params
20240    GLMessage_DataType *arg_params = glmsg.add_args();
20241    arg_params->set_isarray(false);
20242    arg_params->set_type(GLMessage::DataType::INT64);
20243    arg_params->add_int64value((uintptr_t)params);
20244
20245    // call function
20246    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20247    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20248    glContext->hooks->gl.glLightxvOES(light, pname, params);
20249    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20250    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20251
20252    void *pointerArgs[] = {
20253        (void *) params,
20254    };
20255
20256    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20257                              threadStartTime, threadEndTime,
20258                              &glmsg, pointerArgs);
20259    glContext->traceGLMessage(&glmsg);
20260}
20261
20262void GLTrace_glLineWidthxOES(GLfixed width) {
20263    GLMessage glmsg;
20264    GLTraceContext *glContext = getGLTraceContext();
20265
20266    glmsg.set_function(GLMessage::glLineWidthxOES);
20267
20268    // copy argument width
20269    GLMessage_DataType *arg_width = glmsg.add_args();
20270    arg_width->set_isarray(false);
20271    arg_width->set_type(GLMessage::DataType::INT);
20272    arg_width->add_intvalue(width);
20273
20274    // call function
20275    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20276    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20277    glContext->hooks->gl.glLineWidthxOES(width);
20278    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20279    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20280
20281    void *pointerArgs[] = {
20282    };
20283
20284    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20285                              threadStartTime, threadEndTime,
20286                              &glmsg, pointerArgs);
20287    glContext->traceGLMessage(&glmsg);
20288}
20289
20290void GLTrace_glLoadMatrixxOES(const GLfixed *m) {
20291    GLMessage glmsg;
20292    GLTraceContext *glContext = getGLTraceContext();
20293
20294    glmsg.set_function(GLMessage::glLoadMatrixxOES);
20295
20296    // copy argument m
20297    GLMessage_DataType *arg_m = glmsg.add_args();
20298    arg_m->set_isarray(false);
20299    arg_m->set_type(GLMessage::DataType::INT64);
20300    arg_m->add_int64value((uintptr_t)m);
20301
20302    // call function
20303    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20304    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20305    glContext->hooks->gl.glLoadMatrixxOES(m);
20306    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20307    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20308
20309    void *pointerArgs[] = {
20310        (void *) m,
20311    };
20312
20313    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20314                              threadStartTime, threadEndTime,
20315                              &glmsg, pointerArgs);
20316    glContext->traceGLMessage(&glmsg);
20317}
20318
20319void GLTrace_glMaterialxOES(GLenum face, GLenum pname, GLfixed param) {
20320    GLMessage glmsg;
20321    GLTraceContext *glContext = getGLTraceContext();
20322
20323    glmsg.set_function(GLMessage::glMaterialxOES);
20324
20325    // copy argument face
20326    GLMessage_DataType *arg_face = glmsg.add_args();
20327    arg_face->set_isarray(false);
20328    arg_face->set_type(GLMessage::DataType::ENUM);
20329    arg_face->add_intvalue((int)face);
20330
20331    // copy argument pname
20332    GLMessage_DataType *arg_pname = glmsg.add_args();
20333    arg_pname->set_isarray(false);
20334    arg_pname->set_type(GLMessage::DataType::ENUM);
20335    arg_pname->add_intvalue((int)pname);
20336
20337    // copy argument param
20338    GLMessage_DataType *arg_param = glmsg.add_args();
20339    arg_param->set_isarray(false);
20340    arg_param->set_type(GLMessage::DataType::INT);
20341    arg_param->add_intvalue(param);
20342
20343    // call function
20344    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20345    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20346    glContext->hooks->gl.glMaterialxOES(face, pname, param);
20347    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20348    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20349
20350    void *pointerArgs[] = {
20351    };
20352
20353    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20354                              threadStartTime, threadEndTime,
20355                              &glmsg, pointerArgs);
20356    glContext->traceGLMessage(&glmsg);
20357}
20358
20359void GLTrace_glMaterialxvOES(GLenum face, GLenum pname, const GLfixed *params) {
20360    GLMessage glmsg;
20361    GLTraceContext *glContext = getGLTraceContext();
20362
20363    glmsg.set_function(GLMessage::glMaterialxvOES);
20364
20365    // copy argument face
20366    GLMessage_DataType *arg_face = glmsg.add_args();
20367    arg_face->set_isarray(false);
20368    arg_face->set_type(GLMessage::DataType::ENUM);
20369    arg_face->add_intvalue((int)face);
20370
20371    // copy argument pname
20372    GLMessage_DataType *arg_pname = glmsg.add_args();
20373    arg_pname->set_isarray(false);
20374    arg_pname->set_type(GLMessage::DataType::ENUM);
20375    arg_pname->add_intvalue((int)pname);
20376
20377    // copy argument params
20378    GLMessage_DataType *arg_params = glmsg.add_args();
20379    arg_params->set_isarray(false);
20380    arg_params->set_type(GLMessage::DataType::INT64);
20381    arg_params->add_int64value((uintptr_t)params);
20382
20383    // call function
20384    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20385    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20386    glContext->hooks->gl.glMaterialxvOES(face, pname, params);
20387    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20388    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20389
20390    void *pointerArgs[] = {
20391        (void *) params,
20392    };
20393
20394    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20395                              threadStartTime, threadEndTime,
20396                              &glmsg, pointerArgs);
20397    glContext->traceGLMessage(&glmsg);
20398}
20399
20400void GLTrace_glMultMatrixxOES(const GLfixed *m) {
20401    GLMessage glmsg;
20402    GLTraceContext *glContext = getGLTraceContext();
20403
20404    glmsg.set_function(GLMessage::glMultMatrixxOES);
20405
20406    // copy argument m
20407    GLMessage_DataType *arg_m = glmsg.add_args();
20408    arg_m->set_isarray(false);
20409    arg_m->set_type(GLMessage::DataType::INT64);
20410    arg_m->add_int64value((uintptr_t)m);
20411
20412    // call function
20413    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20414    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20415    glContext->hooks->gl.glMultMatrixxOES(m);
20416    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20417    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20418
20419    void *pointerArgs[] = {
20420        (void *) m,
20421    };
20422
20423    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20424                              threadStartTime, threadEndTime,
20425                              &glmsg, pointerArgs);
20426    glContext->traceGLMessage(&glmsg);
20427}
20428
20429void GLTrace_glMultiTexCoord4xOES(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q) {
20430    GLMessage glmsg;
20431    GLTraceContext *glContext = getGLTraceContext();
20432
20433    glmsg.set_function(GLMessage::glMultiTexCoord4xOES);
20434
20435    // copy argument target
20436    GLMessage_DataType *arg_target = glmsg.add_args();
20437    arg_target->set_isarray(false);
20438    arg_target->set_type(GLMessage::DataType::ENUM);
20439    arg_target->add_intvalue((int)target);
20440
20441    // copy argument s
20442    GLMessage_DataType *arg_s = glmsg.add_args();
20443    arg_s->set_isarray(false);
20444    arg_s->set_type(GLMessage::DataType::INT);
20445    arg_s->add_intvalue(s);
20446
20447    // copy argument t
20448    GLMessage_DataType *arg_t = glmsg.add_args();
20449    arg_t->set_isarray(false);
20450    arg_t->set_type(GLMessage::DataType::INT);
20451    arg_t->add_intvalue(t);
20452
20453    // copy argument r
20454    GLMessage_DataType *arg_r = glmsg.add_args();
20455    arg_r->set_isarray(false);
20456    arg_r->set_type(GLMessage::DataType::INT);
20457    arg_r->add_intvalue(r);
20458
20459    // copy argument q
20460    GLMessage_DataType *arg_q = glmsg.add_args();
20461    arg_q->set_isarray(false);
20462    arg_q->set_type(GLMessage::DataType::INT);
20463    arg_q->add_intvalue(q);
20464
20465    // call function
20466    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20467    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20468    glContext->hooks->gl.glMultiTexCoord4xOES(target, s, t, r, q);
20469    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20470    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20471
20472    void *pointerArgs[] = {
20473    };
20474
20475    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20476                              threadStartTime, threadEndTime,
20477                              &glmsg, pointerArgs);
20478    glContext->traceGLMessage(&glmsg);
20479}
20480
20481void GLTrace_glNormal3xOES(GLfixed nx, GLfixed ny, GLfixed nz) {
20482    GLMessage glmsg;
20483    GLTraceContext *glContext = getGLTraceContext();
20484
20485    glmsg.set_function(GLMessage::glNormal3xOES);
20486
20487    // copy argument nx
20488    GLMessage_DataType *arg_nx = glmsg.add_args();
20489    arg_nx->set_isarray(false);
20490    arg_nx->set_type(GLMessage::DataType::INT);
20491    arg_nx->add_intvalue(nx);
20492
20493    // copy argument ny
20494    GLMessage_DataType *arg_ny = glmsg.add_args();
20495    arg_ny->set_isarray(false);
20496    arg_ny->set_type(GLMessage::DataType::INT);
20497    arg_ny->add_intvalue(ny);
20498
20499    // copy argument nz
20500    GLMessage_DataType *arg_nz = glmsg.add_args();
20501    arg_nz->set_isarray(false);
20502    arg_nz->set_type(GLMessage::DataType::INT);
20503    arg_nz->add_intvalue(nz);
20504
20505    // call function
20506    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20507    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20508    glContext->hooks->gl.glNormal3xOES(nx, ny, nz);
20509    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20510    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20511
20512    void *pointerArgs[] = {
20513    };
20514
20515    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20516                              threadStartTime, threadEndTime,
20517                              &glmsg, pointerArgs);
20518    glContext->traceGLMessage(&glmsg);
20519}
20520
20521void GLTrace_glOrthoxOES(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar) {
20522    GLMessage glmsg;
20523    GLTraceContext *glContext = getGLTraceContext();
20524
20525    glmsg.set_function(GLMessage::glOrthoxOES);
20526
20527    // copy argument left
20528    GLMessage_DataType *arg_left = glmsg.add_args();
20529    arg_left->set_isarray(false);
20530    arg_left->set_type(GLMessage::DataType::INT);
20531    arg_left->add_intvalue(left);
20532
20533    // copy argument right
20534    GLMessage_DataType *arg_right = glmsg.add_args();
20535    arg_right->set_isarray(false);
20536    arg_right->set_type(GLMessage::DataType::INT);
20537    arg_right->add_intvalue(right);
20538
20539    // copy argument bottom
20540    GLMessage_DataType *arg_bottom = glmsg.add_args();
20541    arg_bottom->set_isarray(false);
20542    arg_bottom->set_type(GLMessage::DataType::INT);
20543    arg_bottom->add_intvalue(bottom);
20544
20545    // copy argument top
20546    GLMessage_DataType *arg_top = glmsg.add_args();
20547    arg_top->set_isarray(false);
20548    arg_top->set_type(GLMessage::DataType::INT);
20549    arg_top->add_intvalue(top);
20550
20551    // copy argument zNear
20552    GLMessage_DataType *arg_zNear = glmsg.add_args();
20553    arg_zNear->set_isarray(false);
20554    arg_zNear->set_type(GLMessage::DataType::INT);
20555    arg_zNear->add_intvalue(zNear);
20556
20557    // copy argument zFar
20558    GLMessage_DataType *arg_zFar = glmsg.add_args();
20559    arg_zFar->set_isarray(false);
20560    arg_zFar->set_type(GLMessage::DataType::INT);
20561    arg_zFar->add_intvalue(zFar);
20562
20563    // call function
20564    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20565    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20566    glContext->hooks->gl.glOrthoxOES(left, right, bottom, top, zNear, zFar);
20567    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20568    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20569
20570    void *pointerArgs[] = {
20571    };
20572
20573    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20574                              threadStartTime, threadEndTime,
20575                              &glmsg, pointerArgs);
20576    glContext->traceGLMessage(&glmsg);
20577}
20578
20579void GLTrace_glPointParameterxOES(GLenum pname, GLfixed param) {
20580    GLMessage glmsg;
20581    GLTraceContext *glContext = getGLTraceContext();
20582
20583    glmsg.set_function(GLMessage::glPointParameterxOES);
20584
20585    // copy argument pname
20586    GLMessage_DataType *arg_pname = glmsg.add_args();
20587    arg_pname->set_isarray(false);
20588    arg_pname->set_type(GLMessage::DataType::ENUM);
20589    arg_pname->add_intvalue((int)pname);
20590
20591    // copy argument param
20592    GLMessage_DataType *arg_param = glmsg.add_args();
20593    arg_param->set_isarray(false);
20594    arg_param->set_type(GLMessage::DataType::INT);
20595    arg_param->add_intvalue(param);
20596
20597    // call function
20598    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20599    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20600    glContext->hooks->gl.glPointParameterxOES(pname, param);
20601    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20602    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20603
20604    void *pointerArgs[] = {
20605    };
20606
20607    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20608                              threadStartTime, threadEndTime,
20609                              &glmsg, pointerArgs);
20610    glContext->traceGLMessage(&glmsg);
20611}
20612
20613void GLTrace_glPointParameterxvOES(GLenum pname, const GLfixed *params) {
20614    GLMessage glmsg;
20615    GLTraceContext *glContext = getGLTraceContext();
20616
20617    glmsg.set_function(GLMessage::glPointParameterxvOES);
20618
20619    // copy argument pname
20620    GLMessage_DataType *arg_pname = glmsg.add_args();
20621    arg_pname->set_isarray(false);
20622    arg_pname->set_type(GLMessage::DataType::ENUM);
20623    arg_pname->add_intvalue((int)pname);
20624
20625    // copy argument params
20626    GLMessage_DataType *arg_params = glmsg.add_args();
20627    arg_params->set_isarray(false);
20628    arg_params->set_type(GLMessage::DataType::INT64);
20629    arg_params->add_int64value((uintptr_t)params);
20630
20631    // call function
20632    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20633    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20634    glContext->hooks->gl.glPointParameterxvOES(pname, params);
20635    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20636    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20637
20638    void *pointerArgs[] = {
20639        (void *) params,
20640    };
20641
20642    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20643                              threadStartTime, threadEndTime,
20644                              &glmsg, pointerArgs);
20645    glContext->traceGLMessage(&glmsg);
20646}
20647
20648void GLTrace_glPointSizexOES(GLfixed size) {
20649    GLMessage glmsg;
20650    GLTraceContext *glContext = getGLTraceContext();
20651
20652    glmsg.set_function(GLMessage::glPointSizexOES);
20653
20654    // copy argument size
20655    GLMessage_DataType *arg_size = glmsg.add_args();
20656    arg_size->set_isarray(false);
20657    arg_size->set_type(GLMessage::DataType::INT);
20658    arg_size->add_intvalue(size);
20659
20660    // call function
20661    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20662    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20663    glContext->hooks->gl.glPointSizexOES(size);
20664    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20665    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20666
20667    void *pointerArgs[] = {
20668    };
20669
20670    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20671                              threadStartTime, threadEndTime,
20672                              &glmsg, pointerArgs);
20673    glContext->traceGLMessage(&glmsg);
20674}
20675
20676void GLTrace_glPolygonOffsetxOES(GLfixed factor, GLfixed units) {
20677    GLMessage glmsg;
20678    GLTraceContext *glContext = getGLTraceContext();
20679
20680    glmsg.set_function(GLMessage::glPolygonOffsetxOES);
20681
20682    // copy argument factor
20683    GLMessage_DataType *arg_factor = glmsg.add_args();
20684    arg_factor->set_isarray(false);
20685    arg_factor->set_type(GLMessage::DataType::INT);
20686    arg_factor->add_intvalue(factor);
20687
20688    // copy argument units
20689    GLMessage_DataType *arg_units = glmsg.add_args();
20690    arg_units->set_isarray(false);
20691    arg_units->set_type(GLMessage::DataType::INT);
20692    arg_units->add_intvalue(units);
20693
20694    // call function
20695    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20696    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20697    glContext->hooks->gl.glPolygonOffsetxOES(factor, units);
20698    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20699    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20700
20701    void *pointerArgs[] = {
20702    };
20703
20704    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20705                              threadStartTime, threadEndTime,
20706                              &glmsg, pointerArgs);
20707    glContext->traceGLMessage(&glmsg);
20708}
20709
20710void GLTrace_glRotatexOES(GLfixed angle, GLfixed x, GLfixed y, GLfixed z) {
20711    GLMessage glmsg;
20712    GLTraceContext *glContext = getGLTraceContext();
20713
20714    glmsg.set_function(GLMessage::glRotatexOES);
20715
20716    // copy argument angle
20717    GLMessage_DataType *arg_angle = glmsg.add_args();
20718    arg_angle->set_isarray(false);
20719    arg_angle->set_type(GLMessage::DataType::INT);
20720    arg_angle->add_intvalue(angle);
20721
20722    // copy argument x
20723    GLMessage_DataType *arg_x = glmsg.add_args();
20724    arg_x->set_isarray(false);
20725    arg_x->set_type(GLMessage::DataType::INT);
20726    arg_x->add_intvalue(x);
20727
20728    // copy argument y
20729    GLMessage_DataType *arg_y = glmsg.add_args();
20730    arg_y->set_isarray(false);
20731    arg_y->set_type(GLMessage::DataType::INT);
20732    arg_y->add_intvalue(y);
20733
20734    // copy argument z
20735    GLMessage_DataType *arg_z = glmsg.add_args();
20736    arg_z->set_isarray(false);
20737    arg_z->set_type(GLMessage::DataType::INT);
20738    arg_z->add_intvalue(z);
20739
20740    // call function
20741    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20742    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20743    glContext->hooks->gl.glRotatexOES(angle, x, y, z);
20744    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20745    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20746
20747    void *pointerArgs[] = {
20748    };
20749
20750    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20751                              threadStartTime, threadEndTime,
20752                              &glmsg, pointerArgs);
20753    glContext->traceGLMessage(&glmsg);
20754}
20755
20756void GLTrace_glSampleCoveragexOES(GLclampx value, GLboolean invert) {
20757    GLMessage glmsg;
20758    GLTraceContext *glContext = getGLTraceContext();
20759
20760    glmsg.set_function(GLMessage::glSampleCoveragexOES);
20761
20762    // copy argument value
20763    GLMessage_DataType *arg_value = glmsg.add_args();
20764    arg_value->set_isarray(false);
20765    arg_value->set_type(GLMessage::DataType::INT);
20766    arg_value->add_intvalue(value);
20767
20768    // copy argument invert
20769    GLMessage_DataType *arg_invert = glmsg.add_args();
20770    arg_invert->set_isarray(false);
20771    arg_invert->set_type(GLMessage::DataType::BOOL);
20772    arg_invert->add_boolvalue(invert);
20773
20774    // call function
20775    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20776    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20777    glContext->hooks->gl.glSampleCoveragexOES(value, invert);
20778    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20779    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20780
20781    void *pointerArgs[] = {
20782    };
20783
20784    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20785                              threadStartTime, threadEndTime,
20786                              &glmsg, pointerArgs);
20787    glContext->traceGLMessage(&glmsg);
20788}
20789
20790void GLTrace_glScalexOES(GLfixed x, GLfixed y, GLfixed z) {
20791    GLMessage glmsg;
20792    GLTraceContext *glContext = getGLTraceContext();
20793
20794    glmsg.set_function(GLMessage::glScalexOES);
20795
20796    // copy argument x
20797    GLMessage_DataType *arg_x = glmsg.add_args();
20798    arg_x->set_isarray(false);
20799    arg_x->set_type(GLMessage::DataType::INT);
20800    arg_x->add_intvalue(x);
20801
20802    // copy argument y
20803    GLMessage_DataType *arg_y = glmsg.add_args();
20804    arg_y->set_isarray(false);
20805    arg_y->set_type(GLMessage::DataType::INT);
20806    arg_y->add_intvalue(y);
20807
20808    // copy argument z
20809    GLMessage_DataType *arg_z = glmsg.add_args();
20810    arg_z->set_isarray(false);
20811    arg_z->set_type(GLMessage::DataType::INT);
20812    arg_z->add_intvalue(z);
20813
20814    // call function
20815    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20816    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20817    glContext->hooks->gl.glScalexOES(x, y, z);
20818    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20819    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20820
20821    void *pointerArgs[] = {
20822    };
20823
20824    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20825                              threadStartTime, threadEndTime,
20826                              &glmsg, pointerArgs);
20827    glContext->traceGLMessage(&glmsg);
20828}
20829
20830void GLTrace_glTexEnvxOES(GLenum target, GLenum pname, GLfixed param) {
20831    GLMessage glmsg;
20832    GLTraceContext *glContext = getGLTraceContext();
20833
20834    glmsg.set_function(GLMessage::glTexEnvxOES);
20835
20836    // copy argument target
20837    GLMessage_DataType *arg_target = glmsg.add_args();
20838    arg_target->set_isarray(false);
20839    arg_target->set_type(GLMessage::DataType::ENUM);
20840    arg_target->add_intvalue((int)target);
20841
20842    // copy argument pname
20843    GLMessage_DataType *arg_pname = glmsg.add_args();
20844    arg_pname->set_isarray(false);
20845    arg_pname->set_type(GLMessage::DataType::ENUM);
20846    arg_pname->add_intvalue((int)pname);
20847
20848    // copy argument param
20849    GLMessage_DataType *arg_param = glmsg.add_args();
20850    arg_param->set_isarray(false);
20851    arg_param->set_type(GLMessage::DataType::INT);
20852    arg_param->add_intvalue(param);
20853
20854    // call function
20855    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20856    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20857    glContext->hooks->gl.glTexEnvxOES(target, pname, param);
20858    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20859    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20860
20861    void *pointerArgs[] = {
20862    };
20863
20864    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20865                              threadStartTime, threadEndTime,
20866                              &glmsg, pointerArgs);
20867    glContext->traceGLMessage(&glmsg);
20868}
20869
20870void GLTrace_glTexEnvxvOES(GLenum target, GLenum pname, const GLfixed *params) {
20871    GLMessage glmsg;
20872    GLTraceContext *glContext = getGLTraceContext();
20873
20874    glmsg.set_function(GLMessage::glTexEnvxvOES);
20875
20876    // copy argument target
20877    GLMessage_DataType *arg_target = glmsg.add_args();
20878    arg_target->set_isarray(false);
20879    arg_target->set_type(GLMessage::DataType::ENUM);
20880    arg_target->add_intvalue((int)target);
20881
20882    // copy argument pname
20883    GLMessage_DataType *arg_pname = glmsg.add_args();
20884    arg_pname->set_isarray(false);
20885    arg_pname->set_type(GLMessage::DataType::ENUM);
20886    arg_pname->add_intvalue((int)pname);
20887
20888    // copy argument params
20889    GLMessage_DataType *arg_params = glmsg.add_args();
20890    arg_params->set_isarray(false);
20891    arg_params->set_type(GLMessage::DataType::INT64);
20892    arg_params->add_int64value((uintptr_t)params);
20893
20894    // call function
20895    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20896    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20897    glContext->hooks->gl.glTexEnvxvOES(target, pname, params);
20898    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20899    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20900
20901    void *pointerArgs[] = {
20902        (void *) params,
20903    };
20904
20905    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20906                              threadStartTime, threadEndTime,
20907                              &glmsg, pointerArgs);
20908    glContext->traceGLMessage(&glmsg);
20909}
20910
20911void GLTrace_glTexParameterxOES(GLenum target, GLenum pname, GLfixed param) {
20912    GLMessage glmsg;
20913    GLTraceContext *glContext = getGLTraceContext();
20914
20915    glmsg.set_function(GLMessage::glTexParameterxOES);
20916
20917    // copy argument target
20918    GLMessage_DataType *arg_target = glmsg.add_args();
20919    arg_target->set_isarray(false);
20920    arg_target->set_type(GLMessage::DataType::ENUM);
20921    arg_target->add_intvalue((int)target);
20922
20923    // copy argument pname
20924    GLMessage_DataType *arg_pname = glmsg.add_args();
20925    arg_pname->set_isarray(false);
20926    arg_pname->set_type(GLMessage::DataType::ENUM);
20927    arg_pname->add_intvalue((int)pname);
20928
20929    // copy argument param
20930    GLMessage_DataType *arg_param = glmsg.add_args();
20931    arg_param->set_isarray(false);
20932    arg_param->set_type(GLMessage::DataType::INT);
20933    arg_param->add_intvalue(param);
20934
20935    // call function
20936    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20937    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20938    glContext->hooks->gl.glTexParameterxOES(target, pname, param);
20939    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20940    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20941
20942    void *pointerArgs[] = {
20943    };
20944
20945    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20946                              threadStartTime, threadEndTime,
20947                              &glmsg, pointerArgs);
20948    glContext->traceGLMessage(&glmsg);
20949}
20950
20951void GLTrace_glTexParameterxvOES(GLenum target, GLenum pname, const GLfixed *params) {
20952    GLMessage glmsg;
20953    GLTraceContext *glContext = getGLTraceContext();
20954
20955    glmsg.set_function(GLMessage::glTexParameterxvOES);
20956
20957    // copy argument target
20958    GLMessage_DataType *arg_target = glmsg.add_args();
20959    arg_target->set_isarray(false);
20960    arg_target->set_type(GLMessage::DataType::ENUM);
20961    arg_target->add_intvalue((int)target);
20962
20963    // copy argument pname
20964    GLMessage_DataType *arg_pname = glmsg.add_args();
20965    arg_pname->set_isarray(false);
20966    arg_pname->set_type(GLMessage::DataType::ENUM);
20967    arg_pname->add_intvalue((int)pname);
20968
20969    // copy argument params
20970    GLMessage_DataType *arg_params = glmsg.add_args();
20971    arg_params->set_isarray(false);
20972    arg_params->set_type(GLMessage::DataType::INT64);
20973    arg_params->add_int64value((uintptr_t)params);
20974
20975    // call function
20976    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
20977    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
20978    glContext->hooks->gl.glTexParameterxvOES(target, pname, params);
20979    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
20980    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
20981
20982    void *pointerArgs[] = {
20983        (void *) params,
20984    };
20985
20986    fixupGLMessage(glContext, wallStartTime, wallEndTime,
20987                              threadStartTime, threadEndTime,
20988                              &glmsg, pointerArgs);
20989    glContext->traceGLMessage(&glmsg);
20990}
20991
20992void GLTrace_glTranslatexOES(GLfixed x, GLfixed y, GLfixed z) {
20993    GLMessage glmsg;
20994    GLTraceContext *glContext = getGLTraceContext();
20995
20996    glmsg.set_function(GLMessage::glTranslatexOES);
20997
20998    // copy argument x
20999    GLMessage_DataType *arg_x = glmsg.add_args();
21000    arg_x->set_isarray(false);
21001    arg_x->set_type(GLMessage::DataType::INT);
21002    arg_x->add_intvalue(x);
21003
21004    // copy argument y
21005    GLMessage_DataType *arg_y = glmsg.add_args();
21006    arg_y->set_isarray(false);
21007    arg_y->set_type(GLMessage::DataType::INT);
21008    arg_y->add_intvalue(y);
21009
21010    // copy argument z
21011    GLMessage_DataType *arg_z = glmsg.add_args();
21012    arg_z->set_isarray(false);
21013    arg_z->set_type(GLMessage::DataType::INT);
21014    arg_z->add_intvalue(z);
21015
21016    // call function
21017    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21018    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21019    glContext->hooks->gl.glTranslatexOES(x, y, z);
21020    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21021    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21022
21023    void *pointerArgs[] = {
21024    };
21025
21026    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21027                              threadStartTime, threadEndTime,
21028                              &glmsg, pointerArgs);
21029    glContext->traceGLMessage(&glmsg);
21030}
21031
21032GLboolean GLTrace_glIsRenderbufferOES(GLuint renderbuffer) {
21033    GLMessage glmsg;
21034    GLTraceContext *glContext = getGLTraceContext();
21035
21036    glmsg.set_function(GLMessage::glIsRenderbufferOES);
21037
21038    // copy argument renderbuffer
21039    GLMessage_DataType *arg_renderbuffer = glmsg.add_args();
21040    arg_renderbuffer->set_isarray(false);
21041    arg_renderbuffer->set_type(GLMessage::DataType::INT);
21042    arg_renderbuffer->add_intvalue(renderbuffer);
21043
21044    // call function
21045    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21046    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21047    GLboolean retValue = glContext->hooks->gl.glIsRenderbufferOES(renderbuffer);
21048    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21049    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21050
21051    // set return value
21052    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
21053    rt->set_isarray(false);
21054    rt->set_type(GLMessage::DataType::BOOL);
21055    rt->add_boolvalue(retValue);
21056
21057    void *pointerArgs[] = {
21058    };
21059
21060    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21061                              threadStartTime, threadEndTime,
21062                              &glmsg, pointerArgs);
21063    glContext->traceGLMessage(&glmsg);
21064
21065    return retValue;
21066}
21067
21068void GLTrace_glBindRenderbufferOES(GLenum target, GLuint renderbuffer) {
21069    GLMessage glmsg;
21070    GLTraceContext *glContext = getGLTraceContext();
21071
21072    glmsg.set_function(GLMessage::glBindRenderbufferOES);
21073
21074    // copy argument target
21075    GLMessage_DataType *arg_target = glmsg.add_args();
21076    arg_target->set_isarray(false);
21077    arg_target->set_type(GLMessage::DataType::ENUM);
21078    arg_target->add_intvalue((int)target);
21079
21080    // copy argument renderbuffer
21081    GLMessage_DataType *arg_renderbuffer = glmsg.add_args();
21082    arg_renderbuffer->set_isarray(false);
21083    arg_renderbuffer->set_type(GLMessage::DataType::INT);
21084    arg_renderbuffer->add_intvalue(renderbuffer);
21085
21086    // call function
21087    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21088    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21089    glContext->hooks->gl.glBindRenderbufferOES(target, renderbuffer);
21090    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21091    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21092
21093    void *pointerArgs[] = {
21094    };
21095
21096    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21097                              threadStartTime, threadEndTime,
21098                              &glmsg, pointerArgs);
21099    glContext->traceGLMessage(&glmsg);
21100}
21101
21102void GLTrace_glDeleteRenderbuffersOES(GLsizei n, const GLuint* renderbuffers) {
21103    GLMessage glmsg;
21104    GLTraceContext *glContext = getGLTraceContext();
21105
21106    glmsg.set_function(GLMessage::glDeleteRenderbuffersOES);
21107
21108    // copy argument n
21109    GLMessage_DataType *arg_n = glmsg.add_args();
21110    arg_n->set_isarray(false);
21111    arg_n->set_type(GLMessage::DataType::INT);
21112    arg_n->add_intvalue(n);
21113
21114    // copy argument renderbuffers
21115    GLMessage_DataType *arg_renderbuffers = glmsg.add_args();
21116    arg_renderbuffers->set_isarray(false);
21117    arg_renderbuffers->set_type(GLMessage::DataType::INT64);
21118    arg_renderbuffers->add_int64value((uintptr_t)renderbuffers);
21119
21120    // call function
21121    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21122    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21123    glContext->hooks->gl.glDeleteRenderbuffersOES(n, renderbuffers);
21124    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21125    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21126
21127    void *pointerArgs[] = {
21128        (void *) renderbuffers,
21129    };
21130
21131    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21132                              threadStartTime, threadEndTime,
21133                              &glmsg, pointerArgs);
21134    glContext->traceGLMessage(&glmsg);
21135}
21136
21137void GLTrace_glGenRenderbuffersOES(GLsizei n, GLuint* renderbuffers) {
21138    GLMessage glmsg;
21139    GLTraceContext *glContext = getGLTraceContext();
21140
21141    glmsg.set_function(GLMessage::glGenRenderbuffersOES);
21142
21143    // copy argument n
21144    GLMessage_DataType *arg_n = glmsg.add_args();
21145    arg_n->set_isarray(false);
21146    arg_n->set_type(GLMessage::DataType::INT);
21147    arg_n->add_intvalue(n);
21148
21149    // copy argument renderbuffers
21150    GLMessage_DataType *arg_renderbuffers = glmsg.add_args();
21151    arg_renderbuffers->set_isarray(false);
21152    arg_renderbuffers->set_type(GLMessage::DataType::INT64);
21153    arg_renderbuffers->add_int64value((uintptr_t)renderbuffers);
21154
21155    // call function
21156    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21157    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21158    glContext->hooks->gl.glGenRenderbuffersOES(n, renderbuffers);
21159    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21160    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21161
21162    void *pointerArgs[] = {
21163        (void *) renderbuffers,
21164    };
21165
21166    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21167                              threadStartTime, threadEndTime,
21168                              &glmsg, pointerArgs);
21169    glContext->traceGLMessage(&glmsg);
21170}
21171
21172void GLTrace_glRenderbufferStorageOES(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) {
21173    GLMessage glmsg;
21174    GLTraceContext *glContext = getGLTraceContext();
21175
21176    glmsg.set_function(GLMessage::glRenderbufferStorageOES);
21177
21178    // copy argument target
21179    GLMessage_DataType *arg_target = glmsg.add_args();
21180    arg_target->set_isarray(false);
21181    arg_target->set_type(GLMessage::DataType::ENUM);
21182    arg_target->add_intvalue((int)target);
21183
21184    // copy argument internalformat
21185    GLMessage_DataType *arg_internalformat = glmsg.add_args();
21186    arg_internalformat->set_isarray(false);
21187    arg_internalformat->set_type(GLMessage::DataType::ENUM);
21188    arg_internalformat->add_intvalue((int)internalformat);
21189
21190    // copy argument width
21191    GLMessage_DataType *arg_width = glmsg.add_args();
21192    arg_width->set_isarray(false);
21193    arg_width->set_type(GLMessage::DataType::INT);
21194    arg_width->add_intvalue(width);
21195
21196    // copy argument height
21197    GLMessage_DataType *arg_height = glmsg.add_args();
21198    arg_height->set_isarray(false);
21199    arg_height->set_type(GLMessage::DataType::INT);
21200    arg_height->add_intvalue(height);
21201
21202    // call function
21203    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21204    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21205    glContext->hooks->gl.glRenderbufferStorageOES(target, internalformat, width, height);
21206    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21207    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21208
21209    void *pointerArgs[] = {
21210    };
21211
21212    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21213                              threadStartTime, threadEndTime,
21214                              &glmsg, pointerArgs);
21215    glContext->traceGLMessage(&glmsg);
21216}
21217
21218void GLTrace_glGetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint* params) {
21219    GLMessage glmsg;
21220    GLTraceContext *glContext = getGLTraceContext();
21221
21222    glmsg.set_function(GLMessage::glGetRenderbufferParameterivOES);
21223
21224    // copy argument target
21225    GLMessage_DataType *arg_target = glmsg.add_args();
21226    arg_target->set_isarray(false);
21227    arg_target->set_type(GLMessage::DataType::ENUM);
21228    arg_target->add_intvalue((int)target);
21229
21230    // copy argument pname
21231    GLMessage_DataType *arg_pname = glmsg.add_args();
21232    arg_pname->set_isarray(false);
21233    arg_pname->set_type(GLMessage::DataType::ENUM);
21234    arg_pname->add_intvalue((int)pname);
21235
21236    // copy argument params
21237    GLMessage_DataType *arg_params = glmsg.add_args();
21238    arg_params->set_isarray(false);
21239    arg_params->set_type(GLMessage::DataType::INT64);
21240    arg_params->add_int64value((uintptr_t)params);
21241
21242    // call function
21243    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21244    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21245    glContext->hooks->gl.glGetRenderbufferParameterivOES(target, pname, params);
21246    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21247    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21248
21249    void *pointerArgs[] = {
21250        (void *) params,
21251    };
21252
21253    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21254                              threadStartTime, threadEndTime,
21255                              &glmsg, pointerArgs);
21256    glContext->traceGLMessage(&glmsg);
21257}
21258
21259GLboolean GLTrace_glIsFramebufferOES(GLuint framebuffer) {
21260    GLMessage glmsg;
21261    GLTraceContext *glContext = getGLTraceContext();
21262
21263    glmsg.set_function(GLMessage::glIsFramebufferOES);
21264
21265    // copy argument framebuffer
21266    GLMessage_DataType *arg_framebuffer = glmsg.add_args();
21267    arg_framebuffer->set_isarray(false);
21268    arg_framebuffer->set_type(GLMessage::DataType::INT);
21269    arg_framebuffer->add_intvalue(framebuffer);
21270
21271    // call function
21272    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21273    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21274    GLboolean retValue = glContext->hooks->gl.glIsFramebufferOES(framebuffer);
21275    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21276    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21277
21278    // set return value
21279    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
21280    rt->set_isarray(false);
21281    rt->set_type(GLMessage::DataType::BOOL);
21282    rt->add_boolvalue(retValue);
21283
21284    void *pointerArgs[] = {
21285    };
21286
21287    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21288                              threadStartTime, threadEndTime,
21289                              &glmsg, pointerArgs);
21290    glContext->traceGLMessage(&glmsg);
21291
21292    return retValue;
21293}
21294
21295void GLTrace_glBindFramebufferOES(GLenum target, GLuint framebuffer) {
21296    GLMessage glmsg;
21297    GLTraceContext *glContext = getGLTraceContext();
21298
21299    glmsg.set_function(GLMessage::glBindFramebufferOES);
21300
21301    // copy argument target
21302    GLMessage_DataType *arg_target = glmsg.add_args();
21303    arg_target->set_isarray(false);
21304    arg_target->set_type(GLMessage::DataType::ENUM);
21305    arg_target->add_intvalue((int)target);
21306
21307    // copy argument framebuffer
21308    GLMessage_DataType *arg_framebuffer = glmsg.add_args();
21309    arg_framebuffer->set_isarray(false);
21310    arg_framebuffer->set_type(GLMessage::DataType::INT);
21311    arg_framebuffer->add_intvalue(framebuffer);
21312
21313    // call function
21314    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21315    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21316    glContext->hooks->gl.glBindFramebufferOES(target, framebuffer);
21317    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21318    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21319
21320    void *pointerArgs[] = {
21321    };
21322
21323    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21324                              threadStartTime, threadEndTime,
21325                              &glmsg, pointerArgs);
21326    glContext->traceGLMessage(&glmsg);
21327}
21328
21329void GLTrace_glDeleteFramebuffersOES(GLsizei n, const GLuint* framebuffers) {
21330    GLMessage glmsg;
21331    GLTraceContext *glContext = getGLTraceContext();
21332
21333    glmsg.set_function(GLMessage::glDeleteFramebuffersOES);
21334
21335    // copy argument n
21336    GLMessage_DataType *arg_n = glmsg.add_args();
21337    arg_n->set_isarray(false);
21338    arg_n->set_type(GLMessage::DataType::INT);
21339    arg_n->add_intvalue(n);
21340
21341    // copy argument framebuffers
21342    GLMessage_DataType *arg_framebuffers = glmsg.add_args();
21343    arg_framebuffers->set_isarray(false);
21344    arg_framebuffers->set_type(GLMessage::DataType::INT64);
21345    arg_framebuffers->add_int64value((uintptr_t)framebuffers);
21346
21347    // call function
21348    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21349    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21350    glContext->hooks->gl.glDeleteFramebuffersOES(n, framebuffers);
21351    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21352    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21353
21354    void *pointerArgs[] = {
21355        (void *) framebuffers,
21356    };
21357
21358    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21359                              threadStartTime, threadEndTime,
21360                              &glmsg, pointerArgs);
21361    glContext->traceGLMessage(&glmsg);
21362}
21363
21364void GLTrace_glGenFramebuffersOES(GLsizei n, GLuint* framebuffers) {
21365    GLMessage glmsg;
21366    GLTraceContext *glContext = getGLTraceContext();
21367
21368    glmsg.set_function(GLMessage::glGenFramebuffersOES);
21369
21370    // copy argument n
21371    GLMessage_DataType *arg_n = glmsg.add_args();
21372    arg_n->set_isarray(false);
21373    arg_n->set_type(GLMessage::DataType::INT);
21374    arg_n->add_intvalue(n);
21375
21376    // copy argument framebuffers
21377    GLMessage_DataType *arg_framebuffers = glmsg.add_args();
21378    arg_framebuffers->set_isarray(false);
21379    arg_framebuffers->set_type(GLMessage::DataType::INT64);
21380    arg_framebuffers->add_int64value((uintptr_t)framebuffers);
21381
21382    // call function
21383    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21384    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21385    glContext->hooks->gl.glGenFramebuffersOES(n, framebuffers);
21386    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21387    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21388
21389    void *pointerArgs[] = {
21390        (void *) framebuffers,
21391    };
21392
21393    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21394                              threadStartTime, threadEndTime,
21395                              &glmsg, pointerArgs);
21396    glContext->traceGLMessage(&glmsg);
21397}
21398
21399GLenum GLTrace_glCheckFramebufferStatusOES(GLenum target) {
21400    GLMessage glmsg;
21401    GLTraceContext *glContext = getGLTraceContext();
21402
21403    glmsg.set_function(GLMessage::glCheckFramebufferStatusOES);
21404
21405    // copy argument target
21406    GLMessage_DataType *arg_target = glmsg.add_args();
21407    arg_target->set_isarray(false);
21408    arg_target->set_type(GLMessage::DataType::ENUM);
21409    arg_target->add_intvalue((int)target);
21410
21411    // call function
21412    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21413    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21414    GLenum retValue = glContext->hooks->gl.glCheckFramebufferStatusOES(target);
21415    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21416    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21417
21418    // set return value
21419    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
21420    rt->set_isarray(false);
21421    rt->set_type(GLMessage::DataType::ENUM);
21422    rt->add_intvalue((int)retValue);
21423
21424    void *pointerArgs[] = {
21425    };
21426
21427    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21428                              threadStartTime, threadEndTime,
21429                              &glmsg, pointerArgs);
21430    glContext->traceGLMessage(&glmsg);
21431
21432    return retValue;
21433}
21434
21435void GLTrace_glFramebufferRenderbufferOES(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) {
21436    GLMessage glmsg;
21437    GLTraceContext *glContext = getGLTraceContext();
21438
21439    glmsg.set_function(GLMessage::glFramebufferRenderbufferOES);
21440
21441    // copy argument target
21442    GLMessage_DataType *arg_target = glmsg.add_args();
21443    arg_target->set_isarray(false);
21444    arg_target->set_type(GLMessage::DataType::ENUM);
21445    arg_target->add_intvalue((int)target);
21446
21447    // copy argument attachment
21448    GLMessage_DataType *arg_attachment = glmsg.add_args();
21449    arg_attachment->set_isarray(false);
21450    arg_attachment->set_type(GLMessage::DataType::ENUM);
21451    arg_attachment->add_intvalue((int)attachment);
21452
21453    // copy argument renderbuffertarget
21454    GLMessage_DataType *arg_renderbuffertarget = glmsg.add_args();
21455    arg_renderbuffertarget->set_isarray(false);
21456    arg_renderbuffertarget->set_type(GLMessage::DataType::ENUM);
21457    arg_renderbuffertarget->add_intvalue((int)renderbuffertarget);
21458
21459    // copy argument renderbuffer
21460    GLMessage_DataType *arg_renderbuffer = glmsg.add_args();
21461    arg_renderbuffer->set_isarray(false);
21462    arg_renderbuffer->set_type(GLMessage::DataType::INT);
21463    arg_renderbuffer->add_intvalue(renderbuffer);
21464
21465    // call function
21466    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21467    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21468    glContext->hooks->gl.glFramebufferRenderbufferOES(target, attachment, renderbuffertarget, renderbuffer);
21469    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21470    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21471
21472    void *pointerArgs[] = {
21473    };
21474
21475    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21476                              threadStartTime, threadEndTime,
21477                              &glmsg, pointerArgs);
21478    glContext->traceGLMessage(&glmsg);
21479}
21480
21481void GLTrace_glFramebufferTexture2DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {
21482    GLMessage glmsg;
21483    GLTraceContext *glContext = getGLTraceContext();
21484
21485    glmsg.set_function(GLMessage::glFramebufferTexture2DOES);
21486
21487    // copy argument target
21488    GLMessage_DataType *arg_target = glmsg.add_args();
21489    arg_target->set_isarray(false);
21490    arg_target->set_type(GLMessage::DataType::ENUM);
21491    arg_target->add_intvalue((int)target);
21492
21493    // copy argument attachment
21494    GLMessage_DataType *arg_attachment = glmsg.add_args();
21495    arg_attachment->set_isarray(false);
21496    arg_attachment->set_type(GLMessage::DataType::ENUM);
21497    arg_attachment->add_intvalue((int)attachment);
21498
21499    // copy argument textarget
21500    GLMessage_DataType *arg_textarget = glmsg.add_args();
21501    arg_textarget->set_isarray(false);
21502    arg_textarget->set_type(GLMessage::DataType::ENUM);
21503    arg_textarget->add_intvalue((int)textarget);
21504
21505    // copy argument texture
21506    GLMessage_DataType *arg_texture = glmsg.add_args();
21507    arg_texture->set_isarray(false);
21508    arg_texture->set_type(GLMessage::DataType::INT);
21509    arg_texture->add_intvalue(texture);
21510
21511    // copy argument level
21512    GLMessage_DataType *arg_level = glmsg.add_args();
21513    arg_level->set_isarray(false);
21514    arg_level->set_type(GLMessage::DataType::INT);
21515    arg_level->add_intvalue(level);
21516
21517    // call function
21518    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21519    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21520    glContext->hooks->gl.glFramebufferTexture2DOES(target, attachment, textarget, texture, level);
21521    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21522    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21523
21524    void *pointerArgs[] = {
21525    };
21526
21527    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21528                              threadStartTime, threadEndTime,
21529                              &glmsg, pointerArgs);
21530    glContext->traceGLMessage(&glmsg);
21531}
21532
21533void GLTrace_glGetFramebufferAttachmentParameterivOES(GLenum target, GLenum attachment, GLenum pname, GLint* params) {
21534    GLMessage glmsg;
21535    GLTraceContext *glContext = getGLTraceContext();
21536
21537    glmsg.set_function(GLMessage::glGetFramebufferAttachmentParameterivOES);
21538
21539    // copy argument target
21540    GLMessage_DataType *arg_target = glmsg.add_args();
21541    arg_target->set_isarray(false);
21542    arg_target->set_type(GLMessage::DataType::ENUM);
21543    arg_target->add_intvalue((int)target);
21544
21545    // copy argument attachment
21546    GLMessage_DataType *arg_attachment = glmsg.add_args();
21547    arg_attachment->set_isarray(false);
21548    arg_attachment->set_type(GLMessage::DataType::ENUM);
21549    arg_attachment->add_intvalue((int)attachment);
21550
21551    // copy argument pname
21552    GLMessage_DataType *arg_pname = glmsg.add_args();
21553    arg_pname->set_isarray(false);
21554    arg_pname->set_type(GLMessage::DataType::ENUM);
21555    arg_pname->add_intvalue((int)pname);
21556
21557    // copy argument params
21558    GLMessage_DataType *arg_params = glmsg.add_args();
21559    arg_params->set_isarray(false);
21560    arg_params->set_type(GLMessage::DataType::INT64);
21561    arg_params->add_int64value((uintptr_t)params);
21562
21563    // call function
21564    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21565    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21566    glContext->hooks->gl.glGetFramebufferAttachmentParameterivOES(target, attachment, pname, params);
21567    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21568    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21569
21570    void *pointerArgs[] = {
21571        (void *) params,
21572    };
21573
21574    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21575                              threadStartTime, threadEndTime,
21576                              &glmsg, pointerArgs);
21577    glContext->traceGLMessage(&glmsg);
21578}
21579
21580void GLTrace_glGenerateMipmapOES(GLenum target) {
21581    GLMessage glmsg;
21582    GLTraceContext *glContext = getGLTraceContext();
21583
21584    glmsg.set_function(GLMessage::glGenerateMipmapOES);
21585
21586    // copy argument target
21587    GLMessage_DataType *arg_target = glmsg.add_args();
21588    arg_target->set_isarray(false);
21589    arg_target->set_type(GLMessage::DataType::ENUM);
21590    arg_target->add_intvalue((int)target);
21591
21592    // call function
21593    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21594    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21595    glContext->hooks->gl.glGenerateMipmapOES(target);
21596    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21597    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21598
21599    void *pointerArgs[] = {
21600    };
21601
21602    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21603                              threadStartTime, threadEndTime,
21604                              &glmsg, pointerArgs);
21605    glContext->traceGLMessage(&glmsg);
21606}
21607
21608void GLTrace_glCurrentPaletteMatrixOES(GLuint matrixpaletteindex) {
21609    GLMessage glmsg;
21610    GLTraceContext *glContext = getGLTraceContext();
21611
21612    glmsg.set_function(GLMessage::glCurrentPaletteMatrixOES);
21613
21614    // copy argument matrixpaletteindex
21615    GLMessage_DataType *arg_matrixpaletteindex = glmsg.add_args();
21616    arg_matrixpaletteindex->set_isarray(false);
21617    arg_matrixpaletteindex->set_type(GLMessage::DataType::INT);
21618    arg_matrixpaletteindex->add_intvalue(matrixpaletteindex);
21619
21620    // call function
21621    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21622    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21623    glContext->hooks->gl.glCurrentPaletteMatrixOES(matrixpaletteindex);
21624    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21625    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21626
21627    void *pointerArgs[] = {
21628    };
21629
21630    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21631                              threadStartTime, threadEndTime,
21632                              &glmsg, pointerArgs);
21633    glContext->traceGLMessage(&glmsg);
21634}
21635
21636void GLTrace_glLoadPaletteFromModelViewMatrixOES(void) {
21637    GLMessage glmsg;
21638    GLTraceContext *glContext = getGLTraceContext();
21639
21640    glmsg.set_function(GLMessage::glLoadPaletteFromModelViewMatrixOES);
21641
21642    // call function
21643    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21644    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21645    glContext->hooks->gl.glLoadPaletteFromModelViewMatrixOES();
21646    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21647    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21648
21649    void *pointerArgs[] = {
21650    };
21651
21652    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21653                              threadStartTime, threadEndTime,
21654                              &glmsg, pointerArgs);
21655    glContext->traceGLMessage(&glmsg);
21656}
21657
21658void GLTrace_glMatrixIndexPointerOES(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) {
21659    GLMessage glmsg;
21660    GLTraceContext *glContext = getGLTraceContext();
21661
21662    glmsg.set_function(GLMessage::glMatrixIndexPointerOES);
21663
21664    // copy argument size
21665    GLMessage_DataType *arg_size = glmsg.add_args();
21666    arg_size->set_isarray(false);
21667    arg_size->set_type(GLMessage::DataType::INT);
21668    arg_size->add_intvalue(size);
21669
21670    // copy argument type
21671    GLMessage_DataType *arg_type = glmsg.add_args();
21672    arg_type->set_isarray(false);
21673    arg_type->set_type(GLMessage::DataType::ENUM);
21674    arg_type->add_intvalue((int)type);
21675
21676    // copy argument stride
21677    GLMessage_DataType *arg_stride = glmsg.add_args();
21678    arg_stride->set_isarray(false);
21679    arg_stride->set_type(GLMessage::DataType::INT);
21680    arg_stride->add_intvalue(stride);
21681
21682    // copy argument pointer
21683    GLMessage_DataType *arg_pointer = glmsg.add_args();
21684    arg_pointer->set_isarray(false);
21685    arg_pointer->set_type(GLMessage::DataType::INT64);
21686    arg_pointer->add_int64value((uintptr_t)pointer);
21687
21688    // call function
21689    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21690    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21691    glContext->hooks->gl.glMatrixIndexPointerOES(size, type, stride, pointer);
21692    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21693    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21694
21695    void *pointerArgs[] = {
21696        (void *) pointer,
21697    };
21698
21699    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21700                              threadStartTime, threadEndTime,
21701                              &glmsg, pointerArgs);
21702    glContext->traceGLMessage(&glmsg);
21703}
21704
21705void GLTrace_glWeightPointerOES(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) {
21706    GLMessage glmsg;
21707    GLTraceContext *glContext = getGLTraceContext();
21708
21709    glmsg.set_function(GLMessage::glWeightPointerOES);
21710
21711    // copy argument size
21712    GLMessage_DataType *arg_size = glmsg.add_args();
21713    arg_size->set_isarray(false);
21714    arg_size->set_type(GLMessage::DataType::INT);
21715    arg_size->add_intvalue(size);
21716
21717    // copy argument type
21718    GLMessage_DataType *arg_type = glmsg.add_args();
21719    arg_type->set_isarray(false);
21720    arg_type->set_type(GLMessage::DataType::ENUM);
21721    arg_type->add_intvalue((int)type);
21722
21723    // copy argument stride
21724    GLMessage_DataType *arg_stride = glmsg.add_args();
21725    arg_stride->set_isarray(false);
21726    arg_stride->set_type(GLMessage::DataType::INT);
21727    arg_stride->add_intvalue(stride);
21728
21729    // copy argument pointer
21730    GLMessage_DataType *arg_pointer = glmsg.add_args();
21731    arg_pointer->set_isarray(false);
21732    arg_pointer->set_type(GLMessage::DataType::INT64);
21733    arg_pointer->add_int64value((uintptr_t)pointer);
21734
21735    // call function
21736    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21737    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21738    glContext->hooks->gl.glWeightPointerOES(size, type, stride, pointer);
21739    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21740    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21741
21742    void *pointerArgs[] = {
21743        (void *) pointer,
21744    };
21745
21746    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21747                              threadStartTime, threadEndTime,
21748                              &glmsg, pointerArgs);
21749    glContext->traceGLMessage(&glmsg);
21750}
21751
21752GLbitfield GLTrace_glQueryMatrixxOES(GLfixed mantissa[16], GLint exponent[16]) {
21753    GLMessage glmsg;
21754    GLTraceContext *glContext = getGLTraceContext();
21755
21756    glmsg.set_function(GLMessage::glQueryMatrixxOES);
21757
21758    // copy argument mantissa
21759    GLMessage_DataType *arg_mantissa = glmsg.add_args();
21760    arg_mantissa->set_isarray(false);
21761    arg_mantissa->set_type(GLMessage::DataType::INT64);
21762    arg_mantissa->add_int64value((uintptr_t)mantissa);
21763
21764    // copy argument exponent
21765    GLMessage_DataType *arg_exponent = glmsg.add_args();
21766    arg_exponent->set_isarray(false);
21767    arg_exponent->set_type(GLMessage::DataType::INT64);
21768    arg_exponent->add_int64value((uintptr_t)exponent);
21769
21770    // call function
21771    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21772    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21773    GLbitfield retValue = glContext->hooks->gl.glQueryMatrixxOES(mantissa, exponent);
21774    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21775    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21776
21777    // set return value
21778    GLMessage_DataType *rt = glmsg.mutable_returnvalue();
21779    rt->set_isarray(false);
21780    rt->set_type(GLMessage::DataType::INT);
21781    rt->add_intvalue(retValue);
21782
21783    void *pointerArgs[] = {
21784        (void *) mantissa,
21785        (void *) exponent,
21786    };
21787
21788    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21789                              threadStartTime, threadEndTime,
21790                              &glmsg, pointerArgs);
21791    glContext->traceGLMessage(&glmsg);
21792
21793    return retValue;
21794}
21795
21796void GLTrace_glDepthRangefOES(GLclampf zNear, GLclampf zFar) {
21797    GLMessage glmsg;
21798    GLTraceContext *glContext = getGLTraceContext();
21799
21800    glmsg.set_function(GLMessage::glDepthRangefOES);
21801
21802    // copy argument zNear
21803    GLMessage_DataType *arg_zNear = glmsg.add_args();
21804    arg_zNear->set_isarray(false);
21805    arg_zNear->set_type(GLMessage::DataType::FLOAT);
21806    arg_zNear->add_floatvalue(zNear);
21807
21808    // copy argument zFar
21809    GLMessage_DataType *arg_zFar = glmsg.add_args();
21810    arg_zFar->set_isarray(false);
21811    arg_zFar->set_type(GLMessage::DataType::FLOAT);
21812    arg_zFar->add_floatvalue(zFar);
21813
21814    // call function
21815    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21816    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21817    glContext->hooks->gl.glDepthRangefOES(zNear, zFar);
21818    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21819    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21820
21821    void *pointerArgs[] = {
21822    };
21823
21824    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21825                              threadStartTime, threadEndTime,
21826                              &glmsg, pointerArgs);
21827    glContext->traceGLMessage(&glmsg);
21828}
21829
21830void GLTrace_glFrustumfOES(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) {
21831    GLMessage glmsg;
21832    GLTraceContext *glContext = getGLTraceContext();
21833
21834    glmsg.set_function(GLMessage::glFrustumfOES);
21835
21836    // copy argument left
21837    GLMessage_DataType *arg_left = glmsg.add_args();
21838    arg_left->set_isarray(false);
21839    arg_left->set_type(GLMessage::DataType::FLOAT);
21840    arg_left->add_floatvalue(left);
21841
21842    // copy argument right
21843    GLMessage_DataType *arg_right = glmsg.add_args();
21844    arg_right->set_isarray(false);
21845    arg_right->set_type(GLMessage::DataType::FLOAT);
21846    arg_right->add_floatvalue(right);
21847
21848    // copy argument bottom
21849    GLMessage_DataType *arg_bottom = glmsg.add_args();
21850    arg_bottom->set_isarray(false);
21851    arg_bottom->set_type(GLMessage::DataType::FLOAT);
21852    arg_bottom->add_floatvalue(bottom);
21853
21854    // copy argument top
21855    GLMessage_DataType *arg_top = glmsg.add_args();
21856    arg_top->set_isarray(false);
21857    arg_top->set_type(GLMessage::DataType::FLOAT);
21858    arg_top->add_floatvalue(top);
21859
21860    // copy argument zNear
21861    GLMessage_DataType *arg_zNear = glmsg.add_args();
21862    arg_zNear->set_isarray(false);
21863    arg_zNear->set_type(GLMessage::DataType::FLOAT);
21864    arg_zNear->add_floatvalue(zNear);
21865
21866    // copy argument zFar
21867    GLMessage_DataType *arg_zFar = glmsg.add_args();
21868    arg_zFar->set_isarray(false);
21869    arg_zFar->set_type(GLMessage::DataType::FLOAT);
21870    arg_zFar->add_floatvalue(zFar);
21871
21872    // call function
21873    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21874    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21875    glContext->hooks->gl.glFrustumfOES(left, right, bottom, top, zNear, zFar);
21876    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21877    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21878
21879    void *pointerArgs[] = {
21880    };
21881
21882    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21883                              threadStartTime, threadEndTime,
21884                              &glmsg, pointerArgs);
21885    glContext->traceGLMessage(&glmsg);
21886}
21887
21888void GLTrace_glOrthofOES(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) {
21889    GLMessage glmsg;
21890    GLTraceContext *glContext = getGLTraceContext();
21891
21892    glmsg.set_function(GLMessage::glOrthofOES);
21893
21894    // copy argument left
21895    GLMessage_DataType *arg_left = glmsg.add_args();
21896    arg_left->set_isarray(false);
21897    arg_left->set_type(GLMessage::DataType::FLOAT);
21898    arg_left->add_floatvalue(left);
21899
21900    // copy argument right
21901    GLMessage_DataType *arg_right = glmsg.add_args();
21902    arg_right->set_isarray(false);
21903    arg_right->set_type(GLMessage::DataType::FLOAT);
21904    arg_right->add_floatvalue(right);
21905
21906    // copy argument bottom
21907    GLMessage_DataType *arg_bottom = glmsg.add_args();
21908    arg_bottom->set_isarray(false);
21909    arg_bottom->set_type(GLMessage::DataType::FLOAT);
21910    arg_bottom->add_floatvalue(bottom);
21911
21912    // copy argument top
21913    GLMessage_DataType *arg_top = glmsg.add_args();
21914    arg_top->set_isarray(false);
21915    arg_top->set_type(GLMessage::DataType::FLOAT);
21916    arg_top->add_floatvalue(top);
21917
21918    // copy argument zNear
21919    GLMessage_DataType *arg_zNear = glmsg.add_args();
21920    arg_zNear->set_isarray(false);
21921    arg_zNear->set_type(GLMessage::DataType::FLOAT);
21922    arg_zNear->add_floatvalue(zNear);
21923
21924    // copy argument zFar
21925    GLMessage_DataType *arg_zFar = glmsg.add_args();
21926    arg_zFar->set_isarray(false);
21927    arg_zFar->set_type(GLMessage::DataType::FLOAT);
21928    arg_zFar->add_floatvalue(zFar);
21929
21930    // call function
21931    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21932    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21933    glContext->hooks->gl.glOrthofOES(left, right, bottom, top, zNear, zFar);
21934    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21935    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21936
21937    void *pointerArgs[] = {
21938    };
21939
21940    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21941                              threadStartTime, threadEndTime,
21942                              &glmsg, pointerArgs);
21943    glContext->traceGLMessage(&glmsg);
21944}
21945
21946void GLTrace_glClipPlanefOES(GLenum plane, const GLfloat *equation) {
21947    GLMessage glmsg;
21948    GLTraceContext *glContext = getGLTraceContext();
21949
21950    glmsg.set_function(GLMessage::glClipPlanefOES);
21951
21952    // copy argument plane
21953    GLMessage_DataType *arg_plane = glmsg.add_args();
21954    arg_plane->set_isarray(false);
21955    arg_plane->set_type(GLMessage::DataType::ENUM);
21956    arg_plane->add_intvalue((int)plane);
21957
21958    // copy argument equation
21959    GLMessage_DataType *arg_equation = glmsg.add_args();
21960    arg_equation->set_isarray(false);
21961    arg_equation->set_type(GLMessage::DataType::INT64);
21962    arg_equation->add_int64value((uintptr_t)equation);
21963
21964    // call function
21965    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
21966    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
21967    glContext->hooks->gl.glClipPlanefOES(plane, equation);
21968    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
21969    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
21970
21971    void *pointerArgs[] = {
21972        (void *) equation,
21973    };
21974
21975    fixupGLMessage(glContext, wallStartTime, wallEndTime,
21976                              threadStartTime, threadEndTime,
21977                              &glmsg, pointerArgs);
21978    glContext->traceGLMessage(&glmsg);
21979}
21980
21981void GLTrace_glGetClipPlanefOES(GLenum pname, GLfloat eqn[4]) {
21982    GLMessage glmsg;
21983    GLTraceContext *glContext = getGLTraceContext();
21984
21985    glmsg.set_function(GLMessage::glGetClipPlanefOES);
21986
21987    // copy argument pname
21988    GLMessage_DataType *arg_pname = glmsg.add_args();
21989    arg_pname->set_isarray(false);
21990    arg_pname->set_type(GLMessage::DataType::ENUM);
21991    arg_pname->add_intvalue((int)pname);
21992
21993    // copy argument eqn
21994    GLMessage_DataType *arg_eqn = glmsg.add_args();
21995    arg_eqn->set_isarray(false);
21996    arg_eqn->set_type(GLMessage::DataType::INT64);
21997    arg_eqn->add_int64value((uintptr_t)eqn);
21998
21999    // call function
22000    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
22001    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
22002    glContext->hooks->gl.glGetClipPlanefOES(pname, eqn);
22003    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
22004    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
22005
22006    void *pointerArgs[] = {
22007        (void *) eqn,
22008    };
22009
22010    fixupGLMessage(glContext, wallStartTime, wallEndTime,
22011                              threadStartTime, threadEndTime,
22012                              &glmsg, pointerArgs);
22013    glContext->traceGLMessage(&glmsg);
22014}
22015
22016void GLTrace_glClearDepthfOES(GLclampf depth) {
22017    GLMessage glmsg;
22018    GLTraceContext *glContext = getGLTraceContext();
22019
22020    glmsg.set_function(GLMessage::glClearDepthfOES);
22021
22022    // copy argument depth
22023    GLMessage_DataType *arg_depth = glmsg.add_args();
22024    arg_depth->set_isarray(false);
22025    arg_depth->set_type(GLMessage::DataType::FLOAT);
22026    arg_depth->add_floatvalue(depth);
22027
22028    // call function
22029    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
22030    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
22031    glContext->hooks->gl.glClearDepthfOES(depth);
22032    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
22033    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
22034
22035    void *pointerArgs[] = {
22036    };
22037
22038    fixupGLMessage(glContext, wallStartTime, wallEndTime,
22039                              threadStartTime, threadEndTime,
22040                              &glmsg, pointerArgs);
22041    glContext->traceGLMessage(&glmsg);
22042}
22043
22044void GLTrace_glTexGenfOES(GLenum coord, GLenum pname, GLfloat param) {
22045    GLMessage glmsg;
22046    GLTraceContext *glContext = getGLTraceContext();
22047
22048    glmsg.set_function(GLMessage::glTexGenfOES);
22049
22050    // copy argument coord
22051    GLMessage_DataType *arg_coord = glmsg.add_args();
22052    arg_coord->set_isarray(false);
22053    arg_coord->set_type(GLMessage::DataType::ENUM);
22054    arg_coord->add_intvalue((int)coord);
22055
22056    // copy argument pname
22057    GLMessage_DataType *arg_pname = glmsg.add_args();
22058    arg_pname->set_isarray(false);
22059    arg_pname->set_type(GLMessage::DataType::ENUM);
22060    arg_pname->add_intvalue((int)pname);
22061
22062    // copy argument param
22063    GLMessage_DataType *arg_param = glmsg.add_args();
22064    arg_param->set_isarray(false);
22065    arg_param->set_type(GLMessage::DataType::FLOAT);
22066    arg_param->add_floatvalue(param);
22067
22068    // call function
22069    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
22070    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
22071    glContext->hooks->gl.glTexGenfOES(coord, pname, param);
22072    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
22073    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
22074
22075    void *pointerArgs[] = {
22076    };
22077
22078    fixupGLMessage(glContext, wallStartTime, wallEndTime,
22079                              threadStartTime, threadEndTime,
22080                              &glmsg, pointerArgs);
22081    glContext->traceGLMessage(&glmsg);
22082}
22083
22084void GLTrace_glTexGenfvOES(GLenum coord, GLenum pname, const GLfloat *params) {
22085    GLMessage glmsg;
22086    GLTraceContext *glContext = getGLTraceContext();
22087
22088    glmsg.set_function(GLMessage::glTexGenfvOES);
22089
22090    // copy argument coord
22091    GLMessage_DataType *arg_coord = glmsg.add_args();
22092    arg_coord->set_isarray(false);
22093    arg_coord->set_type(GLMessage::DataType::ENUM);
22094    arg_coord->add_intvalue((int)coord);
22095
22096    // copy argument pname
22097    GLMessage_DataType *arg_pname = glmsg.add_args();
22098    arg_pname->set_isarray(false);
22099    arg_pname->set_type(GLMessage::DataType::ENUM);
22100    arg_pname->add_intvalue((int)pname);
22101
22102    // copy argument params
22103    GLMessage_DataType *arg_params = glmsg.add_args();
22104    arg_params->set_isarray(false);
22105    arg_params->set_type(GLMessage::DataType::INT64);
22106    arg_params->add_int64value((uintptr_t)params);
22107
22108    // call function
22109    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
22110    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
22111    glContext->hooks->gl.glTexGenfvOES(coord, pname, params);
22112    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
22113    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
22114
22115    void *pointerArgs[] = {
22116        (void *) params,
22117    };
22118
22119    fixupGLMessage(glContext, wallStartTime, wallEndTime,
22120                              threadStartTime, threadEndTime,
22121                              &glmsg, pointerArgs);
22122    glContext->traceGLMessage(&glmsg);
22123}
22124
22125void GLTrace_glTexGeniOES(GLenum coord, GLenum pname, GLint param) {
22126    GLMessage glmsg;
22127    GLTraceContext *glContext = getGLTraceContext();
22128
22129    glmsg.set_function(GLMessage::glTexGeniOES);
22130
22131    // copy argument coord
22132    GLMessage_DataType *arg_coord = glmsg.add_args();
22133    arg_coord->set_isarray(false);
22134    arg_coord->set_type(GLMessage::DataType::ENUM);
22135    arg_coord->add_intvalue((int)coord);
22136
22137    // copy argument pname
22138    GLMessage_DataType *arg_pname = glmsg.add_args();
22139    arg_pname->set_isarray(false);
22140    arg_pname->set_type(GLMessage::DataType::ENUM);
22141    arg_pname->add_intvalue((int)pname);
22142
22143    // copy argument param
22144    GLMessage_DataType *arg_param = glmsg.add_args();
22145    arg_param->set_isarray(false);
22146    arg_param->set_type(GLMessage::DataType::INT);
22147    arg_param->add_intvalue(param);
22148
22149    // call function
22150    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
22151    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
22152    glContext->hooks->gl.glTexGeniOES(coord, pname, param);
22153    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
22154    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
22155
22156    void *pointerArgs[] = {
22157    };
22158
22159    fixupGLMessage(glContext, wallStartTime, wallEndTime,
22160                              threadStartTime, threadEndTime,
22161                              &glmsg, pointerArgs);
22162    glContext->traceGLMessage(&glmsg);
22163}
22164
22165void GLTrace_glTexGenivOES(GLenum coord, GLenum pname, const GLint *params) {
22166    GLMessage glmsg;
22167    GLTraceContext *glContext = getGLTraceContext();
22168
22169    glmsg.set_function(GLMessage::glTexGenivOES);
22170
22171    // copy argument coord
22172    GLMessage_DataType *arg_coord = glmsg.add_args();
22173    arg_coord->set_isarray(false);
22174    arg_coord->set_type(GLMessage::DataType::ENUM);
22175    arg_coord->add_intvalue((int)coord);
22176
22177    // copy argument pname
22178    GLMessage_DataType *arg_pname = glmsg.add_args();
22179    arg_pname->set_isarray(false);
22180    arg_pname->set_type(GLMessage::DataType::ENUM);
22181    arg_pname->add_intvalue((int)pname);
22182
22183    // copy argument params
22184    GLMessage_DataType *arg_params = glmsg.add_args();
22185    arg_params->set_isarray(false);
22186    arg_params->set_type(GLMessage::DataType::INT64);
22187    arg_params->add_int64value((uintptr_t)params);
22188
22189    // call function
22190    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
22191    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
22192    glContext->hooks->gl.glTexGenivOES(coord, pname, params);
22193    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
22194    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
22195
22196    void *pointerArgs[] = {
22197        (void *) params,
22198    };
22199
22200    fixupGLMessage(glContext, wallStartTime, wallEndTime,
22201                              threadStartTime, threadEndTime,
22202                              &glmsg, pointerArgs);
22203    glContext->traceGLMessage(&glmsg);
22204}
22205
22206void GLTrace_glTexGenxOES(GLenum coord, GLenum pname, GLfixed param) {
22207    GLMessage glmsg;
22208    GLTraceContext *glContext = getGLTraceContext();
22209
22210    glmsg.set_function(GLMessage::glTexGenxOES);
22211
22212    // copy argument coord
22213    GLMessage_DataType *arg_coord = glmsg.add_args();
22214    arg_coord->set_isarray(false);
22215    arg_coord->set_type(GLMessage::DataType::ENUM);
22216    arg_coord->add_intvalue((int)coord);
22217
22218    // copy argument pname
22219    GLMessage_DataType *arg_pname = glmsg.add_args();
22220    arg_pname->set_isarray(false);
22221    arg_pname->set_type(GLMessage::DataType::ENUM);
22222    arg_pname->add_intvalue((int)pname);
22223
22224    // copy argument param
22225    GLMessage_DataType *arg_param = glmsg.add_args();
22226    arg_param->set_isarray(false);
22227    arg_param->set_type(GLMessage::DataType::INT);
22228    arg_param->add_intvalue(param);
22229
22230    // call function
22231    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
22232    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
22233    glContext->hooks->gl.glTexGenxOES(coord, pname, param);
22234    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
22235    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
22236
22237    void *pointerArgs[] = {
22238    };
22239
22240    fixupGLMessage(glContext, wallStartTime, wallEndTime,
22241                              threadStartTime, threadEndTime,
22242                              &glmsg, pointerArgs);
22243    glContext->traceGLMessage(&glmsg);
22244}
22245
22246void GLTrace_glTexGenxvOES(GLenum coord, GLenum pname, const GLfixed *params) {
22247    GLMessage glmsg;
22248    GLTraceContext *glContext = getGLTraceContext();
22249
22250    glmsg.set_function(GLMessage::glTexGenxvOES);
22251
22252    // copy argument coord
22253    GLMessage_DataType *arg_coord = glmsg.add_args();
22254    arg_coord->set_isarray(false);
22255    arg_coord->set_type(GLMessage::DataType::ENUM);
22256    arg_coord->add_intvalue((int)coord);
22257
22258    // copy argument pname
22259    GLMessage_DataType *arg_pname = glmsg.add_args();
22260    arg_pname->set_isarray(false);
22261    arg_pname->set_type(GLMessage::DataType::ENUM);
22262    arg_pname->add_intvalue((int)pname);
22263
22264    // copy argument params
22265    GLMessage_DataType *arg_params = glmsg.add_args();
22266    arg_params->set_isarray(false);
22267    arg_params->set_type(GLMessage::DataType::INT64);
22268    arg_params->add_int64value((uintptr_t)params);
22269
22270    // call function
22271    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
22272    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
22273    glContext->hooks->gl.glTexGenxvOES(coord, pname, params);
22274    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
22275    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
22276
22277    void *pointerArgs[] = {
22278        (void *) params,
22279    };
22280
22281    fixupGLMessage(glContext, wallStartTime, wallEndTime,
22282                              threadStartTime, threadEndTime,
22283                              &glmsg, pointerArgs);
22284    glContext->traceGLMessage(&glmsg);
22285}
22286
22287void GLTrace_glGetTexGenfvOES(GLenum coord, GLenum pname, GLfloat *params) {
22288    GLMessage glmsg;
22289    GLTraceContext *glContext = getGLTraceContext();
22290
22291    glmsg.set_function(GLMessage::glGetTexGenfvOES);
22292
22293    // copy argument coord
22294    GLMessage_DataType *arg_coord = glmsg.add_args();
22295    arg_coord->set_isarray(false);
22296    arg_coord->set_type(GLMessage::DataType::ENUM);
22297    arg_coord->add_intvalue((int)coord);
22298
22299    // copy argument pname
22300    GLMessage_DataType *arg_pname = glmsg.add_args();
22301    arg_pname->set_isarray(false);
22302    arg_pname->set_type(GLMessage::DataType::ENUM);
22303    arg_pname->add_intvalue((int)pname);
22304
22305    // copy argument params
22306    GLMessage_DataType *arg_params = glmsg.add_args();
22307    arg_params->set_isarray(false);
22308    arg_params->set_type(GLMessage::DataType::INT64);
22309    arg_params->add_int64value((uintptr_t)params);
22310
22311    // call function
22312    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
22313    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
22314    glContext->hooks->gl.glGetTexGenfvOES(coord, pname, params);
22315    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
22316    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
22317
22318    void *pointerArgs[] = {
22319        (void *) params,
22320    };
22321
22322    fixupGLMessage(glContext, wallStartTime, wallEndTime,
22323                              threadStartTime, threadEndTime,
22324                              &glmsg, pointerArgs);
22325    glContext->traceGLMessage(&glmsg);
22326}
22327
22328void GLTrace_glGetTexGenivOES(GLenum coord, GLenum pname, GLint *params) {
22329    GLMessage glmsg;
22330    GLTraceContext *glContext = getGLTraceContext();
22331
22332    glmsg.set_function(GLMessage::glGetTexGenivOES);
22333
22334    // copy argument coord
22335    GLMessage_DataType *arg_coord = glmsg.add_args();
22336    arg_coord->set_isarray(false);
22337    arg_coord->set_type(GLMessage::DataType::ENUM);
22338    arg_coord->add_intvalue((int)coord);
22339
22340    // copy argument pname
22341    GLMessage_DataType *arg_pname = glmsg.add_args();
22342    arg_pname->set_isarray(false);
22343    arg_pname->set_type(GLMessage::DataType::ENUM);
22344    arg_pname->add_intvalue((int)pname);
22345
22346    // copy argument params
22347    GLMessage_DataType *arg_params = glmsg.add_args();
22348    arg_params->set_isarray(false);
22349    arg_params->set_type(GLMessage::DataType::INT64);
22350    arg_params->add_int64value((uintptr_t)params);
22351
22352    // call function
22353    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
22354    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
22355    glContext->hooks->gl.glGetTexGenivOES(coord, pname, params);
22356    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
22357    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
22358
22359    void *pointerArgs[] = {
22360        (void *) params,
22361    };
22362
22363    fixupGLMessage(glContext, wallStartTime, wallEndTime,
22364                              threadStartTime, threadEndTime,
22365                              &glmsg, pointerArgs);
22366    glContext->traceGLMessage(&glmsg);
22367}
22368
22369void GLTrace_glGetTexGenxvOES(GLenum coord, GLenum pname, GLfixed *params) {
22370    GLMessage glmsg;
22371    GLTraceContext *glContext = getGLTraceContext();
22372
22373    glmsg.set_function(GLMessage::glGetTexGenxvOES);
22374
22375    // copy argument coord
22376    GLMessage_DataType *arg_coord = glmsg.add_args();
22377    arg_coord->set_isarray(false);
22378    arg_coord->set_type(GLMessage::DataType::ENUM);
22379    arg_coord->add_intvalue((int)coord);
22380
22381    // copy argument pname
22382    GLMessage_DataType *arg_pname = glmsg.add_args();
22383    arg_pname->set_isarray(false);
22384    arg_pname->set_type(GLMessage::DataType::ENUM);
22385    arg_pname->add_intvalue((int)pname);
22386
22387    // copy argument params
22388    GLMessage_DataType *arg_params = glmsg.add_args();
22389    arg_params->set_isarray(false);
22390    arg_params->set_type(GLMessage::DataType::INT64);
22391    arg_params->add_int64value((uintptr_t)params);
22392
22393    // call function
22394    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
22395    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
22396    glContext->hooks->gl.glGetTexGenxvOES(coord, pname, params);
22397    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
22398    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
22399
22400    void *pointerArgs[] = {
22401        (void *) params,
22402    };
22403
22404    fixupGLMessage(glContext, wallStartTime, wallEndTime,
22405                              threadStartTime, threadEndTime,
22406                              &glmsg, pointerArgs);
22407    glContext->traceGLMessage(&glmsg);
22408}
22409
22410void GLTrace_glClipPlanefIMG(GLenum p, const GLfloat *eqn) {
22411    GLMessage glmsg;
22412    GLTraceContext *glContext = getGLTraceContext();
22413
22414    glmsg.set_function(GLMessage::glClipPlanefIMG);
22415
22416    // copy argument p
22417    GLMessage_DataType *arg_p = glmsg.add_args();
22418    arg_p->set_isarray(false);
22419    arg_p->set_type(GLMessage::DataType::ENUM);
22420    arg_p->add_intvalue((int)p);
22421
22422    // copy argument eqn
22423    GLMessage_DataType *arg_eqn = glmsg.add_args();
22424    arg_eqn->set_isarray(false);
22425    arg_eqn->set_type(GLMessage::DataType::INT64);
22426    arg_eqn->add_int64value((uintptr_t)eqn);
22427
22428    // call function
22429    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
22430    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
22431    glContext->hooks->gl.glClipPlanefIMG(p, eqn);
22432    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
22433    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
22434
22435    void *pointerArgs[] = {
22436        (void *) eqn,
22437    };
22438
22439    fixupGLMessage(glContext, wallStartTime, wallEndTime,
22440                              threadStartTime, threadEndTime,
22441                              &glmsg, pointerArgs);
22442    glContext->traceGLMessage(&glmsg);
22443}
22444
22445void GLTrace_glClipPlanexIMG(GLenum p, const GLfixed *eqn) {
22446    GLMessage glmsg;
22447    GLTraceContext *glContext = getGLTraceContext();
22448
22449    glmsg.set_function(GLMessage::glClipPlanexIMG);
22450
22451    // copy argument p
22452    GLMessage_DataType *arg_p = glmsg.add_args();
22453    arg_p->set_isarray(false);
22454    arg_p->set_type(GLMessage::DataType::ENUM);
22455    arg_p->add_intvalue((int)p);
22456
22457    // copy argument eqn
22458    GLMessage_DataType *arg_eqn = glmsg.add_args();
22459    arg_eqn->set_isarray(false);
22460    arg_eqn->set_type(GLMessage::DataType::INT64);
22461    arg_eqn->add_int64value((uintptr_t)eqn);
22462
22463    // call function
22464    nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
22465    nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
22466    glContext->hooks->gl.glClipPlanexIMG(p, eqn);
22467    nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
22468    nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
22469
22470    void *pointerArgs[] = {
22471        (void *) eqn,
22472    };
22473
22474    fixupGLMessage(glContext, wallStartTime, wallEndTime,
22475                              threadStartTime, threadEndTime,
22476                              &glmsg, pointerArgs);
22477    glContext->traceGLMessage(&glmsg);
22478}
22479
22480
22481}; // namespace gltrace
22482}; // namespace android
22483