1 // Generated Code - DO NOT EDIT !!
2 // generated by 'emugen'
3 
4 
5 #include <string.h>
6 #include "gles2_opcodes.h"
7 
8 #include "gles2_dec.h"
9 
10 
11 #include "ProtocolUtils.h"
12 
13 #include "ChecksumCalculatorThreadInfo.h"
14 
15 #include "host-common/logging.h"
16 
17 #include <stdio.h>
18 
19 namespace gfxstream {
20 
21 typedef unsigned int tsize_t; // Target "size_t", which is 32-bit for now. It may or may not be the same as host's size_t when emugen is compiled.
22 
23 #ifdef CHECK_GL_ERRORS
24 #  define SET_LASTCALL(name)  sprintf(lastCall, #name)
25 #else
26 #  define SET_LASTCALL(name)
27 #endif
decode(void * buf,size_t len,IOStream * stream,ChecksumCalculator * checksumCalc)28 size_t gles2_decoder_context_t::decode(void *buf, size_t len, IOStream *stream, ChecksumCalculator* checksumCalc) {
29 	if (len < 8) return 0;
30 #ifdef CHECK_GL_ERRORS
31 	char lastCall[256] = {0};
32 #endif
33 	unsigned char *ptr = (unsigned char *)buf;
34 	const unsigned char* const end = (const unsigned char*)buf + len;
35     const size_t checksumSize = checksumCalc->checksumByteSize();
36     const bool useChecksum = checksumSize > 0;
37 	while (end - ptr >= 8) {
38 		uint32_t opcode = *(uint32_t *)ptr;
39 		uint32_t packetLen = *(uint32_t *)(ptr + 4);
40 		if (end - ptr < packetLen) return ptr - (unsigned char*)buf;
41 		switch(opcode) {
42 		case OP_glActiveTexture: {
43 			android::base::beginTrace("glActiveTexture decode");
44 			GLenum var_texture = Unpack<GLenum,uint32_t>(ptr + 8);
45 			if (useChecksum) {
46 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
47 					"gles2_decoder_context_t::decode, OP_glActiveTexture: GL checksumCalculator failure\n");
48 			}
49 			#ifdef CHECK_GL_ERRORS
50 			GLint err = this->glGetError();
51 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glActiveTexture\n", err);
52 			#endif
53 			DECODER_DEBUG_LOG("gles2(%p): glActiveTexture(texture:0x%08x )", stream, var_texture);
54 			this->glActiveTexture(var_texture);
55 			SET_LASTCALL("glActiveTexture");
56 			android::base::endTrace();
57 			break;
58 		}
59 		case OP_glAttachShader: {
60 			android::base::beginTrace("glAttachShader decode");
61 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
62 			GLuint var_shader = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
63 			if (useChecksum) {
64 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
65 					"gles2_decoder_context_t::decode, OP_glAttachShader: GL checksumCalculator failure\n");
66 			}
67 			#ifdef CHECK_GL_ERRORS
68 			GLint err = this->glGetError();
69 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glAttachShader\n", err);
70 			#endif
71 			DECODER_DEBUG_LOG("gles2(%p): glAttachShader(program:%u shader:%u )", stream, var_program, var_shader);
72 			this->glAttachShader_dec(this, var_program, var_shader);
73 			SET_LASTCALL("glAttachShader");
74 			android::base::endTrace();
75 			break;
76 		}
77 		case OP_glBindAttribLocation: {
78 			android::base::beginTrace("glBindAttribLocation decode");
79 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
80 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
81 			uint32_t size_name __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
82 			InputBuffer inptr_name(ptr + 8 + 4 + 4 + 4, size_name);
83 			if (useChecksum) {
84 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_name, ptr + 8 + 4 + 4 + 4 + size_name, checksumSize,
85 					"gles2_decoder_context_t::decode, OP_glBindAttribLocation: GL checksumCalculator failure\n");
86 			}
87 			#ifdef CHECK_GL_ERRORS
88 			GLint err = this->glGetError();
89 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBindAttribLocation\n", err);
90 			#endif
91 			DECODER_DEBUG_LOG("gles2(%p): glBindAttribLocation(program:%u index:%u name:%p(%u) )", stream, var_program, var_index, (const GLchar*)(inptr_name.get()), size_name);
92 			this->glBindAttribLocation_dec(this, var_program, var_index, (const GLchar*)(inptr_name.get()));
93 			SET_LASTCALL("glBindAttribLocation");
94 			android::base::endTrace();
95 			break;
96 		}
97 		case OP_glBindBuffer: {
98 			android::base::beginTrace("glBindBuffer decode");
99 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
100 			GLuint var_buffer = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
101 			if (useChecksum) {
102 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
103 					"gles2_decoder_context_t::decode, OP_glBindBuffer: GL checksumCalculator failure\n");
104 			}
105 			#ifdef CHECK_GL_ERRORS
106 			GLint err = this->glGetError();
107 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBindBuffer\n", err);
108 			#endif
109 			DECODER_DEBUG_LOG("gles2(%p): glBindBuffer(target:0x%08x buffer:%u )", stream, var_target, var_buffer);
110 			this->glBindBuffer(var_target, var_buffer);
111 			SET_LASTCALL("glBindBuffer");
112 			android::base::endTrace();
113 			break;
114 		}
115 		case OP_glBindFramebuffer: {
116 			android::base::beginTrace("glBindFramebuffer decode");
117 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
118 			GLuint var_framebuffer = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
119 			if (useChecksum) {
120 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
121 					"gles2_decoder_context_t::decode, OP_glBindFramebuffer: GL checksumCalculator failure\n");
122 			}
123 			#ifdef CHECK_GL_ERRORS
124 			GLint err = this->glGetError();
125 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBindFramebuffer\n", err);
126 			#endif
127 			DECODER_DEBUG_LOG("gles2(%p): glBindFramebuffer(target:0x%08x framebuffer:%u )", stream, var_target, var_framebuffer);
128 			this->glBindFramebuffer(var_target, var_framebuffer);
129 			SET_LASTCALL("glBindFramebuffer");
130 			android::base::endTrace();
131 			break;
132 		}
133 		case OP_glBindRenderbuffer: {
134 			android::base::beginTrace("glBindRenderbuffer decode");
135 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
136 			GLuint var_renderbuffer = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
137 			if (useChecksum) {
138 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
139 					"gles2_decoder_context_t::decode, OP_glBindRenderbuffer: GL checksumCalculator failure\n");
140 			}
141 			#ifdef CHECK_GL_ERRORS
142 			GLint err = this->glGetError();
143 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBindRenderbuffer\n", err);
144 			#endif
145 			DECODER_DEBUG_LOG("gles2(%p): glBindRenderbuffer(target:0x%08x renderbuffer:%u )", stream, var_target, var_renderbuffer);
146 			this->glBindRenderbuffer(var_target, var_renderbuffer);
147 			SET_LASTCALL("glBindRenderbuffer");
148 			android::base::endTrace();
149 			break;
150 		}
151 		case OP_glBindTexture: {
152 			android::base::beginTrace("glBindTexture decode");
153 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
154 			GLuint var_texture = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
155 			if (useChecksum) {
156 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
157 					"gles2_decoder_context_t::decode, OP_glBindTexture: GL checksumCalculator failure\n");
158 			}
159 			#ifdef CHECK_GL_ERRORS
160 			GLint err = this->glGetError();
161 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBindTexture\n", err);
162 			#endif
163 			DECODER_DEBUG_LOG("gles2(%p): glBindTexture(target:0x%08x texture:%u )", stream, var_target, var_texture);
164 			this->glBindTexture(var_target, var_texture);
165 			SET_LASTCALL("glBindTexture");
166 			android::base::endTrace();
167 			break;
168 		}
169 		case OP_glBlendColor: {
170 			android::base::beginTrace("glBlendColor decode");
171 			GLclampf var_red = Unpack<GLclampf,uint32_t>(ptr + 8);
172 			GLclampf var_green = Unpack<GLclampf,uint32_t>(ptr + 8 + 4);
173 			GLclampf var_blue = Unpack<GLclampf,uint32_t>(ptr + 8 + 4 + 4);
174 			GLclampf var_alpha = Unpack<GLclampf,uint32_t>(ptr + 8 + 4 + 4 + 4);
175 			if (useChecksum) {
176 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
177 					"gles2_decoder_context_t::decode, OP_glBlendColor: GL checksumCalculator failure\n");
178 			}
179 			#ifdef CHECK_GL_ERRORS
180 			GLint err = this->glGetError();
181 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBlendColor\n", err);
182 			#endif
183 			DECODER_DEBUG_LOG("gles2(%p): glBlendColor(red:%f green:%f blue:%f alpha:%f )", stream, var_red, var_green, var_blue, var_alpha);
184 			this->glBlendColor(var_red, var_green, var_blue, var_alpha);
185 			SET_LASTCALL("glBlendColor");
186 			android::base::endTrace();
187 			break;
188 		}
189 		case OP_glBlendEquation: {
190 			android::base::beginTrace("glBlendEquation decode");
191 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
192 			if (useChecksum) {
193 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
194 					"gles2_decoder_context_t::decode, OP_glBlendEquation: GL checksumCalculator failure\n");
195 			}
196 			#ifdef CHECK_GL_ERRORS
197 			GLint err = this->glGetError();
198 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBlendEquation\n", err);
199 			#endif
200 			DECODER_DEBUG_LOG("gles2(%p): glBlendEquation(mode:0x%08x )", stream, var_mode);
201 			this->glBlendEquation(var_mode);
202 			SET_LASTCALL("glBlendEquation");
203 			android::base::endTrace();
204 			break;
205 		}
206 		case OP_glBlendEquationSeparate: {
207 			android::base::beginTrace("glBlendEquationSeparate decode");
208 			GLenum var_modeRGB = Unpack<GLenum,uint32_t>(ptr + 8);
209 			GLenum var_modeAlpha = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
210 			if (useChecksum) {
211 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
212 					"gles2_decoder_context_t::decode, OP_glBlendEquationSeparate: GL checksumCalculator failure\n");
213 			}
214 			#ifdef CHECK_GL_ERRORS
215 			GLint err = this->glGetError();
216 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBlendEquationSeparate\n", err);
217 			#endif
218 			DECODER_DEBUG_LOG("gles2(%p): glBlendEquationSeparate(modeRGB:0x%08x modeAlpha:0x%08x )", stream, var_modeRGB, var_modeAlpha);
219 			this->glBlendEquationSeparate(var_modeRGB, var_modeAlpha);
220 			SET_LASTCALL("glBlendEquationSeparate");
221 			android::base::endTrace();
222 			break;
223 		}
224 		case OP_glBlendFunc: {
225 			android::base::beginTrace("glBlendFunc decode");
226 			GLenum var_sfactor = Unpack<GLenum,uint32_t>(ptr + 8);
227 			GLenum var_dfactor = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
228 			if (useChecksum) {
229 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
230 					"gles2_decoder_context_t::decode, OP_glBlendFunc: GL checksumCalculator failure\n");
231 			}
232 			#ifdef CHECK_GL_ERRORS
233 			GLint err = this->glGetError();
234 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBlendFunc\n", err);
235 			#endif
236 			DECODER_DEBUG_LOG("gles2(%p): glBlendFunc(sfactor:0x%08x dfactor:0x%08x )", stream, var_sfactor, var_dfactor);
237 			this->glBlendFunc(var_sfactor, var_dfactor);
238 			SET_LASTCALL("glBlendFunc");
239 			android::base::endTrace();
240 			break;
241 		}
242 		case OP_glBlendFuncSeparate: {
243 			android::base::beginTrace("glBlendFuncSeparate decode");
244 			GLenum var_srcRGB = Unpack<GLenum,uint32_t>(ptr + 8);
245 			GLenum var_dstRGB = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
246 			GLenum var_srcAlpha = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
247 			GLenum var_dstAlpha = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4);
248 			if (useChecksum) {
249 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
250 					"gles2_decoder_context_t::decode, OP_glBlendFuncSeparate: GL checksumCalculator failure\n");
251 			}
252 			#ifdef CHECK_GL_ERRORS
253 			GLint err = this->glGetError();
254 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBlendFuncSeparate\n", err);
255 			#endif
256 			DECODER_DEBUG_LOG("gles2(%p): glBlendFuncSeparate(srcRGB:0x%08x dstRGB:0x%08x srcAlpha:0x%08x dstAlpha:0x%08x )", stream, var_srcRGB, var_dstRGB, var_srcAlpha, var_dstAlpha);
257 			this->glBlendFuncSeparate(var_srcRGB, var_dstRGB, var_srcAlpha, var_dstAlpha);
258 			SET_LASTCALL("glBlendFuncSeparate");
259 			android::base::endTrace();
260 			break;
261 		}
262 		case OP_glBufferData: {
263 			android::base::beginTrace("glBufferData decode");
264 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
265 			GLsizeiptr var_size = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4);
266 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
267 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4, size_data);
268 			GLenum var_usage = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_data);
269 			if (useChecksum) {
270 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_data + 4, ptr + 8 + 4 + 4 + 4 + size_data + 4, checksumSize,
271 					"gles2_decoder_context_t::decode, OP_glBufferData: GL checksumCalculator failure\n");
272 			}
273 			#ifdef CHECK_GL_ERRORS
274 			GLint err = this->glGetError();
275 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBufferData\n", err);
276 			#endif
277 			DECODER_DEBUG_LOG("gles2(%p): glBufferData(target:0x%08x size:0x%08lx data:%p(%u) usage:0x%08x )", stream, var_target, var_size, (const GLvoid*)(inptr_data.get()), size_data, var_usage);
278 			this->glBufferData(var_target, var_size, size_data == 0 ? nullptr : (const GLvoid*)(inptr_data.get()), var_usage);
279 			SET_LASTCALL("glBufferData");
280 			android::base::endTrace();
281 			break;
282 		}
283 		case OP_glBufferSubData: {
284 			android::base::beginTrace("glBufferSubData decode");
285 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
286 			GLintptr var_offset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4);
287 			GLsizeiptr var_size = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4 + 4);
288 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
289 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4 + 4, size_data);
290 			if (useChecksum) {
291 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_data, ptr + 8 + 4 + 4 + 4 + 4 + size_data, checksumSize,
292 					"gles2_decoder_context_t::decode, OP_glBufferSubData: GL checksumCalculator failure\n");
293 			}
294 			#ifdef CHECK_GL_ERRORS
295 			GLint err = this->glGetError();
296 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBufferSubData\n", err);
297 			#endif
298 			DECODER_DEBUG_LOG("gles2(%p): glBufferSubData(target:0x%08x offset:0x%08lx size:0x%08lx data:%p(%u) )", stream, var_target, var_offset, var_size, (const GLvoid*)(inptr_data.get()), size_data);
299 			this->glBufferSubData(var_target, var_offset, var_size, size_data == 0 ? nullptr : (const GLvoid*)(inptr_data.get()));
300 			SET_LASTCALL("glBufferSubData");
301 			android::base::endTrace();
302 			break;
303 		}
304 		case OP_glCheckFramebufferStatus: {
305 			android::base::beginTrace("glCheckFramebufferStatus decode");
306 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
307 			if (useChecksum) {
308 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
309 					"gles2_decoder_context_t::decode, OP_glCheckFramebufferStatus: GL checksumCalculator failure\n");
310 			}
311 			size_t totalTmpSize = sizeof(GLenum);
312 			totalTmpSize += checksumSize;
313 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
314 			#ifdef CHECK_GL_ERRORS
315 			GLint err = this->glGetError();
316 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCheckFramebufferStatus\n", err);
317 			#endif
318 			DECODER_DEBUG_LOG("gles2(%p): glCheckFramebufferStatus(target:0x%08x )", stream, var_target);
319 			*(GLenum *)(&tmpBuf[0]) = 			this->glCheckFramebufferStatus(var_target);
320 			if (useChecksum) {
321 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
322 			}
323 			stream->flush();
324 			SET_LASTCALL("glCheckFramebufferStatus");
325 			android::base::endTrace();
326 			break;
327 		}
328 		case OP_glClear: {
329 			android::base::beginTrace("glClear decode");
330 			GLbitfield var_mask = Unpack<GLbitfield,uint32_t>(ptr + 8);
331 			if (useChecksum) {
332 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
333 					"gles2_decoder_context_t::decode, OP_glClear: GL checksumCalculator failure\n");
334 			}
335 			#ifdef CHECK_GL_ERRORS
336 			GLint err = this->glGetError();
337 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glClear\n", err);
338 			#endif
339 			DECODER_DEBUG_LOG("gles2(%p): glClear(mask:0x%08x )", stream, var_mask);
340 			this->glClear(var_mask);
341 			SET_LASTCALL("glClear");
342 			android::base::endTrace();
343 			break;
344 		}
345 		case OP_glClearColor: {
346 			android::base::beginTrace("glClearColor decode");
347 			GLclampf var_red = Unpack<GLclampf,uint32_t>(ptr + 8);
348 			GLclampf var_green = Unpack<GLclampf,uint32_t>(ptr + 8 + 4);
349 			GLclampf var_blue = Unpack<GLclampf,uint32_t>(ptr + 8 + 4 + 4);
350 			GLclampf var_alpha = Unpack<GLclampf,uint32_t>(ptr + 8 + 4 + 4 + 4);
351 			if (useChecksum) {
352 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
353 					"gles2_decoder_context_t::decode, OP_glClearColor: GL checksumCalculator failure\n");
354 			}
355 			#ifdef CHECK_GL_ERRORS
356 			GLint err = this->glGetError();
357 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glClearColor\n", err);
358 			#endif
359 			DECODER_DEBUG_LOG("gles2(%p): glClearColor(red:%f green:%f blue:%f alpha:%f )", stream, var_red, var_green, var_blue, var_alpha);
360 			this->glClearColor(var_red, var_green, var_blue, var_alpha);
361 			SET_LASTCALL("glClearColor");
362 			android::base::endTrace();
363 			break;
364 		}
365 		case OP_glClearDepthf: {
366 			android::base::beginTrace("glClearDepthf decode");
367 			GLclampf var_depth = Unpack<GLclampf,uint32_t>(ptr + 8);
368 			if (useChecksum) {
369 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
370 					"gles2_decoder_context_t::decode, OP_glClearDepthf: GL checksumCalculator failure\n");
371 			}
372 			#ifdef CHECK_GL_ERRORS
373 			GLint err = this->glGetError();
374 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glClearDepthf\n", err);
375 			#endif
376 			DECODER_DEBUG_LOG("gles2(%p): glClearDepthf(depth:%f )", stream, var_depth);
377 			this->glClearDepthf(var_depth);
378 			SET_LASTCALL("glClearDepthf");
379 			android::base::endTrace();
380 			break;
381 		}
382 		case OP_glClearStencil: {
383 			android::base::beginTrace("glClearStencil decode");
384 			GLint var_s = Unpack<GLint,uint32_t>(ptr + 8);
385 			if (useChecksum) {
386 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
387 					"gles2_decoder_context_t::decode, OP_glClearStencil: GL checksumCalculator failure\n");
388 			}
389 			#ifdef CHECK_GL_ERRORS
390 			GLint err = this->glGetError();
391 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glClearStencil\n", err);
392 			#endif
393 			DECODER_DEBUG_LOG("gles2(%p): glClearStencil(s:%d )", stream, var_s);
394 			this->glClearStencil(var_s);
395 			SET_LASTCALL("glClearStencil");
396 			android::base::endTrace();
397 			break;
398 		}
399 		case OP_glColorMask: {
400 			android::base::beginTrace("glColorMask decode");
401 			GLboolean var_red = Unpack<GLboolean,uint8_t>(ptr + 8);
402 			GLboolean var_green = Unpack<GLboolean,uint8_t>(ptr + 8 + 1);
403 			GLboolean var_blue = Unpack<GLboolean,uint8_t>(ptr + 8 + 1 + 1);
404 			GLboolean var_alpha = Unpack<GLboolean,uint8_t>(ptr + 8 + 1 + 1 + 1);
405 			if (useChecksum) {
406 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 1 + 1 + 1 + 1, ptr + 8 + 1 + 1 + 1 + 1, checksumSize,
407 					"gles2_decoder_context_t::decode, OP_glColorMask: GL checksumCalculator failure\n");
408 			}
409 			#ifdef CHECK_GL_ERRORS
410 			GLint err = this->glGetError();
411 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glColorMask\n", err);
412 			#endif
413 			DECODER_DEBUG_LOG("gles2(%p): glColorMask(red:%d green:%d blue:%d alpha:%d )", stream, var_red, var_green, var_blue, var_alpha);
414 			this->glColorMask(var_red, var_green, var_blue, var_alpha);
415 			SET_LASTCALL("glColorMask");
416 			android::base::endTrace();
417 			break;
418 		}
419 		case OP_glCompileShader: {
420 			android::base::beginTrace("glCompileShader decode");
421 			GLuint var_shader = Unpack<GLuint,uint32_t>(ptr + 8);
422 			if (useChecksum) {
423 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
424 					"gles2_decoder_context_t::decode, OP_glCompileShader: GL checksumCalculator failure\n");
425 			}
426 			#ifdef CHECK_GL_ERRORS
427 			GLint err = this->glGetError();
428 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCompileShader\n", err);
429 			#endif
430 			DECODER_DEBUG_LOG("gles2(%p): glCompileShader(shader:%u )", stream, var_shader);
431 			this->glCompileShader_dec(this, var_shader);
432 			SET_LASTCALL("glCompileShader");
433 			android::base::endTrace();
434 			break;
435 		}
436 		case OP_glCompressedTexImage2D: {
437 			android::base::beginTrace("glCompressedTexImage2D decode");
438 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
439 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
440 			GLenum var_internalformat = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
441 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
442 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
443 			GLint var_border = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
444 			GLsizei var_imageSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
445 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
446 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, size_data);
447 			if (useChecksum) {
448 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_data, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_data, checksumSize,
449 					"gles2_decoder_context_t::decode, OP_glCompressedTexImage2D: GL checksumCalculator failure\n");
450 			}
451 			#ifdef CHECK_GL_ERRORS
452 			GLint err = this->glGetError();
453 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCompressedTexImage2D\n", err);
454 			#endif
455 			DECODER_DEBUG_LOG("gles2(%p): glCompressedTexImage2D(target:0x%08x level:%d internalformat:0x%08x width:%d height:%d border:%d imageSize:%d data:%p(%u) )", stream, var_target, var_level, var_internalformat, var_width, var_height, var_border, var_imageSize, (const GLvoid*)(inptr_data.get()), size_data);
456 			this->glCompressedTexImage2D(var_target, var_level, var_internalformat, var_width, var_height, var_border, var_imageSize, size_data == 0 ? nullptr : (const GLvoid*)(inptr_data.get()));
457 			SET_LASTCALL("glCompressedTexImage2D");
458 			android::base::endTrace();
459 			break;
460 		}
461 		case OP_glCompressedTexSubImage2D: {
462 			android::base::beginTrace("glCompressedTexSubImage2D decode");
463 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
464 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
465 			GLint var_xoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
466 			GLint var_yoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
467 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
468 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
469 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
470 			GLsizei var_imageSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
471 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
472 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, size_data);
473 			if (useChecksum) {
474 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_data, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_data, checksumSize,
475 					"gles2_decoder_context_t::decode, OP_glCompressedTexSubImage2D: GL checksumCalculator failure\n");
476 			}
477 			#ifdef CHECK_GL_ERRORS
478 			GLint err = this->glGetError();
479 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCompressedTexSubImage2D\n", err);
480 			#endif
481 			DECODER_DEBUG_LOG("gles2(%p): glCompressedTexSubImage2D(target:0x%08x level:%d xoffset:%d yoffset:%d width:%d height:%d format:0x%08x imageSize:%d data:%p(%u) )", stream, var_target, var_level, var_xoffset, var_yoffset, var_width, var_height, var_format, var_imageSize, (const GLvoid*)(inptr_data.get()), size_data);
482 			this->glCompressedTexSubImage2D(var_target, var_level, var_xoffset, var_yoffset, var_width, var_height, var_format, var_imageSize, size_data == 0 ? nullptr : (const GLvoid*)(inptr_data.get()));
483 			SET_LASTCALL("glCompressedTexSubImage2D");
484 			android::base::endTrace();
485 			break;
486 		}
487 		case OP_glCopyTexImage2D: {
488 			android::base::beginTrace("glCopyTexImage2D decode");
489 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
490 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
491 			GLenum var_internalformat = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
492 			GLint var_x = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
493 			GLint var_y = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
494 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
495 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
496 			GLint var_border = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
497 			if (useChecksum) {
498 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
499 					"gles2_decoder_context_t::decode, OP_glCopyTexImage2D: GL checksumCalculator failure\n");
500 			}
501 			#ifdef CHECK_GL_ERRORS
502 			GLint err = this->glGetError();
503 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCopyTexImage2D\n", err);
504 			#endif
505 			DECODER_DEBUG_LOG("gles2(%p): glCopyTexImage2D(target:0x%08x level:%d internalformat:0x%08x x:%d y:%d width:%d height:%d border:%d )", stream, var_target, var_level, var_internalformat, var_x, var_y, var_width, var_height, var_border);
506 			this->glCopyTexImage2D(var_target, var_level, var_internalformat, var_x, var_y, var_width, var_height, var_border);
507 			SET_LASTCALL("glCopyTexImage2D");
508 			android::base::endTrace();
509 			break;
510 		}
511 		case OP_glCopyTexSubImage2D: {
512 			android::base::beginTrace("glCopyTexSubImage2D decode");
513 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
514 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
515 			GLint var_xoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
516 			GLint var_yoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
517 			GLint var_x = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
518 			GLint var_y = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
519 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
520 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
521 			if (useChecksum) {
522 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
523 					"gles2_decoder_context_t::decode, OP_glCopyTexSubImage2D: GL checksumCalculator failure\n");
524 			}
525 			#ifdef CHECK_GL_ERRORS
526 			GLint err = this->glGetError();
527 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCopyTexSubImage2D\n", err);
528 			#endif
529 			DECODER_DEBUG_LOG("gles2(%p): glCopyTexSubImage2D(target:0x%08x level:%d xoffset:%d yoffset:%d x:%d y:%d width:%d height:%d )", stream, var_target, var_level, var_xoffset, var_yoffset, var_x, var_y, var_width, var_height);
530 			this->glCopyTexSubImage2D(var_target, var_level, var_xoffset, var_yoffset, var_x, var_y, var_width, var_height);
531 			SET_LASTCALL("glCopyTexSubImage2D");
532 			android::base::endTrace();
533 			break;
534 		}
535 		case OP_glCreateProgram: {
536 			android::base::beginTrace("glCreateProgram decode");
537 			if (useChecksum) {
538 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8, ptr + 8, checksumSize,
539 					"gles2_decoder_context_t::decode, OP_glCreateProgram: GL checksumCalculator failure\n");
540 			}
541 			size_t totalTmpSize = sizeof(GLuint);
542 			totalTmpSize += checksumSize;
543 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
544 			#ifdef CHECK_GL_ERRORS
545 			GLint err = this->glGetError();
546 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCreateProgram\n", err);
547 			#endif
548 			DECODER_DEBUG_LOG("gles2(%p): glCreateProgram()", stream);
549 			*(GLuint *)(&tmpBuf[0]) = 			this->glCreateProgram_dec(this);
550 			if (useChecksum) {
551 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
552 			}
553 			stream->flush();
554 			SET_LASTCALL("glCreateProgram");
555 			android::base::endTrace();
556 			break;
557 		}
558 		case OP_glCreateShader: {
559 			android::base::beginTrace("glCreateShader decode");
560 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8);
561 			if (useChecksum) {
562 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
563 					"gles2_decoder_context_t::decode, OP_glCreateShader: GL checksumCalculator failure\n");
564 			}
565 			size_t totalTmpSize = sizeof(GLuint);
566 			totalTmpSize += checksumSize;
567 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
568 			#ifdef CHECK_GL_ERRORS
569 			GLint err = this->glGetError();
570 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCreateShader\n", err);
571 			#endif
572 			DECODER_DEBUG_LOG("gles2(%p): glCreateShader(type:0x%08x )", stream, var_type);
573 			*(GLuint *)(&tmpBuf[0]) = 			this->glCreateShader_dec(this, var_type);
574 			if (useChecksum) {
575 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
576 			}
577 			stream->flush();
578 			SET_LASTCALL("glCreateShader");
579 			android::base::endTrace();
580 			break;
581 		}
582 		case OP_glCullFace: {
583 			android::base::beginTrace("glCullFace decode");
584 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
585 			if (useChecksum) {
586 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
587 					"gles2_decoder_context_t::decode, OP_glCullFace: GL checksumCalculator failure\n");
588 			}
589 			#ifdef CHECK_GL_ERRORS
590 			GLint err = this->glGetError();
591 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCullFace\n", err);
592 			#endif
593 			DECODER_DEBUG_LOG("gles2(%p): glCullFace(mode:0x%08x )", stream, var_mode);
594 			this->glCullFace(var_mode);
595 			SET_LASTCALL("glCullFace");
596 			android::base::endTrace();
597 			break;
598 		}
599 		case OP_glDeleteBuffers: {
600 			android::base::beginTrace("glDeleteBuffers decode");
601 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
602 			uint32_t size_buffers __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
603 			InputBuffer inptr_buffers(ptr + 8 + 4 + 4, size_buffers);
604 			if (useChecksum) {
605 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_buffers, ptr + 8 + 4 + 4 + size_buffers, checksumSize,
606 					"gles2_decoder_context_t::decode, OP_glDeleteBuffers: GL checksumCalculator failure\n");
607 			}
608 			#ifdef CHECK_GL_ERRORS
609 			GLint err = this->glGetError();
610 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDeleteBuffers\n", err);
611 			#endif
612 			DECODER_DEBUG_LOG("gles2(%p): glDeleteBuffers(n:%d buffers:%p(%u) )", stream, var_n, (const GLuint*)(inptr_buffers.get()), size_buffers);
613 			this->glDeleteBuffers_dec(this, var_n, (const GLuint*)(inptr_buffers.get()));
614 			SET_LASTCALL("glDeleteBuffers");
615 			android::base::endTrace();
616 			break;
617 		}
618 		case OP_glDeleteFramebuffers: {
619 			android::base::beginTrace("glDeleteFramebuffers decode");
620 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
621 			uint32_t size_framebuffers __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
622 			InputBuffer inptr_framebuffers(ptr + 8 + 4 + 4, size_framebuffers);
623 			if (useChecksum) {
624 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_framebuffers, ptr + 8 + 4 + 4 + size_framebuffers, checksumSize,
625 					"gles2_decoder_context_t::decode, OP_glDeleteFramebuffers: GL checksumCalculator failure\n");
626 			}
627 			#ifdef CHECK_GL_ERRORS
628 			GLint err = this->glGetError();
629 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDeleteFramebuffers\n", err);
630 			#endif
631 			DECODER_DEBUG_LOG("gles2(%p): glDeleteFramebuffers(n:%d framebuffers:%p(%u) )", stream, var_n, (const GLuint*)(inptr_framebuffers.get()), size_framebuffers);
632 			this->glDeleteFramebuffers_dec(this, var_n, (const GLuint*)(inptr_framebuffers.get()));
633 			SET_LASTCALL("glDeleteFramebuffers");
634 			android::base::endTrace();
635 			break;
636 		}
637 		case OP_glDeleteProgram: {
638 			android::base::beginTrace("glDeleteProgram decode");
639 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
640 			if (useChecksum) {
641 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
642 					"gles2_decoder_context_t::decode, OP_glDeleteProgram: GL checksumCalculator failure\n");
643 			}
644 			#ifdef CHECK_GL_ERRORS
645 			GLint err = this->glGetError();
646 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDeleteProgram\n", err);
647 			#endif
648 			DECODER_DEBUG_LOG("gles2(%p): glDeleteProgram(program:%u )", stream, var_program);
649 			this->glDeleteProgram_dec(this, var_program);
650 			SET_LASTCALL("glDeleteProgram");
651 			android::base::endTrace();
652 			break;
653 		}
654 		case OP_glDeleteRenderbuffers: {
655 			android::base::beginTrace("glDeleteRenderbuffers decode");
656 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
657 			uint32_t size_renderbuffers __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
658 			InputBuffer inptr_renderbuffers(ptr + 8 + 4 + 4, size_renderbuffers);
659 			if (useChecksum) {
660 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_renderbuffers, ptr + 8 + 4 + 4 + size_renderbuffers, checksumSize,
661 					"gles2_decoder_context_t::decode, OP_glDeleteRenderbuffers: GL checksumCalculator failure\n");
662 			}
663 			#ifdef CHECK_GL_ERRORS
664 			GLint err = this->glGetError();
665 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDeleteRenderbuffers\n", err);
666 			#endif
667 			DECODER_DEBUG_LOG("gles2(%p): glDeleteRenderbuffers(n:%d renderbuffers:%p(%u) )", stream, var_n, (const GLuint*)(inptr_renderbuffers.get()), size_renderbuffers);
668 			this->glDeleteRenderbuffers_dec(this, var_n, (const GLuint*)(inptr_renderbuffers.get()));
669 			SET_LASTCALL("glDeleteRenderbuffers");
670 			android::base::endTrace();
671 			break;
672 		}
673 		case OP_glDeleteShader: {
674 			android::base::beginTrace("glDeleteShader decode");
675 			GLuint var_shader = Unpack<GLuint,uint32_t>(ptr + 8);
676 			if (useChecksum) {
677 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
678 					"gles2_decoder_context_t::decode, OP_glDeleteShader: GL checksumCalculator failure\n");
679 			}
680 			#ifdef CHECK_GL_ERRORS
681 			GLint err = this->glGetError();
682 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDeleteShader\n", err);
683 			#endif
684 			DECODER_DEBUG_LOG("gles2(%p): glDeleteShader(shader:%u )", stream, var_shader);
685 			this->glDeleteShader_dec(this, var_shader);
686 			SET_LASTCALL("glDeleteShader");
687 			android::base::endTrace();
688 			break;
689 		}
690 		case OP_glDeleteTextures: {
691 			android::base::beginTrace("glDeleteTextures decode");
692 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
693 			uint32_t size_textures __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
694 			InputBuffer inptr_textures(ptr + 8 + 4 + 4, size_textures);
695 			if (useChecksum) {
696 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_textures, ptr + 8 + 4 + 4 + size_textures, checksumSize,
697 					"gles2_decoder_context_t::decode, OP_glDeleteTextures: GL checksumCalculator failure\n");
698 			}
699 			#ifdef CHECK_GL_ERRORS
700 			GLint err = this->glGetError();
701 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDeleteTextures\n", err);
702 			#endif
703 			DECODER_DEBUG_LOG("gles2(%p): glDeleteTextures(n:%d textures:%p(%u) )", stream, var_n, (const GLuint*)(inptr_textures.get()), size_textures);
704 			this->glDeleteTextures_dec(this, var_n, (const GLuint*)(inptr_textures.get()));
705 			SET_LASTCALL("glDeleteTextures");
706 			android::base::endTrace();
707 			break;
708 		}
709 		case OP_glDepthFunc: {
710 			android::base::beginTrace("glDepthFunc decode");
711 			GLenum var_func = Unpack<GLenum,uint32_t>(ptr + 8);
712 			if (useChecksum) {
713 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
714 					"gles2_decoder_context_t::decode, OP_glDepthFunc: GL checksumCalculator failure\n");
715 			}
716 			#ifdef CHECK_GL_ERRORS
717 			GLint err = this->glGetError();
718 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDepthFunc\n", err);
719 			#endif
720 			DECODER_DEBUG_LOG("gles2(%p): glDepthFunc(func:0x%08x )", stream, var_func);
721 			this->glDepthFunc(var_func);
722 			SET_LASTCALL("glDepthFunc");
723 			android::base::endTrace();
724 			break;
725 		}
726 		case OP_glDepthMask: {
727 			android::base::beginTrace("glDepthMask decode");
728 			GLboolean var_flag = Unpack<GLboolean,uint8_t>(ptr + 8);
729 			if (useChecksum) {
730 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 1, ptr + 8 + 1, checksumSize,
731 					"gles2_decoder_context_t::decode, OP_glDepthMask: GL checksumCalculator failure\n");
732 			}
733 			#ifdef CHECK_GL_ERRORS
734 			GLint err = this->glGetError();
735 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDepthMask\n", err);
736 			#endif
737 			DECODER_DEBUG_LOG("gles2(%p): glDepthMask(flag:%d )", stream, var_flag);
738 			this->glDepthMask(var_flag);
739 			SET_LASTCALL("glDepthMask");
740 			android::base::endTrace();
741 			break;
742 		}
743 		case OP_glDepthRangef: {
744 			android::base::beginTrace("glDepthRangef decode");
745 			GLclampf var_zNear = Unpack<GLclampf,uint32_t>(ptr + 8);
746 			GLclampf var_zFar = Unpack<GLclampf,uint32_t>(ptr + 8 + 4);
747 			if (useChecksum) {
748 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
749 					"gles2_decoder_context_t::decode, OP_glDepthRangef: GL checksumCalculator failure\n");
750 			}
751 			#ifdef CHECK_GL_ERRORS
752 			GLint err = this->glGetError();
753 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDepthRangef\n", err);
754 			#endif
755 			DECODER_DEBUG_LOG("gles2(%p): glDepthRangef(zNear:%f zFar:%f )", stream, var_zNear, var_zFar);
756 			this->glDepthRangef(var_zNear, var_zFar);
757 			SET_LASTCALL("glDepthRangef");
758 			android::base::endTrace();
759 			break;
760 		}
761 		case OP_glDetachShader: {
762 			android::base::beginTrace("glDetachShader decode");
763 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
764 			GLuint var_shader = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
765 			if (useChecksum) {
766 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
767 					"gles2_decoder_context_t::decode, OP_glDetachShader: GL checksumCalculator failure\n");
768 			}
769 			#ifdef CHECK_GL_ERRORS
770 			GLint err = this->glGetError();
771 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDetachShader\n", err);
772 			#endif
773 			DECODER_DEBUG_LOG("gles2(%p): glDetachShader(program:%u shader:%u )", stream, var_program, var_shader);
774 			this->glDetachShader_dec(this, var_program, var_shader);
775 			SET_LASTCALL("glDetachShader");
776 			android::base::endTrace();
777 			break;
778 		}
779 		case OP_glDisable: {
780 			android::base::beginTrace("glDisable decode");
781 			GLenum var_cap = Unpack<GLenum,uint32_t>(ptr + 8);
782 			if (useChecksum) {
783 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
784 					"gles2_decoder_context_t::decode, OP_glDisable: GL checksumCalculator failure\n");
785 			}
786 			#ifdef CHECK_GL_ERRORS
787 			GLint err = this->glGetError();
788 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDisable\n", err);
789 			#endif
790 			DECODER_DEBUG_LOG("gles2(%p): glDisable(cap:0x%08x )", stream, var_cap);
791 			this->glDisable(var_cap);
792 			SET_LASTCALL("glDisable");
793 			android::base::endTrace();
794 			break;
795 		}
796 		case OP_glDisableVertexAttribArray: {
797 			android::base::beginTrace("glDisableVertexAttribArray decode");
798 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
799 			if (useChecksum) {
800 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
801 					"gles2_decoder_context_t::decode, OP_glDisableVertexAttribArray: GL checksumCalculator failure\n");
802 			}
803 			#ifdef CHECK_GL_ERRORS
804 			GLint err = this->glGetError();
805 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDisableVertexAttribArray\n", err);
806 			#endif
807 			DECODER_DEBUG_LOG("gles2(%p): glDisableVertexAttribArray(index:%u )", stream, var_index);
808 			this->glDisableVertexAttribArray(var_index);
809 			SET_LASTCALL("glDisableVertexAttribArray");
810 			android::base::endTrace();
811 			break;
812 		}
813 		case OP_glDrawArrays: {
814 			android::base::beginTrace("glDrawArrays decode");
815 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
816 			GLint var_first = Unpack<GLint,uint32_t>(ptr + 8 + 4);
817 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
818 			if (useChecksum) {
819 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
820 					"gles2_decoder_context_t::decode, OP_glDrawArrays: GL checksumCalculator failure\n");
821 			}
822 			#ifdef CHECK_GL_ERRORS
823 			GLint err = this->glGetError();
824 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawArrays\n", err);
825 			#endif
826 			DECODER_DEBUG_LOG("gles2(%p): glDrawArrays(mode:0x%08x first:%d count:%d )", stream, var_mode, var_first, var_count);
827 			this->glDrawArrays(var_mode, var_first, var_count);
828 			SET_LASTCALL("glDrawArrays");
829 			android::base::endTrace();
830 			break;
831 		}
832 		case OP_glDrawElements: {
833 			android::base::beginTrace("glDrawElements decode");
834 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
835 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
836 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
837 			uint32_t size_indices __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
838 			InputBuffer inptr_indices(ptr + 8 + 4 + 4 + 4 + 4, size_indices);
839 			if (useChecksum) {
840 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_indices, ptr + 8 + 4 + 4 + 4 + 4 + size_indices, checksumSize,
841 					"gles2_decoder_context_t::decode, OP_glDrawElements: GL checksumCalculator failure\n");
842 			}
843 			#ifdef CHECK_GL_ERRORS
844 			GLint err = this->glGetError();
845 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawElements\n", err);
846 			#endif
847 			DECODER_DEBUG_LOG("gles2(%p): glDrawElements(mode:0x%08x count:%d type:0x%08x indices:%p(%u) )", stream, var_mode, var_count, var_type, (const GLvoid*)(inptr_indices.get()), size_indices);
848 			this->glDrawElements(var_mode, var_count, var_type, (const GLvoid*)(inptr_indices.get()));
849 			SET_LASTCALL("glDrawElements");
850 			android::base::endTrace();
851 			break;
852 		}
853 		case OP_glEnable: {
854 			android::base::beginTrace("glEnable decode");
855 			GLenum var_cap = Unpack<GLenum,uint32_t>(ptr + 8);
856 			if (useChecksum) {
857 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
858 					"gles2_decoder_context_t::decode, OP_glEnable: GL checksumCalculator failure\n");
859 			}
860 			#ifdef CHECK_GL_ERRORS
861 			GLint err = this->glGetError();
862 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glEnable\n", err);
863 			#endif
864 			DECODER_DEBUG_LOG("gles2(%p): glEnable(cap:0x%08x )", stream, var_cap);
865 			this->glEnable(var_cap);
866 			SET_LASTCALL("glEnable");
867 			android::base::endTrace();
868 			break;
869 		}
870 		case OP_glEnableVertexAttribArray: {
871 			android::base::beginTrace("glEnableVertexAttribArray decode");
872 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
873 			if (useChecksum) {
874 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
875 					"gles2_decoder_context_t::decode, OP_glEnableVertexAttribArray: GL checksumCalculator failure\n");
876 			}
877 			#ifdef CHECK_GL_ERRORS
878 			GLint err = this->glGetError();
879 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glEnableVertexAttribArray\n", err);
880 			#endif
881 			DECODER_DEBUG_LOG("gles2(%p): glEnableVertexAttribArray(index:%u )", stream, var_index);
882 			this->glEnableVertexAttribArray(var_index);
883 			SET_LASTCALL("glEnableVertexAttribArray");
884 			android::base::endTrace();
885 			break;
886 		}
887 		case OP_glFinish: {
888 			android::base::beginTrace("glFinish decode");
889 			if (useChecksum) {
890 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8, ptr + 8, checksumSize,
891 					"gles2_decoder_context_t::decode, OP_glFinish: GL checksumCalculator failure\n");
892 			}
893 			#ifdef CHECK_GL_ERRORS
894 			GLint err = this->glGetError();
895 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glFinish\n", err);
896 			#endif
897 			DECODER_DEBUG_LOG("gles2(%p): glFinish()", stream);
898 			this->glFinish();
899 			SET_LASTCALL("glFinish");
900 			android::base::endTrace();
901 			break;
902 		}
903 		case OP_glFlush: {
904 			android::base::beginTrace("glFlush decode");
905 			if (useChecksum) {
906 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8, ptr + 8, checksumSize,
907 					"gles2_decoder_context_t::decode, OP_glFlush: GL checksumCalculator failure\n");
908 			}
909 			#ifdef CHECK_GL_ERRORS
910 			GLint err = this->glGetError();
911 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glFlush\n", err);
912 			#endif
913 			DECODER_DEBUG_LOG("gles2(%p): glFlush()", stream);
914 			this->glFlush();
915 			SET_LASTCALL("glFlush");
916 			android::base::endTrace();
917 			break;
918 		}
919 		case OP_glFramebufferRenderbuffer: {
920 			android::base::beginTrace("glFramebufferRenderbuffer decode");
921 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
922 			GLenum var_attachment = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
923 			GLenum var_renderbuffertarget = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
924 			GLuint var_renderbuffer = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4);
925 			if (useChecksum) {
926 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
927 					"gles2_decoder_context_t::decode, OP_glFramebufferRenderbuffer: GL checksumCalculator failure\n");
928 			}
929 			#ifdef CHECK_GL_ERRORS
930 			GLint err = this->glGetError();
931 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glFramebufferRenderbuffer\n", err);
932 			#endif
933 			DECODER_DEBUG_LOG("gles2(%p): glFramebufferRenderbuffer(target:0x%08x attachment:0x%08x renderbuffertarget:0x%08x renderbuffer:%u )", stream, var_target, var_attachment, var_renderbuffertarget, var_renderbuffer);
934 			this->glFramebufferRenderbuffer(var_target, var_attachment, var_renderbuffertarget, var_renderbuffer);
935 			SET_LASTCALL("glFramebufferRenderbuffer");
936 			android::base::endTrace();
937 			break;
938 		}
939 		case OP_glFramebufferTexture2D: {
940 			android::base::beginTrace("glFramebufferTexture2D decode");
941 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
942 			GLenum var_attachment = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
943 			GLenum var_textarget = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
944 			GLuint var_texture = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4);
945 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
946 			if (useChecksum) {
947 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
948 					"gles2_decoder_context_t::decode, OP_glFramebufferTexture2D: GL checksumCalculator failure\n");
949 			}
950 			#ifdef CHECK_GL_ERRORS
951 			GLint err = this->glGetError();
952 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glFramebufferTexture2D\n", err);
953 			#endif
954 			DECODER_DEBUG_LOG("gles2(%p): glFramebufferTexture2D(target:0x%08x attachment:0x%08x textarget:0x%08x texture:%u level:%d )", stream, var_target, var_attachment, var_textarget, var_texture, var_level);
955 			this->glFramebufferTexture2D(var_target, var_attachment, var_textarget, var_texture, var_level);
956 			SET_LASTCALL("glFramebufferTexture2D");
957 			android::base::endTrace();
958 			break;
959 		}
960 		case OP_glFrontFace: {
961 			android::base::beginTrace("glFrontFace decode");
962 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
963 			if (useChecksum) {
964 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
965 					"gles2_decoder_context_t::decode, OP_glFrontFace: GL checksumCalculator failure\n");
966 			}
967 			#ifdef CHECK_GL_ERRORS
968 			GLint err = this->glGetError();
969 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glFrontFace\n", err);
970 			#endif
971 			DECODER_DEBUG_LOG("gles2(%p): glFrontFace(mode:0x%08x )", stream, var_mode);
972 			this->glFrontFace(var_mode);
973 			SET_LASTCALL("glFrontFace");
974 			android::base::endTrace();
975 			break;
976 		}
977 		case OP_glGenBuffers: {
978 			android::base::beginTrace("glGenBuffers decode");
979 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
980 			uint32_t size_buffers __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
981 			if (useChecksum) {
982 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
983 					"gles2_decoder_context_t::decode, OP_glGenBuffers: GL checksumCalculator failure\n");
984 			}
985 			size_t totalTmpSize = size_buffers;
986 			totalTmpSize += checksumSize;
987 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
988 			OutputBuffer outptr_buffers(&tmpBuf[0], size_buffers);
989 			#ifdef CHECK_GL_ERRORS
990 			GLint err = this->glGetError();
991 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGenBuffers\n", err);
992 			#endif
993 			DECODER_DEBUG_LOG("gles2(%p): glGenBuffers(n:%d buffers:%p(%u) )", stream, var_n, (GLuint*)(outptr_buffers.get()), size_buffers);
994 			this->glGenBuffers_dec(this, var_n, (GLuint*)(outptr_buffers.get()));
995 			outptr_buffers.flush();
996 			if (useChecksum) {
997 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
998 			}
999 			stream->flush();
1000 			SET_LASTCALL("glGenBuffers");
1001 			android::base::endTrace();
1002 			break;
1003 		}
1004 		case OP_glGenerateMipmap: {
1005 			android::base::beginTrace("glGenerateMipmap decode");
1006 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
1007 			if (useChecksum) {
1008 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
1009 					"gles2_decoder_context_t::decode, OP_glGenerateMipmap: GL checksumCalculator failure\n");
1010 			}
1011 			#ifdef CHECK_GL_ERRORS
1012 			GLint err = this->glGetError();
1013 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGenerateMipmap\n", err);
1014 			#endif
1015 			DECODER_DEBUG_LOG("gles2(%p): glGenerateMipmap(target:0x%08x )", stream, var_target);
1016 			this->glGenerateMipmap(var_target);
1017 			SET_LASTCALL("glGenerateMipmap");
1018 			android::base::endTrace();
1019 			break;
1020 		}
1021 		case OP_glGenFramebuffers: {
1022 			android::base::beginTrace("glGenFramebuffers decode");
1023 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
1024 			uint32_t size_framebuffers __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
1025 			if (useChecksum) {
1026 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
1027 					"gles2_decoder_context_t::decode, OP_glGenFramebuffers: GL checksumCalculator failure\n");
1028 			}
1029 			size_t totalTmpSize = size_framebuffers;
1030 			totalTmpSize += checksumSize;
1031 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1032 			OutputBuffer outptr_framebuffers(&tmpBuf[0], size_framebuffers);
1033 			#ifdef CHECK_GL_ERRORS
1034 			GLint err = this->glGetError();
1035 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGenFramebuffers\n", err);
1036 			#endif
1037 			DECODER_DEBUG_LOG("gles2(%p): glGenFramebuffers(n:%d framebuffers:%p(%u) )", stream, var_n, (GLuint*)(outptr_framebuffers.get()), size_framebuffers);
1038 			this->glGenFramebuffers_dec(this, var_n, (GLuint*)(outptr_framebuffers.get()));
1039 			outptr_framebuffers.flush();
1040 			if (useChecksum) {
1041 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1042 			}
1043 			stream->flush();
1044 			SET_LASTCALL("glGenFramebuffers");
1045 			android::base::endTrace();
1046 			break;
1047 		}
1048 		case OP_glGenRenderbuffers: {
1049 			android::base::beginTrace("glGenRenderbuffers decode");
1050 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
1051 			uint32_t size_renderbuffers __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
1052 			if (useChecksum) {
1053 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
1054 					"gles2_decoder_context_t::decode, OP_glGenRenderbuffers: GL checksumCalculator failure\n");
1055 			}
1056 			size_t totalTmpSize = size_renderbuffers;
1057 			totalTmpSize += checksumSize;
1058 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1059 			OutputBuffer outptr_renderbuffers(&tmpBuf[0], size_renderbuffers);
1060 			#ifdef CHECK_GL_ERRORS
1061 			GLint err = this->glGetError();
1062 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGenRenderbuffers\n", err);
1063 			#endif
1064 			DECODER_DEBUG_LOG("gles2(%p): glGenRenderbuffers(n:%d renderbuffers:%p(%u) )", stream, var_n, (GLuint*)(outptr_renderbuffers.get()), size_renderbuffers);
1065 			this->glGenRenderbuffers_dec(this, var_n, (GLuint*)(outptr_renderbuffers.get()));
1066 			outptr_renderbuffers.flush();
1067 			if (useChecksum) {
1068 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1069 			}
1070 			stream->flush();
1071 			SET_LASTCALL("glGenRenderbuffers");
1072 			android::base::endTrace();
1073 			break;
1074 		}
1075 		case OP_glGenTextures: {
1076 			android::base::beginTrace("glGenTextures decode");
1077 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
1078 			uint32_t size_textures __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
1079 			if (useChecksum) {
1080 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
1081 					"gles2_decoder_context_t::decode, OP_glGenTextures: GL checksumCalculator failure\n");
1082 			}
1083 			size_t totalTmpSize = size_textures;
1084 			totalTmpSize += checksumSize;
1085 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1086 			OutputBuffer outptr_textures(&tmpBuf[0], size_textures);
1087 			#ifdef CHECK_GL_ERRORS
1088 			GLint err = this->glGetError();
1089 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGenTextures\n", err);
1090 			#endif
1091 			DECODER_DEBUG_LOG("gles2(%p): glGenTextures(n:%d textures:%p(%u) )", stream, var_n, (GLuint*)(outptr_textures.get()), size_textures);
1092 			this->glGenTextures_dec(this, var_n, (GLuint*)(outptr_textures.get()));
1093 			outptr_textures.flush();
1094 			if (useChecksum) {
1095 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1096 			}
1097 			stream->flush();
1098 			SET_LASTCALL("glGenTextures");
1099 			android::base::endTrace();
1100 			break;
1101 		}
1102 		case OP_glGetActiveAttrib: {
1103 			android::base::beginTrace("glGetActiveAttrib decode");
1104 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
1105 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
1106 			GLsizei var_bufsize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
1107 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
1108 			uint32_t size_size __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
1109 			uint32_t size_type __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
1110 			uint32_t size_name __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
1111 			if (useChecksum) {
1112 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
1113 					"gles2_decoder_context_t::decode, OP_glGetActiveAttrib: GL checksumCalculator failure\n");
1114 			}
1115 			size_t totalTmpSize = size_length;
1116 			totalTmpSize += size_size;
1117 			totalTmpSize += size_type;
1118 			totalTmpSize += size_name;
1119 			totalTmpSize += checksumSize;
1120 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1121 			OutputBuffer outptr_length(&tmpBuf[0], size_length);
1122 			OutputBuffer outptr_size(&tmpBuf[0 + size_length], size_size);
1123 			OutputBuffer outptr_type(&tmpBuf[0 + size_length + size_size], size_type);
1124 			OutputBuffer outptr_name(&tmpBuf[0 + size_length + size_size + size_type], size_name);
1125 			#ifdef CHECK_GL_ERRORS
1126 			GLint err = this->glGetError();
1127 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetActiveAttrib\n", err);
1128 			#endif
1129 			DECODER_DEBUG_LOG("gles2(%p): glGetActiveAttrib(program:%u index:%u bufsize:%d length:%p(%u) size:%p(%u) type:%p(%u) name:%p(%u) )", stream, var_program, var_index, var_bufsize, (GLsizei*)(outptr_length.get()), size_length, (GLint*)(outptr_size.get()), size_size, (GLenum*)(outptr_type.get()), size_type, (GLchar*)(outptr_name.get()), size_name);
1130 			this->glGetActiveAttrib_dec(this, var_program, var_index, var_bufsize, size_length == 0 ? nullptr : (GLsizei*)(outptr_length.get()), size_size == 0 ? nullptr : (GLint*)(outptr_size.get()), size_type == 0 ? nullptr : (GLenum*)(outptr_type.get()), size_name == 0 ? nullptr : (GLchar*)(outptr_name.get()));
1131 			outptr_length.flush();
1132 			outptr_size.flush();
1133 			outptr_type.flush();
1134 			outptr_name.flush();
1135 			if (useChecksum) {
1136 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1137 			}
1138 			stream->flush();
1139 			SET_LASTCALL("glGetActiveAttrib");
1140 			android::base::endTrace();
1141 			break;
1142 		}
1143 		case OP_glGetActiveUniform: {
1144 			android::base::beginTrace("glGetActiveUniform decode");
1145 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
1146 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
1147 			GLsizei var_bufsize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
1148 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
1149 			uint32_t size_size __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
1150 			uint32_t size_type __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
1151 			uint32_t size_name __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
1152 			if (useChecksum) {
1153 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
1154 					"gles2_decoder_context_t::decode, OP_glGetActiveUniform: GL checksumCalculator failure\n");
1155 			}
1156 			size_t totalTmpSize = size_length;
1157 			totalTmpSize += size_size;
1158 			totalTmpSize += size_type;
1159 			totalTmpSize += size_name;
1160 			totalTmpSize += checksumSize;
1161 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1162 			OutputBuffer outptr_length(&tmpBuf[0], size_length);
1163 			OutputBuffer outptr_size(&tmpBuf[0 + size_length], size_size);
1164 			OutputBuffer outptr_type(&tmpBuf[0 + size_length + size_size], size_type);
1165 			OutputBuffer outptr_name(&tmpBuf[0 + size_length + size_size + size_type], size_name);
1166 			#ifdef CHECK_GL_ERRORS
1167 			GLint err = this->glGetError();
1168 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetActiveUniform\n", err);
1169 			#endif
1170 			DECODER_DEBUG_LOG("gles2(%p): glGetActiveUniform(program:%u index:%u bufsize:%d length:%p(%u) size:%p(%u) type:%p(%u) name:%p(%u) )", stream, var_program, var_index, var_bufsize, (GLsizei*)(outptr_length.get()), size_length, (GLint*)(outptr_size.get()), size_size, (GLenum*)(outptr_type.get()), size_type, (GLchar*)(outptr_name.get()), size_name);
1171 			this->glGetActiveUniform_dec(this, var_program, var_index, var_bufsize, size_length == 0 ? nullptr : (GLsizei*)(outptr_length.get()), size_size == 0 ? nullptr : (GLint*)(outptr_size.get()), size_type == 0 ? nullptr : (GLenum*)(outptr_type.get()), size_name == 0 ? nullptr : (GLchar*)(outptr_name.get()));
1172 			outptr_length.flush();
1173 			outptr_size.flush();
1174 			outptr_type.flush();
1175 			outptr_name.flush();
1176 			if (useChecksum) {
1177 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1178 			}
1179 			stream->flush();
1180 			SET_LASTCALL("glGetActiveUniform");
1181 			android::base::endTrace();
1182 			break;
1183 		}
1184 		case OP_glGetAttachedShaders: {
1185 			android::base::beginTrace("glGetAttachedShaders decode");
1186 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
1187 			GLsizei var_maxcount = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
1188 			uint32_t size_count __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
1189 			uint32_t size_shaders __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
1190 			if (useChecksum) {
1191 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
1192 					"gles2_decoder_context_t::decode, OP_glGetAttachedShaders: GL checksumCalculator failure\n");
1193 			}
1194 			size_t totalTmpSize = size_count;
1195 			totalTmpSize += size_shaders;
1196 			totalTmpSize += checksumSize;
1197 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1198 			OutputBuffer outptr_count(&tmpBuf[0], size_count);
1199 			OutputBuffer outptr_shaders(&tmpBuf[0 + size_count], size_shaders);
1200 			#ifdef CHECK_GL_ERRORS
1201 			GLint err = this->glGetError();
1202 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetAttachedShaders\n", err);
1203 			#endif
1204 			DECODER_DEBUG_LOG("gles2(%p): glGetAttachedShaders(program:%u maxcount:%d count:%p(%u) shaders:%p(%u) )", stream, var_program, var_maxcount, (GLsizei*)(outptr_count.get()), size_count, (GLuint*)(outptr_shaders.get()), size_shaders);
1205 			this->glGetAttachedShaders_dec(this, var_program, var_maxcount, size_count == 0 ? nullptr : (GLsizei*)(outptr_count.get()), (GLuint*)(outptr_shaders.get()));
1206 			outptr_count.flush();
1207 			outptr_shaders.flush();
1208 			if (useChecksum) {
1209 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1210 			}
1211 			stream->flush();
1212 			SET_LASTCALL("glGetAttachedShaders");
1213 			android::base::endTrace();
1214 			break;
1215 		}
1216 		case OP_glGetAttribLocation: {
1217 			android::base::beginTrace("glGetAttribLocation decode");
1218 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
1219 			uint32_t size_name __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
1220 			InputBuffer inptr_name(ptr + 8 + 4 + 4, size_name);
1221 			if (useChecksum) {
1222 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_name, ptr + 8 + 4 + 4 + size_name, checksumSize,
1223 					"gles2_decoder_context_t::decode, OP_glGetAttribLocation: GL checksumCalculator failure\n");
1224 			}
1225 			size_t totalTmpSize = sizeof(int);
1226 			totalTmpSize += checksumSize;
1227 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1228 			#ifdef CHECK_GL_ERRORS
1229 			GLint err = this->glGetError();
1230 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetAttribLocation\n", err);
1231 			#endif
1232 			DECODER_DEBUG_LOG("gles2(%p): glGetAttribLocation(program:%u name:%p(%u) )", stream, var_program, (const GLchar*)(inptr_name.get()), size_name);
1233 			*(int *)(&tmpBuf[0]) = 			this->glGetAttribLocation_dec(this, var_program, (const GLchar*)(inptr_name.get()));
1234 			if (useChecksum) {
1235 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1236 			}
1237 			stream->flush();
1238 			SET_LASTCALL("glGetAttribLocation");
1239 			android::base::endTrace();
1240 			break;
1241 		}
1242 		case OP_glGetBooleanv: {
1243 			android::base::beginTrace("glGetBooleanv decode");
1244 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8);
1245 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
1246 			if (useChecksum) {
1247 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
1248 					"gles2_decoder_context_t::decode, OP_glGetBooleanv: GL checksumCalculator failure\n");
1249 			}
1250 			size_t totalTmpSize = size_params;
1251 			totalTmpSize += checksumSize;
1252 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1253 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
1254 			#ifdef CHECK_GL_ERRORS
1255 			GLint err = this->glGetError();
1256 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetBooleanv\n", err);
1257 			#endif
1258 			DECODER_DEBUG_LOG("gles2(%p): glGetBooleanv(pname:0x%08x params:%p(%u) )", stream, var_pname, (GLboolean*)(outptr_params.get()), size_params);
1259 			this->glGetBooleanv(var_pname, (GLboolean*)(outptr_params.get()));
1260 			outptr_params.flush();
1261 			if (useChecksum) {
1262 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1263 			}
1264 			stream->flush();
1265 			SET_LASTCALL("glGetBooleanv");
1266 			android::base::endTrace();
1267 			break;
1268 		}
1269 		case OP_glGetBufferParameteriv: {
1270 			android::base::beginTrace("glGetBufferParameteriv decode");
1271 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
1272 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
1273 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
1274 			if (useChecksum) {
1275 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
1276 					"gles2_decoder_context_t::decode, OP_glGetBufferParameteriv: GL checksumCalculator failure\n");
1277 			}
1278 			size_t totalTmpSize = size_params;
1279 			totalTmpSize += checksumSize;
1280 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1281 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
1282 			#ifdef CHECK_GL_ERRORS
1283 			GLint err = this->glGetError();
1284 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetBufferParameteriv\n", err);
1285 			#endif
1286 			DECODER_DEBUG_LOG("gles2(%p): glGetBufferParameteriv(target:0x%08x pname:0x%08x params:%p(%u) )", stream, var_target, var_pname, (GLint*)(outptr_params.get()), size_params);
1287 			this->glGetBufferParameteriv(var_target, var_pname, (GLint*)(outptr_params.get()));
1288 			outptr_params.flush();
1289 			if (useChecksum) {
1290 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1291 			}
1292 			stream->flush();
1293 			SET_LASTCALL("glGetBufferParameteriv");
1294 			android::base::endTrace();
1295 			break;
1296 		}
1297 		case OP_glGetError: {
1298 			android::base::beginTrace("glGetError decode");
1299 			if (useChecksum) {
1300 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8, ptr + 8, checksumSize,
1301 					"gles2_decoder_context_t::decode, OP_glGetError: GL checksumCalculator failure\n");
1302 			}
1303 			size_t totalTmpSize = sizeof(GLenum);
1304 			totalTmpSize += checksumSize;
1305 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1306 			#ifdef CHECK_GL_ERRORS
1307 			GLint err = this->glGetError();
1308 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetError\n", err);
1309 			#endif
1310 			DECODER_DEBUG_LOG("gles2(%p): glGetError()", stream);
1311 			*(GLenum *)(&tmpBuf[0]) = 			this->glGetError();
1312 			if (useChecksum) {
1313 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1314 			}
1315 			stream->flush();
1316 			SET_LASTCALL("glGetError");
1317 			android::base::endTrace();
1318 			break;
1319 		}
1320 		case OP_glGetFloatv: {
1321 			android::base::beginTrace("glGetFloatv decode");
1322 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8);
1323 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
1324 			if (useChecksum) {
1325 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
1326 					"gles2_decoder_context_t::decode, OP_glGetFloatv: GL checksumCalculator failure\n");
1327 			}
1328 			size_t totalTmpSize = size_params;
1329 			totalTmpSize += checksumSize;
1330 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1331 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
1332 			#ifdef CHECK_GL_ERRORS
1333 			GLint err = this->glGetError();
1334 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetFloatv\n", err);
1335 			#endif
1336 			DECODER_DEBUG_LOG("gles2(%p): glGetFloatv(pname:0x%08x params:%p(%u) )", stream, var_pname, (GLfloat*)(outptr_params.get()), size_params);
1337 			this->glGetFloatv(var_pname, (GLfloat*)(outptr_params.get()));
1338 			outptr_params.flush();
1339 			if (useChecksum) {
1340 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1341 			}
1342 			stream->flush();
1343 			SET_LASTCALL("glGetFloatv");
1344 			android::base::endTrace();
1345 			break;
1346 		}
1347 		case OP_glGetFramebufferAttachmentParameteriv: {
1348 			android::base::beginTrace("glGetFramebufferAttachmentParameteriv decode");
1349 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
1350 			GLenum var_attachment = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
1351 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
1352 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
1353 			if (useChecksum) {
1354 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
1355 					"gles2_decoder_context_t::decode, OP_glGetFramebufferAttachmentParameteriv: GL checksumCalculator failure\n");
1356 			}
1357 			size_t totalTmpSize = size_params;
1358 			totalTmpSize += checksumSize;
1359 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1360 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
1361 			#ifdef CHECK_GL_ERRORS
1362 			GLint err = this->glGetError();
1363 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetFramebufferAttachmentParameteriv\n", err);
1364 			#endif
1365 			DECODER_DEBUG_LOG("gles2(%p): glGetFramebufferAttachmentParameteriv(target:0x%08x attachment:0x%08x pname:0x%08x params:%p(%u) )", stream, var_target, var_attachment, var_pname, (GLint*)(outptr_params.get()), size_params);
1366 			this->glGetFramebufferAttachmentParameteriv(var_target, var_attachment, var_pname, (GLint*)(outptr_params.get()));
1367 			outptr_params.flush();
1368 			if (useChecksum) {
1369 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1370 			}
1371 			stream->flush();
1372 			SET_LASTCALL("glGetFramebufferAttachmentParameteriv");
1373 			android::base::endTrace();
1374 			break;
1375 		}
1376 		case OP_glGetIntegerv: {
1377 			android::base::beginTrace("glGetIntegerv decode");
1378 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8);
1379 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
1380 			if (useChecksum) {
1381 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
1382 					"gles2_decoder_context_t::decode, OP_glGetIntegerv: GL checksumCalculator failure\n");
1383 			}
1384 			size_t totalTmpSize = size_params;
1385 			totalTmpSize += checksumSize;
1386 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1387 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
1388 			#ifdef CHECK_GL_ERRORS
1389 			GLint err = this->glGetError();
1390 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetIntegerv\n", err);
1391 			#endif
1392 			DECODER_DEBUG_LOG("gles2(%p): glGetIntegerv(pname:0x%08x params:%p(%u) )", stream, var_pname, (GLint*)(outptr_params.get()), size_params);
1393 			this->glGetIntegerv(var_pname, (GLint*)(outptr_params.get()));
1394 			outptr_params.flush();
1395 			if (useChecksum) {
1396 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1397 			}
1398 			stream->flush();
1399 			SET_LASTCALL("glGetIntegerv");
1400 			android::base::endTrace();
1401 			break;
1402 		}
1403 		case OP_glGetProgramiv: {
1404 			android::base::beginTrace("glGetProgramiv decode");
1405 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
1406 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
1407 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
1408 			if (useChecksum) {
1409 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
1410 					"gles2_decoder_context_t::decode, OP_glGetProgramiv: GL checksumCalculator failure\n");
1411 			}
1412 			size_t totalTmpSize = size_params;
1413 			totalTmpSize += checksumSize;
1414 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1415 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
1416 			#ifdef CHECK_GL_ERRORS
1417 			GLint err = this->glGetError();
1418 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetProgramiv\n", err);
1419 			#endif
1420 			DECODER_DEBUG_LOG("gles2(%p): glGetProgramiv(program:%u pname:0x%08x params:%p(%u) )", stream, var_program, var_pname, (GLint*)(outptr_params.get()), size_params);
1421 			this->glGetProgramiv_dec(this, var_program, var_pname, (GLint*)(outptr_params.get()));
1422 			outptr_params.flush();
1423 			if (useChecksum) {
1424 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1425 			}
1426 			stream->flush();
1427 			SET_LASTCALL("glGetProgramiv");
1428 			android::base::endTrace();
1429 			break;
1430 		}
1431 		case OP_glGetProgramInfoLog: {
1432 			android::base::beginTrace("glGetProgramInfoLog decode");
1433 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
1434 			GLsizei var_bufsize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
1435 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
1436 			uint32_t size_infolog __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
1437 			if (useChecksum) {
1438 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
1439 					"gles2_decoder_context_t::decode, OP_glGetProgramInfoLog: GL checksumCalculator failure\n");
1440 			}
1441 			size_t totalTmpSize = size_length;
1442 			totalTmpSize += size_infolog;
1443 			totalTmpSize += checksumSize;
1444 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1445 			OutputBuffer outptr_length(&tmpBuf[0], size_length);
1446 			OutputBuffer outptr_infolog(&tmpBuf[0 + size_length], size_infolog);
1447 			#ifdef CHECK_GL_ERRORS
1448 			GLint err = this->glGetError();
1449 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetProgramInfoLog\n", err);
1450 			#endif
1451 			DECODER_DEBUG_LOG("gles2(%p): glGetProgramInfoLog(program:%u bufsize:%d length:%p(%u) infolog:%p(%u) )", stream, var_program, var_bufsize, (GLsizei*)(outptr_length.get()), size_length, (GLchar*)(outptr_infolog.get()), size_infolog);
1452 			this->glGetProgramInfoLog_dec(this, var_program, var_bufsize, size_length == 0 ? nullptr : (GLsizei*)(outptr_length.get()), (GLchar*)(outptr_infolog.get()));
1453 			outptr_length.flush();
1454 			outptr_infolog.flush();
1455 			if (useChecksum) {
1456 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1457 			}
1458 			stream->flush();
1459 			SET_LASTCALL("glGetProgramInfoLog");
1460 			android::base::endTrace();
1461 			break;
1462 		}
1463 		case OP_glGetRenderbufferParameteriv: {
1464 			android::base::beginTrace("glGetRenderbufferParameteriv decode");
1465 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
1466 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
1467 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
1468 			if (useChecksum) {
1469 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
1470 					"gles2_decoder_context_t::decode, OP_glGetRenderbufferParameteriv: GL checksumCalculator failure\n");
1471 			}
1472 			size_t totalTmpSize = size_params;
1473 			totalTmpSize += checksumSize;
1474 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1475 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
1476 			#ifdef CHECK_GL_ERRORS
1477 			GLint err = this->glGetError();
1478 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetRenderbufferParameteriv\n", err);
1479 			#endif
1480 			DECODER_DEBUG_LOG("gles2(%p): glGetRenderbufferParameteriv(target:0x%08x pname:0x%08x params:%p(%u) )", stream, var_target, var_pname, (GLint*)(outptr_params.get()), size_params);
1481 			this->glGetRenderbufferParameteriv(var_target, var_pname, (GLint*)(outptr_params.get()));
1482 			outptr_params.flush();
1483 			if (useChecksum) {
1484 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1485 			}
1486 			stream->flush();
1487 			SET_LASTCALL("glGetRenderbufferParameteriv");
1488 			android::base::endTrace();
1489 			break;
1490 		}
1491 		case OP_glGetShaderiv: {
1492 			android::base::beginTrace("glGetShaderiv decode");
1493 			GLuint var_shader = Unpack<GLuint,uint32_t>(ptr + 8);
1494 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
1495 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
1496 			if (useChecksum) {
1497 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
1498 					"gles2_decoder_context_t::decode, OP_glGetShaderiv: GL checksumCalculator failure\n");
1499 			}
1500 			size_t totalTmpSize = size_params;
1501 			totalTmpSize += checksumSize;
1502 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1503 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
1504 			#ifdef CHECK_GL_ERRORS
1505 			GLint err = this->glGetError();
1506 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetShaderiv\n", err);
1507 			#endif
1508 			DECODER_DEBUG_LOG("gles2(%p): glGetShaderiv(shader:%u pname:0x%08x params:%p(%u) )", stream, var_shader, var_pname, (GLint*)(outptr_params.get()), size_params);
1509 			this->glGetShaderiv_dec(this, var_shader, var_pname, (GLint*)(outptr_params.get()));
1510 			outptr_params.flush();
1511 			if (useChecksum) {
1512 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1513 			}
1514 			stream->flush();
1515 			SET_LASTCALL("glGetShaderiv");
1516 			android::base::endTrace();
1517 			break;
1518 		}
1519 		case OP_glGetShaderInfoLog: {
1520 			android::base::beginTrace("glGetShaderInfoLog decode");
1521 			GLuint var_shader = Unpack<GLuint,uint32_t>(ptr + 8);
1522 			GLsizei var_bufsize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
1523 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
1524 			uint32_t size_infolog __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
1525 			if (useChecksum) {
1526 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
1527 					"gles2_decoder_context_t::decode, OP_glGetShaderInfoLog: GL checksumCalculator failure\n");
1528 			}
1529 			size_t totalTmpSize = size_length;
1530 			totalTmpSize += size_infolog;
1531 			totalTmpSize += checksumSize;
1532 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1533 			OutputBuffer outptr_length(&tmpBuf[0], size_length);
1534 			OutputBuffer outptr_infolog(&tmpBuf[0 + size_length], size_infolog);
1535 			#ifdef CHECK_GL_ERRORS
1536 			GLint err = this->glGetError();
1537 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetShaderInfoLog\n", err);
1538 			#endif
1539 			DECODER_DEBUG_LOG("gles2(%p): glGetShaderInfoLog(shader:%u bufsize:%d length:%p(%u) infolog:%p(%u) )", stream, var_shader, var_bufsize, (GLsizei*)(outptr_length.get()), size_length, (GLchar*)(outptr_infolog.get()), size_infolog);
1540 			this->glGetShaderInfoLog_dec(this, var_shader, var_bufsize, size_length == 0 ? nullptr : (GLsizei*)(outptr_length.get()), (GLchar*)(outptr_infolog.get()));
1541 			outptr_length.flush();
1542 			outptr_infolog.flush();
1543 			if (useChecksum) {
1544 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1545 			}
1546 			stream->flush();
1547 			SET_LASTCALL("glGetShaderInfoLog");
1548 			android::base::endTrace();
1549 			break;
1550 		}
1551 		case OP_glGetShaderPrecisionFormat: {
1552 			android::base::beginTrace("glGetShaderPrecisionFormat decode");
1553 			GLenum var_shadertype = Unpack<GLenum,uint32_t>(ptr + 8);
1554 			GLenum var_precisiontype = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
1555 			uint32_t size_range __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
1556 			uint32_t size_precision __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
1557 			if (useChecksum) {
1558 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
1559 					"gles2_decoder_context_t::decode, OP_glGetShaderPrecisionFormat: GL checksumCalculator failure\n");
1560 			}
1561 			size_t totalTmpSize = size_range;
1562 			totalTmpSize += size_precision;
1563 			totalTmpSize += checksumSize;
1564 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1565 			OutputBuffer outptr_range(&tmpBuf[0], size_range);
1566 			OutputBuffer outptr_precision(&tmpBuf[0 + size_range], size_precision);
1567 			#ifdef CHECK_GL_ERRORS
1568 			GLint err = this->glGetError();
1569 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetShaderPrecisionFormat\n", err);
1570 			#endif
1571 			DECODER_DEBUG_LOG("gles2(%p): glGetShaderPrecisionFormat(shadertype:0x%08x precisiontype:0x%08x range:%p(%u) precision:%p(%u) )", stream, var_shadertype, var_precisiontype, (GLint*)(outptr_range.get()), size_range, (GLint*)(outptr_precision.get()), size_precision);
1572 			this->glGetShaderPrecisionFormat(var_shadertype, var_precisiontype, (GLint*)(outptr_range.get()), (GLint*)(outptr_precision.get()));
1573 			outptr_range.flush();
1574 			outptr_precision.flush();
1575 			if (useChecksum) {
1576 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1577 			}
1578 			stream->flush();
1579 			SET_LASTCALL("glGetShaderPrecisionFormat");
1580 			android::base::endTrace();
1581 			break;
1582 		}
1583 		case OP_glGetShaderSource: {
1584 			android::base::beginTrace("glGetShaderSource decode");
1585 			GLuint var_shader = Unpack<GLuint,uint32_t>(ptr + 8);
1586 			GLsizei var_bufsize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
1587 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
1588 			uint32_t size_source __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
1589 			if (useChecksum) {
1590 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
1591 					"gles2_decoder_context_t::decode, OP_glGetShaderSource: GL checksumCalculator failure\n");
1592 			}
1593 			size_t totalTmpSize = size_length;
1594 			totalTmpSize += size_source;
1595 			totalTmpSize += checksumSize;
1596 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1597 			OutputBuffer outptr_length(&tmpBuf[0], size_length);
1598 			OutputBuffer outptr_source(&tmpBuf[0 + size_length], size_source);
1599 			#ifdef CHECK_GL_ERRORS
1600 			GLint err = this->glGetError();
1601 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetShaderSource\n", err);
1602 			#endif
1603 			DECODER_DEBUG_LOG("gles2(%p): glGetShaderSource(shader:%u bufsize:%d length:%p(%u) source:%p(%u) )", stream, var_shader, var_bufsize, (GLsizei*)(outptr_length.get()), size_length, (GLchar*)(outptr_source.get()), size_source);
1604 			this->glGetShaderSource_dec(this, var_shader, var_bufsize, size_length == 0 ? nullptr : (GLsizei*)(outptr_length.get()), (GLchar*)(outptr_source.get()));
1605 			outptr_length.flush();
1606 			outptr_source.flush();
1607 			if (useChecksum) {
1608 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1609 			}
1610 			stream->flush();
1611 			SET_LASTCALL("glGetShaderSource");
1612 			android::base::endTrace();
1613 			break;
1614 		}
1615 		case OP_glGetString: {
1616 			android::base::beginTrace("glGetString decode");
1617 			GLenum var_name = Unpack<GLenum,uint32_t>(ptr + 8);
1618 			if (useChecksum) {
1619 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
1620 					"gles2_decoder_context_t::decode, OP_glGetString: GL checksumCalculator failure\n");
1621 			}
1622 			#ifdef CHECK_GL_ERRORS
1623 			GLint err = this->glGetError();
1624 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetString\n", err);
1625 			#endif
1626 			DECODER_DEBUG_LOG("gles2(%p): glGetString(name:0x%08x )", stream, var_name);
1627 			this->glGetString(var_name);
1628 			SET_LASTCALL("glGetString");
1629 			android::base::endTrace();
1630 			break;
1631 		}
1632 		case OP_glGetTexParameterfv: {
1633 			android::base::beginTrace("glGetTexParameterfv decode");
1634 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
1635 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
1636 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
1637 			if (useChecksum) {
1638 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
1639 					"gles2_decoder_context_t::decode, OP_glGetTexParameterfv: GL checksumCalculator failure\n");
1640 			}
1641 			size_t totalTmpSize = size_params;
1642 			totalTmpSize += checksumSize;
1643 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1644 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
1645 			#ifdef CHECK_GL_ERRORS
1646 			GLint err = this->glGetError();
1647 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetTexParameterfv\n", err);
1648 			#endif
1649 			DECODER_DEBUG_LOG("gles2(%p): glGetTexParameterfv(target:0x%08x pname:0x%08x params:%p(%u) )", stream, var_target, var_pname, (GLfloat*)(outptr_params.get()), size_params);
1650 			this->glGetTexParameterfv(var_target, var_pname, (GLfloat*)(outptr_params.get()));
1651 			outptr_params.flush();
1652 			if (useChecksum) {
1653 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1654 			}
1655 			stream->flush();
1656 			SET_LASTCALL("glGetTexParameterfv");
1657 			android::base::endTrace();
1658 			break;
1659 		}
1660 		case OP_glGetTexParameteriv: {
1661 			android::base::beginTrace("glGetTexParameteriv decode");
1662 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
1663 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
1664 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
1665 			if (useChecksum) {
1666 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
1667 					"gles2_decoder_context_t::decode, OP_glGetTexParameteriv: GL checksumCalculator failure\n");
1668 			}
1669 			size_t totalTmpSize = size_params;
1670 			totalTmpSize += checksumSize;
1671 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1672 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
1673 			#ifdef CHECK_GL_ERRORS
1674 			GLint err = this->glGetError();
1675 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetTexParameteriv\n", err);
1676 			#endif
1677 			DECODER_DEBUG_LOG("gles2(%p): glGetTexParameteriv(target:0x%08x pname:0x%08x params:%p(%u) )", stream, var_target, var_pname, (GLint*)(outptr_params.get()), size_params);
1678 			this->glGetTexParameteriv(var_target, var_pname, (GLint*)(outptr_params.get()));
1679 			outptr_params.flush();
1680 			if (useChecksum) {
1681 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1682 			}
1683 			stream->flush();
1684 			SET_LASTCALL("glGetTexParameteriv");
1685 			android::base::endTrace();
1686 			break;
1687 		}
1688 		case OP_glGetUniformfv: {
1689 			android::base::beginTrace("glGetUniformfv decode");
1690 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
1691 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
1692 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
1693 			if (useChecksum) {
1694 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
1695 					"gles2_decoder_context_t::decode, OP_glGetUniformfv: GL checksumCalculator failure\n");
1696 			}
1697 			size_t totalTmpSize = size_params;
1698 			totalTmpSize += checksumSize;
1699 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1700 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
1701 			#ifdef CHECK_GL_ERRORS
1702 			GLint err = this->glGetError();
1703 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetUniformfv\n", err);
1704 			#endif
1705 			DECODER_DEBUG_LOG("gles2(%p): glGetUniformfv(program:%u location:%d params:%p(%u) )", stream, var_program, var_location, (GLfloat*)(outptr_params.get()), size_params);
1706 			this->glGetUniformfv_dec(this, var_program, var_location, (GLfloat*)(outptr_params.get()));
1707 			outptr_params.flush();
1708 			if (useChecksum) {
1709 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1710 			}
1711 			stream->flush();
1712 			SET_LASTCALL("glGetUniformfv");
1713 			android::base::endTrace();
1714 			break;
1715 		}
1716 		case OP_glGetUniformiv: {
1717 			android::base::beginTrace("glGetUniformiv decode");
1718 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
1719 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
1720 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
1721 			if (useChecksum) {
1722 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
1723 					"gles2_decoder_context_t::decode, OP_glGetUniformiv: GL checksumCalculator failure\n");
1724 			}
1725 			size_t totalTmpSize = size_params;
1726 			totalTmpSize += checksumSize;
1727 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1728 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
1729 			#ifdef CHECK_GL_ERRORS
1730 			GLint err = this->glGetError();
1731 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetUniformiv\n", err);
1732 			#endif
1733 			DECODER_DEBUG_LOG("gles2(%p): glGetUniformiv(program:%u location:%d params:%p(%u) )", stream, var_program, var_location, (GLint*)(outptr_params.get()), size_params);
1734 			this->glGetUniformiv_dec(this, var_program, var_location, (GLint*)(outptr_params.get()));
1735 			outptr_params.flush();
1736 			if (useChecksum) {
1737 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1738 			}
1739 			stream->flush();
1740 			SET_LASTCALL("glGetUniformiv");
1741 			android::base::endTrace();
1742 			break;
1743 		}
1744 		case OP_glGetUniformLocation: {
1745 			android::base::beginTrace("glGetUniformLocation decode");
1746 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
1747 			uint32_t size_name __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
1748 			InputBuffer inptr_name(ptr + 8 + 4 + 4, size_name);
1749 			if (useChecksum) {
1750 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_name, ptr + 8 + 4 + 4 + size_name, checksumSize,
1751 					"gles2_decoder_context_t::decode, OP_glGetUniformLocation: GL checksumCalculator failure\n");
1752 			}
1753 			size_t totalTmpSize = sizeof(int);
1754 			totalTmpSize += checksumSize;
1755 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1756 			#ifdef CHECK_GL_ERRORS
1757 			GLint err = this->glGetError();
1758 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetUniformLocation\n", err);
1759 			#endif
1760 			DECODER_DEBUG_LOG("gles2(%p): glGetUniformLocation(program:%u name:%p(%u) )", stream, var_program, (const GLchar*)(inptr_name.get()), size_name);
1761 			*(int *)(&tmpBuf[0]) = 			this->glGetUniformLocation_dec(this, var_program, (const GLchar*)(inptr_name.get()));
1762 			if (useChecksum) {
1763 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1764 			}
1765 			stream->flush();
1766 			SET_LASTCALL("glGetUniformLocation");
1767 			android::base::endTrace();
1768 			break;
1769 		}
1770 		case OP_glGetVertexAttribfv: {
1771 			android::base::beginTrace("glGetVertexAttribfv decode");
1772 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
1773 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
1774 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
1775 			if (useChecksum) {
1776 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
1777 					"gles2_decoder_context_t::decode, OP_glGetVertexAttribfv: GL checksumCalculator failure\n");
1778 			}
1779 			size_t totalTmpSize = size_params;
1780 			totalTmpSize += checksumSize;
1781 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1782 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
1783 			#ifdef CHECK_GL_ERRORS
1784 			GLint err = this->glGetError();
1785 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetVertexAttribfv\n", err);
1786 			#endif
1787 			DECODER_DEBUG_LOG("gles2(%p): glGetVertexAttribfv(index:%u pname:0x%08x params:%p(%u) )", stream, var_index, var_pname, (GLfloat*)(outptr_params.get()), size_params);
1788 			this->glGetVertexAttribfv(var_index, var_pname, (GLfloat*)(outptr_params.get()));
1789 			outptr_params.flush();
1790 			if (useChecksum) {
1791 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1792 			}
1793 			stream->flush();
1794 			SET_LASTCALL("glGetVertexAttribfv");
1795 			android::base::endTrace();
1796 			break;
1797 		}
1798 		case OP_glGetVertexAttribiv: {
1799 			android::base::beginTrace("glGetVertexAttribiv decode");
1800 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
1801 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
1802 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
1803 			if (useChecksum) {
1804 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
1805 					"gles2_decoder_context_t::decode, OP_glGetVertexAttribiv: GL checksumCalculator failure\n");
1806 			}
1807 			size_t totalTmpSize = size_params;
1808 			totalTmpSize += checksumSize;
1809 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1810 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
1811 			#ifdef CHECK_GL_ERRORS
1812 			GLint err = this->glGetError();
1813 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetVertexAttribiv\n", err);
1814 			#endif
1815 			DECODER_DEBUG_LOG("gles2(%p): glGetVertexAttribiv(index:%u pname:0x%08x params:%p(%u) )", stream, var_index, var_pname, (GLint*)(outptr_params.get()), size_params);
1816 			this->glGetVertexAttribiv(var_index, var_pname, (GLint*)(outptr_params.get()));
1817 			outptr_params.flush();
1818 			if (useChecksum) {
1819 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1820 			}
1821 			stream->flush();
1822 			SET_LASTCALL("glGetVertexAttribiv");
1823 			android::base::endTrace();
1824 			break;
1825 		}
1826 		case OP_glGetVertexAttribPointerv: {
1827 			android::base::beginTrace("glGetVertexAttribPointerv decode");
1828 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
1829 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
1830 			uint32_t size_pointer __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
1831 			InputBuffer inptr_pointer(ptr + 8 + 4 + 4 + 4, size_pointer);
1832 			if (useChecksum) {
1833 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_pointer, ptr + 8 + 4 + 4 + 4 + size_pointer, checksumSize,
1834 					"gles2_decoder_context_t::decode, OP_glGetVertexAttribPointerv: GL checksumCalculator failure\n");
1835 			}
1836 			#ifdef CHECK_GL_ERRORS
1837 			GLint err = this->glGetError();
1838 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetVertexAttribPointerv\n", err);
1839 			#endif
1840 			DECODER_DEBUG_LOG("gles2(%p): glGetVertexAttribPointerv(index:%u pname:0x%08x pointer:%p(%u) )", stream, var_index, var_pname, (GLvoid**)(inptr_pointer.get()), size_pointer);
1841 			this->glGetVertexAttribPointerv(var_index, var_pname, (GLvoid**)(inptr_pointer.get()));
1842 			SET_LASTCALL("glGetVertexAttribPointerv");
1843 			android::base::endTrace();
1844 			break;
1845 		}
1846 		case OP_glHint: {
1847 			android::base::beginTrace("glHint decode");
1848 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
1849 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
1850 			if (useChecksum) {
1851 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
1852 					"gles2_decoder_context_t::decode, OP_glHint: GL checksumCalculator failure\n");
1853 			}
1854 			#ifdef CHECK_GL_ERRORS
1855 			GLint err = this->glGetError();
1856 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glHint\n", err);
1857 			#endif
1858 			DECODER_DEBUG_LOG("gles2(%p): glHint(target:0x%08x mode:0x%08x )", stream, var_target, var_mode);
1859 			this->glHint(var_target, var_mode);
1860 			SET_LASTCALL("glHint");
1861 			android::base::endTrace();
1862 			break;
1863 		}
1864 		case OP_glIsBuffer: {
1865 			android::base::beginTrace("glIsBuffer decode");
1866 			GLuint var_buffer = Unpack<GLuint,uint32_t>(ptr + 8);
1867 			if (useChecksum) {
1868 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
1869 					"gles2_decoder_context_t::decode, OP_glIsBuffer: GL checksumCalculator failure\n");
1870 			}
1871 			size_t totalTmpSize = sizeof(GLboolean);
1872 			totalTmpSize += checksumSize;
1873 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1874 			#ifdef CHECK_GL_ERRORS
1875 			GLint err = this->glGetError();
1876 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glIsBuffer\n", err);
1877 			#endif
1878 			DECODER_DEBUG_LOG("gles2(%p): glIsBuffer(buffer:%u )", stream, var_buffer);
1879 			*(GLboolean *)(&tmpBuf[0]) = 			this->glIsBuffer(var_buffer);
1880 			if (useChecksum) {
1881 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1882 			}
1883 			stream->flush();
1884 			SET_LASTCALL("glIsBuffer");
1885 			android::base::endTrace();
1886 			break;
1887 		}
1888 		case OP_glIsEnabled: {
1889 			android::base::beginTrace("glIsEnabled decode");
1890 			GLenum var_cap = Unpack<GLenum,uint32_t>(ptr + 8);
1891 			if (useChecksum) {
1892 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
1893 					"gles2_decoder_context_t::decode, OP_glIsEnabled: GL checksumCalculator failure\n");
1894 			}
1895 			size_t totalTmpSize = sizeof(GLboolean);
1896 			totalTmpSize += checksumSize;
1897 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1898 			#ifdef CHECK_GL_ERRORS
1899 			GLint err = this->glGetError();
1900 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glIsEnabled\n", err);
1901 			#endif
1902 			DECODER_DEBUG_LOG("gles2(%p): glIsEnabled(cap:0x%08x )", stream, var_cap);
1903 			*(GLboolean *)(&tmpBuf[0]) = 			this->glIsEnabled(var_cap);
1904 			if (useChecksum) {
1905 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1906 			}
1907 			stream->flush();
1908 			SET_LASTCALL("glIsEnabled");
1909 			android::base::endTrace();
1910 			break;
1911 		}
1912 		case OP_glIsFramebuffer: {
1913 			android::base::beginTrace("glIsFramebuffer decode");
1914 			GLuint var_framebuffer = Unpack<GLuint,uint32_t>(ptr + 8);
1915 			if (useChecksum) {
1916 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
1917 					"gles2_decoder_context_t::decode, OP_glIsFramebuffer: GL checksumCalculator failure\n");
1918 			}
1919 			size_t totalTmpSize = sizeof(GLboolean);
1920 			totalTmpSize += checksumSize;
1921 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1922 			#ifdef CHECK_GL_ERRORS
1923 			GLint err = this->glGetError();
1924 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glIsFramebuffer\n", err);
1925 			#endif
1926 			DECODER_DEBUG_LOG("gles2(%p): glIsFramebuffer(framebuffer:%u )", stream, var_framebuffer);
1927 			*(GLboolean *)(&tmpBuf[0]) = 			this->glIsFramebuffer(var_framebuffer);
1928 			if (useChecksum) {
1929 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1930 			}
1931 			stream->flush();
1932 			SET_LASTCALL("glIsFramebuffer");
1933 			android::base::endTrace();
1934 			break;
1935 		}
1936 		case OP_glIsProgram: {
1937 			android::base::beginTrace("glIsProgram decode");
1938 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
1939 			if (useChecksum) {
1940 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
1941 					"gles2_decoder_context_t::decode, OP_glIsProgram: GL checksumCalculator failure\n");
1942 			}
1943 			size_t totalTmpSize = sizeof(GLboolean);
1944 			totalTmpSize += checksumSize;
1945 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1946 			#ifdef CHECK_GL_ERRORS
1947 			GLint err = this->glGetError();
1948 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glIsProgram\n", err);
1949 			#endif
1950 			DECODER_DEBUG_LOG("gles2(%p): glIsProgram(program:%u )", stream, var_program);
1951 			*(GLboolean *)(&tmpBuf[0]) = 			this->glIsProgram_dec(this, var_program);
1952 			if (useChecksum) {
1953 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1954 			}
1955 			stream->flush();
1956 			SET_LASTCALL("glIsProgram");
1957 			android::base::endTrace();
1958 			break;
1959 		}
1960 		case OP_glIsRenderbuffer: {
1961 			android::base::beginTrace("glIsRenderbuffer decode");
1962 			GLuint var_renderbuffer = Unpack<GLuint,uint32_t>(ptr + 8);
1963 			if (useChecksum) {
1964 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
1965 					"gles2_decoder_context_t::decode, OP_glIsRenderbuffer: GL checksumCalculator failure\n");
1966 			}
1967 			size_t totalTmpSize = sizeof(GLboolean);
1968 			totalTmpSize += checksumSize;
1969 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1970 			#ifdef CHECK_GL_ERRORS
1971 			GLint err = this->glGetError();
1972 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glIsRenderbuffer\n", err);
1973 			#endif
1974 			DECODER_DEBUG_LOG("gles2(%p): glIsRenderbuffer(renderbuffer:%u )", stream, var_renderbuffer);
1975 			*(GLboolean *)(&tmpBuf[0]) = 			this->glIsRenderbuffer(var_renderbuffer);
1976 			if (useChecksum) {
1977 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1978 			}
1979 			stream->flush();
1980 			SET_LASTCALL("glIsRenderbuffer");
1981 			android::base::endTrace();
1982 			break;
1983 		}
1984 		case OP_glIsShader: {
1985 			android::base::beginTrace("glIsShader decode");
1986 			GLuint var_shader = Unpack<GLuint,uint32_t>(ptr + 8);
1987 			if (useChecksum) {
1988 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
1989 					"gles2_decoder_context_t::decode, OP_glIsShader: GL checksumCalculator failure\n");
1990 			}
1991 			size_t totalTmpSize = sizeof(GLboolean);
1992 			totalTmpSize += checksumSize;
1993 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1994 			#ifdef CHECK_GL_ERRORS
1995 			GLint err = this->glGetError();
1996 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glIsShader\n", err);
1997 			#endif
1998 			DECODER_DEBUG_LOG("gles2(%p): glIsShader(shader:%u )", stream, var_shader);
1999 			*(GLboolean *)(&tmpBuf[0]) = 			this->glIsShader_dec(this, var_shader);
2000 			if (useChecksum) {
2001 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
2002 			}
2003 			stream->flush();
2004 			SET_LASTCALL("glIsShader");
2005 			android::base::endTrace();
2006 			break;
2007 		}
2008 		case OP_glIsTexture: {
2009 			android::base::beginTrace("glIsTexture decode");
2010 			GLuint var_texture = Unpack<GLuint,uint32_t>(ptr + 8);
2011 			if (useChecksum) {
2012 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
2013 					"gles2_decoder_context_t::decode, OP_glIsTexture: GL checksumCalculator failure\n");
2014 			}
2015 			size_t totalTmpSize = sizeof(GLboolean);
2016 			totalTmpSize += checksumSize;
2017 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
2018 			#ifdef CHECK_GL_ERRORS
2019 			GLint err = this->glGetError();
2020 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glIsTexture\n", err);
2021 			#endif
2022 			DECODER_DEBUG_LOG("gles2(%p): glIsTexture(texture:%u )", stream, var_texture);
2023 			*(GLboolean *)(&tmpBuf[0]) = 			this->glIsTexture(var_texture);
2024 			if (useChecksum) {
2025 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
2026 			}
2027 			stream->flush();
2028 			SET_LASTCALL("glIsTexture");
2029 			android::base::endTrace();
2030 			break;
2031 		}
2032 		case OP_glLineWidth: {
2033 			android::base::beginTrace("glLineWidth decode");
2034 			GLfloat var_width = Unpack<GLfloat,uint32_t>(ptr + 8);
2035 			if (useChecksum) {
2036 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
2037 					"gles2_decoder_context_t::decode, OP_glLineWidth: GL checksumCalculator failure\n");
2038 			}
2039 			#ifdef CHECK_GL_ERRORS
2040 			GLint err = this->glGetError();
2041 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glLineWidth\n", err);
2042 			#endif
2043 			DECODER_DEBUG_LOG("gles2(%p): glLineWidth(width:%f )", stream, var_width);
2044 			this->glLineWidth(var_width);
2045 			SET_LASTCALL("glLineWidth");
2046 			android::base::endTrace();
2047 			break;
2048 		}
2049 		case OP_glLinkProgram: {
2050 			android::base::beginTrace("glLinkProgram decode");
2051 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
2052 			if (useChecksum) {
2053 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
2054 					"gles2_decoder_context_t::decode, OP_glLinkProgram: GL checksumCalculator failure\n");
2055 			}
2056 			#ifdef CHECK_GL_ERRORS
2057 			GLint err = this->glGetError();
2058 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glLinkProgram\n", err);
2059 			#endif
2060 			DECODER_DEBUG_LOG("gles2(%p): glLinkProgram(program:%u )", stream, var_program);
2061 			this->glLinkProgram_dec(this, var_program);
2062 			SET_LASTCALL("glLinkProgram");
2063 			android::base::endTrace();
2064 			break;
2065 		}
2066 		case OP_glPixelStorei: {
2067 			android::base::beginTrace("glPixelStorei decode");
2068 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8);
2069 			GLint var_param = Unpack<GLint,uint32_t>(ptr + 8 + 4);
2070 			if (useChecksum) {
2071 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
2072 					"gles2_decoder_context_t::decode, OP_glPixelStorei: GL checksumCalculator failure\n");
2073 			}
2074 			#ifdef CHECK_GL_ERRORS
2075 			GLint err = this->glGetError();
2076 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glPixelStorei\n", err);
2077 			#endif
2078 			DECODER_DEBUG_LOG("gles2(%p): glPixelStorei(pname:0x%08x param:%d )", stream, var_pname, var_param);
2079 			this->glPixelStorei(var_pname, var_param);
2080 			SET_LASTCALL("glPixelStorei");
2081 			android::base::endTrace();
2082 			break;
2083 		}
2084 		case OP_glPolygonOffset: {
2085 			android::base::beginTrace("glPolygonOffset decode");
2086 			GLfloat var_factor = Unpack<GLfloat,uint32_t>(ptr + 8);
2087 			GLfloat var_units = Unpack<GLfloat,uint32_t>(ptr + 8 + 4);
2088 			if (useChecksum) {
2089 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
2090 					"gles2_decoder_context_t::decode, OP_glPolygonOffset: GL checksumCalculator failure\n");
2091 			}
2092 			#ifdef CHECK_GL_ERRORS
2093 			GLint err = this->glGetError();
2094 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glPolygonOffset\n", err);
2095 			#endif
2096 			DECODER_DEBUG_LOG("gles2(%p): glPolygonOffset(factor:%f units:%f )", stream, var_factor, var_units);
2097 			this->glPolygonOffset(var_factor, var_units);
2098 			SET_LASTCALL("glPolygonOffset");
2099 			android::base::endTrace();
2100 			break;
2101 		}
2102 		case OP_glReadPixels: {
2103 			android::base::beginTrace("glReadPixels decode");
2104 			GLint var_x = Unpack<GLint,uint32_t>(ptr + 8);
2105 			GLint var_y = Unpack<GLint,uint32_t>(ptr + 8 + 4);
2106 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
2107 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
2108 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
2109 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
2110 			uint32_t size_pixels __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
2111 			if (useChecksum) {
2112 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
2113 					"gles2_decoder_context_t::decode, OP_glReadPixels: GL checksumCalculator failure\n");
2114 			}
2115 			size_t totalTmpSize = size_pixels;
2116 			totalTmpSize += checksumSize;
2117 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
2118 			OutputBuffer outptr_pixels(&tmpBuf[0], size_pixels);
2119 			#ifdef CHECK_GL_ERRORS
2120 			GLint err = this->glGetError();
2121 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glReadPixels\n", err);
2122 			#endif
2123 			DECODER_DEBUG_LOG("gles2(%p): glReadPixels(x:%d y:%d width:%d height:%d format:0x%08x type:0x%08x pixels:%p(%u) )", stream, var_x, var_y, var_width, var_height, var_format, var_type, (GLvoid*)(outptr_pixels.get()), size_pixels);
2124 			this->glReadPixels(var_x, var_y, var_width, var_height, var_format, var_type, (GLvoid*)(outptr_pixels.get()));
2125 			outptr_pixels.flush();
2126 			if (useChecksum) {
2127 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
2128 			}
2129 			stream->flush();
2130 			SET_LASTCALL("glReadPixels");
2131 			android::base::endTrace();
2132 			break;
2133 		}
2134 		case OP_glReleaseShaderCompiler: {
2135 			android::base::beginTrace("glReleaseShaderCompiler decode");
2136 			if (useChecksum) {
2137 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8, ptr + 8, checksumSize,
2138 					"gles2_decoder_context_t::decode, OP_glReleaseShaderCompiler: GL checksumCalculator failure\n");
2139 			}
2140 			#ifdef CHECK_GL_ERRORS
2141 			GLint err = this->glGetError();
2142 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glReleaseShaderCompiler\n", err);
2143 			#endif
2144 			DECODER_DEBUG_LOG("gles2(%p): glReleaseShaderCompiler()", stream);
2145 			this->glReleaseShaderCompiler();
2146 			SET_LASTCALL("glReleaseShaderCompiler");
2147 			android::base::endTrace();
2148 			break;
2149 		}
2150 		case OP_glRenderbufferStorage: {
2151 			android::base::beginTrace("glRenderbufferStorage decode");
2152 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
2153 			GLenum var_internalformat = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
2154 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
2155 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
2156 			if (useChecksum) {
2157 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
2158 					"gles2_decoder_context_t::decode, OP_glRenderbufferStorage: GL checksumCalculator failure\n");
2159 			}
2160 			#ifdef CHECK_GL_ERRORS
2161 			GLint err = this->glGetError();
2162 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glRenderbufferStorage\n", err);
2163 			#endif
2164 			DECODER_DEBUG_LOG("gles2(%p): glRenderbufferStorage(target:0x%08x internalformat:0x%08x width:%d height:%d )", stream, var_target, var_internalformat, var_width, var_height);
2165 			this->glRenderbufferStorage(var_target, var_internalformat, var_width, var_height);
2166 			SET_LASTCALL("glRenderbufferStorage");
2167 			android::base::endTrace();
2168 			break;
2169 		}
2170 		case OP_glSampleCoverage: {
2171 			android::base::beginTrace("glSampleCoverage decode");
2172 			GLclampf var_value = Unpack<GLclampf,uint32_t>(ptr + 8);
2173 			GLboolean var_invert = Unpack<GLboolean,uint8_t>(ptr + 8 + 4);
2174 			if (useChecksum) {
2175 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 1, ptr + 8 + 4 + 1, checksumSize,
2176 					"gles2_decoder_context_t::decode, OP_glSampleCoverage: GL checksumCalculator failure\n");
2177 			}
2178 			#ifdef CHECK_GL_ERRORS
2179 			GLint err = this->glGetError();
2180 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glSampleCoverage\n", err);
2181 			#endif
2182 			DECODER_DEBUG_LOG("gles2(%p): glSampleCoverage(value:%f invert:%d )", stream, var_value, var_invert);
2183 			this->glSampleCoverage(var_value, var_invert);
2184 			SET_LASTCALL("glSampleCoverage");
2185 			android::base::endTrace();
2186 			break;
2187 		}
2188 		case OP_glScissor: {
2189 			android::base::beginTrace("glScissor decode");
2190 			GLint var_x = Unpack<GLint,uint32_t>(ptr + 8);
2191 			GLint var_y = Unpack<GLint,uint32_t>(ptr + 8 + 4);
2192 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
2193 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
2194 			if (useChecksum) {
2195 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
2196 					"gles2_decoder_context_t::decode, OP_glScissor: GL checksumCalculator failure\n");
2197 			}
2198 			#ifdef CHECK_GL_ERRORS
2199 			GLint err = this->glGetError();
2200 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glScissor\n", err);
2201 			#endif
2202 			DECODER_DEBUG_LOG("gles2(%p): glScissor(x:%d y:%d width:%d height:%d )", stream, var_x, var_y, var_width, var_height);
2203 			this->glScissor(var_x, var_y, var_width, var_height);
2204 			SET_LASTCALL("glScissor");
2205 			android::base::endTrace();
2206 			break;
2207 		}
2208 		case OP_glShaderBinary: {
2209 			android::base::beginTrace("glShaderBinary decode");
2210 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
2211 			uint32_t size_shaders __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
2212 			InputBuffer inptr_shaders(ptr + 8 + 4 + 4, size_shaders);
2213 			GLenum var_binaryformat = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + size_shaders);
2214 			uint32_t size_binary __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + size_shaders + 4);
2215 			InputBuffer inptr_binary(ptr + 8 + 4 + 4 + size_shaders + 4 + 4, size_binary);
2216 			GLsizei var_length = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + size_shaders + 4 + 4 + size_binary);
2217 			if (useChecksum) {
2218 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_shaders + 4 + 4 + size_binary + 4, ptr + 8 + 4 + 4 + size_shaders + 4 + 4 + size_binary + 4, checksumSize,
2219 					"gles2_decoder_context_t::decode, OP_glShaderBinary: GL checksumCalculator failure\n");
2220 			}
2221 			#ifdef CHECK_GL_ERRORS
2222 			GLint err = this->glGetError();
2223 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glShaderBinary\n", err);
2224 			#endif
2225 			DECODER_DEBUG_LOG("gles2(%p): glShaderBinary(n:%d shaders:%p(%u) binaryformat:0x%08x binary:%p(%u) length:%d )", stream, var_n, (const GLuint*)(inptr_shaders.get()), size_shaders, var_binaryformat, (const GLvoid*)(inptr_binary.get()), size_binary, var_length);
2226 			this->glShaderBinary(var_n, (const GLuint*)(inptr_shaders.get()), var_binaryformat, (const GLvoid*)(inptr_binary.get()), var_length);
2227 			SET_LASTCALL("glShaderBinary");
2228 			android::base::endTrace();
2229 			break;
2230 		}
2231 		case OP_glShaderSource: {
2232 			android::base::beginTrace("glShaderSource decode");
2233 			GLuint var_shader = Unpack<GLuint,uint32_t>(ptr + 8);
2234 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
2235 			uint32_t size_string __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
2236 			InputBuffer inptr_string(ptr + 8 + 4 + 4 + 4, size_string);
2237 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_string);
2238 			InputBuffer inptr_length(ptr + 8 + 4 + 4 + 4 + size_string + 4, size_length);
2239 			if (useChecksum) {
2240 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_string + 4 + size_length, ptr + 8 + 4 + 4 + 4 + size_string + 4 + size_length, checksumSize,
2241 					"gles2_decoder_context_t::decode, OP_glShaderSource: GL checksumCalculator failure\n");
2242 			}
2243 			#ifdef CHECK_GL_ERRORS
2244 			GLint err = this->glGetError();
2245 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glShaderSource\n", err);
2246 			#endif
2247 			DECODER_DEBUG_LOG("gles2(%p): glShaderSource(shader:%u count:%d string:%p(%u) length:%p(%u) )", stream, var_shader, var_count, (const GLchar* const*)(inptr_string.get()), size_string, (const GLint*)(inptr_length.get()), size_length);
2248 			this->glShaderSource(var_shader, var_count, (const GLchar* const*)(inptr_string.get()), (const GLint*)(inptr_length.get()));
2249 			SET_LASTCALL("glShaderSource");
2250 			android::base::endTrace();
2251 			break;
2252 		}
2253 		case OP_glStencilFunc: {
2254 			android::base::beginTrace("glStencilFunc decode");
2255 			GLenum var_func = Unpack<GLenum,uint32_t>(ptr + 8);
2256 			GLint var_ref = Unpack<GLint,uint32_t>(ptr + 8 + 4);
2257 			GLuint var_mask = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
2258 			if (useChecksum) {
2259 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
2260 					"gles2_decoder_context_t::decode, OP_glStencilFunc: GL checksumCalculator failure\n");
2261 			}
2262 			#ifdef CHECK_GL_ERRORS
2263 			GLint err = this->glGetError();
2264 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glStencilFunc\n", err);
2265 			#endif
2266 			DECODER_DEBUG_LOG("gles2(%p): glStencilFunc(func:0x%08x ref:%d mask:%u )", stream, var_func, var_ref, var_mask);
2267 			this->glStencilFunc(var_func, var_ref, var_mask);
2268 			SET_LASTCALL("glStencilFunc");
2269 			android::base::endTrace();
2270 			break;
2271 		}
2272 		case OP_glStencilFuncSeparate: {
2273 			android::base::beginTrace("glStencilFuncSeparate decode");
2274 			GLenum var_face = Unpack<GLenum,uint32_t>(ptr + 8);
2275 			GLenum var_func = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
2276 			GLint var_ref = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
2277 			GLuint var_mask = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4);
2278 			if (useChecksum) {
2279 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
2280 					"gles2_decoder_context_t::decode, OP_glStencilFuncSeparate: GL checksumCalculator failure\n");
2281 			}
2282 			#ifdef CHECK_GL_ERRORS
2283 			GLint err = this->glGetError();
2284 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glStencilFuncSeparate\n", err);
2285 			#endif
2286 			DECODER_DEBUG_LOG("gles2(%p): glStencilFuncSeparate(face:0x%08x func:0x%08x ref:%d mask:%u )", stream, var_face, var_func, var_ref, var_mask);
2287 			this->glStencilFuncSeparate(var_face, var_func, var_ref, var_mask);
2288 			SET_LASTCALL("glStencilFuncSeparate");
2289 			android::base::endTrace();
2290 			break;
2291 		}
2292 		case OP_glStencilMask: {
2293 			android::base::beginTrace("glStencilMask decode");
2294 			GLuint var_mask = Unpack<GLuint,uint32_t>(ptr + 8);
2295 			if (useChecksum) {
2296 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
2297 					"gles2_decoder_context_t::decode, OP_glStencilMask: GL checksumCalculator failure\n");
2298 			}
2299 			#ifdef CHECK_GL_ERRORS
2300 			GLint err = this->glGetError();
2301 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glStencilMask\n", err);
2302 			#endif
2303 			DECODER_DEBUG_LOG("gles2(%p): glStencilMask(mask:%u )", stream, var_mask);
2304 			this->glStencilMask(var_mask);
2305 			SET_LASTCALL("glStencilMask");
2306 			android::base::endTrace();
2307 			break;
2308 		}
2309 		case OP_glStencilMaskSeparate: {
2310 			android::base::beginTrace("glStencilMaskSeparate decode");
2311 			GLenum var_face = Unpack<GLenum,uint32_t>(ptr + 8);
2312 			GLuint var_mask = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
2313 			if (useChecksum) {
2314 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
2315 					"gles2_decoder_context_t::decode, OP_glStencilMaskSeparate: GL checksumCalculator failure\n");
2316 			}
2317 			#ifdef CHECK_GL_ERRORS
2318 			GLint err = this->glGetError();
2319 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glStencilMaskSeparate\n", err);
2320 			#endif
2321 			DECODER_DEBUG_LOG("gles2(%p): glStencilMaskSeparate(face:0x%08x mask:%u )", stream, var_face, var_mask);
2322 			this->glStencilMaskSeparate(var_face, var_mask);
2323 			SET_LASTCALL("glStencilMaskSeparate");
2324 			android::base::endTrace();
2325 			break;
2326 		}
2327 		case OP_glStencilOp: {
2328 			android::base::beginTrace("glStencilOp decode");
2329 			GLenum var_fail = Unpack<GLenum,uint32_t>(ptr + 8);
2330 			GLenum var_zfail = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
2331 			GLenum var_zpass = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
2332 			if (useChecksum) {
2333 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
2334 					"gles2_decoder_context_t::decode, OP_glStencilOp: GL checksumCalculator failure\n");
2335 			}
2336 			#ifdef CHECK_GL_ERRORS
2337 			GLint err = this->glGetError();
2338 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glStencilOp\n", err);
2339 			#endif
2340 			DECODER_DEBUG_LOG("gles2(%p): glStencilOp(fail:0x%08x zfail:0x%08x zpass:0x%08x )", stream, var_fail, var_zfail, var_zpass);
2341 			this->glStencilOp(var_fail, var_zfail, var_zpass);
2342 			SET_LASTCALL("glStencilOp");
2343 			android::base::endTrace();
2344 			break;
2345 		}
2346 		case OP_glStencilOpSeparate: {
2347 			android::base::beginTrace("glStencilOpSeparate decode");
2348 			GLenum var_face = Unpack<GLenum,uint32_t>(ptr + 8);
2349 			GLenum var_fail = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
2350 			GLenum var_zfail = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
2351 			GLenum var_zpass = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4);
2352 			if (useChecksum) {
2353 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
2354 					"gles2_decoder_context_t::decode, OP_glStencilOpSeparate: GL checksumCalculator failure\n");
2355 			}
2356 			#ifdef CHECK_GL_ERRORS
2357 			GLint err = this->glGetError();
2358 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glStencilOpSeparate\n", err);
2359 			#endif
2360 			DECODER_DEBUG_LOG("gles2(%p): glStencilOpSeparate(face:0x%08x fail:0x%08x zfail:0x%08x zpass:0x%08x )", stream, var_face, var_fail, var_zfail, var_zpass);
2361 			this->glStencilOpSeparate(var_face, var_fail, var_zfail, var_zpass);
2362 			SET_LASTCALL("glStencilOpSeparate");
2363 			android::base::endTrace();
2364 			break;
2365 		}
2366 		case OP_glTexImage2D: {
2367 			android::base::beginTrace("glTexImage2D decode");
2368 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
2369 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
2370 			GLint var_internalformat = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
2371 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
2372 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
2373 			GLint var_border = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
2374 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
2375 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
2376 			uint32_t size_pixels __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
2377 			InputBuffer inptr_pixels(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, size_pixels);
2378 			if (useChecksum) {
2379 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_pixels, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_pixels, checksumSize,
2380 					"gles2_decoder_context_t::decode, OP_glTexImage2D: GL checksumCalculator failure\n");
2381 			}
2382 			#ifdef CHECK_GL_ERRORS
2383 			GLint err = this->glGetError();
2384 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexImage2D\n", err);
2385 			#endif
2386 			DECODER_DEBUG_LOG("gles2(%p): glTexImage2D(target:0x%08x level:%d internalformat:%d width:%d height:%d border:%d format:0x%08x type:0x%08x pixels:%p(%u) )", stream, var_target, var_level, var_internalformat, var_width, var_height, var_border, var_format, var_type, (const GLvoid*)(inptr_pixels.get()), size_pixels);
2387 			this->glTexImage2D(var_target, var_level, var_internalformat, var_width, var_height, var_border, var_format, var_type, size_pixels == 0 ? nullptr : (const GLvoid*)(inptr_pixels.get()));
2388 			SET_LASTCALL("glTexImage2D");
2389 			android::base::endTrace();
2390 			break;
2391 		}
2392 		case OP_glTexParameterf: {
2393 			android::base::beginTrace("glTexParameterf decode");
2394 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
2395 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
2396 			GLfloat var_param = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4);
2397 			if (useChecksum) {
2398 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
2399 					"gles2_decoder_context_t::decode, OP_glTexParameterf: GL checksumCalculator failure\n");
2400 			}
2401 			#ifdef CHECK_GL_ERRORS
2402 			GLint err = this->glGetError();
2403 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexParameterf\n", err);
2404 			#endif
2405 			DECODER_DEBUG_LOG("gles2(%p): glTexParameterf(target:0x%08x pname:0x%08x param:%f )", stream, var_target, var_pname, var_param);
2406 			this->glTexParameterf(var_target, var_pname, var_param);
2407 			SET_LASTCALL("glTexParameterf");
2408 			android::base::endTrace();
2409 			break;
2410 		}
2411 		case OP_glTexParameterfv: {
2412 			android::base::beginTrace("glTexParameterfv decode");
2413 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
2414 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
2415 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
2416 			InputBuffer inptr_params(ptr + 8 + 4 + 4 + 4, size_params);
2417 			if (useChecksum) {
2418 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_params, ptr + 8 + 4 + 4 + 4 + size_params, checksumSize,
2419 					"gles2_decoder_context_t::decode, OP_glTexParameterfv: GL checksumCalculator failure\n");
2420 			}
2421 			#ifdef CHECK_GL_ERRORS
2422 			GLint err = this->glGetError();
2423 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexParameterfv\n", err);
2424 			#endif
2425 			DECODER_DEBUG_LOG("gles2(%p): glTexParameterfv(target:0x%08x pname:0x%08x params:%p(%u) )", stream, var_target, var_pname, (const GLfloat*)(inptr_params.get()), size_params);
2426 			this->glTexParameterfv(var_target, var_pname, (const GLfloat*)(inptr_params.get()));
2427 			SET_LASTCALL("glTexParameterfv");
2428 			android::base::endTrace();
2429 			break;
2430 		}
2431 		case OP_glTexParameteri: {
2432 			android::base::beginTrace("glTexParameteri decode");
2433 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
2434 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
2435 			GLint var_param = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
2436 			if (useChecksum) {
2437 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
2438 					"gles2_decoder_context_t::decode, OP_glTexParameteri: GL checksumCalculator failure\n");
2439 			}
2440 			#ifdef CHECK_GL_ERRORS
2441 			GLint err = this->glGetError();
2442 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexParameteri\n", err);
2443 			#endif
2444 			DECODER_DEBUG_LOG("gles2(%p): glTexParameteri(target:0x%08x pname:0x%08x param:%d )", stream, var_target, var_pname, var_param);
2445 			this->glTexParameteri(var_target, var_pname, var_param);
2446 			SET_LASTCALL("glTexParameteri");
2447 			android::base::endTrace();
2448 			break;
2449 		}
2450 		case OP_glTexParameteriv: {
2451 			android::base::beginTrace("glTexParameteriv decode");
2452 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
2453 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
2454 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
2455 			InputBuffer inptr_params(ptr + 8 + 4 + 4 + 4, size_params);
2456 			if (useChecksum) {
2457 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_params, ptr + 8 + 4 + 4 + 4 + size_params, checksumSize,
2458 					"gles2_decoder_context_t::decode, OP_glTexParameteriv: GL checksumCalculator failure\n");
2459 			}
2460 			#ifdef CHECK_GL_ERRORS
2461 			GLint err = this->glGetError();
2462 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexParameteriv\n", err);
2463 			#endif
2464 			DECODER_DEBUG_LOG("gles2(%p): glTexParameteriv(target:0x%08x pname:0x%08x params:%p(%u) )", stream, var_target, var_pname, (const GLint*)(inptr_params.get()), size_params);
2465 			this->glTexParameteriv(var_target, var_pname, (const GLint*)(inptr_params.get()));
2466 			SET_LASTCALL("glTexParameteriv");
2467 			android::base::endTrace();
2468 			break;
2469 		}
2470 		case OP_glTexSubImage2D: {
2471 			android::base::beginTrace("glTexSubImage2D decode");
2472 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
2473 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
2474 			GLint var_xoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
2475 			GLint var_yoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
2476 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
2477 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
2478 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
2479 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
2480 			uint32_t size_pixels __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
2481 			InputBuffer inptr_pixels(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, size_pixels);
2482 			if (useChecksum) {
2483 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_pixels, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_pixels, checksumSize,
2484 					"gles2_decoder_context_t::decode, OP_glTexSubImage2D: GL checksumCalculator failure\n");
2485 			}
2486 			#ifdef CHECK_GL_ERRORS
2487 			GLint err = this->glGetError();
2488 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexSubImage2D\n", err);
2489 			#endif
2490 			DECODER_DEBUG_LOG("gles2(%p): glTexSubImage2D(target:0x%08x level:%d xoffset:%d yoffset:%d width:%d height:%d format:0x%08x type:0x%08x pixels:%p(%u) )", stream, var_target, var_level, var_xoffset, var_yoffset, var_width, var_height, var_format, var_type, (const GLvoid*)(inptr_pixels.get()), size_pixels);
2491 			this->glTexSubImage2D(var_target, var_level, var_xoffset, var_yoffset, var_width, var_height, var_format, var_type, size_pixels == 0 ? nullptr : (const GLvoid*)(inptr_pixels.get()));
2492 			SET_LASTCALL("glTexSubImage2D");
2493 			android::base::endTrace();
2494 			break;
2495 		}
2496 		case OP_glUniform1f: {
2497 			android::base::beginTrace("glUniform1f decode");
2498 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2499 			GLfloat var_x = Unpack<GLfloat,uint32_t>(ptr + 8 + 4);
2500 			if (useChecksum) {
2501 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
2502 					"gles2_decoder_context_t::decode, OP_glUniform1f: GL checksumCalculator failure\n");
2503 			}
2504 			#ifdef CHECK_GL_ERRORS
2505 			GLint err = this->glGetError();
2506 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform1f\n", err);
2507 			#endif
2508 			DECODER_DEBUG_LOG("gles2(%p): glUniform1f(location:%d x:%f )", stream, var_location, var_x);
2509 			this->glUniform1f(var_location, var_x);
2510 			SET_LASTCALL("glUniform1f");
2511 			android::base::endTrace();
2512 			break;
2513 		}
2514 		case OP_glUniform1fv: {
2515 			android::base::beginTrace("glUniform1fv decode");
2516 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2517 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
2518 			uint32_t size_v __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
2519 			InputBuffer inptr_v(ptr + 8 + 4 + 4 + 4, size_v);
2520 			if (useChecksum) {
2521 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_v, ptr + 8 + 4 + 4 + 4 + size_v, checksumSize,
2522 					"gles2_decoder_context_t::decode, OP_glUniform1fv: GL checksumCalculator failure\n");
2523 			}
2524 			#ifdef CHECK_GL_ERRORS
2525 			GLint err = this->glGetError();
2526 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform1fv\n", err);
2527 			#endif
2528 			DECODER_DEBUG_LOG("gles2(%p): glUniform1fv(location:%d count:%d v:%p(%u) )", stream, var_location, var_count, (const GLfloat*)(inptr_v.get()), size_v);
2529 			this->glUniform1fv(var_location, var_count, (const GLfloat*)(inptr_v.get()));
2530 			SET_LASTCALL("glUniform1fv");
2531 			android::base::endTrace();
2532 			break;
2533 		}
2534 		case OP_glUniform1i: {
2535 			android::base::beginTrace("glUniform1i decode");
2536 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2537 			GLint var_x = Unpack<GLint,uint32_t>(ptr + 8 + 4);
2538 			if (useChecksum) {
2539 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
2540 					"gles2_decoder_context_t::decode, OP_glUniform1i: GL checksumCalculator failure\n");
2541 			}
2542 			#ifdef CHECK_GL_ERRORS
2543 			GLint err = this->glGetError();
2544 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform1i\n", err);
2545 			#endif
2546 			DECODER_DEBUG_LOG("gles2(%p): glUniform1i(location:%d x:%d )", stream, var_location, var_x);
2547 			this->glUniform1i(var_location, var_x);
2548 			SET_LASTCALL("glUniform1i");
2549 			android::base::endTrace();
2550 			break;
2551 		}
2552 		case OP_glUniform1iv: {
2553 			android::base::beginTrace("glUniform1iv decode");
2554 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2555 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
2556 			uint32_t size_v __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
2557 			InputBuffer inptr_v(ptr + 8 + 4 + 4 + 4, size_v);
2558 			if (useChecksum) {
2559 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_v, ptr + 8 + 4 + 4 + 4 + size_v, checksumSize,
2560 					"gles2_decoder_context_t::decode, OP_glUniform1iv: GL checksumCalculator failure\n");
2561 			}
2562 			#ifdef CHECK_GL_ERRORS
2563 			GLint err = this->glGetError();
2564 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform1iv\n", err);
2565 			#endif
2566 			DECODER_DEBUG_LOG("gles2(%p): glUniform1iv(location:%d count:%d v:%p(%u) )", stream, var_location, var_count, (const GLint*)(inptr_v.get()), size_v);
2567 			this->glUniform1iv(var_location, var_count, (const GLint*)(inptr_v.get()));
2568 			SET_LASTCALL("glUniform1iv");
2569 			android::base::endTrace();
2570 			break;
2571 		}
2572 		case OP_glUniform2f: {
2573 			android::base::beginTrace("glUniform2f decode");
2574 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2575 			GLfloat var_x = Unpack<GLfloat,uint32_t>(ptr + 8 + 4);
2576 			GLfloat var_y = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4);
2577 			if (useChecksum) {
2578 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
2579 					"gles2_decoder_context_t::decode, OP_glUniform2f: GL checksumCalculator failure\n");
2580 			}
2581 			#ifdef CHECK_GL_ERRORS
2582 			GLint err = this->glGetError();
2583 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform2f\n", err);
2584 			#endif
2585 			DECODER_DEBUG_LOG("gles2(%p): glUniform2f(location:%d x:%f y:%f )", stream, var_location, var_x, var_y);
2586 			this->glUniform2f(var_location, var_x, var_y);
2587 			SET_LASTCALL("glUniform2f");
2588 			android::base::endTrace();
2589 			break;
2590 		}
2591 		case OP_glUniform2fv: {
2592 			android::base::beginTrace("glUniform2fv decode");
2593 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2594 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
2595 			uint32_t size_v __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
2596 			InputBuffer inptr_v(ptr + 8 + 4 + 4 + 4, size_v);
2597 			if (useChecksum) {
2598 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_v, ptr + 8 + 4 + 4 + 4 + size_v, checksumSize,
2599 					"gles2_decoder_context_t::decode, OP_glUniform2fv: GL checksumCalculator failure\n");
2600 			}
2601 			#ifdef CHECK_GL_ERRORS
2602 			GLint err = this->glGetError();
2603 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform2fv\n", err);
2604 			#endif
2605 			DECODER_DEBUG_LOG("gles2(%p): glUniform2fv(location:%d count:%d v:%p(%u) )", stream, var_location, var_count, (const GLfloat*)(inptr_v.get()), size_v);
2606 			this->glUniform2fv(var_location, var_count, (const GLfloat*)(inptr_v.get()));
2607 			SET_LASTCALL("glUniform2fv");
2608 			android::base::endTrace();
2609 			break;
2610 		}
2611 		case OP_glUniform2i: {
2612 			android::base::beginTrace("glUniform2i decode");
2613 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2614 			GLint var_x = Unpack<GLint,uint32_t>(ptr + 8 + 4);
2615 			GLint var_y = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
2616 			if (useChecksum) {
2617 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
2618 					"gles2_decoder_context_t::decode, OP_glUniform2i: GL checksumCalculator failure\n");
2619 			}
2620 			#ifdef CHECK_GL_ERRORS
2621 			GLint err = this->glGetError();
2622 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform2i\n", err);
2623 			#endif
2624 			DECODER_DEBUG_LOG("gles2(%p): glUniform2i(location:%d x:%d y:%d )", stream, var_location, var_x, var_y);
2625 			this->glUniform2i(var_location, var_x, var_y);
2626 			SET_LASTCALL("glUniform2i");
2627 			android::base::endTrace();
2628 			break;
2629 		}
2630 		case OP_glUniform2iv: {
2631 			android::base::beginTrace("glUniform2iv decode");
2632 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2633 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
2634 			uint32_t size_v __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
2635 			InputBuffer inptr_v(ptr + 8 + 4 + 4 + 4, size_v);
2636 			if (useChecksum) {
2637 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_v, ptr + 8 + 4 + 4 + 4 + size_v, checksumSize,
2638 					"gles2_decoder_context_t::decode, OP_glUniform2iv: GL checksumCalculator failure\n");
2639 			}
2640 			#ifdef CHECK_GL_ERRORS
2641 			GLint err = this->glGetError();
2642 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform2iv\n", err);
2643 			#endif
2644 			DECODER_DEBUG_LOG("gles2(%p): glUniform2iv(location:%d count:%d v:%p(%u) )", stream, var_location, var_count, (const GLint*)(inptr_v.get()), size_v);
2645 			this->glUniform2iv(var_location, var_count, (const GLint*)(inptr_v.get()));
2646 			SET_LASTCALL("glUniform2iv");
2647 			android::base::endTrace();
2648 			break;
2649 		}
2650 		case OP_glUniform3f: {
2651 			android::base::beginTrace("glUniform3f decode");
2652 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2653 			GLfloat var_x = Unpack<GLfloat,uint32_t>(ptr + 8 + 4);
2654 			GLfloat var_y = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4);
2655 			GLfloat var_z = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4 + 4);
2656 			if (useChecksum) {
2657 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
2658 					"gles2_decoder_context_t::decode, OP_glUniform3f: GL checksumCalculator failure\n");
2659 			}
2660 			#ifdef CHECK_GL_ERRORS
2661 			GLint err = this->glGetError();
2662 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform3f\n", err);
2663 			#endif
2664 			DECODER_DEBUG_LOG("gles2(%p): glUniform3f(location:%d x:%f y:%f z:%f )", stream, var_location, var_x, var_y, var_z);
2665 			this->glUniform3f(var_location, var_x, var_y, var_z);
2666 			SET_LASTCALL("glUniform3f");
2667 			android::base::endTrace();
2668 			break;
2669 		}
2670 		case OP_glUniform3fv: {
2671 			android::base::beginTrace("glUniform3fv decode");
2672 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2673 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
2674 			uint32_t size_v __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
2675 			InputBuffer inptr_v(ptr + 8 + 4 + 4 + 4, size_v);
2676 			if (useChecksum) {
2677 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_v, ptr + 8 + 4 + 4 + 4 + size_v, checksumSize,
2678 					"gles2_decoder_context_t::decode, OP_glUniform3fv: GL checksumCalculator failure\n");
2679 			}
2680 			#ifdef CHECK_GL_ERRORS
2681 			GLint err = this->glGetError();
2682 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform3fv\n", err);
2683 			#endif
2684 			DECODER_DEBUG_LOG("gles2(%p): glUniform3fv(location:%d count:%d v:%p(%u) )", stream, var_location, var_count, (const GLfloat*)(inptr_v.get()), size_v);
2685 			this->glUniform3fv(var_location, var_count, (const GLfloat*)(inptr_v.get()));
2686 			SET_LASTCALL("glUniform3fv");
2687 			android::base::endTrace();
2688 			break;
2689 		}
2690 		case OP_glUniform3i: {
2691 			android::base::beginTrace("glUniform3i decode");
2692 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2693 			GLint var_x = Unpack<GLint,uint32_t>(ptr + 8 + 4);
2694 			GLint var_y = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
2695 			GLint var_z = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
2696 			if (useChecksum) {
2697 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
2698 					"gles2_decoder_context_t::decode, OP_glUniform3i: GL checksumCalculator failure\n");
2699 			}
2700 			#ifdef CHECK_GL_ERRORS
2701 			GLint err = this->glGetError();
2702 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform3i\n", err);
2703 			#endif
2704 			DECODER_DEBUG_LOG("gles2(%p): glUniform3i(location:%d x:%d y:%d z:%d )", stream, var_location, var_x, var_y, var_z);
2705 			this->glUniform3i(var_location, var_x, var_y, var_z);
2706 			SET_LASTCALL("glUniform3i");
2707 			android::base::endTrace();
2708 			break;
2709 		}
2710 		case OP_glUniform3iv: {
2711 			android::base::beginTrace("glUniform3iv decode");
2712 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2713 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
2714 			uint32_t size_v __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
2715 			InputBuffer inptr_v(ptr + 8 + 4 + 4 + 4, size_v);
2716 			if (useChecksum) {
2717 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_v, ptr + 8 + 4 + 4 + 4 + size_v, checksumSize,
2718 					"gles2_decoder_context_t::decode, OP_glUniform3iv: GL checksumCalculator failure\n");
2719 			}
2720 			#ifdef CHECK_GL_ERRORS
2721 			GLint err = this->glGetError();
2722 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform3iv\n", err);
2723 			#endif
2724 			DECODER_DEBUG_LOG("gles2(%p): glUniform3iv(location:%d count:%d v:%p(%u) )", stream, var_location, var_count, (const GLint*)(inptr_v.get()), size_v);
2725 			this->glUniform3iv(var_location, var_count, (const GLint*)(inptr_v.get()));
2726 			SET_LASTCALL("glUniform3iv");
2727 			android::base::endTrace();
2728 			break;
2729 		}
2730 		case OP_glUniform4f: {
2731 			android::base::beginTrace("glUniform4f decode");
2732 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2733 			GLfloat var_x = Unpack<GLfloat,uint32_t>(ptr + 8 + 4);
2734 			GLfloat var_y = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4);
2735 			GLfloat var_z = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4 + 4);
2736 			GLfloat var_w = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
2737 			if (useChecksum) {
2738 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
2739 					"gles2_decoder_context_t::decode, OP_glUniform4f: GL checksumCalculator failure\n");
2740 			}
2741 			#ifdef CHECK_GL_ERRORS
2742 			GLint err = this->glGetError();
2743 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform4f\n", err);
2744 			#endif
2745 			DECODER_DEBUG_LOG("gles2(%p): glUniform4f(location:%d x:%f y:%f z:%f w:%f )", stream, var_location, var_x, var_y, var_z, var_w);
2746 			this->glUniform4f(var_location, var_x, var_y, var_z, var_w);
2747 			SET_LASTCALL("glUniform4f");
2748 			android::base::endTrace();
2749 			break;
2750 		}
2751 		case OP_glUniform4fv: {
2752 			android::base::beginTrace("glUniform4fv decode");
2753 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2754 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
2755 			uint32_t size_v __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
2756 			InputBuffer inptr_v(ptr + 8 + 4 + 4 + 4, size_v);
2757 			if (useChecksum) {
2758 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_v, ptr + 8 + 4 + 4 + 4 + size_v, checksumSize,
2759 					"gles2_decoder_context_t::decode, OP_glUniform4fv: GL checksumCalculator failure\n");
2760 			}
2761 			#ifdef CHECK_GL_ERRORS
2762 			GLint err = this->glGetError();
2763 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform4fv\n", err);
2764 			#endif
2765 			DECODER_DEBUG_LOG("gles2(%p): glUniform4fv(location:%d count:%d v:%p(%u) )", stream, var_location, var_count, (const GLfloat*)(inptr_v.get()), size_v);
2766 			this->glUniform4fv(var_location, var_count, (const GLfloat*)(inptr_v.get()));
2767 			SET_LASTCALL("glUniform4fv");
2768 			android::base::endTrace();
2769 			break;
2770 		}
2771 		case OP_glUniform4i: {
2772 			android::base::beginTrace("glUniform4i decode");
2773 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2774 			GLint var_x = Unpack<GLint,uint32_t>(ptr + 8 + 4);
2775 			GLint var_y = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
2776 			GLint var_z = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
2777 			GLint var_w = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
2778 			if (useChecksum) {
2779 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
2780 					"gles2_decoder_context_t::decode, OP_glUniform4i: GL checksumCalculator failure\n");
2781 			}
2782 			#ifdef CHECK_GL_ERRORS
2783 			GLint err = this->glGetError();
2784 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform4i\n", err);
2785 			#endif
2786 			DECODER_DEBUG_LOG("gles2(%p): glUniform4i(location:%d x:%d y:%d z:%d w:%d )", stream, var_location, var_x, var_y, var_z, var_w);
2787 			this->glUniform4i(var_location, var_x, var_y, var_z, var_w);
2788 			SET_LASTCALL("glUniform4i");
2789 			android::base::endTrace();
2790 			break;
2791 		}
2792 		case OP_glUniform4iv: {
2793 			android::base::beginTrace("glUniform4iv decode");
2794 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2795 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
2796 			uint32_t size_v __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
2797 			InputBuffer inptr_v(ptr + 8 + 4 + 4 + 4, size_v);
2798 			if (useChecksum) {
2799 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_v, ptr + 8 + 4 + 4 + 4 + size_v, checksumSize,
2800 					"gles2_decoder_context_t::decode, OP_glUniform4iv: GL checksumCalculator failure\n");
2801 			}
2802 			#ifdef CHECK_GL_ERRORS
2803 			GLint err = this->glGetError();
2804 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform4iv\n", err);
2805 			#endif
2806 			DECODER_DEBUG_LOG("gles2(%p): glUniform4iv(location:%d count:%d v:%p(%u) )", stream, var_location, var_count, (const GLint*)(inptr_v.get()), size_v);
2807 			this->glUniform4iv(var_location, var_count, (const GLint*)(inptr_v.get()));
2808 			SET_LASTCALL("glUniform4iv");
2809 			android::base::endTrace();
2810 			break;
2811 		}
2812 		case OP_glUniformMatrix2fv: {
2813 			android::base::beginTrace("glUniformMatrix2fv decode");
2814 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2815 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
2816 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4);
2817 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 1);
2818 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 1 + 4, size_value);
2819 			if (useChecksum) {
2820 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 1 + 4 + size_value, checksumSize,
2821 					"gles2_decoder_context_t::decode, OP_glUniformMatrix2fv: GL checksumCalculator failure\n");
2822 			}
2823 			#ifdef CHECK_GL_ERRORS
2824 			GLint err = this->glGetError();
2825 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniformMatrix2fv\n", err);
2826 			#endif
2827 			DECODER_DEBUG_LOG("gles2(%p): glUniformMatrix2fv(location:%d count:%d transpose:%d value:%p(%u) )", stream, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
2828 			this->glUniformMatrix2fv(var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
2829 			SET_LASTCALL("glUniformMatrix2fv");
2830 			android::base::endTrace();
2831 			break;
2832 		}
2833 		case OP_glUniformMatrix3fv: {
2834 			android::base::beginTrace("glUniformMatrix3fv decode");
2835 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2836 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
2837 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4);
2838 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 1);
2839 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 1 + 4, size_value);
2840 			if (useChecksum) {
2841 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 1 + 4 + size_value, checksumSize,
2842 					"gles2_decoder_context_t::decode, OP_glUniformMatrix3fv: GL checksumCalculator failure\n");
2843 			}
2844 			#ifdef CHECK_GL_ERRORS
2845 			GLint err = this->glGetError();
2846 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniformMatrix3fv\n", err);
2847 			#endif
2848 			DECODER_DEBUG_LOG("gles2(%p): glUniformMatrix3fv(location:%d count:%d transpose:%d value:%p(%u) )", stream, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
2849 			this->glUniformMatrix3fv(var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
2850 			SET_LASTCALL("glUniformMatrix3fv");
2851 			android::base::endTrace();
2852 			break;
2853 		}
2854 		case OP_glUniformMatrix4fv: {
2855 			android::base::beginTrace("glUniformMatrix4fv decode");
2856 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
2857 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
2858 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4);
2859 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 1);
2860 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 1 + 4, size_value);
2861 			if (useChecksum) {
2862 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 1 + 4 + size_value, checksumSize,
2863 					"gles2_decoder_context_t::decode, OP_glUniformMatrix4fv: GL checksumCalculator failure\n");
2864 			}
2865 			#ifdef CHECK_GL_ERRORS
2866 			GLint err = this->glGetError();
2867 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniformMatrix4fv\n", err);
2868 			#endif
2869 			DECODER_DEBUG_LOG("gles2(%p): glUniformMatrix4fv(location:%d count:%d transpose:%d value:%p(%u) )", stream, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
2870 			this->glUniformMatrix4fv(var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
2871 			SET_LASTCALL("glUniformMatrix4fv");
2872 			android::base::endTrace();
2873 			break;
2874 		}
2875 		case OP_glUseProgram: {
2876 			android::base::beginTrace("glUseProgram decode");
2877 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
2878 			if (useChecksum) {
2879 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
2880 					"gles2_decoder_context_t::decode, OP_glUseProgram: GL checksumCalculator failure\n");
2881 			}
2882 			#ifdef CHECK_GL_ERRORS
2883 			GLint err = this->glGetError();
2884 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUseProgram\n", err);
2885 			#endif
2886 			DECODER_DEBUG_LOG("gles2(%p): glUseProgram(program:%u )", stream, var_program);
2887 			this->glUseProgram_dec(this, var_program);
2888 			SET_LASTCALL("glUseProgram");
2889 			android::base::endTrace();
2890 			break;
2891 		}
2892 		case OP_glValidateProgram: {
2893 			android::base::beginTrace("glValidateProgram decode");
2894 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
2895 			if (useChecksum) {
2896 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
2897 					"gles2_decoder_context_t::decode, OP_glValidateProgram: GL checksumCalculator failure\n");
2898 			}
2899 			#ifdef CHECK_GL_ERRORS
2900 			GLint err = this->glGetError();
2901 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glValidateProgram\n", err);
2902 			#endif
2903 			DECODER_DEBUG_LOG("gles2(%p): glValidateProgram(program:%u )", stream, var_program);
2904 			this->glValidateProgram_dec(this, var_program);
2905 			SET_LASTCALL("glValidateProgram");
2906 			android::base::endTrace();
2907 			break;
2908 		}
2909 		case OP_glVertexAttrib1f: {
2910 			android::base::beginTrace("glVertexAttrib1f decode");
2911 			GLuint var_indx = Unpack<GLuint,uint32_t>(ptr + 8);
2912 			GLfloat var_x = Unpack<GLfloat,uint32_t>(ptr + 8 + 4);
2913 			if (useChecksum) {
2914 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
2915 					"gles2_decoder_context_t::decode, OP_glVertexAttrib1f: GL checksumCalculator failure\n");
2916 			}
2917 			#ifdef CHECK_GL_ERRORS
2918 			GLint err = this->glGetError();
2919 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttrib1f\n", err);
2920 			#endif
2921 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttrib1f(indx:%u x:%f )", stream, var_indx, var_x);
2922 			this->glVertexAttrib1f(var_indx, var_x);
2923 			SET_LASTCALL("glVertexAttrib1f");
2924 			android::base::endTrace();
2925 			break;
2926 		}
2927 		case OP_glVertexAttrib1fv: {
2928 			android::base::beginTrace("glVertexAttrib1fv decode");
2929 			GLuint var_indx = Unpack<GLuint,uint32_t>(ptr + 8);
2930 			uint32_t size_values __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
2931 			InputBuffer inptr_values(ptr + 8 + 4 + 4, size_values);
2932 			if (useChecksum) {
2933 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_values, ptr + 8 + 4 + 4 + size_values, checksumSize,
2934 					"gles2_decoder_context_t::decode, OP_glVertexAttrib1fv: GL checksumCalculator failure\n");
2935 			}
2936 			#ifdef CHECK_GL_ERRORS
2937 			GLint err = this->glGetError();
2938 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttrib1fv\n", err);
2939 			#endif
2940 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttrib1fv(indx:%u values:%p(%u) )", stream, var_indx, (const GLfloat*)(inptr_values.get()), size_values);
2941 			this->glVertexAttrib1fv(var_indx, (const GLfloat*)(inptr_values.get()));
2942 			SET_LASTCALL("glVertexAttrib1fv");
2943 			android::base::endTrace();
2944 			break;
2945 		}
2946 		case OP_glVertexAttrib2f: {
2947 			android::base::beginTrace("glVertexAttrib2f decode");
2948 			GLuint var_indx = Unpack<GLuint,uint32_t>(ptr + 8);
2949 			GLfloat var_x = Unpack<GLfloat,uint32_t>(ptr + 8 + 4);
2950 			GLfloat var_y = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4);
2951 			if (useChecksum) {
2952 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
2953 					"gles2_decoder_context_t::decode, OP_glVertexAttrib2f: GL checksumCalculator failure\n");
2954 			}
2955 			#ifdef CHECK_GL_ERRORS
2956 			GLint err = this->glGetError();
2957 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttrib2f\n", err);
2958 			#endif
2959 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttrib2f(indx:%u x:%f y:%f )", stream, var_indx, var_x, var_y);
2960 			this->glVertexAttrib2f(var_indx, var_x, var_y);
2961 			SET_LASTCALL("glVertexAttrib2f");
2962 			android::base::endTrace();
2963 			break;
2964 		}
2965 		case OP_glVertexAttrib2fv: {
2966 			android::base::beginTrace("glVertexAttrib2fv decode");
2967 			GLuint var_indx = Unpack<GLuint,uint32_t>(ptr + 8);
2968 			uint32_t size_values __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
2969 			InputBuffer inptr_values(ptr + 8 + 4 + 4, size_values);
2970 			if (useChecksum) {
2971 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_values, ptr + 8 + 4 + 4 + size_values, checksumSize,
2972 					"gles2_decoder_context_t::decode, OP_glVertexAttrib2fv: GL checksumCalculator failure\n");
2973 			}
2974 			#ifdef CHECK_GL_ERRORS
2975 			GLint err = this->glGetError();
2976 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttrib2fv\n", err);
2977 			#endif
2978 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttrib2fv(indx:%u values:%p(%u) )", stream, var_indx, (const GLfloat*)(inptr_values.get()), size_values);
2979 			this->glVertexAttrib2fv(var_indx, (const GLfloat*)(inptr_values.get()));
2980 			SET_LASTCALL("glVertexAttrib2fv");
2981 			android::base::endTrace();
2982 			break;
2983 		}
2984 		case OP_glVertexAttrib3f: {
2985 			android::base::beginTrace("glVertexAttrib3f decode");
2986 			GLuint var_indx = Unpack<GLuint,uint32_t>(ptr + 8);
2987 			GLfloat var_x = Unpack<GLfloat,uint32_t>(ptr + 8 + 4);
2988 			GLfloat var_y = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4);
2989 			GLfloat var_z = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4 + 4);
2990 			if (useChecksum) {
2991 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
2992 					"gles2_decoder_context_t::decode, OP_glVertexAttrib3f: GL checksumCalculator failure\n");
2993 			}
2994 			#ifdef CHECK_GL_ERRORS
2995 			GLint err = this->glGetError();
2996 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttrib3f\n", err);
2997 			#endif
2998 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttrib3f(indx:%u x:%f y:%f z:%f )", stream, var_indx, var_x, var_y, var_z);
2999 			this->glVertexAttrib3f(var_indx, var_x, var_y, var_z);
3000 			SET_LASTCALL("glVertexAttrib3f");
3001 			android::base::endTrace();
3002 			break;
3003 		}
3004 		case OP_glVertexAttrib3fv: {
3005 			android::base::beginTrace("glVertexAttrib3fv decode");
3006 			GLuint var_indx = Unpack<GLuint,uint32_t>(ptr + 8);
3007 			uint32_t size_values __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
3008 			InputBuffer inptr_values(ptr + 8 + 4 + 4, size_values);
3009 			if (useChecksum) {
3010 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_values, ptr + 8 + 4 + 4 + size_values, checksumSize,
3011 					"gles2_decoder_context_t::decode, OP_glVertexAttrib3fv: GL checksumCalculator failure\n");
3012 			}
3013 			#ifdef CHECK_GL_ERRORS
3014 			GLint err = this->glGetError();
3015 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttrib3fv\n", err);
3016 			#endif
3017 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttrib3fv(indx:%u values:%p(%u) )", stream, var_indx, (const GLfloat*)(inptr_values.get()), size_values);
3018 			this->glVertexAttrib3fv(var_indx, (const GLfloat*)(inptr_values.get()));
3019 			SET_LASTCALL("glVertexAttrib3fv");
3020 			android::base::endTrace();
3021 			break;
3022 		}
3023 		case OP_glVertexAttrib4f: {
3024 			android::base::beginTrace("glVertexAttrib4f decode");
3025 			GLuint var_indx = Unpack<GLuint,uint32_t>(ptr + 8);
3026 			GLfloat var_x = Unpack<GLfloat,uint32_t>(ptr + 8 + 4);
3027 			GLfloat var_y = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4);
3028 			GLfloat var_z = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4 + 4);
3029 			GLfloat var_w = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
3030 			if (useChecksum) {
3031 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
3032 					"gles2_decoder_context_t::decode, OP_glVertexAttrib4f: GL checksumCalculator failure\n");
3033 			}
3034 			#ifdef CHECK_GL_ERRORS
3035 			GLint err = this->glGetError();
3036 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttrib4f\n", err);
3037 			#endif
3038 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttrib4f(indx:%u x:%f y:%f z:%f w:%f )", stream, var_indx, var_x, var_y, var_z, var_w);
3039 			this->glVertexAttrib4f(var_indx, var_x, var_y, var_z, var_w);
3040 			SET_LASTCALL("glVertexAttrib4f");
3041 			android::base::endTrace();
3042 			break;
3043 		}
3044 		case OP_glVertexAttrib4fv: {
3045 			android::base::beginTrace("glVertexAttrib4fv decode");
3046 			GLuint var_indx = Unpack<GLuint,uint32_t>(ptr + 8);
3047 			uint32_t size_values __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
3048 			InputBuffer inptr_values(ptr + 8 + 4 + 4, size_values);
3049 			if (useChecksum) {
3050 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_values, ptr + 8 + 4 + 4 + size_values, checksumSize,
3051 					"gles2_decoder_context_t::decode, OP_glVertexAttrib4fv: GL checksumCalculator failure\n");
3052 			}
3053 			#ifdef CHECK_GL_ERRORS
3054 			GLint err = this->glGetError();
3055 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttrib4fv\n", err);
3056 			#endif
3057 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttrib4fv(indx:%u values:%p(%u) )", stream, var_indx, (const GLfloat*)(inptr_values.get()), size_values);
3058 			this->glVertexAttrib4fv(var_indx, (const GLfloat*)(inptr_values.get()));
3059 			SET_LASTCALL("glVertexAttrib4fv");
3060 			android::base::endTrace();
3061 			break;
3062 		}
3063 		case OP_glVertexAttribPointer: {
3064 			android::base::beginTrace("glVertexAttribPointer decode");
3065 			GLuint var_indx = Unpack<GLuint,uint32_t>(ptr + 8);
3066 			GLint var_size = Unpack<GLint,uint32_t>(ptr + 8 + 4);
3067 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
3068 			GLboolean var_normalized = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4 + 4);
3069 			GLsizei var_stride = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1);
3070 			uint32_t size_ptr __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1 + 4);
3071 			InputBuffer inptr_ptr(ptr + 8 + 4 + 4 + 4 + 1 + 4 + 4, size_ptr);
3072 			if (useChecksum) {
3073 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 1 + 4 + 4 + size_ptr, ptr + 8 + 4 + 4 + 4 + 1 + 4 + 4 + size_ptr, checksumSize,
3074 					"gles2_decoder_context_t::decode, OP_glVertexAttribPointer: GL checksumCalculator failure\n");
3075 			}
3076 			#ifdef CHECK_GL_ERRORS
3077 			GLint err = this->glGetError();
3078 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttribPointer\n", err);
3079 			#endif
3080 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttribPointer(indx:%u size:%d type:0x%08x normalized:%d stride:%d ptr:%p(%u) )", stream, var_indx, var_size, var_type, var_normalized, var_stride, (const GLvoid*)(inptr_ptr.get()), size_ptr);
3081 			this->glVertexAttribPointer(var_indx, var_size, var_type, var_normalized, var_stride, (const GLvoid*)(inptr_ptr.get()));
3082 			SET_LASTCALL("glVertexAttribPointer");
3083 			android::base::endTrace();
3084 			break;
3085 		}
3086 		case OP_glViewport: {
3087 			android::base::beginTrace("glViewport decode");
3088 			GLint var_x = Unpack<GLint,uint32_t>(ptr + 8);
3089 			GLint var_y = Unpack<GLint,uint32_t>(ptr + 8 + 4);
3090 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
3091 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
3092 			if (useChecksum) {
3093 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
3094 					"gles2_decoder_context_t::decode, OP_glViewport: GL checksumCalculator failure\n");
3095 			}
3096 			#ifdef CHECK_GL_ERRORS
3097 			GLint err = this->glGetError();
3098 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glViewport\n", err);
3099 			#endif
3100 			DECODER_DEBUG_LOG("gles2(%p): glViewport(x:%d y:%d width:%d height:%d )", stream, var_x, var_y, var_width, var_height);
3101 			this->glViewport(var_x, var_y, var_width, var_height);
3102 			SET_LASTCALL("glViewport");
3103 			android::base::endTrace();
3104 			break;
3105 		}
3106 		case OP_glEGLImageTargetTexture2DOES: {
3107 			android::base::beginTrace("glEGLImageTargetTexture2DOES decode");
3108 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
3109 			GLeglImageOES var_image = Unpack<GLeglImageOES,uint32_t>(ptr + 8 + 4);
3110 			if (useChecksum) {
3111 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
3112 					"gles2_decoder_context_t::decode, OP_glEGLImageTargetTexture2DOES: GL checksumCalculator failure\n");
3113 			}
3114 			#ifdef CHECK_GL_ERRORS
3115 			GLint err = this->glGetError();
3116 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glEGLImageTargetTexture2DOES\n", err);
3117 			#endif
3118 			DECODER_DEBUG_LOG("gles2(%p): glEGLImageTargetTexture2DOES(target:0x%08x image:%p )", stream, var_target, var_image);
3119 			this->glEGLImageTargetTexture2DOES(var_target, var_image);
3120 			SET_LASTCALL("glEGLImageTargetTexture2DOES");
3121 			android::base::endTrace();
3122 			break;
3123 		}
3124 		case OP_glEGLImageTargetRenderbufferStorageOES: {
3125 			android::base::beginTrace("glEGLImageTargetRenderbufferStorageOES decode");
3126 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
3127 			GLeglImageOES var_image = Unpack<GLeglImageOES,uint32_t>(ptr + 8 + 4);
3128 			if (useChecksum) {
3129 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
3130 					"gles2_decoder_context_t::decode, OP_glEGLImageTargetRenderbufferStorageOES: GL checksumCalculator failure\n");
3131 			}
3132 			#ifdef CHECK_GL_ERRORS
3133 			GLint err = this->glGetError();
3134 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glEGLImageTargetRenderbufferStorageOES\n", err);
3135 			#endif
3136 			DECODER_DEBUG_LOG("gles2(%p): glEGLImageTargetRenderbufferStorageOES(target:0x%08x image:%p )", stream, var_target, var_image);
3137 			this->glEGLImageTargetRenderbufferStorageOES(var_target, var_image);
3138 			SET_LASTCALL("glEGLImageTargetRenderbufferStorageOES");
3139 			android::base::endTrace();
3140 			break;
3141 		}
3142 		case OP_glGetProgramBinaryOES: {
3143 			android::base::beginTrace("glGetProgramBinaryOES decode");
3144 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
3145 			GLsizei var_bufSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
3146 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
3147 			InputBuffer inptr_length(ptr + 8 + 4 + 4 + 4, size_length);
3148 			uint32_t size_binaryFormat __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_length);
3149 			InputBuffer inptr_binaryFormat(ptr + 8 + 4 + 4 + 4 + size_length + 4, size_binaryFormat);
3150 			uint32_t size_binary __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_length + 4 + size_binaryFormat);
3151 			InputBuffer inptr_binary(ptr + 8 + 4 + 4 + 4 + size_length + 4 + size_binaryFormat + 4, size_binary);
3152 			if (useChecksum) {
3153 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_length + 4 + size_binaryFormat + 4 + size_binary, ptr + 8 + 4 + 4 + 4 + size_length + 4 + size_binaryFormat + 4 + size_binary, checksumSize,
3154 					"gles2_decoder_context_t::decode, OP_glGetProgramBinaryOES: GL checksumCalculator failure\n");
3155 			}
3156 			#ifdef CHECK_GL_ERRORS
3157 			GLint err = this->glGetError();
3158 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetProgramBinaryOES\n", err);
3159 			#endif
3160 			DECODER_DEBUG_LOG("gles2(%p): glGetProgramBinaryOES(program:%u bufSize:%d length:%p(%u) binaryFormat:%p(%u) binary:%p(%u) )", stream, var_program, var_bufSize, (GLsizei*)(inptr_length.get()), size_length, (GLenum*)(inptr_binaryFormat.get()), size_binaryFormat, (GLvoid*)(inptr_binary.get()), size_binary);
3161 			this->glGetProgramBinaryOES_dec(this, var_program, var_bufSize, (GLsizei*)(inptr_length.get()), (GLenum*)(inptr_binaryFormat.get()), (GLvoid*)(inptr_binary.get()));
3162 			SET_LASTCALL("glGetProgramBinaryOES");
3163 			android::base::endTrace();
3164 			break;
3165 		}
3166 		case OP_glProgramBinaryOES: {
3167 			android::base::beginTrace("glProgramBinaryOES decode");
3168 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
3169 			GLenum var_binaryFormat = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
3170 			uint32_t size_binary __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
3171 			InputBuffer inptr_binary(ptr + 8 + 4 + 4 + 4, size_binary);
3172 			GLint var_length = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_binary);
3173 			if (useChecksum) {
3174 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_binary + 4, ptr + 8 + 4 + 4 + 4 + size_binary + 4, checksumSize,
3175 					"gles2_decoder_context_t::decode, OP_glProgramBinaryOES: GL checksumCalculator failure\n");
3176 			}
3177 			#ifdef CHECK_GL_ERRORS
3178 			GLint err = this->glGetError();
3179 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramBinaryOES\n", err);
3180 			#endif
3181 			DECODER_DEBUG_LOG("gles2(%p): glProgramBinaryOES(program:%u binaryFormat:0x%08x binary:%p(%u) length:%d )", stream, var_program, var_binaryFormat, (const GLvoid*)(inptr_binary.get()), size_binary, var_length);
3182 			this->glProgramBinaryOES_dec(this, var_program, var_binaryFormat, (const GLvoid*)(inptr_binary.get()), var_length);
3183 			SET_LASTCALL("glProgramBinaryOES");
3184 			android::base::endTrace();
3185 			break;
3186 		}
3187 		case OP_glMapBufferOES: {
3188 			android::base::beginTrace("glMapBufferOES decode");
3189 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
3190 			GLenum var_access = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
3191 			if (useChecksum) {
3192 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
3193 					"gles2_decoder_context_t::decode, OP_glMapBufferOES: GL checksumCalculator failure\n");
3194 			}
3195 			#ifdef CHECK_GL_ERRORS
3196 			GLint err = this->glGetError();
3197 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glMapBufferOES\n", err);
3198 			#endif
3199 			DECODER_DEBUG_LOG("gles2(%p): glMapBufferOES(target:0x%08x access:0x%08x )", stream, var_target, var_access);
3200 			this->glMapBufferOES(var_target, var_access);
3201 			SET_LASTCALL("glMapBufferOES");
3202 			android::base::endTrace();
3203 			break;
3204 		}
3205 		case OP_glUnmapBufferOES: {
3206 			android::base::beginTrace("glUnmapBufferOES decode");
3207 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
3208 			if (useChecksum) {
3209 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
3210 					"gles2_decoder_context_t::decode, OP_glUnmapBufferOES: GL checksumCalculator failure\n");
3211 			}
3212 			size_t totalTmpSize = sizeof(GLboolean);
3213 			totalTmpSize += checksumSize;
3214 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
3215 			#ifdef CHECK_GL_ERRORS
3216 			GLint err = this->glGetError();
3217 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUnmapBufferOES\n", err);
3218 			#endif
3219 			DECODER_DEBUG_LOG("gles2(%p): glUnmapBufferOES(target:0x%08x )", stream, var_target);
3220 			*(GLboolean *)(&tmpBuf[0]) = 			this->glUnmapBufferOES(var_target);
3221 			if (useChecksum) {
3222 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
3223 			}
3224 			stream->flush();
3225 			SET_LASTCALL("glUnmapBufferOES");
3226 			android::base::endTrace();
3227 			break;
3228 		}
3229 		case OP_glTexImage3DOES: {
3230 			android::base::beginTrace("glTexImage3DOES decode");
3231 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
3232 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
3233 			GLenum var_internalformat = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
3234 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
3235 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
3236 			GLsizei var_depth = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
3237 			GLint var_border = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
3238 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
3239 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
3240 			uint32_t size_pixels __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
3241 			InputBuffer inptr_pixels(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, size_pixels);
3242 			if (useChecksum) {
3243 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_pixels, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_pixels, checksumSize,
3244 					"gles2_decoder_context_t::decode, OP_glTexImage3DOES: GL checksumCalculator failure\n");
3245 			}
3246 			#ifdef CHECK_GL_ERRORS
3247 			GLint err = this->glGetError();
3248 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexImage3DOES\n", err);
3249 			#endif
3250 			DECODER_DEBUG_LOG("gles2(%p): glTexImage3DOES(target:0x%08x level:%d internalformat:0x%08x width:%d height:%d depth:%d border:%d format:0x%08x type:0x%08x pixels:%p(%u) )", stream, var_target, var_level, var_internalformat, var_width, var_height, var_depth, var_border, var_format, var_type, (const GLvoid*)(inptr_pixels.get()), size_pixels);
3251 			this->glTexImage3DOES(var_target, var_level, var_internalformat, var_width, var_height, var_depth, var_border, var_format, var_type, size_pixels == 0 ? nullptr : (const GLvoid*)(inptr_pixels.get()));
3252 			SET_LASTCALL("glTexImage3DOES");
3253 			android::base::endTrace();
3254 			break;
3255 		}
3256 		case OP_glTexSubImage3DOES: {
3257 			android::base::beginTrace("glTexSubImage3DOES decode");
3258 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
3259 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
3260 			GLint var_xoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
3261 			GLint var_yoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
3262 			GLint var_zoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
3263 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
3264 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
3265 			GLsizei var_depth = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
3266 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
3267 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
3268 			uint32_t size_pixels __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
3269 			InputBuffer inptr_pixels(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, size_pixels);
3270 			if (useChecksum) {
3271 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_pixels, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_pixels, checksumSize,
3272 					"gles2_decoder_context_t::decode, OP_glTexSubImage3DOES: GL checksumCalculator failure\n");
3273 			}
3274 			#ifdef CHECK_GL_ERRORS
3275 			GLint err = this->glGetError();
3276 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexSubImage3DOES\n", err);
3277 			#endif
3278 			DECODER_DEBUG_LOG("gles2(%p): glTexSubImage3DOES(target:0x%08x level:%d xoffset:%d yoffset:%d zoffset:%d width:%d height:%d depth:%d format:0x%08x type:0x%08x pixels:%p(%u) )", stream, var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_width, var_height, var_depth, var_format, var_type, (const GLvoid*)(inptr_pixels.get()), size_pixels);
3279 			this->glTexSubImage3DOES(var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_width, var_height, var_depth, var_format, var_type, size_pixels == 0 ? nullptr : (const GLvoid*)(inptr_pixels.get()));
3280 			SET_LASTCALL("glTexSubImage3DOES");
3281 			android::base::endTrace();
3282 			break;
3283 		}
3284 		case OP_glCopyTexSubImage3DOES: {
3285 			android::base::beginTrace("glCopyTexSubImage3DOES decode");
3286 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
3287 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
3288 			GLint var_xoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
3289 			GLint var_yoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
3290 			GLint var_zoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
3291 			GLint var_x = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
3292 			GLint var_y = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
3293 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
3294 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
3295 			if (useChecksum) {
3296 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
3297 					"gles2_decoder_context_t::decode, OP_glCopyTexSubImage3DOES: GL checksumCalculator failure\n");
3298 			}
3299 			#ifdef CHECK_GL_ERRORS
3300 			GLint err = this->glGetError();
3301 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCopyTexSubImage3DOES\n", err);
3302 			#endif
3303 			DECODER_DEBUG_LOG("gles2(%p): glCopyTexSubImage3DOES(target:0x%08x level:%d xoffset:%d yoffset:%d zoffset:%d x:%d y:%d width:%d height:%d )", stream, var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_x, var_y, var_width, var_height);
3304 			this->glCopyTexSubImage3DOES(var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_x, var_y, var_width, var_height);
3305 			SET_LASTCALL("glCopyTexSubImage3DOES");
3306 			android::base::endTrace();
3307 			break;
3308 		}
3309 		case OP_glCompressedTexImage3DOES: {
3310 			android::base::beginTrace("glCompressedTexImage3DOES decode");
3311 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
3312 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
3313 			GLenum var_internalformat = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
3314 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
3315 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
3316 			GLsizei var_depth = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
3317 			GLint var_border = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
3318 			GLsizei var_imageSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
3319 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
3320 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, size_data);
3321 			if (useChecksum) {
3322 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_data, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_data, checksumSize,
3323 					"gles2_decoder_context_t::decode, OP_glCompressedTexImage3DOES: GL checksumCalculator failure\n");
3324 			}
3325 			#ifdef CHECK_GL_ERRORS
3326 			GLint err = this->glGetError();
3327 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCompressedTexImage3DOES\n", err);
3328 			#endif
3329 			DECODER_DEBUG_LOG("gles2(%p): glCompressedTexImage3DOES(target:0x%08x level:%d internalformat:0x%08x width:%d height:%d depth:%d border:%d imageSize:%d data:%p(%u) )", stream, var_target, var_level, var_internalformat, var_width, var_height, var_depth, var_border, var_imageSize, (const GLvoid*)(inptr_data.get()), size_data);
3330 			this->glCompressedTexImage3DOES(var_target, var_level, var_internalformat, var_width, var_height, var_depth, var_border, var_imageSize, size_data == 0 ? nullptr : (const GLvoid*)(inptr_data.get()));
3331 			SET_LASTCALL("glCompressedTexImage3DOES");
3332 			android::base::endTrace();
3333 			break;
3334 		}
3335 		case OP_glCompressedTexSubImage3DOES: {
3336 			android::base::beginTrace("glCompressedTexSubImage3DOES decode");
3337 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
3338 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
3339 			GLint var_xoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
3340 			GLint var_yoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
3341 			GLint var_zoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
3342 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
3343 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
3344 			GLsizei var_depth = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
3345 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
3346 			GLsizei var_imageSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
3347 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
3348 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, size_data);
3349 			if (useChecksum) {
3350 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_data, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_data, checksumSize,
3351 					"gles2_decoder_context_t::decode, OP_glCompressedTexSubImage3DOES: GL checksumCalculator failure\n");
3352 			}
3353 			#ifdef CHECK_GL_ERRORS
3354 			GLint err = this->glGetError();
3355 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCompressedTexSubImage3DOES\n", err);
3356 			#endif
3357 			DECODER_DEBUG_LOG("gles2(%p): glCompressedTexSubImage3DOES(target:0x%08x level:%d xoffset:%d yoffset:%d zoffset:%d width:%d height:%d depth:%d format:0x%08x imageSize:%d data:%p(%u) )", stream, var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_width, var_height, var_depth, var_format, var_imageSize, (const GLvoid*)(inptr_data.get()), size_data);
3358 			this->glCompressedTexSubImage3DOES(var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_width, var_height, var_depth, var_format, var_imageSize, size_data == 0 ? nullptr : (const GLvoid*)(inptr_data.get()));
3359 			SET_LASTCALL("glCompressedTexSubImage3DOES");
3360 			android::base::endTrace();
3361 			break;
3362 		}
3363 		case OP_glFramebufferTexture3DOES: {
3364 			android::base::beginTrace("glFramebufferTexture3DOES decode");
3365 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
3366 			GLenum var_attachment = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
3367 			GLenum var_textarget = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
3368 			GLuint var_texture = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4);
3369 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
3370 			GLint var_zoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
3371 			if (useChecksum) {
3372 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
3373 					"gles2_decoder_context_t::decode, OP_glFramebufferTexture3DOES: GL checksumCalculator failure\n");
3374 			}
3375 			#ifdef CHECK_GL_ERRORS
3376 			GLint err = this->glGetError();
3377 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glFramebufferTexture3DOES\n", err);
3378 			#endif
3379 			DECODER_DEBUG_LOG("gles2(%p): glFramebufferTexture3DOES(target:0x%08x attachment:0x%08x textarget:0x%08x texture:%u level:%d zoffset:%d )", stream, var_target, var_attachment, var_textarget, var_texture, var_level, var_zoffset);
3380 			this->glFramebufferTexture3DOES(var_target, var_attachment, var_textarget, var_texture, var_level, var_zoffset);
3381 			SET_LASTCALL("glFramebufferTexture3DOES");
3382 			android::base::endTrace();
3383 			break;
3384 		}
3385 		case OP_glBindVertexArrayOES: {
3386 			android::base::beginTrace("glBindVertexArrayOES decode");
3387 			GLuint var_array = Unpack<GLuint,uint32_t>(ptr + 8);
3388 			if (useChecksum) {
3389 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
3390 					"gles2_decoder_context_t::decode, OP_glBindVertexArrayOES: GL checksumCalculator failure\n");
3391 			}
3392 			#ifdef CHECK_GL_ERRORS
3393 			GLint err = this->glGetError();
3394 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBindVertexArrayOES\n", err);
3395 			#endif
3396 			DECODER_DEBUG_LOG("gles2(%p): glBindVertexArrayOES(array:%u )", stream, var_array);
3397 			this->glBindVertexArrayOES(var_array);
3398 			SET_LASTCALL("glBindVertexArrayOES");
3399 			android::base::endTrace();
3400 			break;
3401 		}
3402 		case OP_glDeleteVertexArraysOES: {
3403 			android::base::beginTrace("glDeleteVertexArraysOES decode");
3404 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
3405 			uint32_t size_arrays __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
3406 			InputBuffer inptr_arrays(ptr + 8 + 4 + 4, size_arrays);
3407 			if (useChecksum) {
3408 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_arrays, ptr + 8 + 4 + 4 + size_arrays, checksumSize,
3409 					"gles2_decoder_context_t::decode, OP_glDeleteVertexArraysOES: GL checksumCalculator failure\n");
3410 			}
3411 			#ifdef CHECK_GL_ERRORS
3412 			GLint err = this->glGetError();
3413 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDeleteVertexArraysOES\n", err);
3414 			#endif
3415 			DECODER_DEBUG_LOG("gles2(%p): glDeleteVertexArraysOES(n:%d arrays:%p(%u) )", stream, var_n, (const GLuint*)(inptr_arrays.get()), size_arrays);
3416 			this->glDeleteVertexArraysOES_dec(this, var_n, (const GLuint*)(inptr_arrays.get()));
3417 			SET_LASTCALL("glDeleteVertexArraysOES");
3418 			android::base::endTrace();
3419 			break;
3420 		}
3421 		case OP_glGenVertexArraysOES: {
3422 			android::base::beginTrace("glGenVertexArraysOES decode");
3423 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
3424 			uint32_t size_arrays __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
3425 			if (useChecksum) {
3426 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
3427 					"gles2_decoder_context_t::decode, OP_glGenVertexArraysOES: GL checksumCalculator failure\n");
3428 			}
3429 			size_t totalTmpSize = size_arrays;
3430 			totalTmpSize += checksumSize;
3431 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
3432 			OutputBuffer outptr_arrays(&tmpBuf[0], size_arrays);
3433 			#ifdef CHECK_GL_ERRORS
3434 			GLint err = this->glGetError();
3435 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGenVertexArraysOES\n", err);
3436 			#endif
3437 			DECODER_DEBUG_LOG("gles2(%p): glGenVertexArraysOES(n:%d arrays:%p(%u) )", stream, var_n, (GLuint*)(outptr_arrays.get()), size_arrays);
3438 			this->glGenVertexArraysOES_dec(this, var_n, (GLuint*)(outptr_arrays.get()));
3439 			outptr_arrays.flush();
3440 			if (useChecksum) {
3441 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
3442 			}
3443 			stream->flush();
3444 			SET_LASTCALL("glGenVertexArraysOES");
3445 			android::base::endTrace();
3446 			break;
3447 		}
3448 		case OP_glIsVertexArrayOES: {
3449 			android::base::beginTrace("glIsVertexArrayOES decode");
3450 			GLuint var_array = Unpack<GLuint,uint32_t>(ptr + 8);
3451 			if (useChecksum) {
3452 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
3453 					"gles2_decoder_context_t::decode, OP_glIsVertexArrayOES: GL checksumCalculator failure\n");
3454 			}
3455 			size_t totalTmpSize = sizeof(GLboolean);
3456 			totalTmpSize += checksumSize;
3457 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
3458 			#ifdef CHECK_GL_ERRORS
3459 			GLint err = this->glGetError();
3460 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glIsVertexArrayOES\n", err);
3461 			#endif
3462 			DECODER_DEBUG_LOG("gles2(%p): glIsVertexArrayOES(array:%u )", stream, var_array);
3463 			*(GLboolean *)(&tmpBuf[0]) = 			this->glIsVertexArrayOES(var_array);
3464 			if (useChecksum) {
3465 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
3466 			}
3467 			stream->flush();
3468 			SET_LASTCALL("glIsVertexArrayOES");
3469 			android::base::endTrace();
3470 			break;
3471 		}
3472 		case OP_glDiscardFramebufferEXT: {
3473 			android::base::beginTrace("glDiscardFramebufferEXT decode");
3474 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
3475 			GLsizei var_numAttachments = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
3476 			uint32_t size_attachments __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
3477 			InputBuffer inptr_attachments(ptr + 8 + 4 + 4 + 4, size_attachments);
3478 			if (useChecksum) {
3479 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_attachments, ptr + 8 + 4 + 4 + 4 + size_attachments, checksumSize,
3480 					"gles2_decoder_context_t::decode, OP_glDiscardFramebufferEXT: GL checksumCalculator failure\n");
3481 			}
3482 			#ifdef CHECK_GL_ERRORS
3483 			GLint err = this->glGetError();
3484 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDiscardFramebufferEXT\n", err);
3485 			#endif
3486 			DECODER_DEBUG_LOG("gles2(%p): glDiscardFramebufferEXT(target:0x%08x numAttachments:%d attachments:%p(%u) )", stream, var_target, var_numAttachments, (const GLenum*)(inptr_attachments.get()), size_attachments);
3487 			this->glDiscardFramebufferEXT(var_target, var_numAttachments, (const GLenum*)(inptr_attachments.get()));
3488 			SET_LASTCALL("glDiscardFramebufferEXT");
3489 			android::base::endTrace();
3490 			break;
3491 		}
3492 		case OP_glMultiDrawArraysEXT: {
3493 			android::base::beginTrace("glMultiDrawArraysEXT decode");
3494 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
3495 			uint32_t size_first __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
3496 			InputBuffer inptr_first(ptr + 8 + 4 + 4, size_first);
3497 			uint32_t size_count __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + size_first);
3498 			InputBuffer inptr_count(ptr + 8 + 4 + 4 + size_first + 4, size_count);
3499 			GLsizei var_primcount = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + size_first + 4 + size_count);
3500 			if (useChecksum) {
3501 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_first + 4 + size_count + 4, ptr + 8 + 4 + 4 + size_first + 4 + size_count + 4, checksumSize,
3502 					"gles2_decoder_context_t::decode, OP_glMultiDrawArraysEXT: GL checksumCalculator failure\n");
3503 			}
3504 			#ifdef CHECK_GL_ERRORS
3505 			GLint err = this->glGetError();
3506 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glMultiDrawArraysEXT\n", err);
3507 			#endif
3508 			DECODER_DEBUG_LOG("gles2(%p): glMultiDrawArraysEXT(mode:0x%08x first:%p(%u) count:%p(%u) primcount:%d )", stream, var_mode, (const GLint*)(inptr_first.get()), size_first, (const GLsizei*)(inptr_count.get()), size_count, var_primcount);
3509 			this->glMultiDrawArraysEXT(var_mode, (const GLint*)(inptr_first.get()), (const GLsizei*)(inptr_count.get()), var_primcount);
3510 			SET_LASTCALL("glMultiDrawArraysEXT");
3511 			android::base::endTrace();
3512 			break;
3513 		}
3514 		case OP_glMultiDrawElementsEXT: {
3515 			android::base::beginTrace("glMultiDrawElementsEXT decode");
3516 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
3517 			uint32_t size_count __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
3518 			InputBuffer inptr_count(ptr + 8 + 4 + 4, size_count);
3519 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + size_count);
3520 			uint32_t size_indices __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + size_count + 4);
3521 			InputBuffer inptr_indices(ptr + 8 + 4 + 4 + size_count + 4 + 4, size_indices);
3522 			GLsizei var_primcount = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + size_count + 4 + 4 + size_indices);
3523 			if (useChecksum) {
3524 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_count + 4 + 4 + size_indices + 4, ptr + 8 + 4 + 4 + size_count + 4 + 4 + size_indices + 4, checksumSize,
3525 					"gles2_decoder_context_t::decode, OP_glMultiDrawElementsEXT: GL checksumCalculator failure\n");
3526 			}
3527 			#ifdef CHECK_GL_ERRORS
3528 			GLint err = this->glGetError();
3529 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glMultiDrawElementsEXT\n", err);
3530 			#endif
3531 			DECODER_DEBUG_LOG("gles2(%p): glMultiDrawElementsEXT(mode:0x%08x count:%p(%u) type:0x%08x indices:%p(%u) primcount:%d )", stream, var_mode, (const GLsizei*)(inptr_count.get()), size_count, var_type, (const GLvoid* const*)(inptr_indices.get()), size_indices, var_primcount);
3532 			this->glMultiDrawElementsEXT(var_mode, (const GLsizei*)(inptr_count.get()), var_type, (const GLvoid* const*)(inptr_indices.get()), var_primcount);
3533 			SET_LASTCALL("glMultiDrawElementsEXT");
3534 			android::base::endTrace();
3535 			break;
3536 		}
3537 		case OP_glGetPerfMonitorGroupsAMD: {
3538 			android::base::beginTrace("glGetPerfMonitorGroupsAMD decode");
3539 			uint32_t size_numGroups __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8);
3540 			InputBuffer inptr_numGroups(ptr + 8 + 4, size_numGroups);
3541 			GLsizei var_groupsSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + size_numGroups);
3542 			uint32_t size_groups __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + size_numGroups + 4);
3543 			InputBuffer inptr_groups(ptr + 8 + 4 + size_numGroups + 4 + 4, size_groups);
3544 			if (useChecksum) {
3545 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + size_numGroups + 4 + 4 + size_groups, ptr + 8 + 4 + size_numGroups + 4 + 4 + size_groups, checksumSize,
3546 					"gles2_decoder_context_t::decode, OP_glGetPerfMonitorGroupsAMD: GL checksumCalculator failure\n");
3547 			}
3548 			#ifdef CHECK_GL_ERRORS
3549 			GLint err = this->glGetError();
3550 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetPerfMonitorGroupsAMD\n", err);
3551 			#endif
3552 			DECODER_DEBUG_LOG("gles2(%p): glGetPerfMonitorGroupsAMD(numGroups:%p(%u) groupsSize:%d groups:%p(%u) )", stream, (GLint*)(inptr_numGroups.get()), size_numGroups, var_groupsSize, (GLuint*)(inptr_groups.get()), size_groups);
3553 			this->glGetPerfMonitorGroupsAMD((GLint*)(inptr_numGroups.get()), var_groupsSize, (GLuint*)(inptr_groups.get()));
3554 			SET_LASTCALL("glGetPerfMonitorGroupsAMD");
3555 			android::base::endTrace();
3556 			break;
3557 		}
3558 		case OP_glGetPerfMonitorCountersAMD: {
3559 			android::base::beginTrace("glGetPerfMonitorCountersAMD decode");
3560 			GLuint var_group = Unpack<GLuint,uint32_t>(ptr + 8);
3561 			uint32_t size_numCounters __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
3562 			InputBuffer inptr_numCounters(ptr + 8 + 4 + 4, size_numCounters);
3563 			uint32_t size_maxActiveCounters __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + size_numCounters);
3564 			InputBuffer inptr_maxActiveCounters(ptr + 8 + 4 + 4 + size_numCounters + 4, size_maxActiveCounters);
3565 			GLsizei var_counterSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + size_numCounters + 4 + size_maxActiveCounters);
3566 			uint32_t size_counters __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + size_numCounters + 4 + size_maxActiveCounters + 4);
3567 			InputBuffer inptr_counters(ptr + 8 + 4 + 4 + size_numCounters + 4 + size_maxActiveCounters + 4 + 4, size_counters);
3568 			if (useChecksum) {
3569 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_numCounters + 4 + size_maxActiveCounters + 4 + 4 + size_counters, ptr + 8 + 4 + 4 + size_numCounters + 4 + size_maxActiveCounters + 4 + 4 + size_counters, checksumSize,
3570 					"gles2_decoder_context_t::decode, OP_glGetPerfMonitorCountersAMD: GL checksumCalculator failure\n");
3571 			}
3572 			#ifdef CHECK_GL_ERRORS
3573 			GLint err = this->glGetError();
3574 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetPerfMonitorCountersAMD\n", err);
3575 			#endif
3576 			DECODER_DEBUG_LOG("gles2(%p): glGetPerfMonitorCountersAMD(group:%u numCounters:%p(%u) maxActiveCounters:%p(%u) counterSize:%d counters:%p(%u) )", stream, var_group, (GLint*)(inptr_numCounters.get()), size_numCounters, (GLint*)(inptr_maxActiveCounters.get()), size_maxActiveCounters, var_counterSize, (GLuint*)(inptr_counters.get()), size_counters);
3577 			this->glGetPerfMonitorCountersAMD(var_group, (GLint*)(inptr_numCounters.get()), (GLint*)(inptr_maxActiveCounters.get()), var_counterSize, (GLuint*)(inptr_counters.get()));
3578 			SET_LASTCALL("glGetPerfMonitorCountersAMD");
3579 			android::base::endTrace();
3580 			break;
3581 		}
3582 		case OP_glGetPerfMonitorGroupStringAMD: {
3583 			android::base::beginTrace("glGetPerfMonitorGroupStringAMD decode");
3584 			GLuint var_group = Unpack<GLuint,uint32_t>(ptr + 8);
3585 			GLsizei var_bufSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
3586 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
3587 			InputBuffer inptr_length(ptr + 8 + 4 + 4 + 4, size_length);
3588 			uint32_t size_groupString __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_length);
3589 			InputBuffer inptr_groupString(ptr + 8 + 4 + 4 + 4 + size_length + 4, size_groupString);
3590 			if (useChecksum) {
3591 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_length + 4 + size_groupString, ptr + 8 + 4 + 4 + 4 + size_length + 4 + size_groupString, checksumSize,
3592 					"gles2_decoder_context_t::decode, OP_glGetPerfMonitorGroupStringAMD: GL checksumCalculator failure\n");
3593 			}
3594 			#ifdef CHECK_GL_ERRORS
3595 			GLint err = this->glGetError();
3596 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetPerfMonitorGroupStringAMD\n", err);
3597 			#endif
3598 			DECODER_DEBUG_LOG("gles2(%p): glGetPerfMonitorGroupStringAMD(group:%u bufSize:%d length:%p(%u) groupString:%p(%u) )", stream, var_group, var_bufSize, (GLsizei*)(inptr_length.get()), size_length, (GLchar*)(inptr_groupString.get()), size_groupString);
3599 			this->glGetPerfMonitorGroupStringAMD(var_group, var_bufSize, (GLsizei*)(inptr_length.get()), (GLchar*)(inptr_groupString.get()));
3600 			SET_LASTCALL("glGetPerfMonitorGroupStringAMD");
3601 			android::base::endTrace();
3602 			break;
3603 		}
3604 		case OP_glGetPerfMonitorCounterStringAMD: {
3605 			android::base::beginTrace("glGetPerfMonitorCounterStringAMD decode");
3606 			GLuint var_group = Unpack<GLuint,uint32_t>(ptr + 8);
3607 			GLuint var_counter = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
3608 			GLsizei var_bufSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
3609 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
3610 			InputBuffer inptr_length(ptr + 8 + 4 + 4 + 4 + 4, size_length);
3611 			uint32_t size_counterString __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + size_length);
3612 			InputBuffer inptr_counterString(ptr + 8 + 4 + 4 + 4 + 4 + size_length + 4, size_counterString);
3613 			if (useChecksum) {
3614 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_length + 4 + size_counterString, ptr + 8 + 4 + 4 + 4 + 4 + size_length + 4 + size_counterString, checksumSize,
3615 					"gles2_decoder_context_t::decode, OP_glGetPerfMonitorCounterStringAMD: GL checksumCalculator failure\n");
3616 			}
3617 			#ifdef CHECK_GL_ERRORS
3618 			GLint err = this->glGetError();
3619 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetPerfMonitorCounterStringAMD\n", err);
3620 			#endif
3621 			DECODER_DEBUG_LOG("gles2(%p): glGetPerfMonitorCounterStringAMD(group:%u counter:%u bufSize:%d length:%p(%u) counterString:%p(%u) )", stream, var_group, var_counter, var_bufSize, (GLsizei*)(inptr_length.get()), size_length, (GLchar*)(inptr_counterString.get()), size_counterString);
3622 			this->glGetPerfMonitorCounterStringAMD(var_group, var_counter, var_bufSize, (GLsizei*)(inptr_length.get()), (GLchar*)(inptr_counterString.get()));
3623 			SET_LASTCALL("glGetPerfMonitorCounterStringAMD");
3624 			android::base::endTrace();
3625 			break;
3626 		}
3627 		case OP_glGetPerfMonitorCounterInfoAMD: {
3628 			android::base::beginTrace("glGetPerfMonitorCounterInfoAMD decode");
3629 			GLuint var_group = Unpack<GLuint,uint32_t>(ptr + 8);
3630 			GLuint var_counter = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
3631 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
3632 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
3633 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4 + 4, size_data);
3634 			if (useChecksum) {
3635 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_data, ptr + 8 + 4 + 4 + 4 + 4 + size_data, checksumSize,
3636 					"gles2_decoder_context_t::decode, OP_glGetPerfMonitorCounterInfoAMD: GL checksumCalculator failure\n");
3637 			}
3638 			#ifdef CHECK_GL_ERRORS
3639 			GLint err = this->glGetError();
3640 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetPerfMonitorCounterInfoAMD\n", err);
3641 			#endif
3642 			DECODER_DEBUG_LOG("gles2(%p): glGetPerfMonitorCounterInfoAMD(group:%u counter:%u pname:0x%08x data:%p(%u) )", stream, var_group, var_counter, var_pname, (GLvoid*)(inptr_data.get()), size_data);
3643 			this->glGetPerfMonitorCounterInfoAMD(var_group, var_counter, var_pname, (GLvoid*)(inptr_data.get()));
3644 			SET_LASTCALL("glGetPerfMonitorCounterInfoAMD");
3645 			android::base::endTrace();
3646 			break;
3647 		}
3648 		case OP_glGenPerfMonitorsAMD: {
3649 			android::base::beginTrace("glGenPerfMonitorsAMD decode");
3650 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
3651 			uint32_t size_monitors __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
3652 			InputBuffer inptr_monitors(ptr + 8 + 4 + 4, size_monitors);
3653 			if (useChecksum) {
3654 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_monitors, ptr + 8 + 4 + 4 + size_monitors, checksumSize,
3655 					"gles2_decoder_context_t::decode, OP_glGenPerfMonitorsAMD: GL checksumCalculator failure\n");
3656 			}
3657 			#ifdef CHECK_GL_ERRORS
3658 			GLint err = this->glGetError();
3659 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGenPerfMonitorsAMD\n", err);
3660 			#endif
3661 			DECODER_DEBUG_LOG("gles2(%p): glGenPerfMonitorsAMD(n:%d monitors:%p(%u) )", stream, var_n, (GLuint*)(inptr_monitors.get()), size_monitors);
3662 			this->glGenPerfMonitorsAMD(var_n, (GLuint*)(inptr_monitors.get()));
3663 			SET_LASTCALL("glGenPerfMonitorsAMD");
3664 			android::base::endTrace();
3665 			break;
3666 		}
3667 		case OP_glDeletePerfMonitorsAMD: {
3668 			android::base::beginTrace("glDeletePerfMonitorsAMD decode");
3669 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
3670 			uint32_t size_monitors __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
3671 			InputBuffer inptr_monitors(ptr + 8 + 4 + 4, size_monitors);
3672 			if (useChecksum) {
3673 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_monitors, ptr + 8 + 4 + 4 + size_monitors, checksumSize,
3674 					"gles2_decoder_context_t::decode, OP_glDeletePerfMonitorsAMD: GL checksumCalculator failure\n");
3675 			}
3676 			#ifdef CHECK_GL_ERRORS
3677 			GLint err = this->glGetError();
3678 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDeletePerfMonitorsAMD\n", err);
3679 			#endif
3680 			DECODER_DEBUG_LOG("gles2(%p): glDeletePerfMonitorsAMD(n:%d monitors:%p(%u) )", stream, var_n, (GLuint*)(inptr_monitors.get()), size_monitors);
3681 			this->glDeletePerfMonitorsAMD(var_n, (GLuint*)(inptr_monitors.get()));
3682 			SET_LASTCALL("glDeletePerfMonitorsAMD");
3683 			android::base::endTrace();
3684 			break;
3685 		}
3686 		case OP_glSelectPerfMonitorCountersAMD: {
3687 			android::base::beginTrace("glSelectPerfMonitorCountersAMD decode");
3688 			GLuint var_monitor = Unpack<GLuint,uint32_t>(ptr + 8);
3689 			GLboolean var_enable = Unpack<GLboolean,uint8_t>(ptr + 8 + 4);
3690 			GLuint var_group = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 1);
3691 			GLint var_numCounters = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 1 + 4);
3692 			uint32_t size_countersList __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 1 + 4 + 4);
3693 			InputBuffer inptr_countersList(ptr + 8 + 4 + 1 + 4 + 4 + 4, size_countersList);
3694 			if (useChecksum) {
3695 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 1 + 4 + 4 + 4 + size_countersList, ptr + 8 + 4 + 1 + 4 + 4 + 4 + size_countersList, checksumSize,
3696 					"gles2_decoder_context_t::decode, OP_glSelectPerfMonitorCountersAMD: GL checksumCalculator failure\n");
3697 			}
3698 			#ifdef CHECK_GL_ERRORS
3699 			GLint err = this->glGetError();
3700 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glSelectPerfMonitorCountersAMD\n", err);
3701 			#endif
3702 			DECODER_DEBUG_LOG("gles2(%p): glSelectPerfMonitorCountersAMD(monitor:%u enable:%d group:%u numCounters:%d countersList:%p(%u) )", stream, var_monitor, var_enable, var_group, var_numCounters, (GLuint*)(inptr_countersList.get()), size_countersList);
3703 			this->glSelectPerfMonitorCountersAMD(var_monitor, var_enable, var_group, var_numCounters, (GLuint*)(inptr_countersList.get()));
3704 			SET_LASTCALL("glSelectPerfMonitorCountersAMD");
3705 			android::base::endTrace();
3706 			break;
3707 		}
3708 		case OP_glBeginPerfMonitorAMD: {
3709 			android::base::beginTrace("glBeginPerfMonitorAMD decode");
3710 			GLuint var_monitor = Unpack<GLuint,uint32_t>(ptr + 8);
3711 			if (useChecksum) {
3712 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
3713 					"gles2_decoder_context_t::decode, OP_glBeginPerfMonitorAMD: GL checksumCalculator failure\n");
3714 			}
3715 			#ifdef CHECK_GL_ERRORS
3716 			GLint err = this->glGetError();
3717 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBeginPerfMonitorAMD\n", err);
3718 			#endif
3719 			DECODER_DEBUG_LOG("gles2(%p): glBeginPerfMonitorAMD(monitor:%u )", stream, var_monitor);
3720 			this->glBeginPerfMonitorAMD(var_monitor);
3721 			SET_LASTCALL("glBeginPerfMonitorAMD");
3722 			android::base::endTrace();
3723 			break;
3724 		}
3725 		case OP_glEndPerfMonitorAMD: {
3726 			android::base::beginTrace("glEndPerfMonitorAMD decode");
3727 			GLuint var_monitor = Unpack<GLuint,uint32_t>(ptr + 8);
3728 			if (useChecksum) {
3729 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
3730 					"gles2_decoder_context_t::decode, OP_glEndPerfMonitorAMD: GL checksumCalculator failure\n");
3731 			}
3732 			#ifdef CHECK_GL_ERRORS
3733 			GLint err = this->glGetError();
3734 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glEndPerfMonitorAMD\n", err);
3735 			#endif
3736 			DECODER_DEBUG_LOG("gles2(%p): glEndPerfMonitorAMD(monitor:%u )", stream, var_monitor);
3737 			this->glEndPerfMonitorAMD(var_monitor);
3738 			SET_LASTCALL("glEndPerfMonitorAMD");
3739 			android::base::endTrace();
3740 			break;
3741 		}
3742 		case OP_glGetPerfMonitorCounterDataAMD: {
3743 			android::base::beginTrace("glGetPerfMonitorCounterDataAMD decode");
3744 			GLuint var_monitor = Unpack<GLuint,uint32_t>(ptr + 8);
3745 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
3746 			GLsizei var_dataSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
3747 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
3748 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4 + 4, size_data);
3749 			uint32_t size_bytesWritten __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + size_data);
3750 			InputBuffer inptr_bytesWritten(ptr + 8 + 4 + 4 + 4 + 4 + size_data + 4, size_bytesWritten);
3751 			if (useChecksum) {
3752 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_data + 4 + size_bytesWritten, ptr + 8 + 4 + 4 + 4 + 4 + size_data + 4 + size_bytesWritten, checksumSize,
3753 					"gles2_decoder_context_t::decode, OP_glGetPerfMonitorCounterDataAMD: GL checksumCalculator failure\n");
3754 			}
3755 			#ifdef CHECK_GL_ERRORS
3756 			GLint err = this->glGetError();
3757 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetPerfMonitorCounterDataAMD\n", err);
3758 			#endif
3759 			DECODER_DEBUG_LOG("gles2(%p): glGetPerfMonitorCounterDataAMD(monitor:%u pname:0x%08x dataSize:%d data:%p(%u) bytesWritten:%p(%u) )", stream, var_monitor, var_pname, var_dataSize, (GLuint*)(inptr_data.get()), size_data, (GLint*)(inptr_bytesWritten.get()), size_bytesWritten);
3760 			this->glGetPerfMonitorCounterDataAMD(var_monitor, var_pname, var_dataSize, (GLuint*)(inptr_data.get()), (GLint*)(inptr_bytesWritten.get()));
3761 			SET_LASTCALL("glGetPerfMonitorCounterDataAMD");
3762 			android::base::endTrace();
3763 			break;
3764 		}
3765 		case OP_glRenderbufferStorageMultisampleIMG: {
3766 			android::base::beginTrace("glRenderbufferStorageMultisampleIMG decode");
3767 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
3768 			GLsizei var_samples = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
3769 			GLenum var_internalformat = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
3770 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
3771 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
3772 			if (useChecksum) {
3773 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
3774 					"gles2_decoder_context_t::decode, OP_glRenderbufferStorageMultisampleIMG: GL checksumCalculator failure\n");
3775 			}
3776 			#ifdef CHECK_GL_ERRORS
3777 			GLint err = this->glGetError();
3778 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glRenderbufferStorageMultisampleIMG\n", err);
3779 			#endif
3780 			DECODER_DEBUG_LOG("gles2(%p): glRenderbufferStorageMultisampleIMG(target:0x%08x samples:%d internalformat:0x%08x width:%d height:%d )", stream, var_target, var_samples, var_internalformat, var_width, var_height);
3781 			this->glRenderbufferStorageMultisampleIMG(var_target, var_samples, var_internalformat, var_width, var_height);
3782 			SET_LASTCALL("glRenderbufferStorageMultisampleIMG");
3783 			android::base::endTrace();
3784 			break;
3785 		}
3786 		case OP_glFramebufferTexture2DMultisampleIMG: {
3787 			android::base::beginTrace("glFramebufferTexture2DMultisampleIMG decode");
3788 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
3789 			GLenum var_attachment = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
3790 			GLenum var_textarget = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
3791 			GLuint var_texture = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4);
3792 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
3793 			GLsizei var_samples = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
3794 			if (useChecksum) {
3795 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
3796 					"gles2_decoder_context_t::decode, OP_glFramebufferTexture2DMultisampleIMG: GL checksumCalculator failure\n");
3797 			}
3798 			#ifdef CHECK_GL_ERRORS
3799 			GLint err = this->glGetError();
3800 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glFramebufferTexture2DMultisampleIMG\n", err);
3801 			#endif
3802 			DECODER_DEBUG_LOG("gles2(%p): glFramebufferTexture2DMultisampleIMG(target:0x%08x attachment:0x%08x textarget:0x%08x texture:%u level:%d samples:%d )", stream, var_target, var_attachment, var_textarget, var_texture, var_level, var_samples);
3803 			this->glFramebufferTexture2DMultisampleIMG(var_target, var_attachment, var_textarget, var_texture, var_level, var_samples);
3804 			SET_LASTCALL("glFramebufferTexture2DMultisampleIMG");
3805 			android::base::endTrace();
3806 			break;
3807 		}
3808 		case OP_glDeleteFencesNV: {
3809 			android::base::beginTrace("glDeleteFencesNV decode");
3810 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
3811 			uint32_t size_fences __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
3812 			InputBuffer inptr_fences(ptr + 8 + 4 + 4, size_fences);
3813 			if (useChecksum) {
3814 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_fences, ptr + 8 + 4 + 4 + size_fences, checksumSize,
3815 					"gles2_decoder_context_t::decode, OP_glDeleteFencesNV: GL checksumCalculator failure\n");
3816 			}
3817 			#ifdef CHECK_GL_ERRORS
3818 			GLint err = this->glGetError();
3819 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDeleteFencesNV\n", err);
3820 			#endif
3821 			DECODER_DEBUG_LOG("gles2(%p): glDeleteFencesNV(n:%d fences:%p(%u) )", stream, var_n, (const GLuint*)(inptr_fences.get()), size_fences);
3822 			this->glDeleteFencesNV(var_n, (const GLuint*)(inptr_fences.get()));
3823 			SET_LASTCALL("glDeleteFencesNV");
3824 			android::base::endTrace();
3825 			break;
3826 		}
3827 		case OP_glGenFencesNV: {
3828 			android::base::beginTrace("glGenFencesNV decode");
3829 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
3830 			uint32_t size_fences __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
3831 			InputBuffer inptr_fences(ptr + 8 + 4 + 4, size_fences);
3832 			if (useChecksum) {
3833 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_fences, ptr + 8 + 4 + 4 + size_fences, checksumSize,
3834 					"gles2_decoder_context_t::decode, OP_glGenFencesNV: GL checksumCalculator failure\n");
3835 			}
3836 			#ifdef CHECK_GL_ERRORS
3837 			GLint err = this->glGetError();
3838 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGenFencesNV\n", err);
3839 			#endif
3840 			DECODER_DEBUG_LOG("gles2(%p): glGenFencesNV(n:%d fences:%p(%u) )", stream, var_n, (GLuint*)(inptr_fences.get()), size_fences);
3841 			this->glGenFencesNV(var_n, (GLuint*)(inptr_fences.get()));
3842 			SET_LASTCALL("glGenFencesNV");
3843 			android::base::endTrace();
3844 			break;
3845 		}
3846 		case OP_glIsFenceNV: {
3847 			android::base::beginTrace("glIsFenceNV decode");
3848 			GLuint var_fence = Unpack<GLuint,uint32_t>(ptr + 8);
3849 			if (useChecksum) {
3850 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
3851 					"gles2_decoder_context_t::decode, OP_glIsFenceNV: GL checksumCalculator failure\n");
3852 			}
3853 			size_t totalTmpSize = sizeof(GLboolean);
3854 			totalTmpSize += checksumSize;
3855 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
3856 			#ifdef CHECK_GL_ERRORS
3857 			GLint err = this->glGetError();
3858 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glIsFenceNV\n", err);
3859 			#endif
3860 			DECODER_DEBUG_LOG("gles2(%p): glIsFenceNV(fence:%u )", stream, var_fence);
3861 			*(GLboolean *)(&tmpBuf[0]) = 			this->glIsFenceNV(var_fence);
3862 			if (useChecksum) {
3863 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
3864 			}
3865 			stream->flush();
3866 			SET_LASTCALL("glIsFenceNV");
3867 			android::base::endTrace();
3868 			break;
3869 		}
3870 		case OP_glTestFenceNV: {
3871 			android::base::beginTrace("glTestFenceNV decode");
3872 			GLuint var_fence = Unpack<GLuint,uint32_t>(ptr + 8);
3873 			if (useChecksum) {
3874 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
3875 					"gles2_decoder_context_t::decode, OP_glTestFenceNV: GL checksumCalculator failure\n");
3876 			}
3877 			size_t totalTmpSize = sizeof(GLboolean);
3878 			totalTmpSize += checksumSize;
3879 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
3880 			#ifdef CHECK_GL_ERRORS
3881 			GLint err = this->glGetError();
3882 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTestFenceNV\n", err);
3883 			#endif
3884 			DECODER_DEBUG_LOG("gles2(%p): glTestFenceNV(fence:%u )", stream, var_fence);
3885 			*(GLboolean *)(&tmpBuf[0]) = 			this->glTestFenceNV(var_fence);
3886 			if (useChecksum) {
3887 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
3888 			}
3889 			stream->flush();
3890 			SET_LASTCALL("glTestFenceNV");
3891 			android::base::endTrace();
3892 			break;
3893 		}
3894 		case OP_glGetFenceivNV: {
3895 			android::base::beginTrace("glGetFenceivNV decode");
3896 			GLuint var_fence = Unpack<GLuint,uint32_t>(ptr + 8);
3897 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
3898 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
3899 			InputBuffer inptr_params(ptr + 8 + 4 + 4 + 4, size_params);
3900 			if (useChecksum) {
3901 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_params, ptr + 8 + 4 + 4 + 4 + size_params, checksumSize,
3902 					"gles2_decoder_context_t::decode, OP_glGetFenceivNV: GL checksumCalculator failure\n");
3903 			}
3904 			#ifdef CHECK_GL_ERRORS
3905 			GLint err = this->glGetError();
3906 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetFenceivNV\n", err);
3907 			#endif
3908 			DECODER_DEBUG_LOG("gles2(%p): glGetFenceivNV(fence:%u pname:0x%08x params:%p(%u) )", stream, var_fence, var_pname, (GLint*)(inptr_params.get()), size_params);
3909 			this->glGetFenceivNV(var_fence, var_pname, (GLint*)(inptr_params.get()));
3910 			SET_LASTCALL("glGetFenceivNV");
3911 			android::base::endTrace();
3912 			break;
3913 		}
3914 		case OP_glFinishFenceNV: {
3915 			android::base::beginTrace("glFinishFenceNV decode");
3916 			GLuint var_fence = Unpack<GLuint,uint32_t>(ptr + 8);
3917 			if (useChecksum) {
3918 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
3919 					"gles2_decoder_context_t::decode, OP_glFinishFenceNV: GL checksumCalculator failure\n");
3920 			}
3921 			#ifdef CHECK_GL_ERRORS
3922 			GLint err = this->glGetError();
3923 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glFinishFenceNV\n", err);
3924 			#endif
3925 			DECODER_DEBUG_LOG("gles2(%p): glFinishFenceNV(fence:%u )", stream, var_fence);
3926 			this->glFinishFenceNV(var_fence);
3927 			SET_LASTCALL("glFinishFenceNV");
3928 			android::base::endTrace();
3929 			break;
3930 		}
3931 		case OP_glSetFenceNV: {
3932 			android::base::beginTrace("glSetFenceNV decode");
3933 			GLuint var_fence = Unpack<GLuint,uint32_t>(ptr + 8);
3934 			GLenum var_condition = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
3935 			if (useChecksum) {
3936 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
3937 					"gles2_decoder_context_t::decode, OP_glSetFenceNV: GL checksumCalculator failure\n");
3938 			}
3939 			#ifdef CHECK_GL_ERRORS
3940 			GLint err = this->glGetError();
3941 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glSetFenceNV\n", err);
3942 			#endif
3943 			DECODER_DEBUG_LOG("gles2(%p): glSetFenceNV(fence:%u condition:0x%08x )", stream, var_fence, var_condition);
3944 			this->glSetFenceNV(var_fence, var_condition);
3945 			SET_LASTCALL("glSetFenceNV");
3946 			android::base::endTrace();
3947 			break;
3948 		}
3949 		case OP_glCoverageMaskNV: {
3950 			android::base::beginTrace("glCoverageMaskNV decode");
3951 			GLboolean var_mask = Unpack<GLboolean,uint8_t>(ptr + 8);
3952 			if (useChecksum) {
3953 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 1, ptr + 8 + 1, checksumSize,
3954 					"gles2_decoder_context_t::decode, OP_glCoverageMaskNV: GL checksumCalculator failure\n");
3955 			}
3956 			#ifdef CHECK_GL_ERRORS
3957 			GLint err = this->glGetError();
3958 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCoverageMaskNV\n", err);
3959 			#endif
3960 			DECODER_DEBUG_LOG("gles2(%p): glCoverageMaskNV(mask:%d )", stream, var_mask);
3961 			this->glCoverageMaskNV(var_mask);
3962 			SET_LASTCALL("glCoverageMaskNV");
3963 			android::base::endTrace();
3964 			break;
3965 		}
3966 		case OP_glCoverageOperationNV: {
3967 			android::base::beginTrace("glCoverageOperationNV decode");
3968 			GLenum var_operation = Unpack<GLenum,uint32_t>(ptr + 8);
3969 			if (useChecksum) {
3970 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
3971 					"gles2_decoder_context_t::decode, OP_glCoverageOperationNV: GL checksumCalculator failure\n");
3972 			}
3973 			#ifdef CHECK_GL_ERRORS
3974 			GLint err = this->glGetError();
3975 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCoverageOperationNV\n", err);
3976 			#endif
3977 			DECODER_DEBUG_LOG("gles2(%p): glCoverageOperationNV(operation:0x%08x )", stream, var_operation);
3978 			this->glCoverageOperationNV(var_operation);
3979 			SET_LASTCALL("glCoverageOperationNV");
3980 			android::base::endTrace();
3981 			break;
3982 		}
3983 		case OP_glGetDriverControlsQCOM: {
3984 			android::base::beginTrace("glGetDriverControlsQCOM decode");
3985 			uint32_t size_num __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8);
3986 			InputBuffer inptr_num(ptr + 8 + 4, size_num);
3987 			GLsizei var_size = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + size_num);
3988 			uint32_t size_driverControls __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + size_num + 4);
3989 			InputBuffer inptr_driverControls(ptr + 8 + 4 + size_num + 4 + 4, size_driverControls);
3990 			if (useChecksum) {
3991 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + size_num + 4 + 4 + size_driverControls, ptr + 8 + 4 + size_num + 4 + 4 + size_driverControls, checksumSize,
3992 					"gles2_decoder_context_t::decode, OP_glGetDriverControlsQCOM: GL checksumCalculator failure\n");
3993 			}
3994 			#ifdef CHECK_GL_ERRORS
3995 			GLint err = this->glGetError();
3996 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetDriverControlsQCOM\n", err);
3997 			#endif
3998 			DECODER_DEBUG_LOG("gles2(%p): glGetDriverControlsQCOM(num:%p(%u) size:%d driverControls:%p(%u) )", stream, (GLint*)(inptr_num.get()), size_num, var_size, (GLuint*)(inptr_driverControls.get()), size_driverControls);
3999 			this->glGetDriverControlsQCOM((GLint*)(inptr_num.get()), var_size, (GLuint*)(inptr_driverControls.get()));
4000 			SET_LASTCALL("glGetDriverControlsQCOM");
4001 			android::base::endTrace();
4002 			break;
4003 		}
4004 		case OP_glGetDriverControlStringQCOM: {
4005 			android::base::beginTrace("glGetDriverControlStringQCOM decode");
4006 			GLuint var_driverControl = Unpack<GLuint,uint32_t>(ptr + 8);
4007 			GLsizei var_bufSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
4008 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
4009 			InputBuffer inptr_length(ptr + 8 + 4 + 4 + 4, size_length);
4010 			uint32_t size_driverControlString __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_length);
4011 			InputBuffer inptr_driverControlString(ptr + 8 + 4 + 4 + 4 + size_length + 4, size_driverControlString);
4012 			if (useChecksum) {
4013 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_length + 4 + size_driverControlString, ptr + 8 + 4 + 4 + 4 + size_length + 4 + size_driverControlString, checksumSize,
4014 					"gles2_decoder_context_t::decode, OP_glGetDriverControlStringQCOM: GL checksumCalculator failure\n");
4015 			}
4016 			#ifdef CHECK_GL_ERRORS
4017 			GLint err = this->glGetError();
4018 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetDriverControlStringQCOM\n", err);
4019 			#endif
4020 			DECODER_DEBUG_LOG("gles2(%p): glGetDriverControlStringQCOM(driverControl:%u bufSize:%d length:%p(%u) driverControlString:%p(%u) )", stream, var_driverControl, var_bufSize, (GLsizei*)(inptr_length.get()), size_length, (GLchar*)(inptr_driverControlString.get()), size_driverControlString);
4021 			this->glGetDriverControlStringQCOM(var_driverControl, var_bufSize, (GLsizei*)(inptr_length.get()), (GLchar*)(inptr_driverControlString.get()));
4022 			SET_LASTCALL("glGetDriverControlStringQCOM");
4023 			android::base::endTrace();
4024 			break;
4025 		}
4026 		case OP_glEnableDriverControlQCOM: {
4027 			android::base::beginTrace("glEnableDriverControlQCOM decode");
4028 			GLuint var_driverControl = Unpack<GLuint,uint32_t>(ptr + 8);
4029 			if (useChecksum) {
4030 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
4031 					"gles2_decoder_context_t::decode, OP_glEnableDriverControlQCOM: GL checksumCalculator failure\n");
4032 			}
4033 			#ifdef CHECK_GL_ERRORS
4034 			GLint err = this->glGetError();
4035 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glEnableDriverControlQCOM\n", err);
4036 			#endif
4037 			DECODER_DEBUG_LOG("gles2(%p): glEnableDriverControlQCOM(driverControl:%u )", stream, var_driverControl);
4038 			this->glEnableDriverControlQCOM(var_driverControl);
4039 			SET_LASTCALL("glEnableDriverControlQCOM");
4040 			android::base::endTrace();
4041 			break;
4042 		}
4043 		case OP_glDisableDriverControlQCOM: {
4044 			android::base::beginTrace("glDisableDriverControlQCOM decode");
4045 			GLuint var_driverControl = Unpack<GLuint,uint32_t>(ptr + 8);
4046 			if (useChecksum) {
4047 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
4048 					"gles2_decoder_context_t::decode, OP_glDisableDriverControlQCOM: GL checksumCalculator failure\n");
4049 			}
4050 			#ifdef CHECK_GL_ERRORS
4051 			GLint err = this->glGetError();
4052 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDisableDriverControlQCOM\n", err);
4053 			#endif
4054 			DECODER_DEBUG_LOG("gles2(%p): glDisableDriverControlQCOM(driverControl:%u )", stream, var_driverControl);
4055 			this->glDisableDriverControlQCOM(var_driverControl);
4056 			SET_LASTCALL("glDisableDriverControlQCOM");
4057 			android::base::endTrace();
4058 			break;
4059 		}
4060 		case OP_glExtGetTexturesQCOM: {
4061 			android::base::beginTrace("glExtGetTexturesQCOM decode");
4062 			uint32_t size_textures __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8);
4063 			InputBuffer inptr_textures(ptr + 8 + 4, size_textures);
4064 			GLint var_maxTextures = Unpack<GLint,uint32_t>(ptr + 8 + 4 + size_textures);
4065 			uint32_t size_numTextures __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + size_textures + 4);
4066 			InputBuffer inptr_numTextures(ptr + 8 + 4 + size_textures + 4 + 4, size_numTextures);
4067 			if (useChecksum) {
4068 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + size_textures + 4 + 4 + size_numTextures, ptr + 8 + 4 + size_textures + 4 + 4 + size_numTextures, checksumSize,
4069 					"gles2_decoder_context_t::decode, OP_glExtGetTexturesQCOM: GL checksumCalculator failure\n");
4070 			}
4071 			#ifdef CHECK_GL_ERRORS
4072 			GLint err = this->glGetError();
4073 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glExtGetTexturesQCOM\n", err);
4074 			#endif
4075 			DECODER_DEBUG_LOG("gles2(%p): glExtGetTexturesQCOM(textures:%p(%u) maxTextures:%d numTextures:%p(%u) )", stream, (GLuint*)(inptr_textures.get()), size_textures, var_maxTextures, (GLint*)(inptr_numTextures.get()), size_numTextures);
4076 			this->glExtGetTexturesQCOM((GLuint*)(inptr_textures.get()), var_maxTextures, (GLint*)(inptr_numTextures.get()));
4077 			SET_LASTCALL("glExtGetTexturesQCOM");
4078 			android::base::endTrace();
4079 			break;
4080 		}
4081 		case OP_glExtGetBuffersQCOM: {
4082 			android::base::beginTrace("glExtGetBuffersQCOM decode");
4083 			uint32_t size_buffers __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8);
4084 			InputBuffer inptr_buffers(ptr + 8 + 4, size_buffers);
4085 			GLint var_maxBuffers = Unpack<GLint,uint32_t>(ptr + 8 + 4 + size_buffers);
4086 			uint32_t size_numBuffers __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + size_buffers + 4);
4087 			InputBuffer inptr_numBuffers(ptr + 8 + 4 + size_buffers + 4 + 4, size_numBuffers);
4088 			if (useChecksum) {
4089 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + size_buffers + 4 + 4 + size_numBuffers, ptr + 8 + 4 + size_buffers + 4 + 4 + size_numBuffers, checksumSize,
4090 					"gles2_decoder_context_t::decode, OP_glExtGetBuffersQCOM: GL checksumCalculator failure\n");
4091 			}
4092 			#ifdef CHECK_GL_ERRORS
4093 			GLint err = this->glGetError();
4094 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glExtGetBuffersQCOM\n", err);
4095 			#endif
4096 			DECODER_DEBUG_LOG("gles2(%p): glExtGetBuffersQCOM(buffers:%p(%u) maxBuffers:%d numBuffers:%p(%u) )", stream, (GLuint*)(inptr_buffers.get()), size_buffers, var_maxBuffers, (GLint*)(inptr_numBuffers.get()), size_numBuffers);
4097 			this->glExtGetBuffersQCOM((GLuint*)(inptr_buffers.get()), var_maxBuffers, (GLint*)(inptr_numBuffers.get()));
4098 			SET_LASTCALL("glExtGetBuffersQCOM");
4099 			android::base::endTrace();
4100 			break;
4101 		}
4102 		case OP_glExtGetRenderbuffersQCOM: {
4103 			android::base::beginTrace("glExtGetRenderbuffersQCOM decode");
4104 			uint32_t size_renderbuffers __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8);
4105 			InputBuffer inptr_renderbuffers(ptr + 8 + 4, size_renderbuffers);
4106 			GLint var_maxRenderbuffers = Unpack<GLint,uint32_t>(ptr + 8 + 4 + size_renderbuffers);
4107 			uint32_t size_numRenderbuffers __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + size_renderbuffers + 4);
4108 			InputBuffer inptr_numRenderbuffers(ptr + 8 + 4 + size_renderbuffers + 4 + 4, size_numRenderbuffers);
4109 			if (useChecksum) {
4110 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + size_renderbuffers + 4 + 4 + size_numRenderbuffers, ptr + 8 + 4 + size_renderbuffers + 4 + 4 + size_numRenderbuffers, checksumSize,
4111 					"gles2_decoder_context_t::decode, OP_glExtGetRenderbuffersQCOM: GL checksumCalculator failure\n");
4112 			}
4113 			#ifdef CHECK_GL_ERRORS
4114 			GLint err = this->glGetError();
4115 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glExtGetRenderbuffersQCOM\n", err);
4116 			#endif
4117 			DECODER_DEBUG_LOG("gles2(%p): glExtGetRenderbuffersQCOM(renderbuffers:%p(%u) maxRenderbuffers:%d numRenderbuffers:%p(%u) )", stream, (GLuint*)(inptr_renderbuffers.get()), size_renderbuffers, var_maxRenderbuffers, (GLint*)(inptr_numRenderbuffers.get()), size_numRenderbuffers);
4118 			this->glExtGetRenderbuffersQCOM((GLuint*)(inptr_renderbuffers.get()), var_maxRenderbuffers, (GLint*)(inptr_numRenderbuffers.get()));
4119 			SET_LASTCALL("glExtGetRenderbuffersQCOM");
4120 			android::base::endTrace();
4121 			break;
4122 		}
4123 		case OP_glExtGetFramebuffersQCOM: {
4124 			android::base::beginTrace("glExtGetFramebuffersQCOM decode");
4125 			uint32_t size_framebuffers __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8);
4126 			InputBuffer inptr_framebuffers(ptr + 8 + 4, size_framebuffers);
4127 			GLint var_maxFramebuffers = Unpack<GLint,uint32_t>(ptr + 8 + 4 + size_framebuffers);
4128 			uint32_t size_numFramebuffers __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + size_framebuffers + 4);
4129 			InputBuffer inptr_numFramebuffers(ptr + 8 + 4 + size_framebuffers + 4 + 4, size_numFramebuffers);
4130 			if (useChecksum) {
4131 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + size_framebuffers + 4 + 4 + size_numFramebuffers, ptr + 8 + 4 + size_framebuffers + 4 + 4 + size_numFramebuffers, checksumSize,
4132 					"gles2_decoder_context_t::decode, OP_glExtGetFramebuffersQCOM: GL checksumCalculator failure\n");
4133 			}
4134 			#ifdef CHECK_GL_ERRORS
4135 			GLint err = this->glGetError();
4136 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glExtGetFramebuffersQCOM\n", err);
4137 			#endif
4138 			DECODER_DEBUG_LOG("gles2(%p): glExtGetFramebuffersQCOM(framebuffers:%p(%u) maxFramebuffers:%d numFramebuffers:%p(%u) )", stream, (GLuint*)(inptr_framebuffers.get()), size_framebuffers, var_maxFramebuffers, (GLint*)(inptr_numFramebuffers.get()), size_numFramebuffers);
4139 			this->glExtGetFramebuffersQCOM((GLuint*)(inptr_framebuffers.get()), var_maxFramebuffers, (GLint*)(inptr_numFramebuffers.get()));
4140 			SET_LASTCALL("glExtGetFramebuffersQCOM");
4141 			android::base::endTrace();
4142 			break;
4143 		}
4144 		case OP_glExtGetTexLevelParameterivQCOM: {
4145 			android::base::beginTrace("glExtGetTexLevelParameterivQCOM decode");
4146 			GLuint var_texture = Unpack<GLuint,uint32_t>(ptr + 8);
4147 			GLenum var_face = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
4148 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
4149 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4);
4150 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
4151 			InputBuffer inptr_params(ptr + 8 + 4 + 4 + 4 + 4 + 4, size_params);
4152 			if (useChecksum) {
4153 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + size_params, ptr + 8 + 4 + 4 + 4 + 4 + 4 + size_params, checksumSize,
4154 					"gles2_decoder_context_t::decode, OP_glExtGetTexLevelParameterivQCOM: GL checksumCalculator failure\n");
4155 			}
4156 			#ifdef CHECK_GL_ERRORS
4157 			GLint err = this->glGetError();
4158 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glExtGetTexLevelParameterivQCOM\n", err);
4159 			#endif
4160 			DECODER_DEBUG_LOG("gles2(%p): glExtGetTexLevelParameterivQCOM(texture:%u face:0x%08x level:%d pname:0x%08x params:%p(%u) )", stream, var_texture, var_face, var_level, var_pname, (GLint*)(inptr_params.get()), size_params);
4161 			this->glExtGetTexLevelParameterivQCOM(var_texture, var_face, var_level, var_pname, (GLint*)(inptr_params.get()));
4162 			SET_LASTCALL("glExtGetTexLevelParameterivQCOM");
4163 			android::base::endTrace();
4164 			break;
4165 		}
4166 		case OP_glExtTexObjectStateOverrideiQCOM: {
4167 			android::base::beginTrace("glExtTexObjectStateOverrideiQCOM decode");
4168 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
4169 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
4170 			GLint var_param = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
4171 			if (useChecksum) {
4172 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
4173 					"gles2_decoder_context_t::decode, OP_glExtTexObjectStateOverrideiQCOM: GL checksumCalculator failure\n");
4174 			}
4175 			#ifdef CHECK_GL_ERRORS
4176 			GLint err = this->glGetError();
4177 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glExtTexObjectStateOverrideiQCOM\n", err);
4178 			#endif
4179 			DECODER_DEBUG_LOG("gles2(%p): glExtTexObjectStateOverrideiQCOM(target:0x%08x pname:0x%08x param:%d )", stream, var_target, var_pname, var_param);
4180 			this->glExtTexObjectStateOverrideiQCOM(var_target, var_pname, var_param);
4181 			SET_LASTCALL("glExtTexObjectStateOverrideiQCOM");
4182 			android::base::endTrace();
4183 			break;
4184 		}
4185 		case OP_glExtGetTexSubImageQCOM: {
4186 			android::base::beginTrace("glExtGetTexSubImageQCOM decode");
4187 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
4188 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
4189 			GLint var_xoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
4190 			GLint var_yoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
4191 			GLint var_zoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
4192 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
4193 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
4194 			GLsizei var_depth = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
4195 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
4196 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
4197 			uint32_t size_texels __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
4198 			InputBuffer inptr_texels(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, size_texels);
4199 			if (useChecksum) {
4200 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_texels, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_texels, checksumSize,
4201 					"gles2_decoder_context_t::decode, OP_glExtGetTexSubImageQCOM: GL checksumCalculator failure\n");
4202 			}
4203 			#ifdef CHECK_GL_ERRORS
4204 			GLint err = this->glGetError();
4205 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glExtGetTexSubImageQCOM\n", err);
4206 			#endif
4207 			DECODER_DEBUG_LOG("gles2(%p): glExtGetTexSubImageQCOM(target:0x%08x level:%d xoffset:%d yoffset:%d zoffset:%d width:%d height:%d depth:%d format:0x%08x type:0x%08x texels:%p(%u) )", stream, var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_width, var_height, var_depth, var_format, var_type, (GLvoid*)(inptr_texels.get()), size_texels);
4208 			this->glExtGetTexSubImageQCOM(var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_width, var_height, var_depth, var_format, var_type, (GLvoid*)(inptr_texels.get()));
4209 			SET_LASTCALL("glExtGetTexSubImageQCOM");
4210 			android::base::endTrace();
4211 			break;
4212 		}
4213 		case OP_glExtGetBufferPointervQCOM: {
4214 			android::base::beginTrace("glExtGetBufferPointervQCOM decode");
4215 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
4216 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
4217 			InputBuffer inptr_params(ptr + 8 + 4 + 4, size_params);
4218 			if (useChecksum) {
4219 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_params, ptr + 8 + 4 + 4 + size_params, checksumSize,
4220 					"gles2_decoder_context_t::decode, OP_glExtGetBufferPointervQCOM: GL checksumCalculator failure\n");
4221 			}
4222 			#ifdef CHECK_GL_ERRORS
4223 			GLint err = this->glGetError();
4224 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glExtGetBufferPointervQCOM\n", err);
4225 			#endif
4226 			DECODER_DEBUG_LOG("gles2(%p): glExtGetBufferPointervQCOM(target:0x%08x params:%p(%u) )", stream, var_target, (GLvoidptr*)(inptr_params.get()), size_params);
4227 			this->glExtGetBufferPointervQCOM(var_target, (GLvoidptr*)(inptr_params.get()));
4228 			SET_LASTCALL("glExtGetBufferPointervQCOM");
4229 			android::base::endTrace();
4230 			break;
4231 		}
4232 		case OP_glExtGetShadersQCOM: {
4233 			android::base::beginTrace("glExtGetShadersQCOM decode");
4234 			uint32_t size_shaders __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8);
4235 			InputBuffer inptr_shaders(ptr + 8 + 4, size_shaders);
4236 			GLint var_maxShaders = Unpack<GLint,uint32_t>(ptr + 8 + 4 + size_shaders);
4237 			uint32_t size_numShaders __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + size_shaders + 4);
4238 			InputBuffer inptr_numShaders(ptr + 8 + 4 + size_shaders + 4 + 4, size_numShaders);
4239 			if (useChecksum) {
4240 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + size_shaders + 4 + 4 + size_numShaders, ptr + 8 + 4 + size_shaders + 4 + 4 + size_numShaders, checksumSize,
4241 					"gles2_decoder_context_t::decode, OP_glExtGetShadersQCOM: GL checksumCalculator failure\n");
4242 			}
4243 			#ifdef CHECK_GL_ERRORS
4244 			GLint err = this->glGetError();
4245 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glExtGetShadersQCOM\n", err);
4246 			#endif
4247 			DECODER_DEBUG_LOG("gles2(%p): glExtGetShadersQCOM(shaders:%p(%u) maxShaders:%d numShaders:%p(%u) )", stream, (GLuint*)(inptr_shaders.get()), size_shaders, var_maxShaders, (GLint*)(inptr_numShaders.get()), size_numShaders);
4248 			this->glExtGetShadersQCOM((GLuint*)(inptr_shaders.get()), var_maxShaders, (GLint*)(inptr_numShaders.get()));
4249 			SET_LASTCALL("glExtGetShadersQCOM");
4250 			android::base::endTrace();
4251 			break;
4252 		}
4253 		case OP_glExtGetProgramsQCOM: {
4254 			android::base::beginTrace("glExtGetProgramsQCOM decode");
4255 			uint32_t size_programs __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8);
4256 			InputBuffer inptr_programs(ptr + 8 + 4, size_programs);
4257 			GLint var_maxPrograms = Unpack<GLint,uint32_t>(ptr + 8 + 4 + size_programs);
4258 			uint32_t size_numPrograms __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + size_programs + 4);
4259 			InputBuffer inptr_numPrograms(ptr + 8 + 4 + size_programs + 4 + 4, size_numPrograms);
4260 			if (useChecksum) {
4261 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + size_programs + 4 + 4 + size_numPrograms, ptr + 8 + 4 + size_programs + 4 + 4 + size_numPrograms, checksumSize,
4262 					"gles2_decoder_context_t::decode, OP_glExtGetProgramsQCOM: GL checksumCalculator failure\n");
4263 			}
4264 			#ifdef CHECK_GL_ERRORS
4265 			GLint err = this->glGetError();
4266 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glExtGetProgramsQCOM\n", err);
4267 			#endif
4268 			DECODER_DEBUG_LOG("gles2(%p): glExtGetProgramsQCOM(programs:%p(%u) maxPrograms:%d numPrograms:%p(%u) )", stream, (GLuint*)(inptr_programs.get()), size_programs, var_maxPrograms, (GLint*)(inptr_numPrograms.get()), size_numPrograms);
4269 			this->glExtGetProgramsQCOM((GLuint*)(inptr_programs.get()), var_maxPrograms, (GLint*)(inptr_numPrograms.get()));
4270 			SET_LASTCALL("glExtGetProgramsQCOM");
4271 			android::base::endTrace();
4272 			break;
4273 		}
4274 		case OP_glExtIsProgramBinaryQCOM: {
4275 			android::base::beginTrace("glExtIsProgramBinaryQCOM decode");
4276 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
4277 			if (useChecksum) {
4278 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
4279 					"gles2_decoder_context_t::decode, OP_glExtIsProgramBinaryQCOM: GL checksumCalculator failure\n");
4280 			}
4281 			size_t totalTmpSize = sizeof(GLboolean);
4282 			totalTmpSize += checksumSize;
4283 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
4284 			#ifdef CHECK_GL_ERRORS
4285 			GLint err = this->glGetError();
4286 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glExtIsProgramBinaryQCOM\n", err);
4287 			#endif
4288 			DECODER_DEBUG_LOG("gles2(%p): glExtIsProgramBinaryQCOM(program:%u )", stream, var_program);
4289 			*(GLboolean *)(&tmpBuf[0]) = 			this->glExtIsProgramBinaryQCOM(var_program);
4290 			if (useChecksum) {
4291 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
4292 			}
4293 			stream->flush();
4294 			SET_LASTCALL("glExtIsProgramBinaryQCOM");
4295 			android::base::endTrace();
4296 			break;
4297 		}
4298 		case OP_glExtGetProgramBinarySourceQCOM: {
4299 			android::base::beginTrace("glExtGetProgramBinarySourceQCOM decode");
4300 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
4301 			GLenum var_shadertype = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
4302 			uint32_t size_source __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
4303 			InputBuffer inptr_source(ptr + 8 + 4 + 4 + 4, size_source);
4304 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_source);
4305 			InputBuffer inptr_length(ptr + 8 + 4 + 4 + 4 + size_source + 4, size_length);
4306 			if (useChecksum) {
4307 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_source + 4 + size_length, ptr + 8 + 4 + 4 + 4 + size_source + 4 + size_length, checksumSize,
4308 					"gles2_decoder_context_t::decode, OP_glExtGetProgramBinarySourceQCOM: GL checksumCalculator failure\n");
4309 			}
4310 			#ifdef CHECK_GL_ERRORS
4311 			GLint err = this->glGetError();
4312 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glExtGetProgramBinarySourceQCOM\n", err);
4313 			#endif
4314 			DECODER_DEBUG_LOG("gles2(%p): glExtGetProgramBinarySourceQCOM(program:%u shadertype:0x%08x source:%p(%u) length:%p(%u) )", stream, var_program, var_shadertype, (GLchar*)(inptr_source.get()), size_source, (GLint*)(inptr_length.get()), size_length);
4315 			this->glExtGetProgramBinarySourceQCOM(var_program, var_shadertype, (GLchar*)(inptr_source.get()), (GLint*)(inptr_length.get()));
4316 			SET_LASTCALL("glExtGetProgramBinarySourceQCOM");
4317 			android::base::endTrace();
4318 			break;
4319 		}
4320 		case OP_glStartTilingQCOM: {
4321 			android::base::beginTrace("glStartTilingQCOM decode");
4322 			GLuint var_x = Unpack<GLuint,uint32_t>(ptr + 8);
4323 			GLuint var_y = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
4324 			GLuint var_width = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
4325 			GLuint var_height = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4);
4326 			GLbitfield var_preserveMask = Unpack<GLbitfield,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
4327 			if (useChecksum) {
4328 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
4329 					"gles2_decoder_context_t::decode, OP_glStartTilingQCOM: GL checksumCalculator failure\n");
4330 			}
4331 			#ifdef CHECK_GL_ERRORS
4332 			GLint err = this->glGetError();
4333 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glStartTilingQCOM\n", err);
4334 			#endif
4335 			DECODER_DEBUG_LOG("gles2(%p): glStartTilingQCOM(x:%u y:%u width:%u height:%u preserveMask:0x%08x )", stream, var_x, var_y, var_width, var_height, var_preserveMask);
4336 			this->glStartTilingQCOM(var_x, var_y, var_width, var_height, var_preserveMask);
4337 			SET_LASTCALL("glStartTilingQCOM");
4338 			android::base::endTrace();
4339 			break;
4340 		}
4341 		case OP_glEndTilingQCOM: {
4342 			android::base::beginTrace("glEndTilingQCOM decode");
4343 			GLbitfield var_preserveMask = Unpack<GLbitfield,uint32_t>(ptr + 8);
4344 			if (useChecksum) {
4345 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
4346 					"gles2_decoder_context_t::decode, OP_glEndTilingQCOM: GL checksumCalculator failure\n");
4347 			}
4348 			#ifdef CHECK_GL_ERRORS
4349 			GLint err = this->glGetError();
4350 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glEndTilingQCOM\n", err);
4351 			#endif
4352 			DECODER_DEBUG_LOG("gles2(%p): glEndTilingQCOM(preserveMask:0x%08x )", stream, var_preserveMask);
4353 			this->glEndTilingQCOM(var_preserveMask);
4354 			SET_LASTCALL("glEndTilingQCOM");
4355 			android::base::endTrace();
4356 			break;
4357 		}
4358 		case OP_glVertexAttribPointerData: {
4359 			android::base::beginTrace("glVertexAttribPointerData decode");
4360 			GLuint var_indx = Unpack<GLuint,uint32_t>(ptr + 8);
4361 			GLint var_size = Unpack<GLint,uint32_t>(ptr + 8 + 4);
4362 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
4363 			GLboolean var_normalized = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4 + 4);
4364 			GLsizei var_stride = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1);
4365 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1 + 4);
4366 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4 + 1 + 4 + 4, size_data);
4367 			GLuint var_datalen = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1 + 4 + 4 + size_data);
4368 			if (useChecksum) {
4369 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 1 + 4 + 4 + size_data + 4, ptr + 8 + 4 + 4 + 4 + 1 + 4 + 4 + size_data + 4, checksumSize,
4370 					"gles2_decoder_context_t::decode, OP_glVertexAttribPointerData: GL checksumCalculator failure\n");
4371 			}
4372 			#ifdef CHECK_GL_ERRORS
4373 			GLint err = this->glGetError();
4374 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttribPointerData\n", err);
4375 			#endif
4376 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttribPointerData(indx:%u size:%d type:0x%08x normalized:%d stride:%d data:%p(%u) datalen:%u )", stream, var_indx, var_size, var_type, var_normalized, var_stride, (void*)(inptr_data.get()), size_data, var_datalen);
4377 			this->glVertexAttribPointerData(this, var_indx, var_size, var_type, var_normalized, var_stride, (void*)(inptr_data.get()), var_datalen);
4378 			SET_LASTCALL("glVertexAttribPointerData");
4379 			android::base::endTrace();
4380 			break;
4381 		}
4382 		case OP_glVertexAttribPointerOffset: {
4383 			android::base::beginTrace("glVertexAttribPointerOffset decode");
4384 			GLuint var_indx = Unpack<GLuint,uint32_t>(ptr + 8);
4385 			GLint var_size = Unpack<GLint,uint32_t>(ptr + 8 + 4);
4386 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
4387 			GLboolean var_normalized = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4 + 4);
4388 			GLsizei var_stride = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1);
4389 			GLuint var_offset = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1 + 4);
4390 			if (useChecksum) {
4391 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 1 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 1 + 4 + 4, checksumSize,
4392 					"gles2_decoder_context_t::decode, OP_glVertexAttribPointerOffset: GL checksumCalculator failure\n");
4393 			}
4394 			#ifdef CHECK_GL_ERRORS
4395 			GLint err = this->glGetError();
4396 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttribPointerOffset\n", err);
4397 			#endif
4398 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttribPointerOffset(indx:%u size:%d type:0x%08x normalized:%d stride:%d offset:%u )", stream, var_indx, var_size, var_type, var_normalized, var_stride, var_offset);
4399 			this->glVertexAttribPointerOffset(this, var_indx, var_size, var_type, var_normalized, var_stride, var_offset);
4400 			SET_LASTCALL("glVertexAttribPointerOffset");
4401 			android::base::endTrace();
4402 			break;
4403 		}
4404 		case OP_glDrawElementsOffset: {
4405 			android::base::beginTrace("glDrawElementsOffset decode");
4406 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
4407 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
4408 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
4409 			GLuint var_offset = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4);
4410 			if (useChecksum) {
4411 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
4412 					"gles2_decoder_context_t::decode, OP_glDrawElementsOffset: GL checksumCalculator failure\n");
4413 			}
4414 			#ifdef CHECK_GL_ERRORS
4415 			GLint err = this->glGetError();
4416 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawElementsOffset\n", err);
4417 			#endif
4418 			DECODER_DEBUG_LOG("gles2(%p): glDrawElementsOffset(mode:0x%08x count:%d type:0x%08x offset:%u )", stream, var_mode, var_count, var_type, var_offset);
4419 			this->glDrawElementsOffset(this, var_mode, var_count, var_type, var_offset);
4420 			SET_LASTCALL("glDrawElementsOffset");
4421 			android::base::endTrace();
4422 			break;
4423 		}
4424 		case OP_glDrawElementsData: {
4425 			android::base::beginTrace("glDrawElementsData decode");
4426 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
4427 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
4428 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
4429 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
4430 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4 + 4, size_data);
4431 			GLuint var_datalen = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + size_data);
4432 			if (useChecksum) {
4433 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_data + 4, ptr + 8 + 4 + 4 + 4 + 4 + size_data + 4, checksumSize,
4434 					"gles2_decoder_context_t::decode, OP_glDrawElementsData: GL checksumCalculator failure\n");
4435 			}
4436 			#ifdef CHECK_GL_ERRORS
4437 			GLint err = this->glGetError();
4438 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawElementsData\n", err);
4439 			#endif
4440 			DECODER_DEBUG_LOG("gles2(%p): glDrawElementsData(mode:0x%08x count:%d type:0x%08x data:%p(%u) datalen:%u )", stream, var_mode, var_count, var_type, (void*)(inptr_data.get()), size_data, var_datalen);
4441 			this->glDrawElementsData(this, var_mode, var_count, var_type, (void*)(inptr_data.get()), var_datalen);
4442 			SET_LASTCALL("glDrawElementsData");
4443 			android::base::endTrace();
4444 			break;
4445 		}
4446 		case OP_glGetCompressedTextureFormats: {
4447 			android::base::beginTrace("glGetCompressedTextureFormats decode");
4448 			int var_count = Unpack<int,uint32_t>(ptr + 8);
4449 			uint32_t size_formats __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
4450 			if (useChecksum) {
4451 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
4452 					"gles2_decoder_context_t::decode, OP_glGetCompressedTextureFormats: GL checksumCalculator failure\n");
4453 			}
4454 			size_t totalTmpSize = size_formats;
4455 			totalTmpSize += checksumSize;
4456 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
4457 			OutputBuffer outptr_formats(&tmpBuf[0], size_formats);
4458 			#ifdef CHECK_GL_ERRORS
4459 			GLint err = this->glGetError();
4460 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetCompressedTextureFormats\n", err);
4461 			#endif
4462 			DECODER_DEBUG_LOG("gles2(%p): glGetCompressedTextureFormats(count:%d formats:%p(%u) )", stream, var_count, (GLint*)(outptr_formats.get()), size_formats);
4463 			this->glGetCompressedTextureFormats(this, var_count, (GLint*)(outptr_formats.get()));
4464 			outptr_formats.flush();
4465 			if (useChecksum) {
4466 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
4467 			}
4468 			stream->flush();
4469 			SET_LASTCALL("glGetCompressedTextureFormats");
4470 			android::base::endTrace();
4471 			break;
4472 		}
4473 		case OP_glShaderString: {
4474 			android::base::beginTrace("glShaderString decode");
4475 			GLuint var_shader = Unpack<GLuint,uint32_t>(ptr + 8);
4476 			uint32_t size_string __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
4477 			InputBuffer inptr_string(ptr + 8 + 4 + 4, size_string);
4478 			GLsizei var_len = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + size_string);
4479 			if (useChecksum) {
4480 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_string + 4, ptr + 8 + 4 + 4 + size_string + 4, checksumSize,
4481 					"gles2_decoder_context_t::decode, OP_glShaderString: GL checksumCalculator failure\n");
4482 			}
4483 			#ifdef CHECK_GL_ERRORS
4484 			GLint err = this->glGetError();
4485 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glShaderString\n", err);
4486 			#endif
4487 			DECODER_DEBUG_LOG("gles2(%p): glShaderString(shader:%u string:%p(%u) len:%d )", stream, var_shader, (const GLchar*)(inptr_string.get()), size_string, var_len);
4488 			this->glShaderString(this, var_shader, (const GLchar*)(inptr_string.get()), var_len);
4489 			SET_LASTCALL("glShaderString");
4490 			android::base::endTrace();
4491 			break;
4492 		}
4493 		case OP_glFinishRoundTrip: {
4494 			android::base::beginTrace("glFinishRoundTrip decode");
4495 			if (useChecksum) {
4496 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8, ptr + 8, checksumSize,
4497 					"gles2_decoder_context_t::decode, OP_glFinishRoundTrip: GL checksumCalculator failure\n");
4498 			}
4499 			size_t totalTmpSize = sizeof(int);
4500 			totalTmpSize += checksumSize;
4501 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
4502 			#ifdef CHECK_GL_ERRORS
4503 			GLint err = this->glGetError();
4504 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glFinishRoundTrip\n", err);
4505 			#endif
4506 			DECODER_DEBUG_LOG("gles2(%p): glFinishRoundTrip()", stream);
4507 			*(int *)(&tmpBuf[0]) = 			this->glFinishRoundTrip(this);
4508 			if (useChecksum) {
4509 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
4510 			}
4511 			stream->flush();
4512 			SET_LASTCALL("glFinishRoundTrip");
4513 			android::base::endTrace();
4514 			break;
4515 		}
4516 		case OP_glGenVertexArrays: {
4517 			android::base::beginTrace("glGenVertexArrays decode");
4518 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
4519 			uint32_t size_arrays __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
4520 			if (useChecksum) {
4521 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
4522 					"gles2_decoder_context_t::decode, OP_glGenVertexArrays: GL checksumCalculator failure\n");
4523 			}
4524 			size_t totalTmpSize = size_arrays;
4525 			totalTmpSize += checksumSize;
4526 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
4527 			OutputBuffer outptr_arrays(&tmpBuf[0], size_arrays);
4528 			#ifdef CHECK_GL_ERRORS
4529 			GLint err = this->glGetError();
4530 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGenVertexArrays\n", err);
4531 			#endif
4532 			DECODER_DEBUG_LOG("gles2(%p): glGenVertexArrays(n:%d arrays:%p(%u) )", stream, var_n, (GLuint*)(outptr_arrays.get()), size_arrays);
4533 			this->glGenVertexArrays_dec(this, var_n, (GLuint*)(outptr_arrays.get()));
4534 			outptr_arrays.flush();
4535 			if (useChecksum) {
4536 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
4537 			}
4538 			stream->flush();
4539 			SET_LASTCALL("glGenVertexArrays");
4540 			android::base::endTrace();
4541 			break;
4542 		}
4543 		case OP_glBindVertexArray: {
4544 			android::base::beginTrace("glBindVertexArray decode");
4545 			GLuint var_array = Unpack<GLuint,uint32_t>(ptr + 8);
4546 			if (useChecksum) {
4547 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
4548 					"gles2_decoder_context_t::decode, OP_glBindVertexArray: GL checksumCalculator failure\n");
4549 			}
4550 			#ifdef CHECK_GL_ERRORS
4551 			GLint err = this->glGetError();
4552 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBindVertexArray\n", err);
4553 			#endif
4554 			DECODER_DEBUG_LOG("gles2(%p): glBindVertexArray(array:%u )", stream, var_array);
4555 			this->glBindVertexArray(var_array);
4556 			SET_LASTCALL("glBindVertexArray");
4557 			android::base::endTrace();
4558 			break;
4559 		}
4560 		case OP_glDeleteVertexArrays: {
4561 			android::base::beginTrace("glDeleteVertexArrays decode");
4562 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
4563 			uint32_t size_arrays __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
4564 			InputBuffer inptr_arrays(ptr + 8 + 4 + 4, size_arrays);
4565 			if (useChecksum) {
4566 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_arrays, ptr + 8 + 4 + 4 + size_arrays, checksumSize,
4567 					"gles2_decoder_context_t::decode, OP_glDeleteVertexArrays: GL checksumCalculator failure\n");
4568 			}
4569 			#ifdef CHECK_GL_ERRORS
4570 			GLint err = this->glGetError();
4571 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDeleteVertexArrays\n", err);
4572 			#endif
4573 			DECODER_DEBUG_LOG("gles2(%p): glDeleteVertexArrays(n:%d arrays:%p(%u) )", stream, var_n, (const GLuint*)(inptr_arrays.get()), size_arrays);
4574 			this->glDeleteVertexArrays_dec(this, var_n, (const GLuint*)(inptr_arrays.get()));
4575 			SET_LASTCALL("glDeleteVertexArrays");
4576 			android::base::endTrace();
4577 			break;
4578 		}
4579 		case OP_glIsVertexArray: {
4580 			android::base::beginTrace("glIsVertexArray decode");
4581 			GLuint var_array = Unpack<GLuint,uint32_t>(ptr + 8);
4582 			if (useChecksum) {
4583 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
4584 					"gles2_decoder_context_t::decode, OP_glIsVertexArray: GL checksumCalculator failure\n");
4585 			}
4586 			size_t totalTmpSize = sizeof(GLboolean);
4587 			totalTmpSize += checksumSize;
4588 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
4589 			#ifdef CHECK_GL_ERRORS
4590 			GLint err = this->glGetError();
4591 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glIsVertexArray\n", err);
4592 			#endif
4593 			DECODER_DEBUG_LOG("gles2(%p): glIsVertexArray(array:%u )", stream, var_array);
4594 			*(GLboolean *)(&tmpBuf[0]) = 			this->glIsVertexArray(var_array);
4595 			if (useChecksum) {
4596 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
4597 			}
4598 			stream->flush();
4599 			SET_LASTCALL("glIsVertexArray");
4600 			android::base::endTrace();
4601 			break;
4602 		}
4603 		case OP_glMapBufferRange: {
4604 			android::base::beginTrace("glMapBufferRange decode");
4605 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
4606 			GLintptr var_offset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4);
4607 			GLsizeiptr var_length = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4 + 4);
4608 			GLbitfield var_access = Unpack<GLbitfield,uint32_t>(ptr + 8 + 4 + 4 + 4);
4609 			if (useChecksum) {
4610 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
4611 					"gles2_decoder_context_t::decode, OP_glMapBufferRange: GL checksumCalculator failure\n");
4612 			}
4613 			#ifdef CHECK_GL_ERRORS
4614 			GLint err = this->glGetError();
4615 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glMapBufferRange\n", err);
4616 			#endif
4617 			DECODER_DEBUG_LOG("gles2(%p): glMapBufferRange(target:0x%08x offset:0x%08lx length:0x%08lx access:0x%08x )", stream, var_target, var_offset, var_length, var_access);
4618 			this->glMapBufferRange(var_target, var_offset, var_length, var_access);
4619 			SET_LASTCALL("glMapBufferRange");
4620 			android::base::endTrace();
4621 			break;
4622 		}
4623 		case OP_glUnmapBuffer: {
4624 			android::base::beginTrace("glUnmapBuffer decode");
4625 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
4626 			if (useChecksum) {
4627 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
4628 					"gles2_decoder_context_t::decode, OP_glUnmapBuffer: GL checksumCalculator failure\n");
4629 			}
4630 			size_t totalTmpSize = sizeof(GLboolean);
4631 			totalTmpSize += checksumSize;
4632 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
4633 			#ifdef CHECK_GL_ERRORS
4634 			GLint err = this->glGetError();
4635 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUnmapBuffer\n", err);
4636 			#endif
4637 			DECODER_DEBUG_LOG("gles2(%p): glUnmapBuffer(target:0x%08x )", stream, var_target);
4638 			*(GLboolean *)(&tmpBuf[0]) = 			this->glUnmapBuffer(var_target);
4639 			if (useChecksum) {
4640 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
4641 			}
4642 			stream->flush();
4643 			SET_LASTCALL("glUnmapBuffer");
4644 			android::base::endTrace();
4645 			break;
4646 		}
4647 		case OP_glFlushMappedBufferRange: {
4648 			android::base::beginTrace("glFlushMappedBufferRange decode");
4649 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
4650 			GLintptr var_offset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4);
4651 			GLsizeiptr var_length = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4 + 4);
4652 			if (useChecksum) {
4653 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
4654 					"gles2_decoder_context_t::decode, OP_glFlushMappedBufferRange: GL checksumCalculator failure\n");
4655 			}
4656 			#ifdef CHECK_GL_ERRORS
4657 			GLint err = this->glGetError();
4658 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glFlushMappedBufferRange\n", err);
4659 			#endif
4660 			DECODER_DEBUG_LOG("gles2(%p): glFlushMappedBufferRange(target:0x%08x offset:0x%08lx length:0x%08lx )", stream, var_target, var_offset, var_length);
4661 			this->glFlushMappedBufferRange(var_target, var_offset, var_length);
4662 			SET_LASTCALL("glFlushMappedBufferRange");
4663 			android::base::endTrace();
4664 			break;
4665 		}
4666 		case OP_glMapBufferRangeAEMU: {
4667 			android::base::beginTrace("glMapBufferRangeAEMU decode");
4668 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
4669 			GLintptr var_offset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4);
4670 			GLsizeiptr var_length = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4 + 4);
4671 			GLbitfield var_access = Unpack<GLbitfield,uint32_t>(ptr + 8 + 4 + 4 + 4);
4672 			uint32_t size_mapped __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
4673 			if (useChecksum) {
4674 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
4675 					"gles2_decoder_context_t::decode, OP_glMapBufferRangeAEMU: GL checksumCalculator failure\n");
4676 			}
4677 			size_t totalTmpSize = size_mapped;
4678 			totalTmpSize += checksumSize;
4679 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
4680 			OutputBuffer outptr_mapped(&tmpBuf[0], size_mapped);
4681 			#ifdef CHECK_GL_ERRORS
4682 			GLint err = this->glGetError();
4683 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glMapBufferRangeAEMU\n", err);
4684 			#endif
4685 			DECODER_DEBUG_LOG("gles2(%p): glMapBufferRangeAEMU(target:0x%08x offset:0x%08lx length:0x%08lx access:0x%08x mapped:%p(%u) )", stream, var_target, var_offset, var_length, var_access, (void*)(outptr_mapped.get()), size_mapped);
4686 			this->glMapBufferRangeAEMU(this, var_target, var_offset, var_length, var_access, size_mapped == 0 ? nullptr : (void*)(outptr_mapped.get()));
4687 			outptr_mapped.flush();
4688 			if (useChecksum) {
4689 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
4690 			}
4691 			stream->flush();
4692 			SET_LASTCALL("glMapBufferRangeAEMU");
4693 			android::base::endTrace();
4694 			break;
4695 		}
4696 		case OP_glUnmapBufferAEMU: {
4697 			android::base::beginTrace("glUnmapBufferAEMU decode");
4698 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
4699 			GLintptr var_offset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4);
4700 			GLsizeiptr var_length = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4 + 4);
4701 			GLbitfield var_access = Unpack<GLbitfield,uint32_t>(ptr + 8 + 4 + 4 + 4);
4702 			uint32_t size_guest_buffer __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
4703 			InputBuffer inptr_guest_buffer(ptr + 8 + 4 + 4 + 4 + 4 + 4, size_guest_buffer);
4704 			uint32_t size_out_res __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + size_guest_buffer);
4705 			if (useChecksum) {
4706 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + size_guest_buffer + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + size_guest_buffer + 4, checksumSize,
4707 					"gles2_decoder_context_t::decode, OP_glUnmapBufferAEMU: GL checksumCalculator failure\n");
4708 			}
4709 			size_t totalTmpSize = size_out_res;
4710 			totalTmpSize += checksumSize;
4711 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
4712 			OutputBuffer outptr_out_res(&tmpBuf[0], size_out_res);
4713 			#ifdef CHECK_GL_ERRORS
4714 			GLint err = this->glGetError();
4715 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUnmapBufferAEMU\n", err);
4716 			#endif
4717 			DECODER_DEBUG_LOG("gles2(%p): glUnmapBufferAEMU(target:0x%08x offset:0x%08lx length:0x%08lx access:0x%08x guest_buffer:%p(%u) out_res:%p(%u) )", stream, var_target, var_offset, var_length, var_access, (void*)(inptr_guest_buffer.get()), size_guest_buffer, (GLboolean*)(outptr_out_res.get()), size_out_res);
4718 			this->glUnmapBufferAEMU(this, var_target, var_offset, var_length, var_access, size_guest_buffer == 0 ? nullptr : (void*)(inptr_guest_buffer.get()), (GLboolean*)(outptr_out_res.get()));
4719 			outptr_out_res.flush();
4720 			if (useChecksum) {
4721 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
4722 			}
4723 			stream->flush();
4724 			SET_LASTCALL("glUnmapBufferAEMU");
4725 			android::base::endTrace();
4726 			break;
4727 		}
4728 		case OP_glFlushMappedBufferRangeAEMU: {
4729 			android::base::beginTrace("glFlushMappedBufferRangeAEMU decode");
4730 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
4731 			GLintptr var_offset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4);
4732 			GLsizeiptr var_length = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4 + 4);
4733 			GLbitfield var_access = Unpack<GLbitfield,uint32_t>(ptr + 8 + 4 + 4 + 4);
4734 			uint32_t size_guest_buffer __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
4735 			InputBuffer inptr_guest_buffer(ptr + 8 + 4 + 4 + 4 + 4 + 4, size_guest_buffer);
4736 			if (useChecksum) {
4737 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + size_guest_buffer, ptr + 8 + 4 + 4 + 4 + 4 + 4 + size_guest_buffer, checksumSize,
4738 					"gles2_decoder_context_t::decode, OP_glFlushMappedBufferRangeAEMU: GL checksumCalculator failure\n");
4739 			}
4740 			#ifdef CHECK_GL_ERRORS
4741 			GLint err = this->glGetError();
4742 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glFlushMappedBufferRangeAEMU\n", err);
4743 			#endif
4744 			DECODER_DEBUG_LOG("gles2(%p): glFlushMappedBufferRangeAEMU(target:0x%08x offset:0x%08lx length:0x%08lx access:0x%08x guest_buffer:%p(%u) )", stream, var_target, var_offset, var_length, var_access, (void*)(inptr_guest_buffer.get()), size_guest_buffer);
4745 			this->glFlushMappedBufferRangeAEMU(this, var_target, var_offset, var_length, var_access, size_guest_buffer == 0 ? nullptr : (void*)(inptr_guest_buffer.get()));
4746 			SET_LASTCALL("glFlushMappedBufferRangeAEMU");
4747 			android::base::endTrace();
4748 			break;
4749 		}
4750 		case OP_glReadPixelsOffsetAEMU: {
4751 			android::base::beginTrace("glReadPixelsOffsetAEMU decode");
4752 			GLint var_x = Unpack<GLint,uint32_t>(ptr + 8);
4753 			GLint var_y = Unpack<GLint,uint32_t>(ptr + 8 + 4);
4754 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
4755 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
4756 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
4757 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
4758 			GLuint var_offset = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
4759 			if (useChecksum) {
4760 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
4761 					"gles2_decoder_context_t::decode, OP_glReadPixelsOffsetAEMU: GL checksumCalculator failure\n");
4762 			}
4763 			#ifdef CHECK_GL_ERRORS
4764 			GLint err = this->glGetError();
4765 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glReadPixelsOffsetAEMU\n", err);
4766 			#endif
4767 			DECODER_DEBUG_LOG("gles2(%p): glReadPixelsOffsetAEMU(x:%d y:%d width:%d height:%d format:0x%08x type:0x%08x offset:%u )", stream, var_x, var_y, var_width, var_height, var_format, var_type, var_offset);
4768 			this->glReadPixelsOffsetAEMU(this, var_x, var_y, var_width, var_height, var_format, var_type, var_offset);
4769 			SET_LASTCALL("glReadPixelsOffsetAEMU");
4770 			android::base::endTrace();
4771 			break;
4772 		}
4773 		case OP_glCompressedTexImage2DOffsetAEMU: {
4774 			android::base::beginTrace("glCompressedTexImage2DOffsetAEMU decode");
4775 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
4776 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
4777 			GLenum var_internalformat = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
4778 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
4779 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
4780 			GLint var_border = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
4781 			GLsizei var_imageSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
4782 			GLuint var_offset = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
4783 			if (useChecksum) {
4784 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
4785 					"gles2_decoder_context_t::decode, OP_glCompressedTexImage2DOffsetAEMU: GL checksumCalculator failure\n");
4786 			}
4787 			#ifdef CHECK_GL_ERRORS
4788 			GLint err = this->glGetError();
4789 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCompressedTexImage2DOffsetAEMU\n", err);
4790 			#endif
4791 			DECODER_DEBUG_LOG("gles2(%p): glCompressedTexImage2DOffsetAEMU(target:0x%08x level:%d internalformat:0x%08x width:%d height:%d border:%d imageSize:%d offset:%u )", stream, var_target, var_level, var_internalformat, var_width, var_height, var_border, var_imageSize, var_offset);
4792 			this->glCompressedTexImage2DOffsetAEMU(this, var_target, var_level, var_internalformat, var_width, var_height, var_border, var_imageSize, var_offset);
4793 			SET_LASTCALL("glCompressedTexImage2DOffsetAEMU");
4794 			android::base::endTrace();
4795 			break;
4796 		}
4797 		case OP_glCompressedTexSubImage2DOffsetAEMU: {
4798 			android::base::beginTrace("glCompressedTexSubImage2DOffsetAEMU decode");
4799 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
4800 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
4801 			GLint var_xoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
4802 			GLint var_yoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
4803 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
4804 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
4805 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
4806 			GLsizei var_imageSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
4807 			GLuint var_offset = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
4808 			if (useChecksum) {
4809 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
4810 					"gles2_decoder_context_t::decode, OP_glCompressedTexSubImage2DOffsetAEMU: GL checksumCalculator failure\n");
4811 			}
4812 			#ifdef CHECK_GL_ERRORS
4813 			GLint err = this->glGetError();
4814 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCompressedTexSubImage2DOffsetAEMU\n", err);
4815 			#endif
4816 			DECODER_DEBUG_LOG("gles2(%p): glCompressedTexSubImage2DOffsetAEMU(target:0x%08x level:%d xoffset:%d yoffset:%d width:%d height:%d format:0x%08x imageSize:%d offset:%u )", stream, var_target, var_level, var_xoffset, var_yoffset, var_width, var_height, var_format, var_imageSize, var_offset);
4817 			this->glCompressedTexSubImage2DOffsetAEMU(this, var_target, var_level, var_xoffset, var_yoffset, var_width, var_height, var_format, var_imageSize, var_offset);
4818 			SET_LASTCALL("glCompressedTexSubImage2DOffsetAEMU");
4819 			android::base::endTrace();
4820 			break;
4821 		}
4822 		case OP_glTexImage2DOffsetAEMU: {
4823 			android::base::beginTrace("glTexImage2DOffsetAEMU decode");
4824 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
4825 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
4826 			GLint var_internalformat = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
4827 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
4828 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
4829 			GLint var_border = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
4830 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
4831 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
4832 			GLuint var_offset = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
4833 			if (useChecksum) {
4834 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
4835 					"gles2_decoder_context_t::decode, OP_glTexImage2DOffsetAEMU: GL checksumCalculator failure\n");
4836 			}
4837 			#ifdef CHECK_GL_ERRORS
4838 			GLint err = this->glGetError();
4839 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexImage2DOffsetAEMU\n", err);
4840 			#endif
4841 			DECODER_DEBUG_LOG("gles2(%p): glTexImage2DOffsetAEMU(target:0x%08x level:%d internalformat:%d width:%d height:%d border:%d format:0x%08x type:0x%08x offset:%u )", stream, var_target, var_level, var_internalformat, var_width, var_height, var_border, var_format, var_type, var_offset);
4842 			this->glTexImage2DOffsetAEMU(this, var_target, var_level, var_internalformat, var_width, var_height, var_border, var_format, var_type, var_offset);
4843 			SET_LASTCALL("glTexImage2DOffsetAEMU");
4844 			android::base::endTrace();
4845 			break;
4846 		}
4847 		case OP_glTexSubImage2DOffsetAEMU: {
4848 			android::base::beginTrace("glTexSubImage2DOffsetAEMU decode");
4849 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
4850 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
4851 			GLint var_xoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
4852 			GLint var_yoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
4853 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
4854 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
4855 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
4856 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
4857 			GLuint var_offset = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
4858 			if (useChecksum) {
4859 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
4860 					"gles2_decoder_context_t::decode, OP_glTexSubImage2DOffsetAEMU: GL checksumCalculator failure\n");
4861 			}
4862 			#ifdef CHECK_GL_ERRORS
4863 			GLint err = this->glGetError();
4864 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexSubImage2DOffsetAEMU\n", err);
4865 			#endif
4866 			DECODER_DEBUG_LOG("gles2(%p): glTexSubImage2DOffsetAEMU(target:0x%08x level:%d xoffset:%d yoffset:%d width:%d height:%d format:0x%08x type:0x%08x offset:%u )", stream, var_target, var_level, var_xoffset, var_yoffset, var_width, var_height, var_format, var_type, var_offset);
4867 			this->glTexSubImage2DOffsetAEMU(this, var_target, var_level, var_xoffset, var_yoffset, var_width, var_height, var_format, var_type, var_offset);
4868 			SET_LASTCALL("glTexSubImage2DOffsetAEMU");
4869 			android::base::endTrace();
4870 			break;
4871 		}
4872 		case OP_glBindBufferRange: {
4873 			android::base::beginTrace("glBindBufferRange decode");
4874 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
4875 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
4876 			GLuint var_buffer = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
4877 			GLintptr var_offset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4 + 4 + 4);
4878 			GLsizeiptr var_size = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
4879 			if (useChecksum) {
4880 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
4881 					"gles2_decoder_context_t::decode, OP_glBindBufferRange: GL checksumCalculator failure\n");
4882 			}
4883 			#ifdef CHECK_GL_ERRORS
4884 			GLint err = this->glGetError();
4885 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBindBufferRange\n", err);
4886 			#endif
4887 			DECODER_DEBUG_LOG("gles2(%p): glBindBufferRange(target:0x%08x index:%u buffer:%u offset:0x%08lx size:0x%08lx )", stream, var_target, var_index, var_buffer, var_offset, var_size);
4888 			this->glBindBufferRange(var_target, var_index, var_buffer, var_offset, var_size);
4889 			SET_LASTCALL("glBindBufferRange");
4890 			android::base::endTrace();
4891 			break;
4892 		}
4893 		case OP_glBindBufferBase: {
4894 			android::base::beginTrace("glBindBufferBase decode");
4895 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
4896 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
4897 			GLuint var_buffer = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
4898 			if (useChecksum) {
4899 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
4900 					"gles2_decoder_context_t::decode, OP_glBindBufferBase: GL checksumCalculator failure\n");
4901 			}
4902 			#ifdef CHECK_GL_ERRORS
4903 			GLint err = this->glGetError();
4904 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBindBufferBase\n", err);
4905 			#endif
4906 			DECODER_DEBUG_LOG("gles2(%p): glBindBufferBase(target:0x%08x index:%u buffer:%u )", stream, var_target, var_index, var_buffer);
4907 			this->glBindBufferBase(var_target, var_index, var_buffer);
4908 			SET_LASTCALL("glBindBufferBase");
4909 			android::base::endTrace();
4910 			break;
4911 		}
4912 		case OP_glCopyBufferSubData: {
4913 			android::base::beginTrace("glCopyBufferSubData decode");
4914 			GLenum var_readtarget = Unpack<GLenum,uint32_t>(ptr + 8);
4915 			GLenum var_writetarget = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
4916 			GLintptr var_readoffset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4 + 4);
4917 			GLintptr var_writeoffset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4 + 4 + 4);
4918 			GLsizeiptr var_size = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
4919 			if (useChecksum) {
4920 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
4921 					"gles2_decoder_context_t::decode, OP_glCopyBufferSubData: GL checksumCalculator failure\n");
4922 			}
4923 			#ifdef CHECK_GL_ERRORS
4924 			GLint err = this->glGetError();
4925 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCopyBufferSubData\n", err);
4926 			#endif
4927 			DECODER_DEBUG_LOG("gles2(%p): glCopyBufferSubData(readtarget:0x%08x writetarget:0x%08x readoffset:0x%08lx writeoffset:0x%08lx size:0x%08lx )", stream, var_readtarget, var_writetarget, var_readoffset, var_writeoffset, var_size);
4928 			this->glCopyBufferSubData(var_readtarget, var_writetarget, var_readoffset, var_writeoffset, var_size);
4929 			SET_LASTCALL("glCopyBufferSubData");
4930 			android::base::endTrace();
4931 			break;
4932 		}
4933 		case OP_glClearBufferiv: {
4934 			android::base::beginTrace("glClearBufferiv decode");
4935 			GLenum var_buffer = Unpack<GLenum,uint32_t>(ptr + 8);
4936 			GLint var_drawBuffer = Unpack<GLint,uint32_t>(ptr + 8 + 4);
4937 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
4938 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4, size_value);
4939 			if (useChecksum) {
4940 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + size_value, checksumSize,
4941 					"gles2_decoder_context_t::decode, OP_glClearBufferiv: GL checksumCalculator failure\n");
4942 			}
4943 			#ifdef CHECK_GL_ERRORS
4944 			GLint err = this->glGetError();
4945 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glClearBufferiv\n", err);
4946 			#endif
4947 			DECODER_DEBUG_LOG("gles2(%p): glClearBufferiv(buffer:0x%08x drawBuffer:%d value:%p(%u) )", stream, var_buffer, var_drawBuffer, (const GLint*)(inptr_value.get()), size_value);
4948 			this->glClearBufferiv(var_buffer, var_drawBuffer, (const GLint*)(inptr_value.get()));
4949 			SET_LASTCALL("glClearBufferiv");
4950 			android::base::endTrace();
4951 			break;
4952 		}
4953 		case OP_glClearBufferuiv: {
4954 			android::base::beginTrace("glClearBufferuiv decode");
4955 			GLenum var_buffer = Unpack<GLenum,uint32_t>(ptr + 8);
4956 			GLint var_drawBuffer = Unpack<GLint,uint32_t>(ptr + 8 + 4);
4957 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
4958 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4, size_value);
4959 			if (useChecksum) {
4960 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + size_value, checksumSize,
4961 					"gles2_decoder_context_t::decode, OP_glClearBufferuiv: GL checksumCalculator failure\n");
4962 			}
4963 			#ifdef CHECK_GL_ERRORS
4964 			GLint err = this->glGetError();
4965 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glClearBufferuiv\n", err);
4966 			#endif
4967 			DECODER_DEBUG_LOG("gles2(%p): glClearBufferuiv(buffer:0x%08x drawBuffer:%d value:%p(%u) )", stream, var_buffer, var_drawBuffer, (const GLuint*)(inptr_value.get()), size_value);
4968 			this->glClearBufferuiv(var_buffer, var_drawBuffer, (const GLuint*)(inptr_value.get()));
4969 			SET_LASTCALL("glClearBufferuiv");
4970 			android::base::endTrace();
4971 			break;
4972 		}
4973 		case OP_glClearBufferfv: {
4974 			android::base::beginTrace("glClearBufferfv decode");
4975 			GLenum var_buffer = Unpack<GLenum,uint32_t>(ptr + 8);
4976 			GLint var_drawBuffer = Unpack<GLint,uint32_t>(ptr + 8 + 4);
4977 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
4978 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4, size_value);
4979 			if (useChecksum) {
4980 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + size_value, checksumSize,
4981 					"gles2_decoder_context_t::decode, OP_glClearBufferfv: GL checksumCalculator failure\n");
4982 			}
4983 			#ifdef CHECK_GL_ERRORS
4984 			GLint err = this->glGetError();
4985 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glClearBufferfv\n", err);
4986 			#endif
4987 			DECODER_DEBUG_LOG("gles2(%p): glClearBufferfv(buffer:0x%08x drawBuffer:%d value:%p(%u) )", stream, var_buffer, var_drawBuffer, (const GLfloat*)(inptr_value.get()), size_value);
4988 			this->glClearBufferfv(var_buffer, var_drawBuffer, (const GLfloat*)(inptr_value.get()));
4989 			SET_LASTCALL("glClearBufferfv");
4990 			android::base::endTrace();
4991 			break;
4992 		}
4993 		case OP_glClearBufferfi: {
4994 			android::base::beginTrace("glClearBufferfi decode");
4995 			GLenum var_buffer = Unpack<GLenum,uint32_t>(ptr + 8);
4996 			GLint var_drawBuffer = Unpack<GLint,uint32_t>(ptr + 8 + 4);
4997 			GLfloat var_depth = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4);
4998 			GLint var_stencil = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
4999 			if (useChecksum) {
5000 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
5001 					"gles2_decoder_context_t::decode, OP_glClearBufferfi: GL checksumCalculator failure\n");
5002 			}
5003 			#ifdef CHECK_GL_ERRORS
5004 			GLint err = this->glGetError();
5005 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glClearBufferfi\n", err);
5006 			#endif
5007 			DECODER_DEBUG_LOG("gles2(%p): glClearBufferfi(buffer:0x%08x drawBuffer:%d depth:%f stencil:%d )", stream, var_buffer, var_drawBuffer, var_depth, var_stencil);
5008 			this->glClearBufferfi(var_buffer, var_drawBuffer, var_depth, var_stencil);
5009 			SET_LASTCALL("glClearBufferfi");
5010 			android::base::endTrace();
5011 			break;
5012 		}
5013 		case OP_glGetBufferParameteri64v: {
5014 			android::base::beginTrace("glGetBufferParameteri64v decode");
5015 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
5016 			GLenum var_value = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
5017 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
5018 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4, size_data);
5019 			if (useChecksum) {
5020 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_data, ptr + 8 + 4 + 4 + 4 + size_data, checksumSize,
5021 					"gles2_decoder_context_t::decode, OP_glGetBufferParameteri64v: GL checksumCalculator failure\n");
5022 			}
5023 			#ifdef CHECK_GL_ERRORS
5024 			GLint err = this->glGetError();
5025 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetBufferParameteri64v\n", err);
5026 			#endif
5027 			DECODER_DEBUG_LOG("gles2(%p): glGetBufferParameteri64v(target:0x%08x value:0x%08x data:%p(%u) )", stream, var_target, var_value, (GLint64*)(inptr_data.get()), size_data);
5028 			this->glGetBufferParameteri64v(var_target, var_value, (GLint64*)(inptr_data.get()));
5029 			SET_LASTCALL("glGetBufferParameteri64v");
5030 			android::base::endTrace();
5031 			break;
5032 		}
5033 		case OP_glGetBufferPointerv: {
5034 			android::base::beginTrace("glGetBufferPointerv decode");
5035 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
5036 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
5037 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
5038 			InputBuffer inptr_params(ptr + 8 + 4 + 4 + 4, size_params);
5039 			if (useChecksum) {
5040 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_params, ptr + 8 + 4 + 4 + 4 + size_params, checksumSize,
5041 					"gles2_decoder_context_t::decode, OP_glGetBufferPointerv: GL checksumCalculator failure\n");
5042 			}
5043 			#ifdef CHECK_GL_ERRORS
5044 			GLint err = this->glGetError();
5045 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetBufferPointerv\n", err);
5046 			#endif
5047 			DECODER_DEBUG_LOG("gles2(%p): glGetBufferPointerv(target:0x%08x pname:0x%08x params:%p(%u) )", stream, var_target, var_pname, (GLvoid**)(inptr_params.get()), size_params);
5048 			this->glGetBufferPointerv(var_target, var_pname, (GLvoid**)(inptr_params.get()));
5049 			SET_LASTCALL("glGetBufferPointerv");
5050 			android::base::endTrace();
5051 			break;
5052 		}
5053 		case OP_glUniformBlockBinding: {
5054 			android::base::beginTrace("glUniformBlockBinding decode");
5055 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
5056 			GLuint var_uniformBlockIndex = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
5057 			GLuint var_uniformBlockBinding = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
5058 			if (useChecksum) {
5059 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
5060 					"gles2_decoder_context_t::decode, OP_glUniformBlockBinding: GL checksumCalculator failure\n");
5061 			}
5062 			#ifdef CHECK_GL_ERRORS
5063 			GLint err = this->glGetError();
5064 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniformBlockBinding\n", err);
5065 			#endif
5066 			DECODER_DEBUG_LOG("gles2(%p): glUniformBlockBinding(program:%u uniformBlockIndex:%u uniformBlockBinding:%u )", stream, var_program, var_uniformBlockIndex, var_uniformBlockBinding);
5067 			this->glUniformBlockBinding_dec(this, var_program, var_uniformBlockIndex, var_uniformBlockBinding);
5068 			SET_LASTCALL("glUniformBlockBinding");
5069 			android::base::endTrace();
5070 			break;
5071 		}
5072 		case OP_glGetUniformBlockIndex: {
5073 			android::base::beginTrace("glGetUniformBlockIndex decode");
5074 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
5075 			uint32_t size_uniformBlockName __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
5076 			InputBuffer inptr_uniformBlockName(ptr + 8 + 4 + 4, size_uniformBlockName);
5077 			if (useChecksum) {
5078 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_uniformBlockName, ptr + 8 + 4 + 4 + size_uniformBlockName, checksumSize,
5079 					"gles2_decoder_context_t::decode, OP_glGetUniformBlockIndex: GL checksumCalculator failure\n");
5080 			}
5081 			size_t totalTmpSize = sizeof(GLuint);
5082 			totalTmpSize += checksumSize;
5083 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
5084 			#ifdef CHECK_GL_ERRORS
5085 			GLint err = this->glGetError();
5086 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetUniformBlockIndex\n", err);
5087 			#endif
5088 			DECODER_DEBUG_LOG("gles2(%p): glGetUniformBlockIndex(program:%u uniformBlockName:%p(%u) )", stream, var_program, (const GLchar*)(inptr_uniformBlockName.get()), size_uniformBlockName);
5089 			*(GLuint *)(&tmpBuf[0]) = 			this->glGetUniformBlockIndex_dec(this, var_program, (const GLchar*)(inptr_uniformBlockName.get()));
5090 			if (useChecksum) {
5091 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
5092 			}
5093 			stream->flush();
5094 			SET_LASTCALL("glGetUniformBlockIndex");
5095 			android::base::endTrace();
5096 			break;
5097 		}
5098 		case OP_glGetUniformIndices: {
5099 			android::base::beginTrace("glGetUniformIndices decode");
5100 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
5101 			GLsizei var_uniformCount = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
5102 			uint32_t size_uniformNames __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
5103 			InputBuffer inptr_uniformNames(ptr + 8 + 4 + 4 + 4, size_uniformNames);
5104 			uint32_t size_uniformIndices __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_uniformNames);
5105 			InputBuffer inptr_uniformIndices(ptr + 8 + 4 + 4 + 4 + size_uniformNames + 4, size_uniformIndices);
5106 			if (useChecksum) {
5107 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_uniformNames + 4 + size_uniformIndices, ptr + 8 + 4 + 4 + 4 + size_uniformNames + 4 + size_uniformIndices, checksumSize,
5108 					"gles2_decoder_context_t::decode, OP_glGetUniformIndices: GL checksumCalculator failure\n");
5109 			}
5110 			#ifdef CHECK_GL_ERRORS
5111 			GLint err = this->glGetError();
5112 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetUniformIndices\n", err);
5113 			#endif
5114 			DECODER_DEBUG_LOG("gles2(%p): glGetUniformIndices(program:%u uniformCount:%d uniformNames:%p(%u) uniformIndices:%p(%u) )", stream, var_program, var_uniformCount, (const GLchar**)(inptr_uniformNames.get()), size_uniformNames, (GLuint*)(inptr_uniformIndices.get()), size_uniformIndices);
5115 			this->glGetUniformIndices(var_program, var_uniformCount, (const GLchar**)(inptr_uniformNames.get()), (GLuint*)(inptr_uniformIndices.get()));
5116 			SET_LASTCALL("glGetUniformIndices");
5117 			android::base::endTrace();
5118 			break;
5119 		}
5120 		case OP_glGetUniformIndicesAEMU: {
5121 			android::base::beginTrace("glGetUniformIndicesAEMU decode");
5122 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
5123 			GLsizei var_uniformCount = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
5124 			uint32_t size_packedUniformNames __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
5125 			InputBuffer inptr_packedUniformNames(ptr + 8 + 4 + 4 + 4, size_packedUniformNames);
5126 			GLsizei var_packedLen = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_packedUniformNames);
5127 			uint32_t size_uniformIndices __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_packedUniformNames + 4);
5128 			if (useChecksum) {
5129 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_packedUniformNames + 4 + 4, ptr + 8 + 4 + 4 + 4 + size_packedUniformNames + 4 + 4, checksumSize,
5130 					"gles2_decoder_context_t::decode, OP_glGetUniformIndicesAEMU: GL checksumCalculator failure\n");
5131 			}
5132 			size_t totalTmpSize = size_uniformIndices;
5133 			totalTmpSize += checksumSize;
5134 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
5135 			OutputBuffer outptr_uniformIndices(&tmpBuf[0], size_uniformIndices);
5136 			#ifdef CHECK_GL_ERRORS
5137 			GLint err = this->glGetError();
5138 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetUniformIndicesAEMU\n", err);
5139 			#endif
5140 			DECODER_DEBUG_LOG("gles2(%p): glGetUniformIndicesAEMU(program:%u uniformCount:%d packedUniformNames:%p(%u) packedLen:%d uniformIndices:%p(%u) )", stream, var_program, var_uniformCount, (const GLchar*)(inptr_packedUniformNames.get()), size_packedUniformNames, var_packedLen, (GLuint*)(outptr_uniformIndices.get()), size_uniformIndices);
5141 			this->glGetUniformIndicesAEMU(this, var_program, var_uniformCount, (const GLchar*)(inptr_packedUniformNames.get()), var_packedLen, (GLuint*)(outptr_uniformIndices.get()));
5142 			outptr_uniformIndices.flush();
5143 			if (useChecksum) {
5144 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
5145 			}
5146 			stream->flush();
5147 			SET_LASTCALL("glGetUniformIndicesAEMU");
5148 			android::base::endTrace();
5149 			break;
5150 		}
5151 		case OP_glGetActiveUniformBlockiv: {
5152 			android::base::beginTrace("glGetActiveUniformBlockiv decode");
5153 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
5154 			GLuint var_uniformBlockIndex = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
5155 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
5156 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
5157 			if (useChecksum) {
5158 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
5159 					"gles2_decoder_context_t::decode, OP_glGetActiveUniformBlockiv: GL checksumCalculator failure\n");
5160 			}
5161 			size_t totalTmpSize = size_params;
5162 			totalTmpSize += checksumSize;
5163 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
5164 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
5165 			#ifdef CHECK_GL_ERRORS
5166 			GLint err = this->glGetError();
5167 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetActiveUniformBlockiv\n", err);
5168 			#endif
5169 			DECODER_DEBUG_LOG("gles2(%p): glGetActiveUniformBlockiv(program:%u uniformBlockIndex:%u pname:0x%08x params:%p(%u) )", stream, var_program, var_uniformBlockIndex, var_pname, (GLint*)(outptr_params.get()), size_params);
5170 			this->glGetActiveUniformBlockiv_dec(this, var_program, var_uniformBlockIndex, var_pname, (GLint*)(outptr_params.get()));
5171 			outptr_params.flush();
5172 			if (useChecksum) {
5173 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
5174 			}
5175 			stream->flush();
5176 			SET_LASTCALL("glGetActiveUniformBlockiv");
5177 			android::base::endTrace();
5178 			break;
5179 		}
5180 		case OP_glGetActiveUniformBlockName: {
5181 			android::base::beginTrace("glGetActiveUniformBlockName decode");
5182 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
5183 			GLuint var_uniformBlockIndex = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
5184 			GLsizei var_bufSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
5185 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
5186 			uint32_t size_uniformBlockName __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
5187 			if (useChecksum) {
5188 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
5189 					"gles2_decoder_context_t::decode, OP_glGetActiveUniformBlockName: GL checksumCalculator failure\n");
5190 			}
5191 			size_t totalTmpSize = size_length;
5192 			totalTmpSize += size_uniformBlockName;
5193 			totalTmpSize += checksumSize;
5194 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
5195 			OutputBuffer outptr_length(&tmpBuf[0], size_length);
5196 			OutputBuffer outptr_uniformBlockName(&tmpBuf[0 + size_length], size_uniformBlockName);
5197 			#ifdef CHECK_GL_ERRORS
5198 			GLint err = this->glGetError();
5199 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetActiveUniformBlockName\n", err);
5200 			#endif
5201 			DECODER_DEBUG_LOG("gles2(%p): glGetActiveUniformBlockName(program:%u uniformBlockIndex:%u bufSize:%d length:%p(%u) uniformBlockName:%p(%u) )", stream, var_program, var_uniformBlockIndex, var_bufSize, (GLsizei*)(outptr_length.get()), size_length, (GLchar*)(outptr_uniformBlockName.get()), size_uniformBlockName);
5202 			this->glGetActiveUniformBlockName_dec(this, var_program, var_uniformBlockIndex, var_bufSize, size_length == 0 ? nullptr : (GLsizei*)(outptr_length.get()), size_uniformBlockName == 0 ? nullptr : (GLchar*)(outptr_uniformBlockName.get()));
5203 			outptr_length.flush();
5204 			outptr_uniformBlockName.flush();
5205 			if (useChecksum) {
5206 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
5207 			}
5208 			stream->flush();
5209 			SET_LASTCALL("glGetActiveUniformBlockName");
5210 			android::base::endTrace();
5211 			break;
5212 		}
5213 		case OP_glUniform1ui: {
5214 			android::base::beginTrace("glUniform1ui decode");
5215 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
5216 			GLuint var_v0 = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
5217 			if (useChecksum) {
5218 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
5219 					"gles2_decoder_context_t::decode, OP_glUniform1ui: GL checksumCalculator failure\n");
5220 			}
5221 			#ifdef CHECK_GL_ERRORS
5222 			GLint err = this->glGetError();
5223 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform1ui\n", err);
5224 			#endif
5225 			DECODER_DEBUG_LOG("gles2(%p): glUniform1ui(location:%d v0:%u )", stream, var_location, var_v0);
5226 			this->glUniform1ui(var_location, var_v0);
5227 			SET_LASTCALL("glUniform1ui");
5228 			android::base::endTrace();
5229 			break;
5230 		}
5231 		case OP_glUniform2ui: {
5232 			android::base::beginTrace("glUniform2ui decode");
5233 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
5234 			GLuint var_v0 = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
5235 			GLuint var_v1 = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
5236 			if (useChecksum) {
5237 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
5238 					"gles2_decoder_context_t::decode, OP_glUniform2ui: GL checksumCalculator failure\n");
5239 			}
5240 			#ifdef CHECK_GL_ERRORS
5241 			GLint err = this->glGetError();
5242 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform2ui\n", err);
5243 			#endif
5244 			DECODER_DEBUG_LOG("gles2(%p): glUniform2ui(location:%d v0:%u v1:%u )", stream, var_location, var_v0, var_v1);
5245 			this->glUniform2ui(var_location, var_v0, var_v1);
5246 			SET_LASTCALL("glUniform2ui");
5247 			android::base::endTrace();
5248 			break;
5249 		}
5250 		case OP_glUniform3ui: {
5251 			android::base::beginTrace("glUniform3ui decode");
5252 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
5253 			GLuint var_v0 = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
5254 			GLuint var_v1 = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
5255 			GLuint var_v2 = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4);
5256 			if (useChecksum) {
5257 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
5258 					"gles2_decoder_context_t::decode, OP_glUniform3ui: GL checksumCalculator failure\n");
5259 			}
5260 			#ifdef CHECK_GL_ERRORS
5261 			GLint err = this->glGetError();
5262 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform3ui\n", err);
5263 			#endif
5264 			DECODER_DEBUG_LOG("gles2(%p): glUniform3ui(location:%d v0:%u v1:%u v2:%u )", stream, var_location, var_v0, var_v1, var_v2);
5265 			this->glUniform3ui(var_location, var_v0, var_v1, var_v2);
5266 			SET_LASTCALL("glUniform3ui");
5267 			android::base::endTrace();
5268 			break;
5269 		}
5270 		case OP_glUniform4ui: {
5271 			android::base::beginTrace("glUniform4ui decode");
5272 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
5273 			GLint var_v0 = Unpack<GLint,uint32_t>(ptr + 8 + 4);
5274 			GLuint var_v1 = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
5275 			GLuint var_v2 = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4);
5276 			GLuint var_v3 = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
5277 			if (useChecksum) {
5278 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
5279 					"gles2_decoder_context_t::decode, OP_glUniform4ui: GL checksumCalculator failure\n");
5280 			}
5281 			#ifdef CHECK_GL_ERRORS
5282 			GLint err = this->glGetError();
5283 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform4ui\n", err);
5284 			#endif
5285 			DECODER_DEBUG_LOG("gles2(%p): glUniform4ui(location:%d v0:%d v1:%u v2:%u v3:%u )", stream, var_location, var_v0, var_v1, var_v2, var_v3);
5286 			this->glUniform4ui(var_location, var_v0, var_v1, var_v2, var_v3);
5287 			SET_LASTCALL("glUniform4ui");
5288 			android::base::endTrace();
5289 			break;
5290 		}
5291 		case OP_glUniform1uiv: {
5292 			android::base::beginTrace("glUniform1uiv decode");
5293 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
5294 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
5295 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
5296 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4, size_value);
5297 			if (useChecksum) {
5298 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + size_value, checksumSize,
5299 					"gles2_decoder_context_t::decode, OP_glUniform1uiv: GL checksumCalculator failure\n");
5300 			}
5301 			#ifdef CHECK_GL_ERRORS
5302 			GLint err = this->glGetError();
5303 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform1uiv\n", err);
5304 			#endif
5305 			DECODER_DEBUG_LOG("gles2(%p): glUniform1uiv(location:%d count:%d value:%p(%u) )", stream, var_location, var_count, (const GLuint*)(inptr_value.get()), size_value);
5306 			this->glUniform1uiv(var_location, var_count, (const GLuint*)(inptr_value.get()));
5307 			SET_LASTCALL("glUniform1uiv");
5308 			android::base::endTrace();
5309 			break;
5310 		}
5311 		case OP_glUniform2uiv: {
5312 			android::base::beginTrace("glUniform2uiv decode");
5313 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
5314 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
5315 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
5316 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4, size_value);
5317 			if (useChecksum) {
5318 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + size_value, checksumSize,
5319 					"gles2_decoder_context_t::decode, OP_glUniform2uiv: GL checksumCalculator failure\n");
5320 			}
5321 			#ifdef CHECK_GL_ERRORS
5322 			GLint err = this->glGetError();
5323 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform2uiv\n", err);
5324 			#endif
5325 			DECODER_DEBUG_LOG("gles2(%p): glUniform2uiv(location:%d count:%d value:%p(%u) )", stream, var_location, var_count, (const GLuint*)(inptr_value.get()), size_value);
5326 			this->glUniform2uiv(var_location, var_count, (const GLuint*)(inptr_value.get()));
5327 			SET_LASTCALL("glUniform2uiv");
5328 			android::base::endTrace();
5329 			break;
5330 		}
5331 		case OP_glUniform3uiv: {
5332 			android::base::beginTrace("glUniform3uiv decode");
5333 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
5334 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
5335 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
5336 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4, size_value);
5337 			if (useChecksum) {
5338 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + size_value, checksumSize,
5339 					"gles2_decoder_context_t::decode, OP_glUniform3uiv: GL checksumCalculator failure\n");
5340 			}
5341 			#ifdef CHECK_GL_ERRORS
5342 			GLint err = this->glGetError();
5343 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform3uiv\n", err);
5344 			#endif
5345 			DECODER_DEBUG_LOG("gles2(%p): glUniform3uiv(location:%d count:%d value:%p(%u) )", stream, var_location, var_count, (const GLuint*)(inptr_value.get()), size_value);
5346 			this->glUniform3uiv(var_location, var_count, (const GLuint*)(inptr_value.get()));
5347 			SET_LASTCALL("glUniform3uiv");
5348 			android::base::endTrace();
5349 			break;
5350 		}
5351 		case OP_glUniform4uiv: {
5352 			android::base::beginTrace("glUniform4uiv decode");
5353 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
5354 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
5355 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
5356 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4, size_value);
5357 			if (useChecksum) {
5358 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + size_value, checksumSize,
5359 					"gles2_decoder_context_t::decode, OP_glUniform4uiv: GL checksumCalculator failure\n");
5360 			}
5361 			#ifdef CHECK_GL_ERRORS
5362 			GLint err = this->glGetError();
5363 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniform4uiv\n", err);
5364 			#endif
5365 			DECODER_DEBUG_LOG("gles2(%p): glUniform4uiv(location:%d count:%d value:%p(%u) )", stream, var_location, var_count, (const GLuint*)(inptr_value.get()), size_value);
5366 			this->glUniform4uiv(var_location, var_count, (const GLuint*)(inptr_value.get()));
5367 			SET_LASTCALL("glUniform4uiv");
5368 			android::base::endTrace();
5369 			break;
5370 		}
5371 		case OP_glUniformMatrix2x3fv: {
5372 			android::base::beginTrace("glUniformMatrix2x3fv decode");
5373 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
5374 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
5375 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4);
5376 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 1);
5377 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 1 + 4, size_value);
5378 			if (useChecksum) {
5379 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 1 + 4 + size_value, checksumSize,
5380 					"gles2_decoder_context_t::decode, OP_glUniformMatrix2x3fv: GL checksumCalculator failure\n");
5381 			}
5382 			#ifdef CHECK_GL_ERRORS
5383 			GLint err = this->glGetError();
5384 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniformMatrix2x3fv\n", err);
5385 			#endif
5386 			DECODER_DEBUG_LOG("gles2(%p): glUniformMatrix2x3fv(location:%d count:%d transpose:%d value:%p(%u) )", stream, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
5387 			this->glUniformMatrix2x3fv(var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
5388 			SET_LASTCALL("glUniformMatrix2x3fv");
5389 			android::base::endTrace();
5390 			break;
5391 		}
5392 		case OP_glUniformMatrix3x2fv: {
5393 			android::base::beginTrace("glUniformMatrix3x2fv decode");
5394 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
5395 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
5396 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4);
5397 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 1);
5398 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 1 + 4, size_value);
5399 			if (useChecksum) {
5400 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 1 + 4 + size_value, checksumSize,
5401 					"gles2_decoder_context_t::decode, OP_glUniformMatrix3x2fv: GL checksumCalculator failure\n");
5402 			}
5403 			#ifdef CHECK_GL_ERRORS
5404 			GLint err = this->glGetError();
5405 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniformMatrix3x2fv\n", err);
5406 			#endif
5407 			DECODER_DEBUG_LOG("gles2(%p): glUniformMatrix3x2fv(location:%d count:%d transpose:%d value:%p(%u) )", stream, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
5408 			this->glUniformMatrix3x2fv(var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
5409 			SET_LASTCALL("glUniformMatrix3x2fv");
5410 			android::base::endTrace();
5411 			break;
5412 		}
5413 		case OP_glUniformMatrix2x4fv: {
5414 			android::base::beginTrace("glUniformMatrix2x4fv decode");
5415 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
5416 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
5417 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4);
5418 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 1);
5419 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 1 + 4, size_value);
5420 			if (useChecksum) {
5421 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 1 + 4 + size_value, checksumSize,
5422 					"gles2_decoder_context_t::decode, OP_glUniformMatrix2x4fv: GL checksumCalculator failure\n");
5423 			}
5424 			#ifdef CHECK_GL_ERRORS
5425 			GLint err = this->glGetError();
5426 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniformMatrix2x4fv\n", err);
5427 			#endif
5428 			DECODER_DEBUG_LOG("gles2(%p): glUniformMatrix2x4fv(location:%d count:%d transpose:%d value:%p(%u) )", stream, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
5429 			this->glUniformMatrix2x4fv(var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
5430 			SET_LASTCALL("glUniformMatrix2x4fv");
5431 			android::base::endTrace();
5432 			break;
5433 		}
5434 		case OP_glUniformMatrix4x2fv: {
5435 			android::base::beginTrace("glUniformMatrix4x2fv decode");
5436 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
5437 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
5438 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4);
5439 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 1);
5440 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 1 + 4, size_value);
5441 			if (useChecksum) {
5442 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 1 + 4 + size_value, checksumSize,
5443 					"gles2_decoder_context_t::decode, OP_glUniformMatrix4x2fv: GL checksumCalculator failure\n");
5444 			}
5445 			#ifdef CHECK_GL_ERRORS
5446 			GLint err = this->glGetError();
5447 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniformMatrix4x2fv\n", err);
5448 			#endif
5449 			DECODER_DEBUG_LOG("gles2(%p): glUniformMatrix4x2fv(location:%d count:%d transpose:%d value:%p(%u) )", stream, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
5450 			this->glUniformMatrix4x2fv(var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
5451 			SET_LASTCALL("glUniformMatrix4x2fv");
5452 			android::base::endTrace();
5453 			break;
5454 		}
5455 		case OP_glUniformMatrix3x4fv: {
5456 			android::base::beginTrace("glUniformMatrix3x4fv decode");
5457 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
5458 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
5459 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4);
5460 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 1);
5461 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 1 + 4, size_value);
5462 			if (useChecksum) {
5463 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 1 + 4 + size_value, checksumSize,
5464 					"gles2_decoder_context_t::decode, OP_glUniformMatrix3x4fv: GL checksumCalculator failure\n");
5465 			}
5466 			#ifdef CHECK_GL_ERRORS
5467 			GLint err = this->glGetError();
5468 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniformMatrix3x4fv\n", err);
5469 			#endif
5470 			DECODER_DEBUG_LOG("gles2(%p): glUniformMatrix3x4fv(location:%d count:%d transpose:%d value:%p(%u) )", stream, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
5471 			this->glUniformMatrix3x4fv(var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
5472 			SET_LASTCALL("glUniformMatrix3x4fv");
5473 			android::base::endTrace();
5474 			break;
5475 		}
5476 		case OP_glUniformMatrix4x3fv: {
5477 			android::base::beginTrace("glUniformMatrix4x3fv decode");
5478 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8);
5479 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
5480 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4);
5481 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 1);
5482 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 1 + 4, size_value);
5483 			if (useChecksum) {
5484 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 1 + 4 + size_value, checksumSize,
5485 					"gles2_decoder_context_t::decode, OP_glUniformMatrix4x3fv: GL checksumCalculator failure\n");
5486 			}
5487 			#ifdef CHECK_GL_ERRORS
5488 			GLint err = this->glGetError();
5489 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUniformMatrix4x3fv\n", err);
5490 			#endif
5491 			DECODER_DEBUG_LOG("gles2(%p): glUniformMatrix4x3fv(location:%d count:%d transpose:%d value:%p(%u) )", stream, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
5492 			this->glUniformMatrix4x3fv(var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
5493 			SET_LASTCALL("glUniformMatrix4x3fv");
5494 			android::base::endTrace();
5495 			break;
5496 		}
5497 		case OP_glGetUniformuiv: {
5498 			android::base::beginTrace("glGetUniformuiv decode");
5499 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
5500 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
5501 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
5502 			if (useChecksum) {
5503 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
5504 					"gles2_decoder_context_t::decode, OP_glGetUniformuiv: GL checksumCalculator failure\n");
5505 			}
5506 			size_t totalTmpSize = size_params;
5507 			totalTmpSize += checksumSize;
5508 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
5509 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
5510 			#ifdef CHECK_GL_ERRORS
5511 			GLint err = this->glGetError();
5512 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetUniformuiv\n", err);
5513 			#endif
5514 			DECODER_DEBUG_LOG("gles2(%p): glGetUniformuiv(program:%u location:%d params:%p(%u) )", stream, var_program, var_location, (GLuint*)(outptr_params.get()), size_params);
5515 			this->glGetUniformuiv_dec(this, var_program, var_location, (GLuint*)(outptr_params.get()));
5516 			outptr_params.flush();
5517 			if (useChecksum) {
5518 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
5519 			}
5520 			stream->flush();
5521 			SET_LASTCALL("glGetUniformuiv");
5522 			android::base::endTrace();
5523 			break;
5524 		}
5525 		case OP_glGetActiveUniformsiv: {
5526 			android::base::beginTrace("glGetActiveUniformsiv decode");
5527 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
5528 			GLsizei var_uniformCount = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
5529 			uint32_t size_uniformIndices __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
5530 			InputBuffer inptr_uniformIndices(ptr + 8 + 4 + 4 + 4, size_uniformIndices);
5531 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_uniformIndices);
5532 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_uniformIndices + 4);
5533 			if (useChecksum) {
5534 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_uniformIndices + 4 + 4, ptr + 8 + 4 + 4 + 4 + size_uniformIndices + 4 + 4, checksumSize,
5535 					"gles2_decoder_context_t::decode, OP_glGetActiveUniformsiv: GL checksumCalculator failure\n");
5536 			}
5537 			size_t totalTmpSize = size_params;
5538 			totalTmpSize += checksumSize;
5539 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
5540 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
5541 			#ifdef CHECK_GL_ERRORS
5542 			GLint err = this->glGetError();
5543 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetActiveUniformsiv\n", err);
5544 			#endif
5545 			DECODER_DEBUG_LOG("gles2(%p): glGetActiveUniformsiv(program:%u uniformCount:%d uniformIndices:%p(%u) pname:0x%08x params:%p(%u) )", stream, var_program, var_uniformCount, (const GLuint*)(inptr_uniformIndices.get()), size_uniformIndices, var_pname, (GLint*)(outptr_params.get()), size_params);
5546 			this->glGetActiveUniformsiv_dec(this, var_program, var_uniformCount, (const GLuint*)(inptr_uniformIndices.get()), var_pname, (GLint*)(outptr_params.get()));
5547 			outptr_params.flush();
5548 			if (useChecksum) {
5549 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
5550 			}
5551 			stream->flush();
5552 			SET_LASTCALL("glGetActiveUniformsiv");
5553 			android::base::endTrace();
5554 			break;
5555 		}
5556 		case OP_glVertexAttribI4i: {
5557 			android::base::beginTrace("glVertexAttribI4i decode");
5558 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
5559 			GLint var_v0 = Unpack<GLint,uint32_t>(ptr + 8 + 4);
5560 			GLint var_v1 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
5561 			GLint var_v2 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
5562 			GLint var_v3 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
5563 			if (useChecksum) {
5564 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
5565 					"gles2_decoder_context_t::decode, OP_glVertexAttribI4i: GL checksumCalculator failure\n");
5566 			}
5567 			#ifdef CHECK_GL_ERRORS
5568 			GLint err = this->glGetError();
5569 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttribI4i\n", err);
5570 			#endif
5571 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttribI4i(index:%u v0:%d v1:%d v2:%d v3:%d )", stream, var_index, var_v0, var_v1, var_v2, var_v3);
5572 			this->glVertexAttribI4i(var_index, var_v0, var_v1, var_v2, var_v3);
5573 			SET_LASTCALL("glVertexAttribI4i");
5574 			android::base::endTrace();
5575 			break;
5576 		}
5577 		case OP_glVertexAttribI4ui: {
5578 			android::base::beginTrace("glVertexAttribI4ui decode");
5579 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
5580 			GLuint var_v0 = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
5581 			GLuint var_v1 = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
5582 			GLuint var_v2 = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4);
5583 			GLuint var_v3 = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
5584 			if (useChecksum) {
5585 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
5586 					"gles2_decoder_context_t::decode, OP_glVertexAttribI4ui: GL checksumCalculator failure\n");
5587 			}
5588 			#ifdef CHECK_GL_ERRORS
5589 			GLint err = this->glGetError();
5590 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttribI4ui\n", err);
5591 			#endif
5592 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttribI4ui(index:%u v0:%u v1:%u v2:%u v3:%u )", stream, var_index, var_v0, var_v1, var_v2, var_v3);
5593 			this->glVertexAttribI4ui(var_index, var_v0, var_v1, var_v2, var_v3);
5594 			SET_LASTCALL("glVertexAttribI4ui");
5595 			android::base::endTrace();
5596 			break;
5597 		}
5598 		case OP_glVertexAttribI4iv: {
5599 			android::base::beginTrace("glVertexAttribI4iv decode");
5600 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
5601 			uint32_t size_v __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
5602 			InputBuffer inptr_v(ptr + 8 + 4 + 4, size_v);
5603 			if (useChecksum) {
5604 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_v, ptr + 8 + 4 + 4 + size_v, checksumSize,
5605 					"gles2_decoder_context_t::decode, OP_glVertexAttribI4iv: GL checksumCalculator failure\n");
5606 			}
5607 			#ifdef CHECK_GL_ERRORS
5608 			GLint err = this->glGetError();
5609 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttribI4iv\n", err);
5610 			#endif
5611 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttribI4iv(index:%u v:%p(%u) )", stream, var_index, (const GLint*)(inptr_v.get()), size_v);
5612 			this->glVertexAttribI4iv(var_index, (const GLint*)(inptr_v.get()));
5613 			SET_LASTCALL("glVertexAttribI4iv");
5614 			android::base::endTrace();
5615 			break;
5616 		}
5617 		case OP_glVertexAttribI4uiv: {
5618 			android::base::beginTrace("glVertexAttribI4uiv decode");
5619 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
5620 			uint32_t size_v __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
5621 			InputBuffer inptr_v(ptr + 8 + 4 + 4, size_v);
5622 			if (useChecksum) {
5623 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_v, ptr + 8 + 4 + 4 + size_v, checksumSize,
5624 					"gles2_decoder_context_t::decode, OP_glVertexAttribI4uiv: GL checksumCalculator failure\n");
5625 			}
5626 			#ifdef CHECK_GL_ERRORS
5627 			GLint err = this->glGetError();
5628 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttribI4uiv\n", err);
5629 			#endif
5630 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttribI4uiv(index:%u v:%p(%u) )", stream, var_index, (const GLuint*)(inptr_v.get()), size_v);
5631 			this->glVertexAttribI4uiv(var_index, (const GLuint*)(inptr_v.get()));
5632 			SET_LASTCALL("glVertexAttribI4uiv");
5633 			android::base::endTrace();
5634 			break;
5635 		}
5636 		case OP_glVertexAttribIPointer: {
5637 			android::base::beginTrace("glVertexAttribIPointer decode");
5638 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
5639 			GLint var_size = Unpack<GLint,uint32_t>(ptr + 8 + 4);
5640 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
5641 			GLsizei var_stride = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
5642 			uint32_t size_pointer __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
5643 			InputBuffer inptr_pointer(ptr + 8 + 4 + 4 + 4 + 4 + 4, size_pointer);
5644 			if (useChecksum) {
5645 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + size_pointer, ptr + 8 + 4 + 4 + 4 + 4 + 4 + size_pointer, checksumSize,
5646 					"gles2_decoder_context_t::decode, OP_glVertexAttribIPointer: GL checksumCalculator failure\n");
5647 			}
5648 			#ifdef CHECK_GL_ERRORS
5649 			GLint err = this->glGetError();
5650 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttribIPointer\n", err);
5651 			#endif
5652 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttribIPointer(index:%u size:%d type:0x%08x stride:%d pointer:%p(%u) )", stream, var_index, var_size, var_type, var_stride, (const GLvoid*)(inptr_pointer.get()), size_pointer);
5653 			this->glVertexAttribIPointer(var_index, var_size, var_type, var_stride, (const GLvoid*)(inptr_pointer.get()));
5654 			SET_LASTCALL("glVertexAttribIPointer");
5655 			android::base::endTrace();
5656 			break;
5657 		}
5658 		case OP_glVertexAttribIPointerOffsetAEMU: {
5659 			android::base::beginTrace("glVertexAttribIPointerOffsetAEMU decode");
5660 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
5661 			GLint var_size = Unpack<GLint,uint32_t>(ptr + 8 + 4);
5662 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
5663 			GLsizei var_stride = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
5664 			GLuint var_offset = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
5665 			if (useChecksum) {
5666 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
5667 					"gles2_decoder_context_t::decode, OP_glVertexAttribIPointerOffsetAEMU: GL checksumCalculator failure\n");
5668 			}
5669 			#ifdef CHECK_GL_ERRORS
5670 			GLint err = this->glGetError();
5671 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttribIPointerOffsetAEMU\n", err);
5672 			#endif
5673 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttribIPointerOffsetAEMU(index:%u size:%d type:0x%08x stride:%d offset:%u )", stream, var_index, var_size, var_type, var_stride, var_offset);
5674 			this->glVertexAttribIPointerOffsetAEMU(this, var_index, var_size, var_type, var_stride, var_offset);
5675 			SET_LASTCALL("glVertexAttribIPointerOffsetAEMU");
5676 			android::base::endTrace();
5677 			break;
5678 		}
5679 		case OP_glVertexAttribIPointerDataAEMU: {
5680 			android::base::beginTrace("glVertexAttribIPointerDataAEMU decode");
5681 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
5682 			GLint var_size = Unpack<GLint,uint32_t>(ptr + 8 + 4);
5683 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
5684 			GLsizei var_stride = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
5685 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
5686 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4 + 4 + 4, size_data);
5687 			GLuint var_datalen = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + size_data);
5688 			if (useChecksum) {
5689 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + size_data + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + size_data + 4, checksumSize,
5690 					"gles2_decoder_context_t::decode, OP_glVertexAttribIPointerDataAEMU: GL checksumCalculator failure\n");
5691 			}
5692 			#ifdef CHECK_GL_ERRORS
5693 			GLint err = this->glGetError();
5694 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttribIPointerDataAEMU\n", err);
5695 			#endif
5696 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttribIPointerDataAEMU(index:%u size:%d type:0x%08x stride:%d data:%p(%u) datalen:%u )", stream, var_index, var_size, var_type, var_stride, (void*)(inptr_data.get()), size_data, var_datalen);
5697 			this->glVertexAttribIPointerDataAEMU(this, var_index, var_size, var_type, var_stride, (void*)(inptr_data.get()), var_datalen);
5698 			SET_LASTCALL("glVertexAttribIPointerDataAEMU");
5699 			android::base::endTrace();
5700 			break;
5701 		}
5702 		case OP_glGetVertexAttribIiv: {
5703 			android::base::beginTrace("glGetVertexAttribIiv decode");
5704 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
5705 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
5706 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
5707 			if (useChecksum) {
5708 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
5709 					"gles2_decoder_context_t::decode, OP_glGetVertexAttribIiv: GL checksumCalculator failure\n");
5710 			}
5711 			size_t totalTmpSize = size_params;
5712 			totalTmpSize += checksumSize;
5713 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
5714 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
5715 			#ifdef CHECK_GL_ERRORS
5716 			GLint err = this->glGetError();
5717 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetVertexAttribIiv\n", err);
5718 			#endif
5719 			DECODER_DEBUG_LOG("gles2(%p): glGetVertexAttribIiv(index:%u pname:0x%08x params:%p(%u) )", stream, var_index, var_pname, (GLint*)(outptr_params.get()), size_params);
5720 			this->glGetVertexAttribIiv(var_index, var_pname, (GLint*)(outptr_params.get()));
5721 			outptr_params.flush();
5722 			if (useChecksum) {
5723 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
5724 			}
5725 			stream->flush();
5726 			SET_LASTCALL("glGetVertexAttribIiv");
5727 			android::base::endTrace();
5728 			break;
5729 		}
5730 		case OP_glGetVertexAttribIuiv: {
5731 			android::base::beginTrace("glGetVertexAttribIuiv decode");
5732 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
5733 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
5734 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
5735 			if (useChecksum) {
5736 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
5737 					"gles2_decoder_context_t::decode, OP_glGetVertexAttribIuiv: GL checksumCalculator failure\n");
5738 			}
5739 			size_t totalTmpSize = size_params;
5740 			totalTmpSize += checksumSize;
5741 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
5742 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
5743 			#ifdef CHECK_GL_ERRORS
5744 			GLint err = this->glGetError();
5745 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetVertexAttribIuiv\n", err);
5746 			#endif
5747 			DECODER_DEBUG_LOG("gles2(%p): glGetVertexAttribIuiv(index:%u pname:0x%08x params:%p(%u) )", stream, var_index, var_pname, (GLuint*)(outptr_params.get()), size_params);
5748 			this->glGetVertexAttribIuiv(var_index, var_pname, (GLuint*)(outptr_params.get()));
5749 			outptr_params.flush();
5750 			if (useChecksum) {
5751 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
5752 			}
5753 			stream->flush();
5754 			SET_LASTCALL("glGetVertexAttribIuiv");
5755 			android::base::endTrace();
5756 			break;
5757 		}
5758 		case OP_glVertexAttribDivisor: {
5759 			android::base::beginTrace("glVertexAttribDivisor decode");
5760 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
5761 			GLuint var_divisor = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
5762 			if (useChecksum) {
5763 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
5764 					"gles2_decoder_context_t::decode, OP_glVertexAttribDivisor: GL checksumCalculator failure\n");
5765 			}
5766 			#ifdef CHECK_GL_ERRORS
5767 			GLint err = this->glGetError();
5768 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttribDivisor\n", err);
5769 			#endif
5770 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttribDivisor(index:%u divisor:%u )", stream, var_index, var_divisor);
5771 			this->glVertexAttribDivisor(var_index, var_divisor);
5772 			SET_LASTCALL("glVertexAttribDivisor");
5773 			android::base::endTrace();
5774 			break;
5775 		}
5776 		case OP_glDrawArraysInstanced: {
5777 			android::base::beginTrace("glDrawArraysInstanced decode");
5778 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
5779 			GLint var_first = Unpack<GLint,uint32_t>(ptr + 8 + 4);
5780 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
5781 			GLsizei var_primcount = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
5782 			if (useChecksum) {
5783 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
5784 					"gles2_decoder_context_t::decode, OP_glDrawArraysInstanced: GL checksumCalculator failure\n");
5785 			}
5786 			#ifdef CHECK_GL_ERRORS
5787 			GLint err = this->glGetError();
5788 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawArraysInstanced\n", err);
5789 			#endif
5790 			DECODER_DEBUG_LOG("gles2(%p): glDrawArraysInstanced(mode:0x%08x first:%d count:%d primcount:%d )", stream, var_mode, var_first, var_count, var_primcount);
5791 			this->glDrawArraysInstanced(var_mode, var_first, var_count, var_primcount);
5792 			SET_LASTCALL("glDrawArraysInstanced");
5793 			android::base::endTrace();
5794 			break;
5795 		}
5796 		case OP_glDrawElementsInstanced: {
5797 			android::base::beginTrace("glDrawElementsInstanced decode");
5798 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
5799 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
5800 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
5801 			uint32_t size_indices __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
5802 			InputBuffer inptr_indices(ptr + 8 + 4 + 4 + 4 + 4, size_indices);
5803 			GLsizei var_primcount = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + size_indices);
5804 			if (useChecksum) {
5805 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_indices + 4, ptr + 8 + 4 + 4 + 4 + 4 + size_indices + 4, checksumSize,
5806 					"gles2_decoder_context_t::decode, OP_glDrawElementsInstanced: GL checksumCalculator failure\n");
5807 			}
5808 			#ifdef CHECK_GL_ERRORS
5809 			GLint err = this->glGetError();
5810 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawElementsInstanced\n", err);
5811 			#endif
5812 			DECODER_DEBUG_LOG("gles2(%p): glDrawElementsInstanced(mode:0x%08x count:%d type:0x%08x indices:%p(%u) primcount:%d )", stream, var_mode, var_count, var_type, (const void*)(inptr_indices.get()), size_indices, var_primcount);
5813 			this->glDrawElementsInstanced(var_mode, var_count, var_type, (const void*)(inptr_indices.get()), var_primcount);
5814 			SET_LASTCALL("glDrawElementsInstanced");
5815 			android::base::endTrace();
5816 			break;
5817 		}
5818 		case OP_glDrawElementsInstancedDataAEMU: {
5819 			android::base::beginTrace("glDrawElementsInstancedDataAEMU decode");
5820 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
5821 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
5822 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
5823 			uint32_t size_indices __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
5824 			InputBuffer inptr_indices(ptr + 8 + 4 + 4 + 4 + 4, size_indices);
5825 			GLsizei var_primcount = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + size_indices);
5826 			GLsizei var_datalen = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + size_indices + 4);
5827 			if (useChecksum) {
5828 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_indices + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + size_indices + 4 + 4, checksumSize,
5829 					"gles2_decoder_context_t::decode, OP_glDrawElementsInstancedDataAEMU: GL checksumCalculator failure\n");
5830 			}
5831 			#ifdef CHECK_GL_ERRORS
5832 			GLint err = this->glGetError();
5833 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawElementsInstancedDataAEMU\n", err);
5834 			#endif
5835 			DECODER_DEBUG_LOG("gles2(%p): glDrawElementsInstancedDataAEMU(mode:0x%08x count:%d type:0x%08x indices:%p(%u) primcount:%d datalen:%d )", stream, var_mode, var_count, var_type, (const void*)(inptr_indices.get()), size_indices, var_primcount, var_datalen);
5836 			this->glDrawElementsInstancedDataAEMU(this, var_mode, var_count, var_type, (const void*)(inptr_indices.get()), var_primcount, var_datalen);
5837 			SET_LASTCALL("glDrawElementsInstancedDataAEMU");
5838 			android::base::endTrace();
5839 			break;
5840 		}
5841 		case OP_glDrawElementsInstancedOffsetAEMU: {
5842 			android::base::beginTrace("glDrawElementsInstancedOffsetAEMU decode");
5843 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
5844 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
5845 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
5846 			GLuint var_offset = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4);
5847 			GLsizei var_primcount = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
5848 			if (useChecksum) {
5849 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
5850 					"gles2_decoder_context_t::decode, OP_glDrawElementsInstancedOffsetAEMU: GL checksumCalculator failure\n");
5851 			}
5852 			#ifdef CHECK_GL_ERRORS
5853 			GLint err = this->glGetError();
5854 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawElementsInstancedOffsetAEMU\n", err);
5855 			#endif
5856 			DECODER_DEBUG_LOG("gles2(%p): glDrawElementsInstancedOffsetAEMU(mode:0x%08x count:%d type:0x%08x offset:%u primcount:%d )", stream, var_mode, var_count, var_type, var_offset, var_primcount);
5857 			this->glDrawElementsInstancedOffsetAEMU(this, var_mode, var_count, var_type, var_offset, var_primcount);
5858 			SET_LASTCALL("glDrawElementsInstancedOffsetAEMU");
5859 			android::base::endTrace();
5860 			break;
5861 		}
5862 		case OP_glDrawRangeElements: {
5863 			android::base::beginTrace("glDrawRangeElements decode");
5864 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
5865 			GLuint var_start = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
5866 			GLuint var_end = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
5867 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
5868 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
5869 			uint32_t size_indices __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
5870 			InputBuffer inptr_indices(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4, size_indices);
5871 			if (useChecksum) {
5872 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + size_indices, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + size_indices, checksumSize,
5873 					"gles2_decoder_context_t::decode, OP_glDrawRangeElements: GL checksumCalculator failure\n");
5874 			}
5875 			#ifdef CHECK_GL_ERRORS
5876 			GLint err = this->glGetError();
5877 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawRangeElements\n", err);
5878 			#endif
5879 			DECODER_DEBUG_LOG("gles2(%p): glDrawRangeElements(mode:0x%08x start:%u end:%u count:%d type:0x%08x indices:%p(%u) )", stream, var_mode, var_start, var_end, var_count, var_type, (const GLvoid*)(inptr_indices.get()), size_indices);
5880 			this->glDrawRangeElements(var_mode, var_start, var_end, var_count, var_type, (const GLvoid*)(inptr_indices.get()));
5881 			SET_LASTCALL("glDrawRangeElements");
5882 			android::base::endTrace();
5883 			break;
5884 		}
5885 		case OP_glDrawRangeElementsDataAEMU: {
5886 			android::base::beginTrace("glDrawRangeElementsDataAEMU decode");
5887 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
5888 			GLuint var_start = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
5889 			GLuint var_end = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
5890 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
5891 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
5892 			uint32_t size_indices __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
5893 			InputBuffer inptr_indices(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4, size_indices);
5894 			GLsizei var_datalen = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + size_indices);
5895 			if (useChecksum) {
5896 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + size_indices + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + size_indices + 4, checksumSize,
5897 					"gles2_decoder_context_t::decode, OP_glDrawRangeElementsDataAEMU: GL checksumCalculator failure\n");
5898 			}
5899 			#ifdef CHECK_GL_ERRORS
5900 			GLint err = this->glGetError();
5901 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawRangeElementsDataAEMU\n", err);
5902 			#endif
5903 			DECODER_DEBUG_LOG("gles2(%p): glDrawRangeElementsDataAEMU(mode:0x%08x start:%u end:%u count:%d type:0x%08x indices:%p(%u) datalen:%d )", stream, var_mode, var_start, var_end, var_count, var_type, (const GLvoid*)(inptr_indices.get()), size_indices, var_datalen);
5904 			this->glDrawRangeElementsDataAEMU(this, var_mode, var_start, var_end, var_count, var_type, (const GLvoid*)(inptr_indices.get()), var_datalen);
5905 			SET_LASTCALL("glDrawRangeElementsDataAEMU");
5906 			android::base::endTrace();
5907 			break;
5908 		}
5909 		case OP_glDrawRangeElementsOffsetAEMU: {
5910 			android::base::beginTrace("glDrawRangeElementsOffsetAEMU decode");
5911 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
5912 			GLuint var_start = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
5913 			GLuint var_end = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
5914 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
5915 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
5916 			GLuint var_offset = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
5917 			if (useChecksum) {
5918 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
5919 					"gles2_decoder_context_t::decode, OP_glDrawRangeElementsOffsetAEMU: GL checksumCalculator failure\n");
5920 			}
5921 			#ifdef CHECK_GL_ERRORS
5922 			GLint err = this->glGetError();
5923 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawRangeElementsOffsetAEMU\n", err);
5924 			#endif
5925 			DECODER_DEBUG_LOG("gles2(%p): glDrawRangeElementsOffsetAEMU(mode:0x%08x start:%u end:%u count:%d type:0x%08x offset:%u )", stream, var_mode, var_start, var_end, var_count, var_type, var_offset);
5926 			this->glDrawRangeElementsOffsetAEMU(this, var_mode, var_start, var_end, var_count, var_type, var_offset);
5927 			SET_LASTCALL("glDrawRangeElementsOffsetAEMU");
5928 			android::base::endTrace();
5929 			break;
5930 		}
5931 		case OP_glFenceSync: {
5932 			android::base::beginTrace("glFenceSync decode");
5933 			GLenum var_condition = Unpack<GLenum,uint32_t>(ptr + 8);
5934 			GLbitfield var_flags = Unpack<GLbitfield,uint32_t>(ptr + 8 + 4);
5935 			if (useChecksum) {
5936 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
5937 					"gles2_decoder_context_t::decode, OP_glFenceSync: GL checksumCalculator failure\n");
5938 			}
5939 			size_t totalTmpSize = sizeof(GLsync);
5940 			totalTmpSize += checksumSize;
5941 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
5942 			#ifdef CHECK_GL_ERRORS
5943 			GLint err = this->glGetError();
5944 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glFenceSync\n", err);
5945 			#endif
5946 			DECODER_DEBUG_LOG("gles2(%p): glFenceSync(condition:0x%08x flags:0x%08x )", stream, var_condition, var_flags);
5947 			*(GLsync *)(&tmpBuf[0]) = 			this->glFenceSync(var_condition, var_flags);
5948 			if (useChecksum) {
5949 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
5950 			}
5951 			stream->flush();
5952 			SET_LASTCALL("glFenceSync");
5953 			android::base::endTrace();
5954 			break;
5955 		}
5956 		case OP_glClientWaitSync: {
5957 			android::base::beginTrace("glClientWaitSync decode");
5958 			GLsync var_wait_on = Unpack<GLsync,uint64_t>(ptr + 8);
5959 			GLbitfield var_flags = Unpack<GLbitfield,uint32_t>(ptr + 8 + 8);
5960 			GLuint64 var_timeout = Unpack<GLuint64,uint64_t>(ptr + 8 + 8 + 4);
5961 			if (useChecksum) {
5962 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4 + 8, ptr + 8 + 8 + 4 + 8, checksumSize,
5963 					"gles2_decoder_context_t::decode, OP_glClientWaitSync: GL checksumCalculator failure\n");
5964 			}
5965 			size_t totalTmpSize = sizeof(GLenum);
5966 			totalTmpSize += checksumSize;
5967 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
5968 			#ifdef CHECK_GL_ERRORS
5969 			GLint err = this->glGetError();
5970 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glClientWaitSync\n", err);
5971 			#endif
5972 			DECODER_DEBUG_LOG("gles2(%p): glClientWaitSync(wait_on:%p flags:0x%08x timeout:0x%016lx )", stream, var_wait_on, var_flags, var_timeout);
5973 			*(GLenum *)(&tmpBuf[0]) = 			this->glClientWaitSync(var_wait_on, var_flags, var_timeout);
5974 			if (useChecksum) {
5975 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
5976 			}
5977 			stream->flush();
5978 			SET_LASTCALL("glClientWaitSync");
5979 			android::base::endTrace();
5980 			break;
5981 		}
5982 		case OP_glWaitSync: {
5983 			android::base::beginTrace("glWaitSync decode");
5984 			GLsync var_wait_on = Unpack<GLsync,uint64_t>(ptr + 8);
5985 			GLbitfield var_flags = Unpack<GLbitfield,uint32_t>(ptr + 8 + 8);
5986 			GLuint64 var_timeout = Unpack<GLuint64,uint64_t>(ptr + 8 + 8 + 4);
5987 			if (useChecksum) {
5988 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4 + 8, ptr + 8 + 8 + 4 + 8, checksumSize,
5989 					"gles2_decoder_context_t::decode, OP_glWaitSync: GL checksumCalculator failure\n");
5990 			}
5991 			#ifdef CHECK_GL_ERRORS
5992 			GLint err = this->glGetError();
5993 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glWaitSync\n", err);
5994 			#endif
5995 			DECODER_DEBUG_LOG("gles2(%p): glWaitSync(wait_on:%p flags:0x%08x timeout:0x%016lx )", stream, var_wait_on, var_flags, var_timeout);
5996 			this->glWaitSync(var_wait_on, var_flags, var_timeout);
5997 			SET_LASTCALL("glWaitSync");
5998 			android::base::endTrace();
5999 			break;
6000 		}
6001 		case OP_glDeleteSync: {
6002 			android::base::beginTrace("glDeleteSync decode");
6003 			GLsync var_to_delete = Unpack<GLsync,uint64_t>(ptr + 8);
6004 			if (useChecksum) {
6005 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8, ptr + 8 + 8, checksumSize,
6006 					"gles2_decoder_context_t::decode, OP_glDeleteSync: GL checksumCalculator failure\n");
6007 			}
6008 			#ifdef CHECK_GL_ERRORS
6009 			GLint err = this->glGetError();
6010 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDeleteSync\n", err);
6011 			#endif
6012 			DECODER_DEBUG_LOG("gles2(%p): glDeleteSync(to_delete:%p )", stream, var_to_delete);
6013 			this->glDeleteSync(var_to_delete);
6014 			SET_LASTCALL("glDeleteSync");
6015 			android::base::endTrace();
6016 			break;
6017 		}
6018 		case OP_glIsSync: {
6019 			android::base::beginTrace("glIsSync decode");
6020 			GLsync var_sync = Unpack<GLsync,uint64_t>(ptr + 8);
6021 			if (useChecksum) {
6022 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8, ptr + 8 + 8, checksumSize,
6023 					"gles2_decoder_context_t::decode, OP_glIsSync: GL checksumCalculator failure\n");
6024 			}
6025 			size_t totalTmpSize = sizeof(GLboolean);
6026 			totalTmpSize += checksumSize;
6027 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
6028 			#ifdef CHECK_GL_ERRORS
6029 			GLint err = this->glGetError();
6030 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glIsSync\n", err);
6031 			#endif
6032 			DECODER_DEBUG_LOG("gles2(%p): glIsSync(sync:%p )", stream, var_sync);
6033 			*(GLboolean *)(&tmpBuf[0]) = 			this->glIsSync(var_sync);
6034 			if (useChecksum) {
6035 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
6036 			}
6037 			stream->flush();
6038 			SET_LASTCALL("glIsSync");
6039 			android::base::endTrace();
6040 			break;
6041 		}
6042 		case OP_glGetSynciv: {
6043 			android::base::beginTrace("glGetSynciv decode");
6044 			GLsync var_sync = Unpack<GLsync,uint64_t>(ptr + 8);
6045 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 8);
6046 			GLsizei var_bufSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 8 + 4);
6047 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 4 + 4);
6048 			InputBuffer inptr_length(ptr + 8 + 8 + 4 + 4 + 4, size_length);
6049 			uint32_t size_values __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 4 + 4 + 4 + size_length);
6050 			InputBuffer inptr_values(ptr + 8 + 8 + 4 + 4 + 4 + size_length + 4, size_values);
6051 			if (useChecksum) {
6052 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4 + 4 + 4 + size_length + 4 + size_values, ptr + 8 + 8 + 4 + 4 + 4 + size_length + 4 + size_values, checksumSize,
6053 					"gles2_decoder_context_t::decode, OP_glGetSynciv: GL checksumCalculator failure\n");
6054 			}
6055 			#ifdef CHECK_GL_ERRORS
6056 			GLint err = this->glGetError();
6057 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetSynciv\n", err);
6058 			#endif
6059 			DECODER_DEBUG_LOG("gles2(%p): glGetSynciv(sync:%p pname:0x%08x bufSize:%d length:%p(%u) values:%p(%u) )", stream, var_sync, var_pname, var_bufSize, (GLsizei*)(inptr_length.get()), size_length, (GLint*)(inptr_values.get()), size_values);
6060 			this->glGetSynciv(var_sync, var_pname, var_bufSize, (GLsizei*)(inptr_length.get()), (GLint*)(inptr_values.get()));
6061 			SET_LASTCALL("glGetSynciv");
6062 			android::base::endTrace();
6063 			break;
6064 		}
6065 		case OP_glFenceSyncAEMU: {
6066 			android::base::beginTrace("glFenceSyncAEMU decode");
6067 			GLenum var_condition = Unpack<GLenum,uint32_t>(ptr + 8);
6068 			GLbitfield var_flags = Unpack<GLbitfield,uint32_t>(ptr + 8 + 4);
6069 			if (useChecksum) {
6070 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
6071 					"gles2_decoder_context_t::decode, OP_glFenceSyncAEMU: GL checksumCalculator failure\n");
6072 			}
6073 			size_t totalTmpSize = sizeof(uint64_t);
6074 			totalTmpSize += checksumSize;
6075 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
6076 			#ifdef CHECK_GL_ERRORS
6077 			GLint err = this->glGetError();
6078 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glFenceSyncAEMU\n", err);
6079 			#endif
6080 			DECODER_DEBUG_LOG("gles2(%p): glFenceSyncAEMU(condition:0x%08x flags:0x%08x )", stream, var_condition, var_flags);
6081 			*(uint64_t *)(&tmpBuf[0]) = 			this->glFenceSyncAEMU(this, var_condition, var_flags);
6082 			if (useChecksum) {
6083 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
6084 			}
6085 			stream->flush();
6086 			SET_LASTCALL("glFenceSyncAEMU");
6087 			android::base::endTrace();
6088 			break;
6089 		}
6090 		case OP_glClientWaitSyncAEMU: {
6091 			android::base::beginTrace("glClientWaitSyncAEMU decode");
6092 			uint64_t var_wait_on = Unpack<uint64_t,uint64_t>(ptr + 8);
6093 			GLbitfield var_flags = Unpack<GLbitfield,uint32_t>(ptr + 8 + 8);
6094 			GLuint64 var_timeout = Unpack<GLuint64,uint64_t>(ptr + 8 + 8 + 4);
6095 			if (useChecksum) {
6096 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4 + 8, ptr + 8 + 8 + 4 + 8, checksumSize,
6097 					"gles2_decoder_context_t::decode, OP_glClientWaitSyncAEMU: GL checksumCalculator failure\n");
6098 			}
6099 			size_t totalTmpSize = sizeof(GLenum);
6100 			totalTmpSize += checksumSize;
6101 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
6102 			#ifdef CHECK_GL_ERRORS
6103 			GLint err = this->glGetError();
6104 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glClientWaitSyncAEMU\n", err);
6105 			#endif
6106 			DECODER_DEBUG_LOG("gles2(%p): glClientWaitSyncAEMU(wait_on:0x%016lx flags:0x%08x timeout:0x%016lx )", stream, var_wait_on, var_flags, var_timeout);
6107 			*(GLenum *)(&tmpBuf[0]) = 			this->glClientWaitSyncAEMU(this, var_wait_on, var_flags, var_timeout);
6108 			if (useChecksum) {
6109 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
6110 			}
6111 			stream->flush();
6112 			SET_LASTCALL("glClientWaitSyncAEMU");
6113 			android::base::endTrace();
6114 			break;
6115 		}
6116 		case OP_glWaitSyncAEMU: {
6117 			android::base::beginTrace("glWaitSyncAEMU decode");
6118 			uint64_t var_wait_on = Unpack<uint64_t,uint64_t>(ptr + 8);
6119 			GLbitfield var_flags = Unpack<GLbitfield,uint32_t>(ptr + 8 + 8);
6120 			GLuint64 var_timeout = Unpack<GLuint64,uint64_t>(ptr + 8 + 8 + 4);
6121 			if (useChecksum) {
6122 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4 + 8, ptr + 8 + 8 + 4 + 8, checksumSize,
6123 					"gles2_decoder_context_t::decode, OP_glWaitSyncAEMU: GL checksumCalculator failure\n");
6124 			}
6125 			#ifdef CHECK_GL_ERRORS
6126 			GLint err = this->glGetError();
6127 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glWaitSyncAEMU\n", err);
6128 			#endif
6129 			DECODER_DEBUG_LOG("gles2(%p): glWaitSyncAEMU(wait_on:0x%016lx flags:0x%08x timeout:0x%016lx )", stream, var_wait_on, var_flags, var_timeout);
6130 			this->glWaitSyncAEMU(this, var_wait_on, var_flags, var_timeout);
6131 			SET_LASTCALL("glWaitSyncAEMU");
6132 			android::base::endTrace();
6133 			break;
6134 		}
6135 		case OP_glDeleteSyncAEMU: {
6136 			android::base::beginTrace("glDeleteSyncAEMU decode");
6137 			uint64_t var_to_delete = Unpack<uint64_t,uint64_t>(ptr + 8);
6138 			if (useChecksum) {
6139 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8, ptr + 8 + 8, checksumSize,
6140 					"gles2_decoder_context_t::decode, OP_glDeleteSyncAEMU: GL checksumCalculator failure\n");
6141 			}
6142 			#ifdef CHECK_GL_ERRORS
6143 			GLint err = this->glGetError();
6144 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDeleteSyncAEMU\n", err);
6145 			#endif
6146 			DECODER_DEBUG_LOG("gles2(%p): glDeleteSyncAEMU(to_delete:0x%016lx )", stream, var_to_delete);
6147 			this->glDeleteSyncAEMU(this, var_to_delete);
6148 			SET_LASTCALL("glDeleteSyncAEMU");
6149 			android::base::endTrace();
6150 			break;
6151 		}
6152 		case OP_glIsSyncAEMU: {
6153 			android::base::beginTrace("glIsSyncAEMU decode");
6154 			uint64_t var_sync = Unpack<uint64_t,uint64_t>(ptr + 8);
6155 			if (useChecksum) {
6156 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8, ptr + 8 + 8, checksumSize,
6157 					"gles2_decoder_context_t::decode, OP_glIsSyncAEMU: GL checksumCalculator failure\n");
6158 			}
6159 			size_t totalTmpSize = sizeof(GLboolean);
6160 			totalTmpSize += checksumSize;
6161 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
6162 			#ifdef CHECK_GL_ERRORS
6163 			GLint err = this->glGetError();
6164 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glIsSyncAEMU\n", err);
6165 			#endif
6166 			DECODER_DEBUG_LOG("gles2(%p): glIsSyncAEMU(sync:0x%016lx )", stream, var_sync);
6167 			*(GLboolean *)(&tmpBuf[0]) = 			this->glIsSyncAEMU(this, var_sync);
6168 			if (useChecksum) {
6169 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
6170 			}
6171 			stream->flush();
6172 			SET_LASTCALL("glIsSyncAEMU");
6173 			android::base::endTrace();
6174 			break;
6175 		}
6176 		case OP_glGetSyncivAEMU: {
6177 			android::base::beginTrace("glGetSyncivAEMU decode");
6178 			uint64_t var_sync = Unpack<uint64_t,uint64_t>(ptr + 8);
6179 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 8);
6180 			GLsizei var_bufSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 8 + 4);
6181 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 4 + 4);
6182 			uint32_t size_values __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 4 + 4 + 4);
6183 			if (useChecksum) {
6184 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4 + 4 + 4 + 4, ptr + 8 + 8 + 4 + 4 + 4 + 4, checksumSize,
6185 					"gles2_decoder_context_t::decode, OP_glGetSyncivAEMU: GL checksumCalculator failure\n");
6186 			}
6187 			size_t totalTmpSize = size_length;
6188 			totalTmpSize += size_values;
6189 			totalTmpSize += checksumSize;
6190 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
6191 			OutputBuffer outptr_length(&tmpBuf[0], size_length);
6192 			OutputBuffer outptr_values(&tmpBuf[0 + size_length], size_values);
6193 			#ifdef CHECK_GL_ERRORS
6194 			GLint err = this->glGetError();
6195 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetSyncivAEMU\n", err);
6196 			#endif
6197 			DECODER_DEBUG_LOG("gles2(%p): glGetSyncivAEMU(sync:0x%016lx pname:0x%08x bufSize:%d length:%p(%u) values:%p(%u) )", stream, var_sync, var_pname, var_bufSize, (GLsizei*)(outptr_length.get()), size_length, (GLint*)(outptr_values.get()), size_values);
6198 			this->glGetSyncivAEMU(this, var_sync, var_pname, var_bufSize, size_length == 0 ? nullptr : (GLsizei*)(outptr_length.get()), (GLint*)(outptr_values.get()));
6199 			outptr_length.flush();
6200 			outptr_values.flush();
6201 			if (useChecksum) {
6202 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
6203 			}
6204 			stream->flush();
6205 			SET_LASTCALL("glGetSyncivAEMU");
6206 			android::base::endTrace();
6207 			break;
6208 		}
6209 		case OP_glDrawBuffers: {
6210 			android::base::beginTrace("glDrawBuffers decode");
6211 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
6212 			uint32_t size_bufs __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
6213 			InputBuffer inptr_bufs(ptr + 8 + 4 + 4, size_bufs);
6214 			if (useChecksum) {
6215 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_bufs, ptr + 8 + 4 + 4 + size_bufs, checksumSize,
6216 					"gles2_decoder_context_t::decode, OP_glDrawBuffers: GL checksumCalculator failure\n");
6217 			}
6218 			#ifdef CHECK_GL_ERRORS
6219 			GLint err = this->glGetError();
6220 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawBuffers\n", err);
6221 			#endif
6222 			DECODER_DEBUG_LOG("gles2(%p): glDrawBuffers(n:%d bufs:%p(%u) )", stream, var_n, (const GLenum*)(inptr_bufs.get()), size_bufs);
6223 			this->glDrawBuffers(var_n, (const GLenum*)(inptr_bufs.get()));
6224 			SET_LASTCALL("glDrawBuffers");
6225 			android::base::endTrace();
6226 			break;
6227 		}
6228 		case OP_glReadBuffer: {
6229 			android::base::beginTrace("glReadBuffer decode");
6230 			GLenum var_src = Unpack<GLenum,uint32_t>(ptr + 8);
6231 			if (useChecksum) {
6232 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
6233 					"gles2_decoder_context_t::decode, OP_glReadBuffer: GL checksumCalculator failure\n");
6234 			}
6235 			#ifdef CHECK_GL_ERRORS
6236 			GLint err = this->glGetError();
6237 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glReadBuffer\n", err);
6238 			#endif
6239 			DECODER_DEBUG_LOG("gles2(%p): glReadBuffer(src:0x%08x )", stream, var_src);
6240 			this->glReadBuffer(var_src);
6241 			SET_LASTCALL("glReadBuffer");
6242 			android::base::endTrace();
6243 			break;
6244 		}
6245 		case OP_glBlitFramebuffer: {
6246 			android::base::beginTrace("glBlitFramebuffer decode");
6247 			GLint var_srcX0 = Unpack<GLint,uint32_t>(ptr + 8);
6248 			GLint var_srcY0 = Unpack<GLint,uint32_t>(ptr + 8 + 4);
6249 			GLint var_srcX1 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
6250 			GLint var_srcY1 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
6251 			GLint var_dstX0 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
6252 			GLint var_dstY0 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
6253 			GLint var_dstX1 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
6254 			GLint var_dstY1 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
6255 			GLbitfield var_mask = Unpack<GLbitfield,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
6256 			GLenum var_filter = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
6257 			if (useChecksum) {
6258 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
6259 					"gles2_decoder_context_t::decode, OP_glBlitFramebuffer: GL checksumCalculator failure\n");
6260 			}
6261 			#ifdef CHECK_GL_ERRORS
6262 			GLint err = this->glGetError();
6263 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBlitFramebuffer\n", err);
6264 			#endif
6265 			DECODER_DEBUG_LOG("gles2(%p): glBlitFramebuffer(srcX0:%d srcY0:%d srcX1:%d srcY1:%d dstX0:%d dstY0:%d dstX1:%d dstY1:%d mask:0x%08x filter:0x%08x )", stream, var_srcX0, var_srcY0, var_srcX1, var_srcY1, var_dstX0, var_dstY0, var_dstX1, var_dstY1, var_mask, var_filter);
6266 			this->glBlitFramebuffer(var_srcX0, var_srcY0, var_srcX1, var_srcY1, var_dstX0, var_dstY0, var_dstX1, var_dstY1, var_mask, var_filter);
6267 			SET_LASTCALL("glBlitFramebuffer");
6268 			android::base::endTrace();
6269 			break;
6270 		}
6271 		case OP_glInvalidateFramebuffer: {
6272 			android::base::beginTrace("glInvalidateFramebuffer decode");
6273 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
6274 			GLsizei var_numAttachments = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
6275 			uint32_t size_attachments __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
6276 			InputBuffer inptr_attachments(ptr + 8 + 4 + 4 + 4, size_attachments);
6277 			if (useChecksum) {
6278 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_attachments, ptr + 8 + 4 + 4 + 4 + size_attachments, checksumSize,
6279 					"gles2_decoder_context_t::decode, OP_glInvalidateFramebuffer: GL checksumCalculator failure\n");
6280 			}
6281 			#ifdef CHECK_GL_ERRORS
6282 			GLint err = this->glGetError();
6283 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glInvalidateFramebuffer\n", err);
6284 			#endif
6285 			DECODER_DEBUG_LOG("gles2(%p): glInvalidateFramebuffer(target:0x%08x numAttachments:%d attachments:%p(%u) )", stream, var_target, var_numAttachments, (const GLenum*)(inptr_attachments.get()), size_attachments);
6286 			this->glInvalidateFramebuffer(var_target, var_numAttachments, (const GLenum*)(inptr_attachments.get()));
6287 			SET_LASTCALL("glInvalidateFramebuffer");
6288 			android::base::endTrace();
6289 			break;
6290 		}
6291 		case OP_glInvalidateSubFramebuffer: {
6292 			android::base::beginTrace("glInvalidateSubFramebuffer decode");
6293 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
6294 			GLsizei var_numAttachments = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
6295 			uint32_t size_attachments __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
6296 			InputBuffer inptr_attachments(ptr + 8 + 4 + 4 + 4, size_attachments);
6297 			GLint var_x = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_attachments);
6298 			GLint var_y = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_attachments + 4);
6299 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_attachments + 4 + 4);
6300 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_attachments + 4 + 4 + 4);
6301 			if (useChecksum) {
6302 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_attachments + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + size_attachments + 4 + 4 + 4 + 4, checksumSize,
6303 					"gles2_decoder_context_t::decode, OP_glInvalidateSubFramebuffer: GL checksumCalculator failure\n");
6304 			}
6305 			#ifdef CHECK_GL_ERRORS
6306 			GLint err = this->glGetError();
6307 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glInvalidateSubFramebuffer\n", err);
6308 			#endif
6309 			DECODER_DEBUG_LOG("gles2(%p): glInvalidateSubFramebuffer(target:0x%08x numAttachments:%d attachments:%p(%u) x:%d y:%d width:%d height:%d )", stream, var_target, var_numAttachments, (const GLenum*)(inptr_attachments.get()), size_attachments, var_x, var_y, var_width, var_height);
6310 			this->glInvalidateSubFramebuffer(var_target, var_numAttachments, (const GLenum*)(inptr_attachments.get()), var_x, var_y, var_width, var_height);
6311 			SET_LASTCALL("glInvalidateSubFramebuffer");
6312 			android::base::endTrace();
6313 			break;
6314 		}
6315 		case OP_glFramebufferTextureLayer: {
6316 			android::base::beginTrace("glFramebufferTextureLayer decode");
6317 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
6318 			GLenum var_attachment = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
6319 			GLuint var_texture = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
6320 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
6321 			GLint var_layer = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
6322 			if (useChecksum) {
6323 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
6324 					"gles2_decoder_context_t::decode, OP_glFramebufferTextureLayer: GL checksumCalculator failure\n");
6325 			}
6326 			#ifdef CHECK_GL_ERRORS
6327 			GLint err = this->glGetError();
6328 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glFramebufferTextureLayer\n", err);
6329 			#endif
6330 			DECODER_DEBUG_LOG("gles2(%p): glFramebufferTextureLayer(target:0x%08x attachment:0x%08x texture:%u level:%d layer:%d )", stream, var_target, var_attachment, var_texture, var_level, var_layer);
6331 			this->glFramebufferTextureLayer(var_target, var_attachment, var_texture, var_level, var_layer);
6332 			SET_LASTCALL("glFramebufferTextureLayer");
6333 			android::base::endTrace();
6334 			break;
6335 		}
6336 		case OP_glRenderbufferStorageMultisample: {
6337 			android::base::beginTrace("glRenderbufferStorageMultisample decode");
6338 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
6339 			GLsizei var_samples = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
6340 			GLenum var_internalformat = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
6341 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
6342 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
6343 			if (useChecksum) {
6344 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
6345 					"gles2_decoder_context_t::decode, OP_glRenderbufferStorageMultisample: GL checksumCalculator failure\n");
6346 			}
6347 			#ifdef CHECK_GL_ERRORS
6348 			GLint err = this->glGetError();
6349 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glRenderbufferStorageMultisample\n", err);
6350 			#endif
6351 			DECODER_DEBUG_LOG("gles2(%p): glRenderbufferStorageMultisample(target:0x%08x samples:%d internalformat:0x%08x width:%d height:%d )", stream, var_target, var_samples, var_internalformat, var_width, var_height);
6352 			this->glRenderbufferStorageMultisample(var_target, var_samples, var_internalformat, var_width, var_height);
6353 			SET_LASTCALL("glRenderbufferStorageMultisample");
6354 			android::base::endTrace();
6355 			break;
6356 		}
6357 		case OP_glTexStorage2D: {
6358 			android::base::beginTrace("glTexStorage2D decode");
6359 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
6360 			GLsizei var_levels = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
6361 			GLenum var_internalformat = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
6362 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
6363 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
6364 			if (useChecksum) {
6365 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
6366 					"gles2_decoder_context_t::decode, OP_glTexStorage2D: GL checksumCalculator failure\n");
6367 			}
6368 			#ifdef CHECK_GL_ERRORS
6369 			GLint err = this->glGetError();
6370 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexStorage2D\n", err);
6371 			#endif
6372 			DECODER_DEBUG_LOG("gles2(%p): glTexStorage2D(target:0x%08x levels:%d internalformat:0x%08x width:%d height:%d )", stream, var_target, var_levels, var_internalformat, var_width, var_height);
6373 			this->glTexStorage2D(var_target, var_levels, var_internalformat, var_width, var_height);
6374 			SET_LASTCALL("glTexStorage2D");
6375 			android::base::endTrace();
6376 			break;
6377 		}
6378 		case OP_glGetInternalformativ: {
6379 			android::base::beginTrace("glGetInternalformativ decode");
6380 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
6381 			GLenum var_internalformat = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
6382 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
6383 			GLsizei var_bufSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
6384 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
6385 			if (useChecksum) {
6386 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
6387 					"gles2_decoder_context_t::decode, OP_glGetInternalformativ: GL checksumCalculator failure\n");
6388 			}
6389 			size_t totalTmpSize = size_params;
6390 			totalTmpSize += checksumSize;
6391 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
6392 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
6393 			#ifdef CHECK_GL_ERRORS
6394 			GLint err = this->glGetError();
6395 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetInternalformativ\n", err);
6396 			#endif
6397 			DECODER_DEBUG_LOG("gles2(%p): glGetInternalformativ(target:0x%08x internalformat:0x%08x pname:0x%08x bufSize:%d params:%p(%u) )", stream, var_target, var_internalformat, var_pname, var_bufSize, (GLint*)(outptr_params.get()), size_params);
6398 			this->glGetInternalformativ(var_target, var_internalformat, var_pname, var_bufSize, (GLint*)(outptr_params.get()));
6399 			outptr_params.flush();
6400 			if (useChecksum) {
6401 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
6402 			}
6403 			stream->flush();
6404 			SET_LASTCALL("glGetInternalformativ");
6405 			android::base::endTrace();
6406 			break;
6407 		}
6408 		case OP_glBeginTransformFeedback: {
6409 			android::base::beginTrace("glBeginTransformFeedback decode");
6410 			GLenum var_primitiveMode = Unpack<GLenum,uint32_t>(ptr + 8);
6411 			if (useChecksum) {
6412 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
6413 					"gles2_decoder_context_t::decode, OP_glBeginTransformFeedback: GL checksumCalculator failure\n");
6414 			}
6415 			#ifdef CHECK_GL_ERRORS
6416 			GLint err = this->glGetError();
6417 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBeginTransformFeedback\n", err);
6418 			#endif
6419 			DECODER_DEBUG_LOG("gles2(%p): glBeginTransformFeedback(primitiveMode:0x%08x )", stream, var_primitiveMode);
6420 			this->glBeginTransformFeedback(var_primitiveMode);
6421 			SET_LASTCALL("glBeginTransformFeedback");
6422 			android::base::endTrace();
6423 			break;
6424 		}
6425 		case OP_glEndTransformFeedback: {
6426 			android::base::beginTrace("glEndTransformFeedback decode");
6427 			if (useChecksum) {
6428 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8, ptr + 8, checksumSize,
6429 					"gles2_decoder_context_t::decode, OP_glEndTransformFeedback: GL checksumCalculator failure\n");
6430 			}
6431 			#ifdef CHECK_GL_ERRORS
6432 			GLint err = this->glGetError();
6433 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glEndTransformFeedback\n", err);
6434 			#endif
6435 			DECODER_DEBUG_LOG("gles2(%p): glEndTransformFeedback()", stream);
6436 			this->glEndTransformFeedback();
6437 			SET_LASTCALL("glEndTransformFeedback");
6438 			android::base::endTrace();
6439 			break;
6440 		}
6441 		case OP_glGenTransformFeedbacks: {
6442 			android::base::beginTrace("glGenTransformFeedbacks decode");
6443 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
6444 			uint32_t size_ids __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
6445 			if (useChecksum) {
6446 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
6447 					"gles2_decoder_context_t::decode, OP_glGenTransformFeedbacks: GL checksumCalculator failure\n");
6448 			}
6449 			size_t totalTmpSize = size_ids;
6450 			totalTmpSize += checksumSize;
6451 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
6452 			OutputBuffer outptr_ids(&tmpBuf[0], size_ids);
6453 			#ifdef CHECK_GL_ERRORS
6454 			GLint err = this->glGetError();
6455 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGenTransformFeedbacks\n", err);
6456 			#endif
6457 			DECODER_DEBUG_LOG("gles2(%p): glGenTransformFeedbacks(n:%d ids:%p(%u) )", stream, var_n, (GLuint*)(outptr_ids.get()), size_ids);
6458 			this->glGenTransformFeedbacks_dec(this, var_n, (GLuint*)(outptr_ids.get()));
6459 			outptr_ids.flush();
6460 			if (useChecksum) {
6461 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
6462 			}
6463 			stream->flush();
6464 			SET_LASTCALL("glGenTransformFeedbacks");
6465 			android::base::endTrace();
6466 			break;
6467 		}
6468 		case OP_glDeleteTransformFeedbacks: {
6469 			android::base::beginTrace("glDeleteTransformFeedbacks decode");
6470 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
6471 			uint32_t size_ids __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
6472 			InputBuffer inptr_ids(ptr + 8 + 4 + 4, size_ids);
6473 			if (useChecksum) {
6474 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_ids, ptr + 8 + 4 + 4 + size_ids, checksumSize,
6475 					"gles2_decoder_context_t::decode, OP_glDeleteTransformFeedbacks: GL checksumCalculator failure\n");
6476 			}
6477 			#ifdef CHECK_GL_ERRORS
6478 			GLint err = this->glGetError();
6479 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDeleteTransformFeedbacks\n", err);
6480 			#endif
6481 			DECODER_DEBUG_LOG("gles2(%p): glDeleteTransformFeedbacks(n:%d ids:%p(%u) )", stream, var_n, (const GLuint*)(inptr_ids.get()), size_ids);
6482 			this->glDeleteTransformFeedbacks_dec(this, var_n, (const GLuint*)(inptr_ids.get()));
6483 			SET_LASTCALL("glDeleteTransformFeedbacks");
6484 			android::base::endTrace();
6485 			break;
6486 		}
6487 		case OP_glBindTransformFeedback: {
6488 			android::base::beginTrace("glBindTransformFeedback decode");
6489 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
6490 			GLuint var_id = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
6491 			if (useChecksum) {
6492 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
6493 					"gles2_decoder_context_t::decode, OP_glBindTransformFeedback: GL checksumCalculator failure\n");
6494 			}
6495 			#ifdef CHECK_GL_ERRORS
6496 			GLint err = this->glGetError();
6497 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBindTransformFeedback\n", err);
6498 			#endif
6499 			DECODER_DEBUG_LOG("gles2(%p): glBindTransformFeedback(target:0x%08x id:%u )", stream, var_target, var_id);
6500 			this->glBindTransformFeedback(var_target, var_id);
6501 			SET_LASTCALL("glBindTransformFeedback");
6502 			android::base::endTrace();
6503 			break;
6504 		}
6505 		case OP_glPauseTransformFeedback: {
6506 			android::base::beginTrace("glPauseTransformFeedback decode");
6507 			if (useChecksum) {
6508 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8, ptr + 8, checksumSize,
6509 					"gles2_decoder_context_t::decode, OP_glPauseTransformFeedback: GL checksumCalculator failure\n");
6510 			}
6511 			#ifdef CHECK_GL_ERRORS
6512 			GLint err = this->glGetError();
6513 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glPauseTransformFeedback\n", err);
6514 			#endif
6515 			DECODER_DEBUG_LOG("gles2(%p): glPauseTransformFeedback()", stream);
6516 			this->glPauseTransformFeedback();
6517 			SET_LASTCALL("glPauseTransformFeedback");
6518 			android::base::endTrace();
6519 			break;
6520 		}
6521 		case OP_glResumeTransformFeedback: {
6522 			android::base::beginTrace("glResumeTransformFeedback decode");
6523 			if (useChecksum) {
6524 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8, ptr + 8, checksumSize,
6525 					"gles2_decoder_context_t::decode, OP_glResumeTransformFeedback: GL checksumCalculator failure\n");
6526 			}
6527 			#ifdef CHECK_GL_ERRORS
6528 			GLint err = this->glGetError();
6529 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glResumeTransformFeedback\n", err);
6530 			#endif
6531 			DECODER_DEBUG_LOG("gles2(%p): glResumeTransformFeedback()", stream);
6532 			this->glResumeTransformFeedback();
6533 			SET_LASTCALL("glResumeTransformFeedback");
6534 			android::base::endTrace();
6535 			break;
6536 		}
6537 		case OP_glIsTransformFeedback: {
6538 			android::base::beginTrace("glIsTransformFeedback decode");
6539 			GLuint var_id = Unpack<GLuint,uint32_t>(ptr + 8);
6540 			if (useChecksum) {
6541 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
6542 					"gles2_decoder_context_t::decode, OP_glIsTransformFeedback: GL checksumCalculator failure\n");
6543 			}
6544 			size_t totalTmpSize = sizeof(GLboolean);
6545 			totalTmpSize += checksumSize;
6546 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
6547 			#ifdef CHECK_GL_ERRORS
6548 			GLint err = this->glGetError();
6549 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glIsTransformFeedback\n", err);
6550 			#endif
6551 			DECODER_DEBUG_LOG("gles2(%p): glIsTransformFeedback(id:%u )", stream, var_id);
6552 			*(GLboolean *)(&tmpBuf[0]) = 			this->glIsTransformFeedback(var_id);
6553 			if (useChecksum) {
6554 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
6555 			}
6556 			stream->flush();
6557 			SET_LASTCALL("glIsTransformFeedback");
6558 			android::base::endTrace();
6559 			break;
6560 		}
6561 		case OP_glTransformFeedbackVaryings: {
6562 			android::base::beginTrace("glTransformFeedbackVaryings decode");
6563 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
6564 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
6565 			uint32_t size_varyings __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
6566 			InputBuffer inptr_varyings(ptr + 8 + 4 + 4 + 4, size_varyings);
6567 			GLenum var_bufferMode = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_varyings);
6568 			if (useChecksum) {
6569 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_varyings + 4, ptr + 8 + 4 + 4 + 4 + size_varyings + 4, checksumSize,
6570 					"gles2_decoder_context_t::decode, OP_glTransformFeedbackVaryings: GL checksumCalculator failure\n");
6571 			}
6572 			#ifdef CHECK_GL_ERRORS
6573 			GLint err = this->glGetError();
6574 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTransformFeedbackVaryings\n", err);
6575 			#endif
6576 			DECODER_DEBUG_LOG("gles2(%p): glTransformFeedbackVaryings(program:%u count:%d varyings:%p(%u) bufferMode:0x%08x )", stream, var_program, var_count, (const char**)(inptr_varyings.get()), size_varyings, var_bufferMode);
6577 			this->glTransformFeedbackVaryings_dec(this, var_program, var_count, (const char**)(inptr_varyings.get()), var_bufferMode);
6578 			SET_LASTCALL("glTransformFeedbackVaryings");
6579 			android::base::endTrace();
6580 			break;
6581 		}
6582 		case OP_glTransformFeedbackVaryingsAEMU: {
6583 			android::base::beginTrace("glTransformFeedbackVaryingsAEMU decode");
6584 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
6585 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
6586 			uint32_t size_packedVaryings __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
6587 			InputBuffer inptr_packedVaryings(ptr + 8 + 4 + 4 + 4, size_packedVaryings);
6588 			GLuint var_packedVaryingsLen = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_packedVaryings);
6589 			GLenum var_bufferMode = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_packedVaryings + 4);
6590 			if (useChecksum) {
6591 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_packedVaryings + 4 + 4, ptr + 8 + 4 + 4 + 4 + size_packedVaryings + 4 + 4, checksumSize,
6592 					"gles2_decoder_context_t::decode, OP_glTransformFeedbackVaryingsAEMU: GL checksumCalculator failure\n");
6593 			}
6594 			#ifdef CHECK_GL_ERRORS
6595 			GLint err = this->glGetError();
6596 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTransformFeedbackVaryingsAEMU\n", err);
6597 			#endif
6598 			DECODER_DEBUG_LOG("gles2(%p): glTransformFeedbackVaryingsAEMU(program:%u count:%d packedVaryings:%p(%u) packedVaryingsLen:%u bufferMode:0x%08x )", stream, var_program, var_count, (const char*)(inptr_packedVaryings.get()), size_packedVaryings, var_packedVaryingsLen, var_bufferMode);
6599 			this->glTransformFeedbackVaryingsAEMU(this, var_program, var_count, (const char*)(inptr_packedVaryings.get()), var_packedVaryingsLen, var_bufferMode);
6600 			SET_LASTCALL("glTransformFeedbackVaryingsAEMU");
6601 			android::base::endTrace();
6602 			break;
6603 		}
6604 		case OP_glGetTransformFeedbackVarying: {
6605 			android::base::beginTrace("glGetTransformFeedbackVarying decode");
6606 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
6607 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
6608 			GLsizei var_bufSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
6609 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
6610 			uint32_t size_size __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
6611 			uint32_t size_type __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
6612 			uint32_t size_name __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
6613 			if (useChecksum) {
6614 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
6615 					"gles2_decoder_context_t::decode, OP_glGetTransformFeedbackVarying: GL checksumCalculator failure\n");
6616 			}
6617 			size_t totalTmpSize = size_length;
6618 			totalTmpSize += size_size;
6619 			totalTmpSize += size_type;
6620 			totalTmpSize += size_name;
6621 			totalTmpSize += checksumSize;
6622 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
6623 			OutputBuffer outptr_length(&tmpBuf[0], size_length);
6624 			OutputBuffer outptr_size(&tmpBuf[0 + size_length], size_size);
6625 			OutputBuffer outptr_type(&tmpBuf[0 + size_length + size_size], size_type);
6626 			OutputBuffer outptr_name(&tmpBuf[0 + size_length + size_size + size_type], size_name);
6627 			#ifdef CHECK_GL_ERRORS
6628 			GLint err = this->glGetError();
6629 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetTransformFeedbackVarying\n", err);
6630 			#endif
6631 			DECODER_DEBUG_LOG("gles2(%p): glGetTransformFeedbackVarying(program:%u index:%u bufSize:%d length:%p(%u) size:%p(%u) type:%p(%u) name:%p(%u) )", stream, var_program, var_index, var_bufSize, (GLsizei*)(outptr_length.get()), size_length, (GLsizei*)(outptr_size.get()), size_size, (GLenum*)(outptr_type.get()), size_type, (char*)(outptr_name.get()), size_name);
6632 			this->glGetTransformFeedbackVarying_dec(this, var_program, var_index, var_bufSize, size_length == 0 ? nullptr : (GLsizei*)(outptr_length.get()), (GLsizei*)(outptr_size.get()), size_type == 0 ? nullptr : (GLenum*)(outptr_type.get()), size_name == 0 ? nullptr : (char*)(outptr_name.get()));
6633 			outptr_length.flush();
6634 			outptr_size.flush();
6635 			outptr_type.flush();
6636 			outptr_name.flush();
6637 			if (useChecksum) {
6638 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
6639 			}
6640 			stream->flush();
6641 			SET_LASTCALL("glGetTransformFeedbackVarying");
6642 			android::base::endTrace();
6643 			break;
6644 		}
6645 		case OP_glGenSamplers: {
6646 			android::base::beginTrace("glGenSamplers decode");
6647 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
6648 			uint32_t size_samplers __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
6649 			if (useChecksum) {
6650 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
6651 					"gles2_decoder_context_t::decode, OP_glGenSamplers: GL checksumCalculator failure\n");
6652 			}
6653 			size_t totalTmpSize = size_samplers;
6654 			totalTmpSize += checksumSize;
6655 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
6656 			OutputBuffer outptr_samplers(&tmpBuf[0], size_samplers);
6657 			#ifdef CHECK_GL_ERRORS
6658 			GLint err = this->glGetError();
6659 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGenSamplers\n", err);
6660 			#endif
6661 			DECODER_DEBUG_LOG("gles2(%p): glGenSamplers(n:%d samplers:%p(%u) )", stream, var_n, (GLuint*)(outptr_samplers.get()), size_samplers);
6662 			this->glGenSamplers_dec(this, var_n, (GLuint*)(outptr_samplers.get()));
6663 			outptr_samplers.flush();
6664 			if (useChecksum) {
6665 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
6666 			}
6667 			stream->flush();
6668 			SET_LASTCALL("glGenSamplers");
6669 			android::base::endTrace();
6670 			break;
6671 		}
6672 		case OP_glDeleteSamplers: {
6673 			android::base::beginTrace("glDeleteSamplers decode");
6674 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
6675 			uint32_t size_samplers __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
6676 			InputBuffer inptr_samplers(ptr + 8 + 4 + 4, size_samplers);
6677 			if (useChecksum) {
6678 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_samplers, ptr + 8 + 4 + 4 + size_samplers, checksumSize,
6679 					"gles2_decoder_context_t::decode, OP_glDeleteSamplers: GL checksumCalculator failure\n");
6680 			}
6681 			#ifdef CHECK_GL_ERRORS
6682 			GLint err = this->glGetError();
6683 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDeleteSamplers\n", err);
6684 			#endif
6685 			DECODER_DEBUG_LOG("gles2(%p): glDeleteSamplers(n:%d samplers:%p(%u) )", stream, var_n, (const GLuint*)(inptr_samplers.get()), size_samplers);
6686 			this->glDeleteSamplers_dec(this, var_n, (const GLuint*)(inptr_samplers.get()));
6687 			SET_LASTCALL("glDeleteSamplers");
6688 			android::base::endTrace();
6689 			break;
6690 		}
6691 		case OP_glBindSampler: {
6692 			android::base::beginTrace("glBindSampler decode");
6693 			GLuint var_unit = Unpack<GLuint,uint32_t>(ptr + 8);
6694 			GLuint var_sampler = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
6695 			if (useChecksum) {
6696 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
6697 					"gles2_decoder_context_t::decode, OP_glBindSampler: GL checksumCalculator failure\n");
6698 			}
6699 			#ifdef CHECK_GL_ERRORS
6700 			GLint err = this->glGetError();
6701 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBindSampler\n", err);
6702 			#endif
6703 			DECODER_DEBUG_LOG("gles2(%p): glBindSampler(unit:%u sampler:%u )", stream, var_unit, var_sampler);
6704 			this->glBindSampler(var_unit, var_sampler);
6705 			SET_LASTCALL("glBindSampler");
6706 			android::base::endTrace();
6707 			break;
6708 		}
6709 		case OP_glSamplerParameterf: {
6710 			android::base::beginTrace("glSamplerParameterf decode");
6711 			GLuint var_sampler = Unpack<GLuint,uint32_t>(ptr + 8);
6712 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
6713 			GLfloat var_param = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4);
6714 			if (useChecksum) {
6715 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
6716 					"gles2_decoder_context_t::decode, OP_glSamplerParameterf: GL checksumCalculator failure\n");
6717 			}
6718 			#ifdef CHECK_GL_ERRORS
6719 			GLint err = this->glGetError();
6720 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glSamplerParameterf\n", err);
6721 			#endif
6722 			DECODER_DEBUG_LOG("gles2(%p): glSamplerParameterf(sampler:%u pname:0x%08x param:%f )", stream, var_sampler, var_pname, var_param);
6723 			this->glSamplerParameterf(var_sampler, var_pname, var_param);
6724 			SET_LASTCALL("glSamplerParameterf");
6725 			android::base::endTrace();
6726 			break;
6727 		}
6728 		case OP_glSamplerParameteri: {
6729 			android::base::beginTrace("glSamplerParameteri decode");
6730 			GLuint var_sampler = Unpack<GLuint,uint32_t>(ptr + 8);
6731 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
6732 			GLint var_param = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
6733 			if (useChecksum) {
6734 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
6735 					"gles2_decoder_context_t::decode, OP_glSamplerParameteri: GL checksumCalculator failure\n");
6736 			}
6737 			#ifdef CHECK_GL_ERRORS
6738 			GLint err = this->glGetError();
6739 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glSamplerParameteri\n", err);
6740 			#endif
6741 			DECODER_DEBUG_LOG("gles2(%p): glSamplerParameteri(sampler:%u pname:0x%08x param:%d )", stream, var_sampler, var_pname, var_param);
6742 			this->glSamplerParameteri(var_sampler, var_pname, var_param);
6743 			SET_LASTCALL("glSamplerParameteri");
6744 			android::base::endTrace();
6745 			break;
6746 		}
6747 		case OP_glSamplerParameterfv: {
6748 			android::base::beginTrace("glSamplerParameterfv decode");
6749 			GLuint var_sampler = Unpack<GLuint,uint32_t>(ptr + 8);
6750 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
6751 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
6752 			InputBuffer inptr_params(ptr + 8 + 4 + 4 + 4, size_params);
6753 			if (useChecksum) {
6754 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_params, ptr + 8 + 4 + 4 + 4 + size_params, checksumSize,
6755 					"gles2_decoder_context_t::decode, OP_glSamplerParameterfv: GL checksumCalculator failure\n");
6756 			}
6757 			#ifdef CHECK_GL_ERRORS
6758 			GLint err = this->glGetError();
6759 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glSamplerParameterfv\n", err);
6760 			#endif
6761 			DECODER_DEBUG_LOG("gles2(%p): glSamplerParameterfv(sampler:%u pname:0x%08x params:%p(%u) )", stream, var_sampler, var_pname, (const GLfloat*)(inptr_params.get()), size_params);
6762 			this->glSamplerParameterfv(var_sampler, var_pname, (const GLfloat*)(inptr_params.get()));
6763 			SET_LASTCALL("glSamplerParameterfv");
6764 			android::base::endTrace();
6765 			break;
6766 		}
6767 		case OP_glSamplerParameteriv: {
6768 			android::base::beginTrace("glSamplerParameteriv decode");
6769 			GLuint var_sampler = Unpack<GLuint,uint32_t>(ptr + 8);
6770 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
6771 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
6772 			InputBuffer inptr_params(ptr + 8 + 4 + 4 + 4, size_params);
6773 			if (useChecksum) {
6774 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_params, ptr + 8 + 4 + 4 + 4 + size_params, checksumSize,
6775 					"gles2_decoder_context_t::decode, OP_glSamplerParameteriv: GL checksumCalculator failure\n");
6776 			}
6777 			#ifdef CHECK_GL_ERRORS
6778 			GLint err = this->glGetError();
6779 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glSamplerParameteriv\n", err);
6780 			#endif
6781 			DECODER_DEBUG_LOG("gles2(%p): glSamplerParameteriv(sampler:%u pname:0x%08x params:%p(%u) )", stream, var_sampler, var_pname, (const GLint*)(inptr_params.get()), size_params);
6782 			this->glSamplerParameteriv(var_sampler, var_pname, (const GLint*)(inptr_params.get()));
6783 			SET_LASTCALL("glSamplerParameteriv");
6784 			android::base::endTrace();
6785 			break;
6786 		}
6787 		case OP_glGetSamplerParameterfv: {
6788 			android::base::beginTrace("glGetSamplerParameterfv decode");
6789 			GLuint var_sampler = Unpack<GLuint,uint32_t>(ptr + 8);
6790 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
6791 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
6792 			if (useChecksum) {
6793 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
6794 					"gles2_decoder_context_t::decode, OP_glGetSamplerParameterfv: GL checksumCalculator failure\n");
6795 			}
6796 			size_t totalTmpSize = size_params;
6797 			totalTmpSize += checksumSize;
6798 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
6799 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
6800 			#ifdef CHECK_GL_ERRORS
6801 			GLint err = this->glGetError();
6802 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetSamplerParameterfv\n", err);
6803 			#endif
6804 			DECODER_DEBUG_LOG("gles2(%p): glGetSamplerParameterfv(sampler:%u pname:0x%08x params:%p(%u) )", stream, var_sampler, var_pname, (GLfloat*)(outptr_params.get()), size_params);
6805 			this->glGetSamplerParameterfv(var_sampler, var_pname, (GLfloat*)(outptr_params.get()));
6806 			outptr_params.flush();
6807 			if (useChecksum) {
6808 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
6809 			}
6810 			stream->flush();
6811 			SET_LASTCALL("glGetSamplerParameterfv");
6812 			android::base::endTrace();
6813 			break;
6814 		}
6815 		case OP_glGetSamplerParameteriv: {
6816 			android::base::beginTrace("glGetSamplerParameteriv decode");
6817 			GLuint var_sampler = Unpack<GLuint,uint32_t>(ptr + 8);
6818 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
6819 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
6820 			if (useChecksum) {
6821 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
6822 					"gles2_decoder_context_t::decode, OP_glGetSamplerParameteriv: GL checksumCalculator failure\n");
6823 			}
6824 			size_t totalTmpSize = size_params;
6825 			totalTmpSize += checksumSize;
6826 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
6827 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
6828 			#ifdef CHECK_GL_ERRORS
6829 			GLint err = this->glGetError();
6830 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetSamplerParameteriv\n", err);
6831 			#endif
6832 			DECODER_DEBUG_LOG("gles2(%p): glGetSamplerParameteriv(sampler:%u pname:0x%08x params:%p(%u) )", stream, var_sampler, var_pname, (GLint*)(outptr_params.get()), size_params);
6833 			this->glGetSamplerParameteriv(var_sampler, var_pname, (GLint*)(outptr_params.get()));
6834 			outptr_params.flush();
6835 			if (useChecksum) {
6836 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
6837 			}
6838 			stream->flush();
6839 			SET_LASTCALL("glGetSamplerParameteriv");
6840 			android::base::endTrace();
6841 			break;
6842 		}
6843 		case OP_glIsSampler: {
6844 			android::base::beginTrace("glIsSampler decode");
6845 			GLuint var_sampler = Unpack<GLuint,uint32_t>(ptr + 8);
6846 			if (useChecksum) {
6847 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
6848 					"gles2_decoder_context_t::decode, OP_glIsSampler: GL checksumCalculator failure\n");
6849 			}
6850 			size_t totalTmpSize = sizeof(GLboolean);
6851 			totalTmpSize += checksumSize;
6852 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
6853 			#ifdef CHECK_GL_ERRORS
6854 			GLint err = this->glGetError();
6855 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glIsSampler\n", err);
6856 			#endif
6857 			DECODER_DEBUG_LOG("gles2(%p): glIsSampler(sampler:%u )", stream, var_sampler);
6858 			*(GLboolean *)(&tmpBuf[0]) = 			this->glIsSampler(var_sampler);
6859 			if (useChecksum) {
6860 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
6861 			}
6862 			stream->flush();
6863 			SET_LASTCALL("glIsSampler");
6864 			android::base::endTrace();
6865 			break;
6866 		}
6867 		case OP_glGenQueries: {
6868 			android::base::beginTrace("glGenQueries decode");
6869 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
6870 			uint32_t size_queries __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
6871 			if (useChecksum) {
6872 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
6873 					"gles2_decoder_context_t::decode, OP_glGenQueries: GL checksumCalculator failure\n");
6874 			}
6875 			size_t totalTmpSize = size_queries;
6876 			totalTmpSize += checksumSize;
6877 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
6878 			OutputBuffer outptr_queries(&tmpBuf[0], size_queries);
6879 			#ifdef CHECK_GL_ERRORS
6880 			GLint err = this->glGetError();
6881 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGenQueries\n", err);
6882 			#endif
6883 			DECODER_DEBUG_LOG("gles2(%p): glGenQueries(n:%d queries:%p(%u) )", stream, var_n, (GLuint*)(outptr_queries.get()), size_queries);
6884 			this->glGenQueries_dec(this, var_n, (GLuint*)(outptr_queries.get()));
6885 			outptr_queries.flush();
6886 			if (useChecksum) {
6887 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
6888 			}
6889 			stream->flush();
6890 			SET_LASTCALL("glGenQueries");
6891 			android::base::endTrace();
6892 			break;
6893 		}
6894 		case OP_glDeleteQueries: {
6895 			android::base::beginTrace("glDeleteQueries decode");
6896 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
6897 			uint32_t size_queries __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
6898 			InputBuffer inptr_queries(ptr + 8 + 4 + 4, size_queries);
6899 			if (useChecksum) {
6900 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_queries, ptr + 8 + 4 + 4 + size_queries, checksumSize,
6901 					"gles2_decoder_context_t::decode, OP_glDeleteQueries: GL checksumCalculator failure\n");
6902 			}
6903 			#ifdef CHECK_GL_ERRORS
6904 			GLint err = this->glGetError();
6905 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDeleteQueries\n", err);
6906 			#endif
6907 			DECODER_DEBUG_LOG("gles2(%p): glDeleteQueries(n:%d queries:%p(%u) )", stream, var_n, (const GLuint*)(inptr_queries.get()), size_queries);
6908 			this->glDeleteQueries_dec(this, var_n, (const GLuint*)(inptr_queries.get()));
6909 			SET_LASTCALL("glDeleteQueries");
6910 			android::base::endTrace();
6911 			break;
6912 		}
6913 		case OP_glBeginQuery: {
6914 			android::base::beginTrace("glBeginQuery decode");
6915 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
6916 			GLuint var_query = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
6917 			if (useChecksum) {
6918 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
6919 					"gles2_decoder_context_t::decode, OP_glBeginQuery: GL checksumCalculator failure\n");
6920 			}
6921 			#ifdef CHECK_GL_ERRORS
6922 			GLint err = this->glGetError();
6923 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBeginQuery\n", err);
6924 			#endif
6925 			DECODER_DEBUG_LOG("gles2(%p): glBeginQuery(target:0x%08x query:%u )", stream, var_target, var_query);
6926 			this->glBeginQuery(var_target, var_query);
6927 			SET_LASTCALL("glBeginQuery");
6928 			android::base::endTrace();
6929 			break;
6930 		}
6931 		case OP_glEndQuery: {
6932 			android::base::beginTrace("glEndQuery decode");
6933 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
6934 			if (useChecksum) {
6935 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
6936 					"gles2_decoder_context_t::decode, OP_glEndQuery: GL checksumCalculator failure\n");
6937 			}
6938 			#ifdef CHECK_GL_ERRORS
6939 			GLint err = this->glGetError();
6940 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glEndQuery\n", err);
6941 			#endif
6942 			DECODER_DEBUG_LOG("gles2(%p): glEndQuery(target:0x%08x )", stream, var_target);
6943 			this->glEndQuery(var_target);
6944 			SET_LASTCALL("glEndQuery");
6945 			android::base::endTrace();
6946 			break;
6947 		}
6948 		case OP_glGetQueryiv: {
6949 			android::base::beginTrace("glGetQueryiv decode");
6950 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
6951 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
6952 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
6953 			if (useChecksum) {
6954 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
6955 					"gles2_decoder_context_t::decode, OP_glGetQueryiv: GL checksumCalculator failure\n");
6956 			}
6957 			size_t totalTmpSize = size_params;
6958 			totalTmpSize += checksumSize;
6959 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
6960 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
6961 			#ifdef CHECK_GL_ERRORS
6962 			GLint err = this->glGetError();
6963 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetQueryiv\n", err);
6964 			#endif
6965 			DECODER_DEBUG_LOG("gles2(%p): glGetQueryiv(target:0x%08x pname:0x%08x params:%p(%u) )", stream, var_target, var_pname, (GLint*)(outptr_params.get()), size_params);
6966 			this->glGetQueryiv(var_target, var_pname, (GLint*)(outptr_params.get()));
6967 			outptr_params.flush();
6968 			if (useChecksum) {
6969 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
6970 			}
6971 			stream->flush();
6972 			SET_LASTCALL("glGetQueryiv");
6973 			android::base::endTrace();
6974 			break;
6975 		}
6976 		case OP_glGetQueryObjectuiv: {
6977 			android::base::beginTrace("glGetQueryObjectuiv decode");
6978 			GLuint var_query = Unpack<GLuint,uint32_t>(ptr + 8);
6979 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
6980 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
6981 			if (useChecksum) {
6982 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
6983 					"gles2_decoder_context_t::decode, OP_glGetQueryObjectuiv: GL checksumCalculator failure\n");
6984 			}
6985 			size_t totalTmpSize = size_params;
6986 			totalTmpSize += checksumSize;
6987 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
6988 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
6989 			#ifdef CHECK_GL_ERRORS
6990 			GLint err = this->glGetError();
6991 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetQueryObjectuiv\n", err);
6992 			#endif
6993 			DECODER_DEBUG_LOG("gles2(%p): glGetQueryObjectuiv(query:%u pname:0x%08x params:%p(%u) )", stream, var_query, var_pname, (GLuint*)(outptr_params.get()), size_params);
6994 			this->glGetQueryObjectuiv(var_query, var_pname, (GLuint*)(outptr_params.get()));
6995 			outptr_params.flush();
6996 			if (useChecksum) {
6997 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
6998 			}
6999 			stream->flush();
7000 			SET_LASTCALL("glGetQueryObjectuiv");
7001 			android::base::endTrace();
7002 			break;
7003 		}
7004 		case OP_glIsQuery: {
7005 			android::base::beginTrace("glIsQuery decode");
7006 			GLuint var_query = Unpack<GLuint,uint32_t>(ptr + 8);
7007 			if (useChecksum) {
7008 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
7009 					"gles2_decoder_context_t::decode, OP_glIsQuery: GL checksumCalculator failure\n");
7010 			}
7011 			size_t totalTmpSize = sizeof(GLboolean);
7012 			totalTmpSize += checksumSize;
7013 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
7014 			#ifdef CHECK_GL_ERRORS
7015 			GLint err = this->glGetError();
7016 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glIsQuery\n", err);
7017 			#endif
7018 			DECODER_DEBUG_LOG("gles2(%p): glIsQuery(query:%u )", stream, var_query);
7019 			*(GLboolean *)(&tmpBuf[0]) = 			this->glIsQuery(var_query);
7020 			if (useChecksum) {
7021 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
7022 			}
7023 			stream->flush();
7024 			SET_LASTCALL("glIsQuery");
7025 			android::base::endTrace();
7026 			break;
7027 		}
7028 		case OP_glProgramParameteri: {
7029 			android::base::beginTrace("glProgramParameteri decode");
7030 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
7031 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
7032 			GLint var_value = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
7033 			if (useChecksum) {
7034 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
7035 					"gles2_decoder_context_t::decode, OP_glProgramParameteri: GL checksumCalculator failure\n");
7036 			}
7037 			#ifdef CHECK_GL_ERRORS
7038 			GLint err = this->glGetError();
7039 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramParameteri\n", err);
7040 			#endif
7041 			DECODER_DEBUG_LOG("gles2(%p): glProgramParameteri(program:%u pname:0x%08x value:%d )", stream, var_program, var_pname, var_value);
7042 			this->glProgramParameteri_dec(this, var_program, var_pname, var_value);
7043 			SET_LASTCALL("glProgramParameteri");
7044 			android::base::endTrace();
7045 			break;
7046 		}
7047 		case OP_glProgramBinary: {
7048 			android::base::beginTrace("glProgramBinary decode");
7049 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
7050 			GLenum var_binaryFormat = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
7051 			uint32_t size_binary __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
7052 			InputBuffer inptr_binary(ptr + 8 + 4 + 4 + 4, size_binary);
7053 			GLsizei var_length = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_binary);
7054 			if (useChecksum) {
7055 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_binary + 4, ptr + 8 + 4 + 4 + 4 + size_binary + 4, checksumSize,
7056 					"gles2_decoder_context_t::decode, OP_glProgramBinary: GL checksumCalculator failure\n");
7057 			}
7058 			#ifdef CHECK_GL_ERRORS
7059 			GLint err = this->glGetError();
7060 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramBinary\n", err);
7061 			#endif
7062 			DECODER_DEBUG_LOG("gles2(%p): glProgramBinary(program:%u binaryFormat:0x%08x binary:%p(%u) length:%d )", stream, var_program, var_binaryFormat, (const void*)(inptr_binary.get()), size_binary, var_length);
7063 			this->glProgramBinary_dec(this, var_program, var_binaryFormat, (const void*)(inptr_binary.get()), var_length);
7064 			SET_LASTCALL("glProgramBinary");
7065 			android::base::endTrace();
7066 			break;
7067 		}
7068 		case OP_glGetProgramBinary: {
7069 			android::base::beginTrace("glGetProgramBinary decode");
7070 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
7071 			GLsizei var_bufSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
7072 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
7073 			uint32_t size_binaryFormat __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
7074 			uint32_t size_binary __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
7075 			if (useChecksum) {
7076 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
7077 					"gles2_decoder_context_t::decode, OP_glGetProgramBinary: GL checksumCalculator failure\n");
7078 			}
7079 			size_t totalTmpSize = size_length;
7080 			totalTmpSize += size_binaryFormat;
7081 			totalTmpSize += size_binary;
7082 			totalTmpSize += checksumSize;
7083 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
7084 			OutputBuffer outptr_length(&tmpBuf[0], size_length);
7085 			OutputBuffer outptr_binaryFormat(&tmpBuf[0 + size_length], size_binaryFormat);
7086 			OutputBuffer outptr_binary(&tmpBuf[0 + size_length + size_binaryFormat], size_binary);
7087 			#ifdef CHECK_GL_ERRORS
7088 			GLint err = this->glGetError();
7089 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetProgramBinary\n", err);
7090 			#endif
7091 			DECODER_DEBUG_LOG("gles2(%p): glGetProgramBinary(program:%u bufSize:%d length:%p(%u) binaryFormat:%p(%u) binary:%p(%u) )", stream, var_program, var_bufSize, (GLsizei*)(outptr_length.get()), size_length, (GLenum*)(outptr_binaryFormat.get()), size_binaryFormat, (void*)(outptr_binary.get()), size_binary);
7092 			this->glGetProgramBinary_dec(this, var_program, var_bufSize, size_length == 0 ? nullptr : (GLsizei*)(outptr_length.get()), (GLenum*)(outptr_binaryFormat.get()), (void*)(outptr_binary.get()));
7093 			outptr_length.flush();
7094 			outptr_binaryFormat.flush();
7095 			outptr_binary.flush();
7096 			if (useChecksum) {
7097 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
7098 			}
7099 			stream->flush();
7100 			SET_LASTCALL("glGetProgramBinary");
7101 			android::base::endTrace();
7102 			break;
7103 		}
7104 		case OP_glGetFragDataLocation: {
7105 			android::base::beginTrace("glGetFragDataLocation decode");
7106 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
7107 			uint32_t size_name __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
7108 			InputBuffer inptr_name(ptr + 8 + 4 + 4, size_name);
7109 			if (useChecksum) {
7110 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_name, ptr + 8 + 4 + 4 + size_name, checksumSize,
7111 					"gles2_decoder_context_t::decode, OP_glGetFragDataLocation: GL checksumCalculator failure\n");
7112 			}
7113 			size_t totalTmpSize = sizeof(GLint);
7114 			totalTmpSize += checksumSize;
7115 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
7116 			#ifdef CHECK_GL_ERRORS
7117 			GLint err = this->glGetError();
7118 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetFragDataLocation\n", err);
7119 			#endif
7120 			DECODER_DEBUG_LOG("gles2(%p): glGetFragDataLocation(program:%u name:%p(%u) )", stream, var_program, (const char*)(inptr_name.get()), size_name);
7121 			*(GLint *)(&tmpBuf[0]) = 			this->glGetFragDataLocation_dec(this, var_program, (const char*)(inptr_name.get()));
7122 			if (useChecksum) {
7123 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
7124 			}
7125 			stream->flush();
7126 			SET_LASTCALL("glGetFragDataLocation");
7127 			android::base::endTrace();
7128 			break;
7129 		}
7130 		case OP_glGetInteger64v: {
7131 			android::base::beginTrace("glGetInteger64v decode");
7132 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8);
7133 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
7134 			if (useChecksum) {
7135 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
7136 					"gles2_decoder_context_t::decode, OP_glGetInteger64v: GL checksumCalculator failure\n");
7137 			}
7138 			size_t totalTmpSize = size_data;
7139 			totalTmpSize += checksumSize;
7140 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
7141 			OutputBuffer outptr_data(&tmpBuf[0], size_data);
7142 			#ifdef CHECK_GL_ERRORS
7143 			GLint err = this->glGetError();
7144 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetInteger64v\n", err);
7145 			#endif
7146 			DECODER_DEBUG_LOG("gles2(%p): glGetInteger64v(pname:0x%08x data:%p(%u) )", stream, var_pname, (GLint64*)(outptr_data.get()), size_data);
7147 			this->glGetInteger64v(var_pname, (GLint64*)(outptr_data.get()));
7148 			outptr_data.flush();
7149 			if (useChecksum) {
7150 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
7151 			}
7152 			stream->flush();
7153 			SET_LASTCALL("glGetInteger64v");
7154 			android::base::endTrace();
7155 			break;
7156 		}
7157 		case OP_glGetIntegeri_v: {
7158 			android::base::beginTrace("glGetIntegeri_v decode");
7159 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
7160 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
7161 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
7162 			if (useChecksum) {
7163 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
7164 					"gles2_decoder_context_t::decode, OP_glGetIntegeri_v: GL checksumCalculator failure\n");
7165 			}
7166 			size_t totalTmpSize = size_data;
7167 			totalTmpSize += checksumSize;
7168 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
7169 			OutputBuffer outptr_data(&tmpBuf[0], size_data);
7170 			#ifdef CHECK_GL_ERRORS
7171 			GLint err = this->glGetError();
7172 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetIntegeri_v\n", err);
7173 			#endif
7174 			DECODER_DEBUG_LOG("gles2(%p): glGetIntegeri_v(target:0x%08x index:%u data:%p(%u) )", stream, var_target, var_index, (GLint*)(outptr_data.get()), size_data);
7175 			this->glGetIntegeri_v(var_target, var_index, (GLint*)(outptr_data.get()));
7176 			outptr_data.flush();
7177 			if (useChecksum) {
7178 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
7179 			}
7180 			stream->flush();
7181 			SET_LASTCALL("glGetIntegeri_v");
7182 			android::base::endTrace();
7183 			break;
7184 		}
7185 		case OP_glGetInteger64i_v: {
7186 			android::base::beginTrace("glGetInteger64i_v decode");
7187 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
7188 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
7189 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
7190 			if (useChecksum) {
7191 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
7192 					"gles2_decoder_context_t::decode, OP_glGetInteger64i_v: GL checksumCalculator failure\n");
7193 			}
7194 			size_t totalTmpSize = size_data;
7195 			totalTmpSize += checksumSize;
7196 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
7197 			OutputBuffer outptr_data(&tmpBuf[0], size_data);
7198 			#ifdef CHECK_GL_ERRORS
7199 			GLint err = this->glGetError();
7200 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetInteger64i_v\n", err);
7201 			#endif
7202 			DECODER_DEBUG_LOG("gles2(%p): glGetInteger64i_v(target:0x%08x index:%u data:%p(%u) )", stream, var_target, var_index, (GLint64*)(outptr_data.get()), size_data);
7203 			this->glGetInteger64i_v(var_target, var_index, (GLint64*)(outptr_data.get()));
7204 			outptr_data.flush();
7205 			if (useChecksum) {
7206 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
7207 			}
7208 			stream->flush();
7209 			SET_LASTCALL("glGetInteger64i_v");
7210 			android::base::endTrace();
7211 			break;
7212 		}
7213 		case OP_glTexImage3D: {
7214 			android::base::beginTrace("glTexImage3D decode");
7215 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
7216 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7217 			GLint var_internalFormat = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
7218 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
7219 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
7220 			GLsizei var_depth = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
7221 			GLint var_border = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
7222 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7223 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7224 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7225 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, size_data);
7226 			if (useChecksum) {
7227 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_data, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_data, checksumSize,
7228 					"gles2_decoder_context_t::decode, OP_glTexImage3D: GL checksumCalculator failure\n");
7229 			}
7230 			#ifdef CHECK_GL_ERRORS
7231 			GLint err = this->glGetError();
7232 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexImage3D\n", err);
7233 			#endif
7234 			DECODER_DEBUG_LOG("gles2(%p): glTexImage3D(target:0x%08x level:%d internalFormat:%d width:%d height:%d depth:%d border:%d format:0x%08x type:0x%08x data:%p(%u) )", stream, var_target, var_level, var_internalFormat, var_width, var_height, var_depth, var_border, var_format, var_type, (const GLvoid*)(inptr_data.get()), size_data);
7235 			this->glTexImage3D(var_target, var_level, var_internalFormat, var_width, var_height, var_depth, var_border, var_format, var_type, size_data == 0 ? nullptr : (const GLvoid*)(inptr_data.get()));
7236 			SET_LASTCALL("glTexImage3D");
7237 			android::base::endTrace();
7238 			break;
7239 		}
7240 		case OP_glTexImage3DOffsetAEMU: {
7241 			android::base::beginTrace("glTexImage3DOffsetAEMU decode");
7242 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
7243 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7244 			GLint var_internalFormat = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
7245 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
7246 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
7247 			GLsizei var_depth = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
7248 			GLint var_border = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
7249 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7250 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7251 			GLuint var_offset = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7252 			if (useChecksum) {
7253 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
7254 					"gles2_decoder_context_t::decode, OP_glTexImage3DOffsetAEMU: GL checksumCalculator failure\n");
7255 			}
7256 			#ifdef CHECK_GL_ERRORS
7257 			GLint err = this->glGetError();
7258 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexImage3DOffsetAEMU\n", err);
7259 			#endif
7260 			DECODER_DEBUG_LOG("gles2(%p): glTexImage3DOffsetAEMU(target:0x%08x level:%d internalFormat:%d width:%d height:%d depth:%d border:%d format:0x%08x type:0x%08x offset:%u )", stream, var_target, var_level, var_internalFormat, var_width, var_height, var_depth, var_border, var_format, var_type, var_offset);
7261 			this->glTexImage3DOffsetAEMU(this, var_target, var_level, var_internalFormat, var_width, var_height, var_depth, var_border, var_format, var_type, var_offset);
7262 			SET_LASTCALL("glTexImage3DOffsetAEMU");
7263 			android::base::endTrace();
7264 			break;
7265 		}
7266 		case OP_glTexStorage3D: {
7267 			android::base::beginTrace("glTexStorage3D decode");
7268 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
7269 			GLsizei var_levels = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
7270 			GLenum var_internalformat = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
7271 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
7272 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
7273 			GLsizei var_depth = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
7274 			if (useChecksum) {
7275 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
7276 					"gles2_decoder_context_t::decode, OP_glTexStorage3D: GL checksumCalculator failure\n");
7277 			}
7278 			#ifdef CHECK_GL_ERRORS
7279 			GLint err = this->glGetError();
7280 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexStorage3D\n", err);
7281 			#endif
7282 			DECODER_DEBUG_LOG("gles2(%p): glTexStorage3D(target:0x%08x levels:%d internalformat:0x%08x width:%d height:%d depth:%d )", stream, var_target, var_levels, var_internalformat, var_width, var_height, var_depth);
7283 			this->glTexStorage3D(var_target, var_levels, var_internalformat, var_width, var_height, var_depth);
7284 			SET_LASTCALL("glTexStorage3D");
7285 			android::base::endTrace();
7286 			break;
7287 		}
7288 		case OP_glTexSubImage3D: {
7289 			android::base::beginTrace("glTexSubImage3D decode");
7290 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
7291 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7292 			GLint var_xoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
7293 			GLint var_yoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
7294 			GLint var_zoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
7295 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
7296 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
7297 			GLsizei var_depth = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7298 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7299 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7300 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7301 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, size_data);
7302 			if (useChecksum) {
7303 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_data, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_data, checksumSize,
7304 					"gles2_decoder_context_t::decode, OP_glTexSubImage3D: GL checksumCalculator failure\n");
7305 			}
7306 			#ifdef CHECK_GL_ERRORS
7307 			GLint err = this->glGetError();
7308 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexSubImage3D\n", err);
7309 			#endif
7310 			DECODER_DEBUG_LOG("gles2(%p): glTexSubImage3D(target:0x%08x level:%d xoffset:%d yoffset:%d zoffset:%d width:%d height:%d depth:%d format:0x%08x type:0x%08x data:%p(%u) )", stream, var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_width, var_height, var_depth, var_format, var_type, (const GLvoid*)(inptr_data.get()), size_data);
7311 			this->glTexSubImage3D(var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_width, var_height, var_depth, var_format, var_type, size_data == 0 ? nullptr : (const GLvoid*)(inptr_data.get()));
7312 			SET_LASTCALL("glTexSubImage3D");
7313 			android::base::endTrace();
7314 			break;
7315 		}
7316 		case OP_glTexSubImage3DOffsetAEMU: {
7317 			android::base::beginTrace("glTexSubImage3DOffsetAEMU decode");
7318 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
7319 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7320 			GLint var_xoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
7321 			GLint var_yoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
7322 			GLint var_zoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
7323 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
7324 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
7325 			GLsizei var_depth = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7326 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7327 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7328 			GLuint var_offset = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7329 			if (useChecksum) {
7330 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
7331 					"gles2_decoder_context_t::decode, OP_glTexSubImage3DOffsetAEMU: GL checksumCalculator failure\n");
7332 			}
7333 			#ifdef CHECK_GL_ERRORS
7334 			GLint err = this->glGetError();
7335 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexSubImage3DOffsetAEMU\n", err);
7336 			#endif
7337 			DECODER_DEBUG_LOG("gles2(%p): glTexSubImage3DOffsetAEMU(target:0x%08x level:%d xoffset:%d yoffset:%d zoffset:%d width:%d height:%d depth:%d format:0x%08x type:0x%08x offset:%u )", stream, var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_width, var_height, var_depth, var_format, var_type, var_offset);
7338 			this->glTexSubImage3DOffsetAEMU(this, var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_width, var_height, var_depth, var_format, var_type, var_offset);
7339 			SET_LASTCALL("glTexSubImage3DOffsetAEMU");
7340 			android::base::endTrace();
7341 			break;
7342 		}
7343 		case OP_glCompressedTexImage3D: {
7344 			android::base::beginTrace("glCompressedTexImage3D decode");
7345 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
7346 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7347 			GLenum var_internalformat = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
7348 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
7349 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
7350 			GLsizei var_depth = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
7351 			GLint var_border = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
7352 			GLsizei var_imageSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7353 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7354 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, size_data);
7355 			if (useChecksum) {
7356 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_data, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_data, checksumSize,
7357 					"gles2_decoder_context_t::decode, OP_glCompressedTexImage3D: GL checksumCalculator failure\n");
7358 			}
7359 			#ifdef CHECK_GL_ERRORS
7360 			GLint err = this->glGetError();
7361 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCompressedTexImage3D\n", err);
7362 			#endif
7363 			DECODER_DEBUG_LOG("gles2(%p): glCompressedTexImage3D(target:0x%08x level:%d internalformat:0x%08x width:%d height:%d depth:%d border:%d imageSize:%d data:%p(%u) )", stream, var_target, var_level, var_internalformat, var_width, var_height, var_depth, var_border, var_imageSize, (const GLvoid*)(inptr_data.get()), size_data);
7364 			this->glCompressedTexImage3D(var_target, var_level, var_internalformat, var_width, var_height, var_depth, var_border, var_imageSize, size_data == 0 ? nullptr : (const GLvoid*)(inptr_data.get()));
7365 			SET_LASTCALL("glCompressedTexImage3D");
7366 			android::base::endTrace();
7367 			break;
7368 		}
7369 		case OP_glCompressedTexImage3DOffsetAEMU: {
7370 			android::base::beginTrace("glCompressedTexImage3DOffsetAEMU decode");
7371 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
7372 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7373 			GLenum var_internalformat = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
7374 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
7375 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
7376 			GLsizei var_depth = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
7377 			GLint var_border = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
7378 			GLsizei var_imageSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7379 			GLuint var_offset = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7380 			if (useChecksum) {
7381 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
7382 					"gles2_decoder_context_t::decode, OP_glCompressedTexImage3DOffsetAEMU: GL checksumCalculator failure\n");
7383 			}
7384 			#ifdef CHECK_GL_ERRORS
7385 			GLint err = this->glGetError();
7386 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCompressedTexImage3DOffsetAEMU\n", err);
7387 			#endif
7388 			DECODER_DEBUG_LOG("gles2(%p): glCompressedTexImage3DOffsetAEMU(target:0x%08x level:%d internalformat:0x%08x width:%d height:%d depth:%d border:%d imageSize:%d offset:%u )", stream, var_target, var_level, var_internalformat, var_width, var_height, var_depth, var_border, var_imageSize, var_offset);
7389 			this->glCompressedTexImage3DOffsetAEMU(this, var_target, var_level, var_internalformat, var_width, var_height, var_depth, var_border, var_imageSize, var_offset);
7390 			SET_LASTCALL("glCompressedTexImage3DOffsetAEMU");
7391 			android::base::endTrace();
7392 			break;
7393 		}
7394 		case OP_glCompressedTexSubImage3D: {
7395 			android::base::beginTrace("glCompressedTexSubImage3D decode");
7396 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
7397 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7398 			GLint var_xoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
7399 			GLint var_yoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
7400 			GLint var_zoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
7401 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
7402 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
7403 			GLsizei var_depth = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7404 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7405 			GLsizei var_imageSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7406 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7407 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, size_data);
7408 			if (useChecksum) {
7409 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_data, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + size_data, checksumSize,
7410 					"gles2_decoder_context_t::decode, OP_glCompressedTexSubImage3D: GL checksumCalculator failure\n");
7411 			}
7412 			#ifdef CHECK_GL_ERRORS
7413 			GLint err = this->glGetError();
7414 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCompressedTexSubImage3D\n", err);
7415 			#endif
7416 			DECODER_DEBUG_LOG("gles2(%p): glCompressedTexSubImage3D(target:0x%08x level:%d xoffset:%d yoffset:%d zoffset:%d width:%d height:%d depth:%d format:0x%08x imageSize:%d data:%p(%u) )", stream, var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_width, var_height, var_depth, var_format, var_imageSize, (const GLvoid*)(inptr_data.get()), size_data);
7417 			this->glCompressedTexSubImage3D(var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_width, var_height, var_depth, var_format, var_imageSize, size_data == 0 ? nullptr : (const GLvoid*)(inptr_data.get()));
7418 			SET_LASTCALL("glCompressedTexSubImage3D");
7419 			android::base::endTrace();
7420 			break;
7421 		}
7422 		case OP_glCompressedTexSubImage3DOffsetAEMU: {
7423 			android::base::beginTrace("glCompressedTexSubImage3DOffsetAEMU decode");
7424 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
7425 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7426 			GLint var_xoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
7427 			GLint var_yoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
7428 			GLint var_zoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
7429 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
7430 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
7431 			GLsizei var_depth = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7432 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7433 			GLsizei var_imageSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7434 			GLuint var_data = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7435 			if (useChecksum) {
7436 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
7437 					"gles2_decoder_context_t::decode, OP_glCompressedTexSubImage3DOffsetAEMU: GL checksumCalculator failure\n");
7438 			}
7439 			#ifdef CHECK_GL_ERRORS
7440 			GLint err = this->glGetError();
7441 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCompressedTexSubImage3DOffsetAEMU\n", err);
7442 			#endif
7443 			DECODER_DEBUG_LOG("gles2(%p): glCompressedTexSubImage3DOffsetAEMU(target:0x%08x level:%d xoffset:%d yoffset:%d zoffset:%d width:%d height:%d depth:%d format:0x%08x imageSize:%d data:%u )", stream, var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_width, var_height, var_depth, var_format, var_imageSize, var_data);
7444 			this->glCompressedTexSubImage3DOffsetAEMU(this, var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_width, var_height, var_depth, var_format, var_imageSize, var_data);
7445 			SET_LASTCALL("glCompressedTexSubImage3DOffsetAEMU");
7446 			android::base::endTrace();
7447 			break;
7448 		}
7449 		case OP_glCopyTexSubImage3D: {
7450 			android::base::beginTrace("glCopyTexSubImage3D decode");
7451 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
7452 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7453 			GLint var_xoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
7454 			GLint var_yoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
7455 			GLint var_zoffset = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
7456 			GLint var_x = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
7457 			GLint var_y = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
7458 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7459 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
7460 			if (useChecksum) {
7461 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
7462 					"gles2_decoder_context_t::decode, OP_glCopyTexSubImage3D: GL checksumCalculator failure\n");
7463 			}
7464 			#ifdef CHECK_GL_ERRORS
7465 			GLint err = this->glGetError();
7466 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCopyTexSubImage3D\n", err);
7467 			#endif
7468 			DECODER_DEBUG_LOG("gles2(%p): glCopyTexSubImage3D(target:0x%08x level:%d xoffset:%d yoffset:%d zoffset:%d x:%d y:%d width:%d height:%d )", stream, var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_x, var_y, var_width, var_height);
7469 			this->glCopyTexSubImage3D(var_target, var_level, var_xoffset, var_yoffset, var_zoffset, var_x, var_y, var_width, var_height);
7470 			SET_LASTCALL("glCopyTexSubImage3D");
7471 			android::base::endTrace();
7472 			break;
7473 		}
7474 		case OP_glGetStringi: {
7475 			android::base::beginTrace("glGetStringi decode");
7476 			GLenum var_name = Unpack<GLenum,uint32_t>(ptr + 8);
7477 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
7478 			if (useChecksum) {
7479 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
7480 					"gles2_decoder_context_t::decode, OP_glGetStringi: GL checksumCalculator failure\n");
7481 			}
7482 			#ifdef CHECK_GL_ERRORS
7483 			GLint err = this->glGetError();
7484 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetStringi\n", err);
7485 			#endif
7486 			DECODER_DEBUG_LOG("gles2(%p): glGetStringi(name:0x%08x index:%u )", stream, var_name, var_index);
7487 			this->glGetStringi(var_name, var_index);
7488 			SET_LASTCALL("glGetStringi");
7489 			android::base::endTrace();
7490 			break;
7491 		}
7492 		case OP_glGetBooleani_v: {
7493 			android::base::beginTrace("glGetBooleani_v decode");
7494 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
7495 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
7496 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
7497 			if (useChecksum) {
7498 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
7499 					"gles2_decoder_context_t::decode, OP_glGetBooleani_v: GL checksumCalculator failure\n");
7500 			}
7501 			size_t totalTmpSize = size_data;
7502 			totalTmpSize += checksumSize;
7503 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
7504 			OutputBuffer outptr_data(&tmpBuf[0], size_data);
7505 			#ifdef CHECK_GL_ERRORS
7506 			GLint err = this->glGetError();
7507 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetBooleani_v\n", err);
7508 			#endif
7509 			DECODER_DEBUG_LOG("gles2(%p): glGetBooleani_v(target:0x%08x index:%u data:%p(%u) )", stream, var_target, var_index, (GLboolean*)(outptr_data.get()), size_data);
7510 			this->glGetBooleani_v(var_target, var_index, (GLboolean*)(outptr_data.get()));
7511 			outptr_data.flush();
7512 			if (useChecksum) {
7513 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
7514 			}
7515 			stream->flush();
7516 			SET_LASTCALL("glGetBooleani_v");
7517 			android::base::endTrace();
7518 			break;
7519 		}
7520 		case OP_glMemoryBarrier: {
7521 			android::base::beginTrace("glMemoryBarrier decode");
7522 			GLbitfield var_barriers = Unpack<GLbitfield,uint32_t>(ptr + 8);
7523 			if (useChecksum) {
7524 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
7525 					"gles2_decoder_context_t::decode, OP_glMemoryBarrier: GL checksumCalculator failure\n");
7526 			}
7527 			#ifdef CHECK_GL_ERRORS
7528 			GLint err = this->glGetError();
7529 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glMemoryBarrier\n", err);
7530 			#endif
7531 			DECODER_DEBUG_LOG("gles2(%p): glMemoryBarrier(barriers:0x%08x )", stream, var_barriers);
7532 			this->glMemoryBarrier(var_barriers);
7533 			SET_LASTCALL("glMemoryBarrier");
7534 			android::base::endTrace();
7535 			break;
7536 		}
7537 		case OP_glMemoryBarrierByRegion: {
7538 			android::base::beginTrace("glMemoryBarrierByRegion decode");
7539 			GLbitfield var_barriers = Unpack<GLbitfield,uint32_t>(ptr + 8);
7540 			if (useChecksum) {
7541 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
7542 					"gles2_decoder_context_t::decode, OP_glMemoryBarrierByRegion: GL checksumCalculator failure\n");
7543 			}
7544 			#ifdef CHECK_GL_ERRORS
7545 			GLint err = this->glGetError();
7546 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glMemoryBarrierByRegion\n", err);
7547 			#endif
7548 			DECODER_DEBUG_LOG("gles2(%p): glMemoryBarrierByRegion(barriers:0x%08x )", stream, var_barriers);
7549 			this->glMemoryBarrierByRegion(var_barriers);
7550 			SET_LASTCALL("glMemoryBarrierByRegion");
7551 			android::base::endTrace();
7552 			break;
7553 		}
7554 		case OP_glGenProgramPipelines: {
7555 			android::base::beginTrace("glGenProgramPipelines decode");
7556 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
7557 			uint32_t size_pipelines __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
7558 			if (useChecksum) {
7559 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
7560 					"gles2_decoder_context_t::decode, OP_glGenProgramPipelines: GL checksumCalculator failure\n");
7561 			}
7562 			size_t totalTmpSize = size_pipelines;
7563 			totalTmpSize += checksumSize;
7564 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
7565 			OutputBuffer outptr_pipelines(&tmpBuf[0], size_pipelines);
7566 			#ifdef CHECK_GL_ERRORS
7567 			GLint err = this->glGetError();
7568 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGenProgramPipelines\n", err);
7569 			#endif
7570 			DECODER_DEBUG_LOG("gles2(%p): glGenProgramPipelines(n:%d pipelines:%p(%u) )", stream, var_n, (GLuint*)(outptr_pipelines.get()), size_pipelines);
7571 			this->glGenProgramPipelines_dec(this, var_n, (GLuint*)(outptr_pipelines.get()));
7572 			outptr_pipelines.flush();
7573 			if (useChecksum) {
7574 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
7575 			}
7576 			stream->flush();
7577 			SET_LASTCALL("glGenProgramPipelines");
7578 			android::base::endTrace();
7579 			break;
7580 		}
7581 		case OP_glDeleteProgramPipelines: {
7582 			android::base::beginTrace("glDeleteProgramPipelines decode");
7583 			GLsizei var_n = Unpack<GLsizei,uint32_t>(ptr + 8);
7584 			uint32_t size_pipelines __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
7585 			InputBuffer inptr_pipelines(ptr + 8 + 4 + 4, size_pipelines);
7586 			if (useChecksum) {
7587 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_pipelines, ptr + 8 + 4 + 4 + size_pipelines, checksumSize,
7588 					"gles2_decoder_context_t::decode, OP_glDeleteProgramPipelines: GL checksumCalculator failure\n");
7589 			}
7590 			#ifdef CHECK_GL_ERRORS
7591 			GLint err = this->glGetError();
7592 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDeleteProgramPipelines\n", err);
7593 			#endif
7594 			DECODER_DEBUG_LOG("gles2(%p): glDeleteProgramPipelines(n:%d pipelines:%p(%u) )", stream, var_n, (const GLuint*)(inptr_pipelines.get()), size_pipelines);
7595 			this->glDeleteProgramPipelines_dec(this, var_n, (const GLuint*)(inptr_pipelines.get()));
7596 			SET_LASTCALL("glDeleteProgramPipelines");
7597 			android::base::endTrace();
7598 			break;
7599 		}
7600 		case OP_glBindProgramPipeline: {
7601 			android::base::beginTrace("glBindProgramPipeline decode");
7602 			GLuint var_pipeline = Unpack<GLuint,uint32_t>(ptr + 8);
7603 			if (useChecksum) {
7604 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
7605 					"gles2_decoder_context_t::decode, OP_glBindProgramPipeline: GL checksumCalculator failure\n");
7606 			}
7607 			#ifdef CHECK_GL_ERRORS
7608 			GLint err = this->glGetError();
7609 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBindProgramPipeline\n", err);
7610 			#endif
7611 			DECODER_DEBUG_LOG("gles2(%p): glBindProgramPipeline(pipeline:%u )", stream, var_pipeline);
7612 			this->glBindProgramPipeline(var_pipeline);
7613 			SET_LASTCALL("glBindProgramPipeline");
7614 			android::base::endTrace();
7615 			break;
7616 		}
7617 		case OP_glGetProgramPipelineiv: {
7618 			android::base::beginTrace("glGetProgramPipelineiv decode");
7619 			GLuint var_pipeline = Unpack<GLuint,uint32_t>(ptr + 8);
7620 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
7621 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
7622 			if (useChecksum) {
7623 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
7624 					"gles2_decoder_context_t::decode, OP_glGetProgramPipelineiv: GL checksumCalculator failure\n");
7625 			}
7626 			size_t totalTmpSize = size_params;
7627 			totalTmpSize += checksumSize;
7628 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
7629 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
7630 			#ifdef CHECK_GL_ERRORS
7631 			GLint err = this->glGetError();
7632 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetProgramPipelineiv\n", err);
7633 			#endif
7634 			DECODER_DEBUG_LOG("gles2(%p): glGetProgramPipelineiv(pipeline:%u pname:0x%08x params:%p(%u) )", stream, var_pipeline, var_pname, (GLint*)(outptr_params.get()), size_params);
7635 			this->glGetProgramPipelineiv(var_pipeline, var_pname, (GLint*)(outptr_params.get()));
7636 			outptr_params.flush();
7637 			if (useChecksum) {
7638 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
7639 			}
7640 			stream->flush();
7641 			SET_LASTCALL("glGetProgramPipelineiv");
7642 			android::base::endTrace();
7643 			break;
7644 		}
7645 		case OP_glGetProgramPipelineInfoLog: {
7646 			android::base::beginTrace("glGetProgramPipelineInfoLog decode");
7647 			GLuint var_pipeline = Unpack<GLuint,uint32_t>(ptr + 8);
7648 			GLsizei var_bufSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
7649 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
7650 			uint32_t size_infoLog __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
7651 			if (useChecksum) {
7652 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
7653 					"gles2_decoder_context_t::decode, OP_glGetProgramPipelineInfoLog: GL checksumCalculator failure\n");
7654 			}
7655 			size_t totalTmpSize = size_length;
7656 			totalTmpSize += size_infoLog;
7657 			totalTmpSize += checksumSize;
7658 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
7659 			OutputBuffer outptr_length(&tmpBuf[0], size_length);
7660 			OutputBuffer outptr_infoLog(&tmpBuf[0 + size_length], size_infoLog);
7661 			#ifdef CHECK_GL_ERRORS
7662 			GLint err = this->glGetError();
7663 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetProgramPipelineInfoLog\n", err);
7664 			#endif
7665 			DECODER_DEBUG_LOG("gles2(%p): glGetProgramPipelineInfoLog(pipeline:%u bufSize:%d length:%p(%u) infoLog:%p(%u) )", stream, var_pipeline, var_bufSize, (GLsizei*)(outptr_length.get()), size_length, (GLchar*)(outptr_infoLog.get()), size_infoLog);
7666 			this->glGetProgramPipelineInfoLog(var_pipeline, var_bufSize, size_length == 0 ? nullptr : (GLsizei*)(outptr_length.get()), (GLchar*)(outptr_infoLog.get()));
7667 			outptr_length.flush();
7668 			outptr_infoLog.flush();
7669 			if (useChecksum) {
7670 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
7671 			}
7672 			stream->flush();
7673 			SET_LASTCALL("glGetProgramPipelineInfoLog");
7674 			android::base::endTrace();
7675 			break;
7676 		}
7677 		case OP_glValidateProgramPipeline: {
7678 			android::base::beginTrace("glValidateProgramPipeline decode");
7679 			GLuint var_pipeline = Unpack<GLuint,uint32_t>(ptr + 8);
7680 			if (useChecksum) {
7681 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
7682 					"gles2_decoder_context_t::decode, OP_glValidateProgramPipeline: GL checksumCalculator failure\n");
7683 			}
7684 			#ifdef CHECK_GL_ERRORS
7685 			GLint err = this->glGetError();
7686 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glValidateProgramPipeline\n", err);
7687 			#endif
7688 			DECODER_DEBUG_LOG("gles2(%p): glValidateProgramPipeline(pipeline:%u )", stream, var_pipeline);
7689 			this->glValidateProgramPipeline(var_pipeline);
7690 			SET_LASTCALL("glValidateProgramPipeline");
7691 			android::base::endTrace();
7692 			break;
7693 		}
7694 		case OP_glIsProgramPipeline: {
7695 			android::base::beginTrace("glIsProgramPipeline decode");
7696 			GLuint var_pipeline = Unpack<GLuint,uint32_t>(ptr + 8);
7697 			if (useChecksum) {
7698 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
7699 					"gles2_decoder_context_t::decode, OP_glIsProgramPipeline: GL checksumCalculator failure\n");
7700 			}
7701 			size_t totalTmpSize = sizeof(GLboolean);
7702 			totalTmpSize += checksumSize;
7703 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
7704 			#ifdef CHECK_GL_ERRORS
7705 			GLint err = this->glGetError();
7706 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glIsProgramPipeline\n", err);
7707 			#endif
7708 			DECODER_DEBUG_LOG("gles2(%p): glIsProgramPipeline(pipeline:%u )", stream, var_pipeline);
7709 			*(GLboolean *)(&tmpBuf[0]) = 			this->glIsProgramPipeline(var_pipeline);
7710 			if (useChecksum) {
7711 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
7712 			}
7713 			stream->flush();
7714 			SET_LASTCALL("glIsProgramPipeline");
7715 			android::base::endTrace();
7716 			break;
7717 		}
7718 		case OP_glUseProgramStages: {
7719 			android::base::beginTrace("glUseProgramStages decode");
7720 			GLuint var_pipeline = Unpack<GLuint,uint32_t>(ptr + 8);
7721 			GLbitfield var_stages = Unpack<GLbitfield,uint32_t>(ptr + 8 + 4);
7722 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
7723 			if (useChecksum) {
7724 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
7725 					"gles2_decoder_context_t::decode, OP_glUseProgramStages: GL checksumCalculator failure\n");
7726 			}
7727 			#ifdef CHECK_GL_ERRORS
7728 			GLint err = this->glGetError();
7729 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUseProgramStages\n", err);
7730 			#endif
7731 			DECODER_DEBUG_LOG("gles2(%p): glUseProgramStages(pipeline:%u stages:0x%08x program:%u )", stream, var_pipeline, var_stages, var_program);
7732 			this->glUseProgramStages_dec(this, var_pipeline, var_stages, var_program);
7733 			SET_LASTCALL("glUseProgramStages");
7734 			android::base::endTrace();
7735 			break;
7736 		}
7737 		case OP_glActiveShaderProgram: {
7738 			android::base::beginTrace("glActiveShaderProgram decode");
7739 			GLuint var_pipeline = Unpack<GLuint,uint32_t>(ptr + 8);
7740 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
7741 			if (useChecksum) {
7742 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
7743 					"gles2_decoder_context_t::decode, OP_glActiveShaderProgram: GL checksumCalculator failure\n");
7744 			}
7745 			#ifdef CHECK_GL_ERRORS
7746 			GLint err = this->glGetError();
7747 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glActiveShaderProgram\n", err);
7748 			#endif
7749 			DECODER_DEBUG_LOG("gles2(%p): glActiveShaderProgram(pipeline:%u program:%u )", stream, var_pipeline, var_program);
7750 			this->glActiveShaderProgram_dec(this, var_pipeline, var_program);
7751 			SET_LASTCALL("glActiveShaderProgram");
7752 			android::base::endTrace();
7753 			break;
7754 		}
7755 		case OP_glCreateShaderProgramv: {
7756 			android::base::beginTrace("glCreateShaderProgramv decode");
7757 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8);
7758 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
7759 			uint32_t size_strings __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
7760 			InputBuffer inptr_strings(ptr + 8 + 4 + 4 + 4, size_strings);
7761 			if (useChecksum) {
7762 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_strings, ptr + 8 + 4 + 4 + 4 + size_strings, checksumSize,
7763 					"gles2_decoder_context_t::decode, OP_glCreateShaderProgramv: GL checksumCalculator failure\n");
7764 			}
7765 			size_t totalTmpSize = sizeof(GLuint);
7766 			totalTmpSize += checksumSize;
7767 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
7768 			#ifdef CHECK_GL_ERRORS
7769 			GLint err = this->glGetError();
7770 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCreateShaderProgramv\n", err);
7771 			#endif
7772 			DECODER_DEBUG_LOG("gles2(%p): glCreateShaderProgramv(type:0x%08x count:%d strings:%p(%u) )", stream, var_type, var_count, (const char**)(inptr_strings.get()), size_strings);
7773 			*(GLuint *)(&tmpBuf[0]) = 			this->glCreateShaderProgramv(var_type, var_count, (const char**)(inptr_strings.get()));
7774 			if (useChecksum) {
7775 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
7776 			}
7777 			stream->flush();
7778 			SET_LASTCALL("glCreateShaderProgramv");
7779 			android::base::endTrace();
7780 			break;
7781 		}
7782 		case OP_glCreateShaderProgramvAEMU: {
7783 			android::base::beginTrace("glCreateShaderProgramvAEMU decode");
7784 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8);
7785 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
7786 			uint32_t size_packedStrings __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
7787 			InputBuffer inptr_packedStrings(ptr + 8 + 4 + 4 + 4, size_packedStrings);
7788 			GLuint var_packedLen = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_packedStrings);
7789 			if (useChecksum) {
7790 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_packedStrings + 4, ptr + 8 + 4 + 4 + 4 + size_packedStrings + 4, checksumSize,
7791 					"gles2_decoder_context_t::decode, OP_glCreateShaderProgramvAEMU: GL checksumCalculator failure\n");
7792 			}
7793 			size_t totalTmpSize = sizeof(GLuint);
7794 			totalTmpSize += checksumSize;
7795 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
7796 			#ifdef CHECK_GL_ERRORS
7797 			GLint err = this->glGetError();
7798 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glCreateShaderProgramvAEMU\n", err);
7799 			#endif
7800 			DECODER_DEBUG_LOG("gles2(%p): glCreateShaderProgramvAEMU(type:0x%08x count:%d packedStrings:%p(%u) packedLen:%u )", stream, var_type, var_count, (const char*)(inptr_packedStrings.get()), size_packedStrings, var_packedLen);
7801 			*(GLuint *)(&tmpBuf[0]) = 			this->glCreateShaderProgramvAEMU(this, var_type, var_count, (const char*)(inptr_packedStrings.get()), var_packedLen);
7802 			if (useChecksum) {
7803 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
7804 			}
7805 			stream->flush();
7806 			SET_LASTCALL("glCreateShaderProgramvAEMU");
7807 			android::base::endTrace();
7808 			break;
7809 		}
7810 		case OP_glProgramUniform1f: {
7811 			android::base::beginTrace("glProgramUniform1f decode");
7812 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
7813 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7814 			GLfloat var_v0 = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4);
7815 			if (useChecksum) {
7816 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
7817 					"gles2_decoder_context_t::decode, OP_glProgramUniform1f: GL checksumCalculator failure\n");
7818 			}
7819 			#ifdef CHECK_GL_ERRORS
7820 			GLint err = this->glGetError();
7821 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform1f\n", err);
7822 			#endif
7823 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform1f(program:%u location:%d v0:%f )", stream, var_program, var_location, var_v0);
7824 			this->glProgramUniform1f_dec(this, var_program, var_location, var_v0);
7825 			SET_LASTCALL("glProgramUniform1f");
7826 			android::base::endTrace();
7827 			break;
7828 		}
7829 		case OP_glProgramUniform2f: {
7830 			android::base::beginTrace("glProgramUniform2f decode");
7831 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
7832 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7833 			GLfloat var_v0 = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4);
7834 			GLfloat var_v1 = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4 + 4);
7835 			if (useChecksum) {
7836 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
7837 					"gles2_decoder_context_t::decode, OP_glProgramUniform2f: GL checksumCalculator failure\n");
7838 			}
7839 			#ifdef CHECK_GL_ERRORS
7840 			GLint err = this->glGetError();
7841 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform2f\n", err);
7842 			#endif
7843 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform2f(program:%u location:%d v0:%f v1:%f )", stream, var_program, var_location, var_v0, var_v1);
7844 			this->glProgramUniform2f_dec(this, var_program, var_location, var_v0, var_v1);
7845 			SET_LASTCALL("glProgramUniform2f");
7846 			android::base::endTrace();
7847 			break;
7848 		}
7849 		case OP_glProgramUniform3f: {
7850 			android::base::beginTrace("glProgramUniform3f decode");
7851 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
7852 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7853 			GLfloat var_v0 = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4);
7854 			GLfloat var_v1 = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4 + 4);
7855 			GLfloat var_v2 = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
7856 			if (useChecksum) {
7857 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
7858 					"gles2_decoder_context_t::decode, OP_glProgramUniform3f: GL checksumCalculator failure\n");
7859 			}
7860 			#ifdef CHECK_GL_ERRORS
7861 			GLint err = this->glGetError();
7862 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform3f\n", err);
7863 			#endif
7864 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform3f(program:%u location:%d v0:%f v1:%f v2:%f )", stream, var_program, var_location, var_v0, var_v1, var_v2);
7865 			this->glProgramUniform3f_dec(this, var_program, var_location, var_v0, var_v1, var_v2);
7866 			SET_LASTCALL("glProgramUniform3f");
7867 			android::base::endTrace();
7868 			break;
7869 		}
7870 		case OP_glProgramUniform4f: {
7871 			android::base::beginTrace("glProgramUniform4f decode");
7872 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
7873 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7874 			GLfloat var_v0 = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4);
7875 			GLfloat var_v1 = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4 + 4);
7876 			GLfloat var_v2 = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
7877 			GLfloat var_v3 = Unpack<GLfloat,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
7878 			if (useChecksum) {
7879 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
7880 					"gles2_decoder_context_t::decode, OP_glProgramUniform4f: GL checksumCalculator failure\n");
7881 			}
7882 			#ifdef CHECK_GL_ERRORS
7883 			GLint err = this->glGetError();
7884 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform4f\n", err);
7885 			#endif
7886 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform4f(program:%u location:%d v0:%f v1:%f v2:%f v3:%f )", stream, var_program, var_location, var_v0, var_v1, var_v2, var_v3);
7887 			this->glProgramUniform4f_dec(this, var_program, var_location, var_v0, var_v1, var_v2, var_v3);
7888 			SET_LASTCALL("glProgramUniform4f");
7889 			android::base::endTrace();
7890 			break;
7891 		}
7892 		case OP_glProgramUniform1i: {
7893 			android::base::beginTrace("glProgramUniform1i decode");
7894 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
7895 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7896 			GLint var_v0 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
7897 			if (useChecksum) {
7898 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
7899 					"gles2_decoder_context_t::decode, OP_glProgramUniform1i: GL checksumCalculator failure\n");
7900 			}
7901 			#ifdef CHECK_GL_ERRORS
7902 			GLint err = this->glGetError();
7903 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform1i\n", err);
7904 			#endif
7905 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform1i(program:%u location:%d v0:%d )", stream, var_program, var_location, var_v0);
7906 			this->glProgramUniform1i_dec(this, var_program, var_location, var_v0);
7907 			SET_LASTCALL("glProgramUniform1i");
7908 			android::base::endTrace();
7909 			break;
7910 		}
7911 		case OP_glProgramUniform2i: {
7912 			android::base::beginTrace("glProgramUniform2i decode");
7913 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
7914 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7915 			GLint var_v0 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
7916 			GLint var_v1 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
7917 			if (useChecksum) {
7918 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
7919 					"gles2_decoder_context_t::decode, OP_glProgramUniform2i: GL checksumCalculator failure\n");
7920 			}
7921 			#ifdef CHECK_GL_ERRORS
7922 			GLint err = this->glGetError();
7923 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform2i\n", err);
7924 			#endif
7925 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform2i(program:%u location:%d v0:%d v1:%d )", stream, var_program, var_location, var_v0, var_v1);
7926 			this->glProgramUniform2i_dec(this, var_program, var_location, var_v0, var_v1);
7927 			SET_LASTCALL("glProgramUniform2i");
7928 			android::base::endTrace();
7929 			break;
7930 		}
7931 		case OP_glProgramUniform3i: {
7932 			android::base::beginTrace("glProgramUniform3i decode");
7933 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
7934 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7935 			GLint var_v0 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
7936 			GLint var_v1 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
7937 			GLint var_v2 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
7938 			if (useChecksum) {
7939 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
7940 					"gles2_decoder_context_t::decode, OP_glProgramUniform3i: GL checksumCalculator failure\n");
7941 			}
7942 			#ifdef CHECK_GL_ERRORS
7943 			GLint err = this->glGetError();
7944 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform3i\n", err);
7945 			#endif
7946 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform3i(program:%u location:%d v0:%d v1:%d v2:%d )", stream, var_program, var_location, var_v0, var_v1, var_v2);
7947 			this->glProgramUniform3i_dec(this, var_program, var_location, var_v0, var_v1, var_v2);
7948 			SET_LASTCALL("glProgramUniform3i");
7949 			android::base::endTrace();
7950 			break;
7951 		}
7952 		case OP_glProgramUniform4i: {
7953 			android::base::beginTrace("glProgramUniform4i decode");
7954 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
7955 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7956 			GLint var_v0 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
7957 			GLint var_v1 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
7958 			GLint var_v2 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
7959 			GLint var_v3 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
7960 			if (useChecksum) {
7961 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
7962 					"gles2_decoder_context_t::decode, OP_glProgramUniform4i: GL checksumCalculator failure\n");
7963 			}
7964 			#ifdef CHECK_GL_ERRORS
7965 			GLint err = this->glGetError();
7966 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform4i\n", err);
7967 			#endif
7968 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform4i(program:%u location:%d v0:%d v1:%d v2:%d v3:%d )", stream, var_program, var_location, var_v0, var_v1, var_v2, var_v3);
7969 			this->glProgramUniform4i_dec(this, var_program, var_location, var_v0, var_v1, var_v2, var_v3);
7970 			SET_LASTCALL("glProgramUniform4i");
7971 			android::base::endTrace();
7972 			break;
7973 		}
7974 		case OP_glProgramUniform1ui: {
7975 			android::base::beginTrace("glProgramUniform1ui decode");
7976 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
7977 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7978 			GLuint var_v0 = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
7979 			if (useChecksum) {
7980 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
7981 					"gles2_decoder_context_t::decode, OP_glProgramUniform1ui: GL checksumCalculator failure\n");
7982 			}
7983 			#ifdef CHECK_GL_ERRORS
7984 			GLint err = this->glGetError();
7985 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform1ui\n", err);
7986 			#endif
7987 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform1ui(program:%u location:%d v0:%u )", stream, var_program, var_location, var_v0);
7988 			this->glProgramUniform1ui_dec(this, var_program, var_location, var_v0);
7989 			SET_LASTCALL("glProgramUniform1ui");
7990 			android::base::endTrace();
7991 			break;
7992 		}
7993 		case OP_glProgramUniform2ui: {
7994 			android::base::beginTrace("glProgramUniform2ui decode");
7995 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
7996 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
7997 			GLint var_v0 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
7998 			GLuint var_v1 = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4);
7999 			if (useChecksum) {
8000 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
8001 					"gles2_decoder_context_t::decode, OP_glProgramUniform2ui: GL checksumCalculator failure\n");
8002 			}
8003 			#ifdef CHECK_GL_ERRORS
8004 			GLint err = this->glGetError();
8005 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform2ui\n", err);
8006 			#endif
8007 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform2ui(program:%u location:%d v0:%d v1:%u )", stream, var_program, var_location, var_v0, var_v1);
8008 			this->glProgramUniform2ui_dec(this, var_program, var_location, var_v0, var_v1);
8009 			SET_LASTCALL("glProgramUniform2ui");
8010 			android::base::endTrace();
8011 			break;
8012 		}
8013 		case OP_glProgramUniform3ui: {
8014 			android::base::beginTrace("glProgramUniform3ui decode");
8015 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8016 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8017 			GLint var_v0 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
8018 			GLint var_v1 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
8019 			GLuint var_v2 = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
8020 			if (useChecksum) {
8021 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
8022 					"gles2_decoder_context_t::decode, OP_glProgramUniform3ui: GL checksumCalculator failure\n");
8023 			}
8024 			#ifdef CHECK_GL_ERRORS
8025 			GLint err = this->glGetError();
8026 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform3ui\n", err);
8027 			#endif
8028 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform3ui(program:%u location:%d v0:%d v1:%d v2:%u )", stream, var_program, var_location, var_v0, var_v1, var_v2);
8029 			this->glProgramUniform3ui_dec(this, var_program, var_location, var_v0, var_v1, var_v2);
8030 			SET_LASTCALL("glProgramUniform3ui");
8031 			android::base::endTrace();
8032 			break;
8033 		}
8034 		case OP_glProgramUniform4ui: {
8035 			android::base::beginTrace("glProgramUniform4ui decode");
8036 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8037 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8038 			GLint var_v0 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
8039 			GLint var_v1 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4);
8040 			GLint var_v2 = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
8041 			GLuint var_v3 = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
8042 			if (useChecksum) {
8043 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
8044 					"gles2_decoder_context_t::decode, OP_glProgramUniform4ui: GL checksumCalculator failure\n");
8045 			}
8046 			#ifdef CHECK_GL_ERRORS
8047 			GLint err = this->glGetError();
8048 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform4ui\n", err);
8049 			#endif
8050 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform4ui(program:%u location:%d v0:%d v1:%d v2:%d v3:%u )", stream, var_program, var_location, var_v0, var_v1, var_v2, var_v3);
8051 			this->glProgramUniform4ui_dec(this, var_program, var_location, var_v0, var_v1, var_v2, var_v3);
8052 			SET_LASTCALL("glProgramUniform4ui");
8053 			android::base::endTrace();
8054 			break;
8055 		}
8056 		case OP_glProgramUniform1fv: {
8057 			android::base::beginTrace("glProgramUniform1fv decode");
8058 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8059 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8060 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8061 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
8062 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 4, size_value);
8063 			if (useChecksum) {
8064 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 4 + size_value, checksumSize,
8065 					"gles2_decoder_context_t::decode, OP_glProgramUniform1fv: GL checksumCalculator failure\n");
8066 			}
8067 			#ifdef CHECK_GL_ERRORS
8068 			GLint err = this->glGetError();
8069 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform1fv\n", err);
8070 			#endif
8071 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform1fv(program:%u location:%d count:%d value:%p(%u) )", stream, var_program, var_location, var_count, (const GLfloat*)(inptr_value.get()), size_value);
8072 			this->glProgramUniform1fv_dec(this, var_program, var_location, var_count, (const GLfloat*)(inptr_value.get()));
8073 			SET_LASTCALL("glProgramUniform1fv");
8074 			android::base::endTrace();
8075 			break;
8076 		}
8077 		case OP_glProgramUniform2fv: {
8078 			android::base::beginTrace("glProgramUniform2fv decode");
8079 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8080 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8081 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8082 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
8083 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 4, size_value);
8084 			if (useChecksum) {
8085 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 4 + size_value, checksumSize,
8086 					"gles2_decoder_context_t::decode, OP_glProgramUniform2fv: GL checksumCalculator failure\n");
8087 			}
8088 			#ifdef CHECK_GL_ERRORS
8089 			GLint err = this->glGetError();
8090 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform2fv\n", err);
8091 			#endif
8092 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform2fv(program:%u location:%d count:%d value:%p(%u) )", stream, var_program, var_location, var_count, (const GLfloat*)(inptr_value.get()), size_value);
8093 			this->glProgramUniform2fv_dec(this, var_program, var_location, var_count, (const GLfloat*)(inptr_value.get()));
8094 			SET_LASTCALL("glProgramUniform2fv");
8095 			android::base::endTrace();
8096 			break;
8097 		}
8098 		case OP_glProgramUniform3fv: {
8099 			android::base::beginTrace("glProgramUniform3fv decode");
8100 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8101 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8102 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8103 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
8104 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 4, size_value);
8105 			if (useChecksum) {
8106 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 4 + size_value, checksumSize,
8107 					"gles2_decoder_context_t::decode, OP_glProgramUniform3fv: GL checksumCalculator failure\n");
8108 			}
8109 			#ifdef CHECK_GL_ERRORS
8110 			GLint err = this->glGetError();
8111 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform3fv\n", err);
8112 			#endif
8113 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform3fv(program:%u location:%d count:%d value:%p(%u) )", stream, var_program, var_location, var_count, (const GLfloat*)(inptr_value.get()), size_value);
8114 			this->glProgramUniform3fv_dec(this, var_program, var_location, var_count, (const GLfloat*)(inptr_value.get()));
8115 			SET_LASTCALL("glProgramUniform3fv");
8116 			android::base::endTrace();
8117 			break;
8118 		}
8119 		case OP_glProgramUniform4fv: {
8120 			android::base::beginTrace("glProgramUniform4fv decode");
8121 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8122 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8123 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8124 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
8125 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 4, size_value);
8126 			if (useChecksum) {
8127 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 4 + size_value, checksumSize,
8128 					"gles2_decoder_context_t::decode, OP_glProgramUniform4fv: GL checksumCalculator failure\n");
8129 			}
8130 			#ifdef CHECK_GL_ERRORS
8131 			GLint err = this->glGetError();
8132 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform4fv\n", err);
8133 			#endif
8134 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform4fv(program:%u location:%d count:%d value:%p(%u) )", stream, var_program, var_location, var_count, (const GLfloat*)(inptr_value.get()), size_value);
8135 			this->glProgramUniform4fv_dec(this, var_program, var_location, var_count, (const GLfloat*)(inptr_value.get()));
8136 			SET_LASTCALL("glProgramUniform4fv");
8137 			android::base::endTrace();
8138 			break;
8139 		}
8140 		case OP_glProgramUniform1iv: {
8141 			android::base::beginTrace("glProgramUniform1iv decode");
8142 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8143 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8144 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8145 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
8146 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 4, size_value);
8147 			if (useChecksum) {
8148 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 4 + size_value, checksumSize,
8149 					"gles2_decoder_context_t::decode, OP_glProgramUniform1iv: GL checksumCalculator failure\n");
8150 			}
8151 			#ifdef CHECK_GL_ERRORS
8152 			GLint err = this->glGetError();
8153 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform1iv\n", err);
8154 			#endif
8155 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform1iv(program:%u location:%d count:%d value:%p(%u) )", stream, var_program, var_location, var_count, (const GLint*)(inptr_value.get()), size_value);
8156 			this->glProgramUniform1iv_dec(this, var_program, var_location, var_count, (const GLint*)(inptr_value.get()));
8157 			SET_LASTCALL("glProgramUniform1iv");
8158 			android::base::endTrace();
8159 			break;
8160 		}
8161 		case OP_glProgramUniform2iv: {
8162 			android::base::beginTrace("glProgramUniform2iv decode");
8163 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8164 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8165 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8166 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
8167 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 4, size_value);
8168 			if (useChecksum) {
8169 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 4 + size_value, checksumSize,
8170 					"gles2_decoder_context_t::decode, OP_glProgramUniform2iv: GL checksumCalculator failure\n");
8171 			}
8172 			#ifdef CHECK_GL_ERRORS
8173 			GLint err = this->glGetError();
8174 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform2iv\n", err);
8175 			#endif
8176 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform2iv(program:%u location:%d count:%d value:%p(%u) )", stream, var_program, var_location, var_count, (const GLint*)(inptr_value.get()), size_value);
8177 			this->glProgramUniform2iv_dec(this, var_program, var_location, var_count, (const GLint*)(inptr_value.get()));
8178 			SET_LASTCALL("glProgramUniform2iv");
8179 			android::base::endTrace();
8180 			break;
8181 		}
8182 		case OP_glProgramUniform3iv: {
8183 			android::base::beginTrace("glProgramUniform3iv decode");
8184 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8185 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8186 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8187 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
8188 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 4, size_value);
8189 			if (useChecksum) {
8190 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 4 + size_value, checksumSize,
8191 					"gles2_decoder_context_t::decode, OP_glProgramUniform3iv: GL checksumCalculator failure\n");
8192 			}
8193 			#ifdef CHECK_GL_ERRORS
8194 			GLint err = this->glGetError();
8195 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform3iv\n", err);
8196 			#endif
8197 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform3iv(program:%u location:%d count:%d value:%p(%u) )", stream, var_program, var_location, var_count, (const GLint*)(inptr_value.get()), size_value);
8198 			this->glProgramUniform3iv_dec(this, var_program, var_location, var_count, (const GLint*)(inptr_value.get()));
8199 			SET_LASTCALL("glProgramUniform3iv");
8200 			android::base::endTrace();
8201 			break;
8202 		}
8203 		case OP_glProgramUniform4iv: {
8204 			android::base::beginTrace("glProgramUniform4iv decode");
8205 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8206 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8207 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8208 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
8209 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 4, size_value);
8210 			if (useChecksum) {
8211 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 4 + size_value, checksumSize,
8212 					"gles2_decoder_context_t::decode, OP_glProgramUniform4iv: GL checksumCalculator failure\n");
8213 			}
8214 			#ifdef CHECK_GL_ERRORS
8215 			GLint err = this->glGetError();
8216 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform4iv\n", err);
8217 			#endif
8218 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform4iv(program:%u location:%d count:%d value:%p(%u) )", stream, var_program, var_location, var_count, (const GLint*)(inptr_value.get()), size_value);
8219 			this->glProgramUniform4iv_dec(this, var_program, var_location, var_count, (const GLint*)(inptr_value.get()));
8220 			SET_LASTCALL("glProgramUniform4iv");
8221 			android::base::endTrace();
8222 			break;
8223 		}
8224 		case OP_glProgramUniform1uiv: {
8225 			android::base::beginTrace("glProgramUniform1uiv decode");
8226 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8227 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8228 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8229 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
8230 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 4, size_value);
8231 			if (useChecksum) {
8232 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 4 + size_value, checksumSize,
8233 					"gles2_decoder_context_t::decode, OP_glProgramUniform1uiv: GL checksumCalculator failure\n");
8234 			}
8235 			#ifdef CHECK_GL_ERRORS
8236 			GLint err = this->glGetError();
8237 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform1uiv\n", err);
8238 			#endif
8239 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform1uiv(program:%u location:%d count:%d value:%p(%u) )", stream, var_program, var_location, var_count, (const GLuint*)(inptr_value.get()), size_value);
8240 			this->glProgramUniform1uiv_dec(this, var_program, var_location, var_count, (const GLuint*)(inptr_value.get()));
8241 			SET_LASTCALL("glProgramUniform1uiv");
8242 			android::base::endTrace();
8243 			break;
8244 		}
8245 		case OP_glProgramUniform2uiv: {
8246 			android::base::beginTrace("glProgramUniform2uiv decode");
8247 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8248 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8249 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8250 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
8251 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 4, size_value);
8252 			if (useChecksum) {
8253 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 4 + size_value, checksumSize,
8254 					"gles2_decoder_context_t::decode, OP_glProgramUniform2uiv: GL checksumCalculator failure\n");
8255 			}
8256 			#ifdef CHECK_GL_ERRORS
8257 			GLint err = this->glGetError();
8258 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform2uiv\n", err);
8259 			#endif
8260 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform2uiv(program:%u location:%d count:%d value:%p(%u) )", stream, var_program, var_location, var_count, (const GLuint*)(inptr_value.get()), size_value);
8261 			this->glProgramUniform2uiv_dec(this, var_program, var_location, var_count, (const GLuint*)(inptr_value.get()));
8262 			SET_LASTCALL("glProgramUniform2uiv");
8263 			android::base::endTrace();
8264 			break;
8265 		}
8266 		case OP_glProgramUniform3uiv: {
8267 			android::base::beginTrace("glProgramUniform3uiv decode");
8268 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8269 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8270 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8271 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
8272 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 4, size_value);
8273 			if (useChecksum) {
8274 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 4 + size_value, checksumSize,
8275 					"gles2_decoder_context_t::decode, OP_glProgramUniform3uiv: GL checksumCalculator failure\n");
8276 			}
8277 			#ifdef CHECK_GL_ERRORS
8278 			GLint err = this->glGetError();
8279 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform3uiv\n", err);
8280 			#endif
8281 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform3uiv(program:%u location:%d count:%d value:%p(%u) )", stream, var_program, var_location, var_count, (const GLuint*)(inptr_value.get()), size_value);
8282 			this->glProgramUniform3uiv_dec(this, var_program, var_location, var_count, (const GLuint*)(inptr_value.get()));
8283 			SET_LASTCALL("glProgramUniform3uiv");
8284 			android::base::endTrace();
8285 			break;
8286 		}
8287 		case OP_glProgramUniform4uiv: {
8288 			android::base::beginTrace("glProgramUniform4uiv decode");
8289 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8290 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8291 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8292 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
8293 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 4, size_value);
8294 			if (useChecksum) {
8295 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 4 + size_value, checksumSize,
8296 					"gles2_decoder_context_t::decode, OP_glProgramUniform4uiv: GL checksumCalculator failure\n");
8297 			}
8298 			#ifdef CHECK_GL_ERRORS
8299 			GLint err = this->glGetError();
8300 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniform4uiv\n", err);
8301 			#endif
8302 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniform4uiv(program:%u location:%d count:%d value:%p(%u) )", stream, var_program, var_location, var_count, (const GLuint*)(inptr_value.get()), size_value);
8303 			this->glProgramUniform4uiv_dec(this, var_program, var_location, var_count, (const GLuint*)(inptr_value.get()));
8304 			SET_LASTCALL("glProgramUniform4uiv");
8305 			android::base::endTrace();
8306 			break;
8307 		}
8308 		case OP_glProgramUniformMatrix2fv: {
8309 			android::base::beginTrace("glProgramUniformMatrix2fv decode");
8310 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8311 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8312 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8313 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4 + 4);
8314 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1);
8315 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 1 + 4, size_value);
8316 			if (useChecksum) {
8317 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 1 + 4 + size_value, checksumSize,
8318 					"gles2_decoder_context_t::decode, OP_glProgramUniformMatrix2fv: GL checksumCalculator failure\n");
8319 			}
8320 			#ifdef CHECK_GL_ERRORS
8321 			GLint err = this->glGetError();
8322 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniformMatrix2fv\n", err);
8323 			#endif
8324 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniformMatrix2fv(program:%u location:%d count:%d transpose:%d value:%p(%u) )", stream, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
8325 			this->glProgramUniformMatrix2fv_dec(this, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
8326 			SET_LASTCALL("glProgramUniformMatrix2fv");
8327 			android::base::endTrace();
8328 			break;
8329 		}
8330 		case OP_glProgramUniformMatrix3fv: {
8331 			android::base::beginTrace("glProgramUniformMatrix3fv decode");
8332 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8333 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8334 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8335 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4 + 4);
8336 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1);
8337 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 1 + 4, size_value);
8338 			if (useChecksum) {
8339 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 1 + 4 + size_value, checksumSize,
8340 					"gles2_decoder_context_t::decode, OP_glProgramUniformMatrix3fv: GL checksumCalculator failure\n");
8341 			}
8342 			#ifdef CHECK_GL_ERRORS
8343 			GLint err = this->glGetError();
8344 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniformMatrix3fv\n", err);
8345 			#endif
8346 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniformMatrix3fv(program:%u location:%d count:%d transpose:%d value:%p(%u) )", stream, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
8347 			this->glProgramUniformMatrix3fv_dec(this, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
8348 			SET_LASTCALL("glProgramUniformMatrix3fv");
8349 			android::base::endTrace();
8350 			break;
8351 		}
8352 		case OP_glProgramUniformMatrix4fv: {
8353 			android::base::beginTrace("glProgramUniformMatrix4fv decode");
8354 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8355 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8356 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8357 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4 + 4);
8358 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1);
8359 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 1 + 4, size_value);
8360 			if (useChecksum) {
8361 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 1 + 4 + size_value, checksumSize,
8362 					"gles2_decoder_context_t::decode, OP_glProgramUniformMatrix4fv: GL checksumCalculator failure\n");
8363 			}
8364 			#ifdef CHECK_GL_ERRORS
8365 			GLint err = this->glGetError();
8366 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniformMatrix4fv\n", err);
8367 			#endif
8368 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniformMatrix4fv(program:%u location:%d count:%d transpose:%d value:%p(%u) )", stream, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
8369 			this->glProgramUniformMatrix4fv_dec(this, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
8370 			SET_LASTCALL("glProgramUniformMatrix4fv");
8371 			android::base::endTrace();
8372 			break;
8373 		}
8374 		case OP_glProgramUniformMatrix2x3fv: {
8375 			android::base::beginTrace("glProgramUniformMatrix2x3fv decode");
8376 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8377 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8378 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8379 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4 + 4);
8380 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1);
8381 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 1 + 4, size_value);
8382 			if (useChecksum) {
8383 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 1 + 4 + size_value, checksumSize,
8384 					"gles2_decoder_context_t::decode, OP_glProgramUniformMatrix2x3fv: GL checksumCalculator failure\n");
8385 			}
8386 			#ifdef CHECK_GL_ERRORS
8387 			GLint err = this->glGetError();
8388 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniformMatrix2x3fv\n", err);
8389 			#endif
8390 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniformMatrix2x3fv(program:%u location:%d count:%d transpose:%d value:%p(%u) )", stream, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
8391 			this->glProgramUniformMatrix2x3fv_dec(this, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
8392 			SET_LASTCALL("glProgramUniformMatrix2x3fv");
8393 			android::base::endTrace();
8394 			break;
8395 		}
8396 		case OP_glProgramUniformMatrix3x2fv: {
8397 			android::base::beginTrace("glProgramUniformMatrix3x2fv decode");
8398 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8399 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8400 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8401 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4 + 4);
8402 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1);
8403 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 1 + 4, size_value);
8404 			if (useChecksum) {
8405 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 1 + 4 + size_value, checksumSize,
8406 					"gles2_decoder_context_t::decode, OP_glProgramUniformMatrix3x2fv: GL checksumCalculator failure\n");
8407 			}
8408 			#ifdef CHECK_GL_ERRORS
8409 			GLint err = this->glGetError();
8410 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniformMatrix3x2fv\n", err);
8411 			#endif
8412 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniformMatrix3x2fv(program:%u location:%d count:%d transpose:%d value:%p(%u) )", stream, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
8413 			this->glProgramUniformMatrix3x2fv_dec(this, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
8414 			SET_LASTCALL("glProgramUniformMatrix3x2fv");
8415 			android::base::endTrace();
8416 			break;
8417 		}
8418 		case OP_glProgramUniformMatrix2x4fv: {
8419 			android::base::beginTrace("glProgramUniformMatrix2x4fv decode");
8420 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8421 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8422 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8423 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4 + 4);
8424 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1);
8425 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 1 + 4, size_value);
8426 			if (useChecksum) {
8427 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 1 + 4 + size_value, checksumSize,
8428 					"gles2_decoder_context_t::decode, OP_glProgramUniformMatrix2x4fv: GL checksumCalculator failure\n");
8429 			}
8430 			#ifdef CHECK_GL_ERRORS
8431 			GLint err = this->glGetError();
8432 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniformMatrix2x4fv\n", err);
8433 			#endif
8434 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniformMatrix2x4fv(program:%u location:%d count:%d transpose:%d value:%p(%u) )", stream, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
8435 			this->glProgramUniformMatrix2x4fv_dec(this, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
8436 			SET_LASTCALL("glProgramUniformMatrix2x4fv");
8437 			android::base::endTrace();
8438 			break;
8439 		}
8440 		case OP_glProgramUniformMatrix4x2fv: {
8441 			android::base::beginTrace("glProgramUniformMatrix4x2fv decode");
8442 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8443 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8444 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8445 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4 + 4);
8446 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1);
8447 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 1 + 4, size_value);
8448 			if (useChecksum) {
8449 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 1 + 4 + size_value, checksumSize,
8450 					"gles2_decoder_context_t::decode, OP_glProgramUniformMatrix4x2fv: GL checksumCalculator failure\n");
8451 			}
8452 			#ifdef CHECK_GL_ERRORS
8453 			GLint err = this->glGetError();
8454 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniformMatrix4x2fv\n", err);
8455 			#endif
8456 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniformMatrix4x2fv(program:%u location:%d count:%d transpose:%d value:%p(%u) )", stream, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
8457 			this->glProgramUniformMatrix4x2fv_dec(this, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
8458 			SET_LASTCALL("glProgramUniformMatrix4x2fv");
8459 			android::base::endTrace();
8460 			break;
8461 		}
8462 		case OP_glProgramUniformMatrix3x4fv: {
8463 			android::base::beginTrace("glProgramUniformMatrix3x4fv decode");
8464 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8465 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8466 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8467 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4 + 4);
8468 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1);
8469 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 1 + 4, size_value);
8470 			if (useChecksum) {
8471 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 1 + 4 + size_value, checksumSize,
8472 					"gles2_decoder_context_t::decode, OP_glProgramUniformMatrix3x4fv: GL checksumCalculator failure\n");
8473 			}
8474 			#ifdef CHECK_GL_ERRORS
8475 			GLint err = this->glGetError();
8476 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniformMatrix3x4fv\n", err);
8477 			#endif
8478 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniformMatrix3x4fv(program:%u location:%d count:%d transpose:%d value:%p(%u) )", stream, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
8479 			this->glProgramUniformMatrix3x4fv_dec(this, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
8480 			SET_LASTCALL("glProgramUniformMatrix3x4fv");
8481 			android::base::endTrace();
8482 			break;
8483 		}
8484 		case OP_glProgramUniformMatrix4x3fv: {
8485 			android::base::beginTrace("glProgramUniformMatrix4x3fv decode");
8486 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8487 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8488 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
8489 			GLboolean var_transpose = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4 + 4);
8490 			uint32_t size_value __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1);
8491 			InputBuffer inptr_value(ptr + 8 + 4 + 4 + 4 + 1 + 4, size_value);
8492 			if (useChecksum) {
8493 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 1 + 4 + size_value, ptr + 8 + 4 + 4 + 4 + 1 + 4 + size_value, checksumSize,
8494 					"gles2_decoder_context_t::decode, OP_glProgramUniformMatrix4x3fv: GL checksumCalculator failure\n");
8495 			}
8496 			#ifdef CHECK_GL_ERRORS
8497 			GLint err = this->glGetError();
8498 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glProgramUniformMatrix4x3fv\n", err);
8499 			#endif
8500 			DECODER_DEBUG_LOG("gles2(%p): glProgramUniformMatrix4x3fv(program:%u location:%d count:%d transpose:%d value:%p(%u) )", stream, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()), size_value);
8501 			this->glProgramUniformMatrix4x3fv_dec(this, var_program, var_location, var_count, var_transpose, (const GLfloat*)(inptr_value.get()));
8502 			SET_LASTCALL("glProgramUniformMatrix4x3fv");
8503 			android::base::endTrace();
8504 			break;
8505 		}
8506 		case OP_glGetProgramInterfaceiv: {
8507 			android::base::beginTrace("glGetProgramInterfaceiv decode");
8508 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8509 			GLenum var_programInterface = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
8510 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
8511 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
8512 			if (useChecksum) {
8513 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
8514 					"gles2_decoder_context_t::decode, OP_glGetProgramInterfaceiv: GL checksumCalculator failure\n");
8515 			}
8516 			size_t totalTmpSize = size_params;
8517 			totalTmpSize += checksumSize;
8518 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
8519 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
8520 			#ifdef CHECK_GL_ERRORS
8521 			GLint err = this->glGetError();
8522 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetProgramInterfaceiv\n", err);
8523 			#endif
8524 			DECODER_DEBUG_LOG("gles2(%p): glGetProgramInterfaceiv(program:%u programInterface:0x%08x pname:0x%08x params:%p(%u) )", stream, var_program, var_programInterface, var_pname, (GLint*)(outptr_params.get()), size_params);
8525 			this->glGetProgramInterfaceiv_dec(this, var_program, var_programInterface, var_pname, (GLint*)(outptr_params.get()));
8526 			outptr_params.flush();
8527 			if (useChecksum) {
8528 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
8529 			}
8530 			stream->flush();
8531 			SET_LASTCALL("glGetProgramInterfaceiv");
8532 			android::base::endTrace();
8533 			break;
8534 		}
8535 		case OP_glGetProgramResourceiv: {
8536 			android::base::beginTrace("glGetProgramResourceiv decode");
8537 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8538 			GLenum var_programInterface = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
8539 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
8540 			GLsizei var_propCount = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
8541 			uint32_t size_props __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
8542 			InputBuffer inptr_props(ptr + 8 + 4 + 4 + 4 + 4 + 4, size_props);
8543 			GLsizei var_bufSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + size_props);
8544 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + size_props + 4);
8545 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + size_props + 4 + 4);
8546 			if (useChecksum) {
8547 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + size_props + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + size_props + 4 + 4 + 4, checksumSize,
8548 					"gles2_decoder_context_t::decode, OP_glGetProgramResourceiv: GL checksumCalculator failure\n");
8549 			}
8550 			size_t totalTmpSize = size_length;
8551 			totalTmpSize += size_params;
8552 			totalTmpSize += checksumSize;
8553 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
8554 			OutputBuffer outptr_length(&tmpBuf[0], size_length);
8555 			OutputBuffer outptr_params(&tmpBuf[0 + size_length], size_params);
8556 			#ifdef CHECK_GL_ERRORS
8557 			GLint err = this->glGetError();
8558 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetProgramResourceiv\n", err);
8559 			#endif
8560 			DECODER_DEBUG_LOG("gles2(%p): glGetProgramResourceiv(program:%u programInterface:0x%08x index:%u propCount:%d props:%p(%u) bufSize:%d length:%p(%u) params:%p(%u) )", stream, var_program, var_programInterface, var_index, var_propCount, (const GLenum*)(inptr_props.get()), size_props, var_bufSize, (GLsizei*)(outptr_length.get()), size_length, (GLint*)(outptr_params.get()), size_params);
8561 			this->glGetProgramResourceiv_dec(this, var_program, var_programInterface, var_index, var_propCount, (const GLenum*)(inptr_props.get()), var_bufSize, size_length == 0 ? nullptr : (GLsizei*)(outptr_length.get()), (GLint*)(outptr_params.get()));
8562 			outptr_length.flush();
8563 			outptr_params.flush();
8564 			if (useChecksum) {
8565 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
8566 			}
8567 			stream->flush();
8568 			SET_LASTCALL("glGetProgramResourceiv");
8569 			android::base::endTrace();
8570 			break;
8571 		}
8572 		case OP_glGetProgramResourceIndex: {
8573 			android::base::beginTrace("glGetProgramResourceIndex decode");
8574 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8575 			GLenum var_programInterface = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
8576 			uint32_t size_name __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
8577 			InputBuffer inptr_name(ptr + 8 + 4 + 4 + 4, size_name);
8578 			if (useChecksum) {
8579 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_name, ptr + 8 + 4 + 4 + 4 + size_name, checksumSize,
8580 					"gles2_decoder_context_t::decode, OP_glGetProgramResourceIndex: GL checksumCalculator failure\n");
8581 			}
8582 			size_t totalTmpSize = sizeof(GLuint);
8583 			totalTmpSize += checksumSize;
8584 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
8585 			#ifdef CHECK_GL_ERRORS
8586 			GLint err = this->glGetError();
8587 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetProgramResourceIndex\n", err);
8588 			#endif
8589 			DECODER_DEBUG_LOG("gles2(%p): glGetProgramResourceIndex(program:%u programInterface:0x%08x name:%p(%u) )", stream, var_program, var_programInterface, (const char*)(inptr_name.get()), size_name);
8590 			*(GLuint *)(&tmpBuf[0]) = 			this->glGetProgramResourceIndex_dec(this, var_program, var_programInterface, (const char*)(inptr_name.get()));
8591 			if (useChecksum) {
8592 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
8593 			}
8594 			stream->flush();
8595 			SET_LASTCALL("glGetProgramResourceIndex");
8596 			android::base::endTrace();
8597 			break;
8598 		}
8599 		case OP_glGetProgramResourceLocation: {
8600 			android::base::beginTrace("glGetProgramResourceLocation decode");
8601 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8602 			GLenum var_programInterface = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
8603 			uint32_t size_name __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
8604 			InputBuffer inptr_name(ptr + 8 + 4 + 4 + 4, size_name);
8605 			if (useChecksum) {
8606 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_name, ptr + 8 + 4 + 4 + 4 + size_name, checksumSize,
8607 					"gles2_decoder_context_t::decode, OP_glGetProgramResourceLocation: GL checksumCalculator failure\n");
8608 			}
8609 			size_t totalTmpSize = sizeof(GLint);
8610 			totalTmpSize += checksumSize;
8611 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
8612 			#ifdef CHECK_GL_ERRORS
8613 			GLint err = this->glGetError();
8614 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetProgramResourceLocation\n", err);
8615 			#endif
8616 			DECODER_DEBUG_LOG("gles2(%p): glGetProgramResourceLocation(program:%u programInterface:0x%08x name:%p(%u) )", stream, var_program, var_programInterface, (const char*)(inptr_name.get()), size_name);
8617 			*(GLint *)(&tmpBuf[0]) = 			this->glGetProgramResourceLocation_dec(this, var_program, var_programInterface, (const char*)(inptr_name.get()));
8618 			if (useChecksum) {
8619 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
8620 			}
8621 			stream->flush();
8622 			SET_LASTCALL("glGetProgramResourceLocation");
8623 			android::base::endTrace();
8624 			break;
8625 		}
8626 		case OP_glGetProgramResourceName: {
8627 			android::base::beginTrace("glGetProgramResourceName decode");
8628 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
8629 			GLenum var_programInterface = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
8630 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
8631 			GLsizei var_bufSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
8632 			uint32_t size_length __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
8633 			uint32_t size_name __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
8634 			if (useChecksum) {
8635 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
8636 					"gles2_decoder_context_t::decode, OP_glGetProgramResourceName: GL checksumCalculator failure\n");
8637 			}
8638 			size_t totalTmpSize = size_length;
8639 			totalTmpSize += size_name;
8640 			totalTmpSize += checksumSize;
8641 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
8642 			OutputBuffer outptr_length(&tmpBuf[0], size_length);
8643 			OutputBuffer outptr_name(&tmpBuf[0 + size_length], size_name);
8644 			#ifdef CHECK_GL_ERRORS
8645 			GLint err = this->glGetError();
8646 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetProgramResourceName\n", err);
8647 			#endif
8648 			DECODER_DEBUG_LOG("gles2(%p): glGetProgramResourceName(program:%u programInterface:0x%08x index:%u bufSize:%d length:%p(%u) name:%p(%u) )", stream, var_program, var_programInterface, var_index, var_bufSize, (GLsizei*)(outptr_length.get()), size_length, (char*)(outptr_name.get()), size_name);
8649 			this->glGetProgramResourceName_dec(this, var_program, var_programInterface, var_index, var_bufSize, size_length == 0 ? nullptr : (GLsizei*)(outptr_length.get()), (char*)(outptr_name.get()));
8650 			outptr_length.flush();
8651 			outptr_name.flush();
8652 			if (useChecksum) {
8653 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
8654 			}
8655 			stream->flush();
8656 			SET_LASTCALL("glGetProgramResourceName");
8657 			android::base::endTrace();
8658 			break;
8659 		}
8660 		case OP_glBindImageTexture: {
8661 			android::base::beginTrace("glBindImageTexture decode");
8662 			GLuint var_unit = Unpack<GLuint,uint32_t>(ptr + 8);
8663 			GLuint var_texture = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
8664 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
8665 			GLboolean var_layered = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4 + 4);
8666 			GLint var_layer = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1);
8667 			GLenum var_access = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1 + 4);
8668 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1 + 4 + 4);
8669 			if (useChecksum) {
8670 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 1 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 1 + 4 + 4 + 4, checksumSize,
8671 					"gles2_decoder_context_t::decode, OP_glBindImageTexture: GL checksumCalculator failure\n");
8672 			}
8673 			#ifdef CHECK_GL_ERRORS
8674 			GLint err = this->glGetError();
8675 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBindImageTexture\n", err);
8676 			#endif
8677 			DECODER_DEBUG_LOG("gles2(%p): glBindImageTexture(unit:%u texture:%u level:%d layered:%d layer:%d access:0x%08x format:0x%08x )", stream, var_unit, var_texture, var_level, var_layered, var_layer, var_access, var_format);
8678 			this->glBindImageTexture(var_unit, var_texture, var_level, var_layered, var_layer, var_access, var_format);
8679 			SET_LASTCALL("glBindImageTexture");
8680 			android::base::endTrace();
8681 			break;
8682 		}
8683 		case OP_glDispatchCompute: {
8684 			android::base::beginTrace("glDispatchCompute decode");
8685 			GLuint var_num_groups_x = Unpack<GLuint,uint32_t>(ptr + 8);
8686 			GLuint var_num_groups_y = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
8687 			GLuint var_num_groups_z = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
8688 			if (useChecksum) {
8689 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
8690 					"gles2_decoder_context_t::decode, OP_glDispatchCompute: GL checksumCalculator failure\n");
8691 			}
8692 			#ifdef CHECK_GL_ERRORS
8693 			GLint err = this->glGetError();
8694 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDispatchCompute\n", err);
8695 			#endif
8696 			DECODER_DEBUG_LOG("gles2(%p): glDispatchCompute(num_groups_x:%u num_groups_y:%u num_groups_z:%u )", stream, var_num_groups_x, var_num_groups_y, var_num_groups_z);
8697 			this->glDispatchCompute(var_num_groups_x, var_num_groups_y, var_num_groups_z);
8698 			SET_LASTCALL("glDispatchCompute");
8699 			android::base::endTrace();
8700 			break;
8701 		}
8702 		case OP_glDispatchComputeIndirect: {
8703 			android::base::beginTrace("glDispatchComputeIndirect decode");
8704 			GLintptr var_indirect = Unpack<GLintptr,uint32_t>(ptr + 8);
8705 			if (useChecksum) {
8706 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
8707 					"gles2_decoder_context_t::decode, OP_glDispatchComputeIndirect: GL checksumCalculator failure\n");
8708 			}
8709 			#ifdef CHECK_GL_ERRORS
8710 			GLint err = this->glGetError();
8711 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDispatchComputeIndirect\n", err);
8712 			#endif
8713 			DECODER_DEBUG_LOG("gles2(%p): glDispatchComputeIndirect(indirect:0x%08lx )", stream, var_indirect);
8714 			this->glDispatchComputeIndirect(var_indirect);
8715 			SET_LASTCALL("glDispatchComputeIndirect");
8716 			android::base::endTrace();
8717 			break;
8718 		}
8719 		case OP_glBindVertexBuffer: {
8720 			android::base::beginTrace("glBindVertexBuffer decode");
8721 			GLuint var_bindingindex = Unpack<GLuint,uint32_t>(ptr + 8);
8722 			GLuint var_buffer = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
8723 			GLintptr var_offset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4 + 4);
8724 			GLintptr var_stride = Unpack<GLintptr,uint32_t>(ptr + 8 + 4 + 4 + 4);
8725 			if (useChecksum) {
8726 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
8727 					"gles2_decoder_context_t::decode, OP_glBindVertexBuffer: GL checksumCalculator failure\n");
8728 			}
8729 			#ifdef CHECK_GL_ERRORS
8730 			GLint err = this->glGetError();
8731 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBindVertexBuffer\n", err);
8732 			#endif
8733 			DECODER_DEBUG_LOG("gles2(%p): glBindVertexBuffer(bindingindex:%u buffer:%u offset:0x%08lx stride:0x%08lx )", stream, var_bindingindex, var_buffer, var_offset, var_stride);
8734 			this->glBindVertexBuffer(var_bindingindex, var_buffer, var_offset, var_stride);
8735 			SET_LASTCALL("glBindVertexBuffer");
8736 			android::base::endTrace();
8737 			break;
8738 		}
8739 		case OP_glVertexAttribBinding: {
8740 			android::base::beginTrace("glVertexAttribBinding decode");
8741 			GLuint var_attribindex = Unpack<GLuint,uint32_t>(ptr + 8);
8742 			GLuint var_bindingindex = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
8743 			if (useChecksum) {
8744 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
8745 					"gles2_decoder_context_t::decode, OP_glVertexAttribBinding: GL checksumCalculator failure\n");
8746 			}
8747 			#ifdef CHECK_GL_ERRORS
8748 			GLint err = this->glGetError();
8749 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttribBinding\n", err);
8750 			#endif
8751 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttribBinding(attribindex:%u bindingindex:%u )", stream, var_attribindex, var_bindingindex);
8752 			this->glVertexAttribBinding(var_attribindex, var_bindingindex);
8753 			SET_LASTCALL("glVertexAttribBinding");
8754 			android::base::endTrace();
8755 			break;
8756 		}
8757 		case OP_glVertexAttribFormat: {
8758 			android::base::beginTrace("glVertexAttribFormat decode");
8759 			GLuint var_attribindex = Unpack<GLuint,uint32_t>(ptr + 8);
8760 			GLint var_size = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8761 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
8762 			GLboolean var_normalized = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4 + 4);
8763 			GLuint var_relativeoffset = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 1);
8764 			if (useChecksum) {
8765 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 1 + 4, ptr + 8 + 4 + 4 + 4 + 1 + 4, checksumSize,
8766 					"gles2_decoder_context_t::decode, OP_glVertexAttribFormat: GL checksumCalculator failure\n");
8767 			}
8768 			#ifdef CHECK_GL_ERRORS
8769 			GLint err = this->glGetError();
8770 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttribFormat\n", err);
8771 			#endif
8772 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttribFormat(attribindex:%u size:%d type:0x%08x normalized:%d relativeoffset:%u )", stream, var_attribindex, var_size, var_type, var_normalized, var_relativeoffset);
8773 			this->glVertexAttribFormat(var_attribindex, var_size, var_type, var_normalized, var_relativeoffset);
8774 			SET_LASTCALL("glVertexAttribFormat");
8775 			android::base::endTrace();
8776 			break;
8777 		}
8778 		case OP_glVertexAttribIFormat: {
8779 			android::base::beginTrace("glVertexAttribIFormat decode");
8780 			GLuint var_attribindex = Unpack<GLuint,uint32_t>(ptr + 8);
8781 			GLint var_size = Unpack<GLint,uint32_t>(ptr + 8 + 4);
8782 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
8783 			GLuint var_relativeoffset = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4);
8784 			if (useChecksum) {
8785 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
8786 					"gles2_decoder_context_t::decode, OP_glVertexAttribIFormat: GL checksumCalculator failure\n");
8787 			}
8788 			#ifdef CHECK_GL_ERRORS
8789 			GLint err = this->glGetError();
8790 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexAttribIFormat\n", err);
8791 			#endif
8792 			DECODER_DEBUG_LOG("gles2(%p): glVertexAttribIFormat(attribindex:%u size:%d type:0x%08x relativeoffset:%u )", stream, var_attribindex, var_size, var_type, var_relativeoffset);
8793 			this->glVertexAttribIFormat(var_attribindex, var_size, var_type, var_relativeoffset);
8794 			SET_LASTCALL("glVertexAttribIFormat");
8795 			android::base::endTrace();
8796 			break;
8797 		}
8798 		case OP_glVertexBindingDivisor: {
8799 			android::base::beginTrace("glVertexBindingDivisor decode");
8800 			GLuint var_bindingindex = Unpack<GLuint,uint32_t>(ptr + 8);
8801 			GLuint var_divisor = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
8802 			if (useChecksum) {
8803 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
8804 					"gles2_decoder_context_t::decode, OP_glVertexBindingDivisor: GL checksumCalculator failure\n");
8805 			}
8806 			#ifdef CHECK_GL_ERRORS
8807 			GLint err = this->glGetError();
8808 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glVertexBindingDivisor\n", err);
8809 			#endif
8810 			DECODER_DEBUG_LOG("gles2(%p): glVertexBindingDivisor(bindingindex:%u divisor:%u )", stream, var_bindingindex, var_divisor);
8811 			this->glVertexBindingDivisor(var_bindingindex, var_divisor);
8812 			SET_LASTCALL("glVertexBindingDivisor");
8813 			android::base::endTrace();
8814 			break;
8815 		}
8816 		case OP_glDrawArraysIndirect: {
8817 			android::base::beginTrace("glDrawArraysIndirect decode");
8818 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
8819 			uint32_t size_indirect __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
8820 			InputBuffer inptr_indirect(ptr + 8 + 4 + 4, size_indirect);
8821 			if (useChecksum) {
8822 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_indirect, ptr + 8 + 4 + 4 + size_indirect, checksumSize,
8823 					"gles2_decoder_context_t::decode, OP_glDrawArraysIndirect: GL checksumCalculator failure\n");
8824 			}
8825 			#ifdef CHECK_GL_ERRORS
8826 			GLint err = this->glGetError();
8827 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawArraysIndirect\n", err);
8828 			#endif
8829 			DECODER_DEBUG_LOG("gles2(%p): glDrawArraysIndirect(mode:0x%08x indirect:%p(%u) )", stream, var_mode, (const void*)(inptr_indirect.get()), size_indirect);
8830 			this->glDrawArraysIndirect(var_mode, (const void*)(inptr_indirect.get()));
8831 			SET_LASTCALL("glDrawArraysIndirect");
8832 			android::base::endTrace();
8833 			break;
8834 		}
8835 		case OP_glDrawArraysIndirectDataAEMU: {
8836 			android::base::beginTrace("glDrawArraysIndirectDataAEMU decode");
8837 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
8838 			uint32_t size_indirect __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
8839 			InputBuffer inptr_indirect(ptr + 8 + 4 + 4, size_indirect);
8840 			GLuint var_datalen = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + size_indirect);
8841 			if (useChecksum) {
8842 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_indirect + 4, ptr + 8 + 4 + 4 + size_indirect + 4, checksumSize,
8843 					"gles2_decoder_context_t::decode, OP_glDrawArraysIndirectDataAEMU: GL checksumCalculator failure\n");
8844 			}
8845 			#ifdef CHECK_GL_ERRORS
8846 			GLint err = this->glGetError();
8847 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawArraysIndirectDataAEMU\n", err);
8848 			#endif
8849 			DECODER_DEBUG_LOG("gles2(%p): glDrawArraysIndirectDataAEMU(mode:0x%08x indirect:%p(%u) datalen:%u )", stream, var_mode, (const void*)(inptr_indirect.get()), size_indirect, var_datalen);
8850 			this->glDrawArraysIndirectDataAEMU(this, var_mode, (const void*)(inptr_indirect.get()), var_datalen);
8851 			SET_LASTCALL("glDrawArraysIndirectDataAEMU");
8852 			android::base::endTrace();
8853 			break;
8854 		}
8855 		case OP_glDrawArraysIndirectOffsetAEMU: {
8856 			android::base::beginTrace("glDrawArraysIndirectOffsetAEMU decode");
8857 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
8858 			GLuint var_offset = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
8859 			if (useChecksum) {
8860 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
8861 					"gles2_decoder_context_t::decode, OP_glDrawArraysIndirectOffsetAEMU: GL checksumCalculator failure\n");
8862 			}
8863 			#ifdef CHECK_GL_ERRORS
8864 			GLint err = this->glGetError();
8865 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawArraysIndirectOffsetAEMU\n", err);
8866 			#endif
8867 			DECODER_DEBUG_LOG("gles2(%p): glDrawArraysIndirectOffsetAEMU(mode:0x%08x offset:%u )", stream, var_mode, var_offset);
8868 			this->glDrawArraysIndirectOffsetAEMU(this, var_mode, var_offset);
8869 			SET_LASTCALL("glDrawArraysIndirectOffsetAEMU");
8870 			android::base::endTrace();
8871 			break;
8872 		}
8873 		case OP_glDrawElementsIndirect: {
8874 			android::base::beginTrace("glDrawElementsIndirect decode");
8875 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
8876 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
8877 			uint32_t size_indirect __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
8878 			InputBuffer inptr_indirect(ptr + 8 + 4 + 4 + 4, size_indirect);
8879 			if (useChecksum) {
8880 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_indirect, ptr + 8 + 4 + 4 + 4 + size_indirect, checksumSize,
8881 					"gles2_decoder_context_t::decode, OP_glDrawElementsIndirect: GL checksumCalculator failure\n");
8882 			}
8883 			#ifdef CHECK_GL_ERRORS
8884 			GLint err = this->glGetError();
8885 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawElementsIndirect\n", err);
8886 			#endif
8887 			DECODER_DEBUG_LOG("gles2(%p): glDrawElementsIndirect(mode:0x%08x type:0x%08x indirect:%p(%u) )", stream, var_mode, var_type, (const void*)(inptr_indirect.get()), size_indirect);
8888 			this->glDrawElementsIndirect(var_mode, var_type, (const void*)(inptr_indirect.get()));
8889 			SET_LASTCALL("glDrawElementsIndirect");
8890 			android::base::endTrace();
8891 			break;
8892 		}
8893 		case OP_glDrawElementsIndirectDataAEMU: {
8894 			android::base::beginTrace("glDrawElementsIndirectDataAEMU decode");
8895 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
8896 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
8897 			uint32_t size_indirect __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
8898 			InputBuffer inptr_indirect(ptr + 8 + 4 + 4 + 4, size_indirect);
8899 			GLuint var_datalen = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_indirect);
8900 			if (useChecksum) {
8901 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_indirect + 4, ptr + 8 + 4 + 4 + 4 + size_indirect + 4, checksumSize,
8902 					"gles2_decoder_context_t::decode, OP_glDrawElementsIndirectDataAEMU: GL checksumCalculator failure\n");
8903 			}
8904 			#ifdef CHECK_GL_ERRORS
8905 			GLint err = this->glGetError();
8906 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawElementsIndirectDataAEMU\n", err);
8907 			#endif
8908 			DECODER_DEBUG_LOG("gles2(%p): glDrawElementsIndirectDataAEMU(mode:0x%08x type:0x%08x indirect:%p(%u) datalen:%u )", stream, var_mode, var_type, (const void*)(inptr_indirect.get()), size_indirect, var_datalen);
8909 			this->glDrawElementsIndirectDataAEMU(this, var_mode, var_type, (const void*)(inptr_indirect.get()), var_datalen);
8910 			SET_LASTCALL("glDrawElementsIndirectDataAEMU");
8911 			android::base::endTrace();
8912 			break;
8913 		}
8914 		case OP_glDrawElementsIndirectOffsetAEMU: {
8915 			android::base::beginTrace("glDrawElementsIndirectOffsetAEMU decode");
8916 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
8917 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
8918 			GLuint var_offset = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
8919 			if (useChecksum) {
8920 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
8921 					"gles2_decoder_context_t::decode, OP_glDrawElementsIndirectOffsetAEMU: GL checksumCalculator failure\n");
8922 			}
8923 			#ifdef CHECK_GL_ERRORS
8924 			GLint err = this->glGetError();
8925 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawElementsIndirectOffsetAEMU\n", err);
8926 			#endif
8927 			DECODER_DEBUG_LOG("gles2(%p): glDrawElementsIndirectOffsetAEMU(mode:0x%08x type:0x%08x offset:%u )", stream, var_mode, var_type, var_offset);
8928 			this->glDrawElementsIndirectOffsetAEMU(this, var_mode, var_type, var_offset);
8929 			SET_LASTCALL("glDrawElementsIndirectOffsetAEMU");
8930 			android::base::endTrace();
8931 			break;
8932 		}
8933 		case OP_glTexStorage2DMultisample: {
8934 			android::base::beginTrace("glTexStorage2DMultisample decode");
8935 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
8936 			GLsizei var_samples = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
8937 			GLenum var_internalformat = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
8938 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
8939 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
8940 			GLboolean var_fixedsamplelocations = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
8941 			if (useChecksum) {
8942 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 1, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 1, checksumSize,
8943 					"gles2_decoder_context_t::decode, OP_glTexStorage2DMultisample: GL checksumCalculator failure\n");
8944 			}
8945 			#ifdef CHECK_GL_ERRORS
8946 			GLint err = this->glGetError();
8947 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexStorage2DMultisample\n", err);
8948 			#endif
8949 			DECODER_DEBUG_LOG("gles2(%p): glTexStorage2DMultisample(target:0x%08x samples:%d internalformat:0x%08x width:%d height:%d fixedsamplelocations:%d )", stream, var_target, var_samples, var_internalformat, var_width, var_height, var_fixedsamplelocations);
8950 			this->glTexStorage2DMultisample(var_target, var_samples, var_internalformat, var_width, var_height, var_fixedsamplelocations);
8951 			SET_LASTCALL("glTexStorage2DMultisample");
8952 			android::base::endTrace();
8953 			break;
8954 		}
8955 		case OP_glSampleMaski: {
8956 			android::base::beginTrace("glSampleMaski decode");
8957 			GLuint var_maskNumber = Unpack<GLuint,uint32_t>(ptr + 8);
8958 			GLbitfield var_mask = Unpack<GLbitfield,uint32_t>(ptr + 8 + 4);
8959 			if (useChecksum) {
8960 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
8961 					"gles2_decoder_context_t::decode, OP_glSampleMaski: GL checksumCalculator failure\n");
8962 			}
8963 			#ifdef CHECK_GL_ERRORS
8964 			GLint err = this->glGetError();
8965 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glSampleMaski\n", err);
8966 			#endif
8967 			DECODER_DEBUG_LOG("gles2(%p): glSampleMaski(maskNumber:%u mask:0x%08x )", stream, var_maskNumber, var_mask);
8968 			this->glSampleMaski(var_maskNumber, var_mask);
8969 			SET_LASTCALL("glSampleMaski");
8970 			android::base::endTrace();
8971 			break;
8972 		}
8973 		case OP_glGetMultisamplefv: {
8974 			android::base::beginTrace("glGetMultisamplefv decode");
8975 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8);
8976 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
8977 			uint32_t size_val __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
8978 			if (useChecksum) {
8979 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
8980 					"gles2_decoder_context_t::decode, OP_glGetMultisamplefv: GL checksumCalculator failure\n");
8981 			}
8982 			size_t totalTmpSize = size_val;
8983 			totalTmpSize += checksumSize;
8984 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
8985 			OutputBuffer outptr_val(&tmpBuf[0], size_val);
8986 			#ifdef CHECK_GL_ERRORS
8987 			GLint err = this->glGetError();
8988 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetMultisamplefv\n", err);
8989 			#endif
8990 			DECODER_DEBUG_LOG("gles2(%p): glGetMultisamplefv(pname:0x%08x index:%u val:%p(%u) )", stream, var_pname, var_index, (GLfloat*)(outptr_val.get()), size_val);
8991 			this->glGetMultisamplefv(var_pname, var_index, (GLfloat*)(outptr_val.get()));
8992 			outptr_val.flush();
8993 			if (useChecksum) {
8994 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
8995 			}
8996 			stream->flush();
8997 			SET_LASTCALL("glGetMultisamplefv");
8998 			android::base::endTrace();
8999 			break;
9000 		}
9001 		case OP_glFramebufferParameteri: {
9002 			android::base::beginTrace("glFramebufferParameteri decode");
9003 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
9004 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
9005 			GLint var_param = Unpack<GLint,uint32_t>(ptr + 8 + 4 + 4);
9006 			if (useChecksum) {
9007 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
9008 					"gles2_decoder_context_t::decode, OP_glFramebufferParameteri: GL checksumCalculator failure\n");
9009 			}
9010 			#ifdef CHECK_GL_ERRORS
9011 			GLint err = this->glGetError();
9012 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glFramebufferParameteri\n", err);
9013 			#endif
9014 			DECODER_DEBUG_LOG("gles2(%p): glFramebufferParameteri(target:0x%08x pname:0x%08x param:%d )", stream, var_target, var_pname, var_param);
9015 			this->glFramebufferParameteri(var_target, var_pname, var_param);
9016 			SET_LASTCALL("glFramebufferParameteri");
9017 			android::base::endTrace();
9018 			break;
9019 		}
9020 		case OP_glGetFramebufferParameteriv: {
9021 			android::base::beginTrace("glGetFramebufferParameteriv decode");
9022 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
9023 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
9024 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
9025 			if (useChecksum) {
9026 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
9027 					"gles2_decoder_context_t::decode, OP_glGetFramebufferParameteriv: GL checksumCalculator failure\n");
9028 			}
9029 			size_t totalTmpSize = size_params;
9030 			totalTmpSize += checksumSize;
9031 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
9032 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
9033 			#ifdef CHECK_GL_ERRORS
9034 			GLint err = this->glGetError();
9035 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetFramebufferParameteriv\n", err);
9036 			#endif
9037 			DECODER_DEBUG_LOG("gles2(%p): glGetFramebufferParameteriv(target:0x%08x pname:0x%08x params:%p(%u) )", stream, var_target, var_pname, (GLint*)(outptr_params.get()), size_params);
9038 			this->glGetFramebufferParameteriv(var_target, var_pname, (GLint*)(outptr_params.get()));
9039 			outptr_params.flush();
9040 			if (useChecksum) {
9041 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
9042 			}
9043 			stream->flush();
9044 			SET_LASTCALL("glGetFramebufferParameteriv");
9045 			android::base::endTrace();
9046 			break;
9047 		}
9048 		case OP_glGetTexLevelParameterfv: {
9049 			android::base::beginTrace("glGetTexLevelParameterfv decode");
9050 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
9051 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
9052 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
9053 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
9054 			if (useChecksum) {
9055 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
9056 					"gles2_decoder_context_t::decode, OP_glGetTexLevelParameterfv: GL checksumCalculator failure\n");
9057 			}
9058 			size_t totalTmpSize = size_params;
9059 			totalTmpSize += checksumSize;
9060 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
9061 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
9062 			#ifdef CHECK_GL_ERRORS
9063 			GLint err = this->glGetError();
9064 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetTexLevelParameterfv\n", err);
9065 			#endif
9066 			DECODER_DEBUG_LOG("gles2(%p): glGetTexLevelParameterfv(target:0x%08x level:%d pname:0x%08x params:%p(%u) )", stream, var_target, var_level, var_pname, (GLfloat*)(outptr_params.get()), size_params);
9067 			this->glGetTexLevelParameterfv(var_target, var_level, var_pname, (GLfloat*)(outptr_params.get()));
9068 			outptr_params.flush();
9069 			if (useChecksum) {
9070 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
9071 			}
9072 			stream->flush();
9073 			SET_LASTCALL("glGetTexLevelParameterfv");
9074 			android::base::endTrace();
9075 			break;
9076 		}
9077 		case OP_glGetTexLevelParameteriv: {
9078 			android::base::beginTrace("glGetTexLevelParameteriv decode");
9079 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
9080 			GLint var_level = Unpack<GLint,uint32_t>(ptr + 8 + 4);
9081 			GLenum var_pname = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
9082 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
9083 			if (useChecksum) {
9084 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
9085 					"gles2_decoder_context_t::decode, OP_glGetTexLevelParameteriv: GL checksumCalculator failure\n");
9086 			}
9087 			size_t totalTmpSize = size_params;
9088 			totalTmpSize += checksumSize;
9089 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
9090 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
9091 			#ifdef CHECK_GL_ERRORS
9092 			GLint err = this->glGetError();
9093 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetTexLevelParameteriv\n", err);
9094 			#endif
9095 			DECODER_DEBUG_LOG("gles2(%p): glGetTexLevelParameteriv(target:0x%08x level:%d pname:0x%08x params:%p(%u) )", stream, var_target, var_level, var_pname, (GLint*)(outptr_params.get()), size_params);
9096 			this->glGetTexLevelParameteriv(var_target, var_level, var_pname, (GLint*)(outptr_params.get()));
9097 			outptr_params.flush();
9098 			if (useChecksum) {
9099 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
9100 			}
9101 			stream->flush();
9102 			SET_LASTCALL("glGetTexLevelParameteriv");
9103 			android::base::endTrace();
9104 			break;
9105 		}
9106 		case OP_glMapBufferRangeDMA: {
9107 			android::base::beginTrace("glMapBufferRangeDMA decode");
9108 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
9109 			GLintptr var_offset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4);
9110 			GLsizeiptr var_length = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4 + 4);
9111 			GLbitfield var_access = Unpack<GLbitfield,uint32_t>(ptr + 8 + 4 + 4 + 4);
9112 			uint64_t var_paddr = Unpack<uint64_t,uint64_t>(ptr + 8 + 4 + 4 + 4 + 4);
9113 			if (useChecksum) {
9114 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 8, ptr + 8 + 4 + 4 + 4 + 4 + 8, checksumSize,
9115 					"gles2_decoder_context_t::decode, OP_glMapBufferRangeDMA: GL checksumCalculator failure\n");
9116 			}
9117 			#ifdef CHECK_GL_ERRORS
9118 			GLint err = this->glGetError();
9119 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glMapBufferRangeDMA\n", err);
9120 			#endif
9121 			DECODER_DEBUG_LOG("gles2(%p): glMapBufferRangeDMA(target:0x%08x offset:0x%08lx length:0x%08lx access:0x%08x paddr:0x%016lx )", stream, var_target, var_offset, var_length, var_access, var_paddr);
9122 			this->glMapBufferRangeDMA(this, var_target, var_offset, var_length, var_access, var_paddr);
9123 			SET_LASTCALL("glMapBufferRangeDMA");
9124 			android::base::endTrace();
9125 			break;
9126 		}
9127 		case OP_glUnmapBufferDMA: {
9128 			android::base::beginTrace("glUnmapBufferDMA decode");
9129 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
9130 			GLintptr var_offset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4);
9131 			GLsizeiptr var_length = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4 + 4);
9132 			GLbitfield var_access = Unpack<GLbitfield,uint32_t>(ptr + 8 + 4 + 4 + 4);
9133 			uint64_t var_paddr = Unpack<uint64_t,uint64_t>(ptr + 8 + 4 + 4 + 4 + 4);
9134 			uint32_t size_out_res __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 8);
9135 			if (useChecksum) {
9136 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 8 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 8 + 4, checksumSize,
9137 					"gles2_decoder_context_t::decode, OP_glUnmapBufferDMA: GL checksumCalculator failure\n");
9138 			}
9139 			size_t totalTmpSize = size_out_res;
9140 			totalTmpSize += checksumSize;
9141 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
9142 			OutputBuffer outptr_out_res(&tmpBuf[0], size_out_res);
9143 			#ifdef CHECK_GL_ERRORS
9144 			GLint err = this->glGetError();
9145 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUnmapBufferDMA\n", err);
9146 			#endif
9147 			DECODER_DEBUG_LOG("gles2(%p): glUnmapBufferDMA(target:0x%08x offset:0x%08lx length:0x%08lx access:0x%08x paddr:0x%016lx out_res:%p(%u) )", stream, var_target, var_offset, var_length, var_access, var_paddr, (GLboolean*)(outptr_out_res.get()), size_out_res);
9148 			this->glUnmapBufferDMA(this, var_target, var_offset, var_length, var_access, var_paddr, (GLboolean*)(outptr_out_res.get()));
9149 			outptr_out_res.flush();
9150 			if (useChecksum) {
9151 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
9152 			}
9153 			stream->flush();
9154 			SET_LASTCALL("glUnmapBufferDMA");
9155 			android::base::endTrace();
9156 			break;
9157 		}
9158 		case OP_glMapBufferRangeDirect: {
9159 			android::base::beginTrace("glMapBufferRangeDirect decode");
9160 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
9161 			GLintptr var_offset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4);
9162 			GLsizeiptr var_length = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4 + 4);
9163 			GLbitfield var_access = Unpack<GLbitfield,uint32_t>(ptr + 8 + 4 + 4 + 4);
9164 			uint64_t var_paddr = Unpack<uint64_t,uint64_t>(ptr + 8 + 4 + 4 + 4 + 4);
9165 			if (useChecksum) {
9166 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 8, ptr + 8 + 4 + 4 + 4 + 4 + 8, checksumSize,
9167 					"gles2_decoder_context_t::decode, OP_glMapBufferRangeDirect: GL checksumCalculator failure\n");
9168 			}
9169 			size_t totalTmpSize = sizeof(uint64_t);
9170 			totalTmpSize += checksumSize;
9171 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
9172 			#ifdef CHECK_GL_ERRORS
9173 			GLint err = this->glGetError();
9174 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glMapBufferRangeDirect\n", err);
9175 			#endif
9176 			DECODER_DEBUG_LOG("gles2(%p): glMapBufferRangeDirect(target:0x%08x offset:0x%08lx length:0x%08lx access:0x%08x paddr:0x%016lx )", stream, var_target, var_offset, var_length, var_access, var_paddr);
9177 			*(uint64_t *)(&tmpBuf[0]) = 			this->glMapBufferRangeDirect(this, var_target, var_offset, var_length, var_access, var_paddr);
9178 			if (useChecksum) {
9179 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
9180 			}
9181 			stream->flush();
9182 			SET_LASTCALL("glMapBufferRangeDirect");
9183 			android::base::endTrace();
9184 			break;
9185 		}
9186 		case OP_glUnmapBufferDirect: {
9187 			android::base::beginTrace("glUnmapBufferDirect decode");
9188 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
9189 			GLintptr var_offset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4);
9190 			GLsizeiptr var_length = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4 + 4);
9191 			GLbitfield var_access = Unpack<GLbitfield,uint32_t>(ptr + 8 + 4 + 4 + 4);
9192 			uint64_t var_paddr = Unpack<uint64_t,uint64_t>(ptr + 8 + 4 + 4 + 4 + 4);
9193 			uint64_t var_guest_ptr = Unpack<uint64_t,uint64_t>(ptr + 8 + 4 + 4 + 4 + 4 + 8);
9194 			uint32_t size_out_res __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 8 + 8);
9195 			if (useChecksum) {
9196 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 8 + 8 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 8 + 8 + 4, checksumSize,
9197 					"gles2_decoder_context_t::decode, OP_glUnmapBufferDirect: GL checksumCalculator failure\n");
9198 			}
9199 			size_t totalTmpSize = size_out_res;
9200 			totalTmpSize += checksumSize;
9201 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
9202 			OutputBuffer outptr_out_res(&tmpBuf[0], size_out_res);
9203 			#ifdef CHECK_GL_ERRORS
9204 			GLint err = this->glGetError();
9205 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUnmapBufferDirect\n", err);
9206 			#endif
9207 			DECODER_DEBUG_LOG("gles2(%p): glUnmapBufferDirect(target:0x%08x offset:0x%08lx length:0x%08lx access:0x%08x paddr:0x%016lx guest_ptr:0x%016lx out_res:%p(%u) )", stream, var_target, var_offset, var_length, var_access, var_paddr, var_guest_ptr, (GLboolean*)(outptr_out_res.get()), size_out_res);
9208 			this->glUnmapBufferDirect(this, var_target, var_offset, var_length, var_access, var_paddr, var_guest_ptr, (GLboolean*)(outptr_out_res.get()));
9209 			outptr_out_res.flush();
9210 			if (useChecksum) {
9211 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
9212 			}
9213 			stream->flush();
9214 			SET_LASTCALL("glUnmapBufferDirect");
9215 			android::base::endTrace();
9216 			break;
9217 		}
9218 		case OP_glFlushMappedBufferRangeDirect: {
9219 			android::base::beginTrace("glFlushMappedBufferRangeDirect decode");
9220 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
9221 			GLintptr var_offset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4);
9222 			GLsizeiptr var_length = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4 + 4);
9223 			GLbitfield var_access = Unpack<GLbitfield,uint32_t>(ptr + 8 + 4 + 4 + 4);
9224 			if (useChecksum) {
9225 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
9226 					"gles2_decoder_context_t::decode, OP_glFlushMappedBufferRangeDirect: GL checksumCalculator failure\n");
9227 			}
9228 			#ifdef CHECK_GL_ERRORS
9229 			GLint err = this->glGetError();
9230 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glFlushMappedBufferRangeDirect\n", err);
9231 			#endif
9232 			DECODER_DEBUG_LOG("gles2(%p): glFlushMappedBufferRangeDirect(target:0x%08x offset:0x%08lx length:0x%08lx access:0x%08x )", stream, var_target, var_offset, var_length, var_access);
9233 			this->glFlushMappedBufferRangeDirect(this, var_target, var_offset, var_length, var_access);
9234 			SET_LASTCALL("glFlushMappedBufferRangeDirect");
9235 			android::base::endTrace();
9236 			break;
9237 		}
9238 		case OP_glGetGraphicsResetStatusEXT: {
9239 			android::base::beginTrace("glGetGraphicsResetStatusEXT decode");
9240 			if (useChecksum) {
9241 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8, ptr + 8, checksumSize,
9242 					"gles2_decoder_context_t::decode, OP_glGetGraphicsResetStatusEXT: GL checksumCalculator failure\n");
9243 			}
9244 			size_t totalTmpSize = sizeof(GLenum);
9245 			totalTmpSize += checksumSize;
9246 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
9247 			#ifdef CHECK_GL_ERRORS
9248 			GLint err = this->glGetError();
9249 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetGraphicsResetStatusEXT\n", err);
9250 			#endif
9251 			DECODER_DEBUG_LOG("gles2(%p): glGetGraphicsResetStatusEXT()", stream);
9252 			*(GLenum *)(&tmpBuf[0]) = 			this->glGetGraphicsResetStatusEXT();
9253 			if (useChecksum) {
9254 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
9255 			}
9256 			stream->flush();
9257 			SET_LASTCALL("glGetGraphicsResetStatusEXT");
9258 			android::base::endTrace();
9259 			break;
9260 		}
9261 		case OP_glReadnPixelsEXT: {
9262 			android::base::beginTrace("glReadnPixelsEXT decode");
9263 			GLint var_x = Unpack<GLint,uint32_t>(ptr + 8);
9264 			GLint var_y = Unpack<GLint,uint32_t>(ptr + 8 + 4);
9265 			GLsizei var_width = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
9266 			GLsizei var_height = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4);
9267 			GLenum var_format = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
9268 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4);
9269 			GLsizei var_bufSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4);
9270 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
9271 			if (useChecksum) {
9272 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4, checksumSize,
9273 					"gles2_decoder_context_t::decode, OP_glReadnPixelsEXT: GL checksumCalculator failure\n");
9274 			}
9275 			size_t totalTmpSize = size_data;
9276 			totalTmpSize += checksumSize;
9277 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
9278 			OutputBuffer outptr_data(&tmpBuf[0], size_data);
9279 			#ifdef CHECK_GL_ERRORS
9280 			GLint err = this->glGetError();
9281 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glReadnPixelsEXT\n", err);
9282 			#endif
9283 			DECODER_DEBUG_LOG("gles2(%p): glReadnPixelsEXT(x:%d y:%d width:%d height:%d format:0x%08x type:0x%08x bufSize:%d data:%p(%u) )", stream, var_x, var_y, var_width, var_height, var_format, var_type, var_bufSize, (GLvoid*)(outptr_data.get()), size_data);
9284 			this->glReadnPixelsEXT(var_x, var_y, var_width, var_height, var_format, var_type, var_bufSize, (GLvoid*)(outptr_data.get()));
9285 			outptr_data.flush();
9286 			if (useChecksum) {
9287 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
9288 			}
9289 			stream->flush();
9290 			SET_LASTCALL("glReadnPixelsEXT");
9291 			android::base::endTrace();
9292 			break;
9293 		}
9294 		case OP_glGetnUniformfvEXT: {
9295 			android::base::beginTrace("glGetnUniformfvEXT decode");
9296 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
9297 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
9298 			GLsizei var_bufSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
9299 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
9300 			if (useChecksum) {
9301 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
9302 					"gles2_decoder_context_t::decode, OP_glGetnUniformfvEXT: GL checksumCalculator failure\n");
9303 			}
9304 			size_t totalTmpSize = size_params;
9305 			totalTmpSize += checksumSize;
9306 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
9307 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
9308 			#ifdef CHECK_GL_ERRORS
9309 			GLint err = this->glGetError();
9310 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetnUniformfvEXT\n", err);
9311 			#endif
9312 			DECODER_DEBUG_LOG("gles2(%p): glGetnUniformfvEXT(program:%u location:%d bufSize:%d params:%p(%u) )", stream, var_program, var_location, var_bufSize, (GLfloat*)(outptr_params.get()), size_params);
9313 			this->glGetnUniformfvEXT(var_program, var_location, var_bufSize, (GLfloat*)(outptr_params.get()));
9314 			outptr_params.flush();
9315 			if (useChecksum) {
9316 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
9317 			}
9318 			stream->flush();
9319 			SET_LASTCALL("glGetnUniformfvEXT");
9320 			android::base::endTrace();
9321 			break;
9322 		}
9323 		case OP_glGetnUniformivEXT: {
9324 			android::base::beginTrace("glGetnUniformivEXT decode");
9325 			GLuint var_program = Unpack<GLuint,uint32_t>(ptr + 8);
9326 			GLint var_location = Unpack<GLint,uint32_t>(ptr + 8 + 4);
9327 			GLsizei var_bufSize = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
9328 			uint32_t size_params __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
9329 			if (useChecksum) {
9330 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
9331 					"gles2_decoder_context_t::decode, OP_glGetnUniformivEXT: GL checksumCalculator failure\n");
9332 			}
9333 			size_t totalTmpSize = size_params;
9334 			totalTmpSize += checksumSize;
9335 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
9336 			OutputBuffer outptr_params(&tmpBuf[0], size_params);
9337 			#ifdef CHECK_GL_ERRORS
9338 			GLint err = this->glGetError();
9339 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glGetnUniformivEXT\n", err);
9340 			#endif
9341 			DECODER_DEBUG_LOG("gles2(%p): glGetnUniformivEXT(program:%u location:%d bufSize:%d params:%p(%u) )", stream, var_program, var_location, var_bufSize, (GLint*)(outptr_params.get()), size_params);
9342 			this->glGetnUniformivEXT(var_program, var_location, var_bufSize, (GLint*)(outptr_params.get()));
9343 			outptr_params.flush();
9344 			if (useChecksum) {
9345 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
9346 			}
9347 			stream->flush();
9348 			SET_LASTCALL("glGetnUniformivEXT");
9349 			android::base::endTrace();
9350 			break;
9351 		}
9352 		case OP_glDrawArraysNullAEMU: {
9353 			android::base::beginTrace("glDrawArraysNullAEMU decode");
9354 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
9355 			GLint var_first = Unpack<GLint,uint32_t>(ptr + 8 + 4);
9356 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4 + 4);
9357 			if (useChecksum) {
9358 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
9359 					"gles2_decoder_context_t::decode, OP_glDrawArraysNullAEMU: GL checksumCalculator failure\n");
9360 			}
9361 			#ifdef CHECK_GL_ERRORS
9362 			GLint err = this->glGetError();
9363 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawArraysNullAEMU\n", err);
9364 			#endif
9365 			DECODER_DEBUG_LOG("gles2(%p): glDrawArraysNullAEMU(mode:0x%08x first:%d count:%d )", stream, var_mode, var_first, var_count);
9366 			this->glDrawArraysNullAEMU(var_mode, var_first, var_count);
9367 			SET_LASTCALL("glDrawArraysNullAEMU");
9368 			android::base::endTrace();
9369 			break;
9370 		}
9371 		case OP_glDrawElementsNullAEMU: {
9372 			android::base::beginTrace("glDrawElementsNullAEMU decode");
9373 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
9374 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
9375 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
9376 			uint32_t size_indices __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
9377 			InputBuffer inptr_indices(ptr + 8 + 4 + 4 + 4 + 4, size_indices);
9378 			if (useChecksum) {
9379 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_indices, ptr + 8 + 4 + 4 + 4 + 4 + size_indices, checksumSize,
9380 					"gles2_decoder_context_t::decode, OP_glDrawElementsNullAEMU: GL checksumCalculator failure\n");
9381 			}
9382 			#ifdef CHECK_GL_ERRORS
9383 			GLint err = this->glGetError();
9384 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawElementsNullAEMU\n", err);
9385 			#endif
9386 			DECODER_DEBUG_LOG("gles2(%p): glDrawElementsNullAEMU(mode:0x%08x count:%d type:0x%08x indices:%p(%u) )", stream, var_mode, var_count, var_type, (const GLvoid*)(inptr_indices.get()), size_indices);
9387 			this->glDrawElementsNullAEMU(var_mode, var_count, var_type, (const GLvoid*)(inptr_indices.get()));
9388 			SET_LASTCALL("glDrawElementsNullAEMU");
9389 			android::base::endTrace();
9390 			break;
9391 		}
9392 		case OP_glDrawElementsOffsetNullAEMU: {
9393 			android::base::beginTrace("glDrawElementsOffsetNullAEMU decode");
9394 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
9395 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
9396 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
9397 			GLuint var_offset = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4);
9398 			if (useChecksum) {
9399 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4, checksumSize,
9400 					"gles2_decoder_context_t::decode, OP_glDrawElementsOffsetNullAEMU: GL checksumCalculator failure\n");
9401 			}
9402 			#ifdef CHECK_GL_ERRORS
9403 			GLint err = this->glGetError();
9404 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawElementsOffsetNullAEMU\n", err);
9405 			#endif
9406 			DECODER_DEBUG_LOG("gles2(%p): glDrawElementsOffsetNullAEMU(mode:0x%08x count:%d type:0x%08x offset:%u )", stream, var_mode, var_count, var_type, var_offset);
9407 			this->glDrawElementsOffsetNullAEMU(this, var_mode, var_count, var_type, var_offset);
9408 			SET_LASTCALL("glDrawElementsOffsetNullAEMU");
9409 			android::base::endTrace();
9410 			break;
9411 		}
9412 		case OP_glDrawElementsDataNullAEMU: {
9413 			android::base::beginTrace("glDrawElementsDataNullAEMU decode");
9414 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8);
9415 			GLsizei var_count = Unpack<GLsizei,uint32_t>(ptr + 8 + 4);
9416 			GLenum var_type = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
9417 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4);
9418 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4 + 4, size_data);
9419 			GLuint var_datalen = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + size_data);
9420 			if (useChecksum) {
9421 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + size_data + 4, ptr + 8 + 4 + 4 + 4 + 4 + size_data + 4, checksumSize,
9422 					"gles2_decoder_context_t::decode, OP_glDrawElementsDataNullAEMU: GL checksumCalculator failure\n");
9423 			}
9424 			#ifdef CHECK_GL_ERRORS
9425 			GLint err = this->glGetError();
9426 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDrawElementsDataNullAEMU\n", err);
9427 			#endif
9428 			DECODER_DEBUG_LOG("gles2(%p): glDrawElementsDataNullAEMU(mode:0x%08x count:%d type:0x%08x data:%p(%u) datalen:%u )", stream, var_mode, var_count, var_type, (void*)(inptr_data.get()), size_data, var_datalen);
9429 			this->glDrawElementsDataNullAEMU(this, var_mode, var_count, var_type, (void*)(inptr_data.get()), var_datalen);
9430 			SET_LASTCALL("glDrawElementsDataNullAEMU");
9431 			android::base::endTrace();
9432 			break;
9433 		}
9434 		case OP_glUnmapBufferAsyncAEMU: {
9435 			android::base::beginTrace("glUnmapBufferAsyncAEMU decode");
9436 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
9437 			GLintptr var_offset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4);
9438 			GLsizeiptr var_length = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4 + 4);
9439 			GLbitfield var_access = Unpack<GLbitfield,uint32_t>(ptr + 8 + 4 + 4 + 4);
9440 			uint32_t size_guest_buffer __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
9441 			InputBuffer inptr_guest_buffer(ptr + 8 + 4 + 4 + 4 + 4 + 4, size_guest_buffer);
9442 			uint32_t size_out_res __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4 + 4 + size_guest_buffer);
9443 			InputBuffer inptr_out_res(ptr + 8 + 4 + 4 + 4 + 4 + 4 + size_guest_buffer + 4, size_out_res);
9444 			if (useChecksum) {
9445 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + size_guest_buffer + 4 + size_out_res, ptr + 8 + 4 + 4 + 4 + 4 + 4 + size_guest_buffer + 4 + size_out_res, checksumSize,
9446 					"gles2_decoder_context_t::decode, OP_glUnmapBufferAsyncAEMU: GL checksumCalculator failure\n");
9447 			}
9448 			#ifdef CHECK_GL_ERRORS
9449 			GLint err = this->glGetError();
9450 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glUnmapBufferAsyncAEMU\n", err);
9451 			#endif
9452 			DECODER_DEBUG_LOG("gles2(%p): glUnmapBufferAsyncAEMU(target:0x%08x offset:0x%08lx length:0x%08lx access:0x%08x guest_buffer:%p(%u) out_res:%p(%u) )", stream, var_target, var_offset, var_length, var_access, (void*)(inptr_guest_buffer.get()), size_guest_buffer, (GLboolean*)(inptr_out_res.get()), size_out_res);
9453 			this->glUnmapBufferAEMU(this, var_target, var_offset, var_length, var_access, size_guest_buffer == 0 ? nullptr : (void*)(inptr_guest_buffer.get()), (GLboolean*)(inptr_out_res.get()));
9454 			SET_LASTCALL("glUnmapBufferAsyncAEMU");
9455 			android::base::endTrace();
9456 			break;
9457 		}
9458 		case OP_glFlushMappedBufferRangeAEMU2: {
9459 			android::base::beginTrace("glFlushMappedBufferRangeAEMU2 decode");
9460 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
9461 			GLintptr var_offset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4);
9462 			GLsizeiptr var_length = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4 + 4);
9463 			GLbitfield var_access = Unpack<GLbitfield,uint32_t>(ptr + 8 + 4 + 4 + 4);
9464 			uint32_t size_guest_buffer __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
9465 			InputBuffer inptr_guest_buffer(ptr + 8 + 4 + 4 + 4 + 4 + 4, size_guest_buffer);
9466 			if (useChecksum) {
9467 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4 + size_guest_buffer, ptr + 8 + 4 + 4 + 4 + 4 + 4 + size_guest_buffer, checksumSize,
9468 					"gles2_decoder_context_t::decode, OP_glFlushMappedBufferRangeAEMU2: GL checksumCalculator failure\n");
9469 			}
9470 			#ifdef CHECK_GL_ERRORS
9471 			GLint err = this->glGetError();
9472 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glFlushMappedBufferRangeAEMU2\n", err);
9473 			#endif
9474 			DECODER_DEBUG_LOG("gles2(%p): glFlushMappedBufferRangeAEMU2(target:0x%08x offset:0x%08lx length:0x%08lx access:0x%08x guest_buffer:%p(%u) )", stream, var_target, var_offset, var_length, var_access, (void*)(inptr_guest_buffer.get()), size_guest_buffer);
9475 			this->glFlushMappedBufferRangeAEMU(this, var_target, var_offset, var_length, var_access, size_guest_buffer == 0 ? nullptr : (void*)(inptr_guest_buffer.get()));
9476 			SET_LASTCALL("glFlushMappedBufferRangeAEMU2");
9477 			android::base::endTrace();
9478 			break;
9479 		}
9480 		case OP_glBufferDataSyncAEMU: {
9481 			android::base::beginTrace("glBufferDataSyncAEMU decode");
9482 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
9483 			GLsizeiptr var_size = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4);
9484 			uint32_t size_data __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + 4);
9485 			InputBuffer inptr_data(ptr + 8 + 4 + 4 + 4, size_data);
9486 			GLenum var_usage = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + size_data);
9487 			if (useChecksum) {
9488 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + size_data + 4, ptr + 8 + 4 + 4 + 4 + size_data + 4, checksumSize,
9489 					"gles2_decoder_context_t::decode, OP_glBufferDataSyncAEMU: GL checksumCalculator failure\n");
9490 			}
9491 			size_t totalTmpSize = sizeof(GLboolean);
9492 			totalTmpSize += checksumSize;
9493 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
9494 			#ifdef CHECK_GL_ERRORS
9495 			GLint err = this->glGetError();
9496 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBufferDataSyncAEMU\n", err);
9497 			#endif
9498 			DECODER_DEBUG_LOG("gles2(%p): glBufferDataSyncAEMU(target:0x%08x size:0x%08lx data:%p(%u) usage:0x%08x )", stream, var_target, var_size, (const GLvoid*)(inptr_data.get()), size_data, var_usage);
9499 			*(GLboolean *)(&tmpBuf[0]) = 			this->glBufferDataSyncAEMU(this, var_target, var_size, size_data == 0 ? nullptr : (const GLvoid*)(inptr_data.get()), var_usage);
9500 			if (useChecksum) {
9501 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
9502 			}
9503 			stream->flush();
9504 			SET_LASTCALL("glBufferDataSyncAEMU");
9505 			android::base::endTrace();
9506 			break;
9507 		}
9508 		case OP_glTexBufferOES: {
9509 			android::base::beginTrace("glTexBufferOES decode");
9510 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
9511 			GLenum var_internalFormat = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
9512 			GLuint var_buffer = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
9513 			if (useChecksum) {
9514 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
9515 					"gles2_decoder_context_t::decode, OP_glTexBufferOES: GL checksumCalculator failure\n");
9516 			}
9517 			#ifdef CHECK_GL_ERRORS
9518 			GLint err = this->glGetError();
9519 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexBufferOES\n", err);
9520 			#endif
9521 			DECODER_DEBUG_LOG("gles2(%p): glTexBufferOES(target:0x%08x internalFormat:0x%08x buffer:%u )", stream, var_target, var_internalFormat, var_buffer);
9522 			this->glTexBufferOES_dec(this, var_target, var_internalFormat, var_buffer);
9523 			SET_LASTCALL("glTexBufferOES");
9524 			android::base::endTrace();
9525 			break;
9526 		}
9527 		case OP_glTexBufferRangeOES: {
9528 			android::base::beginTrace("glTexBufferRangeOES decode");
9529 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
9530 			GLenum var_internalFormat = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
9531 			GLuint var_buffer = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
9532 			GLintptr var_offset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4 + 4 + 4);
9533 			GLsizeiptr var_size = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
9534 			if (useChecksum) {
9535 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
9536 					"gles2_decoder_context_t::decode, OP_glTexBufferRangeOES: GL checksumCalculator failure\n");
9537 			}
9538 			#ifdef CHECK_GL_ERRORS
9539 			GLint err = this->glGetError();
9540 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexBufferRangeOES\n", err);
9541 			#endif
9542 			DECODER_DEBUG_LOG("gles2(%p): glTexBufferRangeOES(target:0x%08x internalFormat:0x%08x buffer:%u offset:0x%08lx size:0x%08lx )", stream, var_target, var_internalFormat, var_buffer, var_offset, var_size);
9543 			this->glTexBufferRangeOES_dec(this, var_target, var_internalFormat, var_buffer, var_offset, var_size);
9544 			SET_LASTCALL("glTexBufferRangeOES");
9545 			android::base::endTrace();
9546 			break;
9547 		}
9548 		case OP_glTexBufferEXT: {
9549 			android::base::beginTrace("glTexBufferEXT decode");
9550 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
9551 			GLenum var_internalFormat = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
9552 			GLuint var_buffer = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
9553 			if (useChecksum) {
9554 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
9555 					"gles2_decoder_context_t::decode, OP_glTexBufferEXT: GL checksumCalculator failure\n");
9556 			}
9557 			#ifdef CHECK_GL_ERRORS
9558 			GLint err = this->glGetError();
9559 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexBufferEXT\n", err);
9560 			#endif
9561 			DECODER_DEBUG_LOG("gles2(%p): glTexBufferEXT(target:0x%08x internalFormat:0x%08x buffer:%u )", stream, var_target, var_internalFormat, var_buffer);
9562 			this->glTexBufferEXT_dec(this, var_target, var_internalFormat, var_buffer);
9563 			SET_LASTCALL("glTexBufferEXT");
9564 			android::base::endTrace();
9565 			break;
9566 		}
9567 		case OP_glTexBufferRangeEXT: {
9568 			android::base::beginTrace("glTexBufferRangeEXT decode");
9569 			GLenum var_target = Unpack<GLenum,uint32_t>(ptr + 8);
9570 			GLenum var_internalFormat = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
9571 			GLuint var_buffer = Unpack<GLuint,uint32_t>(ptr + 8 + 4 + 4);
9572 			GLintptr var_offset = Unpack<GLintptr,uint32_t>(ptr + 8 + 4 + 4 + 4);
9573 			GLsizeiptr var_size = Unpack<GLsizeiptr,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
9574 			if (useChecksum) {
9575 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
9576 					"gles2_decoder_context_t::decode, OP_glTexBufferRangeEXT: GL checksumCalculator failure\n");
9577 			}
9578 			#ifdef CHECK_GL_ERRORS
9579 			GLint err = this->glGetError();
9580 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glTexBufferRangeEXT\n", err);
9581 			#endif
9582 			DECODER_DEBUG_LOG("gles2(%p): glTexBufferRangeEXT(target:0x%08x internalFormat:0x%08x buffer:%u offset:0x%08lx size:0x%08lx )", stream, var_target, var_internalFormat, var_buffer, var_offset, var_size);
9583 			this->glTexBufferRangeEXT_dec(this, var_target, var_internalFormat, var_buffer, var_offset, var_size);
9584 			SET_LASTCALL("glTexBufferRangeEXT");
9585 			android::base::endTrace();
9586 			break;
9587 		}
9588 		case OP_glEnableiEXT: {
9589 			android::base::beginTrace("glEnableiEXT decode");
9590 			GLenum var_cap = Unpack<GLenum,uint32_t>(ptr + 8);
9591 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
9592 			if (useChecksum) {
9593 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
9594 					"gles2_decoder_context_t::decode, OP_glEnableiEXT: GL checksumCalculator failure\n");
9595 			}
9596 			#ifdef CHECK_GL_ERRORS
9597 			GLint err = this->glGetError();
9598 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glEnableiEXT\n", err);
9599 			#endif
9600 			DECODER_DEBUG_LOG("gles2(%p): glEnableiEXT(cap:0x%08x index:%u )", stream, var_cap, var_index);
9601 			this->glEnableiEXT_dec(this, var_cap, var_index);
9602 			SET_LASTCALL("glEnableiEXT");
9603 			android::base::endTrace();
9604 			break;
9605 		}
9606 		case OP_glDisableiEXT: {
9607 			android::base::beginTrace("glDisableiEXT decode");
9608 			GLenum var_cap = Unpack<GLenum,uint32_t>(ptr + 8);
9609 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
9610 			if (useChecksum) {
9611 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
9612 					"gles2_decoder_context_t::decode, OP_glDisableiEXT: GL checksumCalculator failure\n");
9613 			}
9614 			#ifdef CHECK_GL_ERRORS
9615 			GLint err = this->glGetError();
9616 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glDisableiEXT\n", err);
9617 			#endif
9618 			DECODER_DEBUG_LOG("gles2(%p): glDisableiEXT(cap:0x%08x index:%u )", stream, var_cap, var_index);
9619 			this->glDisableiEXT_dec(this, var_cap, var_index);
9620 			SET_LASTCALL("glDisableiEXT");
9621 			android::base::endTrace();
9622 			break;
9623 		}
9624 		case OP_glBlendEquationiEXT: {
9625 			android::base::beginTrace("glBlendEquationiEXT decode");
9626 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
9627 			GLenum var_mode = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
9628 			if (useChecksum) {
9629 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
9630 					"gles2_decoder_context_t::decode, OP_glBlendEquationiEXT: GL checksumCalculator failure\n");
9631 			}
9632 			#ifdef CHECK_GL_ERRORS
9633 			GLint err = this->glGetError();
9634 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBlendEquationiEXT\n", err);
9635 			#endif
9636 			DECODER_DEBUG_LOG("gles2(%p): glBlendEquationiEXT(index:%u mode:0x%08x )", stream, var_index, var_mode);
9637 			this->glBlendEquationiEXT_dec(this, var_index, var_mode);
9638 			SET_LASTCALL("glBlendEquationiEXT");
9639 			android::base::endTrace();
9640 			break;
9641 		}
9642 		case OP_glBlendEquationSeparateiEXT: {
9643 			android::base::beginTrace("glBlendEquationSeparateiEXT decode");
9644 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
9645 			GLenum var_modeRGB = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
9646 			GLenum var_modeAlpha = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
9647 			if (useChecksum) {
9648 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
9649 					"gles2_decoder_context_t::decode, OP_glBlendEquationSeparateiEXT: GL checksumCalculator failure\n");
9650 			}
9651 			#ifdef CHECK_GL_ERRORS
9652 			GLint err = this->glGetError();
9653 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBlendEquationSeparateiEXT\n", err);
9654 			#endif
9655 			DECODER_DEBUG_LOG("gles2(%p): glBlendEquationSeparateiEXT(index:%u modeRGB:0x%08x modeAlpha:0x%08x )", stream, var_index, var_modeRGB, var_modeAlpha);
9656 			this->glBlendEquationSeparateiEXT_dec(this, var_index, var_modeRGB, var_modeAlpha);
9657 			SET_LASTCALL("glBlendEquationSeparateiEXT");
9658 			android::base::endTrace();
9659 			break;
9660 		}
9661 		case OP_glBlendFunciEXT: {
9662 			android::base::beginTrace("glBlendFunciEXT decode");
9663 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
9664 			GLenum var_sfactor = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
9665 			GLenum var_dfactor = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
9666 			if (useChecksum) {
9667 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4, checksumSize,
9668 					"gles2_decoder_context_t::decode, OP_glBlendFunciEXT: GL checksumCalculator failure\n");
9669 			}
9670 			#ifdef CHECK_GL_ERRORS
9671 			GLint err = this->glGetError();
9672 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBlendFunciEXT\n", err);
9673 			#endif
9674 			DECODER_DEBUG_LOG("gles2(%p): glBlendFunciEXT(index:%u sfactor:0x%08x dfactor:0x%08x )", stream, var_index, var_sfactor, var_dfactor);
9675 			this->glBlendFunciEXT_dec(this, var_index, var_sfactor, var_dfactor);
9676 			SET_LASTCALL("glBlendFunciEXT");
9677 			android::base::endTrace();
9678 			break;
9679 		}
9680 		case OP_glBlendFuncSeparateiEXT: {
9681 			android::base::beginTrace("glBlendFuncSeparateiEXT decode");
9682 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
9683 			GLenum var_srcRGB = Unpack<GLenum,uint32_t>(ptr + 8 + 4);
9684 			GLenum var_dstRGB = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4);
9685 			GLenum var_srcAlpha = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4);
9686 			GLenum var_dstAlpha = Unpack<GLenum,uint32_t>(ptr + 8 + 4 + 4 + 4 + 4);
9687 			if (useChecksum) {
9688 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
9689 					"gles2_decoder_context_t::decode, OP_glBlendFuncSeparateiEXT: GL checksumCalculator failure\n");
9690 			}
9691 			#ifdef CHECK_GL_ERRORS
9692 			GLint err = this->glGetError();
9693 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glBlendFuncSeparateiEXT\n", err);
9694 			#endif
9695 			DECODER_DEBUG_LOG("gles2(%p): glBlendFuncSeparateiEXT(index:%u srcRGB:0x%08x dstRGB:0x%08x srcAlpha:0x%08x dstAlpha:0x%08x )", stream, var_index, var_srcRGB, var_dstRGB, var_srcAlpha, var_dstAlpha);
9696 			this->glBlendFuncSeparateiEXT_dec(this, var_index, var_srcRGB, var_dstRGB, var_srcAlpha, var_dstAlpha);
9697 			SET_LASTCALL("glBlendFuncSeparateiEXT");
9698 			android::base::endTrace();
9699 			break;
9700 		}
9701 		case OP_glColorMaskiEXT: {
9702 			android::base::beginTrace("glColorMaskiEXT decode");
9703 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8);
9704 			GLboolean var_red = Unpack<GLboolean,uint8_t>(ptr + 8 + 4);
9705 			GLboolean var_green = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 1);
9706 			GLboolean var_blue = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 1 + 1);
9707 			GLboolean var_alpha = Unpack<GLboolean,uint8_t>(ptr + 8 + 4 + 1 + 1 + 1);
9708 			if (useChecksum) {
9709 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 1 + 1 + 1 + 1, ptr + 8 + 4 + 1 + 1 + 1 + 1, checksumSize,
9710 					"gles2_decoder_context_t::decode, OP_glColorMaskiEXT: GL checksumCalculator failure\n");
9711 			}
9712 			#ifdef CHECK_GL_ERRORS
9713 			GLint err = this->glGetError();
9714 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glColorMaskiEXT\n", err);
9715 			#endif
9716 			DECODER_DEBUG_LOG("gles2(%p): glColorMaskiEXT(index:%u red:%d green:%d blue:%d alpha:%d )", stream, var_index, var_red, var_green, var_blue, var_alpha);
9717 			this->glColorMaskiEXT_dec(this, var_index, var_red, var_green, var_blue, var_alpha);
9718 			SET_LASTCALL("glColorMaskiEXT");
9719 			android::base::endTrace();
9720 			break;
9721 		}
9722 		case OP_glIsEnablediEXT: {
9723 			android::base::beginTrace("glIsEnablediEXT decode");
9724 			GLenum var_cap = Unpack<GLenum,uint32_t>(ptr + 8);
9725 			GLuint var_index = Unpack<GLuint,uint32_t>(ptr + 8 + 4);
9726 			if (useChecksum) {
9727 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
9728 					"gles2_decoder_context_t::decode, OP_glIsEnablediEXT: GL checksumCalculator failure\n");
9729 			}
9730 			size_t totalTmpSize = sizeof(GLboolean);
9731 			totalTmpSize += checksumSize;
9732 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
9733 			#ifdef CHECK_GL_ERRORS
9734 			GLint err = this->glGetError();
9735 			if (err) fprintf(stderr, "gles2 Error (pre-call): 0x%X before glIsEnablediEXT\n", err);
9736 			#endif
9737 			DECODER_DEBUG_LOG("gles2(%p): glIsEnablediEXT(cap:0x%08x index:%u )", stream, var_cap, var_index);
9738 			*(GLboolean *)(&tmpBuf[0]) = 			this->glIsEnablediEXT_dec(this, var_cap, var_index);
9739 			if (useChecksum) {
9740 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
9741 			}
9742 			stream->flush();
9743 			SET_LASTCALL("glIsEnablediEXT");
9744 			android::base::endTrace();
9745 			break;
9746 		}
9747 		default:
9748 			return ptr - (unsigned char*)buf;
9749 		} //switch
9750 		#ifdef CHECK_GL_ERRORS
9751 		GLint err = this->glGetError();
9752 		if (err) fprintf(stderr, "gles2 Error (post-call): 0x%X in %s\n", err, lastCall);
9753 		#endif
9754 		ptr += packetLen;
9755 	} // while
9756 	return ptr - (unsigned char*)buf;
9757 }
9758 }  // namespace gfxstream
9759 
9760