• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Generated Code - DO NOT EDIT !!
2 // generated by 'emugen'
3 
4 
5 #include <string.h>
6 #include "magma_opcodes.h"
7 
8 #include "magma_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 magma_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_magma_device_import: {
43 			android::base::beginTrace("magma_device_import decode");
44 			magma_handle_t var_device_channel = Unpack<magma_handle_t,uint32_t>(ptr + 8);
45 			uint32_t size_device_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
46 			if (useChecksum) {
47 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4, ptr + 8 + 4 + 4, checksumSize,
48 					"magma_decoder_context_t::decode, OP_magma_device_import: GL checksumCalculator failure\n");
49 			}
50 			size_t totalTmpSize = size_device_out;
51 			totalTmpSize += sizeof(magma_status_t);
52 			totalTmpSize += checksumSize;
53 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
54 			OutputBuffer outptr_device_out(&tmpBuf[0], size_device_out);
55 			DECODER_DEBUG_LOG("magma(%p): magma_device_import(device_channel:0x%x device_out:%p(%u) )", stream, var_device_channel, (magma_device_t*)(outptr_device_out.get()), size_device_out);
56 			*(magma_status_t *)(&tmpBuf[0 + size_device_out]) = 			this->magma_device_import(var_device_channel, (magma_device_t*)(outptr_device_out.get()));
57 			outptr_device_out.flush();
58 			if (useChecksum) {
59 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
60 			}
61 			stream->flush();
62 			SET_LASTCALL("magma_device_import");
63 			android::base::endTrace();
64 			break;
65 		}
66 		case OP_magma_device_release: {
67 			android::base::beginTrace("magma_device_release decode");
68 			magma_device_t var_device = Unpack<magma_device_t,uint64_t>(ptr + 8);
69 			if (useChecksum) {
70 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8, ptr + 8 + 8, checksumSize,
71 					"magma_decoder_context_t::decode, OP_magma_device_release: GL checksumCalculator failure\n");
72 			}
73 			DECODER_DEBUG_LOG("magma(%p): magma_device_release(device:%lu )", stream, var_device);
74 			this->magma_device_release(var_device);
75 			SET_LASTCALL("magma_device_release");
76 			android::base::endTrace();
77 			break;
78 		}
79 		case OP_magma_device_query: {
80 			android::base::beginTrace("magma_device_query decode");
81 			magma_device_t var_device = Unpack<magma_device_t,uint64_t>(ptr + 8);
82 			uint64_t var_id = Unpack<uint64_t,uint64_t>(ptr + 8 + 8);
83 			uint32_t size_result_buffer_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 8);
84 			uint32_t size_result_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 8 + 4);
85 			if (useChecksum) {
86 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 8 + 4 + 4, ptr + 8 + 8 + 8 + 4 + 4, checksumSize,
87 					"magma_decoder_context_t::decode, OP_magma_device_query: GL checksumCalculator failure\n");
88 			}
89 			size_t totalTmpSize = size_result_buffer_out;
90 			totalTmpSize += size_result_out;
91 			totalTmpSize += sizeof(magma_status_t);
92 			totalTmpSize += checksumSize;
93 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
94 			OutputBuffer outptr_result_buffer_out(&tmpBuf[0], size_result_buffer_out);
95 			OutputBuffer outptr_result_out(&tmpBuf[0 + size_result_buffer_out], size_result_out);
96 			DECODER_DEBUG_LOG("magma(%p): magma_device_query(device:%lu id:%lu result_buffer_out:%p(%u) result_out:%p(%u) )", stream, var_device, var_id, (magma_handle_t*)(outptr_result_buffer_out.get()), size_result_buffer_out, (uint64_t*)(outptr_result_out.get()), size_result_out);
97 			*(magma_status_t *)(&tmpBuf[0 + size_result_buffer_out + size_result_out]) = 			this->magma_device_query(var_device, var_id, (magma_handle_t*)(outptr_result_buffer_out.get()), (uint64_t*)(outptr_result_out.get()));
98 			outptr_result_buffer_out.flush();
99 			outptr_result_out.flush();
100 			if (useChecksum) {
101 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
102 			}
103 			stream->flush();
104 			SET_LASTCALL("magma_device_query");
105 			android::base::endTrace();
106 			break;
107 		}
108 		case OP_magma_device_create_connection: {
109 			android::base::beginTrace("magma_device_create_connection decode");
110 			magma_device_t var_device = Unpack<magma_device_t,uint64_t>(ptr + 8);
111 			uint32_t size_connection_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8);
112 			if (useChecksum) {
113 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4, ptr + 8 + 8 + 4, checksumSize,
114 					"magma_decoder_context_t::decode, OP_magma_device_create_connection: GL checksumCalculator failure\n");
115 			}
116 			size_t totalTmpSize = size_connection_out;
117 			totalTmpSize += sizeof(magma_status_t);
118 			totalTmpSize += checksumSize;
119 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
120 			OutputBuffer outptr_connection_out(&tmpBuf[0], size_connection_out);
121 			DECODER_DEBUG_LOG("magma(%p): magma_device_create_connection(device:%lu connection_out:%p(%u) )", stream, var_device, (magma_connection_t*)(outptr_connection_out.get()), size_connection_out);
122 			*(magma_status_t *)(&tmpBuf[0 + size_connection_out]) = 			this->magma_device_create_connection(var_device, (magma_connection_t*)(outptr_connection_out.get()));
123 			outptr_connection_out.flush();
124 			if (useChecksum) {
125 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
126 			}
127 			stream->flush();
128 			SET_LASTCALL("magma_device_create_connection");
129 			android::base::endTrace();
130 			break;
131 		}
132 		case OP_magma_connection_release: {
133 			android::base::beginTrace("magma_connection_release decode");
134 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
135 			if (useChecksum) {
136 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8, ptr + 8 + 8, checksumSize,
137 					"magma_decoder_context_t::decode, OP_magma_connection_release: GL checksumCalculator failure\n");
138 			}
139 			DECODER_DEBUG_LOG("magma(%p): magma_connection_release(connection:%lu )", stream, var_connection);
140 			this->magma_connection_release(var_connection);
141 			SET_LASTCALL("magma_connection_release");
142 			android::base::endTrace();
143 			break;
144 		}
145 		case OP_magma_connection_get_error: {
146 			android::base::beginTrace("magma_connection_get_error decode");
147 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
148 			if (useChecksum) {
149 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8, ptr + 8 + 8, checksumSize,
150 					"magma_decoder_context_t::decode, OP_magma_connection_get_error: GL checksumCalculator failure\n");
151 			}
152 			size_t totalTmpSize = sizeof(magma_status_t);
153 			totalTmpSize += checksumSize;
154 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
155 			DECODER_DEBUG_LOG("magma(%p): magma_connection_get_error(connection:%lu )", stream, var_connection);
156 			*(magma_status_t *)(&tmpBuf[0]) = 			this->magma_connection_get_error(var_connection);
157 			if (useChecksum) {
158 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
159 			}
160 			stream->flush();
161 			SET_LASTCALL("magma_connection_get_error");
162 			android::base::endTrace();
163 			break;
164 		}
165 		case OP_magma_connection_create_context: {
166 			android::base::beginTrace("magma_connection_create_context decode");
167 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
168 			uint32_t size_context_id_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8);
169 			if (useChecksum) {
170 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4, ptr + 8 + 8 + 4, checksumSize,
171 					"magma_decoder_context_t::decode, OP_magma_connection_create_context: GL checksumCalculator failure\n");
172 			}
173 			size_t totalTmpSize = size_context_id_out;
174 			totalTmpSize += sizeof(magma_status_t);
175 			totalTmpSize += checksumSize;
176 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
177 			OutputBuffer outptr_context_id_out(&tmpBuf[0], size_context_id_out);
178 			DECODER_DEBUG_LOG("magma(%p): magma_connection_create_context(connection:%lu context_id_out:%p(%u) )", stream, var_connection, (uint32_t*)(outptr_context_id_out.get()), size_context_id_out);
179 			*(magma_status_t *)(&tmpBuf[0 + size_context_id_out]) = 			this->magma_connection_create_context(var_connection, (uint32_t*)(outptr_context_id_out.get()));
180 			outptr_context_id_out.flush();
181 			if (useChecksum) {
182 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
183 			}
184 			stream->flush();
185 			SET_LASTCALL("magma_connection_create_context");
186 			android::base::endTrace();
187 			break;
188 		}
189 		case OP_magma_connection_release_context: {
190 			android::base::beginTrace("magma_connection_release_context decode");
191 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
192 			uint32_t var_context_id = Unpack<uint32_t,uint32_t>(ptr + 8 + 8);
193 			if (useChecksum) {
194 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4, ptr + 8 + 8 + 4, checksumSize,
195 					"magma_decoder_context_t::decode, OP_magma_connection_release_context: GL checksumCalculator failure\n");
196 			}
197 			DECODER_DEBUG_LOG("magma(%p): magma_connection_release_context(connection:%lu context_id:%u )", stream, var_connection, var_context_id);
198 			this->magma_connection_release_context(var_connection, var_context_id);
199 			SET_LASTCALL("magma_connection_release_context");
200 			android::base::endTrace();
201 			break;
202 		}
203 		case OP_magma_connection_create_buffer: {
204 			android::base::beginTrace("magma_connection_create_buffer decode");
205 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
206 			uint64_t var_size = Unpack<uint64_t,uint64_t>(ptr + 8 + 8);
207 			uint32_t size_size_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 8);
208 			uint32_t size_buffer_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 8 + 4);
209 			uint32_t size_id_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 8 + 4 + 4);
210 			if (useChecksum) {
211 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 8 + 4 + 4 + 4, ptr + 8 + 8 + 8 + 4 + 4 + 4, checksumSize,
212 					"magma_decoder_context_t::decode, OP_magma_connection_create_buffer: GL checksumCalculator failure\n");
213 			}
214 			size_t totalTmpSize = size_size_out;
215 			totalTmpSize += size_buffer_out;
216 			totalTmpSize += size_id_out;
217 			totalTmpSize += sizeof(magma_status_t);
218 			totalTmpSize += checksumSize;
219 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
220 			OutputBuffer outptr_size_out(&tmpBuf[0], size_size_out);
221 			OutputBuffer outptr_buffer_out(&tmpBuf[0 + size_size_out], size_buffer_out);
222 			OutputBuffer outptr_id_out(&tmpBuf[0 + size_size_out + size_buffer_out], size_id_out);
223 			DECODER_DEBUG_LOG("magma(%p): magma_connection_create_buffer(connection:%lu size:%lu size_out:%p(%u) buffer_out:%p(%u) id_out:%p(%u) )", stream, var_connection, var_size, (uint64_t*)(outptr_size_out.get()), size_size_out, (magma_buffer_t*)(outptr_buffer_out.get()), size_buffer_out, (magma_buffer_id_t*)(outptr_id_out.get()), size_id_out);
224 			*(magma_status_t *)(&tmpBuf[0 + size_size_out + size_buffer_out + size_id_out]) = 			this->magma_connection_create_buffer(var_connection, var_size, (uint64_t*)(outptr_size_out.get()), (magma_buffer_t*)(outptr_buffer_out.get()), (magma_buffer_id_t*)(outptr_id_out.get()));
225 			outptr_size_out.flush();
226 			outptr_buffer_out.flush();
227 			outptr_id_out.flush();
228 			if (useChecksum) {
229 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
230 			}
231 			stream->flush();
232 			SET_LASTCALL("magma_connection_create_buffer");
233 			android::base::endTrace();
234 			break;
235 		}
236 		case OP_magma_connection_release_buffer: {
237 			android::base::beginTrace("magma_connection_release_buffer decode");
238 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
239 			magma_buffer_t var_buffer = Unpack<magma_buffer_t,uint64_t>(ptr + 8 + 8);
240 			if (useChecksum) {
241 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 8, ptr + 8 + 8 + 8, checksumSize,
242 					"magma_decoder_context_t::decode, OP_magma_connection_release_buffer: GL checksumCalculator failure\n");
243 			}
244 			DECODER_DEBUG_LOG("magma(%p): magma_connection_release_buffer(connection:%lu buffer:%lu )", stream, var_connection, var_buffer);
245 			this->magma_connection_release_buffer(var_connection, var_buffer);
246 			SET_LASTCALL("magma_connection_release_buffer");
247 			android::base::endTrace();
248 			break;
249 		}
250 		case OP_magma_connection_import_buffer: {
251 			android::base::beginTrace("magma_connection_import_buffer decode");
252 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
253 			magma_handle_t var_buffer_handle = Unpack<magma_handle_t,uint32_t>(ptr + 8 + 8);
254 			uint32_t size_size_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 4);
255 			uint32_t size_buffer_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 4 + 4);
256 			uint32_t size_id_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 4 + 4 + 4);
257 			if (useChecksum) {
258 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4 + 4 + 4 + 4, ptr + 8 + 8 + 4 + 4 + 4 + 4, checksumSize,
259 					"magma_decoder_context_t::decode, OP_magma_connection_import_buffer: GL checksumCalculator failure\n");
260 			}
261 			size_t totalTmpSize = size_size_out;
262 			totalTmpSize += size_buffer_out;
263 			totalTmpSize += size_id_out;
264 			totalTmpSize += sizeof(magma_status_t);
265 			totalTmpSize += checksumSize;
266 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
267 			OutputBuffer outptr_size_out(&tmpBuf[0], size_size_out);
268 			OutputBuffer outptr_buffer_out(&tmpBuf[0 + size_size_out], size_buffer_out);
269 			OutputBuffer outptr_id_out(&tmpBuf[0 + size_size_out + size_buffer_out], size_id_out);
270 			DECODER_DEBUG_LOG("magma(%p): magma_connection_import_buffer(connection:%lu buffer_handle:0x%x size_out:%p(%u) buffer_out:%p(%u) id_out:%p(%u) )", stream, var_connection, var_buffer_handle, (uint64_t*)(outptr_size_out.get()), size_size_out, (magma_buffer_t*)(outptr_buffer_out.get()), size_buffer_out, (magma_buffer_id_t*)(outptr_id_out.get()), size_id_out);
271 			*(magma_status_t *)(&tmpBuf[0 + size_size_out + size_buffer_out + size_id_out]) = 			this->magma_connection_import_buffer(var_connection, var_buffer_handle, (uint64_t*)(outptr_size_out.get()), (magma_buffer_t*)(outptr_buffer_out.get()), (magma_buffer_id_t*)(outptr_id_out.get()));
272 			outptr_size_out.flush();
273 			outptr_buffer_out.flush();
274 			outptr_id_out.flush();
275 			if (useChecksum) {
276 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
277 			}
278 			stream->flush();
279 			SET_LASTCALL("magma_connection_import_buffer");
280 			android::base::endTrace();
281 			break;
282 		}
283 		case OP_magma_connection_create_semaphore: {
284 			android::base::beginTrace("magma_connection_create_semaphore decode");
285 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
286 			uint32_t size_semaphore_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8);
287 			uint32_t size_id_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 4);
288 			if (useChecksum) {
289 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4 + 4, ptr + 8 + 8 + 4 + 4, checksumSize,
290 					"magma_decoder_context_t::decode, OP_magma_connection_create_semaphore: GL checksumCalculator failure\n");
291 			}
292 			size_t totalTmpSize = size_semaphore_out;
293 			totalTmpSize += size_id_out;
294 			totalTmpSize += sizeof(magma_status_t);
295 			totalTmpSize += checksumSize;
296 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
297 			OutputBuffer outptr_semaphore_out(&tmpBuf[0], size_semaphore_out);
298 			OutputBuffer outptr_id_out(&tmpBuf[0 + size_semaphore_out], size_id_out);
299 			DECODER_DEBUG_LOG("magma(%p): magma_connection_create_semaphore(connection:%lu semaphore_out:%p(%u) id_out:%p(%u) )", stream, var_connection, (magma_semaphore_t*)(outptr_semaphore_out.get()), size_semaphore_out, (magma_semaphore_id_t*)(outptr_id_out.get()), size_id_out);
300 			*(magma_status_t *)(&tmpBuf[0 + size_semaphore_out + size_id_out]) = 			this->magma_connection_create_semaphore(var_connection, (magma_semaphore_t*)(outptr_semaphore_out.get()), (magma_semaphore_id_t*)(outptr_id_out.get()));
301 			outptr_semaphore_out.flush();
302 			outptr_id_out.flush();
303 			if (useChecksum) {
304 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
305 			}
306 			stream->flush();
307 			SET_LASTCALL("magma_connection_create_semaphore");
308 			android::base::endTrace();
309 			break;
310 		}
311 		case OP_magma_connection_release_semaphore: {
312 			android::base::beginTrace("magma_connection_release_semaphore decode");
313 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
314 			magma_semaphore_t var_semaphore = Unpack<magma_semaphore_t,uint64_t>(ptr + 8 + 8);
315 			if (useChecksum) {
316 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 8, ptr + 8 + 8 + 8, checksumSize,
317 					"magma_decoder_context_t::decode, OP_magma_connection_release_semaphore: GL checksumCalculator failure\n");
318 			}
319 			DECODER_DEBUG_LOG("magma(%p): magma_connection_release_semaphore(connection:%lu semaphore:%lu )", stream, var_connection, var_semaphore);
320 			this->magma_connection_release_semaphore(var_connection, var_semaphore);
321 			SET_LASTCALL("magma_connection_release_semaphore");
322 			android::base::endTrace();
323 			break;
324 		}
325 		case OP_magma_connection_import_semaphore: {
326 			android::base::beginTrace("magma_connection_import_semaphore decode");
327 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
328 			magma_handle_t var_semaphore_handle = Unpack<magma_handle_t,uint32_t>(ptr + 8 + 8);
329 			uint32_t size_semaphore_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 4);
330 			uint32_t size_id_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 4 + 4);
331 			if (useChecksum) {
332 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4 + 4 + 4, ptr + 8 + 8 + 4 + 4 + 4, checksumSize,
333 					"magma_decoder_context_t::decode, OP_magma_connection_import_semaphore: GL checksumCalculator failure\n");
334 			}
335 			size_t totalTmpSize = size_semaphore_out;
336 			totalTmpSize += size_id_out;
337 			totalTmpSize += sizeof(magma_status_t);
338 			totalTmpSize += checksumSize;
339 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
340 			OutputBuffer outptr_semaphore_out(&tmpBuf[0], size_semaphore_out);
341 			OutputBuffer outptr_id_out(&tmpBuf[0 + size_semaphore_out], size_id_out);
342 			DECODER_DEBUG_LOG("magma(%p): magma_connection_import_semaphore(connection:%lu semaphore_handle:0x%x semaphore_out:%p(%u) id_out:%p(%u) )", stream, var_connection, var_semaphore_handle, (magma_semaphore_t*)(outptr_semaphore_out.get()), size_semaphore_out, (magma_semaphore_id_t*)(outptr_id_out.get()), size_id_out);
343 			*(magma_status_t *)(&tmpBuf[0 + size_semaphore_out + size_id_out]) = 			this->magma_connection_import_semaphore(var_connection, var_semaphore_handle, (magma_semaphore_t*)(outptr_semaphore_out.get()), (magma_semaphore_id_t*)(outptr_id_out.get()));
344 			outptr_semaphore_out.flush();
345 			outptr_id_out.flush();
346 			if (useChecksum) {
347 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
348 			}
349 			stream->flush();
350 			SET_LASTCALL("magma_connection_import_semaphore");
351 			android::base::endTrace();
352 			break;
353 		}
354 		case OP_magma_connection_perform_buffer_op: {
355 			android::base::beginTrace("magma_connection_perform_buffer_op decode");
356 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
357 			magma_buffer_t var_buffer = Unpack<magma_buffer_t,uint64_t>(ptr + 8 + 8);
358 			uint32_t var_options = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 8);
359 			uint64_t var_start_offset = Unpack<uint64_t,uint64_t>(ptr + 8 + 8 + 8 + 4);
360 			uint64_t var_length = Unpack<uint64_t,uint64_t>(ptr + 8 + 8 + 8 + 4 + 8);
361 			if (useChecksum) {
362 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 8 + 4 + 8 + 8, ptr + 8 + 8 + 8 + 4 + 8 + 8, checksumSize,
363 					"magma_decoder_context_t::decode, OP_magma_connection_perform_buffer_op: GL checksumCalculator failure\n");
364 			}
365 			size_t totalTmpSize = sizeof(magma_status_t);
366 			totalTmpSize += checksumSize;
367 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
368 			DECODER_DEBUG_LOG("magma(%p): magma_connection_perform_buffer_op(connection:%lu buffer:%lu options:%u start_offset:%lu length:%lu )", stream, var_connection, var_buffer, var_options, var_start_offset, var_length);
369 			*(magma_status_t *)(&tmpBuf[0]) = 			this->magma_connection_perform_buffer_op(var_connection, var_buffer, var_options, var_start_offset, var_length);
370 			if (useChecksum) {
371 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
372 			}
373 			stream->flush();
374 			SET_LASTCALL("magma_connection_perform_buffer_op");
375 			android::base::endTrace();
376 			break;
377 		}
378 		case OP_magma_connection_map_buffer: {
379 			android::base::beginTrace("magma_connection_map_buffer decode");
380 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
381 			uint64_t var_hw_va = Unpack<uint64_t,uint64_t>(ptr + 8 + 8);
382 			magma_buffer_t var_buffer = Unpack<magma_buffer_t,uint64_t>(ptr + 8 + 8 + 8);
383 			uint64_t var_offset = Unpack<uint64_t,uint64_t>(ptr + 8 + 8 + 8 + 8);
384 			uint64_t var_length = Unpack<uint64_t,uint64_t>(ptr + 8 + 8 + 8 + 8 + 8);
385 			uint64_t var_map_flags = Unpack<uint64_t,uint64_t>(ptr + 8 + 8 + 8 + 8 + 8 + 8);
386 			if (useChecksum) {
387 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 8 + 8 + 8 + 8 + 8, ptr + 8 + 8 + 8 + 8 + 8 + 8 + 8, checksumSize,
388 					"magma_decoder_context_t::decode, OP_magma_connection_map_buffer: GL checksumCalculator failure\n");
389 			}
390 			size_t totalTmpSize = sizeof(magma_status_t);
391 			totalTmpSize += checksumSize;
392 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
393 			DECODER_DEBUG_LOG("magma(%p): magma_connection_map_buffer(connection:%lu hw_va:%lu buffer:%lu offset:%lu length:%lu map_flags:%lu )", stream, var_connection, var_hw_va, var_buffer, var_offset, var_length, var_map_flags);
394 			*(magma_status_t *)(&tmpBuf[0]) = 			this->magma_connection_map_buffer(var_connection, var_hw_va, var_buffer, var_offset, var_length, var_map_flags);
395 			if (useChecksum) {
396 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
397 			}
398 			stream->flush();
399 			SET_LASTCALL("magma_connection_map_buffer");
400 			android::base::endTrace();
401 			break;
402 		}
403 		case OP_magma_connection_unmap_buffer: {
404 			android::base::beginTrace("magma_connection_unmap_buffer decode");
405 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
406 			uint64_t var_hw_va = Unpack<uint64_t,uint64_t>(ptr + 8 + 8);
407 			magma_buffer_t var_buffer = Unpack<magma_buffer_t,uint64_t>(ptr + 8 + 8 + 8);
408 			if (useChecksum) {
409 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 8 + 8, ptr + 8 + 8 + 8 + 8, checksumSize,
410 					"magma_decoder_context_t::decode, OP_magma_connection_unmap_buffer: GL checksumCalculator failure\n");
411 			}
412 			DECODER_DEBUG_LOG("magma(%p): magma_connection_unmap_buffer(connection:%lu hw_va:%lu buffer:%lu )", stream, var_connection, var_hw_va, var_buffer);
413 			this->magma_connection_unmap_buffer(var_connection, var_hw_va, var_buffer);
414 			SET_LASTCALL("magma_connection_unmap_buffer");
415 			android::base::endTrace();
416 			break;
417 		}
418 		case OP_magma_connection_execute_command: {
419 			android::base::beginTrace("magma_connection_execute_command decode");
420 			uint32_t size_parameters __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8);
421 			InputBuffer inptr_parameters(ptr + 8 + 4, size_parameters);
422 			uint64_t var_parameter_count = Unpack<uint64_t,uint64_t>(ptr + 8 + 4 + size_parameters);
423 			if (useChecksum) {
424 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + size_parameters + 8, ptr + 8 + 4 + size_parameters + 8, checksumSize,
425 					"magma_decoder_context_t::decode, OP_magma_connection_execute_command: GL checksumCalculator failure\n");
426 			}
427 			size_t totalTmpSize = size_parameters;
428 			totalTmpSize += sizeof(magma_status_t);
429 			totalTmpSize += checksumSize;
430 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
431 			OutputBuffer outptr_parameters(&tmpBuf[0], size_parameters);
432 			memcpy(outptr_parameters.get(), inptr_parameters.get(), size_parameters);
433 			DECODER_DEBUG_LOG("magma(%p): magma_connection_execute_command(parameters:%p(%u) parameter_count:%lu )", stream, (uint64_t*)(outptr_parameters.get()), size_parameters, var_parameter_count);
434 			*(magma_status_t *)(&tmpBuf[0 + size_parameters]) = 			this->magma_connection_execute_command((uint64_t*)(outptr_parameters.get()), var_parameter_count);
435 			outptr_parameters.flush();
436 			if (useChecksum) {
437 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
438 			}
439 			stream->flush();
440 			SET_LASTCALL("magma_connection_execute_command");
441 			android::base::endTrace();
442 			break;
443 		}
444 		case OP_magma_connection_execute_immediate_commands: {
445 			android::base::beginTrace("magma_connection_execute_immediate_commands decode");
446 			uint32_t size_parameters __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8);
447 			InputBuffer inptr_parameters(ptr + 8 + 4, size_parameters);
448 			uint64_t var_parameter_count = Unpack<uint64_t,uint64_t>(ptr + 8 + 4 + size_parameters);
449 			if (useChecksum) {
450 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + size_parameters + 8, ptr + 8 + 4 + size_parameters + 8, checksumSize,
451 					"magma_decoder_context_t::decode, OP_magma_connection_execute_immediate_commands: GL checksumCalculator failure\n");
452 			}
453 			size_t totalTmpSize = size_parameters;
454 			totalTmpSize += sizeof(magma_status_t);
455 			totalTmpSize += checksumSize;
456 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
457 			OutputBuffer outptr_parameters(&tmpBuf[0], size_parameters);
458 			memcpy(outptr_parameters.get(), inptr_parameters.get(), size_parameters);
459 			DECODER_DEBUG_LOG("magma(%p): magma_connection_execute_immediate_commands(parameters:%p(%u) parameter_count:%lu )", stream, (uint64_t*)(outptr_parameters.get()), size_parameters, var_parameter_count);
460 			*(magma_status_t *)(&tmpBuf[0 + size_parameters]) = 			this->magma_connection_execute_immediate_commands((uint64_t*)(outptr_parameters.get()), var_parameter_count);
461 			outptr_parameters.flush();
462 			if (useChecksum) {
463 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
464 			}
465 			stream->flush();
466 			SET_LASTCALL("magma_connection_execute_immediate_commands");
467 			android::base::endTrace();
468 			break;
469 		}
470 		case OP_magma_connection_flush: {
471 			android::base::beginTrace("magma_connection_flush decode");
472 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
473 			if (useChecksum) {
474 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8, ptr + 8 + 8, checksumSize,
475 					"magma_decoder_context_t::decode, OP_magma_connection_flush: GL checksumCalculator failure\n");
476 			}
477 			size_t totalTmpSize = sizeof(magma_status_t);
478 			totalTmpSize += checksumSize;
479 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
480 			DECODER_DEBUG_LOG("magma(%p): magma_connection_flush(connection:%lu )", stream, var_connection);
481 			*(magma_status_t *)(&tmpBuf[0]) = 			this->magma_connection_flush(var_connection);
482 			if (useChecksum) {
483 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
484 			}
485 			stream->flush();
486 			SET_LASTCALL("magma_connection_flush");
487 			android::base::endTrace();
488 			break;
489 		}
490 		case OP_magma_connection_get_notification_channel_handle: {
491 			android::base::beginTrace("magma_connection_get_notification_channel_handle decode");
492 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
493 			if (useChecksum) {
494 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8, ptr + 8 + 8, checksumSize,
495 					"magma_decoder_context_t::decode, OP_magma_connection_get_notification_channel_handle: GL checksumCalculator failure\n");
496 			}
497 			size_t totalTmpSize = sizeof(magma_handle_t);
498 			totalTmpSize += checksumSize;
499 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
500 			DECODER_DEBUG_LOG("magma(%p): magma_connection_get_notification_channel_handle(connection:%lu )", stream, var_connection);
501 			*(magma_handle_t *)(&tmpBuf[0]) = 			this->magma_connection_get_notification_channel_handle(var_connection);
502 			if (useChecksum) {
503 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
504 			}
505 			stream->flush();
506 			SET_LASTCALL("magma_connection_get_notification_channel_handle");
507 			android::base::endTrace();
508 			break;
509 		}
510 		case OP_magma_connection_read_notification_channel: {
511 			android::base::beginTrace("magma_connection_read_notification_channel decode");
512 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
513 			uint32_t size_buffer __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8);
514 			uint64_t var_buffer_size = Unpack<uint64_t,uint64_t>(ptr + 8 + 8 + 4);
515 			uint32_t size_buffer_size_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 4 + 8);
516 			uint32_t size_more_data_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 4 + 8 + 4);
517 			if (useChecksum) {
518 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4 + 8 + 4 + 4, ptr + 8 + 8 + 4 + 8 + 4 + 4, checksumSize,
519 					"magma_decoder_context_t::decode, OP_magma_connection_read_notification_channel: GL checksumCalculator failure\n");
520 			}
521 			size_t totalTmpSize = size_buffer;
522 			totalTmpSize += size_buffer_size_out;
523 			totalTmpSize += size_more_data_out;
524 			totalTmpSize += sizeof(magma_status_t);
525 			totalTmpSize += checksumSize;
526 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
527 			OutputBuffer outptr_buffer(&tmpBuf[0], size_buffer);
528 			OutputBuffer outptr_buffer_size_out(&tmpBuf[0 + size_buffer], size_buffer_size_out);
529 			OutputBuffer outptr_more_data_out(&tmpBuf[0 + size_buffer + size_buffer_size_out], size_more_data_out);
530 			DECODER_DEBUG_LOG("magma(%p): magma_connection_read_notification_channel(connection:%lu buffer:%p(%u) buffer_size:%lu buffer_size_out:%p(%u) more_data_out:%p(%u) )", stream, var_connection, (void*)(outptr_buffer.get()), size_buffer, var_buffer_size, (uint64_t*)(outptr_buffer_size_out.get()), size_buffer_size_out, (magma_bool_t*)(outptr_more_data_out.get()), size_more_data_out);
531 			*(magma_status_t *)(&tmpBuf[0 + size_buffer + size_buffer_size_out + size_more_data_out]) = 			this->magma_connection_read_notification_channel(var_connection, (void*)(outptr_buffer.get()), var_buffer_size, (uint64_t*)(outptr_buffer_size_out.get()), (magma_bool_t*)(outptr_more_data_out.get()));
532 			outptr_buffer.flush();
533 			outptr_buffer_size_out.flush();
534 			outptr_more_data_out.flush();
535 			if (useChecksum) {
536 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
537 			}
538 			stream->flush();
539 			SET_LASTCALL("magma_connection_read_notification_channel");
540 			android::base::endTrace();
541 			break;
542 		}
543 		case OP_magma_buffer_clean_cache: {
544 			android::base::beginTrace("magma_buffer_clean_cache decode");
545 			magma_buffer_t var_buffer = Unpack<magma_buffer_t,uint64_t>(ptr + 8);
546 			uint64_t var_offset = Unpack<uint64_t,uint64_t>(ptr + 8 + 8);
547 			uint64_t var_size = Unpack<uint64_t,uint64_t>(ptr + 8 + 8 + 8);
548 			magma_cache_operation_t var_operation = Unpack<magma_cache_operation_t,uint32_t>(ptr + 8 + 8 + 8 + 8);
549 			if (useChecksum) {
550 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 8 + 8 + 4, ptr + 8 + 8 + 8 + 8 + 4, checksumSize,
551 					"magma_decoder_context_t::decode, OP_magma_buffer_clean_cache: GL checksumCalculator failure\n");
552 			}
553 			size_t totalTmpSize = sizeof(magma_status_t);
554 			totalTmpSize += checksumSize;
555 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
556 			DECODER_DEBUG_LOG("magma(%p): magma_buffer_clean_cache(buffer:%lu offset:%lu size:%lu operation:%d )", stream, var_buffer, var_offset, var_size, var_operation);
557 			*(magma_status_t *)(&tmpBuf[0]) = 			this->magma_buffer_clean_cache(var_buffer, var_offset, var_size, var_operation);
558 			if (useChecksum) {
559 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
560 			}
561 			stream->flush();
562 			SET_LASTCALL("magma_buffer_clean_cache");
563 			android::base::endTrace();
564 			break;
565 		}
566 		case OP_magma_buffer_set_cache_policy: {
567 			android::base::beginTrace("magma_buffer_set_cache_policy decode");
568 			magma_buffer_t var_buffer = Unpack<magma_buffer_t,uint64_t>(ptr + 8);
569 			magma_cache_policy_t var_policy = Unpack<magma_cache_policy_t,uint32_t>(ptr + 8 + 8);
570 			if (useChecksum) {
571 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4, ptr + 8 + 8 + 4, checksumSize,
572 					"magma_decoder_context_t::decode, OP_magma_buffer_set_cache_policy: GL checksumCalculator failure\n");
573 			}
574 			size_t totalTmpSize = sizeof(magma_status_t);
575 			totalTmpSize += checksumSize;
576 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
577 			DECODER_DEBUG_LOG("magma(%p): magma_buffer_set_cache_policy(buffer:%lu policy:%d )", stream, var_buffer, var_policy);
578 			*(magma_status_t *)(&tmpBuf[0]) = 			this->magma_buffer_set_cache_policy(var_buffer, var_policy);
579 			if (useChecksum) {
580 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
581 			}
582 			stream->flush();
583 			SET_LASTCALL("magma_buffer_set_cache_policy");
584 			android::base::endTrace();
585 			break;
586 		}
587 		case OP_magma_buffer_get_cache_policy: {
588 			android::base::beginTrace("magma_buffer_get_cache_policy decode");
589 			magma_buffer_t var_buffer = Unpack<magma_buffer_t,uint64_t>(ptr + 8);
590 			uint32_t size_cache_policy_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8);
591 			if (useChecksum) {
592 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4, ptr + 8 + 8 + 4, checksumSize,
593 					"magma_decoder_context_t::decode, OP_magma_buffer_get_cache_policy: GL checksumCalculator failure\n");
594 			}
595 			size_t totalTmpSize = size_cache_policy_out;
596 			totalTmpSize += sizeof(magma_status_t);
597 			totalTmpSize += checksumSize;
598 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
599 			OutputBuffer outptr_cache_policy_out(&tmpBuf[0], size_cache_policy_out);
600 			DECODER_DEBUG_LOG("magma(%p): magma_buffer_get_cache_policy(buffer:%lu cache_policy_out:%p(%u) )", stream, var_buffer, (magma_cache_policy_t*)(outptr_cache_policy_out.get()), size_cache_policy_out);
601 			*(magma_status_t *)(&tmpBuf[0 + size_cache_policy_out]) = 			this->magma_buffer_get_cache_policy(var_buffer, (magma_cache_policy_t*)(outptr_cache_policy_out.get()));
602 			outptr_cache_policy_out.flush();
603 			if (useChecksum) {
604 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
605 			}
606 			stream->flush();
607 			SET_LASTCALL("magma_buffer_get_cache_policy");
608 			android::base::endTrace();
609 			break;
610 		}
611 		case OP_magma_buffer_set_name: {
612 			android::base::beginTrace("magma_buffer_set_name decode");
613 			magma_buffer_t var_buffer = Unpack<magma_buffer_t,uint64_t>(ptr + 8);
614 			uint32_t size_name __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8);
615 			InputBuffer inptr_name(ptr + 8 + 8 + 4, size_name);
616 			uint64_t var_name_size = Unpack<uint64_t,uint64_t>(ptr + 8 + 8 + 4 + size_name);
617 			if (useChecksum) {
618 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4 + size_name + 8, ptr + 8 + 8 + 4 + size_name + 8, checksumSize,
619 					"magma_decoder_context_t::decode, OP_magma_buffer_set_name: GL checksumCalculator failure\n");
620 			}
621 			size_t totalTmpSize = sizeof(magma_status_t);
622 			totalTmpSize += checksumSize;
623 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
624 			DECODER_DEBUG_LOG("magma(%p): magma_buffer_set_name(buffer:%lu name:%p(%u) name_size:%lu )", stream, var_buffer, (void*)(inptr_name.get()), size_name, var_name_size);
625 			*(magma_status_t *)(&tmpBuf[0]) = 			this->magma_buffer_set_name(var_buffer, (void*)(inptr_name.get()), var_name_size);
626 			if (useChecksum) {
627 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
628 			}
629 			stream->flush();
630 			SET_LASTCALL("magma_buffer_set_name");
631 			android::base::endTrace();
632 			break;
633 		}
634 		case OP_magma_buffer_get_info: {
635 			android::base::beginTrace("magma_buffer_get_info decode");
636 			uint32_t size_parameters __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8);
637 			InputBuffer inptr_parameters(ptr + 8 + 4, size_parameters);
638 			uint64_t var_parameter_count = Unpack<uint64_t,uint64_t>(ptr + 8 + 4 + size_parameters);
639 			if (useChecksum) {
640 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + size_parameters + 8, ptr + 8 + 4 + size_parameters + 8, checksumSize,
641 					"magma_decoder_context_t::decode, OP_magma_buffer_get_info: GL checksumCalculator failure\n");
642 			}
643 			size_t totalTmpSize = size_parameters;
644 			totalTmpSize += sizeof(magma_status_t);
645 			totalTmpSize += checksumSize;
646 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
647 			OutputBuffer outptr_parameters(&tmpBuf[0], size_parameters);
648 			memcpy(outptr_parameters.get(), inptr_parameters.get(), size_parameters);
649 			DECODER_DEBUG_LOG("magma(%p): magma_buffer_get_info(parameters:%p(%u) parameter_count:%lu )", stream, (uint64_t*)(outptr_parameters.get()), size_parameters, var_parameter_count);
650 			*(magma_status_t *)(&tmpBuf[0 + size_parameters]) = 			this->magma_buffer_get_info((uint64_t*)(outptr_parameters.get()), var_parameter_count);
651 			outptr_parameters.flush();
652 			if (useChecksum) {
653 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
654 			}
655 			stream->flush();
656 			SET_LASTCALL("magma_buffer_get_info");
657 			android::base::endTrace();
658 			break;
659 		}
660 		case OP_magma_buffer_get_handle: {
661 			android::base::beginTrace("magma_buffer_get_handle decode");
662 			magma_buffer_t var_buffer = Unpack<magma_buffer_t,uint64_t>(ptr + 8);
663 			uint32_t size_handle_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8);
664 			if (useChecksum) {
665 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4, ptr + 8 + 8 + 4, checksumSize,
666 					"magma_decoder_context_t::decode, OP_magma_buffer_get_handle: GL checksumCalculator failure\n");
667 			}
668 			size_t totalTmpSize = size_handle_out;
669 			totalTmpSize += sizeof(magma_status_t);
670 			totalTmpSize += checksumSize;
671 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
672 			OutputBuffer outptr_handle_out(&tmpBuf[0], size_handle_out);
673 			DECODER_DEBUG_LOG("magma(%p): magma_buffer_get_handle(buffer:%lu handle_out:%p(%u) )", stream, var_buffer, (magma_handle_t*)(outptr_handle_out.get()), size_handle_out);
674 			*(magma_status_t *)(&tmpBuf[0 + size_handle_out]) = 			this->magma_buffer_get_handle(var_buffer, (magma_handle_t*)(outptr_handle_out.get()));
675 			outptr_handle_out.flush();
676 			if (useChecksum) {
677 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
678 			}
679 			stream->flush();
680 			SET_LASTCALL("magma_buffer_get_handle");
681 			android::base::endTrace();
682 			break;
683 		}
684 		case OP_magma_buffer_export: {
685 			android::base::beginTrace("magma_buffer_export decode");
686 			magma_buffer_t var_buffer = Unpack<magma_buffer_t,uint64_t>(ptr + 8);
687 			uint32_t size_buffer_handle_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8);
688 			if (useChecksum) {
689 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4, ptr + 8 + 8 + 4, checksumSize,
690 					"magma_decoder_context_t::decode, OP_magma_buffer_export: GL checksumCalculator failure\n");
691 			}
692 			size_t totalTmpSize = size_buffer_handle_out;
693 			totalTmpSize += sizeof(magma_status_t);
694 			totalTmpSize += checksumSize;
695 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
696 			OutputBuffer outptr_buffer_handle_out(&tmpBuf[0], size_buffer_handle_out);
697 			DECODER_DEBUG_LOG("magma(%p): magma_buffer_export(buffer:%lu buffer_handle_out:%p(%u) )", stream, var_buffer, (magma_handle_t*)(outptr_buffer_handle_out.get()), size_buffer_handle_out);
698 			*(magma_status_t *)(&tmpBuf[0 + size_buffer_handle_out]) = 			this->magma_buffer_export(var_buffer, (magma_handle_t*)(outptr_buffer_handle_out.get()));
699 			outptr_buffer_handle_out.flush();
700 			if (useChecksum) {
701 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
702 			}
703 			stream->flush();
704 			SET_LASTCALL("magma_buffer_export");
705 			android::base::endTrace();
706 			break;
707 		}
708 		case OP_magma_semaphore_signal: {
709 			android::base::beginTrace("magma_semaphore_signal decode");
710 			magma_semaphore_t var_semaphore = Unpack<magma_semaphore_t,uint64_t>(ptr + 8);
711 			if (useChecksum) {
712 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8, ptr + 8 + 8, checksumSize,
713 					"magma_decoder_context_t::decode, OP_magma_semaphore_signal: GL checksumCalculator failure\n");
714 			}
715 			DECODER_DEBUG_LOG("magma(%p): magma_semaphore_signal(semaphore:%lu )", stream, var_semaphore);
716 			this->magma_semaphore_signal(var_semaphore);
717 			SET_LASTCALL("magma_semaphore_signal");
718 			android::base::endTrace();
719 			break;
720 		}
721 		case OP_magma_semaphore_reset: {
722 			android::base::beginTrace("magma_semaphore_reset decode");
723 			magma_semaphore_t var_semaphore = Unpack<magma_semaphore_t,uint64_t>(ptr + 8);
724 			if (useChecksum) {
725 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8, ptr + 8 + 8, checksumSize,
726 					"magma_decoder_context_t::decode, OP_magma_semaphore_reset: GL checksumCalculator failure\n");
727 			}
728 			DECODER_DEBUG_LOG("magma(%p): magma_semaphore_reset(semaphore:%lu )", stream, var_semaphore);
729 			this->magma_semaphore_reset(var_semaphore);
730 			SET_LASTCALL("magma_semaphore_reset");
731 			android::base::endTrace();
732 			break;
733 		}
734 		case OP_magma_semaphore_export: {
735 			android::base::beginTrace("magma_semaphore_export decode");
736 			magma_semaphore_t var_semaphore = Unpack<magma_semaphore_t,uint64_t>(ptr + 8);
737 			uint32_t size_semaphore_handle_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8);
738 			if (useChecksum) {
739 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4, ptr + 8 + 8 + 4, checksumSize,
740 					"magma_decoder_context_t::decode, OP_magma_semaphore_export: GL checksumCalculator failure\n");
741 			}
742 			size_t totalTmpSize = size_semaphore_handle_out;
743 			totalTmpSize += sizeof(magma_status_t);
744 			totalTmpSize += checksumSize;
745 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
746 			OutputBuffer outptr_semaphore_handle_out(&tmpBuf[0], size_semaphore_handle_out);
747 			DECODER_DEBUG_LOG("magma(%p): magma_semaphore_export(semaphore:%lu semaphore_handle_out:%p(%u) )", stream, var_semaphore, (magma_handle_t*)(outptr_semaphore_handle_out.get()), size_semaphore_handle_out);
748 			*(magma_status_t *)(&tmpBuf[0 + size_semaphore_handle_out]) = 			this->magma_semaphore_export(var_semaphore, (magma_handle_t*)(outptr_semaphore_handle_out.get()));
749 			outptr_semaphore_handle_out.flush();
750 			if (useChecksum) {
751 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
752 			}
753 			stream->flush();
754 			SET_LASTCALL("magma_semaphore_export");
755 			android::base::endTrace();
756 			break;
757 		}
758 		case OP_magma_poll: {
759 			android::base::beginTrace("magma_poll decode");
760 			uint32_t size_items __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8);
761 			InputBuffer inptr_items(ptr + 8 + 4, size_items);
762 			uint32_t var_count = Unpack<uint32_t,uint32_t>(ptr + 8 + 4 + size_items);
763 			uint64_t var_timeout_ns = Unpack<uint64_t,uint64_t>(ptr + 8 + 4 + size_items + 4);
764 			if (useChecksum) {
765 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + size_items + 4 + 8, ptr + 8 + 4 + size_items + 4 + 8, checksumSize,
766 					"magma_decoder_context_t::decode, OP_magma_poll: GL checksumCalculator failure\n");
767 			}
768 			size_t totalTmpSize = size_items;
769 			totalTmpSize += sizeof(magma_status_t);
770 			totalTmpSize += checksumSize;
771 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
772 			OutputBuffer outptr_items(&tmpBuf[0], size_items);
773 			memcpy(outptr_items.get(), inptr_items.get(), size_items);
774 			DECODER_DEBUG_LOG("magma(%p): magma_poll(items:%p(%u) count:%u timeout_ns:%lu )", stream, (magma_poll_item_t*)(outptr_items.get()), size_items, var_count, var_timeout_ns);
775 			*(magma_status_t *)(&tmpBuf[0 + size_items]) = 			this->magma_poll((magma_poll_item_t*)(outptr_items.get()), var_count, var_timeout_ns);
776 			outptr_items.flush();
777 			if (useChecksum) {
778 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
779 			}
780 			stream->flush();
781 			SET_LASTCALL("magma_poll");
782 			android::base::endTrace();
783 			break;
784 		}
785 		case OP_magma_initialize_tracing: {
786 			android::base::beginTrace("magma_initialize_tracing decode");
787 			magma_handle_t var_channel = Unpack<magma_handle_t,uint32_t>(ptr + 8);
788 			if (useChecksum) {
789 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
790 					"magma_decoder_context_t::decode, OP_magma_initialize_tracing: GL checksumCalculator failure\n");
791 			}
792 			size_t totalTmpSize = sizeof(magma_status_t);
793 			totalTmpSize += checksumSize;
794 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
795 			DECODER_DEBUG_LOG("magma(%p): magma_initialize_tracing(channel:0x%x )", stream, var_channel);
796 			*(magma_status_t *)(&tmpBuf[0]) = 			this->magma_initialize_tracing(var_channel);
797 			if (useChecksum) {
798 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
799 			}
800 			stream->flush();
801 			SET_LASTCALL("magma_initialize_tracing");
802 			android::base::endTrace();
803 			break;
804 		}
805 		case OP_magma_initialize_logging: {
806 			android::base::beginTrace("magma_initialize_logging decode");
807 			magma_handle_t var_channel = Unpack<magma_handle_t,uint32_t>(ptr + 8);
808 			if (useChecksum) {
809 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4, ptr + 8 + 4, checksumSize,
810 					"magma_decoder_context_t::decode, OP_magma_initialize_logging: GL checksumCalculator failure\n");
811 			}
812 			size_t totalTmpSize = sizeof(magma_status_t);
813 			totalTmpSize += checksumSize;
814 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
815 			DECODER_DEBUG_LOG("magma(%p): magma_initialize_logging(channel:0x%x )", stream, var_channel);
816 			*(magma_status_t *)(&tmpBuf[0]) = 			this->magma_initialize_logging(var_channel);
817 			if (useChecksum) {
818 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
819 			}
820 			stream->flush();
821 			SET_LASTCALL("magma_initialize_logging");
822 			android::base::endTrace();
823 			break;
824 		}
825 		case OP_magma_connection_enable_performance_counter_access: {
826 			android::base::beginTrace("magma_connection_enable_performance_counter_access decode");
827 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
828 			magma_handle_t var_channel = Unpack<magma_handle_t,uint32_t>(ptr + 8 + 8);
829 			if (useChecksum) {
830 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4, ptr + 8 + 8 + 4, checksumSize,
831 					"magma_decoder_context_t::decode, OP_magma_connection_enable_performance_counter_access: GL checksumCalculator failure\n");
832 			}
833 			size_t totalTmpSize = sizeof(magma_status_t);
834 			totalTmpSize += checksumSize;
835 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
836 			DECODER_DEBUG_LOG("magma(%p): magma_connection_enable_performance_counter_access(connection:%lu channel:0x%x )", stream, var_connection, var_channel);
837 			*(magma_status_t *)(&tmpBuf[0]) = 			this->magma_connection_enable_performance_counter_access(var_connection, var_channel);
838 			if (useChecksum) {
839 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
840 			}
841 			stream->flush();
842 			SET_LASTCALL("magma_connection_enable_performance_counter_access");
843 			android::base::endTrace();
844 			break;
845 		}
846 		case OP_magma_connection_enable_performance_counters: {
847 			android::base::beginTrace("magma_connection_enable_performance_counters decode");
848 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
849 			uint32_t size_counters __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8);
850 			InputBuffer inptr_counters(ptr + 8 + 8 + 4, size_counters);
851 			uint64_t var_counters_count = Unpack<uint64_t,uint64_t>(ptr + 8 + 8 + 4 + size_counters);
852 			if (useChecksum) {
853 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4 + size_counters + 8, ptr + 8 + 8 + 4 + size_counters + 8, checksumSize,
854 					"magma_decoder_context_t::decode, OP_magma_connection_enable_performance_counters: GL checksumCalculator failure\n");
855 			}
856 			size_t totalTmpSize = sizeof(magma_status_t);
857 			totalTmpSize += checksumSize;
858 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
859 			DECODER_DEBUG_LOG("magma(%p): magma_connection_enable_performance_counters(connection:%lu counters:%p(%u) counters_count:%lu )", stream, var_connection, (uint64_t*)(inptr_counters.get()), size_counters, var_counters_count);
860 			*(magma_status_t *)(&tmpBuf[0]) = 			this->magma_connection_enable_performance_counters(var_connection, (uint64_t*)(inptr_counters.get()), var_counters_count);
861 			if (useChecksum) {
862 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
863 			}
864 			stream->flush();
865 			SET_LASTCALL("magma_connection_enable_performance_counters");
866 			android::base::endTrace();
867 			break;
868 		}
869 		case OP_magma_connection_create_performance_counter_buffer_pool: {
870 			android::base::beginTrace("magma_connection_create_performance_counter_buffer_pool decode");
871 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
872 			uint32_t size_pool_id_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8);
873 			uint32_t size_notification_handle_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 4);
874 			if (useChecksum) {
875 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4 + 4, ptr + 8 + 8 + 4 + 4, checksumSize,
876 					"magma_decoder_context_t::decode, OP_magma_connection_create_performance_counter_buffer_pool: GL checksumCalculator failure\n");
877 			}
878 			size_t totalTmpSize = size_pool_id_out;
879 			totalTmpSize += size_notification_handle_out;
880 			totalTmpSize += sizeof(magma_status_t);
881 			totalTmpSize += checksumSize;
882 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
883 			OutputBuffer outptr_pool_id_out(&tmpBuf[0], size_pool_id_out);
884 			OutputBuffer outptr_notification_handle_out(&tmpBuf[0 + size_pool_id_out], size_notification_handle_out);
885 			DECODER_DEBUG_LOG("magma(%p): magma_connection_create_performance_counter_buffer_pool(connection:%lu pool_id_out:%p(%u) notification_handle_out:%p(%u) )", stream, var_connection, (magma_perf_count_pool_t*)(outptr_pool_id_out.get()), size_pool_id_out, (magma_handle_t*)(outptr_notification_handle_out.get()), size_notification_handle_out);
886 			*(magma_status_t *)(&tmpBuf[0 + size_pool_id_out + size_notification_handle_out]) = 			this->magma_connection_create_performance_counter_buffer_pool(var_connection, (magma_perf_count_pool_t*)(outptr_pool_id_out.get()), (magma_handle_t*)(outptr_notification_handle_out.get()));
887 			outptr_pool_id_out.flush();
888 			outptr_notification_handle_out.flush();
889 			if (useChecksum) {
890 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
891 			}
892 			stream->flush();
893 			SET_LASTCALL("magma_connection_create_performance_counter_buffer_pool");
894 			android::base::endTrace();
895 			break;
896 		}
897 		case OP_magma_connection_release_performance_counter_buffer_pool: {
898 			android::base::beginTrace("magma_connection_release_performance_counter_buffer_pool decode");
899 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
900 			magma_perf_count_pool_t var_pool_id = Unpack<magma_perf_count_pool_t,uint64_t>(ptr + 8 + 8);
901 			if (useChecksum) {
902 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 8, ptr + 8 + 8 + 8, checksumSize,
903 					"magma_decoder_context_t::decode, OP_magma_connection_release_performance_counter_buffer_pool: GL checksumCalculator failure\n");
904 			}
905 			size_t totalTmpSize = sizeof(magma_status_t);
906 			totalTmpSize += checksumSize;
907 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
908 			DECODER_DEBUG_LOG("magma(%p): magma_connection_release_performance_counter_buffer_pool(connection:%lu pool_id:%lu )", stream, var_connection, var_pool_id);
909 			*(magma_status_t *)(&tmpBuf[0]) = 			this->magma_connection_release_performance_counter_buffer_pool(var_connection, var_pool_id);
910 			if (useChecksum) {
911 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
912 			}
913 			stream->flush();
914 			SET_LASTCALL("magma_connection_release_performance_counter_buffer_pool");
915 			android::base::endTrace();
916 			break;
917 		}
918 		case OP_magma_connection_add_performance_counter_buffer_offsets_to_pool: {
919 			android::base::beginTrace("magma_connection_add_performance_counter_buffer_offsets_to_pool decode");
920 			uint32_t size_parameters __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8);
921 			InputBuffer inptr_parameters(ptr + 8 + 4, size_parameters);
922 			uint64_t var_parameter_count = Unpack<uint64_t,uint64_t>(ptr + 8 + 4 + size_parameters);
923 			if (useChecksum) {
924 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + size_parameters + 8, ptr + 8 + 4 + size_parameters + 8, checksumSize,
925 					"magma_decoder_context_t::decode, OP_magma_connection_add_performance_counter_buffer_offsets_to_pool: GL checksumCalculator failure\n");
926 			}
927 			size_t totalTmpSize = size_parameters;
928 			totalTmpSize += sizeof(magma_status_t);
929 			totalTmpSize += checksumSize;
930 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
931 			OutputBuffer outptr_parameters(&tmpBuf[0], size_parameters);
932 			memcpy(outptr_parameters.get(), inptr_parameters.get(), size_parameters);
933 			DECODER_DEBUG_LOG("magma(%p): magma_connection_add_performance_counter_buffer_offsets_to_pool(parameters:%p(%u) parameter_count:%lu )", stream, (uint64_t*)(outptr_parameters.get()), size_parameters, var_parameter_count);
934 			*(magma_status_t *)(&tmpBuf[0 + size_parameters]) = 			this->magma_connection_add_performance_counter_buffer_offsets_to_pool((uint64_t*)(outptr_parameters.get()), var_parameter_count);
935 			outptr_parameters.flush();
936 			if (useChecksum) {
937 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
938 			}
939 			stream->flush();
940 			SET_LASTCALL("magma_connection_add_performance_counter_buffer_offsets_to_pool");
941 			android::base::endTrace();
942 			break;
943 		}
944 		case OP_magma_connection_remove_performance_counter_buffer_from_pool: {
945 			android::base::beginTrace("magma_connection_remove_performance_counter_buffer_from_pool decode");
946 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
947 			magma_perf_count_pool_t var_pool_id = Unpack<magma_perf_count_pool_t,uint64_t>(ptr + 8 + 8);
948 			magma_buffer_t var_buffer = Unpack<magma_buffer_t,uint64_t>(ptr + 8 + 8 + 8);
949 			if (useChecksum) {
950 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 8 + 8, ptr + 8 + 8 + 8 + 8, checksumSize,
951 					"magma_decoder_context_t::decode, OP_magma_connection_remove_performance_counter_buffer_from_pool: GL checksumCalculator failure\n");
952 			}
953 			size_t totalTmpSize = sizeof(magma_status_t);
954 			totalTmpSize += checksumSize;
955 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
956 			DECODER_DEBUG_LOG("magma(%p): magma_connection_remove_performance_counter_buffer_from_pool(connection:%lu pool_id:%lu buffer:%lu )", stream, var_connection, var_pool_id, var_buffer);
957 			*(magma_status_t *)(&tmpBuf[0]) = 			this->magma_connection_remove_performance_counter_buffer_from_pool(var_connection, var_pool_id, var_buffer);
958 			if (useChecksum) {
959 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
960 			}
961 			stream->flush();
962 			SET_LASTCALL("magma_connection_remove_performance_counter_buffer_from_pool");
963 			android::base::endTrace();
964 			break;
965 		}
966 		case OP_magma_connection_dump_performance_counters: {
967 			android::base::beginTrace("magma_connection_dump_performance_counters decode");
968 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
969 			magma_perf_count_pool_t var_pool_id = Unpack<magma_perf_count_pool_t,uint64_t>(ptr + 8 + 8);
970 			uint32_t var_trigger_id = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 8);
971 			if (useChecksum) {
972 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 8 + 4, ptr + 8 + 8 + 8 + 4, checksumSize,
973 					"magma_decoder_context_t::decode, OP_magma_connection_dump_performance_counters: GL checksumCalculator failure\n");
974 			}
975 			size_t totalTmpSize = sizeof(magma_status_t);
976 			totalTmpSize += checksumSize;
977 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
978 			DECODER_DEBUG_LOG("magma(%p): magma_connection_dump_performance_counters(connection:%lu pool_id:%lu trigger_id:%u )", stream, var_connection, var_pool_id, var_trigger_id);
979 			*(magma_status_t *)(&tmpBuf[0]) = 			this->magma_connection_dump_performance_counters(var_connection, var_pool_id, var_trigger_id);
980 			if (useChecksum) {
981 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
982 			}
983 			stream->flush();
984 			SET_LASTCALL("magma_connection_dump_performance_counters");
985 			android::base::endTrace();
986 			break;
987 		}
988 		case OP_magma_connection_clear_performance_counters: {
989 			android::base::beginTrace("magma_connection_clear_performance_counters decode");
990 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
991 			uint32_t size_counters __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8);
992 			InputBuffer inptr_counters(ptr + 8 + 8 + 4, size_counters);
993 			uint64_t var_counters_count = Unpack<uint64_t,uint64_t>(ptr + 8 + 8 + 4 + size_counters);
994 			if (useChecksum) {
995 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 4 + size_counters + 8, ptr + 8 + 8 + 4 + size_counters + 8, checksumSize,
996 					"magma_decoder_context_t::decode, OP_magma_connection_clear_performance_counters: GL checksumCalculator failure\n");
997 			}
998 			size_t totalTmpSize = sizeof(magma_status_t);
999 			totalTmpSize += checksumSize;
1000 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1001 			DECODER_DEBUG_LOG("magma(%p): magma_connection_clear_performance_counters(connection:%lu counters:%p(%u) counters_count:%lu )", stream, var_connection, (uint64_t*)(inptr_counters.get()), size_counters, var_counters_count);
1002 			*(magma_status_t *)(&tmpBuf[0]) = 			this->magma_connection_clear_performance_counters(var_connection, (uint64_t*)(inptr_counters.get()), var_counters_count);
1003 			if (useChecksum) {
1004 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1005 			}
1006 			stream->flush();
1007 			SET_LASTCALL("magma_connection_clear_performance_counters");
1008 			android::base::endTrace();
1009 			break;
1010 		}
1011 		case OP_magma_connection_read_performance_counter_completion: {
1012 			android::base::beginTrace("magma_connection_read_performance_counter_completion decode");
1013 			magma_connection_t var_connection = Unpack<magma_connection_t,uint64_t>(ptr + 8);
1014 			magma_perf_count_pool_t var_pool_id = Unpack<magma_perf_count_pool_t,uint64_t>(ptr + 8 + 8);
1015 			uint32_t size_trigger_id_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 8);
1016 			uint32_t size_buffer_id_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 8 + 4);
1017 			uint32_t size_buffer_offset_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 8 + 4 + 4);
1018 			uint32_t size_time_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 8 + 4 + 4 + 4);
1019 			uint32_t size_result_flags_out __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 8 + 8 + 4 + 4 + 4 + 4);
1020 			if (useChecksum) {
1021 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 8 + 8 + 4 + 4 + 4 + 4 + 4, ptr + 8 + 8 + 8 + 4 + 4 + 4 + 4 + 4, checksumSize,
1022 					"magma_decoder_context_t::decode, OP_magma_connection_read_performance_counter_completion: GL checksumCalculator failure\n");
1023 			}
1024 			size_t totalTmpSize = size_trigger_id_out;
1025 			totalTmpSize += size_buffer_id_out;
1026 			totalTmpSize += size_buffer_offset_out;
1027 			totalTmpSize += size_time_out;
1028 			totalTmpSize += size_result_flags_out;
1029 			totalTmpSize += sizeof(magma_status_t);
1030 			totalTmpSize += checksumSize;
1031 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1032 			OutputBuffer outptr_trigger_id_out(&tmpBuf[0], size_trigger_id_out);
1033 			OutputBuffer outptr_buffer_id_out(&tmpBuf[0 + size_trigger_id_out], size_buffer_id_out);
1034 			OutputBuffer outptr_buffer_offset_out(&tmpBuf[0 + size_trigger_id_out + size_buffer_id_out], size_buffer_offset_out);
1035 			OutputBuffer outptr_time_out(&tmpBuf[0 + size_trigger_id_out + size_buffer_id_out + size_buffer_offset_out], size_time_out);
1036 			OutputBuffer outptr_result_flags_out(&tmpBuf[0 + size_trigger_id_out + size_buffer_id_out + size_buffer_offset_out + size_time_out], size_result_flags_out);
1037 			DECODER_DEBUG_LOG("magma(%p): magma_connection_read_performance_counter_completion(connection:%lu pool_id:%lu trigger_id_out:%p(%u) buffer_id_out:%p(%u) buffer_offset_out:%p(%u) time_out:%p(%u) result_flags_out:%p(%u) )", stream, var_connection, var_pool_id, (uint32_t*)(outptr_trigger_id_out.get()), size_trigger_id_out, (uint64_t*)(outptr_buffer_id_out.get()), size_buffer_id_out, (uint32_t*)(outptr_buffer_offset_out.get()), size_buffer_offset_out, (uint64_t*)(outptr_time_out.get()), size_time_out, (uint32_t*)(outptr_result_flags_out.get()), size_result_flags_out);
1038 			*(magma_status_t *)(&tmpBuf[0 + size_trigger_id_out + size_buffer_id_out + size_buffer_offset_out + size_time_out + size_result_flags_out]) = 			this->magma_connection_read_performance_counter_completion(var_connection, var_pool_id, (uint32_t*)(outptr_trigger_id_out.get()), (uint64_t*)(outptr_buffer_id_out.get()), (uint32_t*)(outptr_buffer_offset_out.get()), (uint64_t*)(outptr_time_out.get()), (uint32_t*)(outptr_result_flags_out.get()));
1039 			outptr_trigger_id_out.flush();
1040 			outptr_buffer_id_out.flush();
1041 			outptr_buffer_offset_out.flush();
1042 			outptr_time_out.flush();
1043 			outptr_result_flags_out.flush();
1044 			if (useChecksum) {
1045 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1046 			}
1047 			stream->flush();
1048 			SET_LASTCALL("magma_connection_read_performance_counter_completion");
1049 			android::base::endTrace();
1050 			break;
1051 		}
1052 		case OP_magma_virt_connection_create_image: {
1053 			android::base::beginTrace("magma_virt_connection_create_image decode");
1054 			uint32_t size_parameters __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8);
1055 			InputBuffer inptr_parameters(ptr + 8 + 4, size_parameters);
1056 			uint64_t var_parameter_count = Unpack<uint64_t,uint64_t>(ptr + 8 + 4 + size_parameters);
1057 			if (useChecksum) {
1058 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + size_parameters + 8, ptr + 8 + 4 + size_parameters + 8, checksumSize,
1059 					"magma_decoder_context_t::decode, OP_magma_virt_connection_create_image: GL checksumCalculator failure\n");
1060 			}
1061 			size_t totalTmpSize = size_parameters;
1062 			totalTmpSize += sizeof(magma_status_t);
1063 			totalTmpSize += checksumSize;
1064 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1065 			OutputBuffer outptr_parameters(&tmpBuf[0], size_parameters);
1066 			memcpy(outptr_parameters.get(), inptr_parameters.get(), size_parameters);
1067 			DECODER_DEBUG_LOG("magma(%p): magma_virt_connection_create_image(parameters:%p(%u) parameter_count:%lu )", stream, (uint64_t*)(outptr_parameters.get()), size_parameters, var_parameter_count);
1068 			*(magma_status_t *)(&tmpBuf[0 + size_parameters]) = 			this->magma_virt_connection_create_image((uint64_t*)(outptr_parameters.get()), var_parameter_count);
1069 			outptr_parameters.flush();
1070 			if (useChecksum) {
1071 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1072 			}
1073 			stream->flush();
1074 			SET_LASTCALL("magma_virt_connection_create_image");
1075 			android::base::endTrace();
1076 			break;
1077 		}
1078 		case OP_magma_virt_connection_get_image_info: {
1079 			android::base::beginTrace("magma_virt_connection_get_image_info decode");
1080 			uint32_t size_parameters __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8);
1081 			InputBuffer inptr_parameters(ptr + 8 + 4, size_parameters);
1082 			uint64_t var_parameter_count = Unpack<uint64_t,uint64_t>(ptr + 8 + 4 + size_parameters);
1083 			if (useChecksum) {
1084 				ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + size_parameters + 8, ptr + 8 + 4 + size_parameters + 8, checksumSize,
1085 					"magma_decoder_context_t::decode, OP_magma_virt_connection_get_image_info: GL checksumCalculator failure\n");
1086 			}
1087 			size_t totalTmpSize = size_parameters;
1088 			totalTmpSize += sizeof(magma_status_t);
1089 			totalTmpSize += checksumSize;
1090 			unsigned char *tmpBuf = stream->alloc(totalTmpSize);
1091 			OutputBuffer outptr_parameters(&tmpBuf[0], size_parameters);
1092 			memcpy(outptr_parameters.get(), inptr_parameters.get(), size_parameters);
1093 			DECODER_DEBUG_LOG("magma(%p): magma_virt_connection_get_image_info(parameters:%p(%u) parameter_count:%lu )", stream, (uint64_t*)(outptr_parameters.get()), size_parameters, var_parameter_count);
1094 			*(magma_status_t *)(&tmpBuf[0 + size_parameters]) = 			this->magma_virt_connection_get_image_info((uint64_t*)(outptr_parameters.get()), var_parameter_count);
1095 			outptr_parameters.flush();
1096 			if (useChecksum) {
1097 				ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
1098 			}
1099 			stream->flush();
1100 			SET_LASTCALL("magma_virt_connection_get_image_info");
1101 			android::base::endTrace();
1102 			break;
1103 		}
1104 		default:
1105 			return ptr - (unsigned char*)buf;
1106 		} //switch
1107 		ptr += packetLen;
1108 	} // while
1109 	return ptr - (unsigned char*)buf;
1110 }
1111 }  // namespace gfxstream
1112