Home | History | Annotate | Download | only in renderControl_enc
      1 // Generated Code - DO NOT EDIT !!
      2 // generated by 'emugen'
      3 
      4 
      5 #include <string.h>
      6 #include "renderControl_opcodes.h"
      7 
      8 #include "renderControl_enc.h"
      9 
     10 
     11 #include <stdio.h>
     12 
     13 namespace {
     14 
     15 void enc_unsupported()
     16 {
     17 	ALOGE("Function is unsupported\n");
     18 }
     19 
     20 GLint rcGetRendererVersion_enc(void *self )
     21 {
     22 
     23 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
     24 	IOStream *stream = ctx->m_stream;
     25 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
     26 	bool useChecksum = checksumCalculator->getVersion() > 0;
     27 
     28 	 unsigned char *ptr;
     29 	 unsigned char *buf;
     30 	 const size_t sizeWithoutChecksum = 8;
     31 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
     32 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
     33 	buf = stream->alloc(totalSize);
     34 	ptr = buf;
     35 	int tmp = OP_rcGetRendererVersion;memcpy(ptr, &tmp, 4); ptr += 4;
     36 	memcpy(ptr, &totalSize, 4);  ptr += 4;
     37 
     38 
     39 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
     40 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
     41 
     42 
     43 	GLint retval;
     44 	stream->readback(&retval, 4);
     45 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
     46 	if (useChecksum) {
     47 		unsigned char *checksumBufPtr = NULL;
     48 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
     49 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
     50 		stream->readback(checksumBufPtr, checksumSize);
     51 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
     52 			ALOGE("rcGetRendererVersion: GL communication error, please report this issue to b.android.com.\n");
     53 			abort();
     54 		}
     55 	}
     56 	return retval;
     57 }
     58 
     59 EGLint rcGetEGLVersion_enc(void *self , EGLint* major, EGLint* minor)
     60 {
     61 
     62 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
     63 	IOStream *stream = ctx->m_stream;
     64 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
     65 	bool useChecksum = checksumCalculator->getVersion() > 0;
     66 
     67 	const unsigned int __size_major =  sizeof(EGLint);
     68 	const unsigned int __size_minor =  sizeof(EGLint);
     69 	 unsigned char *ptr;
     70 	 unsigned char *buf;
     71 	 const size_t sizeWithoutChecksum = 8 + 0 + 0 + 2*4;
     72 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
     73 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
     74 	buf = stream->alloc(totalSize);
     75 	ptr = buf;
     76 	int tmp = OP_rcGetEGLVersion;memcpy(ptr, &tmp, 4); ptr += 4;
     77 	memcpy(ptr, &totalSize, 4);  ptr += 4;
     78 
     79 	*(unsigned int *)(ptr) = __size_major; ptr += 4;
     80 	*(unsigned int *)(ptr) = __size_minor; ptr += 4;
     81 
     82 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
     83 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
     84 
     85 	stream->readback(major, __size_major);
     86 	if (useChecksum) checksumCalculator->addBuffer(major, __size_major);
     87 	stream->readback(minor, __size_minor);
     88 	if (useChecksum) checksumCalculator->addBuffer(minor, __size_minor);
     89 
     90 	EGLint retval;
     91 	stream->readback(&retval, 4);
     92 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
     93 	if (useChecksum) {
     94 		unsigned char *checksumBufPtr = NULL;
     95 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
     96 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
     97 		stream->readback(checksumBufPtr, checksumSize);
     98 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
     99 			ALOGE("rcGetEGLVersion: GL communication error, please report this issue to b.android.com.\n");
    100 			abort();
    101 		}
    102 	}
    103 	return retval;
    104 }
    105 
    106 EGLint rcQueryEGLString_enc(void *self , EGLenum name, void* buffer, EGLint bufferSize)
    107 {
    108 
    109 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    110 	IOStream *stream = ctx->m_stream;
    111 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    112 	bool useChecksum = checksumCalculator->getVersion() > 0;
    113 
    114 	const unsigned int __size_buffer =  bufferSize;
    115 	 unsigned char *ptr;
    116 	 unsigned char *buf;
    117 	 const size_t sizeWithoutChecksum = 8 + 4 + 0 + 4 + 1*4;
    118 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    119 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    120 	buf = stream->alloc(totalSize);
    121 	ptr = buf;
    122 	int tmp = OP_rcQueryEGLString;memcpy(ptr, &tmp, 4); ptr += 4;
    123 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    124 
    125 		memcpy(ptr, &name, 4); ptr += 4;
    126 	*(unsigned int *)(ptr) = __size_buffer; ptr += 4;
    127 		memcpy(ptr, &bufferSize, 4); ptr += 4;
    128 
    129 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    130 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    131 
    132 	stream->readback(buffer, __size_buffer);
    133 	if (useChecksum) checksumCalculator->addBuffer(buffer, __size_buffer);
    134 
    135 	EGLint retval;
    136 	stream->readback(&retval, 4);
    137 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
    138 	if (useChecksum) {
    139 		unsigned char *checksumBufPtr = NULL;
    140 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
    141 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
    142 		stream->readback(checksumBufPtr, checksumSize);
    143 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
    144 			ALOGE("rcQueryEGLString: GL communication error, please report this issue to b.android.com.\n");
    145 			abort();
    146 		}
    147 	}
    148 	return retval;
    149 }
    150 
    151 EGLint rcGetGLString_enc(void *self , EGLenum name, void* buffer, EGLint bufferSize)
    152 {
    153 
    154 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    155 	IOStream *stream = ctx->m_stream;
    156 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    157 	bool useChecksum = checksumCalculator->getVersion() > 0;
    158 
    159 	const unsigned int __size_buffer =  bufferSize;
    160 	 unsigned char *ptr;
    161 	 unsigned char *buf;
    162 	 const size_t sizeWithoutChecksum = 8 + 4 + 0 + 4 + 1*4;
    163 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    164 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    165 	buf = stream->alloc(totalSize);
    166 	ptr = buf;
    167 	int tmp = OP_rcGetGLString;memcpy(ptr, &tmp, 4); ptr += 4;
    168 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    169 
    170 		memcpy(ptr, &name, 4); ptr += 4;
    171 	*(unsigned int *)(ptr) = __size_buffer; ptr += 4;
    172 		memcpy(ptr, &bufferSize, 4); ptr += 4;
    173 
    174 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    175 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    176 
    177 	stream->readback(buffer, __size_buffer);
    178 	if (useChecksum) checksumCalculator->addBuffer(buffer, __size_buffer);
    179 
    180 	EGLint retval;
    181 	stream->readback(&retval, 4);
    182 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
    183 	if (useChecksum) {
    184 		unsigned char *checksumBufPtr = NULL;
    185 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
    186 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
    187 		stream->readback(checksumBufPtr, checksumSize);
    188 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
    189 			ALOGE("rcGetGLString: GL communication error, please report this issue to b.android.com.\n");
    190 			abort();
    191 		}
    192 	}
    193 	return retval;
    194 }
    195 
    196 EGLint rcGetNumConfigs_enc(void *self , uint32_t* numAttribs)
    197 {
    198 
    199 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    200 	IOStream *stream = ctx->m_stream;
    201 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    202 	bool useChecksum = checksumCalculator->getVersion() > 0;
    203 
    204 	const unsigned int __size_numAttribs =  sizeof(uint32_t);
    205 	 unsigned char *ptr;
    206 	 unsigned char *buf;
    207 	 const size_t sizeWithoutChecksum = 8 + 0 + 1*4;
    208 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    209 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    210 	buf = stream->alloc(totalSize);
    211 	ptr = buf;
    212 	int tmp = OP_rcGetNumConfigs;memcpy(ptr, &tmp, 4); ptr += 4;
    213 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    214 
    215 	*(unsigned int *)(ptr) = __size_numAttribs; ptr += 4;
    216 
    217 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    218 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    219 
    220 	stream->readback(numAttribs, __size_numAttribs);
    221 	if (useChecksum) checksumCalculator->addBuffer(numAttribs, __size_numAttribs);
    222 
    223 	EGLint retval;
    224 	stream->readback(&retval, 4);
    225 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
    226 	if (useChecksum) {
    227 		unsigned char *checksumBufPtr = NULL;
    228 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
    229 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
    230 		stream->readback(checksumBufPtr, checksumSize);
    231 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
    232 			ALOGE("rcGetNumConfigs: GL communication error, please report this issue to b.android.com.\n");
    233 			abort();
    234 		}
    235 	}
    236 	return retval;
    237 }
    238 
    239 EGLint rcGetConfigs_enc(void *self , uint32_t bufSize, GLuint* buffer)
    240 {
    241 
    242 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    243 	IOStream *stream = ctx->m_stream;
    244 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    245 	bool useChecksum = checksumCalculator->getVersion() > 0;
    246 
    247 	const unsigned int __size_buffer =  bufSize;
    248 	 unsigned char *ptr;
    249 	 unsigned char *buf;
    250 	 const size_t sizeWithoutChecksum = 8 + 4 + 0 + 1*4;
    251 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    252 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    253 	buf = stream->alloc(totalSize);
    254 	ptr = buf;
    255 	int tmp = OP_rcGetConfigs;memcpy(ptr, &tmp, 4); ptr += 4;
    256 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    257 
    258 		memcpy(ptr, &bufSize, 4); ptr += 4;
    259 	*(unsigned int *)(ptr) = __size_buffer; ptr += 4;
    260 
    261 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    262 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    263 
    264 	stream->readback(buffer, __size_buffer);
    265 	if (useChecksum) checksumCalculator->addBuffer(buffer, __size_buffer);
    266 
    267 	EGLint retval;
    268 	stream->readback(&retval, 4);
    269 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
    270 	if (useChecksum) {
    271 		unsigned char *checksumBufPtr = NULL;
    272 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
    273 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
    274 		stream->readback(checksumBufPtr, checksumSize);
    275 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
    276 			ALOGE("rcGetConfigs: GL communication error, please report this issue to b.android.com.\n");
    277 			abort();
    278 		}
    279 	}
    280 	return retval;
    281 }
    282 
    283 EGLint rcChooseConfig_enc(void *self , EGLint* attribs, uint32_t attribs_size, uint32_t* configs, uint32_t configs_size)
    284 {
    285 
    286 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    287 	IOStream *stream = ctx->m_stream;
    288 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    289 	bool useChecksum = checksumCalculator->getVersion() > 0;
    290 
    291 	const unsigned int __size_attribs =  attribs_size;
    292 	const unsigned int __size_configs = ((configs != NULL) ?  configs_size*sizeof(uint32_t) : 0);
    293 	 unsigned char *ptr;
    294 	 unsigned char *buf;
    295 	 const size_t sizeWithoutChecksum = 8 + __size_attribs + 4 + 0 + 4 + 2*4;
    296 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    297 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    298 	buf = stream->alloc(totalSize);
    299 	ptr = buf;
    300 	int tmp = OP_rcChooseConfig;memcpy(ptr, &tmp, 4); ptr += 4;
    301 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    302 
    303 	*(unsigned int *)(ptr) = __size_attribs; ptr += 4;
    304 	memcpy(ptr, attribs, __size_attribs);ptr += __size_attribs;
    305 		memcpy(ptr, &attribs_size, 4); ptr += 4;
    306 	*(unsigned int *)(ptr) = __size_configs; ptr += 4;
    307 		memcpy(ptr, &configs_size, 4); ptr += 4;
    308 
    309 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    310 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    311 
    312 	if (configs != NULL) {
    313 		stream->readback(configs, __size_configs);
    314 		if (useChecksum) checksumCalculator->addBuffer(configs, __size_configs);
    315 	}
    316 
    317 	EGLint retval;
    318 	stream->readback(&retval, 4);
    319 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
    320 	if (useChecksum) {
    321 		unsigned char *checksumBufPtr = NULL;
    322 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
    323 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
    324 		stream->readback(checksumBufPtr, checksumSize);
    325 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
    326 			ALOGE("rcChooseConfig: GL communication error, please report this issue to b.android.com.\n");
    327 			abort();
    328 		}
    329 	}
    330 	return retval;
    331 }
    332 
    333 EGLint rcGetFBParam_enc(void *self , EGLint param)
    334 {
    335 
    336 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    337 	IOStream *stream = ctx->m_stream;
    338 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    339 	bool useChecksum = checksumCalculator->getVersion() > 0;
    340 
    341 	 unsigned char *ptr;
    342 	 unsigned char *buf;
    343 	 const size_t sizeWithoutChecksum = 8 + 4;
    344 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    345 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    346 	buf = stream->alloc(totalSize);
    347 	ptr = buf;
    348 	int tmp = OP_rcGetFBParam;memcpy(ptr, &tmp, 4); ptr += 4;
    349 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    350 
    351 		memcpy(ptr, &param, 4); ptr += 4;
    352 
    353 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    354 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    355 
    356 
    357 	EGLint retval;
    358 	stream->readback(&retval, 4);
    359 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
    360 	if (useChecksum) {
    361 		unsigned char *checksumBufPtr = NULL;
    362 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
    363 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
    364 		stream->readback(checksumBufPtr, checksumSize);
    365 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
    366 			ALOGE("rcGetFBParam: GL communication error, please report this issue to b.android.com.\n");
    367 			abort();
    368 		}
    369 	}
    370 	return retval;
    371 }
    372 
    373 uint32_t rcCreateContext_enc(void *self , uint32_t config, uint32_t share, uint32_t glVersion)
    374 {
    375 
    376 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    377 	IOStream *stream = ctx->m_stream;
    378 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    379 	bool useChecksum = checksumCalculator->getVersion() > 0;
    380 
    381 	 unsigned char *ptr;
    382 	 unsigned char *buf;
    383 	 const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4;
    384 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    385 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    386 	buf = stream->alloc(totalSize);
    387 	ptr = buf;
    388 	int tmp = OP_rcCreateContext;memcpy(ptr, &tmp, 4); ptr += 4;
    389 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    390 
    391 		memcpy(ptr, &config, 4); ptr += 4;
    392 		memcpy(ptr, &share, 4); ptr += 4;
    393 		memcpy(ptr, &glVersion, 4); ptr += 4;
    394 
    395 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    396 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    397 
    398 
    399 	uint32_t retval;
    400 	stream->readback(&retval, 4);
    401 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
    402 	if (useChecksum) {
    403 		unsigned char *checksumBufPtr = NULL;
    404 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
    405 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
    406 		stream->readback(checksumBufPtr, checksumSize);
    407 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
    408 			ALOGE("rcCreateContext: GL communication error, please report this issue to b.android.com.\n");
    409 			abort();
    410 		}
    411 	}
    412 	return retval;
    413 }
    414 
    415 void rcDestroyContext_enc(void *self , uint32_t context)
    416 {
    417 
    418 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    419 	IOStream *stream = ctx->m_stream;
    420 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    421 	bool useChecksum = checksumCalculator->getVersion() > 0;
    422 
    423 	 unsigned char *ptr;
    424 	 unsigned char *buf;
    425 	 const size_t sizeWithoutChecksum = 8 + 4;
    426 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    427 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    428 	buf = stream->alloc(totalSize);
    429 	ptr = buf;
    430 	int tmp = OP_rcDestroyContext;memcpy(ptr, &tmp, 4); ptr += 4;
    431 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    432 
    433 		memcpy(ptr, &context, 4); ptr += 4;
    434 
    435 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    436 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    437 
    438 }
    439 
    440 uint32_t rcCreateWindowSurface_enc(void *self , uint32_t config, uint32_t width, uint32_t height)
    441 {
    442 
    443 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    444 	IOStream *stream = ctx->m_stream;
    445 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    446 	bool useChecksum = checksumCalculator->getVersion() > 0;
    447 
    448 	 unsigned char *ptr;
    449 	 unsigned char *buf;
    450 	 const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4;
    451 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    452 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    453 	buf = stream->alloc(totalSize);
    454 	ptr = buf;
    455 	int tmp = OP_rcCreateWindowSurface;memcpy(ptr, &tmp, 4); ptr += 4;
    456 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    457 
    458 		memcpy(ptr, &config, 4); ptr += 4;
    459 		memcpy(ptr, &width, 4); ptr += 4;
    460 		memcpy(ptr, &height, 4); ptr += 4;
    461 
    462 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    463 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    464 
    465 
    466 	uint32_t retval;
    467 	stream->readback(&retval, 4);
    468 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
    469 	if (useChecksum) {
    470 		unsigned char *checksumBufPtr = NULL;
    471 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
    472 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
    473 		stream->readback(checksumBufPtr, checksumSize);
    474 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
    475 			ALOGE("rcCreateWindowSurface: GL communication error, please report this issue to b.android.com.\n");
    476 			abort();
    477 		}
    478 	}
    479 	return retval;
    480 }
    481 
    482 void rcDestroyWindowSurface_enc(void *self , uint32_t windowSurface)
    483 {
    484 
    485 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    486 	IOStream *stream = ctx->m_stream;
    487 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    488 	bool useChecksum = checksumCalculator->getVersion() > 0;
    489 
    490 	 unsigned char *ptr;
    491 	 unsigned char *buf;
    492 	 const size_t sizeWithoutChecksum = 8 + 4;
    493 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    494 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    495 	buf = stream->alloc(totalSize);
    496 	ptr = buf;
    497 	int tmp = OP_rcDestroyWindowSurface;memcpy(ptr, &tmp, 4); ptr += 4;
    498 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    499 
    500 		memcpy(ptr, &windowSurface, 4); ptr += 4;
    501 
    502 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    503 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    504 
    505 }
    506 
    507 uint32_t rcCreateColorBuffer_enc(void *self , uint32_t width, uint32_t height, GLenum internalFormat)
    508 {
    509 
    510 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    511 	IOStream *stream = ctx->m_stream;
    512 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    513 	bool useChecksum = checksumCalculator->getVersion() > 0;
    514 
    515 	 unsigned char *ptr;
    516 	 unsigned char *buf;
    517 	 const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4;
    518 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    519 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    520 	buf = stream->alloc(totalSize);
    521 	ptr = buf;
    522 	int tmp = OP_rcCreateColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4;
    523 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    524 
    525 		memcpy(ptr, &width, 4); ptr += 4;
    526 		memcpy(ptr, &height, 4); ptr += 4;
    527 		memcpy(ptr, &internalFormat, 4); ptr += 4;
    528 
    529 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    530 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    531 
    532 
    533 	uint32_t retval;
    534 	stream->readback(&retval, 4);
    535 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
    536 	if (useChecksum) {
    537 		unsigned char *checksumBufPtr = NULL;
    538 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
    539 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
    540 		stream->readback(checksumBufPtr, checksumSize);
    541 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
    542 			ALOGE("rcCreateColorBuffer: GL communication error, please report this issue to b.android.com.\n");
    543 			abort();
    544 		}
    545 	}
    546 	return retval;
    547 }
    548 
    549 void rcOpenColorBuffer_enc(void *self , uint32_t colorbuffer)
    550 {
    551 
    552 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    553 	IOStream *stream = ctx->m_stream;
    554 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    555 	bool useChecksum = checksumCalculator->getVersion() > 0;
    556 
    557 	 unsigned char *ptr;
    558 	 unsigned char *buf;
    559 	 const size_t sizeWithoutChecksum = 8 + 4;
    560 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    561 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    562 	buf = stream->alloc(totalSize);
    563 	ptr = buf;
    564 	int tmp = OP_rcOpenColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4;
    565 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    566 
    567 		memcpy(ptr, &colorbuffer, 4); ptr += 4;
    568 
    569 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    570 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    571 
    572 }
    573 
    574 void rcCloseColorBuffer_enc(void *self , uint32_t colorbuffer)
    575 {
    576 
    577 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    578 	IOStream *stream = ctx->m_stream;
    579 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    580 	bool useChecksum = checksumCalculator->getVersion() > 0;
    581 
    582 	 unsigned char *ptr;
    583 	 unsigned char *buf;
    584 	 const size_t sizeWithoutChecksum = 8 + 4;
    585 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    586 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    587 	buf = stream->alloc(totalSize);
    588 	ptr = buf;
    589 	int tmp = OP_rcCloseColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4;
    590 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    591 
    592 		memcpy(ptr, &colorbuffer, 4); ptr += 4;
    593 
    594 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    595 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    596 
    597 	stream->flush();
    598 }
    599 
    600 void rcSetWindowColorBuffer_enc(void *self , uint32_t windowSurface, uint32_t colorBuffer)
    601 {
    602 
    603 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    604 	IOStream *stream = ctx->m_stream;
    605 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    606 	bool useChecksum = checksumCalculator->getVersion() > 0;
    607 
    608 	 unsigned char *ptr;
    609 	 unsigned char *buf;
    610 	 const size_t sizeWithoutChecksum = 8 + 4 + 4;
    611 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    612 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    613 	buf = stream->alloc(totalSize);
    614 	ptr = buf;
    615 	int tmp = OP_rcSetWindowColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4;
    616 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    617 
    618 		memcpy(ptr, &windowSurface, 4); ptr += 4;
    619 		memcpy(ptr, &colorBuffer, 4); ptr += 4;
    620 
    621 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    622 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    623 
    624 }
    625 
    626 int rcFlushWindowColorBuffer_enc(void *self , uint32_t windowSurface)
    627 {
    628 
    629 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    630 	IOStream *stream = ctx->m_stream;
    631 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    632 	bool useChecksum = checksumCalculator->getVersion() > 0;
    633 
    634 	 unsigned char *ptr;
    635 	 unsigned char *buf;
    636 	 const size_t sizeWithoutChecksum = 8 + 4;
    637 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    638 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    639 	buf = stream->alloc(totalSize);
    640 	ptr = buf;
    641 	int tmp = OP_rcFlushWindowColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4;
    642 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    643 
    644 		memcpy(ptr, &windowSurface, 4); ptr += 4;
    645 
    646 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    647 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    648 
    649 
    650 	int retval;
    651 	stream->readback(&retval, 4);
    652 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
    653 	if (useChecksum) {
    654 		unsigned char *checksumBufPtr = NULL;
    655 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
    656 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
    657 		stream->readback(checksumBufPtr, checksumSize);
    658 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
    659 			ALOGE("rcFlushWindowColorBuffer: GL communication error, please report this issue to b.android.com.\n");
    660 			abort();
    661 		}
    662 	}
    663 	return retval;
    664 }
    665 
    666 EGLint rcMakeCurrent_enc(void *self , uint32_t context, uint32_t drawSurf, uint32_t readSurf)
    667 {
    668 
    669 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    670 	IOStream *stream = ctx->m_stream;
    671 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    672 	bool useChecksum = checksumCalculator->getVersion() > 0;
    673 
    674 	 unsigned char *ptr;
    675 	 unsigned char *buf;
    676 	 const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4;
    677 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    678 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    679 	buf = stream->alloc(totalSize);
    680 	ptr = buf;
    681 	int tmp = OP_rcMakeCurrent;memcpy(ptr, &tmp, 4); ptr += 4;
    682 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    683 
    684 		memcpy(ptr, &context, 4); ptr += 4;
    685 		memcpy(ptr, &drawSurf, 4); ptr += 4;
    686 		memcpy(ptr, &readSurf, 4); ptr += 4;
    687 
    688 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    689 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    690 
    691 
    692 	EGLint retval;
    693 	stream->readback(&retval, 4);
    694 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
    695 	if (useChecksum) {
    696 		unsigned char *checksumBufPtr = NULL;
    697 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
    698 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
    699 		stream->readback(checksumBufPtr, checksumSize);
    700 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
    701 			ALOGE("rcMakeCurrent: GL communication error, please report this issue to b.android.com.\n");
    702 			abort();
    703 		}
    704 	}
    705 	return retval;
    706 }
    707 
    708 void rcFBPost_enc(void *self , uint32_t colorBuffer)
    709 {
    710 
    711 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    712 	IOStream *stream = ctx->m_stream;
    713 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    714 	bool useChecksum = checksumCalculator->getVersion() > 0;
    715 
    716 	 unsigned char *ptr;
    717 	 unsigned char *buf;
    718 	 const size_t sizeWithoutChecksum = 8 + 4;
    719 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    720 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    721 	buf = stream->alloc(totalSize);
    722 	ptr = buf;
    723 	int tmp = OP_rcFBPost;memcpy(ptr, &tmp, 4); ptr += 4;
    724 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    725 
    726 		memcpy(ptr, &colorBuffer, 4); ptr += 4;
    727 
    728 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    729 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    730 
    731 }
    732 
    733 void rcFBSetSwapInterval_enc(void *self , EGLint interval)
    734 {
    735 
    736 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    737 	IOStream *stream = ctx->m_stream;
    738 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    739 	bool useChecksum = checksumCalculator->getVersion() > 0;
    740 
    741 	 unsigned char *ptr;
    742 	 unsigned char *buf;
    743 	 const size_t sizeWithoutChecksum = 8 + 4;
    744 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    745 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    746 	buf = stream->alloc(totalSize);
    747 	ptr = buf;
    748 	int tmp = OP_rcFBSetSwapInterval;memcpy(ptr, &tmp, 4); ptr += 4;
    749 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    750 
    751 		memcpy(ptr, &interval, 4); ptr += 4;
    752 
    753 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    754 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    755 
    756 }
    757 
    758 void rcBindTexture_enc(void *self , uint32_t colorBuffer)
    759 {
    760 
    761 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    762 	IOStream *stream = ctx->m_stream;
    763 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    764 	bool useChecksum = checksumCalculator->getVersion() > 0;
    765 
    766 	 unsigned char *ptr;
    767 	 unsigned char *buf;
    768 	 const size_t sizeWithoutChecksum = 8 + 4;
    769 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    770 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    771 	buf = stream->alloc(totalSize);
    772 	ptr = buf;
    773 	int tmp = OP_rcBindTexture;memcpy(ptr, &tmp, 4); ptr += 4;
    774 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    775 
    776 		memcpy(ptr, &colorBuffer, 4); ptr += 4;
    777 
    778 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    779 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    780 
    781 }
    782 
    783 void rcBindRenderbuffer_enc(void *self , uint32_t colorBuffer)
    784 {
    785 
    786 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    787 	IOStream *stream = ctx->m_stream;
    788 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    789 	bool useChecksum = checksumCalculator->getVersion() > 0;
    790 
    791 	 unsigned char *ptr;
    792 	 unsigned char *buf;
    793 	 const size_t sizeWithoutChecksum = 8 + 4;
    794 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    795 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    796 	buf = stream->alloc(totalSize);
    797 	ptr = buf;
    798 	int tmp = OP_rcBindRenderbuffer;memcpy(ptr, &tmp, 4); ptr += 4;
    799 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    800 
    801 		memcpy(ptr, &colorBuffer, 4); ptr += 4;
    802 
    803 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    804 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    805 
    806 }
    807 
    808 EGLint rcColorBufferCacheFlush_enc(void *self , uint32_t colorbuffer, EGLint postCount, int forRead)
    809 {
    810 
    811 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    812 	IOStream *stream = ctx->m_stream;
    813 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    814 	bool useChecksum = checksumCalculator->getVersion() > 0;
    815 
    816 	 unsigned char *ptr;
    817 	 unsigned char *buf;
    818 	 const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4;
    819 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    820 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    821 	buf = stream->alloc(totalSize);
    822 	ptr = buf;
    823 	int tmp = OP_rcColorBufferCacheFlush;memcpy(ptr, &tmp, 4); ptr += 4;
    824 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    825 
    826 		memcpy(ptr, &colorbuffer, 4); ptr += 4;
    827 		memcpy(ptr, &postCount, 4); ptr += 4;
    828 		memcpy(ptr, &forRead, 4); ptr += 4;
    829 
    830 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    831 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    832 
    833 
    834 	EGLint retval;
    835 	stream->readback(&retval, 4);
    836 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
    837 	if (useChecksum) {
    838 		unsigned char *checksumBufPtr = NULL;
    839 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
    840 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
    841 		stream->readback(checksumBufPtr, checksumSize);
    842 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
    843 			ALOGE("rcColorBufferCacheFlush: GL communication error, please report this issue to b.android.com.\n");
    844 			abort();
    845 		}
    846 	}
    847 	return retval;
    848 }
    849 
    850 void rcReadColorBuffer_enc(void *self , uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void* pixels)
    851 {
    852 
    853 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    854 	IOStream *stream = ctx->m_stream;
    855 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    856 	bool useChecksum = checksumCalculator->getVersion() > 0;
    857 
    858 	const unsigned int __size_pixels =  (((glUtilsPixelBitSize(format, type) * width) >> 3) * height);
    859 	 unsigned char *ptr;
    860 	 unsigned char *buf;
    861 	 const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 0 + 1*4;
    862 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    863 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    864 	buf = stream->alloc(totalSize);
    865 	ptr = buf;
    866 	int tmp = OP_rcReadColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4;
    867 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    868 
    869 		memcpy(ptr, &colorbuffer, 4); ptr += 4;
    870 		memcpy(ptr, &x, 4); ptr += 4;
    871 		memcpy(ptr, &y, 4); ptr += 4;
    872 		memcpy(ptr, &width, 4); ptr += 4;
    873 		memcpy(ptr, &height, 4); ptr += 4;
    874 		memcpy(ptr, &format, 4); ptr += 4;
    875 		memcpy(ptr, &type, 4); ptr += 4;
    876 	*(unsigned int *)(ptr) = __size_pixels; ptr += 4;
    877 
    878 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    879 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    880 
    881 	stream->readback(pixels, __size_pixels);
    882 	if (useChecksum) checksumCalculator->addBuffer(pixels, __size_pixels);
    883 	if (useChecksum) {
    884 		unsigned char *checksumBufPtr = NULL;
    885 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
    886 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
    887 		stream->readback(checksumBufPtr, checksumSize);
    888 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
    889 			ALOGE("rcReadColorBuffer: GL communication error, please report this issue to b.android.com.\n");
    890 			abort();
    891 		}
    892 	}
    893 }
    894 
    895 int rcUpdateColorBuffer_enc(void *self , uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void* pixels)
    896 {
    897 
    898 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    899 	IOStream *stream = ctx->m_stream;
    900 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    901 	bool useChecksum = checksumCalculator->getVersion() > 0;
    902 
    903 	const unsigned int __size_pixels =  (((glUtilsPixelBitSize(format, type) * width) >> 3) * height);
    904 	 unsigned char *ptr;
    905 	 unsigned char *buf;
    906 	 const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4;
    907 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    908 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    909 	buf = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
    910 	ptr = buf;
    911 	int tmp = OP_rcUpdateColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4;
    912 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    913 
    914 		memcpy(ptr, &colorbuffer, 4); ptr += 4;
    915 		memcpy(ptr, &x, 4); ptr += 4;
    916 		memcpy(ptr, &y, 4); ptr += 4;
    917 		memcpy(ptr, &width, 4); ptr += 4;
    918 		memcpy(ptr, &height, 4); ptr += 4;
    919 		memcpy(ptr, &format, 4); ptr += 4;
    920 		memcpy(ptr, &type, 4); ptr += 4;
    921 
    922 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    923 	stream->flush();
    924 	stream->writeFully(&__size_pixels,4);
    925 	if (useChecksum) checksumCalculator->addBuffer(&__size_pixels,4);
    926 		stream->writeFully(pixels, __size_pixels);
    927 		if (useChecksum) checksumCalculator->addBuffer(pixels, __size_pixels);
    928 	buf = stream->alloc(checksumSize);
    929 	if (useChecksum) checksumCalculator->writeChecksum(buf, checksumSize);
    930 
    931 
    932 	int retval;
    933 	stream->readback(&retval, 4);
    934 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
    935 	if (useChecksum) {
    936 		unsigned char *checksumBufPtr = NULL;
    937 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
    938 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
    939 		stream->readback(checksumBufPtr, checksumSize);
    940 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
    941 			ALOGE("rcUpdateColorBuffer: GL communication error, please report this issue to b.android.com.\n");
    942 			abort();
    943 		}
    944 	}
    945 	return retval;
    946 }
    947 
    948 int rcOpenColorBuffer2_enc(void *self , uint32_t colorbuffer)
    949 {
    950 
    951 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    952 	IOStream *stream = ctx->m_stream;
    953 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    954 	bool useChecksum = checksumCalculator->getVersion() > 0;
    955 
    956 	 unsigned char *ptr;
    957 	 unsigned char *buf;
    958 	 const size_t sizeWithoutChecksum = 8 + 4;
    959 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
    960 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
    961 	buf = stream->alloc(totalSize);
    962 	ptr = buf;
    963 	int tmp = OP_rcOpenColorBuffer2;memcpy(ptr, &tmp, 4); ptr += 4;
    964 	memcpy(ptr, &totalSize, 4);  ptr += 4;
    965 
    966 		memcpy(ptr, &colorbuffer, 4); ptr += 4;
    967 
    968 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
    969 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
    970 
    971 
    972 	int retval;
    973 	stream->readback(&retval, 4);
    974 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
    975 	if (useChecksum) {
    976 		unsigned char *checksumBufPtr = NULL;
    977 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
    978 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
    979 		stream->readback(checksumBufPtr, checksumSize);
    980 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
    981 			ALOGE("rcOpenColorBuffer2: GL communication error, please report this issue to b.android.com.\n");
    982 			abort();
    983 		}
    984 	}
    985 	return retval;
    986 }
    987 
    988 uint32_t rcCreateClientImage_enc(void *self , uint32_t context, EGLenum target, GLuint buffer)
    989 {
    990 
    991 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
    992 	IOStream *stream = ctx->m_stream;
    993 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
    994 	bool useChecksum = checksumCalculator->getVersion() > 0;
    995 
    996 	 unsigned char *ptr;
    997 	 unsigned char *buf;
    998 	 const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4;
    999 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
   1000 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
   1001 	buf = stream->alloc(totalSize);
   1002 	ptr = buf;
   1003 	int tmp = OP_rcCreateClientImage;memcpy(ptr, &tmp, 4); ptr += 4;
   1004 	memcpy(ptr, &totalSize, 4);  ptr += 4;
   1005 
   1006 		memcpy(ptr, &context, 4); ptr += 4;
   1007 		memcpy(ptr, &target, 4); ptr += 4;
   1008 		memcpy(ptr, &buffer, 4); ptr += 4;
   1009 
   1010 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
   1011 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
   1012 
   1013 
   1014 	uint32_t retval;
   1015 	stream->readback(&retval, 4);
   1016 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
   1017 	if (useChecksum) {
   1018 		unsigned char *checksumBufPtr = NULL;
   1019 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
   1020 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
   1021 		stream->readback(checksumBufPtr, checksumSize);
   1022 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
   1023 			ALOGE("rcCreateClientImage: GL communication error, please report this issue to b.android.com.\n");
   1024 			abort();
   1025 		}
   1026 	}
   1027 	return retval;
   1028 }
   1029 
   1030 int rcDestroyClientImage_enc(void *self , uint32_t image)
   1031 {
   1032 
   1033 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
   1034 	IOStream *stream = ctx->m_stream;
   1035 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
   1036 	bool useChecksum = checksumCalculator->getVersion() > 0;
   1037 
   1038 	 unsigned char *ptr;
   1039 	 unsigned char *buf;
   1040 	 const size_t sizeWithoutChecksum = 8 + 4;
   1041 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
   1042 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
   1043 	buf = stream->alloc(totalSize);
   1044 	ptr = buf;
   1045 	int tmp = OP_rcDestroyClientImage;memcpy(ptr, &tmp, 4); ptr += 4;
   1046 	memcpy(ptr, &totalSize, 4);  ptr += 4;
   1047 
   1048 		memcpy(ptr, &image, 4); ptr += 4;
   1049 
   1050 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
   1051 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
   1052 
   1053 
   1054 	int retval;
   1055 	stream->readback(&retval, 4);
   1056 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
   1057 	if (useChecksum) {
   1058 		unsigned char *checksumBufPtr = NULL;
   1059 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
   1060 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
   1061 		stream->readback(checksumBufPtr, checksumSize);
   1062 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
   1063 			ALOGE("rcDestroyClientImage: GL communication error, please report this issue to b.android.com.\n");
   1064 			abort();
   1065 		}
   1066 	}
   1067 	return retval;
   1068 }
   1069 
   1070 void rcSelectChecksumHelper_enc(void *self , uint32_t newProtocol, uint32_t reserved)
   1071 {
   1072 
   1073 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
   1074 	IOStream *stream = ctx->m_stream;
   1075 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
   1076 	bool useChecksum = checksumCalculator->getVersion() > 0;
   1077 
   1078 	 unsigned char *ptr;
   1079 	 unsigned char *buf;
   1080 	 const size_t sizeWithoutChecksum = 8 + 4 + 4;
   1081 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
   1082 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
   1083 	buf = stream->alloc(totalSize);
   1084 	ptr = buf;
   1085 	int tmp = OP_rcSelectChecksumHelper;memcpy(ptr, &tmp, 4); ptr += 4;
   1086 	memcpy(ptr, &totalSize, 4);  ptr += 4;
   1087 
   1088 		memcpy(ptr, &newProtocol, 4); ptr += 4;
   1089 		memcpy(ptr, &reserved, 4); ptr += 4;
   1090 
   1091 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
   1092 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
   1093 
   1094 }
   1095 
   1096 void rcCreateSyncKHR_enc(void *self , EGLenum type, EGLint* attribs, uint32_t num_attribs, int destroy_when_signaled, uint64_t* glsync_out, uint64_t* syncthread_out)
   1097 {
   1098 
   1099 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
   1100 	IOStream *stream = ctx->m_stream;
   1101 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
   1102 	bool useChecksum = checksumCalculator->getVersion() > 0;
   1103 
   1104 	const unsigned int __size_attribs =  num_attribs;
   1105 	const unsigned int __size_glsync_out =  sizeof(uint64_t);
   1106 	const unsigned int __size_syncthread_out =  sizeof(uint64_t);
   1107 	 unsigned char *ptr;
   1108 	 unsigned char *buf;
   1109 	 const size_t sizeWithoutChecksum = 8 + 4 + __size_attribs + 4 + 4 + 0 + 0 + 3*4;
   1110 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
   1111 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
   1112 	buf = stream->alloc(totalSize);
   1113 	ptr = buf;
   1114 	int tmp = OP_rcCreateSyncKHR;memcpy(ptr, &tmp, 4); ptr += 4;
   1115 	memcpy(ptr, &totalSize, 4);  ptr += 4;
   1116 
   1117 		memcpy(ptr, &type, 4); ptr += 4;
   1118 	*(unsigned int *)(ptr) = __size_attribs; ptr += 4;
   1119 	memcpy(ptr, attribs, __size_attribs);ptr += __size_attribs;
   1120 		memcpy(ptr, &num_attribs, 4); ptr += 4;
   1121 		memcpy(ptr, &destroy_when_signaled, 4); ptr += 4;
   1122 	*(unsigned int *)(ptr) = __size_glsync_out; ptr += 4;
   1123 	*(unsigned int *)(ptr) = __size_syncthread_out; ptr += 4;
   1124 
   1125 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
   1126 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
   1127 
   1128 	stream->readback(glsync_out, __size_glsync_out);
   1129 	if (useChecksum) checksumCalculator->addBuffer(glsync_out, __size_glsync_out);
   1130 	stream->readback(syncthread_out, __size_syncthread_out);
   1131 	if (useChecksum) checksumCalculator->addBuffer(syncthread_out, __size_syncthread_out);
   1132 	if (useChecksum) {
   1133 		unsigned char *checksumBufPtr = NULL;
   1134 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
   1135 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
   1136 		stream->readback(checksumBufPtr, checksumSize);
   1137 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
   1138 			ALOGE("rcCreateSyncKHR: GL communication error, please report this issue to b.android.com.\n");
   1139 			abort();
   1140 		}
   1141 	}
   1142 }
   1143 
   1144 EGLint rcClientWaitSyncKHR_enc(void *self , uint64_t sync, EGLint flags, uint64_t timeout)
   1145 {
   1146 
   1147 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
   1148 	IOStream *stream = ctx->m_stream;
   1149 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
   1150 	bool useChecksum = checksumCalculator->getVersion() > 0;
   1151 
   1152 	 unsigned char *ptr;
   1153 	 unsigned char *buf;
   1154 	 const size_t sizeWithoutChecksum = 8 + 8 + 4 + 8;
   1155 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
   1156 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
   1157 	buf = stream->alloc(totalSize);
   1158 	ptr = buf;
   1159 	int tmp = OP_rcClientWaitSyncKHR;memcpy(ptr, &tmp, 4); ptr += 4;
   1160 	memcpy(ptr, &totalSize, 4);  ptr += 4;
   1161 
   1162 		memcpy(ptr, &sync, 8); ptr += 8;
   1163 		memcpy(ptr, &flags, 4); ptr += 4;
   1164 		memcpy(ptr, &timeout, 8); ptr += 8;
   1165 
   1166 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
   1167 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
   1168 
   1169 
   1170 	EGLint retval;
   1171 	stream->readback(&retval, 4);
   1172 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
   1173 	if (useChecksum) {
   1174 		unsigned char *checksumBufPtr = NULL;
   1175 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
   1176 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
   1177 		stream->readback(checksumBufPtr, checksumSize);
   1178 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
   1179 			ALOGE("rcClientWaitSyncKHR: GL communication error, please report this issue to b.android.com.\n");
   1180 			abort();
   1181 		}
   1182 	}
   1183 	return retval;
   1184 }
   1185 
   1186 void rcFlushWindowColorBufferAsync_enc(void *self , uint32_t windowSurface)
   1187 {
   1188 
   1189 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
   1190 	IOStream *stream = ctx->m_stream;
   1191 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
   1192 	bool useChecksum = checksumCalculator->getVersion() > 0;
   1193 
   1194 	 unsigned char *ptr;
   1195 	 unsigned char *buf;
   1196 	 const size_t sizeWithoutChecksum = 8 + 4;
   1197 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
   1198 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
   1199 	buf = stream->alloc(totalSize);
   1200 	ptr = buf;
   1201 	int tmp = OP_rcFlushWindowColorBufferAsync;memcpy(ptr, &tmp, 4); ptr += 4;
   1202 	memcpy(ptr, &totalSize, 4);  ptr += 4;
   1203 
   1204 		memcpy(ptr, &windowSurface, 4); ptr += 4;
   1205 
   1206 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
   1207 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
   1208 
   1209 }
   1210 
   1211 int rcDestroySyncKHR_enc(void *self , uint64_t sync)
   1212 {
   1213 
   1214 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
   1215 	IOStream *stream = ctx->m_stream;
   1216 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
   1217 	bool useChecksum = checksumCalculator->getVersion() > 0;
   1218 
   1219 	 unsigned char *ptr;
   1220 	 unsigned char *buf;
   1221 	 const size_t sizeWithoutChecksum = 8 + 8;
   1222 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
   1223 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
   1224 	buf = stream->alloc(totalSize);
   1225 	ptr = buf;
   1226 	int tmp = OP_rcDestroySyncKHR;memcpy(ptr, &tmp, 4); ptr += 4;
   1227 	memcpy(ptr, &totalSize, 4);  ptr += 4;
   1228 
   1229 		memcpy(ptr, &sync, 8); ptr += 8;
   1230 
   1231 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
   1232 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
   1233 
   1234 
   1235 	int retval;
   1236 	stream->readback(&retval, 4);
   1237 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
   1238 	if (useChecksum) {
   1239 		unsigned char *checksumBufPtr = NULL;
   1240 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
   1241 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
   1242 		stream->readback(checksumBufPtr, checksumSize);
   1243 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
   1244 			ALOGE("rcDestroySyncKHR: GL communication error, please report this issue to b.android.com.\n");
   1245 			abort();
   1246 		}
   1247 	}
   1248 	return retval;
   1249 }
   1250 
   1251 void rcSetPuid_enc(void *self , uint64_t puid)
   1252 {
   1253 
   1254 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
   1255 	IOStream *stream = ctx->m_stream;
   1256 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
   1257 	bool useChecksum = checksumCalculator->getVersion() > 0;
   1258 
   1259 	 unsigned char *ptr;
   1260 	 unsigned char *buf;
   1261 	 const size_t sizeWithoutChecksum = 8 + 8;
   1262 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
   1263 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
   1264 	buf = stream->alloc(totalSize);
   1265 	ptr = buf;
   1266 	int tmp = OP_rcSetPuid;memcpy(ptr, &tmp, 4); ptr += 4;
   1267 	memcpy(ptr, &totalSize, 4);  ptr += 4;
   1268 
   1269 		memcpy(ptr, &puid, 8); ptr += 8;
   1270 
   1271 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
   1272 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
   1273 
   1274 }
   1275 
   1276 int rcUpdateColorBufferDMA_enc(void *self , uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void* pixels, uint32_t pixels_size)
   1277 {
   1278 
   1279 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
   1280 	IOStream *stream = ctx->m_stream;
   1281 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
   1282 	bool useChecksum = checksumCalculator->getVersion() > 0;
   1283 
   1284 	const unsigned int __size_pixels =  pixels_size;
   1285 	 unsigned char *ptr;
   1286 	 unsigned char *buf;
   1287 	 const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 8 + 4 + 1*4;
   1288 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
   1289 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
   1290 	buf = stream->alloc(totalSize);
   1291 	ptr = buf;
   1292 	int tmp = OP_rcUpdateColorBufferDMA;memcpy(ptr, &tmp, 4); ptr += 4;
   1293 	memcpy(ptr, &totalSize, 4);  ptr += 4;
   1294 
   1295 		memcpy(ptr, &colorbuffer, 4); ptr += 4;
   1296 		memcpy(ptr, &x, 4); ptr += 4;
   1297 		memcpy(ptr, &y, 4); ptr += 4;
   1298 		memcpy(ptr, &width, 4); ptr += 4;
   1299 		memcpy(ptr, &height, 4); ptr += 4;
   1300 		memcpy(ptr, &format, 4); ptr += 4;
   1301 		memcpy(ptr, &type, 4); ptr += 4;
   1302 	*(uint64_t *)(ptr) = ctx->lockAndWriteDma(pixels, __size_pixels); ptr += 8;
   1303 		memcpy(ptr, &pixels_size, 4); ptr += 4;
   1304 
   1305 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
   1306 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
   1307 
   1308 
   1309 	int retval;
   1310 	stream->readback(&retval, 4);
   1311 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
   1312 	if (useChecksum) {
   1313 		unsigned char *checksumBufPtr = NULL;
   1314 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
   1315 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
   1316 		stream->readback(checksumBufPtr, checksumSize);
   1317 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
   1318 			ALOGE("rcUpdateColorBufferDMA: GL communication error, please report this issue to b.android.com.\n");
   1319 			abort();
   1320 		}
   1321 	}
   1322 	return retval;
   1323 }
   1324 
   1325 uint32_t rcCreateColorBufferDMA_enc(void *self , uint32_t width, uint32_t height, GLenum internalFormat, int frameworkFormat)
   1326 {
   1327 
   1328 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
   1329 	IOStream *stream = ctx->m_stream;
   1330 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
   1331 	bool useChecksum = checksumCalculator->getVersion() > 0;
   1332 
   1333 	 unsigned char *ptr;
   1334 	 unsigned char *buf;
   1335 	 const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4;
   1336 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
   1337 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
   1338 	buf = stream->alloc(totalSize);
   1339 	ptr = buf;
   1340 	int tmp = OP_rcCreateColorBufferDMA;memcpy(ptr, &tmp, 4); ptr += 4;
   1341 	memcpy(ptr, &totalSize, 4);  ptr += 4;
   1342 
   1343 		memcpy(ptr, &width, 4); ptr += 4;
   1344 		memcpy(ptr, &height, 4); ptr += 4;
   1345 		memcpy(ptr, &internalFormat, 4); ptr += 4;
   1346 		memcpy(ptr, &frameworkFormat, 4); ptr += 4;
   1347 
   1348 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
   1349 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
   1350 
   1351 
   1352 	uint32_t retval;
   1353 	stream->readback(&retval, 4);
   1354 	if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
   1355 	if (useChecksum) {
   1356 		unsigned char *checksumBufPtr = NULL;
   1357 		unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
   1358 		if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
   1359 		stream->readback(checksumBufPtr, checksumSize);
   1360 		if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
   1361 			ALOGE("rcCreateColorBufferDMA: GL communication error, please report this issue to b.android.com.\n");
   1362 			abort();
   1363 		}
   1364 	}
   1365 	return retval;
   1366 }
   1367 
   1368 void rcWaitSyncKHR_enc(void *self , uint64_t sync, EGLint flags)
   1369 {
   1370 
   1371 	renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
   1372 	IOStream *stream = ctx->m_stream;
   1373 	ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
   1374 	bool useChecksum = checksumCalculator->getVersion() > 0;
   1375 
   1376 	 unsigned char *ptr;
   1377 	 unsigned char *buf;
   1378 	 const size_t sizeWithoutChecksum = 8 + 8 + 4;
   1379 	 const size_t checksumSize = checksumCalculator->checksumByteSize();
   1380 	 const size_t totalSize = sizeWithoutChecksum + checksumSize;
   1381 	buf = stream->alloc(totalSize);
   1382 	ptr = buf;
   1383 	int tmp = OP_rcWaitSyncKHR;memcpy(ptr, &tmp, 4); ptr += 4;
   1384 	memcpy(ptr, &totalSize, 4);  ptr += 4;
   1385 
   1386 		memcpy(ptr, &sync, 8); ptr += 8;
   1387 		memcpy(ptr, &flags, 4); ptr += 4;
   1388 
   1389 	if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
   1390 	if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
   1391 
   1392 }
   1393 
   1394 }  // namespace
   1395 
   1396 renderControl_encoder_context_t::renderControl_encoder_context_t(IOStream *stream, ChecksumCalculator *checksumCalculator)
   1397 {
   1398 	m_stream = stream;
   1399 	m_checksumCalculator = checksumCalculator;
   1400 
   1401 	this->rcGetRendererVersion = &rcGetRendererVersion_enc;
   1402 	this->rcGetEGLVersion = &rcGetEGLVersion_enc;
   1403 	this->rcQueryEGLString = &rcQueryEGLString_enc;
   1404 	this->rcGetGLString = &rcGetGLString_enc;
   1405 	this->rcGetNumConfigs = &rcGetNumConfigs_enc;
   1406 	this->rcGetConfigs = &rcGetConfigs_enc;
   1407 	this->rcChooseConfig = &rcChooseConfig_enc;
   1408 	this->rcGetFBParam = &rcGetFBParam_enc;
   1409 	this->rcCreateContext = &rcCreateContext_enc;
   1410 	this->rcDestroyContext = &rcDestroyContext_enc;
   1411 	this->rcCreateWindowSurface = &rcCreateWindowSurface_enc;
   1412 	this->rcDestroyWindowSurface = &rcDestroyWindowSurface_enc;
   1413 	this->rcCreateColorBuffer = &rcCreateColorBuffer_enc;
   1414 	this->rcOpenColorBuffer = &rcOpenColorBuffer_enc;
   1415 	this->rcCloseColorBuffer = &rcCloseColorBuffer_enc;
   1416 	this->rcSetWindowColorBuffer = &rcSetWindowColorBuffer_enc;
   1417 	this->rcFlushWindowColorBuffer = &rcFlushWindowColorBuffer_enc;
   1418 	this->rcMakeCurrent = &rcMakeCurrent_enc;
   1419 	this->rcFBPost = &rcFBPost_enc;
   1420 	this->rcFBSetSwapInterval = &rcFBSetSwapInterval_enc;
   1421 	this->rcBindTexture = &rcBindTexture_enc;
   1422 	this->rcBindRenderbuffer = &rcBindRenderbuffer_enc;
   1423 	this->rcColorBufferCacheFlush = &rcColorBufferCacheFlush_enc;
   1424 	this->rcReadColorBuffer = &rcReadColorBuffer_enc;
   1425 	this->rcUpdateColorBuffer = &rcUpdateColorBuffer_enc;
   1426 	this->rcOpenColorBuffer2 = &rcOpenColorBuffer2_enc;
   1427 	this->rcCreateClientImage = &rcCreateClientImage_enc;
   1428 	this->rcDestroyClientImage = &rcDestroyClientImage_enc;
   1429 	this->rcSelectChecksumHelper = &rcSelectChecksumHelper_enc;
   1430 	this->rcCreateSyncKHR = &rcCreateSyncKHR_enc;
   1431 	this->rcClientWaitSyncKHR = &rcClientWaitSyncKHR_enc;
   1432 	this->rcFlushWindowColorBufferAsync = &rcFlushWindowColorBufferAsync_enc;
   1433 	this->rcDestroySyncKHR = &rcDestroySyncKHR_enc;
   1434 	this->rcSetPuid = &rcSetPuid_enc;
   1435 	this->rcUpdateColorBufferDMA = &rcUpdateColorBufferDMA_enc;
   1436 	this->rcCreateColorBufferDMA = &rcCreateColorBufferDMA_enc;
   1437 	this->rcWaitSyncKHR = &rcWaitSyncKHR_enc;
   1438 }
   1439 
   1440