diff options
author | Scott Mertz <scott@cyngn.com> | 2016-08-29 12:55:43 -0700 |
---|---|---|
committer | Scott Mertz <scott@cyngn.com> | 2016-08-29 12:55:43 -0700 |
commit | 7a715d74495a6743be62025481519c673117c422 (patch) | |
tree | 9071944a43766cfafd8061d91e3a3bfd1426de90 | |
parent | 208361067bfcad5223a774f5251b459390a0af56 (diff) | |
parent | fe2e5ce29837d9bf20f029adeafda9adf109621d (diff) | |
download | android_device_generic_goldfish-staging/cm-14.0.tar.gz android_device_generic_goldfish-staging/cm-14.0.tar.bz2 android_device_generic_goldfish-staging/cm-14.0.zip |
Merge tag 'android-7.0.0_r1' into HEADstaging/cm-14.0
Android 7.0.0 release 1
63 files changed, 8759 insertions, 2331 deletions
diff --git a/camera/Android.mk b/camera/Android.mk index 8982c71..26d4936 100644 --- a/camera/Android.mk +++ b/camera/Android.mk @@ -17,30 +17,29 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) -LOCAL_MODULE_RELATIVE_PATH := hw -LOCAL_CFLAGS += -fno-short-enums -DQEMU_HARDWARE -LOCAL_CFLAGS += -Wno-unused-parameter -Wno-missing-field-initializers -LOCAL_CLANG_CFLAGS += -Wno-c++11-narrowing -LOCAL_SHARED_LIBRARIES:= \ +# Emulator camera module######################################################## + +emulator_camera_module_relative_path := hw +emulator_camera_cflags := -fno-short-enums -DQEMU_HARDWARE +emulator_camera_cflags += -Wno-unused-parameter -Wno-missing-field-initializers +emulator_camera_clang_flags := -Wno-c++11-narrowing +emulator_camera_shared_libraries := \ libbinder \ liblog \ libutils \ libcutils \ libcamera_client \ libui \ - libdl - -# JPEG conversion libraries and includes. -LOCAL_SHARED_LIBRARIES += \ + libdl \ libjpeg \ libcamera_metadata -LOCAL_C_INCLUDES += external/jpeg \ +emulator_camera_c_includes := external/jpeg \ frameworks/native/include/media/hardware \ $(LOCAL_PATH)/../opengl/system/OpenglSystemCommon \ $(call include-path-for, camera) -LOCAL_SRC_FILES := \ +emulator_camera_src := \ EmulatedCameraHal.cpp \ EmulatedCameraFactory.cpp \ EmulatedCameraHotplugThread.cpp \ @@ -65,6 +64,16 @@ LOCAL_SRC_FILES := \ EmulatedCamera3.cpp \ EmulatedFakeCamera3.cpp +# Emulated camera - goldfish / vbox_x86 build################################### + +LOCAL_MODULE_RELATIVE_PATH := ${emulator_camera_module_relative_path} +LOCAL_CFLAGS := ${emulator_camera_cflags} +LOCAL_CLANG_CFLAGS += ${emulator_camera_clang_flags} + +LOCAL_SHARED_LIBRARIES := ${emulator_camera_shared_libraries} +LOCAL_C_INCLUDES += ${emulator_camera_c_includes} +LOCAL_SRC_FILES := ${emulator_camera_src} + ifeq ($(TARGET_PRODUCT),vbox_x86) LOCAL_MODULE := camera.vbox_x86 else @@ -73,30 +82,71 @@ endif include $(BUILD_SHARED_LIBRARY) -################################################################# +# Emulator camera - ranchu build################################################ + +include ${CLEAR_VARS} + +LOCAL_MODULE_RELATIVE_PATH := ${emulator_camera_module_relative_path} +LOCAL_CFLAGS := ${emulator_camera_cflags} +LOCAL_CLANG_CFLAGS += ${emulator_camera_clang_flags} + +LOCAL_SHARED_LIBRARIES := ${emulator_camera_shared_libraries} +LOCAL_C_INCLUDES += ${emulator_camera_c_includes} +LOCAL_SRC_FILES := ${emulator_camera_src} + +LOCAL_MODULE := camera.ranchu + +include $(BUILD_SHARED_LIBRARY) + +# JPEG stub##################################################################### + ifneq ($(TARGET_BUILD_PDK),true) include $(CLEAR_VARS) -LOCAL_MODULE_RELATIVE_PATH := hw -LOCAL_CFLAGS += -fno-short-enums -DQEMU_HARDWARE -LOCAL_CFLAGS += -Wno-unused-parameter -LOCAL_CLANG_CFLAGS += -Wno-c++11-narrowing -LOCAL_SHARED_LIBRARIES:= \ +jpeg_module_relative_path := hw +jpeg_cflags := -fno-short-enums -DQEMU_HARDWARE +jpeg_cflags += -Wno-unused-parameter +jpeg_clang_flags += -Wno-c++11-narrowing +jpeg_shared_libraries := \ libcutils \ liblog \ libskia \ libandroid_runtime +jpeg_c_includes := external/libjpeg-turbo \ + external/skia/include/core/ \ + frameworks/base/core/jni/android/graphics \ + frameworks/native/include +jpeg_src := JpegStub.cpp + +# JPEG stub - goldfish build#################################################### -LOCAL_C_INCLUDES += external/jpeg \ - external/skia/include/core/ \ - frameworks/base/core/jni/android/graphics \ - frameworks/native/include +LOCAL_MODULE_RELATIVE_PATH := ${jpeg_module_relative_path} +LOCAL_CFLAGS += ${jpeg_cflags} +LOCAL_CLANG_CFLAGS += ${jpeg_clangflags} -LOCAL_SRC_FILES := JpegStub.cpp +LOCAL_SHARED_LIBRARIES := ${jpeg_shared_libraries} +LOCAL_C_INCLUDES += ${jpeg_c_includes} +LOCAL_SRC_FILES := ${jpeg_src} LOCAL_MODULE := camera.goldfish.jpeg include $(BUILD_SHARED_LIBRARY) +# JPEG stub - ranchu build###################################################### + +include ${CLEAR_VARS} + +LOCAL_MODULE := camera.ranchu.jpeg + +LOCAL_MODULE_RELATIVE_PATH := ${jpeg_module_relative_path} +LOCAL_CFLAGS += ${jpeg_cflags} +LOCAL_CLANG_CFLAGS += ${jpeg_clangflags} + +LOCAL_SHARED_LIBRARIES := ${jpeg_shared_libraries} +LOCAL_C_INCLUDES += ${jpeg_c_includes} +LOCAL_SRC_FILES := ${jpeg_src} + +include $(BUILD_SHARED_LIBRARY) + endif # !PDK diff --git a/camera/CallbackNotifier.cpp b/camera/CallbackNotifier.cpp index b288f52..0dbd50d 100755 --- a/camera/CallbackNotifier.cpp +++ b/camera/CallbackNotifier.cpp @@ -182,10 +182,8 @@ void CallbackNotifier::releaseRecordingFrame(const void* opaque) status_t CallbackNotifier::storeMetaDataInBuffers(bool enable) { - /* Return INVALID_OPERATION means HAL does not support metadata. So HAL will - * return actual frame data with CAMERA_MSG_VIDEO_FRRAME. Return - * INVALID_OPERATION to mean metadata is not supported. */ - return INVALID_OPERATION; + // Return error if metadata is request, otherwise silently agree. + return enable ? INVALID_OPERATION : NO_ERROR; } /**************************************************************************** diff --git a/camera/EmulatedCameraDevice.h b/camera/EmulatedCameraDevice.h index ee9f7dd..fff11fa 100755 --- a/camera/EmulatedCameraDevice.h +++ b/camera/EmulatedCameraDevice.h @@ -396,7 +396,7 @@ protected: inline status_t startThread(bool one_burst) { mOneBurst = one_burst; - return run(NULL, ANDROID_PRIORITY_URGENT_DISPLAY, 0); + return run("Camera_startThread", ANDROID_PRIORITY_URGENT_DISPLAY, 0); } /* Overriden base class method. diff --git a/camera/EmulatedCameraFactory.cpp b/camera/EmulatedCameraFactory.cpp index 586c9c6..137d8ab 100755 --- a/camera/EmulatedCameraFactory.cpp +++ b/camera/EmulatedCameraFactory.cpp @@ -180,7 +180,7 @@ EmulatedCameraFactory::EmulatedCameraFactory() } mHotplugThread = new EmulatedCameraHotplugThread(&cameraIdVector[0], mEmulatedCameraNum); - mHotplugThread->run(); + mHotplugThread->run("EmulatedCameraHotplugThread"); } mConstructedOK = true; diff --git a/fingerprint/fingerprint.c b/fingerprint/fingerprint.c index baa7ad6..6405e26 100644 --- a/fingerprint/fingerprint.c +++ b/fingerprint/fingerprint.c @@ -40,8 +40,8 @@ #include <poll.h> #define FINGERPRINT_LISTEN_SERVICE_NAME "fingerprintlisten" -#define FINGERPRINT_FILENAME \ - "/data/system/users/0/fpdata/emulator_fingerprint_storage.bin" +#define FINGERPRINT_FILENAME "emufp.bin" +#define AUTHENTICATOR_ID_FILENAME "emuauthid.bin" #define MAX_COMM_CHARS 128 #define MAX_COMM_ERRORS 8 // Typical devices will allow up to 5 fingerprints per user to maintain performance of @@ -69,7 +69,9 @@ typedef struct worker_thread_t { pthread_t thread; worker_state_t state; uint64_t secureid[MAX_NUM_FINGERS]; - uint64_t authenid[MAX_NUM_FINGERS]; + uint64_t fingerid[MAX_NUM_FINGERS]; + char fp_filename[PATH_MAX]; + char authid_filename[PATH_MAX]; } worker_thread_t; typedef struct qemu_fingerprint_device_t { @@ -87,21 +89,23 @@ typedef struct qemu_fingerprint_device_t { /******************************************************************************/ +static FILE* openForWrite(const char* filename); + static void saveFingerprint(worker_thread_t* listener, int idx) { ALOGD("----------------> %s -----------------> idx %d", __FUNCTION__, idx); // Save fingerprints to file - FILE* fp = fopen(FINGERPRINT_FILENAME, "r+"); // write but don't truncate + FILE* fp = openForWrite(listener->fp_filename); if (fp == NULL) { ALOGE("Could not open fingerprints storage at %s; " "fingerprints won't be saved", - FINGERPRINT_FILENAME); + listener->fp_filename); perror("Failed to open file"); return; } ALOGD("Write fingerprint[%d] (0x%" PRIx64 ",0x%" PRIx64 ")", idx, - listener->secureid[idx], listener->authenid[idx]); + listener->secureid[idx], listener->fingerid[idx]); if (fseek(fp, (idx) * sizeof(uint64_t), SEEK_SET) < 0) { ALOGE("Failed while seeking for fingerprint[%d] in emulator storage", @@ -110,14 +114,15 @@ static void saveFingerprint(worker_thread_t* listener, int idx) { return; } int ns = fwrite(&listener->secureid[idx], sizeof(uint64_t), 1, fp); + if (fseek(fp, (MAX_NUM_FINGERS + idx) * sizeof(uint64_t), SEEK_SET) < 0) { ALOGE("Failed while seeking for fingerprint[%d] in emulator storage", idx); fclose(fp); return; } - int na = fwrite(&listener->authenid[idx], sizeof(uint64_t), 1, fp); - if (ns != 1 || na != 1) + int nf = fwrite(&listener->fingerid[idx], sizeof(uint64_t), 1, fp); + if (ns != 1 || ns !=1) ALOGW("Corrupt emulator fingerprints storage; could not save " "fingerprints"); @@ -126,28 +131,93 @@ static void saveFingerprint(worker_thread_t* listener, int idx) { return; } +static FILE* openForWrite(const char* filename) { + + if (!filename) return NULL; + + FILE* fp = fopen(filename, "r+"); // write but don't truncate + if (fp == NULL) { + fp = fopen(filename, "w"); + if (fp) { + uint64_t zero = 0; + int i = 0; + for (i = 0; i < 2*MAX_NUM_FINGERS; ++i) { + fwrite(&zero, sizeof(uint64_t), 1, fp); + } + + //the last one is for authenticator id + fwrite(&zero, sizeof(uint64_t), 1, fp); + } + } + return fp; +} + +static void saveAuthenticatorId(const char* filename, uint64_t authenid) { + ALOGD("----------------> %s ----------------->", __FUNCTION__); + FILE* fp = openForWrite(filename); + if (!fp) { + ALOGE("Failed to open emulator storage file to save authenticator id"); + return; + } + + rewind(fp); + + int na = fwrite(&authenid, sizeof(authenid), 1, fp); + if (na != 1) { + ALOGE("Failed while writing authenticator id in emulator storage"); + } + + ALOGD("Save authenticator id (0x%" PRIx64 ")", authenid); + + fclose(fp); +} + +static void loadAuthenticatorId(const char* authid_filename, uint64_t* pauthenid) { + ALOGD("----------------> %s ----------------->", __FUNCTION__); + FILE* fp = fopen(authid_filename, "r"); + if (fp == NULL) { + ALOGE("Could not load authenticator id from storage at %s; " + "it has not yet been created.", + authid_filename); + perror("Failed to open/create file"); + return; + } + + rewind(fp); + + int na = fread(pauthenid, sizeof(*pauthenid), 1, fp); + if (na != 1) + ALOGW("Corrupt emulator authenticator id storage (read %d)", na); + + ALOGD("Read authenticator id (0x%" PRIx64 ")", *pauthenid); + + fclose(fp); + + return; +} + static void loadFingerprints(worker_thread_t* listener) { ALOGD("----------------> %s ----------------->", __FUNCTION__); - FILE* fp = fopen(FINGERPRINT_FILENAME, "a+"); // so we can create if empty + FILE* fp = fopen(listener->fp_filename, "r"); if (fp == NULL) { ALOGE("Could not load fingerprints from storage at %s; " "it has not yet been created.", - FINGERPRINT_FILENAME); + listener->fp_filename); perror("Failed to open/create file"); return; } int ns = fread(listener->secureid, MAX_NUM_FINGERS * sizeof(uint64_t), 1, fp); - int na = fread(listener->authenid, MAX_NUM_FINGERS * sizeof(uint64_t), 1, + int nf = fread(listener->fingerid, MAX_NUM_FINGERS * sizeof(uint64_t), 1, fp); - if (ns != 1 || na != 1) - ALOGW("Corrupt emulator fingerprints storage (read %d+%db)", ns, na); + if (ns != 1 || nf != 1) + ALOGW("Corrupt emulator fingerprints storage (read %d+%db)", ns, nf); int i = 0; for (i = 0; i < MAX_NUM_FINGERS; i++) ALOGD("Read fingerprint %d (0x%" PRIx64 ",0x%" PRIx64 ")", i, - listener->secureid[i], listener->authenid[i]); + listener->secureid[i], listener->fingerid[i]); fclose(fp); @@ -176,16 +246,33 @@ static uint64_t fingerprint_get_auth_id(struct fingerprint_device* device) { authenticator_id = qdev->authenticator_id; pthread_mutex_unlock(&qdev->lock); + ALOGD("----------------> %s auth id %" PRIx64 "----------------->", __FUNCTION__, authenticator_id); return authenticator_id; } -static int fingerprint_set_active_group(struct fingerprint_device __unused *device, uint32_t gid, +static int fingerprint_set_active_group(struct fingerprint_device *device, uint32_t gid, const char *path) { - // Groups are a future feature. For now, the framework sends the profile owner's id (userid) - // as the primary group id for the user. This code should create a tuple (groupId, fingerId) - // that represents a single fingerprint entity in the database. For now we just generate - // globally unique ids. - ALOGW("Setting active finger group not implemented"); + ALOGD("----------------> %s -----------------> path %s", __FUNCTION__, path); + qemu_fingerprint_device_t* qdev = (qemu_fingerprint_device_t*)device; + pthread_mutex_lock(&qdev->lock); + qdev->group_id = gid; + snprintf(qdev->listener.fp_filename, sizeof(qdev->listener.fp_filename), + "%s/%s", path, FINGERPRINT_FILENAME); + snprintf(qdev->listener.authid_filename, sizeof(qdev->listener.authid_filename), + "%s/%s", path, AUTHENTICATOR_ID_FILENAME); + uint64_t authenticator_id = 0; + loadFingerprints(&qdev->listener); + loadAuthenticatorId(qdev->listener.authid_filename, &authenticator_id); + if (authenticator_id == 0) { + // firs time, create an authenticator id + authenticator_id = get_64bit_rand(); + // save it to disk + saveAuthenticatorId(qdev->listener.authid_filename, authenticator_id); + } + + qdev->authenticator_id = authenticator_id; + pthread_mutex_unlock(&qdev->lock); + return 0; } @@ -298,46 +385,55 @@ static int fingerprint_cancel(struct fingerprint_device *device) { ALOGD("----------------> %s ----------------->", __FUNCTION__); qemu_fingerprint_device_t* qdev = (qemu_fingerprint_device_t*)device; - fingerprint_msg_t msg = {0}; - msg.type = FINGERPRINT_ERROR; - msg.data.error = FINGERPRINT_ERROR_CANCELED; - pthread_mutex_lock(&qdev->lock); qdev->listener.state = STATE_IDLE; pthread_mutex_unlock(&qdev->lock); - device->notify(&msg); + fingerprint_msg_t msg = {0, {0}}; + msg.type = FINGERPRINT_ERROR; + msg.data.error = FINGERPRINT_ERROR_CANCELED; + qdev->device.notify(&msg); return 0; } -static int fingerprint_enumerate(struct fingerprint_device *device, - fingerprint_finger_id_t *results, uint32_t *max_size) { +static int fingerprint_enumerate(struct fingerprint_device *device) { ALOGD("----------------> %s ----------------->", __FUNCTION__); - if (device == NULL || results == NULL || max_size == NULL) { + if (device == NULL) { ALOGE("Cannot enumerate saved fingerprints with uninitialized params"); return -1; } qemu_fingerprint_device_t* qdev = (qemu_fingerprint_device_t*)device; - unsigned int i = 0; - int num = 0; - for (i = 0; i < MAX_NUM_FINGERS; i++) { + int template_count = 0; + for (int i = 0; i < MAX_NUM_FINGERS; i++) { if (qdev->listener.secureid[i] != 0 || - qdev->listener.authenid[i] != 0) { + qdev->listener.fingerid[i] != 0) { ALOGD("ENUM: Fingerprint [%d] = 0x%" PRIx64 ",%" PRIx64, i, - qdev->listener.secureid[i], qdev->listener.authenid[i]); - num++; + qdev->listener.secureid[i], qdev->listener.fingerid[i]); + template_count++; + } + } + fingerprint_msg_t message = {0, {0}}; + message.type = FINGERPRINT_TEMPLATE_ENUMERATING; + message.data.enumerated.finger.gid = qdev->group_id; + for (int i = 0; i < MAX_NUM_FINGERS; i++) { + if (qdev->listener.secureid[i] != 0 || + qdev->listener.fingerid[i] != 0) { + template_count--; + message.data.enumerated.remaining_templates = template_count; + message.data.enumerated.finger.fid = qdev->listener.fingerid[i]; + qdev->device.notify(&message); } } - return num; + return 0; } static int fingerprint_remove(struct fingerprint_device *device, uint32_t __unused gid, uint32_t fid) { int idx = 0; - fingerprint_msg_t msg = {0}; + fingerprint_msg_t msg = {0, {0}}; ALOGD("----------------> %s -----------------> fid %d", __FUNCTION__, fid); if (device == NULL) { ALOGE("Can't remove fingerprint (gid=%d, fid=%d); " @@ -357,11 +453,11 @@ static int fingerprint_remove(struct fingerprint_device *device, pthread_mutex_lock(&qdev->lock); listIsEmpty = true; // Haven't seen a valid entry yet for (idx = 0; idx < MAX_NUM_FINGERS; idx++) { - uint32_t theFid = qdev->listener.authenid[idx]; + uint32_t theFid = qdev->listener.fingerid[idx]; if (theFid != 0) { // Delete this entry qdev->listener.secureid[idx] = 0; - qdev->listener.authenid[idx] = 0; + qdev->listener.fingerid[idx] = 0; saveFingerprint(&qdev->listener, idx); // Send a notification that we deleted this one @@ -378,6 +474,9 @@ static int fingerprint_remove(struct fingerprint_device *device, } } // end for (idx < MAX_NUM_FINGERS) } while (!listIsEmpty); + msg.type = FINGERPRINT_TEMPLATE_REMOVED; + msg.data.removed.finger.fid = 0; + device->notify(&msg); qdev->listener.state = STATE_IDLE; pthread_mutex_unlock(&qdev->lock); } else { @@ -385,7 +484,7 @@ static int fingerprint_remove(struct fingerprint_device *device, // Look for this finger ID in our table. pthread_mutex_lock(&qdev->lock); for (idx = 0; idx < MAX_NUM_FINGERS; idx++) { - if (qdev->listener.authenid[idx] == fid && + if (qdev->listener.fingerid[idx] == fid && qdev->listener.secureid[idx] != 0) { // Found it! break; @@ -399,7 +498,7 @@ static int fingerprint_remove(struct fingerprint_device *device, } qdev->listener.secureid[idx] = 0; - qdev->listener.authenid[idx] = 0; + qdev->listener.fingerid[idx] = 0; saveFingerprint(&qdev->listener, idx); qdev->listener.state = STATE_IDLE; @@ -432,18 +531,29 @@ static int set_notify_callback(struct fingerprint_device *device, return 0; } +static bool is_valid_fid(qemu_fingerprint_device_t* qdev, uint64_t fid) { + int idx = 0; + if (0 == fid) { return false; } + for (idx = 0; idx < MAX_NUM_FINGERS; idx++) { + if (qdev->listener.fingerid[idx] == fid) { + return true; + } + } + return false; +} + static void send_scan_notice(qemu_fingerprint_device_t* qdev, int fid) { ALOGD("----------------> %s ----------------->", __FUNCTION__); // acquired message - fingerprint_msg_t acqu_msg = {0}; + fingerprint_msg_t acqu_msg = {0, {0}}; acqu_msg.type = FINGERPRINT_ACQUIRED; acqu_msg.data.acquired.acquired_info = FINGERPRINT_ACQUIRED_GOOD; // authenticated message - fingerprint_msg_t auth_msg = {0}; + fingerprint_msg_t auth_msg = {0, {0}}; auth_msg.type = FINGERPRINT_AUTHENTICATED; - auth_msg.data.authenticated.finger.fid = fid; + auth_msg.data.authenticated.finger.fid = is_valid_fid(qdev, fid) ? fid : 0; auth_msg.data.authenticated.finger.gid = 0; // unused auth_msg.data.authenticated.hat.version = HW_AUTH_TOKEN_VERSION; auth_msg.data.authenticated.hat.authenticator_type = @@ -481,7 +591,7 @@ static void send_enroll_notice(qemu_fingerprint_device_t* qdev, int fid) { int idx = 0; for (idx = 0; idx < MAX_NUM_FINGERS; idx++) { if (qdev->listener.secureid[idx] == 0 || - qdev->listener.authenid[idx] == 0) { + qdev->listener.fingerid[idx] == 0) { // This entry is available break; } @@ -494,14 +604,14 @@ static void send_enroll_notice(qemu_fingerprint_device_t* qdev, int fid) { } qdev->listener.secureid[idx] = qdev->secure_user_id; - qdev->listener.authenid[idx] = fid; + qdev->listener.fingerid[idx] = fid; saveFingerprint(&qdev->listener, idx); qdev->listener.state = STATE_SCAN; pthread_mutex_unlock(&qdev->lock); // LOCKED notification? - fingerprint_msg_t msg = {0}; + fingerprint_msg_t msg = {0, {0}}; msg.type = FINGERPRINT_TEMPLATE_ENROLLING; msg.data.enroll.finger.fid = fid; msg.data.enroll.samples_remaining = 0; @@ -700,10 +810,9 @@ static int fingerprint_open(const hw_module_t* module, const char __unused *id, return -ENOMEM; } - loadFingerprints(&qdev->listener); qdev->device.common.tag = HARDWARE_DEVICE_TAG; - qdev->device.common.version = HARDWARE_MODULE_API_VERSION(2, 0); + qdev->device.common.version = HARDWARE_MODULE_API_VERSION(2, 1); qdev->device.common.module = (struct hw_module_t*)module; qdev->device.common.close = fingerprint_close; @@ -738,7 +847,7 @@ static struct hw_module_methods_t fingerprint_module_methods = { fingerprint_module_t HAL_MODULE_INFO_SYM = { .common = { .tag = HARDWARE_MODULE_TAG, - .module_api_version = FINGERPRINT_MODULE_API_VERSION_2_0, + .module_api_version = FINGERPRINT_MODULE_API_VERSION_2_1, .hal_api_version = HARDWARE_HAL_API_VERSION, .id = FINGERPRINT_HARDWARE_MODULE_ID, .name = "Emulator Fingerprint HAL", diff --git a/fstab.goldfish b/fstab.goldfish index 1e94443..cecc047 100644 --- a/fstab.goldfish +++ b/fstab.goldfish @@ -5,4 +5,4 @@ /dev/block/mtdblock0 /system ext4 ro,barrier=1 wait /dev/block/mtdblock1 /data ext4 noatime,nosuid,nodev,barrier=1,nomblk_io_submit wait,check /dev/block/mtdblock2 /cache ext4 noatime,nosuid,nodev wait,check -/devices/platform/goldfish_mmc.0* auto auto defaults voldmanaged=sdcard:auto,noemulatedsd +/devices/platform/goldfish_mmc.0* auto auto defaults voldmanaged=sdcard:auto,encryptable=userdata diff --git a/fstab.ranchu b/fstab.ranchu index cff906f..f155c5a 100644 --- a/fstab.ranchu +++ b/fstab.ranchu @@ -2,7 +2,7 @@ #<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags> # The filesystem that contains the filesystem checker binary (typically /system) cannot # specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK -/dev/block/vda /system ext4 ro wait -/dev/block/vdb /cache ext4 noatime,nosuid,nodev,nomblk_io_submit,errors=panic wait -/dev/block/vdc /data ext4 noatime,nosuid,nodev,nomblk_io_submit,errors=panic wait -#/devices/platform/goldfish_mmc.0 auto vfat defaults voldmanaged=sdcard:auto +/dev/block/vda /system ext4 ro wait +/dev/block/vdb /cache ext4 noatime,nosuid,nodev,nomblk_io_submit,errors=panic wait +/dev/block/vdc /data ext4 noatime,nosuid,nodev,nomblk_io_submit,errors=panic wait,check +/devices/*/block/vdd auto auto defaults voldmanaged=sdcard:auto,encryptable=userdata diff --git a/gps/Android.mk b/gps/Android.mk index 65b637c..0abf1fb 100644 --- a/gps/Android.mk +++ b/gps/Android.mk @@ -34,3 +34,14 @@ else LOCAL_MODULE := gps.goldfish endif include $(BUILD_SHARED_LIBRARY) + + +include $(CLEAR_VARS) + +LOCAL_MODULE_RELATIVE_PATH := hw +LOCAL_CFLAGS += -DQEMU_HARDWARE +LOCAL_SHARED_LIBRARIES := liblog libcutils libhardware +LOCAL_SRC_FILES := gps_qemu.c +LOCAL_MODULE := gps.ranchu + +include $(BUILD_SHARED_LIBRARY) diff --git a/gps/gps_qemu.c b/gps/gps_qemu.c index 8f3d6e9..133cbe4 100644 --- a/gps/gps_qemu.c +++ b/gps/gps_qemu.c @@ -96,12 +96,10 @@ nmea_tokenizer_init( NmeaTokenizer* t, const char* p, const char* end ) if (q == NULL) q = end; - if (q > p) { - if (count < MAX_NMEA_TOKENS) { - t->tokens[count].p = p; - t->tokens[count].end = q; - count += 1; - } + if (count < MAX_NMEA_TOKENS) { + t->tokens[count].p = p; + t->tokens[count].end = q; + count += 1; } if (q < end) q += 1; diff --git a/init.goldfish.rc b/init.goldfish.rc index 2058bad..48663bc 100644 --- a/init.goldfish.rc +++ b/init.goldfish.rc @@ -3,11 +3,6 @@ on early-init mount debugfs debugfs /sys/kernel/debug on init - # Support legacy paths - symlink /sdcard /mnt/sdcard - - # By default, primary storage is physical - setprop ro.vold.primary_physical 1 on boot setprop ARGH ARGH @@ -25,6 +20,19 @@ on boot setprop status.battery.level_raw 50 setprop status.battery.level_scale 9 +# set up the GPU caching + setprop ro.hwui.texture_cache_size 72 + setprop ro.hwui.layer_cache_size 48 + setprop ro.hwui.r_buffer_cache_size 8 + setprop ro.hwui.path_cache_size 32 + setprop ro.hwui.gradient_cache_size 1 + setprop ro.hwui.drop_shadow_cache_size 6 + setprop ro.hwui.texture_cache_flushrate 0.4 + setprop ro.hwui.text_small_cache_width 1024 + setprop ro.hwui.text_small_cache_height 1024 + setprop ro.hwui.text_large_cache_width 2048 + setprop ro.hwui.text_large_cache_height 1024 + # disable some daemons the emulator doesn't want stop dund stop akmd diff --git a/init.ranchu.rc b/init.ranchu.rc index 9d2008d..2a20cd5 100644 --- a/init.ranchu.rc +++ b/init.ranchu.rc @@ -5,12 +5,6 @@ on early-init mount debugfs debugfs /sys/kernel/debug on init - # See storage config details at http://source.android.com/tech/storage/ - mkdir /storage/sdcard 0555 root root - - # Support legacy paths - #symlink /storage/sdcard /sdcard - #symlink /storage/sdcard /mnt/sdcard symlink /dev/goldfish_pipe /dev/android_pipe symlink /dev/goldfish_pipe /dev/qemu_pipe @@ -22,6 +16,7 @@ on boot setprop ro.radio.use-ppp no setprop ro.build.product generic setprop ro.product.device generic + setprop ro.hardware.audio.primary goldfish # fake some battery state setprop status.battery.state Slow @@ -29,25 +24,59 @@ on boot setprop status.battery.level_raw 50 setprop status.battery.level_scale 9 -# Disable GPU support - setprop ro.kernel.qemu 1 - setprop ro.kernel.qemu.gles 0 - symlink /system/lib64/hw/gralloc.default.aosp.so /system/lib64/hw/gralloc.default.so - -# disable RenderScript - setprop config.disable_renderscript 1 +# set up the GPU caching + setprop ro.hwui.texture_cache_size 72 + setprop ro.hwui.layer_cache_size 48 + setprop ro.hwui.r_buffer_cache_size 8 + setprop ro.hwui.path_cache_size 32 + setprop ro.hwui.gradient_cache_size 1 + setprop ro.hwui.drop_shadow_cache_size 6 + setprop ro.hwui.texture_cache_flushrate 0.4 + setprop ro.hwui.text_small_cache_width 1024 + setprop ro.hwui.text_small_cache_height 1024 + setprop ro.hwui.text_large_cache_width 2048 + setprop ro.hwui.text_large_cache_height 1024 # disable some daemons the emulator doesn't want stop dund stop akmd -# enable dhcpcd on eth0 interface -service dhcpcd_eth0 /system/bin/dhcpcd -ABDKL - class main - disabled - oneshot +# start essential services +# These were written for the classic emulator, but are applicable to ranchu + start goldfish-logcat + start goldfish-setup + # enable Google-specific location features, # like NetworkLocationProvider and LocationCollector setprop ro.com.google.locationfeatures 1 +service goldfish-setup /system/etc/init.goldfish.sh + user root + group root + oneshot + +# The qemu-props program is used to set various system +# properties on boot. It must be run early during the boot +# process to avoid race conditions with other daemons that +# might read them (e.g. surface flinger), so define it in +# class 'core' +# +service qemu-props /system/bin/qemu-props + class core + user root + group root + oneshot + +# -Q is a special logcat option that forces the +# program to check wether it runs on the emulator +# if it does, it redirects its output to the device +# named by the androidboot.console kernel option +# if not, is simply exits immediately + +service goldfish-logcat /system/bin/logcat -Q + oneshot + +service fingerprintd /system/bin/fingerprintd + class late_start + user system diff --git a/opengl/shared/OpenglCodecCommon/Android.mk b/opengl/shared/OpenglCodecCommon/Android.mk index 1c0aca5..2104398 100644 --- a/opengl/shared/OpenglCodecCommon/Android.mk +++ b/opengl/shared/OpenglCodecCommon/Android.mk @@ -5,11 +5,11 @@ LOCAL_PATH := $(call my-dir) commonSources := \ GLClientState.cpp \ + ChecksumCalculator.cpp \ GLSharedGroup.cpp \ glUtils.cpp \ SocketStream.cpp \ TcpStream.cpp \ - TimeUtils.cpp ### CodecCommon guest ############################################## $(call emugl-begin-static-library,libOpenglCodecCommon) diff --git a/opengl/shared/OpenglCodecCommon/ChecksumCalculator.cpp b/opengl/shared/OpenglCodecCommon/ChecksumCalculator.cpp new file mode 100644 index 0000000..60940b8 --- /dev/null +++ b/opengl/shared/OpenglCodecCommon/ChecksumCalculator.cpp @@ -0,0 +1,154 @@ +/* +* Copyright (C) 2016 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#include "ChecksumCalculator.h" + +#include <string> +#include <vector> +#include <string.h> + +// Checklist when implementing new protocol: +// 1. update CHECKSUMHELPER_MAX_VERSION +// 2. update maxChecksumSize() +// 3. update checksumByteSize() +// 4. update addBuffer, writeChecksum, resetChecksum, validate + +// change CHECKSUMHELPER_MAX_VERSION when you want to update the protocol version +#define CHECKSUMHELPER_MAX_VERSION 1 + +// checksum buffer size +// Please add a new checksum buffer size when implementing a new protocol, +// as well as modifying the maxChecksumSize function. +static const size_t kV1ChecksumSize = 8; + +static constexpr size_t maxChecksumSize() { + return 0 > kV1ChecksumSize ? 0 : kV1ChecksumSize; +} + +static const size_t kMaxChecksumSize = maxChecksumSize(); + +// utility macros to create checksum string at compilation time +#define CHECKSUMHELPER_VERSION_STR_PREFIX "ANDROID_EMU_CHECKSUM_HELPER_v" +#define CHECKSUMHELPER_MACRO_TO_STR(x) #x +#define CHECKSUMHELPER_MACRO_VAL_TO_STR(x) CHECKSUMHELPER_MACRO_TO_STR(x) + +static const uint32_t kMaxVersion = CHECKSUMHELPER_MAX_VERSION; +static const char* kMaxVersionStrPrefix = CHECKSUMHELPER_VERSION_STR_PREFIX; +static const char* kMaxVersionStr = CHECKSUMHELPER_VERSION_STR_PREFIX CHECKSUMHELPER_MACRO_VAL_TO_STR(CHECKSUMHELPER_MAX_VERSION); + +#undef CHECKSUMHELPER_MAX_VERSION +#undef CHECKSUMHELPER_VERSION_STR_PREFIX +#undef CHECKSUMHELPER_MACRO_TO_STR +#undef CHECKSUMHELPER_MACRO_VAL_TO_STR + +uint32_t ChecksumCalculator::getMaxVersion() {return kMaxVersion;} +const char* ChecksumCalculator::getMaxVersionStr() {return kMaxVersionStr;} +const char* ChecksumCalculator::getMaxVersionStrPrefix() {return kMaxVersionStrPrefix;} + +bool ChecksumCalculator::setVersion(uint32_t version) { + if (version > kMaxVersion) { // unsupported version + LOG_CHECKSUMHELPER("%s: ChecksumCalculator Set Unsupported version Version %d\n", + __FUNCTION__, m_version); + return false; + } + if (m_isEncodingChecksum) { // setVersion is called in the middle of encoding checksums + LOG_CHECKSUMHELPER("%s: called between addBuffer and writeChecksum\n", + __FUNCTION__); + return false; + } + m_version = version; + LOG_CHECKSUMHELPER("%s: ChecksumCalculator Set Version %d\n", __FUNCTION__, + m_version); + return true; +} + +size_t ChecksumCalculator::checksumByteSize() const { + switch (m_version) { + case 0: + return 0; + case 1: + return sizeof(uint32_t) + sizeof(m_numWrite); + default: + return 0; + } +} + +void ChecksumCalculator::addBuffer(const void* buf, size_t packetLen) { + m_isEncodingChecksum = true; + switch (m_version) { + case 1: + m_v1BufferTotalLength += packetLen; + break; + } +} + +bool ChecksumCalculator::writeChecksum(void* outputChecksum, size_t outputChecksumLen) { + if (outputChecksumLen < checksumByteSize()) return false; + char *checksumPtr = (char *)outputChecksum; + switch (m_version) { + case 1: { // protocol v1 is to reverse the packetLen and write it at the end + uint32_t val = computeV1Checksum(); + memcpy(checksumPtr, &val, sizeof(val)); + memcpy(checksumPtr+sizeof(val), &m_numWrite, sizeof(m_numWrite)); + break; + } + } + resetChecksum(); + m_numWrite++; + return true; +} + +void ChecksumCalculator::resetChecksum() { + switch (m_version) { + case 1: + m_v1BufferTotalLength = 0; + break; + } + m_isEncodingChecksum = false; +} + +bool ChecksumCalculator::validate(const void* expectedChecksum, size_t expectedChecksumLen) { + size_t checksumSize = checksumByteSize(); + if (expectedChecksumLen != checksumSize) { + m_numRead++; + resetChecksum(); + return false; + } + // buffers for computing the checksum + unsigned char sChecksumBuffer[kMaxChecksumSize]; + switch (m_version) { + case 1: { + uint32_t val = computeV1Checksum(); + memcpy(sChecksumBuffer, &val, sizeof(val)); + memcpy(sChecksumBuffer+sizeof(val), &m_numRead, sizeof(m_numRead)); + break; + } + } + bool isValid = !memcmp(sChecksumBuffer, expectedChecksum, checksumSize); + m_numRead++; + resetChecksum(); + return isValid; +} + +uint32_t ChecksumCalculator::computeV1Checksum() { + uint32_t revLen = m_v1BufferTotalLength; + revLen = (revLen & 0xffff0000) >> 16 | (revLen & 0x0000ffff) << 16; + revLen = (revLen & 0xff00ff00) >> 8 | (revLen & 0x00ff00ff) << 8; + revLen = (revLen & 0xf0f0f0f0) >> 4 | (revLen & 0x0f0f0f0f) << 4; + revLen = (revLen & 0xcccccccc) >> 2 | (revLen & 0x33333333) << 2; + revLen = (revLen & 0xaaaaaaaa) >> 1 | (revLen & 0x55555555) << 1; + return revLen; +} diff --git a/opengl/shared/OpenglCodecCommon/ChecksumCalculator.h b/opengl/shared/OpenglCodecCommon/ChecksumCalculator.h new file mode 100644 index 0000000..4cc231a --- /dev/null +++ b/opengl/shared/OpenglCodecCommon/ChecksumCalculator.h @@ -0,0 +1,181 @@ +/* +* Copyright (C) 2016 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#pragma once + +#include <stdint.h> +#include <stdlib.h> + +// Set TRACE_CHECKSUMHELPER to 1 to debug creation/destruction of GLprotocol +// instances. +#define TRACE_CHECKSUMHELPER 0 + +#if TRACE_CHECKSUMHELPER +#define LOG_CHECKSUMHELPER(x...) fprintf(stderr, x) +#else +#define LOG_CHECKSUMHELPER(x...) +#endif + +// ChecksumCalculator adds checksum as an array of bytes to GL pipe communication, which +// size depends on the protocol version. Each pipe should use one ChecksumCalculator. +// It can: +// (1) take a list of buffers one by one and compute their checksum string, +// in this case the checksum should be as the data in those buffers are +// concatenated; +// (2) compute the checksum of the buffer list, then either write them into +// a buffer provided by user, or compare it against a checksum provided +// by user +// (3) support different checksum version in future. +// +// For backward compatibility, checksum version 0 behaves the same as there is +// no checksum (i.e., checksumByteSize returns 0, validate always returns true, +// addBuffer and writeCheckSum does nothing). +// +// Notice that to detect package lost, ChecksumCalculator also keeps track of how +// many times it generates/validates checksums, and might use it as part of the +// checksum. +// +// To evaluate checksums from a list of data buffers buf1, buf2... Please call +// addBuffer(buf1, buf1len), addBuffer(buf2, buf2len) ... in order. +// Then if the checksum needs to be encoded into a buffer, one needs to allocate +// a checksum buffer with size checksumByteSize(), and call +// writeChecksum(checksumBuffer) to write the checksum to the buffer. +// If the checksum needs to be validated against an existing one, one needs to +// call validate(existChecksum, existChecksumLen). +// +// The checksum generator and validator must be set to the same version, and +// the validator must check ALL checksums in the order they are generated, +// otherwise the validation function will return false. +// +// It is allowed to change the checksum version between calculating two +// checksums. This is designed for backward compatibility reason. +// +// Example 1, encoding and decoding: +// +// bool testChecksum(void* buf, size_t bufLen) { +// // encoding message +// ChecksumCalculator encoder; +// encoder.setVersion(1); +// encoder.addBuffer(buf, bufLen); +// std::vector<unsigned char> message(bufLen + encoder.checksumByteSize()); +// memcpy(&message[0], buf, bufLen); +// encoder.writeChecksum(&message[0] + bufLen, encoder.checksumByteSize()); +// +// // decoding message +// ChecksumCalculator decoder; +// decoder.setVersion(1); +// decoder.addBuffer(&message[0], bufLen); +// return decoder.validate(&message[0] + bufLen, decoder.checksumByteSize()); +// } +// The return value is true. +// +// Example 2, decoding will fail if the order of messages is wrong: +// +// bool testChecksumOrder(void* buf1, size_t bufLen1, +// void* buf2, size_t bufLen2) { +// // encoding messages +// ChecksumCalculator encoder; +// encoder.setVersion(1); +// +// std::vector<unsigned char> message1(bufLen1 + encoder.checksumByteSize()); +// std::vector<unsigned char> message2(bufLen2 + encoder.checksumByteSize()); +// +// encoder.addBuffer(buf1, bufLen1); +// std::vector<unsigned char> message1(bufLen1 + encoder.checksumByteSize()); +// memcpy(&message1[0], buf1, bufLen1); +// encoder.writeChecksum(&message1[0] + bufLen1, encoder.checksumByteSize()); +// +// encoder.addBuffer(buf2, bufLen2); +// std::vector<unsigned char> message2(bufLen2 + encoder.checksumByteSize()); +// memcpy(&message2[0], buf2, bufLen2); +// encoder.writeChecksum(&message2[0] + bufLen2, encoder.checksumByteSize()); +// +// // decoding messages +// ChecksumCalculator decoder; +// decoder.setVersion(1); +// decoder.addBuffer(&message2[0], bufLen2); +// // returns false because the decoding order is not consistent with +// // encoding order +// if (!decoder.validate(&message2[0]+bufLen2, decoder.checksumByteSize())) { +// return false; +// } +// +// decoder.addBuffer(&message1[0], bufLen1); +// if (!decoder.validate(&message1[0]+bufLen1, decoder.checksumByteSize())) { +// return false; +// } +// +// return false; +// } + +class ChecksumCalculator { +public: + // Get and set current checksum version + uint32_t getVersion() const { return m_version; } + // Call setVersion to set a checksum version. It should be called before + // addBuffer(), writeChecksum() and validate(). And it should be called + // exact once per rendering thread if both host and guest support checksum. + // It won't be called if either host or guest does not support checksum. + bool setVersion(uint32_t version); + + // Maximum supported checksum version + static uint32_t getMaxVersion(); + // A version string that looks like "ANDROID_EMU_CHECKSUM_HELPER_v1" + // Used multiple times when the guest queries the maximum supported version + // from the host. + // The library owns the returned pointer. The returned pointer will be + // deconstructed when unloading library. + static const char* getMaxVersionStr(); + static const char* getMaxVersionStrPrefix(); + + // Size of checksum in the current version + size_t checksumByteSize() const; + + // Update the current checksum value from the data + // at |buf| of |bufLen| bytes. Once all buffers + // have been added, call writeChecksum() to store + // the final checksum value and reset its state. + void addBuffer(const void* buf, size_t bufLen); + // Write the checksum from the list of buffers to outputChecksum + // Will reset the list of buffers by calling resetChecksum. + // Return false if the buffer is not long enough + // Please query buffer size from checksumByteSize() + bool writeChecksum(void* outputChecksum, size_t outputChecksumLen); + // Restore the states for computing checksums. + // Automatically called at the end of writeChecksum and validate. + // Can also be used to abandon the current checksum being calculated. + // Notes: it doesn't update the internal read / write counter + void resetChecksum(); + + // Calculate the checksum from the list of buffers and + // compare it with the checksum encoded in expectedChecksum + // Will reset the list of buffers by calling resetChecksum. + bool validate(const void* expectedChecksum, size_t expectedChecksumLen); +protected: + uint32_t m_version = 0; + // A temporary state used to compute the total length of a list of buffers, + // if addBuffer is called. + uint32_t m_numRead = 0; + uint32_t m_numWrite = 0; + // m_isEncodingChecksum is true when between addBuffer and writeChecksum + bool m_isEncodingChecksum = false; +private: + // Compute a 32bit checksum + // Used in protocol v1 + uint32_t computeV1Checksum(); + // The buffer used in protocol version 1 to compute checksum. + uint32_t m_v1BufferTotalLength = 0; +}; diff --git a/opengl/shared/OpenglCodecCommon/ErrorLog.h b/opengl/shared/OpenglCodecCommon/ErrorLog.h index 6f41fd7..d2388e6 100644 --- a/opengl/shared/OpenglCodecCommon/ErrorLog.h +++ b/opengl/shared/OpenglCodecCommon/ErrorLog.h @@ -16,7 +16,7 @@ #ifndef _ERROR_LOG_H_ #define _ERROR_LOG_H_ -#if (HAVE_ANDROID_OS == 1) +#if defined(__ANDROID__) # include <cutils/log.h> # define ERR(...) ALOGE(__VA_ARGS__) # ifdef EMUGL_DEBUG diff --git a/opengl/shared/OpenglCodecCommon/GLClientState.cpp b/opengl/shared/OpenglCodecCommon/GLClientState.cpp index 0826a14..638eb4c 100644 --- a/opengl/shared/OpenglCodecCommon/GLClientState.cpp +++ b/opengl/shared/OpenglCodecCommon/GLClientState.cpp @@ -65,6 +65,8 @@ GLClientState::GLClientState(int nLocations) m_tex.textures = NULL; m_tex.numTextures = 0; m_tex.allocTextures = 0; + + m_maxVertexAttribsDirty = true; } GLClientState::~GLClientState() @@ -92,7 +94,7 @@ void GLClientState::setState(int location, int size, GLenum type, GLboolean norm m_states[location].stride = stride; m_states[location].data = (void*)data; m_states[location].bufferObject = m_currentArrayVbo; - m_states[location].elementSize = glSizeof(type) * size; + m_states[location].elementSize = size ? (glSizeof(type) * size) : 0; m_states[location].normalized = normalized; } @@ -247,7 +249,7 @@ GLenum GLClientState::setActiveTextureUnit(GLenum texture) { GLuint unit = texture - GL_TEXTURE0; if (unit >= MAX_TEXTURE_UNITS) { - return GL_INVALID_OPERATION; + return GL_INVALID_ENUM; } m_tex.activeUnit = &m_tex.unit[unit]; return GL_NO_ERROR; diff --git a/opengl/shared/OpenglCodecCommon/GLClientState.h b/opengl/shared/OpenglCodecCommon/GLClientState.h index 09ee571..8e95c37 100644 --- a/opengl/shared/OpenglCodecCommon/GLClientState.h +++ b/opengl/shared/OpenglCodecCommon/GLClientState.h @@ -90,6 +90,10 @@ public: int getLocation(GLenum loc); void setActiveTexture(int texUnit) {m_activeTexture = texUnit; }; int getActiveTexture() const { return m_activeTexture; } + void setMaxVertexAttribs(int val) { + m_maxVertexAttribs = val; + m_maxVertexAttribsDirty = false; + } void unBindBuffer(GLuint id) { @@ -184,6 +188,8 @@ public: private: PixelStoreState m_pixelStore; VertexAttribState *m_states; + int m_maxVertexAttribs; + bool m_maxVertexAttribsDirty; int m_nLocations; GLuint m_currentArrayVbo; GLuint m_currentIndexVbo; @@ -439,6 +445,15 @@ public: isClientStateParam = true; break; } + case GL_MAX_VERTEX_ATTRIBS: { + if (m_maxVertexAttribsDirty) { + isClientStateParam = false; + } else { + *ptr = m_maxVertexAttribs; + isClientStateParam = true; + } + break; + } } return isClientStateParam; } diff --git a/opengl/shared/OpenglCodecCommon/GLDecoderContextData.h b/opengl/shared/OpenglCodecCommon/GLDecoderContextData.h deleted file mode 100644 index 23785ae..0000000 --- a/opengl/shared/OpenglCodecCommon/GLDecoderContextData.h +++ /dev/null @@ -1,69 +0,0 @@ -/* -* Copyright (C) 2011 The Android Open Source Project -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -#ifndef _GL_DECODER_CONTEXT_DATA_H_ -#define _GL_DECODER_CONTEXT_DATA_H_ - -#include <assert.h> -#include <string.h> -#include "FixedBuffer.h" -#include "codec_defs.h" - -class GLDecoderContextData { -public: - typedef enum { - VERTEX_LOCATION = 0, - NORMAL_LOCATION = 1, - COLOR_LOCATION = 2, - POINTSIZE_LOCATION = 3, - TEXCOORD0_LOCATION = 4, - TEXCOORD1_LOCATION = 5, - TEXCOORD2_LOCATION = 6, - TEXCOORD3_LOCATION = 7, - TEXCOORD4_LOCATION = 8, - TEXCOORD5_LOCATION = 9, - TEXCOORD6_LOCATION = 10, - TEXCOORD7_LOCATION = 11, - MATRIXINDEX_LOCATION = 12, - WEIGHT_LOCATION = 13, - LAST_LOCATION = 14 - } PointerDataLocation; - - GLDecoderContextData(int nLocations = CODEC_MAX_VERTEX_ATTRIBUTES) : - m_nLocations(nLocations) - { - m_pointerData = new FixedBuffer[m_nLocations]; - } - - ~GLDecoderContextData() { - delete [] m_pointerData; - } - - void storePointerData(unsigned int loc, void *data, size_t len) { - - assert(loc < m_nLocations); - m_pointerData[loc].alloc(len); - memcpy(m_pointerData[loc].ptr(), data, len); - } - void *pointerData(unsigned int loc) { - assert(loc < m_nLocations); - return m_pointerData[loc].ptr(); - } -private: - FixedBuffer *m_pointerData; - int m_nLocations; -}; - -#endif diff --git a/opengl/shared/OpenglCodecCommon/GLErrorLog.h b/opengl/shared/OpenglCodecCommon/GLErrorLog.h deleted file mode 100644 index 5654aea..0000000 --- a/opengl/shared/OpenglCodecCommon/GLErrorLog.h +++ /dev/null @@ -1,34 +0,0 @@ -/* -* Copyright 2011 The Android Open Source Project -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -#ifndef __GL_ERROR_LOG_H__ -#define __GL_ERROR_LOG_H__ - -#include "ErrorLog.h" - -#ifdef CHECK_GL_ERROR -void dbg(){} -#define GET_GL_ERROR(gl) \ - { \ - int err = gl.glGetError(); \ - if (err) { dbg(); ERR("Error: 0x%X in %s (%s:%d)\n", err, __FUNCTION__, __FILE__, __LINE__); } \ - } - -#else -#define GET_GL_ERROR(gl) -#endif - -#endif //__GL_ERROR_LOG_H__ diff --git a/opengl/shared/OpenglCodecCommon/TimeUtils.cpp b/opengl/shared/OpenglCodecCommon/TimeUtils.cpp deleted file mode 100644 index 50aeb03..0000000 --- a/opengl/shared/OpenglCodecCommon/TimeUtils.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* -* Copyright (C) 2011 The Android Open Source Project -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -#include "TimeUtils.h" - -#ifdef _WIN32 -#include <windows.h> -#include <time.h> -#include <stdio.h> -#elif defined(__linux__) -#include <stdlib.h> -#include <sys/time.h> -#include <time.h> -#include <unistd.h> -#else -#include <sys/time.h> -#include <unistd.h> -#endif - -long long GetCurrentTimeMS() -{ -#ifdef _WIN32 - static LARGE_INTEGER freq; - static bool bNotInit = true; - if ( bNotInit ) { - bNotInit = (QueryPerformanceFrequency( &freq ) == FALSE); - } - LARGE_INTEGER currVal; - QueryPerformanceCounter( &currVal ); - - return currVal.QuadPart / (freq.QuadPart / 1000); - -#elif defined(__linux__) - - struct timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - long long iDiff = (now.tv_sec * 1000LL) + now.tv_nsec/1000000LL; - return iDiff; - -#else /* Others, e.g. OS X */ - - struct timeval now; - gettimeofday(&now, NULL); - long long iDiff = (now.tv_sec * 1000LL) + now.tv_usec/1000LL; - return iDiff; - -#endif -} - -void TimeSleepMS(int p_mili) -{ -#ifdef _WIN32 - Sleep(p_mili); -#else - usleep(p_mili * 1000); -#endif -} diff --git a/opengl/shared/OpenglCodecCommon/UnixStream.cpp b/opengl/shared/OpenglCodecCommon/UnixStream.cpp deleted file mode 100644 index 8e463a3..0000000 --- a/opengl/shared/OpenglCodecCommon/UnixStream.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/* -* Copyright (C) 2011 The Android Open Source Project -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -#include "UnixStream.h" -#include <cutils/sockets.h> -#include <errno.h> -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <string.h> - -#include <netinet/in.h> -#include <netinet/tcp.h> -#include <sys/un.h> -#include <sys/stat.h> - -/* Not all systems define PATH_MAX, those who don't generally don't - * have a limit on the maximum path size, so use a value that is - * large enough for our very limited needs. - */ -#ifndef PATH_MAX -#define PATH_MAX 128 -#endif - -UnixStream::UnixStream(size_t bufSize) : - SocketStream(bufSize) -{ -} - -UnixStream::UnixStream(int sock, size_t bufSize) : - SocketStream(sock, bufSize) -{ -} - -/* Initialize a sockaddr_un with the appropriate values corresponding - * to a given 'virtual port'. Returns 0 on success, -1 on error. - */ -static int -make_unix_path(char *path, size_t pathlen, int port_number) -{ - char tmp[PATH_MAX]; // temp directory - int ret = 0; - - // First, create user-specific temp directory if needed - const char* user = getenv("USER"); - if (user != NULL) { - struct stat st; - snprintf(tmp, sizeof(tmp), "/tmp/android-%s", user); - do { - ret = ::lstat(tmp, &st); - } while (ret < 0 && errno == EINTR); - - if (ret < 0 && errno == ENOENT) { - do { - ret = ::mkdir(tmp, 0766); - } while (ret < 0 && errno == EINTR); - if (ret < 0) { - ERR("Could not create temp directory: %s", tmp); - user = NULL; // will fall-back to /tmp - } - } - else if (ret < 0) { - user = NULL; // will fallback to /tmp - } - } - - if (user == NULL) { // fallback to /tmp in case of error - snprintf(tmp, sizeof(tmp), "/tmp"); - } - - // Now, initialize it properly - snprintf(path, pathlen, "%s/qemu-gles-%d", tmp, port_number); - return 0; -} - - -int UnixStream::listen(unsigned short port) -{ - char path[PATH_MAX]; - - if (make_unix_path(path, sizeof(path), port) < 0) { - return -1; - } - - m_sock = socket_local_server(path, ANDROID_SOCKET_NAMESPACE_FILESYSTEM, SOCK_STREAM); - if (!valid()) return int(ERR_INVALID_SOCKET); - - return 0; -} - -SocketStream * UnixStream::accept() -{ - int clientSock = -1; - - while (true) { - struct sockaddr_un addr; - socklen_t len = sizeof(addr); - clientSock = ::accept(m_sock, (sockaddr *)&addr, &len); - - if (clientSock < 0 && errno == EINTR) { - continue; - } - break; - } - - UnixStream *clientStream = NULL; - - if (clientSock >= 0) { - clientStream = new UnixStream(clientSock, m_bufsize); - } - return clientStream; -} - -int UnixStream::connect(unsigned short port) -{ - char path[PATH_MAX]; - - if (make_unix_path(path, sizeof(path), port) < 0) - return -1; - - m_sock = socket_local_client(path, ANDROID_SOCKET_NAMESPACE_FILESYSTEM, SOCK_STREAM); - if (!valid()) return -1; - - return 0; -} diff --git a/opengl/shared/OpenglCodecCommon/UnixStream.h b/opengl/shared/OpenglCodecCommon/UnixStream.h deleted file mode 100644 index c184b19..0000000 --- a/opengl/shared/OpenglCodecCommon/UnixStream.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -* Copyright (C) 2011 The Android Open Source Project -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -#ifndef __UNIX_STREAM_H -#define __UNIX_STREAM_H - -#include "SocketStream.h" - -class UnixStream : public SocketStream { -public: - explicit UnixStream(size_t bufsize = 10000); - virtual int listen(unsigned short port); - virtual SocketStream *accept(); - virtual int connect(unsigned short port); -private: - UnixStream(int sock, size_t bufSize); -}; - -#endif diff --git a/opengl/shared/OpenglCodecCommon/Win32PipeStream.cpp b/opengl/shared/OpenglCodecCommon/Win32PipeStream.cpp deleted file mode 100644 index e1a0b9b..0000000 --- a/opengl/shared/OpenglCodecCommon/Win32PipeStream.cpp +++ /dev/null @@ -1,239 +0,0 @@ -/* -* Copyright (C) 2011 The Android Open Source Project -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -#include "Win32PipeStream.h" - -#include <errno.h> -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <string.h> -#include <windows.h> - -#ifndef _WIN32 -#error ONLY BUILD THIS SOURCE FILE FOR WINDOWS! -#endif - -/* The official documentation states that the name of a given named - * pipe cannot be more than 256 characters long. - */ -#define NAMED_PIPE_MAX 256 - -Win32PipeStream::Win32PipeStream(size_t bufSize) : - SocketStream(bufSize), - m_pipe(INVALID_HANDLE_VALUE) -{ -} - -Win32PipeStream::Win32PipeStream(HANDLE pipe, size_t bufSize) : - SocketStream(-1, bufSize), - m_pipe(pipe) -{ -} - -Win32PipeStream::~Win32PipeStream() -{ - if (m_pipe != INVALID_HANDLE_VALUE) { - CloseHandle(m_pipe); - m_pipe = INVALID_HANDLE_VALUE; - } -} - -/* Initialize the pipe name corresponding to a given port - */ -static void -make_pipe_name(char *path, size_t pathlen, int port_number) -{ - snprintf(path, pathlen, "\\\\.\\pipe\\qemu-gles-%d", port_number); -} - - -/* Technical note: Named pipes work differently from BSD Sockets. - * One does not create/bind a pipe, and collect a new handle each - * time a client connects with accept(). - * - * Instead, the server creates a new pipe instance each time it wants - * to get a new client connection, then calls ConnectNamedPipe() to - * wait for a connection. - * - * So listen() is a no-op, and accept() really creates the pipe handle. - * - * Also, connect() must create a pipe handle with CreateFile() and - * wait for a server instance with WaitNamedPipe() - */ -int Win32PipeStream::listen(unsigned short port) -{ - // just save the port number for accept() - m_port = port; - return 0; -} - -SocketStream * Win32PipeStream::accept() -{ - char path[NAMED_PIPE_MAX+1]; - SocketStream* clientStream; - HANDLE pipe; - - make_pipe_name(path, sizeof(path), m_port); - - pipe = ::CreateNamedPipe( - path, // pipe name - PIPE_ACCESS_DUPLEX, // read-write access - PIPE_TYPE_BYTE | // byte-oriented writes - PIPE_READMODE_BYTE | // byte-oriented reads - PIPE_WAIT, // blocking operations - PIPE_UNLIMITED_INSTANCES, // no limit on clients - 4096, // input buffer size - 4096, // output buffer size - 0, // client time-out - NULL); // default security attributes - - if (pipe == INVALID_HANDLE_VALUE) { - ERR("%s: CreateNamedPipe failed %d\n", __FUNCTION__, (int)GetLastError()); - return NULL; - } - - // Stupid Win32 API design: If a client is already connected, then - // ConnectNamedPipe will return 0, and GetLastError() will return - // ERROR_PIPE_CONNECTED. This is not an error! It just means that the - // function didn't have to wait. - // - if (::ConnectNamedPipe(pipe, NULL) == 0 && GetLastError() != ERROR_PIPE_CONNECTED) { - ERR("%s: ConnectNamedPipe failed: %d\n", __FUNCTION__, (int)GetLastError()); - CloseHandle(pipe); - return NULL; - } - - clientStream = new Win32PipeStream(pipe, m_bufsize); - return clientStream; -} - -int Win32PipeStream::connect(unsigned short port) -{ - char path[NAMED_PIPE_MAX+1]; - HANDLE pipe; - int tries = 10; - - make_pipe_name(path, sizeof(path), port); - - /* We're going to loop in order to wait for the pipe server to - * be setup properly. - */ - for (; tries > 0; tries--) { - pipe = ::CreateFile( - path, // pipe name - GENERIC_READ | GENERIC_WRITE, // read & write - 0, // no sharing - NULL, // default security attrs - OPEN_EXISTING, // open existing pipe - 0, // default attributes - NULL); // no template file - - /* If we have a valid pipe handle, break from the loop */ - if (pipe != INVALID_HANDLE_VALUE) { - break; - } - - /* We can get here if the pipe is busy, i.e. if the server hasn't - * create a new pipe instance to service our request. In which case - * GetLastError() will return ERROR_PIPE_BUSY. - * - * If so, then use WaitNamedPipe() to wait for a decent time - * to try again. - */ - if (GetLastError() != ERROR_PIPE_BUSY) { - /* Not ERROR_PIPE_BUSY */ - ERR("%s: CreateFile failed: %d\n", __FUNCTION__, (int)GetLastError()); - errno = EINVAL; - return -1; - } - - /* Wait for 5 seconds */ - if ( !WaitNamedPipe(path, 5000) ) { - ERR("%s: WaitNamedPipe failed: %d\n", __FUNCTION__, (int)GetLastError()); - errno = EINVAL; - return -1; - } - } - - m_pipe = pipe; - return 0; -} - -/* Special buffer methods, since we can't use socket functions here */ - -int Win32PipeStream::commitBuffer(size_t size) -{ - if (m_pipe == INVALID_HANDLE_VALUE) - return -1; - - size_t res = size; - int retval = 0; - - while (res > 0) { - DWORD written; - if (! ::WriteFile(m_pipe, (const char *)m_buf + (size - res), res, &written, NULL)) { - retval = -1; - ERR("%s: failed: %d\n", __FUNCTION__, (int)GetLastError()); - break; - } - res -= written; - } - return retval; -} - -const unsigned char *Win32PipeStream::readFully(void *buf, size_t len) -{ - const unsigned char* ret = NULL; - - if (m_pipe == INVALID_HANDLE_VALUE) - return NULL; - - if (!buf) { - return NULL; // do not allow NULL buf in that implementation - } - - size_t res = len; - while (res > 0) { - DWORD readcount = 0; - if (! ::ReadFile(m_pipe, (char *)buf + (len - res), res, &readcount, NULL) || readcount == 0) { - errno = (int)GetLastError(); - return NULL; - } - res -= readcount; - } - return (const unsigned char *)buf; -} - -const unsigned char *Win32PipeStream::read( void *buf, size_t *inout_len) -{ - size_t len = *inout_len; - DWORD readcount; - - if (m_pipe == INVALID_HANDLE_VALUE) - return NULL; - - if (!buf) { - return NULL; // do not allow NULL buf in that implementation - } - - if (!::ReadFile(m_pipe, (char *)buf, len, &readcount, NULL)) { - errno = (int)GetLastError(); - return NULL; - } - - *inout_len = (size_t)readcount; - return (const unsigned char *)buf; -} diff --git a/opengl/shared/OpenglCodecCommon/Win32PipeStream.h b/opengl/shared/OpenglCodecCommon/Win32PipeStream.h deleted file mode 100644 index 4114545..0000000 --- a/opengl/shared/OpenglCodecCommon/Win32PipeStream.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -* Copyright (C) 2011 The Android Open Source Project -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -#ifndef __WIN32_PIPE_STREAM_H -#define __WIN32_PIPE_STREAM_H - -#include "SocketStream.h" -#include <windows.h> - -class Win32PipeStream : public SocketStream { -public: - explicit Win32PipeStream(size_t bufsize = 10000); - virtual ~Win32PipeStream(); - virtual int listen(unsigned short port); - virtual SocketStream *accept(); - virtual int connect(unsigned short port); - - virtual int commitBuffer(size_t size); - virtual const unsigned char *readFully(void *buf, size_t len); - virtual const unsigned char *read(void *buf, size_t *inout_len); - -private: - Win32PipeStream(HANDLE pipe, size_t bufSize); - HANDLE m_pipe; - int m_port; -}; - - -#endif diff --git a/opengl/shared/OpenglCodecCommon/glUtils.cpp b/opengl/shared/OpenglCodecCommon/glUtils.cpp index 4b7fc89..a61f76f 100644 --- a/opengl/shared/OpenglCodecCommon/glUtils.cpp +++ b/opengl/shared/OpenglCodecCommon/glUtils.cpp @@ -31,6 +31,7 @@ size_t glSizeof(GLenum type) case GL_HALF_FLOAT_OES: retval = 2; break; + case GL_UNSIGNED_INT: case GL_INT: case GL_FLOAT: case GL_FIXED: @@ -109,6 +110,7 @@ size_t glUtilsParamSize(GLenum param) case GL_POINT_SIZE_MIN: case GL_POINT_SIZE_MAX: case GL_POINT_FADE_THRESHOLD_SIZE: + case GL_CULL_FACE: case GL_CULL_FACE_MODE: case GL_FRONT_FACE: case GL_SHADE_MODEL: @@ -126,6 +128,7 @@ size_t glUtilsParamSize(GLenum param) case GL_ALPHA_TEST_FUNC: case GL_ALPHA_TEST_REF: case GL_ALPHA_TEST: + case GL_DITHER: case GL_BLEND_DST: case GL_BLEND_SRC: case GL_BLEND: @@ -187,6 +190,7 @@ size_t glUtilsParamSize(GLenum param) case GL_SAMPLE_COVERAGE_INVERT: case GL_SAMPLE_COVERAGE_VALUE: case GL_SAMPLES: + case GL_MAX_SAMPLES_EXT: case GL_STENCIL_BITS: case GL_STENCIL_CLEAR_VALUE: case GL_STENCIL_FUNC: diff --git a/opengl/shared/OpenglCodecCommon/gl_base_types.h b/opengl/shared/OpenglCodecCommon/gl_base_types.h index d7bdef8..d7ecf95 100644 --- a/opengl/shared/OpenglCodecCommon/gl_base_types.h +++ b/opengl/shared/OpenglCodecCommon/gl_base_types.h @@ -57,6 +57,7 @@ typedef void * GLeglImageOES; #define GL_STACK_OVERFLOW 0x0503 #define GL_STACK_UNDERFLOW 0x0504 #define GL_OUT_OF_MEMORY 0x0505 +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 #endif #endif diff --git a/opengl/system/GLESv1/gl.cpp b/opengl/system/GLESv1/gl.cpp index a7950eb..8aaf347 100644 --- a/opengl/system/GLESv1/gl.cpp +++ b/opengl/system/GLESv1/gl.cpp @@ -22,6 +22,7 @@ #include "ErrorLog.h" #include "gralloc_cb.h" #include "ThreadInfo.h" +#include "EGLImage.h" //XXX: fix this macro to get the context from fast tls path @@ -48,31 +49,41 @@ static EGLClient_glesInterface * s_gl = NULL; } //GL extensions -void glEGLImageTargetTexture2DOES(void * self, GLenum target, GLeglImageOES image) +void glEGLImageTargetTexture2DOES(void * self, GLenum target, GLeglImageOES img) { (void)self; - DBG("glEGLImageTargetTexture2DOES v1 target=%#x image=%p", target, image); - //TODO: check error - we don't have a way to set gl error - android_native_buffer_t* native_buffer = (android_native_buffer_t*)image; + DBG("glEGLImageTargetTexture2DOES v1 target=%#x img=%p", target, img); - if (native_buffer->common.magic != ANDROID_NATIVE_BUFFER_MAGIC) { - return; - } + EGLImage_t *image = (EGLImage_t*)img; - if (native_buffer->common.version != sizeof(android_native_buffer_t)) { - return; - } + if (image->target == EGL_NATIVE_BUFFER_ANDROID) { + //TODO: check error - we don't have a way to set gl error + android_native_buffer_t* native_buffer = image->native_buffer; - GET_CONTEXT; - DEFINE_AND_VALIDATE_HOST_CONNECTION(); + if (native_buffer->common.magic != ANDROID_NATIVE_BUFFER_MAGIC) { + return; + } - ctx->override2DTextureTarget(target); - rcEnc->rcBindTexture(rcEnc, - ((cb_handle_t *)(native_buffer->handle))->hostHandle); - ctx->restore2DTextureTarget(); + if (native_buffer->common.version != sizeof(android_native_buffer_t)) { + return; + } - return; + GET_CONTEXT; + DEFINE_AND_VALIDATE_HOST_CONNECTION(); + + ctx->override2DTextureTarget(target); + rcEnc->rcBindTexture(rcEnc, + ((cb_handle_t *)(native_buffer->handle))->hostHandle); + ctx->restore2DTextureTarget(); + } + else if (image->target == EGL_GL_TEXTURE_2D_KHR) { + GET_CONTEXT; + ctx->override2DTextureTarget(target); + GLeglImageOES hostImage = reinterpret_cast<GLeglImageOES>((intptr_t)image->host_egl_image); + ctx->m_glEGLImageTargetTexture2DOES_enc(self, target, hostImage); + ctx->restore2DTextureTarget(); + } } void glEGLImageTargetRenderbufferStorageOES(void *self, GLenum target, GLeglImageOES image) @@ -129,6 +140,7 @@ const GLubyte *my_glGetString (void *self, GLenum name) void init() { GET_CONTEXT; + ctx->m_glEGLImageTargetTexture2DOES_enc = ctx->glEGLImageTargetTexture2DOES; ctx->glEGLImageTargetTexture2DOES = &glEGLImageTargetTexture2DOES; ctx->glEGLImageTargetRenderbufferStorageOES = &glEGLImageTargetRenderbufferStorageOES; ctx->glGetString = &my_glGetString; diff --git a/opengl/system/GLESv1_enc/GLEncoder.cpp b/opengl/system/GLESv1_enc/GLEncoder.cpp index d6f45a8..8556c27 100644 --- a/opengl/system/GLESv1_enc/GLEncoder.cpp +++ b/opengl/system/GLESv1_enc/GLEncoder.cpp @@ -26,7 +26,7 @@ static GLubyte *gVendorString= (GLubyte *) "Android"; static GLubyte *gRendererString= (GLubyte *) "Android HW-GLES 1.0"; static GLubyte *gVersionString= (GLubyte *) "OpenGL ES-CM 1.0"; -static GLubyte *gExtensionsString= (GLubyte *) ""; // no extensions at this point; +static GLubyte *gExtensionsString= (GLubyte *) "GL_OES_EGL_image_external "; #define SET_ERROR_IF(condition,err) if((condition)) { \ ALOGE("%s:%s:%d GL error 0x%x\n", __FILE__, __FUNCTION__, __LINE__, err); \ @@ -421,6 +421,7 @@ void GLEncoder::sendVertexData(unsigned int first, unsigned int count) if (stride == 0) stride = state->elementSize; int firstIndex = stride * first; + this->m_glBindBuffer_enc(this, GL_ARRAY_BUFFER, state->bufferObject); if (state->bufferObject == 0) { switch(i) { @@ -461,7 +462,6 @@ void GLEncoder::sendVertexData(unsigned int first, unsigned int count) break; } } else { - this->m_glBindBuffer_enc(this, GL_ARRAY_BUFFER, state->bufferObject); switch(i) { case GLClientState::VERTEX_LOCATION: @@ -500,8 +500,8 @@ void GLEncoder::sendVertexData(unsigned int first, unsigned int count) (uintptr_t)state->data+firstIndex); break; } - this->m_glBindBuffer_enc(this, GL_ARRAY_BUFFER, m_state->currentArrayVbo()); } + this->m_glBindBuffer_enc(this, GL_ARRAY_BUFFER, m_state->currentArrayVbo()); } else { this->m_glDisableClientState_enc(this, state->glConst); } @@ -512,6 +512,24 @@ void GLEncoder::s_glDrawArrays(void *self, GLenum mode, GLint first, GLsizei cou { GLEncoder *ctx = (GLEncoder *)self; + bool has_arrays = false; + for (int i = 0; i < GLClientState::LAST_LOCATION; i++) { + const GLClientState::VertexAttribState *state = ctx->m_state->getState(i); + if (state->enabled) { + if (state->bufferObject || state->data) { + has_arrays = true; + } else { + ALOGE("glDrawArrays: a vertex attribute array is enabled with no data bound\n"); + ctx->setError(GL_INVALID_OPERATION); + return; + } + } + } + if (!has_arrays) { + ALOGE("glDrawArrays: no data bound to the command - ignoring\n"); + return; + } + ctx->sendVertexData(first, count); ctx->m_glDrawArrays_enc(ctx, mode, /*first*/ 0, count); } @@ -531,8 +549,12 @@ void GLEncoder::s_glDrawElements(void *self, GLenum mode, GLsizei count, GLenum if (state->enabled) { if (state->bufferObject != 0) { has_indirect_arrays = true; - } else { + } else if (state->data) { has_immediate_arrays = true; + } else { + ALOGE("glDrawElements: a vertex attribute array is enabled with no data bound\n"); + ctx->setError(GL_INVALID_OPERATION); + return; } } } @@ -580,6 +602,16 @@ void GLEncoder::s_glDrawElements(void *self, GLenum mode, GLsizei count, GLenum count, -minIndex); } break; + case GL_INT: + case GL_UNSIGNED_INT: + GLUtils::minmax<unsigned int>((unsigned int *)indices, count, &minIndex, &maxIndex); + if (minIndex != 0) { + adjustedIndices = ctx->m_fixedBuffer.alloc(glSizeof(type) * count); + GLUtils::shiftIndices<unsigned int>((unsigned int *)indices, + (unsigned int *)adjustedIndices, + count, -minIndex); + } + break; default: ALOGE("unsupported index buffer type %d\n", type); } @@ -918,7 +950,8 @@ void GLEncoder::restore2DTextureTarget() m_state->getBoundTexture(priorityTarget)); } -GLEncoder::GLEncoder(IOStream *stream) : gl_encoder_context_t(stream) +GLEncoder::GLEncoder(IOStream *stream, ChecksumCalculator *protocol) + : gl_encoder_context_t(stream, protocol) { m_initialized = false; m_state = NULL; diff --git a/opengl/system/GLESv1_enc/GLEncoder.h b/opengl/system/GLESv1_enc/GLEncoder.h index 3c794f2..f6d4b6a 100644 --- a/opengl/system/GLESv1_enc/GLEncoder.h +++ b/opengl/system/GLESv1_enc/GLEncoder.h @@ -20,11 +20,12 @@ #include "GLClientState.h" #include "GLSharedGroup.h" #include "FixedBuffer.h" +#include "ChecksumCalculator.h" class GLEncoder : public gl_encoder_context_t { public: - GLEncoder(IOStream *stream); + GLEncoder(IOStream *stream, ChecksumCalculator* protocol); virtual ~GLEncoder(); void setClientState(GLClientState *state) { m_state = state; @@ -145,5 +146,9 @@ private: static void s_glTexParameterx(void* self, GLenum target, GLenum pname, GLfixed param); static void s_glTexParameteriv(void* self, GLenum target, GLenum pname, const GLint* params); static void s_glTexParameterxv(void* self, GLenum target, GLenum pname, const GLfixed* params); + +public: + glEGLImageTargetTexture2DOES_client_proc_t m_glEGLImageTargetTexture2DOES_enc; + }; #endif diff --git a/opengl/system/GLESv1_enc/GLEncoderUtils.h b/opengl/system/GLESv1_enc/GLEncoderUtils.h index 05cc9e1..88d989f 100644 --- a/opengl/system/GLESv1_enc/GLEncoderUtils.h +++ b/opengl/system/GLESv1_enc/GLEncoderUtils.h @@ -14,7 +14,7 @@ * limitations under the License. */ #ifndef GL_ENCODER_UTILS_H -#define GL_ENCLODER_UTILS_H +#define GL_ENCODER_UTILS_H namespace glesv1_enc { size_t pixelDataSize(void *self, GLsizei width, GLsizei height, GLenum format, GLenum type, int pack); diff --git a/opengl/system/GLESv1_enc/gl_client_context.h b/opengl/system/GLESv1_enc/gl_client_context.h index 35fb27a..8074095 100644 --- a/opengl/system/GLESv1_enc/gl_client_context.h +++ b/opengl/system/GLESv1_enc/gl_client_context.h @@ -5,6 +5,8 @@ #include "gl_client_proc.h" +#include "gl_types.h" + struct gl_client_context_t { diff --git a/opengl/system/GLESv1_enc/gl_enc.cpp b/opengl/system/GLESv1_enc/gl_enc.cpp index 61c0cee..6206cce 100644 --- a/opengl/system/GLESv1_enc/gl_enc.cpp +++ b/opengl/system/GLESv1_enc/gl_enc.cpp @@ -2,6 +2,7 @@ // generated by 'emugen' +#include <memory> #include <string.h> #include "gl_opcodes.h" @@ -22,15 +23,25 @@ void glAlphaFunc_enc(void *self , GLenum func, GLclampf ref) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glAlphaFunc;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &func, 4); ptr += 4; memcpy(ptr, &ref, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glClearColor_enc(void *self , GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) @@ -38,17 +49,27 @@ void glClearColor_enc(void *self , GLclampf red, GLclampf green, GLclampf blue, gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClearColor;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &red, 4); ptr += 4; memcpy(ptr, &green, 4); ptr += 4; memcpy(ptr, &blue, 4); ptr += 4; memcpy(ptr, &alpha, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glClearDepthf_enc(void *self , GLclampf depth) @@ -56,14 +77,24 @@ void glClearDepthf_enc(void *self , GLclampf depth) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClearDepthf;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &depth, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glClipPlanef_enc(void *self , GLenum plane, const GLfloat* equation) @@ -71,17 +102,27 @@ void glClipPlanef_enc(void *self , GLenum plane, const GLfloat* equation) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_equation = (4 * sizeof(float)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_equation + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_equation + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClipPlanef;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &plane, 4); ptr += 4; *(unsigned int *)(ptr) = __size_equation; ptr += 4; memcpy(ptr, equation, __size_equation);ptr += __size_equation; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glColor4f_enc(void *self , GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) @@ -89,17 +130,27 @@ void glColor4f_enc(void *self , GLfloat red, GLfloat green, GLfloat blue, GLfloa gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glColor4f;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &red, 4); ptr += 4; memcpy(ptr, &green, 4); ptr += 4; memcpy(ptr, &blue, 4); ptr += 4; memcpy(ptr, &alpha, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDepthRangef_enc(void *self , GLclampf zNear, GLclampf zFar) @@ -107,15 +158,25 @@ void glDepthRangef_enc(void *self , GLclampf zNear, GLclampf zFar) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDepthRangef;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &zNear, 4); ptr += 4; memcpy(ptr, &zFar, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glFogf_enc(void *self , GLenum pname, GLfloat param) @@ -123,15 +184,25 @@ void glFogf_enc(void *self , GLenum pname, GLfloat param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFogf;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glFogfv_enc(void *self , GLenum pname, const GLfloat* params) @@ -139,17 +210,27 @@ void glFogfv_enc(void *self , GLenum pname, const GLfloat* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFogfv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glFrustumf_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) @@ -157,12 +238,18 @@ void glFrustumf_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, GL gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFrustumf;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &left, 4); ptr += 4; memcpy(ptr, &right, 4); ptr += 4; @@ -170,6 +257,10 @@ void glFrustumf_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, GL memcpy(ptr, &top, 4); ptr += 4; memcpy(ptr, &zNear, 4); ptr += 4; memcpy(ptr, &zFar, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGetClipPlanef_enc(void *self , GLenum pname, GLfloat* eqn) @@ -177,17 +268,36 @@ void glGetClipPlanef_enc(void *self , GLenum pname, GLfloat* eqn) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_eqn = (4 * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_eqn + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_eqn + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetClipPlanef;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_eqn; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(eqn, __size_eqn); + if (useChecksum) checksumCalculator->addBuffer(eqn, __size_eqn); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetClipPlanef: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetFloatv_enc(void *self , GLenum pname, GLfloat* params) @@ -195,17 +305,36 @@ void glGetFloatv_enc(void *self , GLenum pname, GLfloat* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetFloatv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetFloatv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetLightfv_enc(void *self , GLenum light, GLenum pname, GLfloat* params) @@ -213,18 +342,37 @@ void glGetLightfv_enc(void *self , GLenum light, GLenum pname, GLfloat* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetLightfv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &light, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetLightfv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetMaterialfv_enc(void *self , GLenum face, GLenum pname, GLfloat* params) @@ -232,18 +380,37 @@ void glGetMaterialfv_enc(void *self , GLenum face, GLenum pname, GLfloat* params gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetMaterialfv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &face, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetMaterialfv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetTexEnvfv_enc(void *self , GLenum env, GLenum pname, GLfloat* params) @@ -251,18 +418,37 @@ void glGetTexEnvfv_enc(void *self , GLenum env, GLenum pname, GLfloat* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetTexEnvfv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &env, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetTexEnvfv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetTexParameterfv_enc(void *self , GLenum target, GLenum pname, GLfloat* params) @@ -270,18 +456,37 @@ void glGetTexParameterfv_enc(void *self , GLenum target, GLenum pname, GLfloat* gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetTexParameterfv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetTexParameterfv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glLightModelf_enc(void *self , GLenum pname, GLfloat param) @@ -289,15 +494,25 @@ void glLightModelf_enc(void *self , GLenum pname, GLfloat param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLightModelf;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLightModelfv_enc(void *self , GLenum pname, const GLfloat* params) @@ -305,17 +520,27 @@ void glLightModelfv_enc(void *self , GLenum pname, const GLfloat* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLightModelfv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLightf_enc(void *self , GLenum light, GLenum pname, GLfloat param) @@ -323,16 +548,26 @@ void glLightf_enc(void *self , GLenum light, GLenum pname, GLfloat param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLightf;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &light, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLightfv_enc(void *self , GLenum light, GLenum pname, const GLfloat* params) @@ -340,18 +575,28 @@ void glLightfv_enc(void *self , GLenum light, GLenum pname, const GLfloat* param gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLightfv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &light, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLineWidth_enc(void *self , GLfloat width) @@ -359,14 +604,24 @@ void glLineWidth_enc(void *self , GLfloat width) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLineWidth;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLoadMatrixf_enc(void *self , const GLfloat* m) @@ -374,16 +629,26 @@ void glLoadMatrixf_enc(void *self , const GLfloat* m) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_m = (16 * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + __size_m + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_m + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLoadMatrixf;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_m; ptr += 4; memcpy(ptr, m, __size_m);ptr += __size_m; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glMaterialf_enc(void *self , GLenum face, GLenum pname, GLfloat param) @@ -391,16 +656,26 @@ void glMaterialf_enc(void *self , GLenum face, GLenum pname, GLfloat param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glMaterialf;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &face, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glMaterialfv_enc(void *self , GLenum face, GLenum pname, const GLfloat* params) @@ -408,18 +683,28 @@ void glMaterialfv_enc(void *self , GLenum face, GLenum pname, const GLfloat* par gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glMaterialfv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &face, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glMultMatrixf_enc(void *self , const GLfloat* m) @@ -427,16 +712,26 @@ void glMultMatrixf_enc(void *self , const GLfloat* m) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_m = (16 * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + __size_m + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_m + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glMultMatrixf;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_m; ptr += 4; memcpy(ptr, m, __size_m);ptr += __size_m; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glMultiTexCoord4f_enc(void *self , GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) @@ -444,18 +739,28 @@ void glMultiTexCoord4f_enc(void *self , GLenum target, GLfloat s, GLfloat t, GLf gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glMultiTexCoord4f;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &s, 4); ptr += 4; memcpy(ptr, &t, 4); ptr += 4; memcpy(ptr, &r, 4); ptr += 4; memcpy(ptr, &q, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glNormal3f_enc(void *self , GLfloat nx, GLfloat ny, GLfloat nz) @@ -463,16 +768,26 @@ void glNormal3f_enc(void *self , GLfloat nx, GLfloat ny, GLfloat nz) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glNormal3f;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &nx, 4); ptr += 4; memcpy(ptr, &ny, 4); ptr += 4; memcpy(ptr, &nz, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glOrthof_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) @@ -480,12 +795,18 @@ void glOrthof_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, GLfl gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glOrthof;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &left, 4); ptr += 4; memcpy(ptr, &right, 4); ptr += 4; @@ -493,6 +814,10 @@ void glOrthof_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, GLfl memcpy(ptr, &top, 4); ptr += 4; memcpy(ptr, &zNear, 4); ptr += 4; memcpy(ptr, &zFar, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPointParameterf_enc(void *self , GLenum pname, GLfloat param) @@ -500,15 +825,25 @@ void glPointParameterf_enc(void *self , GLenum pname, GLfloat param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPointParameterf;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPointParameterfv_enc(void *self , GLenum pname, const GLfloat* params) @@ -516,17 +851,27 @@ void glPointParameterfv_enc(void *self , GLenum pname, const GLfloat* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPointParameterfv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPointSize_enc(void *self , GLfloat size) @@ -534,14 +879,24 @@ void glPointSize_enc(void *self , GLfloat size) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPointSize;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPolygonOffset_enc(void *self , GLfloat factor, GLfloat units) @@ -549,15 +904,25 @@ void glPolygonOffset_enc(void *self , GLfloat factor, GLfloat units) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPolygonOffset;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &factor, 4); ptr += 4; memcpy(ptr, &units, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glRotatef_enc(void *self , GLfloat angle, GLfloat x, GLfloat y, GLfloat z) @@ -565,17 +930,27 @@ void glRotatef_enc(void *self , GLfloat angle, GLfloat x, GLfloat y, GLfloat z) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glRotatef;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &angle, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glScalef_enc(void *self , GLfloat x, GLfloat y, GLfloat z) @@ -583,16 +958,26 @@ void glScalef_enc(void *self , GLfloat x, GLfloat y, GLfloat z) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glScalef;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexEnvf_enc(void *self , GLenum target, GLenum pname, GLfloat param) @@ -600,16 +985,26 @@ void glTexEnvf_enc(void *self , GLenum target, GLenum pname, GLfloat param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexEnvf;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexEnvfv_enc(void *self , GLenum target, GLenum pname, const GLfloat* params) @@ -617,18 +1012,28 @@ void glTexEnvfv_enc(void *self , GLenum target, GLenum pname, const GLfloat* par gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexEnvfv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexParameterf_enc(void *self , GLenum target, GLenum pname, GLfloat param) @@ -636,16 +1041,26 @@ void glTexParameterf_enc(void *self , GLenum target, GLenum pname, GLfloat param gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexParameterf;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexParameterfv_enc(void *self , GLenum target, GLenum pname, const GLfloat* params) @@ -653,18 +1068,28 @@ void glTexParameterfv_enc(void *self , GLenum target, GLenum pname, const GLfloa gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexParameterfv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTranslatef_enc(void *self , GLfloat x, GLfloat y, GLfloat z) @@ -672,16 +1097,26 @@ void glTranslatef_enc(void *self , GLfloat x, GLfloat y, GLfloat z) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTranslatef;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glActiveTexture_enc(void *self , GLenum texture) @@ -689,14 +1124,24 @@ void glActiveTexture_enc(void *self , GLenum texture) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glActiveTexture;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &texture, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glAlphaFuncx_enc(void *self , GLenum func, GLclampx ref) @@ -704,15 +1149,25 @@ void glAlphaFuncx_enc(void *self , GLenum func, GLclampx ref) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glAlphaFuncx;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &func, 4); ptr += 4; memcpy(ptr, &ref, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBindBuffer_enc(void *self , GLenum target, GLuint buffer) @@ -720,15 +1175,25 @@ void glBindBuffer_enc(void *self , GLenum target, GLuint buffer) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBindBuffer;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &buffer, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBindTexture_enc(void *self , GLenum target, GLuint texture) @@ -736,15 +1201,25 @@ void glBindTexture_enc(void *self , GLenum target, GLuint texture) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBindTexture;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &texture, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBlendFunc_enc(void *self , GLenum sfactor, GLenum dfactor) @@ -752,15 +1227,25 @@ void glBlendFunc_enc(void *self , GLenum sfactor, GLenum dfactor) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBlendFunc;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &sfactor, 4); ptr += 4; memcpy(ptr, &dfactor, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBufferData_enc(void *self , GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) @@ -768,19 +1253,29 @@ void glBufferData_enc(void *self , GLenum target, GLsizeiptr size, const GLvoid* gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; - const unsigned int __size_data = size; + const unsigned int __size_data = ((data != NULL) ? size : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_data + 4 + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_data + 4 + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBufferData;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; *(unsigned int *)(ptr) = __size_data; ptr += 4; - memcpy(ptr, data, __size_data);ptr += __size_data; + if (data != NULL) memcpy(ptr, data, __size_data);ptr += __size_data; memcpy(ptr, &usage, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBufferSubData_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) @@ -788,19 +1283,29 @@ void glBufferSubData_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; - const unsigned int __size_data = size; + const unsigned int __size_data = ((data != NULL) ? size : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + __size_data + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + __size_data + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBufferSubData;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &offset, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; *(unsigned int *)(ptr) = __size_data; ptr += 4; - memcpy(ptr, data, __size_data);ptr += __size_data; + if (data != NULL) memcpy(ptr, data, __size_data);ptr += __size_data; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glClear_enc(void *self , GLbitfield mask) @@ -808,14 +1313,24 @@ void glClear_enc(void *self , GLbitfield mask) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClear;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mask, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glClearColorx_enc(void *self , GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha) @@ -823,17 +1338,27 @@ void glClearColorx_enc(void *self , GLclampx red, GLclampx green, GLclampx blue, gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClearColorx;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &red, 4); ptr += 4; memcpy(ptr, &green, 4); ptr += 4; memcpy(ptr, &blue, 4); ptr += 4; memcpy(ptr, &alpha, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glClearDepthx_enc(void *self , GLclampx depth) @@ -841,14 +1366,24 @@ void glClearDepthx_enc(void *self , GLclampx depth) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClearDepthx;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &depth, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glClearStencil_enc(void *self , GLint s) @@ -856,14 +1391,24 @@ void glClearStencil_enc(void *self , GLint s) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClearStencil;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &s, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glClientActiveTexture_enc(void *self , GLenum texture) @@ -871,14 +1416,24 @@ void glClientActiveTexture_enc(void *self , GLenum texture) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClientActiveTexture;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &texture, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glColor4ub_enc(void *self , GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) @@ -886,17 +1441,27 @@ void glColor4ub_enc(void *self , GLubyte red, GLubyte green, GLubyte blue, GLuby gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 1 + 1 + 1 + 1; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 1 + 1 + 1 + 1; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glColor4ub;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &red, 1); ptr += 1; memcpy(ptr, &green, 1); ptr += 1; memcpy(ptr, &blue, 1); ptr += 1; memcpy(ptr, &alpha, 1); ptr += 1; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glColor4x_enc(void *self , GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) @@ -904,17 +1469,27 @@ void glColor4x_enc(void *self , GLfixed red, GLfixed green, GLfixed blue, GLfixe gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glColor4x;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &red, 4); ptr += 4; memcpy(ptr, &green, 4); ptr += 4; memcpy(ptr, &blue, 4); ptr += 4; memcpy(ptr, &alpha, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glColorMask_enc(void *self , GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) @@ -922,17 +1497,27 @@ void glColorMask_enc(void *self , GLboolean red, GLboolean green, GLboolean blue gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 1 + 1 + 1 + 1; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 1 + 1 + 1 + 1; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glColorMask;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &red, 1); ptr += 1; memcpy(ptr, &green, 1); ptr += 1; memcpy(ptr, &blue, 1); ptr += 1; memcpy(ptr, &alpha, 1); ptr += 1; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glCompressedTexImage2D_enc(void *self , GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) @@ -940,13 +1525,19 @@ void glCompressedTexImage2D_enc(void *self , GLenum target, GLint level, GLenum gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_data = ((data != NULL) ? imageSize : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_data + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_data + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glCompressedTexImage2D;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -957,6 +1548,10 @@ void glCompressedTexImage2D_enc(void *self , GLenum target, GLint level, GLenum memcpy(ptr, &imageSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_data; ptr += 4; if (data != NULL) memcpy(ptr, data, __size_data);ptr += __size_data; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glCompressedTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) @@ -964,13 +1559,19 @@ void glCompressedTexSubImage2D_enc(void *self , GLenum target, GLint level, GLin gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; - const unsigned int __size_data = imageSize; + const unsigned int __size_data = ((data != NULL) ? imageSize : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_data + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_data + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glCompressedTexSubImage2D;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -981,7 +1582,11 @@ void glCompressedTexSubImage2D_enc(void *self , GLenum target, GLint level, GLin memcpy(ptr, &format, 4); ptr += 4; memcpy(ptr, &imageSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_data; ptr += 4; - memcpy(ptr, data, __size_data);ptr += __size_data; + if (data != NULL) memcpy(ptr, data, __size_data);ptr += __size_data; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glCopyTexImage2D_enc(void *self , GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) @@ -989,12 +1594,18 @@ void glCopyTexImage2D_enc(void *self , GLenum target, GLint level, GLenum intern gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glCopyTexImage2D;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -1004,6 +1615,10 @@ void glCopyTexImage2D_enc(void *self , GLenum target, GLint level, GLenum intern memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; memcpy(ptr, &border, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glCopyTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) @@ -1011,12 +1626,18 @@ void glCopyTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoff gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glCopyTexSubImage2D;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -1026,6 +1647,10 @@ void glCopyTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoff memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glCullFace_enc(void *self , GLenum mode) @@ -1033,14 +1658,24 @@ void glCullFace_enc(void *self , GLenum mode) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glCullFace;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mode, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDeleteBuffers_enc(void *self , GLsizei n, const GLuint* buffers) @@ -1048,17 +1683,27 @@ void glDeleteBuffers_enc(void *self , GLsizei n, const GLuint* buffers) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_buffers = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_buffers + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_buffers + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDeleteBuffers;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_buffers; ptr += 4; memcpy(ptr, buffers, __size_buffers);ptr += __size_buffers; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDeleteTextures_enc(void *self , GLsizei n, const GLuint* textures) @@ -1066,17 +1711,27 @@ void glDeleteTextures_enc(void *self , GLsizei n, const GLuint* textures) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_textures = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_textures + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_textures + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDeleteTextures;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_textures; ptr += 4; memcpy(ptr, textures, __size_textures);ptr += __size_textures; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDepthFunc_enc(void *self , GLenum func) @@ -1084,14 +1739,24 @@ void glDepthFunc_enc(void *self , GLenum func) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDepthFunc;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &func, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDepthMask_enc(void *self , GLboolean flag) @@ -1099,14 +1764,24 @@ void glDepthMask_enc(void *self , GLboolean flag) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 1; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 1; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDepthMask;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &flag, 1); ptr += 1; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDepthRangex_enc(void *self , GLclampx zNear, GLclampx zFar) @@ -1114,15 +1789,25 @@ void glDepthRangex_enc(void *self , GLclampx zNear, GLclampx zFar) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDepthRangex;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &zNear, 4); ptr += 4; memcpy(ptr, &zFar, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDisable_enc(void *self , GLenum cap) @@ -1130,14 +1815,24 @@ void glDisable_enc(void *self , GLenum cap) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDisable;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &cap, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDisableClientState_enc(void *self , GLenum array) @@ -1145,14 +1840,24 @@ void glDisableClientState_enc(void *self , GLenum array) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDisableClientState;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &array, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDrawArrays_enc(void *self , GLenum mode, GLint first, GLsizei count) @@ -1160,16 +1865,26 @@ void glDrawArrays_enc(void *self , GLenum mode, GLint first, GLsizei count) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDrawArrays;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mode, 4); ptr += 4; memcpy(ptr, &first, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glEnable_enc(void *self , GLenum cap) @@ -1177,14 +1892,24 @@ void glEnable_enc(void *self , GLenum cap) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glEnable;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &cap, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glEnableClientState_enc(void *self , GLenum array) @@ -1192,14 +1917,24 @@ void glEnableClientState_enc(void *self , GLenum array) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glEnableClientState;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &array, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glFinish_enc(void *self ) @@ -1207,12 +1942,22 @@ void glFinish_enc(void *self ) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFinish;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; } @@ -1221,12 +1966,22 @@ void glFlush_enc(void *self ) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFlush;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; } @@ -1235,15 +1990,25 @@ void glFogx_enc(void *self , GLenum pname, GLfixed param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFogx;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glFogxv_enc(void *self , GLenum pname, const GLfixed* params) @@ -1251,17 +2016,27 @@ void glFogxv_enc(void *self , GLenum pname, const GLfixed* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFogxv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glFrontFace_enc(void *self , GLenum mode) @@ -1269,14 +2044,24 @@ void glFrontFace_enc(void *self , GLenum mode) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFrontFace;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mode, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glFrustumx_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar) @@ -1284,12 +2069,18 @@ void glFrustumx_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, GL gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFrustumx;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &left, 4); ptr += 4; memcpy(ptr, &right, 4); ptr += 4; @@ -1297,6 +2088,10 @@ void glFrustumx_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, GL memcpy(ptr, &top, 4); ptr += 4; memcpy(ptr, &zNear, 4); ptr += 4; memcpy(ptr, &zFar, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGetBooleanv_enc(void *self , GLenum pname, GLboolean* params) @@ -1304,17 +2099,36 @@ void glGetBooleanv_enc(void *self , GLenum pname, GLboolean* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLboolean)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetBooleanv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetBooleanv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetBufferParameteriv_enc(void *self , GLenum target, GLenum pname, GLint* params) @@ -1322,18 +2136,37 @@ void glGetBufferParameteriv_enc(void *self , GLenum target, GLenum pname, GLint* gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetBufferParameteriv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetBufferParameteriv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glClipPlanex_enc(void *self , GLenum pname, const GLfixed* eqn) @@ -1341,17 +2174,27 @@ void glClipPlanex_enc(void *self , GLenum pname, const GLfixed* eqn) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_eqn = (4 * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_eqn + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_eqn + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClipPlanex;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_eqn; ptr += 4; memcpy(ptr, eqn, __size_eqn);ptr += __size_eqn; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGenBuffers_enc(void *self , GLsizei n, GLuint* buffers) @@ -1359,17 +2202,36 @@ void glGenBuffers_enc(void *self , GLsizei n, GLuint* buffers) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_buffers = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_buffers + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_buffers + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGenBuffers;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_buffers; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(buffers, __size_buffers); + if (useChecksum) checksumCalculator->addBuffer(buffers, __size_buffers); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGenBuffers: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGenTextures_enc(void *self , GLsizei n, GLuint* textures) @@ -1377,17 +2239,36 @@ void glGenTextures_enc(void *self , GLsizei n, GLuint* textures) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_textures = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_textures + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_textures + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGenTextures;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_textures; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(textures, __size_textures); + if (useChecksum) checksumCalculator->addBuffer(textures, __size_textures); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGenTextures: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } GLenum glGetError_enc(void *self ) @@ -1395,16 +2276,35 @@ GLenum glGetError_enc(void *self ) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetError;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; GLenum retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetError: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -1413,17 +2313,36 @@ void glGetFixedv_enc(void *self , GLenum pname, GLfixed* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetFixedv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetFixedv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetIntegerv_enc(void *self , GLenum pname, GLint* params) @@ -1431,17 +2350,36 @@ void glGetIntegerv_enc(void *self , GLenum pname, GLint* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetIntegerv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetIntegerv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetLightxv_enc(void *self , GLenum light, GLenum pname, GLfixed* params) @@ -1449,18 +2387,37 @@ void glGetLightxv_enc(void *self , GLenum light, GLenum pname, GLfixed* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetLightxv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &light, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetLightxv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetMaterialxv_enc(void *self , GLenum face, GLenum pname, GLfixed* params) @@ -1468,18 +2425,37 @@ void glGetMaterialxv_enc(void *self , GLenum face, GLenum pname, GLfixed* params gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetMaterialxv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &face, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetMaterialxv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetTexEnviv_enc(void *self , GLenum env, GLenum pname, GLint* params) @@ -1487,18 +2463,37 @@ void glGetTexEnviv_enc(void *self , GLenum env, GLenum pname, GLint* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetTexEnviv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &env, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetTexEnviv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetTexEnvxv_enc(void *self , GLenum env, GLenum pname, GLfixed* params) @@ -1506,18 +2501,37 @@ void glGetTexEnvxv_enc(void *self , GLenum env, GLenum pname, GLfixed* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetTexEnvxv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &env, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetTexEnvxv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetTexParameteriv_enc(void *self , GLenum target, GLenum pname, GLint* params) @@ -1525,18 +2539,37 @@ void glGetTexParameteriv_enc(void *self , GLenum target, GLenum pname, GLint* pa gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetTexParameteriv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetTexParameteriv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetTexParameterxv_enc(void *self , GLenum target, GLenum pname, GLfixed* params) @@ -1544,18 +2577,37 @@ void glGetTexParameterxv_enc(void *self , GLenum target, GLenum pname, GLfixed* gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetTexParameterxv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetTexParameterxv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glHint_enc(void *self , GLenum target, GLenum mode) @@ -1563,15 +2615,25 @@ void glHint_enc(void *self , GLenum target, GLenum mode) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glHint;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &mode, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } GLboolean glIsBuffer_enc(void *self , GLuint buffer) @@ -1579,17 +2641,36 @@ GLboolean glIsBuffer_enc(void *self , GLuint buffer) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glIsBuffer;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &buffer, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glIsBuffer: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -1598,17 +2679,36 @@ GLboolean glIsEnabled_enc(void *self , GLenum cap) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glIsEnabled;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &cap, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glIsEnabled: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -1617,17 +2717,36 @@ GLboolean glIsTexture_enc(void *self , GLuint texture) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glIsTexture;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &texture, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glIsTexture: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -1636,15 +2755,25 @@ void glLightModelx_enc(void *self , GLenum pname, GLfixed param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLightModelx;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLightModelxv_enc(void *self , GLenum pname, const GLfixed* params) @@ -1652,17 +2781,27 @@ void glLightModelxv_enc(void *self , GLenum pname, const GLfixed* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLightModelxv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLightx_enc(void *self , GLenum light, GLenum pname, GLfixed param) @@ -1670,16 +2809,26 @@ void glLightx_enc(void *self , GLenum light, GLenum pname, GLfixed param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLightx;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &light, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLightxv_enc(void *self , GLenum light, GLenum pname, const GLfixed* params) @@ -1687,18 +2836,28 @@ void glLightxv_enc(void *self , GLenum light, GLenum pname, const GLfixed* param gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLightxv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &light, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLineWidthx_enc(void *self , GLfixed width) @@ -1706,14 +2865,24 @@ void glLineWidthx_enc(void *self , GLfixed width) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLineWidthx;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLoadIdentity_enc(void *self ) @@ -1721,12 +2890,22 @@ void glLoadIdentity_enc(void *self ) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLoadIdentity;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; } @@ -1735,16 +2914,26 @@ void glLoadMatrixx_enc(void *self , const GLfixed* m) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_m = (16 * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + __size_m + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_m + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLoadMatrixx;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_m; ptr += 4; memcpy(ptr, m, __size_m);ptr += __size_m; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLogicOp_enc(void *self , GLenum opcode) @@ -1752,14 +2941,24 @@ void glLogicOp_enc(void *self , GLenum opcode) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLogicOp;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &opcode, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glMaterialx_enc(void *self , GLenum face, GLenum pname, GLfixed param) @@ -1767,16 +2966,26 @@ void glMaterialx_enc(void *self , GLenum face, GLenum pname, GLfixed param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glMaterialx;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &face, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glMaterialxv_enc(void *self , GLenum face, GLenum pname, const GLfixed* params) @@ -1784,18 +2993,28 @@ void glMaterialxv_enc(void *self , GLenum face, GLenum pname, const GLfixed* par gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glMaterialxv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &face, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glMatrixMode_enc(void *self , GLenum mode) @@ -1803,14 +3022,24 @@ void glMatrixMode_enc(void *self , GLenum mode) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glMatrixMode;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mode, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glMultMatrixx_enc(void *self , const GLfixed* m) @@ -1818,16 +3047,26 @@ void glMultMatrixx_enc(void *self , const GLfixed* m) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_m = (16 * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + __size_m + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_m + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glMultMatrixx;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_m; ptr += 4; memcpy(ptr, m, __size_m);ptr += __size_m; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glMultiTexCoord4x_enc(void *self , GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q) @@ -1835,18 +3074,28 @@ void glMultiTexCoord4x_enc(void *self , GLenum target, GLfixed s, GLfixed t, GLf gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glMultiTexCoord4x;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &s, 4); ptr += 4; memcpy(ptr, &t, 4); ptr += 4; memcpy(ptr, &r, 4); ptr += 4; memcpy(ptr, &q, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glNormal3x_enc(void *self , GLfixed nx, GLfixed ny, GLfixed nz) @@ -1854,16 +3103,26 @@ void glNormal3x_enc(void *self , GLfixed nx, GLfixed ny, GLfixed nz) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glNormal3x;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &nx, 4); ptr += 4; memcpy(ptr, &ny, 4); ptr += 4; memcpy(ptr, &nz, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glOrthox_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar) @@ -1871,12 +3130,18 @@ void glOrthox_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, GLfi gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glOrthox;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &left, 4); ptr += 4; memcpy(ptr, &right, 4); ptr += 4; @@ -1884,6 +3149,10 @@ void glOrthox_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, GLfi memcpy(ptr, &top, 4); ptr += 4; memcpy(ptr, &zNear, 4); ptr += 4; memcpy(ptr, &zFar, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPixelStorei_enc(void *self , GLenum pname, GLint param) @@ -1891,15 +3160,25 @@ void glPixelStorei_enc(void *self , GLenum pname, GLint param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPixelStorei;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPointParameterx_enc(void *self , GLenum pname, GLfixed param) @@ -1907,15 +3186,25 @@ void glPointParameterx_enc(void *self , GLenum pname, GLfixed param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPointParameterx;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPointParameterxv_enc(void *self , GLenum pname, const GLfixed* params) @@ -1923,17 +3212,27 @@ void glPointParameterxv_enc(void *self , GLenum pname, const GLfixed* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPointParameterxv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPointSizex_enc(void *self , GLfixed size) @@ -1941,14 +3240,24 @@ void glPointSizex_enc(void *self , GLfixed size) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPointSizex;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPolygonOffsetx_enc(void *self , GLfixed factor, GLfixed units) @@ -1956,15 +3265,25 @@ void glPolygonOffsetx_enc(void *self , GLfixed factor, GLfixed units) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPolygonOffsetx;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &factor, 4); ptr += 4; memcpy(ptr, &units, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPopMatrix_enc(void *self ) @@ -1972,12 +3291,22 @@ void glPopMatrix_enc(void *self ) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPopMatrix;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; } @@ -1986,12 +3315,22 @@ void glPushMatrix_enc(void *self ) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPushMatrix;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; } @@ -2000,13 +3339,19 @@ void glReadPixels_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei heig gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_pixels = glesv1_enc::pixelDataSize(self, width, height, format, type, 1); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glReadPixels;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; @@ -2015,7 +3360,20 @@ void glReadPixels_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei heig memcpy(ptr, &format, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; *(unsigned int *)(ptr) = __size_pixels; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(pixels, __size_pixels); + if (useChecksum) checksumCalculator->addBuffer(pixels, __size_pixels); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glReadPixels: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glRotatex_enc(void *self , GLfixed angle, GLfixed x, GLfixed y, GLfixed z) @@ -2023,17 +3381,27 @@ void glRotatex_enc(void *self , GLfixed angle, GLfixed x, GLfixed y, GLfixed z) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glRotatex;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &angle, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glSampleCoverage_enc(void *self , GLclampf value, GLboolean invert) @@ -2041,15 +3409,25 @@ void glSampleCoverage_enc(void *self , GLclampf value, GLboolean invert) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 1; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 1; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glSampleCoverage;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &value, 4); ptr += 4; memcpy(ptr, &invert, 1); ptr += 1; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glSampleCoveragex_enc(void *self , GLclampx value, GLboolean invert) @@ -2057,15 +3435,25 @@ void glSampleCoveragex_enc(void *self , GLclampx value, GLboolean invert) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 1; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 1; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glSampleCoveragex;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &value, 4); ptr += 4; memcpy(ptr, &invert, 1); ptr += 1; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glScalex_enc(void *self , GLfixed x, GLfixed y, GLfixed z) @@ -2073,16 +3461,26 @@ void glScalex_enc(void *self , GLfixed x, GLfixed y, GLfixed z) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glScalex;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glScissor_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height) @@ -2090,17 +3488,27 @@ void glScissor_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glScissor;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glShadeModel_enc(void *self , GLenum mode) @@ -2108,14 +3516,24 @@ void glShadeModel_enc(void *self , GLenum mode) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glShadeModel;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mode, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glStencilFunc_enc(void *self , GLenum func, GLint ref, GLuint mask) @@ -2123,16 +3541,26 @@ void glStencilFunc_enc(void *self , GLenum func, GLint ref, GLuint mask) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glStencilFunc;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &func, 4); ptr += 4; memcpy(ptr, &ref, 4); ptr += 4; memcpy(ptr, &mask, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glStencilMask_enc(void *self , GLuint mask) @@ -2140,14 +3568,24 @@ void glStencilMask_enc(void *self , GLuint mask) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glStencilMask;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mask, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glStencilOp_enc(void *self , GLenum fail, GLenum zfail, GLenum zpass) @@ -2155,16 +3593,26 @@ void glStencilOp_enc(void *self , GLenum fail, GLenum zfail, GLenum zpass) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glStencilOp;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &fail, 4); ptr += 4; memcpy(ptr, &zfail, 4); ptr += 4; memcpy(ptr, &zpass, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexEnvi_enc(void *self , GLenum target, GLenum pname, GLint param) @@ -2172,16 +3620,26 @@ void glTexEnvi_enc(void *self , GLenum target, GLenum pname, GLint param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexEnvi;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexEnvx_enc(void *self , GLenum target, GLenum pname, GLfixed param) @@ -2189,16 +3647,26 @@ void glTexEnvx_enc(void *self , GLenum target, GLenum pname, GLfixed param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexEnvx;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexEnviv_enc(void *self , GLenum target, GLenum pname, const GLint* params) @@ -2206,18 +3674,28 @@ void glTexEnviv_enc(void *self , GLenum target, GLenum pname, const GLint* param gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexEnviv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexEnvxv_enc(void *self , GLenum target, GLenum pname, const GLfixed* params) @@ -2225,18 +3703,28 @@ void glTexEnvxv_enc(void *self , GLenum target, GLenum pname, const GLfixed* par gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexEnvxv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexImage2D_enc(void *self , GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels) @@ -2244,13 +3732,19 @@ void glTexImage2D_enc(void *self , GLenum target, GLint level, GLint internalfor gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_pixels = ((pixels != NULL) ? glesv1_enc::pixelDataSize(self, width, height, format, type, 0) : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; - ptr = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + ptr = buf; int tmp = OP_glTexImage2D;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -2260,9 +3754,18 @@ void glTexImage2D_enc(void *self , GLenum target, GLint level, GLint internalfor memcpy(ptr, &border, 4); ptr += 4; memcpy(ptr, &format, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); stream->flush(); stream->writeFully(&__size_pixels,4); - if (pixels != NULL) stream->writeFully(pixels, __size_pixels); + if (useChecksum) checksumCalculator->addBuffer(&__size_pixels,4); + if (pixels != NULL) { + stream->writeFully(pixels, __size_pixels); + if (useChecksum) checksumCalculator->addBuffer(pixels, __size_pixels); + } + buf = stream->alloc(checksumSize); + if (useChecksum) checksumCalculator->writeChecksum(buf, checksumSize); + } void glTexParameteri_enc(void *self , GLenum target, GLenum pname, GLint param) @@ -2270,16 +3773,26 @@ void glTexParameteri_enc(void *self , GLenum target, GLenum pname, GLint param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexParameteri;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexParameterx_enc(void *self , GLenum target, GLenum pname, GLfixed param) @@ -2287,16 +3800,26 @@ void glTexParameterx_enc(void *self , GLenum target, GLenum pname, GLfixed param gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexParameterx;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexParameteriv_enc(void *self , GLenum target, GLenum pname, const GLint* params) @@ -2304,18 +3827,28 @@ void glTexParameteriv_enc(void *self , GLenum target, GLenum pname, const GLint* gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexParameteriv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexParameterxv_enc(void *self , GLenum target, GLenum pname, const GLfixed* params) @@ -2323,18 +3856,28 @@ void glTexParameterxv_enc(void *self , GLenum target, GLenum pname, const GLfixe gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexParameterxv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels) @@ -2342,13 +3885,19 @@ void glTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset, gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; - const unsigned int __size_pixels = glesv1_enc::pixelDataSize(self, width, height, format, type, 0); + const unsigned int __size_pixels = ((pixels != NULL) ? glesv1_enc::pixelDataSize(self, width, height, format, type, 0) : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; - ptr = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + ptr = buf; int tmp = OP_glTexSubImage2D;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -2358,9 +3907,18 @@ void glTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset, memcpy(ptr, &height, 4); ptr += 4; memcpy(ptr, &format, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); stream->flush(); stream->writeFully(&__size_pixels,4); - stream->writeFully(pixels, __size_pixels); + if (useChecksum) checksumCalculator->addBuffer(&__size_pixels,4); + if (pixels != NULL) { + stream->writeFully(pixels, __size_pixels); + if (useChecksum) checksumCalculator->addBuffer(pixels, __size_pixels); + } + buf = stream->alloc(checksumSize); + if (useChecksum) checksumCalculator->writeChecksum(buf, checksumSize); + } void glTranslatex_enc(void *self , GLfixed x, GLfixed y, GLfixed z) @@ -2368,16 +3926,26 @@ void glTranslatex_enc(void *self , GLfixed x, GLfixed y, GLfixed z) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTranslatex;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glViewport_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height) @@ -2385,17 +3953,27 @@ void glViewport_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glViewport;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glVertexPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei stride, GLuint offset) @@ -2403,17 +3981,27 @@ void glVertexPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei str gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glVertexPointerOffset;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; memcpy(ptr, &stride, 4); ptr += 4; memcpy(ptr, &offset, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glColorPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei stride, GLuint offset) @@ -2421,17 +4009,27 @@ void glColorPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei stri gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glColorPointerOffset;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; memcpy(ptr, &stride, 4); ptr += 4; memcpy(ptr, &offset, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glNormalPointerOffset_enc(void *self , GLenum type, GLsizei stride, GLuint offset) @@ -2439,16 +4037,26 @@ void glNormalPointerOffset_enc(void *self , GLenum type, GLsizei stride, GLuint gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glNormalPointerOffset;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; memcpy(ptr, &stride, 4); ptr += 4; memcpy(ptr, &offset, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPointSizePointerOffset_enc(void *self , GLenum type, GLsizei stride, GLuint offset) @@ -2456,16 +4064,26 @@ void glPointSizePointerOffset_enc(void *self , GLenum type, GLsizei stride, GLui gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPointSizePointerOffset;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; memcpy(ptr, &stride, 4); ptr += 4; memcpy(ptr, &offset, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexCoordPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei stride, GLuint offset) @@ -2473,17 +4091,27 @@ void glTexCoordPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei s gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexCoordPointerOffset;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; memcpy(ptr, &stride, 4); ptr += 4; memcpy(ptr, &offset, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glWeightPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei stride, GLuint offset) @@ -2491,17 +4119,27 @@ void glWeightPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei str gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glWeightPointerOffset;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; memcpy(ptr, &stride, 4); ptr += 4; memcpy(ptr, &offset, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glMatrixIndexPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei stride, GLuint offset) @@ -2509,17 +4147,27 @@ void glMatrixIndexPointerOffset_enc(void *self , GLint size, GLenum type, GLsize gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glMatrixIndexPointerOffset;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; memcpy(ptr, &stride, 4); ptr += 4; memcpy(ptr, &offset, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glVertexPointerData_enc(void *self , GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen) @@ -2527,13 +4175,19 @@ void glVertexPointerData_enc(void *self , GLint size, GLenum type, GLsizei strid gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_data = datalen; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + __size_data + 4 + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + __size_data + 4 + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glVertexPointerData;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; @@ -2541,6 +4195,10 @@ void glVertexPointerData_enc(void *self , GLint size, GLenum type, GLsizei strid *(unsigned int *)(ptr) = __size_data; ptr += 4; glUtilsPackPointerData((unsigned char *)ptr, (unsigned char *)data, size, type, stride, datalen);ptr += __size_data; memcpy(ptr, &datalen, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glColorPointerData_enc(void *self , GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen) @@ -2548,13 +4206,19 @@ void glColorPointerData_enc(void *self , GLint size, GLenum type, GLsizei stride gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_data = datalen; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + __size_data + 4 + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + __size_data + 4 + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glColorPointerData;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; @@ -2562,6 +4226,10 @@ void glColorPointerData_enc(void *self , GLint size, GLenum type, GLsizei stride *(unsigned int *)(ptr) = __size_data; ptr += 4; glUtilsPackPointerData((unsigned char *)ptr, (unsigned char *)data, size, type, stride, datalen);ptr += __size_data; memcpy(ptr, &datalen, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glNormalPointerData_enc(void *self , GLenum type, GLsizei stride, void* data, GLuint datalen) @@ -2569,19 +4237,29 @@ void glNormalPointerData_enc(void *self , GLenum type, GLsizei stride, void* dat gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_data = datalen; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_data + 4 + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_data + 4 + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glNormalPointerData;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; memcpy(ptr, &stride, 4); ptr += 4; *(unsigned int *)(ptr) = __size_data; ptr += 4; glUtilsPackPointerData((unsigned char *)ptr, (unsigned char *)data, 3, type, stride, datalen);ptr += __size_data; memcpy(ptr, &datalen, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexCoordPointerData_enc(void *self , GLint unit, GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen) @@ -2589,13 +4267,19 @@ void glTexCoordPointerData_enc(void *self , GLint unit, GLint size, GLenum type, gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_data = datalen; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + __size_data + 4 + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + __size_data + 4 + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexCoordPointerData;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &unit, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; @@ -2604,6 +4288,10 @@ void glTexCoordPointerData_enc(void *self , GLint unit, GLint size, GLenum type, *(unsigned int *)(ptr) = __size_data; ptr += 4; glUtilsPackPointerData((unsigned char *)ptr, (unsigned char *)data, size, type, stride, datalen);ptr += __size_data; memcpy(ptr, &datalen, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPointSizePointerData_enc(void *self , GLenum type, GLsizei stride, void* data, GLuint datalen) @@ -2611,19 +4299,29 @@ void glPointSizePointerData_enc(void *self , GLenum type, GLsizei stride, void* gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_data = datalen; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_data + 4 + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_data + 4 + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPointSizePointerData;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; memcpy(ptr, &stride, 4); ptr += 4; *(unsigned int *)(ptr) = __size_data; ptr += 4; glUtilsPackPointerData((unsigned char *)ptr, (unsigned char *)data, 1, type, stride, datalen);ptr += __size_data; memcpy(ptr, &datalen, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glWeightPointerData_enc(void *self , GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen) @@ -2631,13 +4329,19 @@ void glWeightPointerData_enc(void *self , GLint size, GLenum type, GLsizei strid gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_data = datalen; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + __size_data + 4 + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + __size_data + 4 + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glWeightPointerData;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; @@ -2645,6 +4349,10 @@ void glWeightPointerData_enc(void *self , GLint size, GLenum type, GLsizei strid *(unsigned int *)(ptr) = __size_data; ptr += 4; glUtilsPackPointerData((unsigned char *)ptr, (unsigned char*)data, size, type, stride, datalen);ptr += __size_data; memcpy(ptr, &datalen, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glMatrixIndexPointerData_enc(void *self , GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen) @@ -2652,13 +4360,19 @@ void glMatrixIndexPointerData_enc(void *self , GLint size, GLenum type, GLsizei gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_data = datalen; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + __size_data + 4 + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + __size_data + 4 + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glMatrixIndexPointerData;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; @@ -2666,6 +4380,10 @@ void glMatrixIndexPointerData_enc(void *self , GLint size, GLenum type, GLsizei *(unsigned int *)(ptr) = __size_data; ptr += 4; glUtilsPackPointerData((unsigned char *)ptr, (unsigned char*)data, size, type, stride, datalen);ptr += __size_data; memcpy(ptr, &datalen, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDrawElementsOffset_enc(void *self , GLenum mode, GLsizei count, GLenum type, GLuint offset) @@ -2673,17 +4391,27 @@ void glDrawElementsOffset_enc(void *self , GLenum mode, GLsizei count, GLenum ty gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDrawElementsOffset;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mode, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; memcpy(ptr, &offset, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDrawElementsData_enc(void *self , GLenum mode, GLsizei count, GLenum type, void* data, GLuint datalen) @@ -2691,13 +4419,19 @@ void glDrawElementsData_enc(void *self , GLenum mode, GLsizei count, GLenum type gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_data = datalen; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + __size_data + 4 + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + __size_data + 4 + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDrawElementsData;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mode, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; @@ -2705,6 +4439,10 @@ void glDrawElementsData_enc(void *self , GLenum mode, GLsizei count, GLenum type *(unsigned int *)(ptr) = __size_data; ptr += 4; memcpy(ptr, data, __size_data);ptr += __size_data; memcpy(ptr, &datalen, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGetCompressedTextureFormats_enc(void *self , int count, GLint* formats) @@ -2712,17 +4450,36 @@ void glGetCompressedTextureFormats_enc(void *self , int count, GLint* formats) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_formats = (count * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_formats + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_formats + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetCompressedTextureFormats;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; *(unsigned int *)(ptr) = __size_formats; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(formats, __size_formats); + if (useChecksum) checksumCalculator->addBuffer(formats, __size_formats); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetCompressedTextureFormats: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } int glFinishRoundTrip_enc(void *self ) @@ -2730,16 +4487,35 @@ int glFinishRoundTrip_enc(void *self ) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFinishRoundTrip;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; int retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glFinishRoundTrip: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -2748,15 +4524,25 @@ void glBlendEquationSeparateOES_enc(void *self , GLenum modeRGB, GLenum modeAlph gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBlendEquationSeparateOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &modeRGB, 4); ptr += 4; memcpy(ptr, &modeAlpha, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBlendFuncSeparateOES_enc(void *self , GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) @@ -2764,17 +4550,27 @@ void glBlendFuncSeparateOES_enc(void *self , GLenum srcRGB, GLenum dstRGB, GLenu gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBlendFuncSeparateOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &srcRGB, 4); ptr += 4; memcpy(ptr, &dstRGB, 4); ptr += 4; memcpy(ptr, &srcAlpha, 4); ptr += 4; memcpy(ptr, &dstAlpha, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBlendEquationOES_enc(void *self , GLenum mode) @@ -2782,14 +4578,24 @@ void glBlendEquationOES_enc(void *self , GLenum mode) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBlendEquationOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mode, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDrawTexsOES_enc(void *self , GLshort x, GLshort y, GLshort z, GLshort width, GLshort height) @@ -2797,18 +4603,28 @@ void glDrawTexsOES_enc(void *self , GLshort x, GLshort y, GLshort z, GLshort wid gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 2 + 2 + 2 + 2 + 2; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 2 + 2 + 2 + 2 + 2; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDrawTexsOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &x, 2); ptr += 2; memcpy(ptr, &y, 2); ptr += 2; memcpy(ptr, &z, 2); ptr += 2; memcpy(ptr, &width, 2); ptr += 2; memcpy(ptr, &height, 2); ptr += 2; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDrawTexiOES_enc(void *self , GLint x, GLint y, GLint z, GLint width, GLint height) @@ -2816,18 +4632,28 @@ void glDrawTexiOES_enc(void *self , GLint x, GLint y, GLint z, GLint width, GLin gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDrawTexiOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDrawTexxOES_enc(void *self , GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height) @@ -2835,18 +4661,28 @@ void glDrawTexxOES_enc(void *self , GLfixed x, GLfixed y, GLfixed z, GLfixed wid gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDrawTexxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDrawTexsvOES_enc(void *self , const GLshort* coords) @@ -2854,16 +4690,26 @@ void glDrawTexsvOES_enc(void *self , const GLshort* coords) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_coords = (5 * sizeof(GLshort)); unsigned char *ptr; - const size_t packetSize = 8 + __size_coords + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_coords + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDrawTexsvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_coords; ptr += 4; memcpy(ptr, coords, __size_coords);ptr += __size_coords; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDrawTexivOES_enc(void *self , const GLint* coords) @@ -2871,16 +4717,26 @@ void glDrawTexivOES_enc(void *self , const GLint* coords) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_coords = (5 * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + __size_coords + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_coords + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDrawTexivOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_coords; ptr += 4; memcpy(ptr, coords, __size_coords);ptr += __size_coords; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDrawTexxvOES_enc(void *self , const GLfixed* coords) @@ -2888,16 +4744,26 @@ void glDrawTexxvOES_enc(void *self , const GLfixed* coords) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_coords = (5 * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + __size_coords + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_coords + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDrawTexxvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_coords; ptr += 4; memcpy(ptr, coords, __size_coords);ptr += __size_coords; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDrawTexfOES_enc(void *self , GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height) @@ -2905,18 +4771,28 @@ void glDrawTexfOES_enc(void *self , GLfloat x, GLfloat y, GLfloat z, GLfloat wid gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDrawTexfOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDrawTexfvOES_enc(void *self , const GLfloat* coords) @@ -2924,16 +4800,26 @@ void glDrawTexfvOES_enc(void *self , const GLfloat* coords) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_coords = (5 * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + __size_coords + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_coords + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDrawTexfvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_coords; ptr += 4; memcpy(ptr, coords, __size_coords);ptr += __size_coords; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glEGLImageTargetTexture2DOES_enc(void *self , GLenum target, GLeglImageOES image) @@ -2941,15 +4827,25 @@ void glEGLImageTargetTexture2DOES_enc(void *self , GLenum target, GLeglImageOES gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glEGLImageTargetTexture2DOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &image, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glEGLImageTargetRenderbufferStorageOES_enc(void *self , GLenum target, GLeglImageOES image) @@ -2957,15 +4853,25 @@ void glEGLImageTargetRenderbufferStorageOES_enc(void *self , GLenum target, GLeg gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glEGLImageTargetRenderbufferStorageOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &image, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glAlphaFuncxOES_enc(void *self , GLenum func, GLclampx ref) @@ -2973,15 +4879,25 @@ void glAlphaFuncxOES_enc(void *self , GLenum func, GLclampx ref) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glAlphaFuncxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &func, 4); ptr += 4; memcpy(ptr, &ref, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glClearColorxOES_enc(void *self , GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha) @@ -2989,17 +4905,27 @@ void glClearColorxOES_enc(void *self , GLclampx red, GLclampx green, GLclampx bl gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClearColorxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &red, 4); ptr += 4; memcpy(ptr, &green, 4); ptr += 4; memcpy(ptr, &blue, 4); ptr += 4; memcpy(ptr, &alpha, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glClearDepthxOES_enc(void *self , GLclampx depth) @@ -3007,14 +4933,24 @@ void glClearDepthxOES_enc(void *self , GLclampx depth) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClearDepthxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &depth, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glClipPlanexOES_enc(void *self , GLenum plane, const GLfixed* equation) @@ -3022,17 +4958,27 @@ void glClipPlanexOES_enc(void *self , GLenum plane, const GLfixed* equation) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_equation = (4 * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_equation + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_equation + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClipPlanexOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &plane, 4); ptr += 4; *(unsigned int *)(ptr) = __size_equation; ptr += 4; memcpy(ptr, equation, __size_equation);ptr += __size_equation; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glClipPlanexIMG_enc(void *self , GLenum plane, const GLfixed* equation) @@ -3040,17 +4986,27 @@ void glClipPlanexIMG_enc(void *self , GLenum plane, const GLfixed* equation) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_equation = (4 * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_equation + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_equation + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClipPlanexIMG;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &plane, 4); ptr += 4; *(unsigned int *)(ptr) = __size_equation; ptr += 4; memcpy(ptr, equation, __size_equation);ptr += __size_equation; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glColor4xOES_enc(void *self , GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) @@ -3058,17 +5014,27 @@ void glColor4xOES_enc(void *self , GLfixed red, GLfixed green, GLfixed blue, GLf gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glColor4xOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &red, 4); ptr += 4; memcpy(ptr, &green, 4); ptr += 4; memcpy(ptr, &blue, 4); ptr += 4; memcpy(ptr, &alpha, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDepthRangexOES_enc(void *self , GLclampx zNear, GLclampx zFar) @@ -3076,15 +5042,25 @@ void glDepthRangexOES_enc(void *self , GLclampx zNear, GLclampx zFar) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDepthRangexOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &zNear, 4); ptr += 4; memcpy(ptr, &zFar, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glFogxOES_enc(void *self , GLenum pname, GLfixed param) @@ -3092,15 +5068,25 @@ void glFogxOES_enc(void *self , GLenum pname, GLfixed param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFogxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glFogxvOES_enc(void *self , GLenum pname, const GLfixed* params) @@ -3108,17 +5094,27 @@ void glFogxvOES_enc(void *self , GLenum pname, const GLfixed* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFogxvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glFrustumxOES_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar) @@ -3126,12 +5122,18 @@ void glFrustumxOES_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFrustumxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &left, 4); ptr += 4; memcpy(ptr, &right, 4); ptr += 4; @@ -3139,6 +5141,10 @@ void glFrustumxOES_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, memcpy(ptr, &top, 4); ptr += 4; memcpy(ptr, &zNear, 4); ptr += 4; memcpy(ptr, &zFar, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGetClipPlanexOES_enc(void *self , GLenum pname, GLfixed* eqn) @@ -3146,17 +5152,36 @@ void glGetClipPlanexOES_enc(void *self , GLenum pname, GLfixed* eqn) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_eqn = (4 * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_eqn + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_eqn + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetClipPlanexOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_eqn; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(eqn, __size_eqn); + if (useChecksum) checksumCalculator->addBuffer(eqn, __size_eqn); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetClipPlanexOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetClipPlanex_enc(void *self , GLenum pname, GLfixed* eqn) @@ -3164,17 +5189,36 @@ void glGetClipPlanex_enc(void *self , GLenum pname, GLfixed* eqn) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_eqn = (4 * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_eqn + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_eqn + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetClipPlanex;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_eqn; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(eqn, __size_eqn); + if (useChecksum) checksumCalculator->addBuffer(eqn, __size_eqn); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetClipPlanex: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetFixedvOES_enc(void *self , GLenum pname, GLfixed* params) @@ -3182,17 +5226,36 @@ void glGetFixedvOES_enc(void *self , GLenum pname, GLfixed* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetFixedvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetFixedvOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetLightxvOES_enc(void *self , GLenum light, GLenum pname, GLfixed* params) @@ -3200,18 +5263,37 @@ void glGetLightxvOES_enc(void *self , GLenum light, GLenum pname, GLfixed* param gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetLightxvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &light, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetLightxvOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetMaterialxvOES_enc(void *self , GLenum face, GLenum pname, GLfixed* params) @@ -3219,18 +5301,37 @@ void glGetMaterialxvOES_enc(void *self , GLenum face, GLenum pname, GLfixed* par gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetMaterialxvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &face, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetMaterialxvOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetTexEnvxvOES_enc(void *self , GLenum env, GLenum pname, GLfixed* params) @@ -3238,18 +5339,37 @@ void glGetTexEnvxvOES_enc(void *self , GLenum env, GLenum pname, GLfixed* params gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetTexEnvxvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &env, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetTexEnvxvOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetTexParameterxvOES_enc(void *self , GLenum target, GLenum pname, GLfixed* params) @@ -3257,18 +5377,37 @@ void glGetTexParameterxvOES_enc(void *self , GLenum target, GLenum pname, GLfixe gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetTexParameterxvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetTexParameterxvOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glLightModelxOES_enc(void *self , GLenum pname, GLfixed param) @@ -3276,15 +5415,25 @@ void glLightModelxOES_enc(void *self , GLenum pname, GLfixed param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLightModelxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLightModelxvOES_enc(void *self , GLenum pname, const GLfixed* params) @@ -3292,17 +5441,27 @@ void glLightModelxvOES_enc(void *self , GLenum pname, const GLfixed* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLightModelxvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLightxOES_enc(void *self , GLenum light, GLenum pname, GLfixed param) @@ -3310,16 +5469,26 @@ void glLightxOES_enc(void *self , GLenum light, GLenum pname, GLfixed param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLightxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &light, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLightxvOES_enc(void *self , GLenum light, GLenum pname, const GLfixed* params) @@ -3327,18 +5496,28 @@ void glLightxvOES_enc(void *self , GLenum light, GLenum pname, const GLfixed* pa gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLightxvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &light, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLineWidthxOES_enc(void *self , GLfixed width) @@ -3346,14 +5525,24 @@ void glLineWidthxOES_enc(void *self , GLfixed width) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLineWidthxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLoadMatrixxOES_enc(void *self , const GLfixed* m) @@ -3361,16 +5550,26 @@ void glLoadMatrixxOES_enc(void *self , const GLfixed* m) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_m = (16 * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + __size_m + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_m + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLoadMatrixxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_m; ptr += 4; memcpy(ptr, m, __size_m);ptr += __size_m; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glMaterialxOES_enc(void *self , GLenum face, GLenum pname, GLfixed param) @@ -3378,16 +5577,26 @@ void glMaterialxOES_enc(void *self , GLenum face, GLenum pname, GLfixed param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glMaterialxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &face, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glMaterialxvOES_enc(void *self , GLenum face, GLenum pname, const GLfixed* params) @@ -3395,18 +5604,28 @@ void glMaterialxvOES_enc(void *self , GLenum face, GLenum pname, const GLfixed* gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glMaterialxvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &face, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glMultMatrixxOES_enc(void *self , const GLfixed* m) @@ -3414,16 +5633,26 @@ void glMultMatrixxOES_enc(void *self , const GLfixed* m) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_m = (16 * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + __size_m + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_m + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glMultMatrixxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_m; ptr += 4; memcpy(ptr, m, __size_m);ptr += __size_m; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glMultiTexCoord4xOES_enc(void *self , GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q) @@ -3431,18 +5660,28 @@ void glMultiTexCoord4xOES_enc(void *self , GLenum target, GLfixed s, GLfixed t, gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glMultiTexCoord4xOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &s, 4); ptr += 4; memcpy(ptr, &t, 4); ptr += 4; memcpy(ptr, &r, 4); ptr += 4; memcpy(ptr, &q, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glNormal3xOES_enc(void *self , GLfixed nx, GLfixed ny, GLfixed nz) @@ -3450,16 +5689,26 @@ void glNormal3xOES_enc(void *self , GLfixed nx, GLfixed ny, GLfixed nz) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glNormal3xOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &nx, 4); ptr += 4; memcpy(ptr, &ny, 4); ptr += 4; memcpy(ptr, &nz, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glOrthoxOES_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar) @@ -3467,12 +5716,18 @@ void glOrthoxOES_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, G gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glOrthoxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &left, 4); ptr += 4; memcpy(ptr, &right, 4); ptr += 4; @@ -3480,6 +5735,10 @@ void glOrthoxOES_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, G memcpy(ptr, &top, 4); ptr += 4; memcpy(ptr, &zNear, 4); ptr += 4; memcpy(ptr, &zFar, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPointParameterxOES_enc(void *self , GLenum pname, GLfixed param) @@ -3487,15 +5746,25 @@ void glPointParameterxOES_enc(void *self , GLenum pname, GLfixed param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPointParameterxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPointParameterxvOES_enc(void *self , GLenum pname, const GLfixed* params) @@ -3503,17 +5772,27 @@ void glPointParameterxvOES_enc(void *self , GLenum pname, const GLfixed* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPointParameterxvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPointSizexOES_enc(void *self , GLfixed size) @@ -3521,14 +5800,24 @@ void glPointSizexOES_enc(void *self , GLfixed size) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPointSizexOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPolygonOffsetxOES_enc(void *self , GLfixed factor, GLfixed units) @@ -3536,15 +5825,25 @@ void glPolygonOffsetxOES_enc(void *self , GLfixed factor, GLfixed units) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPolygonOffsetxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &factor, 4); ptr += 4; memcpy(ptr, &units, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glRotatexOES_enc(void *self , GLfixed angle, GLfixed x, GLfixed y, GLfixed z) @@ -3552,17 +5851,27 @@ void glRotatexOES_enc(void *self , GLfixed angle, GLfixed x, GLfixed y, GLfixed gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glRotatexOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &angle, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glSampleCoveragexOES_enc(void *self , GLclampx value, GLboolean invert) @@ -3570,15 +5879,25 @@ void glSampleCoveragexOES_enc(void *self , GLclampx value, GLboolean invert) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 1; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 1; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glSampleCoveragexOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &value, 4); ptr += 4; memcpy(ptr, &invert, 1); ptr += 1; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glScalexOES_enc(void *self , GLfixed x, GLfixed y, GLfixed z) @@ -3586,16 +5905,26 @@ void glScalexOES_enc(void *self , GLfixed x, GLfixed y, GLfixed z) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glScalexOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexEnvxOES_enc(void *self , GLenum target, GLenum pname, GLfixed param) @@ -3603,16 +5932,26 @@ void glTexEnvxOES_enc(void *self , GLenum target, GLenum pname, GLfixed param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexEnvxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexEnvxvOES_enc(void *self , GLenum target, GLenum pname, const GLfixed* params) @@ -3620,18 +5959,28 @@ void glTexEnvxvOES_enc(void *self , GLenum target, GLenum pname, const GLfixed* gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexEnvxvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexParameterxOES_enc(void *self , GLenum target, GLenum pname, GLfixed param) @@ -3639,16 +5988,26 @@ void glTexParameterxOES_enc(void *self , GLenum target, GLenum pname, GLfixed pa gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexParameterxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexParameterxvOES_enc(void *self , GLenum target, GLenum pname, const GLfixed* params) @@ -3656,18 +6015,28 @@ void glTexParameterxvOES_enc(void *self , GLenum target, GLenum pname, const GLf gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexParameterxvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTranslatexOES_enc(void *self , GLfixed x, GLfixed y, GLfixed z) @@ -3675,16 +6044,26 @@ void glTranslatexOES_enc(void *self , GLfixed x, GLfixed y, GLfixed z) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTranslatexOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } GLboolean glIsRenderbufferOES_enc(void *self , GLuint renderbuffer) @@ -3692,17 +6071,36 @@ GLboolean glIsRenderbufferOES_enc(void *self , GLuint renderbuffer) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glIsRenderbufferOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &renderbuffer, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glIsRenderbufferOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -3711,15 +6109,25 @@ void glBindRenderbufferOES_enc(void *self , GLenum target, GLuint renderbuffer) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBindRenderbufferOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &renderbuffer, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDeleteRenderbuffersOES_enc(void *self , GLsizei n, const GLuint* renderbuffers) @@ -3727,17 +6135,27 @@ void glDeleteRenderbuffersOES_enc(void *self , GLsizei n, const GLuint* renderbu gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_renderbuffers = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_renderbuffers + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_renderbuffers + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDeleteRenderbuffersOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_renderbuffers; ptr += 4; memcpy(ptr, renderbuffers, __size_renderbuffers);ptr += __size_renderbuffers; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGenRenderbuffersOES_enc(void *self , GLsizei n, GLuint* renderbuffers) @@ -3745,17 +6163,36 @@ void glGenRenderbuffersOES_enc(void *self , GLsizei n, GLuint* renderbuffers) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_renderbuffers = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_renderbuffers + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_renderbuffers + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGenRenderbuffersOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_renderbuffers; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(renderbuffers, __size_renderbuffers); + if (useChecksum) checksumCalculator->addBuffer(renderbuffers, __size_renderbuffers); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGenRenderbuffersOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glRenderbufferStorageOES_enc(void *self , GLenum target, GLenum internalformat, GLsizei width, GLsizei height) @@ -3763,17 +6200,27 @@ void glRenderbufferStorageOES_enc(void *self , GLenum target, GLenum internalfor gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glRenderbufferStorageOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &internalformat, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGetRenderbufferParameterivOES_enc(void *self , GLenum target, GLenum pname, GLint* params) @@ -3781,18 +6228,37 @@ void glGetRenderbufferParameterivOES_enc(void *self , GLenum target, GLenum pnam gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetRenderbufferParameterivOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetRenderbufferParameterivOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } GLboolean glIsFramebufferOES_enc(void *self , GLuint framebuffer) @@ -3800,17 +6266,36 @@ GLboolean glIsFramebufferOES_enc(void *self , GLuint framebuffer) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glIsFramebufferOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &framebuffer, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glIsFramebufferOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -3819,15 +6304,25 @@ void glBindFramebufferOES_enc(void *self , GLenum target, GLuint framebuffer) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBindFramebufferOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &framebuffer, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDeleteFramebuffersOES_enc(void *self , GLsizei n, const GLuint* framebuffers) @@ -3835,17 +6330,27 @@ void glDeleteFramebuffersOES_enc(void *self , GLsizei n, const GLuint* framebuff gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_framebuffers = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_framebuffers + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_framebuffers + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDeleteFramebuffersOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_framebuffers; ptr += 4; memcpy(ptr, framebuffers, __size_framebuffers);ptr += __size_framebuffers; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGenFramebuffersOES_enc(void *self , GLsizei n, GLuint* framebuffers) @@ -3853,17 +6358,36 @@ void glGenFramebuffersOES_enc(void *self , GLsizei n, GLuint* framebuffers) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_framebuffers = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_framebuffers + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_framebuffers + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGenFramebuffersOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_framebuffers; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(framebuffers, __size_framebuffers); + if (useChecksum) checksumCalculator->addBuffer(framebuffers, __size_framebuffers); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGenFramebuffersOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } GLenum glCheckFramebufferStatusOES_enc(void *self , GLenum target) @@ -3871,17 +6395,36 @@ GLenum glCheckFramebufferStatusOES_enc(void *self , GLenum target) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glCheckFramebufferStatusOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLenum retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glCheckFramebufferStatusOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -3890,17 +6433,27 @@ void glFramebufferRenderbufferOES_enc(void *self , GLenum target, GLenum attachm gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFramebufferRenderbufferOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &attachment, 4); ptr += 4; memcpy(ptr, &renderbuffertarget, 4); ptr += 4; memcpy(ptr, &renderbuffer, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glFramebufferTexture2DOES_enc(void *self , GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) @@ -3908,18 +6461,28 @@ void glFramebufferTexture2DOES_enc(void *self , GLenum target, GLenum attachment gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFramebufferTexture2DOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &attachment, 4); ptr += 4; memcpy(ptr, &textarget, 4); ptr += 4; memcpy(ptr, &texture, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGetFramebufferAttachmentParameterivOES_enc(void *self , GLenum target, GLenum attachment, GLenum pname, GLint* params) @@ -3927,19 +6490,38 @@ void glGetFramebufferAttachmentParameterivOES_enc(void *self , GLenum target, GL gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetFramebufferAttachmentParameterivOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &attachment, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetFramebufferAttachmentParameterivOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGenerateMipmapOES_enc(void *self , GLenum target) @@ -3947,14 +6529,24 @@ void glGenerateMipmapOES_enc(void *self , GLenum target) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGenerateMipmapOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } GLboolean glUnmapBufferOES_enc(void *self , GLenum target) @@ -3962,17 +6554,36 @@ GLboolean glUnmapBufferOES_enc(void *self , GLenum target) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUnmapBufferOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glUnmapBufferOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -3981,14 +6592,24 @@ void glCurrentPaletteMatrixOES_enc(void *self , GLuint matrixpaletteindex) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glCurrentPaletteMatrixOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &matrixpaletteindex, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLoadPaletteFromModelViewMatrixOES_enc(void *self ) @@ -3996,12 +6617,22 @@ void glLoadPaletteFromModelViewMatrixOES_enc(void *self ) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLoadPaletteFromModelViewMatrixOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; } @@ -4010,22 +6641,43 @@ GLbitfield glQueryMatrixxOES_enc(void *self , GLfixed* mantissa, GLint* exponent gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_mantissa = (16 * sizeof(GLfixed)); const unsigned int __size_exponent = (16 * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + __size_mantissa + __size_exponent + 2*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_mantissa + __size_exponent + 2*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glQueryMatrixxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_mantissa; ptr += 4; *(unsigned int *)(ptr) = __size_exponent; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(mantissa, __size_mantissa); + if (useChecksum) checksumCalculator->addBuffer(mantissa, __size_mantissa); stream->readback(exponent, __size_exponent); + if (useChecksum) checksumCalculator->addBuffer(exponent, __size_exponent); GLbitfield retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glQueryMatrixxOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -4034,15 +6686,25 @@ void glDepthRangefOES_enc(void *self , GLclampf zNear, GLclampf zFar) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDepthRangefOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &zNear, 4); ptr += 4; memcpy(ptr, &zFar, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glFrustumfOES_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) @@ -4050,12 +6712,18 @@ void glFrustumfOES_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFrustumfOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &left, 4); ptr += 4; memcpy(ptr, &right, 4); ptr += 4; @@ -4063,6 +6731,10 @@ void glFrustumfOES_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, memcpy(ptr, &top, 4); ptr += 4; memcpy(ptr, &zNear, 4); ptr += 4; memcpy(ptr, &zFar, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glOrthofOES_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) @@ -4070,12 +6742,18 @@ void glOrthofOES_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, G gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glOrthofOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &left, 4); ptr += 4; memcpy(ptr, &right, 4); ptr += 4; @@ -4083,6 +6761,10 @@ void glOrthofOES_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, G memcpy(ptr, &top, 4); ptr += 4; memcpy(ptr, &zNear, 4); ptr += 4; memcpy(ptr, &zFar, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glClipPlanefOES_enc(void *self , GLenum plane, const GLfloat* equation) @@ -4090,17 +6772,27 @@ void glClipPlanefOES_enc(void *self , GLenum plane, const GLfloat* equation) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_equation = (4 * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_equation + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_equation + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClipPlanefOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &plane, 4); ptr += 4; *(unsigned int *)(ptr) = __size_equation; ptr += 4; memcpy(ptr, equation, __size_equation);ptr += __size_equation; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glClipPlanefIMG_enc(void *self , GLenum plane, const GLfloat* equation) @@ -4108,17 +6800,27 @@ void glClipPlanefIMG_enc(void *self , GLenum plane, const GLfloat* equation) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_equation = (4 * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_equation + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_equation + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClipPlanefIMG;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &plane, 4); ptr += 4; *(unsigned int *)(ptr) = __size_equation; ptr += 4; memcpy(ptr, equation, __size_equation);ptr += __size_equation; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGetClipPlanefOES_enc(void *self , GLenum pname, GLfloat* eqn) @@ -4126,17 +6828,36 @@ void glGetClipPlanefOES_enc(void *self , GLenum pname, GLfloat* eqn) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_eqn = (4 * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_eqn + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_eqn + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetClipPlanefOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_eqn; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(eqn, __size_eqn); + if (useChecksum) checksumCalculator->addBuffer(eqn, __size_eqn); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetClipPlanefOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glClearDepthfOES_enc(void *self , GLclampf depth) @@ -4144,14 +6865,24 @@ void glClearDepthfOES_enc(void *self , GLclampf depth) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClearDepthfOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &depth, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexGenfOES_enc(void *self , GLenum coord, GLenum pname, GLfloat param) @@ -4159,16 +6890,26 @@ void glTexGenfOES_enc(void *self , GLenum coord, GLenum pname, GLfloat param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexGenfOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &coord, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexGenfvOES_enc(void *self , GLenum coord, GLenum pname, const GLfloat* params) @@ -4176,18 +6917,28 @@ void glTexGenfvOES_enc(void *self , GLenum coord, GLenum pname, const GLfloat* p gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexGenfvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &coord, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexGeniOES_enc(void *self , GLenum coord, GLenum pname, GLint param) @@ -4195,16 +6946,26 @@ void glTexGeniOES_enc(void *self , GLenum coord, GLenum pname, GLint param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexGeniOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &coord, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexGenivOES_enc(void *self , GLenum coord, GLenum pname, const GLint* params) @@ -4212,18 +6973,28 @@ void glTexGenivOES_enc(void *self , GLenum coord, GLenum pname, const GLint* par gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexGenivOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &coord, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexGenxOES_enc(void *self , GLenum coord, GLenum pname, GLfixed param) @@ -4231,16 +7002,26 @@ void glTexGenxOES_enc(void *self , GLenum coord, GLenum pname, GLfixed param) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexGenxOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &coord, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexGenxvOES_enc(void *self , GLenum coord, GLenum pname, const GLfixed* params) @@ -4248,18 +7029,28 @@ void glTexGenxvOES_enc(void *self , GLenum coord, GLenum pname, const GLfixed* p gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexGenxvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &coord, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGetTexGenfvOES_enc(void *self , GLenum coord, GLenum pname, GLfloat* params) @@ -4267,18 +7058,28 @@ void glGetTexGenfvOES_enc(void *self , GLenum coord, GLenum pname, GLfloat* para gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetTexGenfvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &coord, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGetTexGenivOES_enc(void *self , GLenum coord, GLenum pname, GLint* params) @@ -4286,18 +7087,28 @@ void glGetTexGenivOES_enc(void *self , GLenum coord, GLenum pname, GLint* params gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetTexGenivOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &coord, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGetTexGenxvOES_enc(void *self , GLenum coord, GLenum pname, GLfixed* params) @@ -4305,18 +7116,28 @@ void glGetTexGenxvOES_enc(void *self , GLenum coord, GLenum pname, GLfixed* para gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfixed)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetTexGenxvOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &coord, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBindVertexArrayOES_enc(void *self , GLuint array) @@ -4324,14 +7145,24 @@ void glBindVertexArrayOES_enc(void *self , GLuint array) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBindVertexArrayOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &array, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDeleteVertexArraysOES_enc(void *self , GLsizei n, const GLuint* arrays) @@ -4339,17 +7170,27 @@ void glDeleteVertexArraysOES_enc(void *self , GLsizei n, const GLuint* arrays) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_arrays = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_arrays + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_arrays + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDeleteVertexArraysOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_arrays; ptr += 4; memcpy(ptr, arrays, __size_arrays);ptr += __size_arrays; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGenVertexArraysOES_enc(void *self , GLsizei n, GLuint* arrays) @@ -4357,17 +7198,36 @@ void glGenVertexArraysOES_enc(void *self , GLsizei n, GLuint* arrays) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_arrays = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_arrays + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_arrays + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGenVertexArraysOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_arrays; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(arrays, __size_arrays); + if (useChecksum) checksumCalculator->addBuffer(arrays, __size_arrays); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGenVertexArraysOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } GLboolean glIsVertexArrayOES_enc(void *self , GLuint array) @@ -4375,17 +7235,36 @@ GLboolean glIsVertexArrayOES_enc(void *self , GLuint array) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glIsVertexArrayOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &array, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glIsVertexArrayOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -4394,18 +7273,28 @@ void glDiscardFramebufferEXT_enc(void *self , GLenum target, GLsizei numAttachme gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_attachments = (numAttachments * sizeof(const GLenum)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_attachments + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_attachments + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDiscardFramebufferEXT;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &numAttachments, 4); ptr += 4; *(unsigned int *)(ptr) = __size_attachments; ptr += 4; memcpy(ptr, attachments, __size_attachments);ptr += __size_attachments; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glRenderbufferStorageMultisampleIMG_enc(void *self , GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) @@ -4413,18 +7302,28 @@ void glRenderbufferStorageMultisampleIMG_enc(void *self , GLenum target, GLsizei gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glRenderbufferStorageMultisampleIMG;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &samples, 4); ptr += 4; memcpy(ptr, &internalformat, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glFramebufferTexture2DMultisampleIMG_enc(void *self , GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) @@ -4432,12 +7331,18 @@ void glFramebufferTexture2DMultisampleIMG_enc(void *self , GLenum target, GLenum gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFramebufferTexture2DMultisampleIMG;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &attachment, 4); ptr += 4; @@ -4445,6 +7350,10 @@ void glFramebufferTexture2DMultisampleIMG_enc(void *self , GLenum target, GLenum memcpy(ptr, &texture, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; memcpy(ptr, &samples, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDeleteFencesNV_enc(void *self , GLsizei n, const GLuint* fences) @@ -4452,17 +7361,27 @@ void glDeleteFencesNV_enc(void *self , GLsizei n, const GLuint* fences) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_fences = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_fences + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_fences + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDeleteFencesNV;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_fences; ptr += 4; memcpy(ptr, fences, __size_fences);ptr += __size_fences; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGenFencesNV_enc(void *self , GLsizei n, GLuint* fences) @@ -4470,17 +7389,27 @@ void glGenFencesNV_enc(void *self , GLsizei n, GLuint* fences) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_fences = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_fences + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_fences + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGenFencesNV;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_fences; ptr += 4; memcpy(ptr, fences, __size_fences);ptr += __size_fences; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } GLboolean glIsFenceNV_enc(void *self , GLuint fence) @@ -4488,17 +7417,36 @@ GLboolean glIsFenceNV_enc(void *self , GLuint fence) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glIsFenceNV;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &fence, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glIsFenceNV: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -4507,17 +7455,36 @@ GLboolean glTestFenceNV_enc(void *self , GLuint fence) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTestFenceNV;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &fence, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glTestFenceNV: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -4526,18 +7493,37 @@ void glGetFenceivNV_enc(void *self , GLuint fence, GLenum pname, GLint* params) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetFenceivNV;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &fence, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetFenceivNV: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glFinishFenceNV_enc(void *self , GLuint fence) @@ -4545,14 +7531,24 @@ void glFinishFenceNV_enc(void *self , GLuint fence) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFinishFenceNV;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &fence, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glSetFenceNV_enc(void *self , GLuint fence, GLenum condition) @@ -4560,15 +7556,25 @@ void glSetFenceNV_enc(void *self , GLuint fence, GLenum condition) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glSetFenceNV;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &fence, 4); ptr += 4; memcpy(ptr, &condition, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGetDriverControlsQCOM_enc(void *self , GLint* num, GLsizei size, GLuint* driverControls) @@ -4576,20 +7582,40 @@ void glGetDriverControlsQCOM_enc(void *self , GLint* num, GLsizei size, GLuint* gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_num = (1 * sizeof(GLint)); const unsigned int __size_driverControls = (size * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + __size_num + 4 + __size_driverControls + 2*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_num + 4 + __size_driverControls + 2*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetDriverControlsQCOM;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_num; ptr += 4; memcpy(ptr, &size, 4); ptr += 4; *(unsigned int *)(ptr) = __size_driverControls; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(num, __size_num); + if (useChecksum) checksumCalculator->addBuffer(num, __size_num); stream->readback(driverControls, __size_driverControls); + if (useChecksum) checksumCalculator->addBuffer(driverControls, __size_driverControls); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetDriverControlsQCOM: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetDriverControlStringQCOM_enc(void *self , GLuint driverControl, GLsizei bufSize, GLsizei* length, GLchar* driverControlString) @@ -4597,21 +7623,41 @@ void glGetDriverControlStringQCOM_enc(void *self , GLuint driverControl, GLsizei gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_length = (1 * sizeof(GLsizei)); const unsigned int __size_driverControlString = (1 * sizeof(GLchar)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_length + __size_driverControlString + 2*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_length + __size_driverControlString + 2*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetDriverControlStringQCOM;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &driverControl, 4); ptr += 4; memcpy(ptr, &bufSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_length; ptr += 4; *(unsigned int *)(ptr) = __size_driverControlString; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(length, __size_length); + if (useChecksum) checksumCalculator->addBuffer(length, __size_length); stream->readback(driverControlString, __size_driverControlString); + if (useChecksum) checksumCalculator->addBuffer(driverControlString, __size_driverControlString); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetDriverControlStringQCOM: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glEnableDriverControlQCOM_enc(void *self , GLuint driverControl) @@ -4619,14 +7665,24 @@ void glEnableDriverControlQCOM_enc(void *self , GLuint driverControl) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glEnableDriverControlQCOM;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &driverControl, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDisableDriverControlQCOM_enc(void *self , GLuint driverControl) @@ -4634,14 +7690,24 @@ void glDisableDriverControlQCOM_enc(void *self , GLuint driverControl) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDisableDriverControlQCOM;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &driverControl, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glExtGetTexturesQCOM_enc(void *self , GLuint* textures, GLint maxTextures, GLint* numTextures) @@ -4649,20 +7715,40 @@ void glExtGetTexturesQCOM_enc(void *self , GLuint* textures, GLint maxTextures, gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_textures = (maxTextures * sizeof(GLuint)); const unsigned int __size_numTextures = (1 * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + __size_textures + 4 + __size_numTextures + 2*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_textures + 4 + __size_numTextures + 2*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glExtGetTexturesQCOM;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_textures; ptr += 4; memcpy(ptr, &maxTextures, 4); ptr += 4; *(unsigned int *)(ptr) = __size_numTextures; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(textures, __size_textures); + if (useChecksum) checksumCalculator->addBuffer(textures, __size_textures); stream->readback(numTextures, __size_numTextures); + if (useChecksum) checksumCalculator->addBuffer(numTextures, __size_numTextures); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glExtGetTexturesQCOM: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glExtGetBuffersQCOM_enc(void *self , GLuint* buffers, GLint maxBuffers, GLint* numBuffers) @@ -4670,20 +7756,40 @@ void glExtGetBuffersQCOM_enc(void *self , GLuint* buffers, GLint maxBuffers, GLi gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_buffers = (maxBuffers * sizeof(GLuint)); const unsigned int __size_numBuffers = (1 * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + __size_buffers + 4 + __size_numBuffers + 2*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_buffers + 4 + __size_numBuffers + 2*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glExtGetBuffersQCOM;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_buffers; ptr += 4; memcpy(ptr, &maxBuffers, 4); ptr += 4; *(unsigned int *)(ptr) = __size_numBuffers; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(buffers, __size_buffers); + if (useChecksum) checksumCalculator->addBuffer(buffers, __size_buffers); stream->readback(numBuffers, __size_numBuffers); + if (useChecksum) checksumCalculator->addBuffer(numBuffers, __size_numBuffers); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glExtGetBuffersQCOM: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glExtGetRenderbuffersQCOM_enc(void *self , GLuint* renderbuffers, GLint maxRenderbuffers, GLint* numRenderbuffers) @@ -4691,20 +7797,40 @@ void glExtGetRenderbuffersQCOM_enc(void *self , GLuint* renderbuffers, GLint max gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_renderbuffers = (maxRenderbuffers * sizeof(GLuint)); const unsigned int __size_numRenderbuffers = (1 * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + __size_renderbuffers + 4 + __size_numRenderbuffers + 2*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_renderbuffers + 4 + __size_numRenderbuffers + 2*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glExtGetRenderbuffersQCOM;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_renderbuffers; ptr += 4; memcpy(ptr, &maxRenderbuffers, 4); ptr += 4; *(unsigned int *)(ptr) = __size_numRenderbuffers; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(renderbuffers, __size_renderbuffers); + if (useChecksum) checksumCalculator->addBuffer(renderbuffers, __size_renderbuffers); stream->readback(numRenderbuffers, __size_numRenderbuffers); + if (useChecksum) checksumCalculator->addBuffer(numRenderbuffers, __size_numRenderbuffers); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glExtGetRenderbuffersQCOM: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glExtGetFramebuffersQCOM_enc(void *self , GLuint* framebuffers, GLint maxFramebuffers, GLint* numFramebuffers) @@ -4712,20 +7838,40 @@ void glExtGetFramebuffersQCOM_enc(void *self , GLuint* framebuffers, GLint maxFr gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_framebuffers = (maxFramebuffers * sizeof(GLuint)); const unsigned int __size_numFramebuffers = (1 * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + __size_framebuffers + 4 + __size_numFramebuffers + 2*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_framebuffers + 4 + __size_numFramebuffers + 2*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glExtGetFramebuffersQCOM;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_framebuffers; ptr += 4; memcpy(ptr, &maxFramebuffers, 4); ptr += 4; *(unsigned int *)(ptr) = __size_numFramebuffers; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(framebuffers, __size_framebuffers); + if (useChecksum) checksumCalculator->addBuffer(framebuffers, __size_framebuffers); stream->readback(numFramebuffers, __size_numFramebuffers); + if (useChecksum) checksumCalculator->addBuffer(numFramebuffers, __size_numFramebuffers); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glExtGetFramebuffersQCOM: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glExtGetTexLevelParameterivQCOM_enc(void *self , GLuint texture, GLenum face, GLint level, GLenum pname, GLint* params) @@ -4733,20 +7879,39 @@ void glExtGetTexLevelParameterivQCOM_enc(void *self , GLuint texture, GLenum fac gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glExtGetTexLevelParameterivQCOM;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &texture, 4); ptr += 4; memcpy(ptr, &face, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glExtGetTexLevelParameterivQCOM: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glExtTexObjectStateOverrideiQCOM_enc(void *self , GLenum target, GLenum pname, GLint param) @@ -4754,16 +7919,26 @@ void glExtTexObjectStateOverrideiQCOM_enc(void *self , GLenum target, GLenum pna gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glExtTexObjectStateOverrideiQCOM;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glExtGetTexSubImageQCOM_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid* texels) @@ -4771,13 +7946,19 @@ void glExtGetTexSubImageQCOM_enc(void *self , GLenum target, GLint level, GLint gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_texels = (depth * glesv1_enc::pixelDataSize(self, width, height, format, type, 0)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_texels + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_texels + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glExtGetTexSubImageQCOM;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -4790,7 +7971,20 @@ void glExtGetTexSubImageQCOM_enc(void *self , GLenum target, GLint level, GLint memcpy(ptr, &format, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; *(unsigned int *)(ptr) = __size_texels; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(texels, __size_texels); + if (useChecksum) checksumCalculator->addBuffer(texels, __size_texels); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glExtGetTexSubImageQCOM: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glExtGetShadersQCOM_enc(void *self , GLuint* shaders, GLint maxShaders, GLint* numShaders) @@ -4798,20 +7992,40 @@ void glExtGetShadersQCOM_enc(void *self , GLuint* shaders, GLint maxShaders, GLi gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_shaders = (maxShaders * sizeof(GLuint)); const unsigned int __size_numShaders = (1 * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + __size_shaders + 4 + __size_numShaders + 2*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_shaders + 4 + __size_numShaders + 2*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glExtGetShadersQCOM;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_shaders; ptr += 4; memcpy(ptr, &maxShaders, 4); ptr += 4; *(unsigned int *)(ptr) = __size_numShaders; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(shaders, __size_shaders); + if (useChecksum) checksumCalculator->addBuffer(shaders, __size_shaders); stream->readback(numShaders, __size_numShaders); + if (useChecksum) checksumCalculator->addBuffer(numShaders, __size_numShaders); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glExtGetShadersQCOM: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glExtGetProgramsQCOM_enc(void *self , GLuint* programs, GLint maxPrograms, GLint* numPrograms) @@ -4819,20 +8033,40 @@ void glExtGetProgramsQCOM_enc(void *self , GLuint* programs, GLint maxPrograms, gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_programs = (maxPrograms * sizeof(GLuint)); const unsigned int __size_numPrograms = (1 * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + __size_programs + 4 + __size_numPrograms + 2*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_programs + 4 + __size_numPrograms + 2*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glExtGetProgramsQCOM;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_programs; ptr += 4; memcpy(ptr, &maxPrograms, 4); ptr += 4; *(unsigned int *)(ptr) = __size_numPrograms; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(programs, __size_programs); + if (useChecksum) checksumCalculator->addBuffer(programs, __size_programs); stream->readback(numPrograms, __size_numPrograms); + if (useChecksum) checksumCalculator->addBuffer(numPrograms, __size_numPrograms); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glExtGetProgramsQCOM: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } GLboolean glExtIsProgramBinaryQCOM_enc(void *self , GLuint program) @@ -4840,17 +8074,36 @@ GLboolean glExtIsProgramBinaryQCOM_enc(void *self , GLuint program) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glExtIsProgramBinaryQCOM;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glExtIsProgramBinaryQCOM: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -4859,18 +8112,28 @@ void glStartTilingQCOM_enc(void *self , GLuint x, GLuint y, GLuint width, GLuint gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glStartTilingQCOM;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; memcpy(ptr, &preserveMask, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glEndTilingQCOM_enc(void *self , GLbitfield preserveMask) @@ -4878,21 +8141,32 @@ void glEndTilingQCOM_enc(void *self , GLbitfield preserveMask) gl_encoder_context_t *ctx = (gl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glEndTilingQCOM;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &preserveMask, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } } // namespace -gl_encoder_context_t::gl_encoder_context_t(IOStream *stream) +gl_encoder_context_t::gl_encoder_context_t(IOStream *stream, ChecksumCalculator *checksumCalculator) { m_stream = stream; + m_checksumCalculator = checksumCalculator; this->glAlphaFunc = &glAlphaFunc_enc; this->glClearColor = &glClearColor_enc; diff --git a/opengl/system/GLESv1_enc/gl_enc.h b/opengl/system/GLESv1_enc/gl_enc.h index 03ebb42..37de4c4 100644 --- a/opengl/system/GLESv1_enc/gl_enc.h +++ b/opengl/system/GLESv1_enc/gl_enc.h @@ -5,6 +5,7 @@ #define GUARD_gl_encoder_context_t #include "IOStream.h" +#include "ChecksumCalculator.h" #include "gl_client_context.h" @@ -14,8 +15,9 @@ struct gl_encoder_context_t : public gl_client_context_t { IOStream *m_stream; + ChecksumCalculator *m_checksumCalculator; - gl_encoder_context_t(IOStream *stream); + gl_encoder_context_t(IOStream *stream, ChecksumCalculator *checksumCalculator); }; #endif // GUARD_gl_encoder_context_t
\ No newline at end of file diff --git a/opengl/system/GLESv2/gl2.cpp b/opengl/system/GLESv2/gl2.cpp index e545779..5aaac5f 100644 --- a/opengl/system/GLESv2/gl2.cpp +++ b/opengl/system/GLESv2/gl2.cpp @@ -22,6 +22,7 @@ #include "ErrorLog.h" #include "gralloc_cb.h" #include "ThreadInfo.h" +#include "EGLImage.h" //XXX: fix this macro to get the context from fast tls path #define GET_CONTEXT GL2Encoder * ctx = getEGLThreadInfo()->hostConn->gl2Encoder(); @@ -48,31 +49,41 @@ static EGLClient_glesInterface * s_gl = NULL; } //GL extensions -void glEGLImageTargetTexture2DOES(void * self, GLenum target, GLeglImageOES image) +void glEGLImageTargetTexture2DOES(void * self, GLenum target, GLeglImageOES img) { (void)self; (void)target; - DBG("glEGLImageTargetTexture2DOES v2 target=%#x img=%p\n", target, image); - //TODO: check error - we don't have a way to set gl error - android_native_buffer_t* native_buffer = (android_native_buffer_t*)image; + DBG("glEGLImageTargetTexture2DOES v2 target=%#x img=%p\n", target, img); - if (native_buffer->common.magic != ANDROID_NATIVE_BUFFER_MAGIC) { - return; - } + EGLImage_t *image = (EGLImage_t*)img; - if (native_buffer->common.version != sizeof(android_native_buffer_t)) { - return; - } + if (image->target == EGL_NATIVE_BUFFER_ANDROID) { + //TODO: check error - we don't have a way to set gl error + android_native_buffer_t* native_buffer = image->native_buffer; - GET_CONTEXT; - DEFINE_AND_VALIDATE_HOST_CONNECTION(); + if (native_buffer->common.magic != ANDROID_NATIVE_BUFFER_MAGIC) { + return; + } + + if (native_buffer->common.version != sizeof(android_native_buffer_t)) { + return; + } - ctx->override2DTextureTarget(target); - rcEnc->rcBindTexture(rcEnc, ((cb_handle_t *)(native_buffer->handle))->hostHandle); - ctx->restore2DTextureTarget(); + GET_CONTEXT; + DEFINE_AND_VALIDATE_HOST_CONNECTION(); - return; + ctx->override2DTextureTarget(target); + rcEnc->rcBindTexture(rcEnc, ((cb_handle_t *)(native_buffer->handle))->hostHandle); + ctx->restore2DTextureTarget(); + } + else if (image->target == EGL_GL_TEXTURE_2D_KHR) { + GET_CONTEXT; + ctx->override2DTextureTarget(target); + GLeglImageOES hostImage = reinterpret_cast<GLeglImageOES>((intptr_t)image->host_egl_image); + ctx->m_glEGLImageTargetTexture2DOES_enc(self, target, hostImage); + ctx->restore2DTextureTarget(); + } } void glEGLImageTargetRenderbufferStorageOES(void *self, GLenum target, GLeglImageOES image) @@ -118,8 +129,22 @@ const GLubyte *my_glGetString (void *self, GLenum name) { (void)self; - if (s_egl) { - return (const GLubyte*)s_egl->getGLString(name); + //see ref in https://www.khronos.org/opengles/sdk/docs/man + //name in glGetString can be one of the following five values + switch (name) { + case GL_VERSION: + case GL_VENDOR: + case GL_RENDERER: + case GL_SHADING_LANGUAGE_VERSION: + case GL_EXTENSIONS: + if (s_egl) { + return (const GLubyte*)s_egl->getGLString(name); + } + break; + default: + GET_CONTEXT; + ctx->setError(GL_INVALID_ENUM); + break; } return NULL; } @@ -127,6 +152,7 @@ const GLubyte *my_glGetString (void *self, GLenum name) void init() { GET_CONTEXT; + ctx->m_glEGLImageTargetTexture2DOES_enc = ctx->glEGLImageTargetTexture2DOES; ctx->glEGLImageTargetTexture2DOES = &glEGLImageTargetTexture2DOES; ctx->glEGLImageTargetRenderbufferStorageOES = &glEGLImageTargetRenderbufferStorageOES; ctx->glGetString = &my_glGetString; diff --git a/opengl/system/GLESv2_enc/GL2Encoder.cpp b/opengl/system/GLESv2_enc/GL2Encoder.cpp index dca504d..268f76c 100755 --- a/opengl/system/GLESv2_enc/GL2Encoder.cpp +++ b/opengl/system/GLESv2_enc/GL2Encoder.cpp @@ -17,6 +17,7 @@ #include "GL2Encoder.h" #include <assert.h> #include <ctype.h> +#include <cmath> #ifndef MIN #define MIN(a, b) ((a) < (b) ? (a) : (b)) @@ -25,7 +26,7 @@ static GLubyte *gVendorString= (GLubyte *) "Android"; static GLubyte *gRendererString= (GLubyte *) "Android HW-GLES 2.0"; static GLubyte *gVersionString= (GLubyte *) "OpenGL ES 2.0"; -static GLubyte *gExtensionsString= (GLubyte *) ""; // no extensions at this point; +static GLubyte *gExtensionsString= (GLubyte *) "GL_OES_EGL_image_external "; #define SET_ERROR_IF(condition,err) if((condition)) { \ ALOGE("%s:%s:%d GL error 0x%x\n", __FILE__, __FUNCTION__, __LINE__, err); \ @@ -41,12 +42,16 @@ static GLubyte *gExtensionsString= (GLubyte *) ""; // no extensions at this poin } -GL2Encoder::GL2Encoder(IOStream *stream) : gl2_encoder_context_t(stream) +GL2Encoder::GL2Encoder(IOStream *stream, ChecksumCalculator *protocol) + : gl2_encoder_context_t(stream, protocol) { m_initialized = false; m_state = NULL; m_error = GL_NO_ERROR; m_num_compressedTextureFormats = 0; + m_max_cubeMapTextureSize = 0; + m_max_renderBufferSize = 0; + m_max_textureSize = 0; m_compressedTextureFormats = NULL; //overrides @@ -123,6 +128,7 @@ GL2Encoder::GL2Encoder(IOStream *stream) : gl2_encoder_context_t(stream) OVERRIDE(glTexParameteri); OVERRIDE(glTexParameteriv); OVERRIDE(glTexImage2D); + OVERRIDE(glTexSubImage2D); } GL2Encoder::~GL2Encoder() @@ -271,6 +277,36 @@ void GL2Encoder::s_glGetIntegerv(void *self, GLenum param, GLint *ptr) *ptr = state->getBoundTexture(GL_TEXTURE_EXTERNAL_OES); break; + case GL_MAX_CUBE_MAP_TEXTURE_SIZE: + if (ctx->m_max_cubeMapTextureSize != 0) { + *ptr = ctx->m_max_cubeMapTextureSize; + } else { + ctx->m_glGetIntegerv_enc(self, param, ptr); + ctx->m_max_cubeMapTextureSize = *ptr; + } + break; + case GL_MAX_RENDERBUFFER_SIZE: + if (ctx->m_max_renderBufferSize != 0) { + *ptr = ctx->m_max_renderBufferSize; + } else { + ctx->m_glGetIntegerv_enc(self, param, ptr); + ctx->m_max_renderBufferSize = *ptr; + } + break; + case GL_MAX_TEXTURE_SIZE: + if (ctx->m_max_textureSize != 0) { + *ptr = ctx->m_max_textureSize; + } else { + ctx->m_glGetIntegerv_enc(self, param, ptr); + ctx->m_max_textureSize = *ptr; + } + break; + case GL_MAX_VERTEX_ATTRIBS: + if (!ctx->m_state->getClientStateParameter<GLint>(param, ptr)) { + ctx->m_glGetIntegerv_enc(self, param, ptr); + ctx->m_state->setMaxVertexAttribs(*ptr); + } + break; default: if (!ctx->m_state->getClientStateParameter<GLint>(param, ptr)) { ctx->m_glGetIntegerv_enc(self, param, ptr); @@ -375,6 +411,9 @@ void GL2Encoder::s_glEnableVertexAttribArray(void *self, GLuint index) { GL2Encoder *ctx = (GL2Encoder *)self; assert(ctx->m_state); + GLint maxIndex; + ctx->glGetIntegerv(self, GL_MAX_VERTEX_ATTRIBS, &maxIndex); + SET_ERROR_IF(!(index < maxIndex), GL_INVALID_VALUE); ctx->m_state->enable(index, 1); } @@ -382,6 +421,9 @@ void GL2Encoder::s_glDisableVertexAttribArray(void *self, GLuint index) { GL2Encoder *ctx = (GL2Encoder *)self; assert(ctx->m_state); + GLint maxIndex; + ctx->glGetIntegerv(self, GL_MAX_VERTEX_ATTRIBS, &maxIndex); + SET_ERROR_IF(!(index < maxIndex), GL_INVALID_VALUE); ctx->m_state->enable(index, 0); } @@ -390,6 +432,9 @@ void GL2Encoder::s_glGetVertexAttribiv(void *self, GLuint index, GLenum pname, G { GL2Encoder *ctx = (GL2Encoder *)self; assert(ctx->m_state); + GLint maxIndex; + ctx->glGetIntegerv(self, GL_MAX_VERTEX_ATTRIBS, &maxIndex); + SET_ERROR_IF(!(index < maxIndex), GL_INVALID_VALUE); if (!ctx->m_state->getVertexAttribParameter<GLint>(index, pname, params)) { ctx->m_glGetVertexAttribiv_enc(self, index, pname, params); @@ -400,6 +445,9 @@ void GL2Encoder::s_glGetVertexAttribfv(void *self, GLuint index, GLenum pname, G { GL2Encoder *ctx = (GL2Encoder *)self; assert(ctx->m_state); + GLint maxIndex; + ctx->glGetIntegerv(self, GL_MAX_VERTEX_ATTRIBS, &maxIndex); + SET_ERROR_IF(!(index < maxIndex), GL_INVALID_VALUE); if (!ctx->m_state->getVertexAttribParameter<GLfloat>(index, pname, params)) { ctx->m_glGetVertexAttribfv_enc(self, index, pname, params); @@ -410,6 +458,10 @@ void GL2Encoder::s_glGetVertexAttribPointerv(void *self, GLuint index, GLenum pn { GL2Encoder *ctx = (GL2Encoder *)self; if (ctx->m_state == NULL) return; + GLint maxIndex; + ctx->glGetIntegerv(self, GL_MAX_VERTEX_ATTRIBS, &maxIndex); + SET_ERROR_IF(!(index < maxIndex), GL_INVALID_VALUE); + SET_ERROR_IF(pname != GL_VERTEX_ATTRIB_ARRAY_POINTER, GL_INVALID_ENUM); (void)pname; @@ -459,19 +511,63 @@ void GL2Encoder::sendVertexAttributes(GLint first, GLsizei count) } } +static bool isValidDrawMode(GLenum mode) { + switch(mode) { + case GL_POINTS: + case GL_LINE_STRIP: + case GL_LINE_LOOP: + case GL_LINES: + case GL_TRIANGLE_STRIP: + case GL_TRIANGLE_FAN: + case GL_TRIANGLES: + return true; + } + return false; +} + +static bool isValidDrawType(GLenum mode) { + return mode == GL_UNSIGNED_BYTE || + mode == GL_UNSIGNED_SHORT || + mode == GL_UNSIGNED_INT; +} + void GL2Encoder::s_glDrawArrays(void *self, GLenum mode, GLint first, GLsizei count) { GL2Encoder *ctx = (GL2Encoder *)self; + + SET_ERROR_IF(!isValidDrawMode(mode), GL_INVALID_ENUM); + SET_ERROR_IF(count<0, GL_INVALID_VALUE); + + bool has_arrays = false; + int nLocations = ctx->m_state->nLocations(); + for (int i = 0; i < nLocations; i++) { + const GLClientState::VertexAttribState *state = ctx->m_state->getState(i); + if (state->enabled) { + if (state->bufferObject || state->data) { + has_arrays = true; + } + else { + ALOGE("glDrawArrays: a vertex attribute array is enabled with no data bound\n"); + ctx->setError(GL_INVALID_OPERATION); + return; + } + } + } + if (!has_arrays) { + ALOGE("glDrawArrays: no data bound to the command - ignoring\n"); + return; + } + ctx->sendVertexAttributes(first, count); ctx->m_glDrawArrays_enc(ctx, mode, 0, count); } - void GL2Encoder::s_glDrawElements(void *self, GLenum mode, GLsizei count, GLenum type, const void *indices) { GL2Encoder *ctx = (GL2Encoder *)self; assert(ctx->m_state != NULL); + SET_ERROR_IF(!(isValidDrawMode(mode) && isValidDrawType(type)),GL_INVALID_ENUM); SET_ERROR_IF(count<0, GL_INVALID_VALUE); bool has_immediate_arrays = false; @@ -483,8 +579,12 @@ void GL2Encoder::s_glDrawElements(void *self, GLenum mode, GLsizei count, GLenum if (state->enabled) { if (state->bufferObject != 0) { has_indirect_arrays = true; - } else { + } else if (state->data) { has_immediate_arrays = true; + } else { + ALOGW("glDrawElements: a vertex attribute array is enabled with no data bound\n"); + ctx->setError(GL_INVALID_OPERATION); + return; } } } @@ -532,6 +632,16 @@ void GL2Encoder::s_glDrawElements(void *self, GLenum mode, GLsizei count, GLenum count, -minIndex); } break; + case GL_INT: + case GL_UNSIGNED_INT: + GLUtils::minmax<unsigned int>((unsigned int *)indices, count, &minIndex, &maxIndex); + if (minIndex != 0) { + adjustedIndices = ctx->m_fixedBuffer.alloc(glSizeof(type) * count); + GLUtils::shiftIndices<unsigned int>((unsigned int *)indices, + (unsigned int *)adjustedIndices, + count, -minIndex); + } + break; default: ALOGE("unsupported index buffer type %d\n", type); } @@ -737,7 +847,8 @@ void GL2Encoder::s_glDeleteProgram(void *self, GLuint program) void GL2Encoder::s_glGetUniformiv(void *self, GLuint program, GLint location, GLint* params) { GL2Encoder *ctx = (GL2Encoder*)self; - SET_ERROR_IF(!ctx->m_shared->isProgram(program), GL_INVALID_VALUE); + SET_ERROR_IF(!ctx->m_shared->isObject(program), GL_INVALID_VALUE); + SET_ERROR_IF(!ctx->m_shared->isProgram(program), GL_INVALID_OPERATION); SET_ERROR_IF(!ctx->m_shared->isProgramInitialized(program), GL_INVALID_OPERATION); GLint hostLoc = ctx->m_shared->locationWARAppToHost(program, location); SET_ERROR_IF(ctx->m_shared->getProgramUniformType(program,hostLoc)==0, GL_INVALID_OPERATION); @@ -746,7 +857,8 @@ void GL2Encoder::s_glGetUniformiv(void *self, GLuint program, GLint location, GL void GL2Encoder::s_glGetUniformfv(void *self, GLuint program, GLint location, GLfloat* params) { GL2Encoder *ctx = (GL2Encoder*)self; - SET_ERROR_IF(!ctx->m_shared->isProgram(program), GL_INVALID_VALUE); + SET_ERROR_IF(!ctx->m_shared->isObject(program), GL_INVALID_VALUE); + SET_ERROR_IF(!ctx->m_shared->isProgram(program), GL_INVALID_OPERATION); SET_ERROR_IF(!ctx->m_shared->isProgramInitialized(program), GL_INVALID_OPERATION); GLint hostLoc = ctx->m_shared->locationWARAppToHost(program,location); SET_ERROR_IF(ctx->m_shared->getProgramUniformType(program,hostLoc)==0, GL_INVALID_OPERATION); @@ -912,17 +1024,46 @@ void GL2Encoder::s_glUseProgram(void *self, GLuint program) } } +void GL2Encoder::checkValidUniformParam(void *self, GLsizei count, GLboolean transpose) +{ + GL2Encoder *ctx = (GL2Encoder*)self; + GLuint program = ctx->m_state->currentProgram(); + SET_ERROR_IF(!ctx->m_shared->isProgram(program), GL_INVALID_OPERATION); + SET_ERROR_IF((count < 0 || transpose == GL_TRUE), GL_INVALID_VALUE); +} + +void GL2Encoder::getHostLocation(void *self, GLint location, GLint *hostLoc) +{ + GL2Encoder *ctx = (GL2Encoder*)self; + GLuint program = ctx->m_state->currentProgram(); + if (location == -1) { + *hostLoc = location; + return; + } + SET_ERROR_IF((location < 0), GL_INVALID_OPERATION); + GLint curHostLoc = ctx->m_shared->locationWARAppToHost(program,location); + SET_ERROR_IF((ctx->m_shared->getProgramUniformType(program,curHostLoc) == 0 && + curHostLoc!=-1), GL_INVALID_OPERATION); + *hostLoc = curHostLoc; +} + void GL2Encoder::s_glUniform1f(void *self , GLint location, GLfloat x) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, 0, GL_FALSE); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniform1f_enc(self, hostLoc, x); } void GL2Encoder::s_glUniform1fv(void *self , GLint location, GLsizei count, const GLfloat* v) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, count, GL_FALSE); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniform1fv_enc(self, hostLoc, count, v); } @@ -931,8 +1072,10 @@ void GL2Encoder::s_glUniform1i(void *self , GLint location, GLint x) GL2Encoder *ctx = (GL2Encoder*)self; GLClientState* state = ctx->m_state; GLSharedGroupPtr shared = ctx->m_shared; + GLint hostLoc; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + ctx->checkValidUniformParam(self, 0, GL_FALSE); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniform1i_enc(self, hostLoc, x); GLenum target; @@ -948,112 +1091,160 @@ void GL2Encoder::s_glUniform1i(void *self , GLint location, GLint x) void GL2Encoder::s_glUniform1iv(void *self , GLint location, GLsizei count, const GLint* v) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, count, GL_FALSE); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniform1iv_enc(self, hostLoc, count, v); } void GL2Encoder::s_glUniform2f(void *self , GLint location, GLfloat x, GLfloat y) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, 0, GL_FALSE); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniform2f_enc(self, hostLoc, x, y); } void GL2Encoder::s_glUniform2fv(void *self , GLint location, GLsizei count, const GLfloat* v) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, count, GL_FALSE); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniform2fv_enc(self, hostLoc, count, v); } void GL2Encoder::s_glUniform2i(void *self , GLint location, GLint x, GLint y) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, 0, GL_FALSE); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniform2i_enc(self, hostLoc, x, y); } void GL2Encoder::s_glUniform2iv(void *self , GLint location, GLsizei count, const GLint* v) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, count, GL_FALSE); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniform2iv_enc(self, hostLoc, count, v); } void GL2Encoder::s_glUniform3f(void *self , GLint location, GLfloat x, GLfloat y, GLfloat z) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, 0, GL_FALSE); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniform3f_enc(self, hostLoc, x, y, z); } void GL2Encoder::s_glUniform3fv(void *self , GLint location, GLsizei count, const GLfloat* v) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, count, GL_FALSE); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniform3fv_enc(self, hostLoc, count, v); } void GL2Encoder::s_glUniform3i(void *self , GLint location, GLint x, GLint y, GLint z) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, 0, GL_FALSE); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniform3i_enc(self, hostLoc, x, y, z); } void GL2Encoder::s_glUniform3iv(void *self , GLint location, GLsizei count, const GLint* v) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, count, GL_FALSE); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniform3iv_enc(self, hostLoc, count, v); } void GL2Encoder::s_glUniform4f(void *self , GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, 0, GL_FALSE); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniform4f_enc(self, hostLoc, x, y, z, w); } void GL2Encoder::s_glUniform4fv(void *self , GLint location, GLsizei count, const GLfloat* v) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, count, GL_FALSE); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniform4fv_enc(self, hostLoc, count, v); } void GL2Encoder::s_glUniform4i(void *self , GLint location, GLint x, GLint y, GLint z, GLint w) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, 0, GL_FALSE); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniform4i_enc(self, hostLoc, x, y, z, w); } void GL2Encoder::s_glUniform4iv(void *self , GLint location, GLsizei count, const GLint* v) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, count, GL_FALSE); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniform4iv_enc(self, hostLoc, count, v); } void GL2Encoder::s_glUniformMatrix2fv(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, count, transpose); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniformMatrix2fv_enc(self, hostLoc, count, transpose, value); } void GL2Encoder::s_glUniformMatrix3fv(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, count, transpose); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniformMatrix3fv_enc(self, hostLoc, count, transpose, value); } void GL2Encoder::s_glUniformMatrix4fv(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { GL2Encoder *ctx = (GL2Encoder*)self; - GLint hostLoc = ctx->m_shared->locationWARAppToHost(ctx->m_state->currentProgram(),location); + GLint hostLoc; + + ctx->checkValidUniformParam(self, count, transpose); + ctx->getHostLocation(self, location, &hostLoc); ctx->m_glUniformMatrix4fv_enc(self, hostLoc, count, transpose, value); } @@ -1240,6 +1431,26 @@ void GL2Encoder::s_glTexImage2D(void* self, GLenum target, GLint level, } } +void GL2Encoder::s_glTexSubImage2D(void* self, GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, + GLenum type, const GLvoid* pixels) +{ + GL2Encoder* ctx = (GL2Encoder*)self; + GLint maxTextureSize; + ctx->glGetIntegerv(self, GL_MAX_TEXTURE_SIZE, &maxTextureSize); + + SET_ERROR_IF((level < 0 || level > log2(maxTextureSize)), GL_INVALID_VALUE); + + if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) { + ctx->override2DTextureTarget(target); + ctx->m_glTexSubImage2D_enc(ctx, target, level, xoffset, yoffset, width, + height, format, type, pixels); + ctx->restore2DTextureTarget(); + } else { + ctx->m_glTexSubImage2D_enc(ctx, target, level, xoffset, yoffset, width, + height, format, type, pixels); + } +} void GL2Encoder::s_glTexParameteriv(void* self, GLenum target, GLenum pname, const GLint* params) diff --git a/opengl/system/GLESv2_enc/GL2Encoder.h b/opengl/system/GLESv2_enc/GL2Encoder.h index 21e7932..e3d343a 100644 --- a/opengl/system/GLESv2_enc/GL2Encoder.h +++ b/opengl/system/GLESv2_enc/GL2Encoder.h @@ -21,10 +21,9 @@ #include "GLSharedGroup.h" #include "FixedBuffer.h" - class GL2Encoder : public gl2_encoder_context_t { public: - GL2Encoder(IOStream *stream); + GL2Encoder(IOStream *stream, ChecksumCalculator* protocol); virtual ~GL2Encoder(); void setClientState(GLClientState *state) { m_state = state; @@ -54,10 +53,16 @@ private: GLint m_num_compressedTextureFormats; GLint *getCompressedTextureFormats(); + GLint m_max_cubeMapTextureSize; + GLint m_max_renderBufferSize; + GLint m_max_textureSize; FixedBuffer m_fixedBuffer; void sendVertexAttributes(GLint first, GLsizei count); bool updateHostTexture2DBinding(GLenum texUnit, GLenum newTarget); + void checkValidUniformParam(void * self, GLsizei count, GLboolean transpose); + void getHostLocation(void *self, GLint location, GLint *hostLoc); + glGetError_client_proc_t m_glGetError_enc; static GLenum s_glGetError(void * self); @@ -221,6 +226,7 @@ private: glTexParameteri_client_proc_t m_glTexParameteri_enc; glTexParameteriv_client_proc_t m_glTexParameteriv_enc; glTexImage2D_client_proc_t m_glTexImage2D_enc; + glTexSubImage2D_client_proc_t m_glTexSubImage2D_enc; static void s_glActiveTexture(void* self, GLenum texture); static void s_glBindTexture(void* self, GLenum target, GLuint texture); @@ -234,6 +240,12 @@ private: static void s_glTexImage2D(void* self, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels); + static void s_glTexSubImage2D(void* self, GLenum target, GLint level, GLint xoffset, + GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, + const GLvoid* pixels); + +public: + glEGLImageTargetTexture2DOES_client_proc_t m_glEGLImageTargetTexture2DOES_enc; }; #endif diff --git a/opengl/system/GLESv2_enc/GL2EncoderUtils.h b/opengl/system/GLESv2_enc/GL2EncoderUtils.h index 4afec10..211e966 100644 --- a/opengl/system/GLESv2_enc/GL2EncoderUtils.h +++ b/opengl/system/GLESv2_enc/GL2EncoderUtils.h @@ -14,7 +14,7 @@ * limitations under the License. */ #ifndef GL2_ENCODER_UTILS_H -#define GL2_ENCLODER_UTILS_H +#define GL2_ENCODER_UTILS_H namespace glesv2_enc { diff --git a/opengl/system/GLESv2_enc/gl2_client_context.h b/opengl/system/GLESv2_enc/gl2_client_context.h index 87d62d5..7035fec 100644 --- a/opengl/system/GLESv2_enc/gl2_client_context.h +++ b/opengl/system/GLESv2_enc/gl2_client_context.h @@ -5,6 +5,8 @@ #include "gl2_client_proc.h" +#include "gl2_types.h" + struct gl2_client_context_t { diff --git a/opengl/system/GLESv2_enc/gl2_enc.cpp b/opengl/system/GLESv2_enc/gl2_enc.cpp index 089a9ae..615dcc1 100644 --- a/opengl/system/GLESv2_enc/gl2_enc.cpp +++ b/opengl/system/GLESv2_enc/gl2_enc.cpp @@ -2,6 +2,7 @@ // generated by 'emugen' +#include <memory> #include <string.h> #include "gl2_opcodes.h" @@ -22,14 +23,24 @@ void glActiveTexture_enc(void *self , GLenum texture) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glActiveTexture;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &texture, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glAttachShader_enc(void *self , GLuint program, GLuint shader) @@ -37,15 +48,25 @@ void glAttachShader_enc(void *self , GLuint program, GLuint shader) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glAttachShader;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; memcpy(ptr, &shader, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBindAttribLocation_enc(void *self , GLuint program, GLuint index, const GLchar* name) @@ -53,18 +74,28 @@ void glBindAttribLocation_enc(void *self , GLuint program, GLuint index, const G gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_name = (strlen(name) + 1); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_name + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_name + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBindAttribLocation;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; memcpy(ptr, &index, 4); ptr += 4; *(unsigned int *)(ptr) = __size_name; ptr += 4; memcpy(ptr, name, __size_name);ptr += __size_name; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBindBuffer_enc(void *self , GLenum target, GLuint buffer) @@ -72,15 +103,25 @@ void glBindBuffer_enc(void *self , GLenum target, GLuint buffer) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBindBuffer;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &buffer, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBindFramebuffer_enc(void *self , GLenum target, GLuint framebuffer) @@ -88,15 +129,25 @@ void glBindFramebuffer_enc(void *self , GLenum target, GLuint framebuffer) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBindFramebuffer;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &framebuffer, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBindRenderbuffer_enc(void *self , GLenum target, GLuint renderbuffer) @@ -104,15 +155,25 @@ void glBindRenderbuffer_enc(void *self , GLenum target, GLuint renderbuffer) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBindRenderbuffer;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &renderbuffer, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBindTexture_enc(void *self , GLenum target, GLuint texture) @@ -120,15 +181,25 @@ void glBindTexture_enc(void *self , GLenum target, GLuint texture) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBindTexture;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &texture, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBlendColor_enc(void *self , GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) @@ -136,17 +207,27 @@ void glBlendColor_enc(void *self , GLclampf red, GLclampf green, GLclampf blue, gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBlendColor;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &red, 4); ptr += 4; memcpy(ptr, &green, 4); ptr += 4; memcpy(ptr, &blue, 4); ptr += 4; memcpy(ptr, &alpha, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBlendEquation_enc(void *self , GLenum mode) @@ -154,14 +235,24 @@ void glBlendEquation_enc(void *self , GLenum mode) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBlendEquation;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mode, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBlendEquationSeparate_enc(void *self , GLenum modeRGB, GLenum modeAlpha) @@ -169,15 +260,25 @@ void glBlendEquationSeparate_enc(void *self , GLenum modeRGB, GLenum modeAlpha) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBlendEquationSeparate;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &modeRGB, 4); ptr += 4; memcpy(ptr, &modeAlpha, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBlendFunc_enc(void *self , GLenum sfactor, GLenum dfactor) @@ -185,15 +286,25 @@ void glBlendFunc_enc(void *self , GLenum sfactor, GLenum dfactor) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBlendFunc;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &sfactor, 4); ptr += 4; memcpy(ptr, &dfactor, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBlendFuncSeparate_enc(void *self , GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) @@ -201,17 +312,27 @@ void glBlendFuncSeparate_enc(void *self , GLenum srcRGB, GLenum dstRGB, GLenum s gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBlendFuncSeparate;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &srcRGB, 4); ptr += 4; memcpy(ptr, &dstRGB, 4); ptr += 4; memcpy(ptr, &srcAlpha, 4); ptr += 4; memcpy(ptr, &dstAlpha, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBufferData_enc(void *self , GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) @@ -219,21 +340,39 @@ void glBufferData_enc(void *self , GLenum target, GLsizeiptr size, const GLvoid* gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_data = ((data != NULL) ? size : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_data + 4 + 1*4; - ptr = stream->alloc(8 + 4 + 4); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_data + 4 + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(8 + 4 + 4); + ptr = buf; int tmp = OP_glBufferData;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); stream->flush(); stream->writeFully(&__size_data,4); - if (data != NULL) stream->writeFully(data, __size_data); - ptr = stream->alloc(4); + if (useChecksum) checksumCalculator->addBuffer(&__size_data,4); + if (data != NULL) { + stream->writeFully(data, __size_data); + if (useChecksum) checksumCalculator->addBuffer(data, __size_data); + } + buf = stream->alloc(4); + ptr = buf; memcpy(ptr, &usage, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + buf = stream->alloc(checksumSize); + if (useChecksum) checksumCalculator->writeChecksum(buf, checksumSize); + } void glBufferSubData_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) @@ -241,20 +380,35 @@ void glBufferSubData_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; - const unsigned int __size_data = size; + const unsigned int __size_data = ((data != NULL) ? size : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + __size_data + 1*4; - ptr = stream->alloc(8 + 4 + 4 + 4); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + __size_data + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(8 + 4 + 4 + 4); + ptr = buf; int tmp = OP_glBufferSubData;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &offset, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); stream->flush(); stream->writeFully(&__size_data,4); - stream->writeFully(data, __size_data); + if (useChecksum) checksumCalculator->addBuffer(&__size_data,4); + if (data != NULL) { + stream->writeFully(data, __size_data); + if (useChecksum) checksumCalculator->addBuffer(data, __size_data); + } + buf = stream->alloc(checksumSize); + if (useChecksum) checksumCalculator->writeChecksum(buf, checksumSize); + } GLenum glCheckFramebufferStatus_enc(void *self , GLenum target) @@ -262,17 +416,36 @@ GLenum glCheckFramebufferStatus_enc(void *self , GLenum target) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glCheckFramebufferStatus;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLenum retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glCheckFramebufferStatus: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -281,14 +454,24 @@ void glClear_enc(void *self , GLbitfield mask) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClear;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mask, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glClearColor_enc(void *self , GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) @@ -296,17 +479,27 @@ void glClearColor_enc(void *self , GLclampf red, GLclampf green, GLclampf blue, gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClearColor;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &red, 4); ptr += 4; memcpy(ptr, &green, 4); ptr += 4; memcpy(ptr, &blue, 4); ptr += 4; memcpy(ptr, &alpha, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glClearDepthf_enc(void *self , GLclampf depth) @@ -314,14 +507,24 @@ void glClearDepthf_enc(void *self , GLclampf depth) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClearDepthf;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &depth, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glClearStencil_enc(void *self , GLint s) @@ -329,14 +532,24 @@ void glClearStencil_enc(void *self , GLint s) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glClearStencil;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &s, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glColorMask_enc(void *self , GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) @@ -344,17 +557,27 @@ void glColorMask_enc(void *self , GLboolean red, GLboolean green, GLboolean blue gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 1 + 1 + 1 + 1; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 1 + 1 + 1 + 1; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glColorMask;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &red, 1); ptr += 1; memcpy(ptr, &green, 1); ptr += 1; memcpy(ptr, &blue, 1); ptr += 1; memcpy(ptr, &alpha, 1); ptr += 1; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glCompileShader_enc(void *self , GLuint shader) @@ -362,14 +585,24 @@ void glCompileShader_enc(void *self , GLuint shader) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glCompileShader;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &shader, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glCompressedTexImage2D_enc(void *self , GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) @@ -377,13 +610,19 @@ void glCompressedTexImage2D_enc(void *self , GLenum target, GLint level, GLenum gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_data = ((data != NULL) ? imageSize : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_data + 1*4; - ptr = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_data + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + ptr = buf; int tmp = OP_glCompressedTexImage2D;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -392,9 +631,18 @@ void glCompressedTexImage2D_enc(void *self , GLenum target, GLint level, GLenum memcpy(ptr, &height, 4); ptr += 4; memcpy(ptr, &border, 4); ptr += 4; memcpy(ptr, &imageSize, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); stream->flush(); stream->writeFully(&__size_data,4); - if (data != NULL) stream->writeFully(data, __size_data); + if (useChecksum) checksumCalculator->addBuffer(&__size_data,4); + if (data != NULL) { + stream->writeFully(data, __size_data); + if (useChecksum) checksumCalculator->addBuffer(data, __size_data); + } + buf = stream->alloc(checksumSize); + if (useChecksum) checksumCalculator->writeChecksum(buf, checksumSize); + } void glCompressedTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) @@ -402,13 +650,19 @@ void glCompressedTexSubImage2D_enc(void *self , GLenum target, GLint level, GLin gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; - const unsigned int __size_data = imageSize; + const unsigned int __size_data = ((data != NULL) ? imageSize : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_data + 1*4; - ptr = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_data + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + ptr = buf; int tmp = OP_glCompressedTexSubImage2D;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -418,9 +672,18 @@ void glCompressedTexSubImage2D_enc(void *self , GLenum target, GLint level, GLin memcpy(ptr, &height, 4); ptr += 4; memcpy(ptr, &format, 4); ptr += 4; memcpy(ptr, &imageSize, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); stream->flush(); stream->writeFully(&__size_data,4); - stream->writeFully(data, __size_data); + if (useChecksum) checksumCalculator->addBuffer(&__size_data,4); + if (data != NULL) { + stream->writeFully(data, __size_data); + if (useChecksum) checksumCalculator->addBuffer(data, __size_data); + } + buf = stream->alloc(checksumSize); + if (useChecksum) checksumCalculator->writeChecksum(buf, checksumSize); + } void glCopyTexImage2D_enc(void *self , GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) @@ -428,12 +691,18 @@ void glCopyTexImage2D_enc(void *self , GLenum target, GLint level, GLenum intern gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glCopyTexImage2D;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -443,6 +712,10 @@ void glCopyTexImage2D_enc(void *self , GLenum target, GLint level, GLenum intern memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; memcpy(ptr, &border, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glCopyTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) @@ -450,12 +723,18 @@ void glCopyTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoff gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glCopyTexSubImage2D;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -465,6 +744,10 @@ void glCopyTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoff memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } GLuint glCreateProgram_enc(void *self ) @@ -472,16 +755,35 @@ GLuint glCreateProgram_enc(void *self ) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glCreateProgram;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; GLuint retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glCreateProgram: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -490,17 +792,36 @@ GLuint glCreateShader_enc(void *self , GLenum type) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glCreateShader;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLuint retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glCreateShader: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -509,14 +830,24 @@ void glCullFace_enc(void *self , GLenum mode) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glCullFace;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mode, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDeleteBuffers_enc(void *self , GLsizei n, const GLuint* buffers) @@ -524,17 +855,27 @@ void glDeleteBuffers_enc(void *self , GLsizei n, const GLuint* buffers) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_buffers = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_buffers + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_buffers + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDeleteBuffers;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_buffers; ptr += 4; memcpy(ptr, buffers, __size_buffers);ptr += __size_buffers; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDeleteFramebuffers_enc(void *self , GLsizei n, const GLuint* framebuffers) @@ -542,17 +883,27 @@ void glDeleteFramebuffers_enc(void *self , GLsizei n, const GLuint* framebuffers gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_framebuffers = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_framebuffers + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_framebuffers + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDeleteFramebuffers;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_framebuffers; ptr += 4; memcpy(ptr, framebuffers, __size_framebuffers);ptr += __size_framebuffers; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDeleteProgram_enc(void *self , GLuint program) @@ -560,14 +911,24 @@ void glDeleteProgram_enc(void *self , GLuint program) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDeleteProgram;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDeleteRenderbuffers_enc(void *self , GLsizei n, const GLuint* renderbuffers) @@ -575,17 +936,27 @@ void glDeleteRenderbuffers_enc(void *self , GLsizei n, const GLuint* renderbuffe gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_renderbuffers = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_renderbuffers + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_renderbuffers + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDeleteRenderbuffers;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_renderbuffers; ptr += 4; memcpy(ptr, renderbuffers, __size_renderbuffers);ptr += __size_renderbuffers; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDeleteShader_enc(void *self , GLuint shader) @@ -593,14 +964,24 @@ void glDeleteShader_enc(void *self , GLuint shader) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDeleteShader;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &shader, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDeleteTextures_enc(void *self , GLsizei n, const GLuint* textures) @@ -608,17 +989,27 @@ void glDeleteTextures_enc(void *self , GLsizei n, const GLuint* textures) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_textures = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_textures + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_textures + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDeleteTextures;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_textures; ptr += 4; memcpy(ptr, textures, __size_textures);ptr += __size_textures; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDepthFunc_enc(void *self , GLenum func) @@ -626,14 +1017,24 @@ void glDepthFunc_enc(void *self , GLenum func) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDepthFunc;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &func, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDepthMask_enc(void *self , GLboolean flag) @@ -641,14 +1042,24 @@ void glDepthMask_enc(void *self , GLboolean flag) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 1; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 1; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDepthMask;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &flag, 1); ptr += 1; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDepthRangef_enc(void *self , GLclampf zNear, GLclampf zFar) @@ -656,15 +1067,25 @@ void glDepthRangef_enc(void *self , GLclampf zNear, GLclampf zFar) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDepthRangef;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &zNear, 4); ptr += 4; memcpy(ptr, &zFar, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDetachShader_enc(void *self , GLuint program, GLuint shader) @@ -672,15 +1093,25 @@ void glDetachShader_enc(void *self , GLuint program, GLuint shader) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDetachShader;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; memcpy(ptr, &shader, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDisable_enc(void *self , GLenum cap) @@ -688,14 +1119,24 @@ void glDisable_enc(void *self , GLenum cap) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDisable;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &cap, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDisableVertexAttribArray_enc(void *self , GLuint index) @@ -703,14 +1144,24 @@ void glDisableVertexAttribArray_enc(void *self , GLuint index) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDisableVertexAttribArray;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &index, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDrawArrays_enc(void *self , GLenum mode, GLint first, GLsizei count) @@ -718,16 +1169,26 @@ void glDrawArrays_enc(void *self , GLenum mode, GLint first, GLsizei count) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDrawArrays;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mode, 4); ptr += 4; memcpy(ptr, &first, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glEnable_enc(void *self , GLenum cap) @@ -735,14 +1196,24 @@ void glEnable_enc(void *self , GLenum cap) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glEnable;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &cap, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glEnableVertexAttribArray_enc(void *self , GLuint index) @@ -750,14 +1221,24 @@ void glEnableVertexAttribArray_enc(void *self , GLuint index) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glEnableVertexAttribArray;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &index, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glFinish_enc(void *self ) @@ -765,12 +1246,22 @@ void glFinish_enc(void *self ) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFinish;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; } @@ -779,12 +1270,22 @@ void glFlush_enc(void *self ) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFlush;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; } @@ -793,17 +1294,27 @@ void glFramebufferRenderbuffer_enc(void *self , GLenum target, GLenum attachment gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFramebufferRenderbuffer;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &attachment, 4); ptr += 4; memcpy(ptr, &renderbuffertarget, 4); ptr += 4; memcpy(ptr, &renderbuffer, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glFramebufferTexture2D_enc(void *self , GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) @@ -811,18 +1322,28 @@ void glFramebufferTexture2D_enc(void *self , GLenum target, GLenum attachment, G gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFramebufferTexture2D;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &attachment, 4); ptr += 4; memcpy(ptr, &textarget, 4); ptr += 4; memcpy(ptr, &texture, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glFrontFace_enc(void *self , GLenum mode) @@ -830,14 +1351,24 @@ void glFrontFace_enc(void *self , GLenum mode) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFrontFace;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mode, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGenBuffers_enc(void *self , GLsizei n, GLuint* buffers) @@ -845,17 +1376,36 @@ void glGenBuffers_enc(void *self , GLsizei n, GLuint* buffers) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_buffers = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_buffers + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_buffers + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGenBuffers;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_buffers; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(buffers, __size_buffers); + if (useChecksum) checksumCalculator->addBuffer(buffers, __size_buffers); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGenBuffers: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGenerateMipmap_enc(void *self , GLenum target) @@ -863,14 +1413,24 @@ void glGenerateMipmap_enc(void *self , GLenum target) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGenerateMipmap;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGenFramebuffers_enc(void *self , GLsizei n, GLuint* framebuffers) @@ -878,17 +1438,36 @@ void glGenFramebuffers_enc(void *self , GLsizei n, GLuint* framebuffers) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_framebuffers = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_framebuffers + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_framebuffers + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGenFramebuffers;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_framebuffers; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(framebuffers, __size_framebuffers); + if (useChecksum) checksumCalculator->addBuffer(framebuffers, __size_framebuffers); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGenFramebuffers: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGenRenderbuffers_enc(void *self , GLsizei n, GLuint* renderbuffers) @@ -896,17 +1475,36 @@ void glGenRenderbuffers_enc(void *self , GLsizei n, GLuint* renderbuffers) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_renderbuffers = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_renderbuffers + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_renderbuffers + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGenRenderbuffers;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_renderbuffers; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(renderbuffers, __size_renderbuffers); + if (useChecksum) checksumCalculator->addBuffer(renderbuffers, __size_renderbuffers); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGenRenderbuffers: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGenTextures_enc(void *self , GLsizei n, GLuint* textures) @@ -914,17 +1512,36 @@ void glGenTextures_enc(void *self , GLsizei n, GLuint* textures) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_textures = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_textures + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_textures + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGenTextures;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_textures; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(textures, __size_textures); + if (useChecksum) checksumCalculator->addBuffer(textures, __size_textures); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGenTextures: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetActiveAttrib_enc(void *self , GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name) @@ -932,16 +1549,22 @@ void glGetActiveAttrib_enc(void *self , GLuint program, GLuint index, GLsizei bu gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_length = ((length != NULL) ? (sizeof(GLsizei)) : 0); const unsigned int __size_size = ((size != NULL) ? (sizeof(GLint)) : 0); const unsigned int __size_type = ((type != NULL) ? (sizeof(GLenum)) : 0); const unsigned int __size_name = ((name != NULL) ? bufsize : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + __size_length + __size_size + __size_type + __size_name + 4*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + __size_length + __size_size + __size_type + __size_name + 4*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetActiveAttrib;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; memcpy(ptr, &index, 4); ptr += 4; @@ -950,10 +1573,34 @@ void glGetActiveAttrib_enc(void *self , GLuint program, GLuint index, GLsizei bu *(unsigned int *)(ptr) = __size_size; ptr += 4; *(unsigned int *)(ptr) = __size_type; ptr += 4; *(unsigned int *)(ptr) = __size_name; ptr += 4; - if (length != NULL) stream->readback(length, __size_length); - if (size != NULL) stream->readback(size, __size_size); - if (type != NULL) stream->readback(type, __size_type); - if (name != NULL) stream->readback(name, __size_name); + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + if (length != NULL) { + stream->readback(length, __size_length); + if (useChecksum) checksumCalculator->addBuffer(length, __size_length); + } + if (size != NULL) { + stream->readback(size, __size_size); + if (useChecksum) checksumCalculator->addBuffer(size, __size_size); + } + if (type != NULL) { + stream->readback(type, __size_type); + if (useChecksum) checksumCalculator->addBuffer(type, __size_type); + } + if (name != NULL) { + stream->readback(name, __size_name); + if (useChecksum) checksumCalculator->addBuffer(name, __size_name); + } + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetActiveAttrib: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetActiveUniform_enc(void *self , GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name) @@ -961,16 +1608,22 @@ void glGetActiveUniform_enc(void *self , GLuint program, GLuint index, GLsizei b gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_length = ((length != NULL) ? (sizeof(GLsizei)) : 0); const unsigned int __size_size = ((size != NULL) ? (sizeof(GLint)) : 0); const unsigned int __size_type = ((type != NULL) ? (sizeof(GLenum)) : 0); const unsigned int __size_name = ((name != NULL) ? bufsize : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + __size_length + __size_size + __size_type + __size_name + 4*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + __size_length + __size_size + __size_type + __size_name + 4*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetActiveUniform;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; memcpy(ptr, &index, 4); ptr += 4; @@ -979,10 +1632,34 @@ void glGetActiveUniform_enc(void *self , GLuint program, GLuint index, GLsizei b *(unsigned int *)(ptr) = __size_size; ptr += 4; *(unsigned int *)(ptr) = __size_type; ptr += 4; *(unsigned int *)(ptr) = __size_name; ptr += 4; - if (length != NULL) stream->readback(length, __size_length); - if (size != NULL) stream->readback(size, __size_size); - if (type != NULL) stream->readback(type, __size_type); - if (name != NULL) stream->readback(name, __size_name); + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + if (length != NULL) { + stream->readback(length, __size_length); + if (useChecksum) checksumCalculator->addBuffer(length, __size_length); + } + if (size != NULL) { + stream->readback(size, __size_size); + if (useChecksum) checksumCalculator->addBuffer(size, __size_size); + } + if (type != NULL) { + stream->readback(type, __size_type); + if (useChecksum) checksumCalculator->addBuffer(type, __size_type); + } + if (name != NULL) { + stream->readback(name, __size_name); + if (useChecksum) checksumCalculator->addBuffer(name, __size_name); + } + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetActiveUniform: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetAttachedShaders_enc(void *self , GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) @@ -990,21 +1667,43 @@ void glGetAttachedShaders_enc(void *self , GLuint program, GLsizei maxcount, GLs gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_count = ((count != NULL) ? (sizeof(GLsizei)) : 0); const unsigned int __size_shaders = (maxcount*sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_count + __size_shaders + 2*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_count + __size_shaders + 2*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetAttachedShaders;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; memcpy(ptr, &maxcount, 4); ptr += 4; *(unsigned int *)(ptr) = __size_count; ptr += 4; *(unsigned int *)(ptr) = __size_shaders; ptr += 4; - if (count != NULL) stream->readback(count, __size_count); + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + if (count != NULL) { + stream->readback(count, __size_count); + if (useChecksum) checksumCalculator->addBuffer(count, __size_count); + } stream->readback(shaders, __size_shaders); + if (useChecksum) checksumCalculator->addBuffer(shaders, __size_shaders); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetAttachedShaders: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } int glGetAttribLocation_enc(void *self , GLuint program, const GLchar* name) @@ -1012,20 +1711,39 @@ int glGetAttribLocation_enc(void *self , GLuint program, const GLchar* name) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_name = (strlen(name) + 1); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_name + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_name + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetAttribLocation;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; *(unsigned int *)(ptr) = __size_name; ptr += 4; memcpy(ptr, name, __size_name);ptr += __size_name; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + int retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetAttribLocation: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -1034,17 +1752,36 @@ void glGetBooleanv_enc(void *self , GLenum pname, GLboolean* params) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLboolean)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetBooleanv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetBooleanv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetBufferParameteriv_enc(void *self , GLenum target, GLenum pname, GLint* params) @@ -1052,18 +1789,37 @@ void glGetBufferParameteriv_enc(void *self , GLenum target, GLenum pname, GLint* gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetBufferParameteriv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetBufferParameteriv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } GLenum glGetError_enc(void *self ) @@ -1071,16 +1827,35 @@ GLenum glGetError_enc(void *self ) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetError;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; GLenum retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetError: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -1089,17 +1864,36 @@ void glGetFloatv_enc(void *self , GLenum pname, GLfloat* params) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetFloatv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetFloatv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetFramebufferAttachmentParameteriv_enc(void *self , GLenum target, GLenum attachment, GLenum pname, GLint* params) @@ -1107,19 +1901,38 @@ void glGetFramebufferAttachmentParameteriv_enc(void *self , GLenum target, GLenu gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetFramebufferAttachmentParameteriv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &attachment, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetFramebufferAttachmentParameteriv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetIntegerv_enc(void *self , GLenum pname, GLint* params) @@ -1127,17 +1940,36 @@ void glGetIntegerv_enc(void *self , GLenum pname, GLint* params) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetIntegerv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetIntegerv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetProgramiv_enc(void *self , GLuint program, GLenum pname, GLint* params) @@ -1145,18 +1977,37 @@ void glGetProgramiv_enc(void *self , GLuint program, GLenum pname, GLint* params gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = sizeof(GLint); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetProgramiv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetProgramiv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetProgramInfoLog_enc(void *self , GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog) @@ -1164,21 +2015,43 @@ void glGetProgramInfoLog_enc(void *self , GLuint program, GLsizei bufsize, GLsiz gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_length = ((length != NULL) ? sizeof(GLsizei) : 0); const unsigned int __size_infolog = bufsize; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_length + __size_infolog + 2*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_length + __size_infolog + 2*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetProgramInfoLog;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; memcpy(ptr, &bufsize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_length; ptr += 4; *(unsigned int *)(ptr) = __size_infolog; ptr += 4; - if (length != NULL) stream->readback(length, __size_length); + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + if (length != NULL) { + stream->readback(length, __size_length); + if (useChecksum) checksumCalculator->addBuffer(length, __size_length); + } stream->readback(infolog, __size_infolog); + if (useChecksum) checksumCalculator->addBuffer(infolog, __size_infolog); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetProgramInfoLog: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetRenderbufferParameteriv_enc(void *self , GLenum target, GLenum pname, GLint* params) @@ -1186,18 +2059,37 @@ void glGetRenderbufferParameteriv_enc(void *self , GLenum target, GLenum pname, gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = sizeof(GLint); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetRenderbufferParameteriv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetRenderbufferParameteriv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetShaderiv_enc(void *self , GLuint shader, GLenum pname, GLint* params) @@ -1205,18 +2097,37 @@ void glGetShaderiv_enc(void *self , GLuint shader, GLenum pname, GLint* params) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = sizeof(GLint); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetShaderiv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &shader, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetShaderiv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetShaderInfoLog_enc(void *self , GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog) @@ -1224,21 +2135,43 @@ void glGetShaderInfoLog_enc(void *self , GLuint shader, GLsizei bufsize, GLsizei gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_length = ((length != NULL) ? (sizeof(GLsizei)) : 0); const unsigned int __size_infolog = bufsize; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_length + __size_infolog + 2*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_length + __size_infolog + 2*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetShaderInfoLog;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &shader, 4); ptr += 4; memcpy(ptr, &bufsize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_length; ptr += 4; *(unsigned int *)(ptr) = __size_infolog; ptr += 4; - if (length != NULL) stream->readback(length, __size_length); + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + if (length != NULL) { + stream->readback(length, __size_length); + if (useChecksum) checksumCalculator->addBuffer(length, __size_length); + } stream->readback(infolog, __size_infolog); + if (useChecksum) checksumCalculator->addBuffer(infolog, __size_infolog); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetShaderInfoLog: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetShaderPrecisionFormat_enc(void *self , GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) @@ -1246,21 +2179,41 @@ void glGetShaderPrecisionFormat_enc(void *self , GLenum shadertype, GLenum preci gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_range = (2 * sizeof(GLint)); const unsigned int __size_precision = (sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_range + __size_precision + 2*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_range + __size_precision + 2*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetShaderPrecisionFormat;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &shadertype, 4); ptr += 4; memcpy(ptr, &precisiontype, 4); ptr += 4; *(unsigned int *)(ptr) = __size_range; ptr += 4; *(unsigned int *)(ptr) = __size_precision; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(range, __size_range); + if (useChecksum) checksumCalculator->addBuffer(range, __size_range); stream->readback(precision, __size_precision); + if (useChecksum) checksumCalculator->addBuffer(precision, __size_precision); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetShaderPrecisionFormat: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetShaderSource_enc(void *self , GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source) @@ -1268,21 +2221,43 @@ void glGetShaderSource_enc(void *self , GLuint shader, GLsizei bufsize, GLsizei* gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_length = ((length != NULL) ? (sizeof(GLsizei)) : 0); const unsigned int __size_source = bufsize; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_length + __size_source + 2*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_length + __size_source + 2*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetShaderSource;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &shader, 4); ptr += 4; memcpy(ptr, &bufsize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_length; ptr += 4; *(unsigned int *)(ptr) = __size_source; ptr += 4; - if (length != NULL) stream->readback(length, __size_length); + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + if (length != NULL) { + stream->readback(length, __size_length); + if (useChecksum) checksumCalculator->addBuffer(length, __size_length); + } stream->readback(source, __size_source); + if (useChecksum) checksumCalculator->addBuffer(source, __size_source); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetShaderSource: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetTexParameterfv_enc(void *self , GLenum target, GLenum pname, GLfloat* params) @@ -1290,18 +2265,37 @@ void glGetTexParameterfv_enc(void *self , GLenum target, GLenum pname, GLfloat* gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetTexParameterfv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetTexParameterfv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetTexParameteriv_enc(void *self , GLenum target, GLenum pname, GLint* params) @@ -1309,18 +2303,37 @@ void glGetTexParameteriv_enc(void *self , GLenum target, GLenum pname, GLint* pa gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetTexParameteriv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetTexParameteriv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetUniformfv_enc(void *self , GLuint program, GLint location, GLfloat* params) @@ -1328,18 +2341,37 @@ void glGetUniformfv_enc(void *self , GLuint program, GLint location, GLfloat* pa gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = glSizeof(glesv2_enc::uniformType(self, program, location)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetUniformfv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetUniformfv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetUniformiv_enc(void *self , GLuint program, GLint location, GLint* params) @@ -1347,18 +2379,37 @@ void glGetUniformiv_enc(void *self , GLuint program, GLint location, GLint* para gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = glSizeof(glesv2_enc::uniformType(self, program, location)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetUniformiv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetUniformiv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } int glGetUniformLocation_enc(void *self , GLuint program, const GLchar* name) @@ -1366,20 +2417,39 @@ int glGetUniformLocation_enc(void *self , GLuint program, const GLchar* name) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_name = (strlen(name) + 1); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_name + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_name + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetUniformLocation;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; *(unsigned int *)(ptr) = __size_name; ptr += 4; memcpy(ptr, name, __size_name);ptr += __size_name; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + int retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetUniformLocation: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -1388,18 +2458,37 @@ void glGetVertexAttribfv_enc(void *self , GLuint index, GLenum pname, GLfloat* p gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetVertexAttribfv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &index, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetVertexAttribfv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glGetVertexAttribiv_enc(void *self , GLuint index, GLenum pname, GLint* params) @@ -1407,18 +2496,37 @@ void glGetVertexAttribiv_enc(void *self , GLuint index, GLenum pname, GLint* par gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetVertexAttribiv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &index, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(params, __size_params); + if (useChecksum) checksumCalculator->addBuffer(params, __size_params); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetVertexAttribiv: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glHint_enc(void *self , GLenum target, GLenum mode) @@ -1426,15 +2534,25 @@ void glHint_enc(void *self , GLenum target, GLenum mode) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glHint;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &mode, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } GLboolean glIsBuffer_enc(void *self , GLuint buffer) @@ -1442,17 +2560,36 @@ GLboolean glIsBuffer_enc(void *self , GLuint buffer) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glIsBuffer;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &buffer, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glIsBuffer: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -1461,17 +2598,36 @@ GLboolean glIsEnabled_enc(void *self , GLenum cap) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glIsEnabled;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &cap, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glIsEnabled: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -1480,17 +2636,36 @@ GLboolean glIsFramebuffer_enc(void *self , GLuint framebuffer) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glIsFramebuffer;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &framebuffer, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glIsFramebuffer: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -1499,17 +2674,36 @@ GLboolean glIsProgram_enc(void *self , GLuint program) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glIsProgram;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glIsProgram: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -1518,17 +2712,36 @@ GLboolean glIsRenderbuffer_enc(void *self , GLuint renderbuffer) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glIsRenderbuffer;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &renderbuffer, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glIsRenderbuffer: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -1537,17 +2750,36 @@ GLboolean glIsShader_enc(void *self , GLuint shader) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glIsShader;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &shader, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glIsShader: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -1556,17 +2788,36 @@ GLboolean glIsTexture_enc(void *self , GLuint texture) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glIsTexture;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &texture, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glIsTexture: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -1575,14 +2826,24 @@ void glLineWidth_enc(void *self , GLfloat width) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLineWidth;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glLinkProgram_enc(void *self , GLuint program) @@ -1590,14 +2851,24 @@ void glLinkProgram_enc(void *self , GLuint program) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glLinkProgram;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPixelStorei_enc(void *self , GLenum pname, GLint param) @@ -1605,15 +2876,25 @@ void glPixelStorei_enc(void *self , GLenum pname, GLint param) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPixelStorei;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glPolygonOffset_enc(void *self , GLfloat factor, GLfloat units) @@ -1621,15 +2902,25 @@ void glPolygonOffset_enc(void *self , GLfloat factor, GLfloat units) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glPolygonOffset;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &factor, 4); ptr += 4; memcpy(ptr, &units, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glReadPixels_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels) @@ -1637,13 +2928,19 @@ void glReadPixels_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei heig gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_pixels = glesv2_enc::pixelDataSize(self, width, height, format, type, 1); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glReadPixels;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; @@ -1652,7 +2949,20 @@ void glReadPixels_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei heig memcpy(ptr, &format, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; *(unsigned int *)(ptr) = __size_pixels; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(pixels, __size_pixels); + if (useChecksum) checksumCalculator->addBuffer(pixels, __size_pixels); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glReadPixels: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glReleaseShaderCompiler_enc(void *self ) @@ -1660,12 +2970,22 @@ void glReleaseShaderCompiler_enc(void *self ) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glReleaseShaderCompiler;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; } @@ -1674,17 +2994,27 @@ void glRenderbufferStorage_enc(void *self , GLenum target, GLenum internalformat gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glRenderbufferStorage;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &internalformat, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glSampleCoverage_enc(void *self , GLclampf value, GLboolean invert) @@ -1692,15 +3022,25 @@ void glSampleCoverage_enc(void *self , GLclampf value, GLboolean invert) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 1; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 1; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glSampleCoverage;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &value, 4); ptr += 4; memcpy(ptr, &invert, 1); ptr += 1; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glScissor_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height) @@ -1708,17 +3048,27 @@ void glScissor_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glScissor;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glStencilFunc_enc(void *self , GLenum func, GLint ref, GLuint mask) @@ -1726,16 +3076,26 @@ void glStencilFunc_enc(void *self , GLenum func, GLint ref, GLuint mask) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glStencilFunc;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &func, 4); ptr += 4; memcpy(ptr, &ref, 4); ptr += 4; memcpy(ptr, &mask, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glStencilFuncSeparate_enc(void *self , GLenum face, GLenum func, GLint ref, GLuint mask) @@ -1743,17 +3103,27 @@ void glStencilFuncSeparate_enc(void *self , GLenum face, GLenum func, GLint ref, gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glStencilFuncSeparate;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &face, 4); ptr += 4; memcpy(ptr, &func, 4); ptr += 4; memcpy(ptr, &ref, 4); ptr += 4; memcpy(ptr, &mask, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glStencilMask_enc(void *self , GLuint mask) @@ -1761,14 +3131,24 @@ void glStencilMask_enc(void *self , GLuint mask) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glStencilMask;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mask, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glStencilMaskSeparate_enc(void *self , GLenum face, GLuint mask) @@ -1776,15 +3156,25 @@ void glStencilMaskSeparate_enc(void *self , GLenum face, GLuint mask) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glStencilMaskSeparate;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &face, 4); ptr += 4; memcpy(ptr, &mask, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glStencilOp_enc(void *self , GLenum fail, GLenum zfail, GLenum zpass) @@ -1792,16 +3182,26 @@ void glStencilOp_enc(void *self , GLenum fail, GLenum zfail, GLenum zpass) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glStencilOp;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &fail, 4); ptr += 4; memcpy(ptr, &zfail, 4); ptr += 4; memcpy(ptr, &zpass, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glStencilOpSeparate_enc(void *self , GLenum face, GLenum fail, GLenum zfail, GLenum zpass) @@ -1809,17 +3209,27 @@ void glStencilOpSeparate_enc(void *self , GLenum face, GLenum fail, GLenum zfail gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glStencilOpSeparate;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &face, 4); ptr += 4; memcpy(ptr, &fail, 4); ptr += 4; memcpy(ptr, &zfail, 4); ptr += 4; memcpy(ptr, &zpass, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexImage2D_enc(void *self , GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels) @@ -1827,13 +3237,19 @@ void glTexImage2D_enc(void *self , GLenum target, GLint level, GLint internalfor gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_pixels = ((pixels != NULL) ? glesv2_enc::pixelDataSize(self, width, height, format, type, 0) : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; - ptr = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + ptr = buf; int tmp = OP_glTexImage2D;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -1843,9 +3259,18 @@ void glTexImage2D_enc(void *self , GLenum target, GLint level, GLint internalfor memcpy(ptr, &border, 4); ptr += 4; memcpy(ptr, &format, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); stream->flush(); stream->writeFully(&__size_pixels,4); - if (pixels != NULL) stream->writeFully(pixels, __size_pixels); + if (useChecksum) checksumCalculator->addBuffer(&__size_pixels,4); + if (pixels != NULL) { + stream->writeFully(pixels, __size_pixels); + if (useChecksum) checksumCalculator->addBuffer(pixels, __size_pixels); + } + buf = stream->alloc(checksumSize); + if (useChecksum) checksumCalculator->writeChecksum(buf, checksumSize); + } void glTexParameterf_enc(void *self , GLenum target, GLenum pname, GLfloat param) @@ -1853,16 +3278,26 @@ void glTexParameterf_enc(void *self , GLenum target, GLenum pname, GLfloat param gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexParameterf;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexParameterfv_enc(void *self , GLenum target, GLenum pname, const GLfloat* params) @@ -1870,18 +3305,28 @@ void glTexParameterfv_enc(void *self , GLenum target, GLenum pname, const GLfloa gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexParameterfv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexParameteri_enc(void *self , GLenum target, GLenum pname, GLint param) @@ -1889,16 +3334,26 @@ void glTexParameteri_enc(void *self , GLenum target, GLenum pname, GLint param) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexParameteri;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexParameteriv_enc(void *self , GLenum target, GLenum pname, const GLint* params) @@ -1906,18 +3361,28 @@ void glTexParameteriv_enc(void *self , GLenum target, GLenum pname, const GLint* gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_params = (glUtilsParamSize(pname) * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_params + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_params + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glTexParameteriv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &pname, 4); ptr += 4; *(unsigned int *)(ptr) = __size_params; ptr += 4; memcpy(ptr, params, __size_params);ptr += __size_params; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels) @@ -1925,13 +3390,19 @@ void glTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset, gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_pixels = ((pixels != NULL) ? glesv2_enc::pixelDataSize(self, width, height, format, type, 0) : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; - ptr = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + ptr = buf; int tmp = OP_glTexSubImage2D;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -1941,9 +3412,18 @@ void glTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset, memcpy(ptr, &height, 4); ptr += 4; memcpy(ptr, &format, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); stream->flush(); stream->writeFully(&__size_pixels,4); - if (pixels != NULL) stream->writeFully(pixels, __size_pixels); + if (useChecksum) checksumCalculator->addBuffer(&__size_pixels,4); + if (pixels != NULL) { + stream->writeFully(pixels, __size_pixels); + if (useChecksum) checksumCalculator->addBuffer(pixels, __size_pixels); + } + buf = stream->alloc(checksumSize); + if (useChecksum) checksumCalculator->writeChecksum(buf, checksumSize); + } void glUniform1f_enc(void *self , GLint location, GLfloat x) @@ -1951,15 +3431,25 @@ void glUniform1f_enc(void *self , GLint location, GLfloat x) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniform1f;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniform1fv_enc(void *self , GLint location, GLsizei count, const GLfloat* v) @@ -1967,18 +3457,28 @@ void glUniform1fv_enc(void *self , GLint location, GLsizei count, const GLfloat* gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_v = (count * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_v + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_v + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniform1fv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; *(unsigned int *)(ptr) = __size_v; ptr += 4; memcpy(ptr, v, __size_v);ptr += __size_v; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniform1i_enc(void *self , GLint location, GLint x) @@ -1986,15 +3486,25 @@ void glUniform1i_enc(void *self , GLint location, GLint x) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniform1i;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniform1iv_enc(void *self , GLint location, GLsizei count, const GLint* v) @@ -2002,18 +3512,28 @@ void glUniform1iv_enc(void *self , GLint location, GLsizei count, const GLint* v gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_v = (count * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_v + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_v + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniform1iv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; *(unsigned int *)(ptr) = __size_v; ptr += 4; memcpy(ptr, v, __size_v);ptr += __size_v; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniform2f_enc(void *self , GLint location, GLfloat x, GLfloat y) @@ -2021,16 +3541,26 @@ void glUniform2f_enc(void *self , GLint location, GLfloat x, GLfloat y) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniform2f;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniform2fv_enc(void *self , GLint location, GLsizei count, const GLfloat* v) @@ -2038,18 +3568,28 @@ void glUniform2fv_enc(void *self , GLint location, GLsizei count, const GLfloat* gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_v = (count * 2 * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_v + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_v + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniform2fv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; *(unsigned int *)(ptr) = __size_v; ptr += 4; memcpy(ptr, v, __size_v);ptr += __size_v; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniform2i_enc(void *self , GLint location, GLint x, GLint y) @@ -2057,16 +3597,26 @@ void glUniform2i_enc(void *self , GLint location, GLint x, GLint y) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniform2i;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniform2iv_enc(void *self , GLint location, GLsizei count, const GLint* v) @@ -2074,18 +3624,28 @@ void glUniform2iv_enc(void *self , GLint location, GLsizei count, const GLint* v gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_v = (count * 2 * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_v + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_v + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniform2iv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; *(unsigned int *)(ptr) = __size_v; ptr += 4; memcpy(ptr, v, __size_v);ptr += __size_v; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniform3f_enc(void *self , GLint location, GLfloat x, GLfloat y, GLfloat z) @@ -2093,17 +3653,27 @@ void glUniform3f_enc(void *self , GLint location, GLfloat x, GLfloat y, GLfloat gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniform3f;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniform3fv_enc(void *self , GLint location, GLsizei count, const GLfloat* v) @@ -2111,18 +3681,28 @@ void glUniform3fv_enc(void *self , GLint location, GLsizei count, const GLfloat* gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_v = (count * 3 * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_v + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_v + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniform3fv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; *(unsigned int *)(ptr) = __size_v; ptr += 4; memcpy(ptr, v, __size_v);ptr += __size_v; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniform3i_enc(void *self , GLint location, GLint x, GLint y, GLint z) @@ -2130,17 +3710,27 @@ void glUniform3i_enc(void *self , GLint location, GLint x, GLint y, GLint z) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniform3i;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniform3iv_enc(void *self , GLint location, GLsizei count, const GLint* v) @@ -2148,18 +3738,28 @@ void glUniform3iv_enc(void *self , GLint location, GLsizei count, const GLint* v gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_v = (3 * count * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_v + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_v + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniform3iv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; *(unsigned int *)(ptr) = __size_v; ptr += 4; memcpy(ptr, v, __size_v);ptr += __size_v; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniform4f_enc(void *self , GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) @@ -2167,18 +3767,28 @@ void glUniform4f_enc(void *self , GLint location, GLfloat x, GLfloat y, GLfloat gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniform4f;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; memcpy(ptr, &w, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniform4fv_enc(void *self , GLint location, GLsizei count, const GLfloat* v) @@ -2186,18 +3796,28 @@ void glUniform4fv_enc(void *self , GLint location, GLsizei count, const GLfloat* gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_v = (4 * count * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_v + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_v + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniform4fv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; *(unsigned int *)(ptr) = __size_v; ptr += 4; memcpy(ptr, v, __size_v);ptr += __size_v; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniform4i_enc(void *self , GLint location, GLint x, GLint y, GLint z, GLint w) @@ -2205,18 +3825,28 @@ void glUniform4i_enc(void *self , GLint location, GLint x, GLint y, GLint z, GLi gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniform4i;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; memcpy(ptr, &w, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniform4iv_enc(void *self , GLint location, GLsizei count, const GLint* v) @@ -2224,18 +3854,28 @@ void glUniform4iv_enc(void *self , GLint location, GLsizei count, const GLint* v gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_v = (4 * count * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_v + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_v + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniform4iv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; *(unsigned int *)(ptr) = __size_v; ptr += 4; memcpy(ptr, v, __size_v);ptr += __size_v; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniformMatrix2fv_enc(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) @@ -2243,19 +3883,29 @@ void glUniformMatrix2fv_enc(void *self , GLint location, GLsizei count, GLboolea gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_value = (count * 4 * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 1 + __size_value + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 1 + __size_value + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniformMatrix2fv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; memcpy(ptr, &transpose, 1); ptr += 1; *(unsigned int *)(ptr) = __size_value; ptr += 4; memcpy(ptr, value, __size_value);ptr += __size_value; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniformMatrix3fv_enc(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) @@ -2263,19 +3913,29 @@ void glUniformMatrix3fv_enc(void *self , GLint location, GLsizei count, GLboolea gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_value = (count * 9 * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 1 + __size_value + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 1 + __size_value + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniformMatrix3fv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; memcpy(ptr, &transpose, 1); ptr += 1; *(unsigned int *)(ptr) = __size_value; ptr += 4; memcpy(ptr, value, __size_value);ptr += __size_value; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUniformMatrix4fv_enc(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) @@ -2283,19 +3943,29 @@ void glUniformMatrix4fv_enc(void *self , GLint location, GLsizei count, GLboolea gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_value = (count * 16 * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 1 + __size_value + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 1 + __size_value + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUniformMatrix4fv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &location, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; memcpy(ptr, &transpose, 1); ptr += 1; *(unsigned int *)(ptr) = __size_value; ptr += 4; memcpy(ptr, value, __size_value);ptr += __size_value; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glUseProgram_enc(void *self , GLuint program) @@ -2303,14 +3973,24 @@ void glUseProgram_enc(void *self , GLuint program) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUseProgram;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glValidateProgram_enc(void *self , GLuint program) @@ -2318,14 +3998,24 @@ void glValidateProgram_enc(void *self , GLuint program) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glValidateProgram;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &program, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glVertexAttrib1f_enc(void *self , GLuint indx, GLfloat x) @@ -2333,15 +4023,25 @@ void glVertexAttrib1f_enc(void *self , GLuint indx, GLfloat x) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glVertexAttrib1f;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &indx, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glVertexAttrib1fv_enc(void *self , GLuint indx, const GLfloat* values) @@ -2349,17 +4049,27 @@ void glVertexAttrib1fv_enc(void *self , GLuint indx, const GLfloat* values) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_values = (sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_values + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_values + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glVertexAttrib1fv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &indx, 4); ptr += 4; *(unsigned int *)(ptr) = __size_values; ptr += 4; memcpy(ptr, values, __size_values);ptr += __size_values; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glVertexAttrib2f_enc(void *self , GLuint indx, GLfloat x, GLfloat y) @@ -2367,16 +4077,26 @@ void glVertexAttrib2f_enc(void *self , GLuint indx, GLfloat x, GLfloat y) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glVertexAttrib2f;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &indx, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glVertexAttrib2fv_enc(void *self , GLuint indx, const GLfloat* values) @@ -2384,17 +4104,27 @@ void glVertexAttrib2fv_enc(void *self , GLuint indx, const GLfloat* values) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_values = (2 * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_values + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_values + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glVertexAttrib2fv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &indx, 4); ptr += 4; *(unsigned int *)(ptr) = __size_values; ptr += 4; memcpy(ptr, values, __size_values);ptr += __size_values; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glVertexAttrib3f_enc(void *self , GLuint indx, GLfloat x, GLfloat y, GLfloat z) @@ -2402,17 +4132,27 @@ void glVertexAttrib3f_enc(void *self , GLuint indx, GLfloat x, GLfloat y, GLfloa gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glVertexAttrib3f;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &indx, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glVertexAttrib3fv_enc(void *self , GLuint indx, const GLfloat* values) @@ -2420,17 +4160,27 @@ void glVertexAttrib3fv_enc(void *self , GLuint indx, const GLfloat* values) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_values = (3 * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_values + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_values + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glVertexAttrib3fv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &indx, 4); ptr += 4; *(unsigned int *)(ptr) = __size_values; ptr += 4; memcpy(ptr, values, __size_values);ptr += __size_values; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glVertexAttrib4f_enc(void *self , GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) @@ -2438,18 +4188,28 @@ void glVertexAttrib4f_enc(void *self , GLuint indx, GLfloat x, GLfloat y, GLfloa gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glVertexAttrib4f;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &indx, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &z, 4); ptr += 4; memcpy(ptr, &w, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glVertexAttrib4fv_enc(void *self , GLuint indx, const GLfloat* values) @@ -2457,17 +4217,27 @@ void glVertexAttrib4fv_enc(void *self , GLuint indx, const GLfloat* values) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_values = (4 * sizeof(GLfloat)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_values + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_values + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glVertexAttrib4fv;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &indx, 4); ptr += 4; *(unsigned int *)(ptr) = __size_values; ptr += 4; memcpy(ptr, values, __size_values);ptr += __size_values; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glViewport_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height) @@ -2475,17 +4245,27 @@ void glViewport_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glViewport;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glEGLImageTargetTexture2DOES_enc(void *self , GLenum target, GLeglImageOES image) @@ -2493,15 +4273,25 @@ void glEGLImageTargetTexture2DOES_enc(void *self , GLenum target, GLeglImageOES gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glEGLImageTargetTexture2DOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &image, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glEGLImageTargetRenderbufferStorageOES_enc(void *self , GLenum target, GLeglImageOES image) @@ -2509,15 +4299,25 @@ void glEGLImageTargetRenderbufferStorageOES_enc(void *self , GLenum target, GLeg gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glEGLImageTargetRenderbufferStorageOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &image, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } GLboolean glUnmapBufferOES_enc(void *self , GLenum target) @@ -2525,17 +4325,36 @@ GLboolean glUnmapBufferOES_enc(void *self , GLenum target) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glUnmapBufferOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glUnmapBufferOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -2544,13 +4363,19 @@ void glTexImage3DOES_enc(void *self , GLenum target, GLint level, GLenum interna gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_pixels = ((pixels != NULL) ? glesv2_enc::pixelDataSize3D(self, width, height, depth, format, type, 0) : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; - ptr = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + ptr = buf; int tmp = OP_glTexImage3DOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -2561,9 +4386,18 @@ void glTexImage3DOES_enc(void *self , GLenum target, GLint level, GLenum interna memcpy(ptr, &border, 4); ptr += 4; memcpy(ptr, &format, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); stream->flush(); stream->writeFully(&__size_pixels,4); - if (pixels != NULL) stream->writeFully(pixels, __size_pixels); + if (useChecksum) checksumCalculator->addBuffer(&__size_pixels,4); + if (pixels != NULL) { + stream->writeFully(pixels, __size_pixels); + if (useChecksum) checksumCalculator->addBuffer(pixels, __size_pixels); + } + buf = stream->alloc(checksumSize); + if (useChecksum) checksumCalculator->writeChecksum(buf, checksumSize); + } void glTexSubImage3DOES_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels) @@ -2571,13 +4405,19 @@ void glTexSubImage3DOES_enc(void *self , GLenum target, GLint level, GLint xoffs gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; - const unsigned int __size_pixels = glesv2_enc::pixelDataSize3D(self, width, height, depth, format, type, 0); + const unsigned int __size_pixels = ((pixels != NULL) ? glesv2_enc::pixelDataSize3D(self, width, height, depth, format, type, 0) : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; - ptr = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + ptr = buf; int tmp = OP_glTexSubImage3DOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -2589,9 +4429,18 @@ void glTexSubImage3DOES_enc(void *self , GLenum target, GLint level, GLint xoffs memcpy(ptr, &depth, 4); ptr += 4; memcpy(ptr, &format, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); stream->flush(); stream->writeFully(&__size_pixels,4); - stream->writeFully(pixels, __size_pixels); + if (useChecksum) checksumCalculator->addBuffer(&__size_pixels,4); + if (pixels != NULL) { + stream->writeFully(pixels, __size_pixels); + if (useChecksum) checksumCalculator->addBuffer(pixels, __size_pixels); + } + buf = stream->alloc(checksumSize); + if (useChecksum) checksumCalculator->writeChecksum(buf, checksumSize); + } void glCopyTexSubImage3DOES_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) @@ -2599,12 +4448,18 @@ void glCopyTexSubImage3DOES_enc(void *self , GLenum target, GLint level, GLint x gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glCopyTexSubImage3DOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -2615,6 +4470,10 @@ void glCopyTexSubImage3DOES_enc(void *self , GLenum target, GLint level, GLint x memcpy(ptr, &y, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glCompressedTexImage3DOES_enc(void *self , GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) @@ -2622,13 +4481,19 @@ void glCompressedTexImage3DOES_enc(void *self , GLenum target, GLint level, GLen gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; - const unsigned int __size_data = imageSize; + const unsigned int __size_data = ((data != NULL) ? imageSize : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_data + 1*4; - ptr = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_data + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + ptr = buf; int tmp = OP_glCompressedTexImage3DOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -2638,9 +4503,18 @@ void glCompressedTexImage3DOES_enc(void *self , GLenum target, GLint level, GLen memcpy(ptr, &depth, 4); ptr += 4; memcpy(ptr, &border, 4); ptr += 4; memcpy(ptr, &imageSize, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); stream->flush(); stream->writeFully(&__size_data,4); - stream->writeFully(data, __size_data); + if (useChecksum) checksumCalculator->addBuffer(&__size_data,4); + if (data != NULL) { + stream->writeFully(data, __size_data); + if (useChecksum) checksumCalculator->addBuffer(data, __size_data); + } + buf = stream->alloc(checksumSize); + if (useChecksum) checksumCalculator->writeChecksum(buf, checksumSize); + } void glCompressedTexSubImage3DOES_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) @@ -2648,13 +4522,19 @@ void glCompressedTexSubImage3DOES_enc(void *self , GLenum target, GLint level, G gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; - const unsigned int __size_data = imageSize; + const unsigned int __size_data = ((data != NULL) ? imageSize : 0); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_data + 1*4; - ptr = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_data + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + ptr = buf; int tmp = OP_glCompressedTexSubImage3DOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; @@ -2666,9 +4546,18 @@ void glCompressedTexSubImage3DOES_enc(void *self , GLenum target, GLint level, G memcpy(ptr, &depth, 4); ptr += 4; memcpy(ptr, &format, 4); ptr += 4; memcpy(ptr, &imageSize, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); stream->flush(); stream->writeFully(&__size_data,4); - stream->writeFully(data, __size_data); + if (useChecksum) checksumCalculator->addBuffer(&__size_data,4); + if (data != NULL) { + stream->writeFully(data, __size_data); + if (useChecksum) checksumCalculator->addBuffer(data, __size_data); + } + buf = stream->alloc(checksumSize); + if (useChecksum) checksumCalculator->writeChecksum(buf, checksumSize); + } void glFramebufferTexture3DOES_enc(void *self , GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) @@ -2676,12 +4565,18 @@ void glFramebufferTexture3DOES_enc(void *self , GLenum target, GLenum attachment gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFramebufferTexture3DOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &attachment, 4); ptr += 4; @@ -2689,6 +4584,10 @@ void glFramebufferTexture3DOES_enc(void *self , GLenum target, GLenum attachment memcpy(ptr, &texture, 4); ptr += 4; memcpy(ptr, &level, 4); ptr += 4; memcpy(ptr, &zoffset, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glBindVertexArrayOES_enc(void *self , GLuint array) @@ -2696,14 +4595,24 @@ void glBindVertexArrayOES_enc(void *self , GLuint array) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glBindVertexArrayOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &array, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDeleteVertexArraysOES_enc(void *self , GLsizei n, const GLuint* arrays) @@ -2711,17 +4620,27 @@ void glDeleteVertexArraysOES_enc(void *self , GLsizei n, const GLuint* arrays) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_arrays = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_arrays + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_arrays + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDeleteVertexArraysOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_arrays; ptr += 4; memcpy(ptr, arrays, __size_arrays);ptr += __size_arrays; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGenVertexArraysOES_enc(void *self , GLsizei n, GLuint* arrays) @@ -2729,17 +4648,36 @@ void glGenVertexArraysOES_enc(void *self , GLsizei n, GLuint* arrays) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_arrays = (n * sizeof(GLuint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_arrays + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_arrays + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGenVertexArraysOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &n, 4); ptr += 4; *(unsigned int *)(ptr) = __size_arrays; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(arrays, __size_arrays); + if (useChecksum) checksumCalculator->addBuffer(arrays, __size_arrays); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGenVertexArraysOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } GLboolean glIsVertexArrayOES_enc(void *self , GLuint array) @@ -2747,17 +4685,36 @@ GLboolean glIsVertexArrayOES_enc(void *self , GLuint array) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glIsVertexArrayOES;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &array, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + GLboolean retval; stream->readback(&retval, 1); + if (useChecksum) checksumCalculator->addBuffer(&retval, 1); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glIsVertexArrayOES: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -2766,18 +4723,28 @@ void glDiscardFramebufferEXT_enc(void *self , GLenum target, GLsizei numAttachme gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_attachments = (numAttachments * sizeof(GLenum)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + __size_attachments + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + __size_attachments + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDiscardFramebufferEXT;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &target, 4); ptr += 4; memcpy(ptr, &numAttachments, 4); ptr += 4; *(unsigned int *)(ptr) = __size_attachments; ptr += 4; memcpy(ptr, attachments, __size_attachments);ptr += __size_attachments; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glVertexAttribPointerData_enc(void *self , GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, void* data, GLuint datalen) @@ -2785,13 +4752,19 @@ void glVertexAttribPointerData_enc(void *self , GLuint indx, GLint size, GLenum gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_data = datalen; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 1 + 4 + __size_data + 4 + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 1 + 4 + __size_data + 4 + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glVertexAttribPointerData;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &indx, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; @@ -2801,6 +4774,10 @@ void glVertexAttribPointerData_enc(void *self , GLuint indx, GLint size, GLenum *(unsigned int *)(ptr) = __size_data; ptr += 4; glUtilsPackPointerData((unsigned char *)ptr, (unsigned char *)data, size, type, stride, datalen);ptr += __size_data; memcpy(ptr, &datalen, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glVertexAttribPointerOffset_enc(void *self , GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint offset) @@ -2808,12 +4785,18 @@ void glVertexAttribPointerOffset_enc(void *self , GLuint indx, GLint size, GLenu gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 1 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 1 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glVertexAttribPointerOffset;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &indx, 4); ptr += 4; memcpy(ptr, &size, 4); ptr += 4; @@ -2821,6 +4804,10 @@ void glVertexAttribPointerOffset_enc(void *self , GLuint indx, GLint size, GLenu memcpy(ptr, &normalized, 1); ptr += 1; memcpy(ptr, &stride, 4); ptr += 4; memcpy(ptr, &offset, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDrawElementsOffset_enc(void *self , GLenum mode, GLsizei count, GLenum type, GLuint offset) @@ -2828,17 +4815,27 @@ void glDrawElementsOffset_enc(void *self , GLenum mode, GLsizei count, GLenum ty gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDrawElementsOffset;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mode, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; memcpy(ptr, &offset, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glDrawElementsData_enc(void *self , GLenum mode, GLsizei count, GLenum type, void* data, GLuint datalen) @@ -2846,13 +4843,19 @@ void glDrawElementsData_enc(void *self , GLenum mode, GLsizei count, GLenum type gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_data = datalen; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + __size_data + 4 + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + __size_data + 4 + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glDrawElementsData;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &mode, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; @@ -2860,6 +4863,10 @@ void glDrawElementsData_enc(void *self , GLenum mode, GLsizei count, GLenum type *(unsigned int *)(ptr) = __size_data; ptr += 4; memcpy(ptr, data, __size_data);ptr += __size_data; memcpy(ptr, &datalen, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void glGetCompressedTextureFormats_enc(void *self , int count, GLint* formats) @@ -2867,17 +4874,36 @@ void glGetCompressedTextureFormats_enc(void *self , int count, GLint* formats) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_formats = (count * sizeof(GLint)); unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_formats + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_formats + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glGetCompressedTextureFormats;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &count, 4); ptr += 4; *(unsigned int *)(ptr) = __size_formats; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(formats, __size_formats); + if (useChecksum) checksumCalculator->addBuffer(formats, __size_formats); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glGetCompressedTextureFormats: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } void glShaderString_enc(void *self , GLuint shader, const GLchar* string, GLsizei len) @@ -2885,18 +4911,28 @@ void glShaderString_enc(void *self , GLuint shader, const GLchar* string, GLsize gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_string = len; unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_string + 4 + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_string + 4 + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glShaderString;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &shader, 4); ptr += 4; *(unsigned int *)(ptr) = __size_string; ptr += 4; memcpy(ptr, string, __size_string);ptr += __size_string; memcpy(ptr, &len, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } int glFinishRoundTrip_enc(void *self ) @@ -2904,24 +4940,44 @@ int glFinishRoundTrip_enc(void *self ) gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_glFinishRoundTrip;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; int retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("glFinishRoundTrip: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } } // namespace -gl2_encoder_context_t::gl2_encoder_context_t(IOStream *stream) +gl2_encoder_context_t::gl2_encoder_context_t(IOStream *stream, ChecksumCalculator *checksumCalculator) { m_stream = stream; + m_checksumCalculator = checksumCalculator; this->glActiveTexture = &glActiveTexture_enc; this->glAttachShader = &glAttachShader_enc; diff --git a/opengl/system/GLESv2_enc/gl2_enc.h b/opengl/system/GLESv2_enc/gl2_enc.h index 6f83d3e..760d729 100644 --- a/opengl/system/GLESv2_enc/gl2_enc.h +++ b/opengl/system/GLESv2_enc/gl2_enc.h @@ -5,6 +5,7 @@ #define GUARD_gl2_encoder_context_t #include "IOStream.h" +#include "ChecksumCalculator.h" #include "gl2_client_context.h" @@ -15,8 +16,9 @@ struct gl2_encoder_context_t : public gl2_client_context_t { IOStream *m_stream; + ChecksumCalculator *m_checksumCalculator; - gl2_encoder_context_t(IOStream *stream); + gl2_encoder_context_t(IOStream *stream, ChecksumCalculator *checksumCalculator); }; #endif // GUARD_gl2_encoder_context_t
\ No newline at end of file diff --git a/opengl/shared/OpenglCodecCommon/TimeUtils.h b/opengl/system/OpenglSystemCommon/EGLImage.h index bc4fd1c..5edb44e 100644 --- a/opengl/shared/OpenglCodecCommon/TimeUtils.h +++ b/opengl/system/OpenglSystemCommon/EGLImage.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2011 The Android Open Source Project +* Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,10 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef _TIME_UTILS_H -#define _TIME_UTILS_H +#ifndef __COMMON_EGL_IMAGE_H +#define __COMMON_EGL_IMAGE_H -long long GetCurrentTimeMS(); -void TimeSleepMS(int p_mili); +#include <EGL/egl.h> +#include <EGL/eglext.h> +#include <GLES/gl.h> +#include <system/window.h> + +struct EGLImage_t +{ + EGLDisplay dpy; + EGLenum target; + + union + { + android_native_buffer_t *native_buffer; + uint32_t host_egl_image; + }; +}; #endif diff --git a/opengl/system/OpenglSystemCommon/HostConnection.cpp b/opengl/system/OpenglSystemCommon/HostConnection.cpp index 940f5ae..0a30d27 100644 --- a/opengl/system/OpenglSystemCommon/HostConnection.cpp +++ b/opengl/system/OpenglSystemCommon/HostConnection.cpp @@ -20,6 +20,7 @@ #include <cutils/log.h> #include "GLEncoder.h" #include "GL2Encoder.h" +#include <memory> #define STREAM_BUFFER_SIZE 4*1024*1024 #define STREAM_PORT_NUM 22468 @@ -31,7 +32,8 @@ HostConnection::HostConnection() : m_stream(NULL), m_glEnc(NULL), m_gl2Enc(NULL), - m_rcEnc(NULL) + m_rcEnc(NULL), + m_checksumHelper() { } @@ -109,7 +111,7 @@ HostConnection *HostConnection::get() GLEncoder *HostConnection::glEncoder() { if (!m_glEnc) { - m_glEnc = new GLEncoder(m_stream); + m_glEnc = new GLEncoder(m_stream, checksumHelper()); DBG("HostConnection::glEncoder new encoder %p, tid %d", m_glEnc, gettid()); m_glEnc->setContextAccessor(s_getGLContext); } @@ -119,7 +121,7 @@ GLEncoder *HostConnection::glEncoder() GL2Encoder *HostConnection::gl2Encoder() { if (!m_gl2Enc) { - m_gl2Enc = new GL2Encoder(m_stream); + m_gl2Enc = new GL2Encoder(m_stream, checksumHelper()); DBG("HostConnection::gl2Encoder new encoder %p, tid %d", m_gl2Enc, gettid()); m_gl2Enc->setContextAccessor(s_getGL2Context); } @@ -129,7 +131,10 @@ GL2Encoder *HostConnection::gl2Encoder() renderControl_encoder_context_t *HostConnection::rcEncoder() { if (!m_rcEnc) { - m_rcEnc = new renderControl_encoder_context_t(m_stream); + m_rcEnc = new renderControl_encoder_context_t(m_stream, checksumHelper()); + // TODO: disable checksum as a workaround in a glTexSubImage2D problem + // Uncomment the following line when the root cause is solved + //setChecksumHelper(m_rcEnc); } return m_rcEnc; } @@ -151,3 +156,31 @@ gl2_client_context_t *HostConnection::s_getGL2Context() } return NULL; } + +void HostConnection::setChecksumHelper(renderControl_encoder_context_t *rcEnc) { + std::unique_ptr<char[]> glExtensions; + int extensionSize = rcEnc->rcGetGLString(rcEnc, GL_EXTENSIONS, NULL, 0); + if (extensionSize < 0) { + glExtensions = std::unique_ptr<char[]>(new char[-extensionSize]); + extensionSize = rcEnc->rcGetGLString(rcEnc, GL_EXTENSIONS, glExtensions.get(), -extensionSize); + if (extensionSize <= 0) { + glExtensions.reset(); + } + } + // check the host supported version + uint32_t checksumVersion = 0; + const char* checksumPrefix = ChecksumCalculator::getMaxVersionStrPrefix(); + const char* glProtocolStr = glExtensions.get() ? + strstr(glExtensions.get(), checksumPrefix) : NULL; + if (glProtocolStr) { + uint32_t maxVersion = ChecksumCalculator::getMaxVersion(); + sscanf(glProtocolStr+strlen(checksumPrefix), "%d", &checksumVersion); + if (maxVersion < checksumVersion) { + checksumVersion = maxVersion; + } + // The ordering of the following two commands matters! + // Must tell the host first before setting it in the guest + rcEnc->rcSelectChecksumHelper(rcEnc, checksumVersion, 0); + m_checksumHelper.setVersion(checksumVersion); + } +} diff --git a/opengl/system/OpenglSystemCommon/HostConnection.h b/opengl/system/OpenglSystemCommon/HostConnection.h index e7a5ac4..a52fbfa 100644 --- a/opengl/system/OpenglSystemCommon/HostConnection.h +++ b/opengl/system/OpenglSystemCommon/HostConnection.h @@ -18,6 +18,7 @@ #include "IOStream.h" #include "renderControl_enc.h" +#include "ChecksumCalculator.h" class GLEncoder; class gl_client_context_t; @@ -33,6 +34,7 @@ public: GLEncoder *glEncoder(); GL2Encoder *gl2Encoder(); renderControl_encoder_context_t *rcEncoder(); + ChecksumCalculator *checksumHelper() { return &m_checksumHelper; } void flush() { if (m_stream) { @@ -44,12 +46,16 @@ private: HostConnection(); static gl_client_context_t *s_getGLContext(); static gl2_client_context_t *s_getGL2Context(); + // setProtocol initilizes GL communication protocol for checksums + // should be called when m_rcEnc is created + void setChecksumHelper(renderControl_encoder_context_t *rcEnc); private: IOStream *m_stream; GLEncoder *m_glEnc; GL2Encoder *m_gl2Enc; renderControl_encoder_context_t *m_rcEnc; + ChecksumCalculator m_checksumHelper; }; #endif diff --git a/opengl/system/OpenglSystemCommon/QemuPipeStream.cpp b/opengl/system/OpenglSystemCommon/QemuPipeStream.cpp index 3a53161..581aec3 100644 --- a/opengl/system/OpenglSystemCommon/QemuPipeStream.cpp +++ b/opengl/system/OpenglSystemCommon/QemuPipeStream.cpp @@ -88,8 +88,14 @@ int QemuPipeStream::writeFully(const void *buf, size_t len) //DBG(">> QemuPipeStream::writeFully %d\n", len); if (!valid()) return -1; if (!buf) { - if (len>0) ERR("QemuPipeStream::writeFully failed, buf=NULL, len %d", len); - return 0; + if (len>0) { + // If len is non-zero, buf must not be NULL. Otherwise the pipe would be + // in a corrupted state, which is lethal for the emulator. + ERR("QemuPipeStream::writeFully failed, buf=NULL, len %d," + " lethal error, exiting", len); + abort(); + } + return 0; } size_t res = len; @@ -110,8 +116,9 @@ int QemuPipeStream::writeFully(const void *buf, size_t len) continue; } retval = stat; - ERR("QemuPipeStream::writeFully failed: %s\n", strerror(errno)); - break; + ERR("QemuPipeStream::writeFully failed: %s, lethal error, exiting.\n", + strerror(errno)); + abort(); } //DBG("<< QemuPipeStream::writeFully %d\n", len ); return retval; @@ -123,7 +130,11 @@ const unsigned char *QemuPipeStream::readFully(void *buf, size_t len) if (!valid()) return NULL; if (!buf) { if (len > 0) { - ERR("QemuPipeStream::readFully failed, buf=NULL, len %zu", len); + // If len is non-zero, buf must not be NULL. Otherwise the pipe would be + // in a corrupted state, which is lethal for the emulator. + ERR("QemuPipeStream::readFully failed, buf=NULL, len %zu, lethal" + " error, exiting.", len); + abort(); } return NULL; // do not allow NULL buf in that implementation } @@ -138,8 +149,9 @@ const unsigned char *QemuPipeStream::readFully(void *buf, size_t len) continue; } else { ERR("QemuPipeStream::readFully failed (buf %p, len %zu" - ", res %zu): %s\n", buf, len, res, strerror(errno)); - return NULL; + ", res %zu): %s, lethal error, exiting.", buf, len, res, + strerror(errno)); + abort(); } } else { res -= stat; diff --git a/opengl/system/OpenglSystemCommon/ThreadInfo.h b/opengl/system/OpenglSystemCommon/ThreadInfo.h index f59ce2a..9a5dc88 100644 --- a/opengl/system/OpenglSystemCommon/ThreadInfo.h +++ b/opengl/system/OpenglSystemCommon/ThreadInfo.h @@ -18,7 +18,7 @@ #include "HostConnection.h" #include <pthread.h> -#ifdef HAVE_ANDROID_OS +#ifdef __ANDROID__ #include <bionic_tls.h> #endif @@ -36,7 +36,7 @@ struct EGLThreadInfo EGLThreadInfo *slow_getEGLThreadInfo(); -#ifdef HAVE_ANDROID_OS +#ifdef __ANDROID__ // We have a dedicated TLS slot in bionic inline EGLThreadInfo* getEGLThreadInfo() { EGLThreadInfo *tInfo = diff --git a/opengl/system/egl/egl.cpp b/opengl/system/egl/egl.cpp index 86897d4..ae5a889 100644 --- a/opengl/system/egl/egl.cpp +++ b/opengl/system/egl/egl.cpp @@ -24,6 +24,7 @@ #include "GLSharedGroup.h" #include "eglContext.h" #include "ClientAPIExts.h" +#include "EGLImage.h" #include "GLEncoder.h" #ifdef WITH_GLES2 @@ -257,11 +258,6 @@ egl_window_surface_t::egl_window_surface_t ( { // keep a reference on the window nativeWindow->common.incRef(&nativeWindow->common); - EGLint w,h; - nativeWindow->query(nativeWindow, NATIVE_WINDOW_WIDTH, &w); - setWidth(w); - nativeWindow->query(nativeWindow, NATIVE_WINDOW_HEIGHT, &h); - setHeight(h); } EGLBoolean egl_window_surface_t::init() @@ -269,6 +265,8 @@ EGLBoolean egl_window_surface_t::init() if (nativeWindow->dequeueBuffer_DEPRECATED(nativeWindow, &buffer) != NO_ERROR) { setErrorReturn(EGL_BAD_ALLOC, EGL_FALSE); } + setWidth(buffer->width); + setHeight(buffer->height); DEFINE_AND_VALIDATE_HOST_CONNECTION(EGL_FALSE); rcSurface = rcEnc->rcCreateWindowSurface(rcEnc, (uintptr_t)config, @@ -327,6 +325,9 @@ EGLBoolean egl_window_surface_t::swapBuffers() rcEnc->rcSetWindowColorBuffer(rcEnc, rcSurface, ((cb_handle_t *)(buffer->handle))->hostHandle); + setWidth(buffer->width); + setHeight(buffer->height); + return EGL_TRUE; } @@ -635,7 +636,7 @@ EGLSurface eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWin } egl_surface_t* surface = egl_window_surface_t::create( - &s_display, config, surfaceType, static_cast<ANativeWindow*>(win)); + &s_display, config, EGL_WINDOW_BIT, static_cast<ANativeWindow*>(win)); if (!surface) { setErrorReturn(EGL_BAD_ALLOC, EGL_NO_SURFACE); } @@ -659,7 +660,7 @@ EGLSurface eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLin int32_t h = 0; EGLint texFormat = EGL_NO_TEXTURE; EGLint texTarget = EGL_NO_TEXTURE; - while (attrib_list[0]) { + while (attrib_list[0] != EGL_NONE) { switch (attrib_list[0]) { case EGL_WIDTH: w = attrib_list[1]; @@ -689,7 +690,7 @@ EGLSurface eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLin setErrorReturn(EGL_BAD_MATCH, EGL_NO_SURFACE); egl_surface_t* surface = egl_pbuffer_surface_t::create(dpy, config, - surfaceType, w, h, pixelFormat); + EGL_PBUFFER_BIT, w, h, pixelFormat); if (!surface) { setErrorReturn(EGL_BAD_ALLOC, EGL_NO_SURFACE); } @@ -757,6 +758,15 @@ EGLBoolean eglQuerySurface(EGLDisplay dpy, EGLSurface eglSurface, EGLint attribu // and we ignore it when creating a PBuffer surface (default is EGL_FALSE) if (surface->getSurfaceType() & EGL_PBUFFER_BIT) *value = EGL_FALSE; break; + case EGL_MIPMAP_LEVEL: + // not modified for a window or pixmap surface + // and we ignore it when creating a PBuffer surface (default is 0) + if (surface->getSurfaceType() & EGL_PBUFFER_BIT) *value = 0; + break; + case EGL_MULTISAMPLE_RESOLVE: + // ignored when creating the surface, return default + *value = EGL_MULTISAMPLE_RESOLVE_DEFAULT; + break; //TODO: complete other attributes default: ALOGE("eglQuerySurface %x EGL_BAD_ATTRIBUTE", attribute); @@ -807,13 +817,29 @@ EGLSurface eglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, EGL EGLBoolean eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value) { - //TODO - (void)dpy; - (void)surface; - (void)attribute; + // Right now we don't do anything when using host GPU. + // This is purely just to pass the data through + // without issuing a warning. We may benefit from validating the + // display and surface for debug purposes. + // TODO: Find cases where we actually need to do something. + VALIDATE_DISPLAY_INIT(dpy, EGL_FALSE); + VALIDATE_SURFACE_RETURN(surface, EGL_FALSE); + if (surface == EGL_NO_SURFACE) { + setErrorReturn(EGL_BAD_SURFACE, EGL_FALSE); + } + (void)value; - ALOGW("%s not implemented", __FUNCTION__); - return 0; + + switch (attribute) { + case EGL_MIPMAP_LEVEL: + case EGL_MULTISAMPLE_RESOLVE: + case EGL_SWAP_BEHAVIOR: + return true; + break; + default: + ALOGW("%s: attr=0x%x not implemented", __FUNCTION__, attribute); + } + return false; } EGLBoolean eglBindTexImage(EGLDisplay dpy, EGLSurface eglSurface, EGLint buffer) @@ -883,11 +909,16 @@ EGLContext eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_c VALIDATE_CONFIG(config, EGL_NO_CONTEXT); EGLint version = 1; //default - while (attrib_list && attrib_list[0]) { + while (attrib_list && attrib_list[0] != EGL_NONE) { if (attrib_list[0] == EGL_CONTEXT_CLIENT_VERSION) version = attrib_list[1]; attrib_list+=2; } + // Currently only support GLES1 and 2 + if (version != 1 && version != 2) { + setErrorReturn(EGL_BAD_CONFIG, EGL_NO_CONTEXT); + } + uint32_t rcShareCtx = 0; EGLContext_t * shareCtx = NULL; if (share_context) { @@ -1001,7 +1032,7 @@ EGLBoolean eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLC hostCon->glEncoder()->setClientState(context->getClientState()); hostCon->glEncoder()->setSharedGroup(context->getSharedGroup()); } - } + } else if (tInfo->currentContext) { //release ClientState & SharedGroup if (tInfo->currentContext->version == 2) { @@ -1178,52 +1209,93 @@ EGLImageKHR eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EG (void)attrib_list; VALIDATE_DISPLAY_INIT(dpy, EGL_NO_IMAGE_KHR); - if (ctx != EGL_NO_CONTEXT) { - setErrorReturn(EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR); - } - if (target != EGL_NATIVE_BUFFER_ANDROID) { - setErrorReturn(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR); - } - - android_native_buffer_t* native_buffer = (android_native_buffer_t*)buffer; - if (native_buffer->common.magic != ANDROID_NATIVE_BUFFER_MAGIC) - setErrorReturn(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR); + if (target == EGL_NATIVE_BUFFER_ANDROID) { + if (ctx != EGL_NO_CONTEXT) { + setErrorReturn(EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR); + } - if (native_buffer->common.version != sizeof(android_native_buffer_t)) - setErrorReturn(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR); + android_native_buffer_t* native_buffer = (android_native_buffer_t*)buffer; - cb_handle_t *cb = (cb_handle_t *)(native_buffer->handle); + if (native_buffer->common.magic != ANDROID_NATIVE_BUFFER_MAGIC) + setErrorReturn(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR); - switch (cb->format) { - case HAL_PIXEL_FORMAT_RGBA_8888: - case HAL_PIXEL_FORMAT_RGBX_8888: - case HAL_PIXEL_FORMAT_RGB_888: - case HAL_PIXEL_FORMAT_RGB_565: - case HAL_PIXEL_FORMAT_BGRA_8888: - break; - default: + if (native_buffer->common.version != sizeof(android_native_buffer_t)) setErrorReturn(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR); + + cb_handle_t *cb = (cb_handle_t *)(native_buffer->handle); + + switch (cb->format) { + case HAL_PIXEL_FORMAT_RGBA_8888: + case HAL_PIXEL_FORMAT_RGBX_8888: + case HAL_PIXEL_FORMAT_RGB_888: + case HAL_PIXEL_FORMAT_RGB_565: + case HAL_PIXEL_FORMAT_BGRA_8888: + break; + default: + setErrorReturn(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR); + } + + native_buffer->common.incRef(&native_buffer->common); + + EGLImage_t *image = new EGLImage_t(); + image->dpy = dpy; + image->target = target; + image->native_buffer = native_buffer; + + return (EGLImageKHR)image; + } + else if (target == EGL_GL_TEXTURE_2D_KHR) { + VALIDATE_CONTEXT_RETURN(ctx, EGL_NO_IMAGE_KHR); + + EGLContext_t *context = static_cast<EGLContext_t*>(ctx); + DEFINE_AND_VALIDATE_HOST_CONNECTION(EGL_NO_IMAGE_KHR); + + uint32_t ctxHandle = (context) ? context->rcContext : 0; + GLuint texture = (GLuint)reinterpret_cast<uintptr_t>(buffer); + uint32_t img = rcEnc->rcCreateClientImage(rcEnc, ctxHandle, target, texture); + EGLImage_t *image = new EGLImage_t(); + image->dpy = dpy; + image->target = target; + image->host_egl_image = img; + + return (EGLImageKHR)image; } - native_buffer->common.incRef(&native_buffer->common); - return (EGLImageKHR)native_buffer; + setErrorReturn(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR); } EGLBoolean eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR img) { VALIDATE_DISPLAY_INIT(dpy, EGL_FALSE); - android_native_buffer_t* native_buffer = (android_native_buffer_t*)img; + EGLImage_t *image = (EGLImage_t*)img; - if (native_buffer->common.magic != ANDROID_NATIVE_BUFFER_MAGIC) - setErrorReturn(EGL_BAD_PARAMETER, EGL_FALSE); + if (!image || image->dpy != dpy) { + RETURN_ERROR(EGL_FALSE, EGL_BAD_PARAMETER); + } - if (native_buffer->common.version != sizeof(android_native_buffer_t)) - setErrorReturn(EGL_BAD_PARAMETER, EGL_FALSE); + if (image->target == EGL_NATIVE_BUFFER_ANDROID) { + android_native_buffer_t* native_buffer = image->native_buffer; - native_buffer->common.decRef(&native_buffer->common); + if (native_buffer->common.magic != ANDROID_NATIVE_BUFFER_MAGIC) + setErrorReturn(EGL_BAD_PARAMETER, EGL_FALSE); - return EGL_TRUE; + if (native_buffer->common.version != sizeof(android_native_buffer_t)) + setErrorReturn(EGL_BAD_PARAMETER, EGL_FALSE); + + native_buffer->common.decRef(&native_buffer->common); + delete image; + + return EGL_TRUE; + } + else if (image->target == EGL_GL_TEXTURE_2D_KHR) { + uint32_t host_egl_image = image->host_egl_image; + delete image; + DEFINE_AND_VALIDATE_HOST_CONNECTION(EGL_FALSE); + return rcEnc->rcDestroyClientImage(rcEnc, host_egl_image); + } + + setErrorReturn(EGL_BAD_PARAMETER, EGL_FALSE); } #define FENCE_SYNC_HANDLE (EGLSyncKHR)0xFE4CE diff --git a/opengl/system/egl/eglDisplay.cpp b/opengl/system/egl/eglDisplay.cpp index 96540aa..9340482 100644 --- a/opengl/system/egl/eglDisplay.cpp +++ b/opengl/system/egl/eglDisplay.cpp @@ -25,16 +25,10 @@ static const char systemEGLVendor[] = "Google Android emulator"; // NOTE that each extension name should be suffixed with space static const char systemStaticEGLExtensions[] = "EGL_ANDROID_image_native_buffer " - "EGL_KHR_fence_sync "; - -// list of extensions supported by this EGL implementation only if supported -// on the host implementation. -// NOTE that each extension name should be suffixed with space -static const char systemDynamicEGLExtensions[] = + "EGL_KHR_fence_sync " "EGL_KHR_image_base " "EGL_KHR_gl_texture_2d_image "; - static void *s_gles_lib = NULL; static void *s_gles2_lib = NULL; @@ -309,28 +303,6 @@ static char *buildExtensionString() return strdup(systemStaticEGLExtensions); } - // - // Filter host extension list to include only extensions - // we can support (in the systemDynamicEGLExtensions list) - // - char *ext = (char *)hostExt; - char *c = ext; - char *insert = ext; - while(*c != '\0') { - if (*c == ' ') { - int len = c - ext; - if (findExtInList(ext, len, systemDynamicEGLExtensions)) { - if (ext != insert) { - memcpy(insert, ext, len+1); // including space - } - insert += (len + 1); - } - ext = c + 1; - } - c++; - } - *insert = '\0'; - int n = strlen(hostExt); if (n > 0) { char *str; @@ -498,8 +470,12 @@ EGLBoolean eglDisplay::getConfigGLPixelFormat(EGLConfig config, GLenum * format) } //calculate the GL internal format - if ((redSize==8)&&(blueSize==8)&&(blueSize==8)&&(alphaSize==8)) *format = GL_RGBA; - else if ((redSize==8)&&(greenSize==8)&&(blueSize==8)&&(alphaSize==0)) *format = GL_RGB; + if ((redSize == greenSize) && (redSize == blueSize) && + ((redSize == 8) || (redSize == 16) || (redSize == 32))) + { + if (alphaSize == 0) *format = GL_RGB; + else *format = GL_RGBA; + } else if ((redSize==5)&&(greenSize==6)&&(blueSize==5)&&(alphaSize==0)) *format = GL_RGB565_OES; else if ((redSize==5)&&(greenSize==5)&&(blueSize==5)&&(alphaSize==1)) *format = GL_RGB5_A1_OES; else if ((redSize==4)&&(greenSize==4)&&(blueSize==4)&&(alphaSize==4)) *format = GL_RGBA4_OES; diff --git a/opengl/system/gralloc/Android.mk b/opengl/system/gralloc/Android.mk index 71ac2f2..b93164a 100644 --- a/opengl/system/gralloc/Android.mk +++ b/opengl/system/gralloc/Android.mk @@ -17,4 +17,19 @@ LOCAL_SHARED_LIBRARIES += libdl $(call emugl-end-module) +$(call emugl-begin-shared-library,gralloc.ranchu) +$(call emugl-import,libGLESv1_enc lib_renderControl_enc libOpenglSystemCommon) +$(call emugl-set-shared-library-subpath,hw) + +LOCAL_CFLAGS += -DLOG_TAG=\"gralloc_ranchu\" +LOCAL_CFLAGS += -Wno-missing-field-initializers + +LOCAL_SRC_FILES := gralloc.cpp + +# Need to access the special OPENGL TLS Slot +LOCAL_C_INCLUDES += bionic/libc/private +LOCAL_SHARED_LIBRARIES += libdl + +$(call emugl-end-module) + endif # BUILD_EMULATOR_OPENGL_DRIVER != false diff --git a/opengl/system/gralloc/gralloc.cpp b/opengl/system/gralloc/gralloc.cpp index ef18511..f8f9292 100644 --- a/opengl/system/gralloc/gralloc.cpp +++ b/opengl/system/gralloc/gralloc.cpp @@ -312,10 +312,13 @@ static int gralloc_alloc(alloc_device_t* dev, // // Allocate ColorBuffer handle on the host (only if h/w access is allowed) // Only do this for some h/w usages, not all. + // Also do this if we need to read from the surface, in this case the + // rendering will still happen on the host but we also need to be able to + // read back from the color buffer, which requires that there is a buffer // if (usage & (GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_HW_2D | GRALLOC_USAGE_HW_COMPOSER | - GRALLOC_USAGE_HW_FB) ) { + GRALLOC_USAGE_HW_FB | GRALLOC_USAGE_SW_READ_MASK) ) { DEFINE_HOST_CONNECTION; if (hostCon && rcEnc) { cb->hostHandle = rcEnc->rcCreateColorBuffer(rcEnc, w, h, glFormat); @@ -682,12 +685,8 @@ static int gralloc_lock(gralloc_module_t const* module, return -EBUSY; } - const bool sw_read = (cb->usage & GRALLOC_USAGE_SW_READ_MASK); - const bool hw_write = (cb->usage & GRALLOC_USAGE_HW_RENDER); - const bool screen_capture_mode = (sw_read && hw_write); - if (screen_capture_mode) { + if (sw_read) { D("gralloc_lock read back color buffer %d %d\n", cb->width, cb->height); - DEFINE_AND_VALIDATE_HOST_CONNECTION; rcEnc->rcReadColorBuffer(rcEnc, cb->hostHandle, 0, 0, cb->width, cb->height, GL_RGBA, GL_UNSIGNED_BYTE, cpu_addr); } @@ -733,7 +732,7 @@ static int gralloc_unlock(gralloc_module_t const* module, // if buffer was locked for s/w write, we need to update the host with // the updated data // - if (cb->lockedWidth > 0 && cb->lockedHeight > 0 && cb->hostHandle) { + if (cb->hostHandle) { // Make sure we have host connection DEFINE_AND_VALIDATE_HOST_CONNECTION; @@ -1025,7 +1024,7 @@ struct private_module_t HAL_MODULE_INFO_SYM = { /* This function is called once to detect whether the emulator supports * GPU emulation (this is done by looking at the qemu.gles kernel - * parameter, which must be > 0 if this is the case). + * parameter, which must be == 1 if this is the case). * * If not, then load gralloc.default instead as a fallback. */ @@ -1035,11 +1034,14 @@ fallback_init(void) char prop[PROPERTY_VALUE_MAX]; void* module; + // qemu.gles=0 -> no GLES 2.x support (only 1.x through software). + // qemu.gles=1 -> host-side GPU emulation through EmuGL + // qemu.gles=2 -> guest-side GPU emulation. property_get("ro.kernel.qemu.gles", prop, "0"); - if (atoi(prop) > 0) { + if (atoi(prop) == 1) { return; } - ALOGD("Emulator without GPU emulation detected."); + ALOGD("Emulator without host-side GPU emulation detected."); #if __LP64__ module = dlopen("/system/lib64/hw/gralloc.default.so", RTLD_LAZY|RTLD_LOCAL); #else diff --git a/opengl/system/renderControl_enc/README b/opengl/system/renderControl_enc/README index 2ee1a57..349b6db 100644 --- a/opengl/system/renderControl_enc/README +++ b/opengl/system/renderControl_enc/README @@ -134,3 +134,9 @@ void rcUpdateColorBuffer(uint32_t colorbuffer, GLint x, GLint y, GLenum type, void* pixels); Updates the content of a subregion of a colorBuffer object. pixels are always unpacked with alignment of 1. + +uint32_t rcCreateClientImage(uint32_t context, EGLenum target, GLuint buffer) + Create an EGLImage from a client object. + +int rcDestroyClientImage(uint32_t image) + Destroy an EGLImage object. diff --git a/opengl/system/renderControl_enc/renderControl.attrib b/opengl/system/renderControl_enc/renderControl.attrib index 8b9972f..0fa0469 100644 --- a/opengl/system/renderControl_enc/renderControl.attrib +++ b/opengl/system/renderControl_enc/renderControl.attrib @@ -39,3 +39,7 @@ rcUpdateColorBuffer dir pixels in len pixels (((glUtilsPixelBitSize(format, type) * width) >> 3) * height) var_flag pixels isLarge + +rcCloseColorBuffer + flag flushOnEncode + diff --git a/opengl/system/renderControl_enc/renderControl.in b/opengl/system/renderControl_enc/renderControl.in index 8281fd9..ebbf0fe 100644 --- a/opengl/system/renderControl_enc/renderControl.in +++ b/opengl/system/renderControl_enc/renderControl.in @@ -23,3 +23,7 @@ GL_ENTRY(void, rcBindRenderbuffer, uint32_t colorBuffer) GL_ENTRY(EGLint, rcColorBufferCacheFlush, uint32_t colorbuffer, EGLint postCount,int forRead) GL_ENTRY(void, rcReadColorBuffer, uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void *pixels) GL_ENTRY(int, rcUpdateColorBuffer, uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void *pixels) +GL_ENTRY(int, rcOpenColorBuffer2, uint32_t colorbuffer) +GL_ENTRY(uint32_t, rcCreateClientImage, uint32_t context, EGLenum target, GLuint buffer) +GL_ENTRY(int, rcDestroyClientImage, uint32_t image) +GL_ENTRY(void, rcSelectChecksumHelper, uint32_t newProtocol, uint32_t reserved) diff --git a/opengl/system/renderControl_enc/renderControl_client_base.h b/opengl/system/renderControl_enc/renderControl_client_base.h new file mode 100644 index 0000000..4fb5d76 --- /dev/null +++ b/opengl/system/renderControl_enc/renderControl_client_base.h @@ -0,0 +1,41 @@ +// Generated Code - DO NOT EDIT !! +// generated by 'emugen' +#ifndef __renderControl_client_base_t_h +#define __renderControl_client_base_t_h + +#include "renderControl_client_proc.h" + + +struct renderControl_client_base_t { + + rcGetRendererVersion_client_proc_t rcGetRendererVersion; + rcGetEGLVersion_client_proc_t rcGetEGLVersion; + rcQueryEGLString_client_proc_t rcQueryEGLString; + rcGetGLString_client_proc_t rcGetGLString; + rcGetNumConfigs_client_proc_t rcGetNumConfigs; + rcGetConfigs_client_proc_t rcGetConfigs; + rcChooseConfig_client_proc_t rcChooseConfig; + rcGetFBParam_client_proc_t rcGetFBParam; + rcCreateContext_client_proc_t rcCreateContext; + rcDestroyContext_client_proc_t rcDestroyContext; + rcCreateWindowSurface_client_proc_t rcCreateWindowSurface; + rcDestroyWindowSurface_client_proc_t rcDestroyWindowSurface; + rcCreateColorBuffer_client_proc_t rcCreateColorBuffer; + rcOpenColorBuffer_client_proc_t rcOpenColorBuffer; + rcCloseColorBuffer_client_proc_t rcCloseColorBuffer; + rcSetWindowColorBuffer_client_proc_t rcSetWindowColorBuffer; + rcFlushWindowColorBuffer_client_proc_t rcFlushWindowColorBuffer; + rcMakeCurrent_client_proc_t rcMakeCurrent; + rcFBPost_client_proc_t rcFBPost; + rcFBSetSwapInterval_client_proc_t rcFBSetSwapInterval; + rcBindTexture_client_proc_t rcBindTexture; + rcBindRenderbuffer_client_proc_t rcBindRenderbuffer; + rcColorBufferCacheFlush_client_proc_t rcColorBufferCacheFlush; + rcReadColorBuffer_client_proc_t rcReadColorBuffer; + rcUpdateColorBuffer_client_proc_t rcUpdateColorBuffer; + rcOpenColorBuffer2_client_proc_t rcOpenColorBuffer2; + rcCreateClientImage_client_proc_t rcCreateClientImage; + rcDestroyClientImage_client_proc_t rcDestroyClientImage; +}; + +#endif diff --git a/opengl/system/renderControl_enc/renderControl_client_context.cpp b/opengl/system/renderControl_enc/renderControl_client_context.cpp index f58f549..51b62a6 100644 --- a/opengl/system/renderControl_enc/renderControl_client_context.cpp +++ b/opengl/system/renderControl_enc/renderControl_client_context.cpp @@ -36,6 +36,9 @@ int renderControl_client_context_t::initDispatchByName(void *(*getProc)(const ch rcReadColorBuffer = (rcReadColorBuffer_client_proc_t) getProc("rcReadColorBuffer", userData); rcUpdateColorBuffer = (rcUpdateColorBuffer_client_proc_t) getProc("rcUpdateColorBuffer", userData); rcOpenColorBuffer2 = (rcOpenColorBuffer2_client_proc_t) getProc("rcOpenColorBuffer2", userData); + rcCreateClientImage = (rcCreateClientImage_client_proc_t) getProc("rcCreateClientImage", userData); + rcDestroyClientImage = (rcDestroyClientImage_client_proc_t) getProc("rcDestroyClientImage", userData); + rcSelectChecksumHelper = (rcSelectChecksumHelper_client_proc_t) getProc("rcSelectChecksumHelper", userData); return 0; } diff --git a/opengl/system/renderControl_enc/renderControl_client_context.h b/opengl/system/renderControl_enc/renderControl_client_context.h index 4c71d89..f5230f1 100644 --- a/opengl/system/renderControl_enc/renderControl_client_context.h +++ b/opengl/system/renderControl_enc/renderControl_client_context.h @@ -5,6 +5,8 @@ #include "renderControl_client_proc.h" +#include "renderControl_types.h" + struct renderControl_client_context_t { @@ -34,6 +36,9 @@ struct renderControl_client_context_t { rcReadColorBuffer_client_proc_t rcReadColorBuffer; rcUpdateColorBuffer_client_proc_t rcUpdateColorBuffer; rcOpenColorBuffer2_client_proc_t rcOpenColorBuffer2; + rcCreateClientImage_client_proc_t rcCreateClientImage; + rcDestroyClientImage_client_proc_t rcDestroyClientImage; + rcSelectChecksumHelper_client_proc_t rcSelectChecksumHelper; virtual ~renderControl_client_context_t() {} typedef renderControl_client_context_t *CONTEXT_ACCESSOR_TYPE(void); diff --git a/opengl/system/renderControl_enc/renderControl_client_proc.h b/opengl/system/renderControl_enc/renderControl_client_proc.h index 85200cf..7b213d5 100644 --- a/opengl/system/renderControl_enc/renderControl_client_proc.h +++ b/opengl/system/renderControl_enc/renderControl_client_proc.h @@ -35,6 +35,9 @@ typedef EGLint (renderControl_APIENTRY *rcColorBufferCacheFlush_client_proc_t) ( typedef void (renderControl_APIENTRY *rcReadColorBuffer_client_proc_t) (void * ctx, uint32_t, GLint, GLint, GLint, GLint, GLenum, GLenum, void*); typedef int (renderControl_APIENTRY *rcUpdateColorBuffer_client_proc_t) (void * ctx, uint32_t, GLint, GLint, GLint, GLint, GLenum, GLenum, void*); typedef int (renderControl_APIENTRY *rcOpenColorBuffer2_client_proc_t) (void * ctx, uint32_t); +typedef uint32_t (renderControl_APIENTRY *rcCreateClientImage_client_proc_t) (void * ctx, uint32_t, EGLenum, GLuint); +typedef int (renderControl_APIENTRY *rcDestroyClientImage_client_proc_t) (void * ctx, uint32_t); +typedef void (renderControl_APIENTRY *rcSelectChecksumHelper_client_proc_t) (void * ctx, uint32_t, uint32_t); #endif diff --git a/opengl/system/renderControl_enc/renderControl_enc.cpp b/opengl/system/renderControl_enc/renderControl_enc.cpp index 34113e1..2021513 100644 --- a/opengl/system/renderControl_enc/renderControl_enc.cpp +++ b/opengl/system/renderControl_enc/renderControl_enc.cpp @@ -2,6 +2,7 @@ // generated by 'emugen' +#include <memory> #include <string.h> #include "renderControl_opcodes.h" @@ -22,16 +23,35 @@ GLint rcGetRendererVersion_enc(void *self ) renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcGetRendererVersion;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; GLint retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcGetRendererVersion: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -40,22 +60,43 @@ EGLint rcGetEGLVersion_enc(void *self , EGLint* major, EGLint* minor) renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_major = sizeof(EGLint); const unsigned int __size_minor = sizeof(EGLint); unsigned char *ptr; - const size_t packetSize = 8 + __size_major + __size_minor + 2*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_major + __size_minor + 2*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcGetEGLVersion;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_major; ptr += 4; *(unsigned int *)(ptr) = __size_minor; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(major, __size_major); + if (useChecksum) checksumCalculator->addBuffer(major, __size_major); stream->readback(minor, __size_minor); + if (useChecksum) checksumCalculator->addBuffer(minor, __size_minor); EGLint retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcGetEGLVersion: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -64,21 +105,41 @@ EGLint rcQueryEGLString_enc(void *self , EGLenum name, void* buffer, EGLint buff renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_buffer = bufferSize; unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_buffer + 4 + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_buffer + 4 + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcQueryEGLString;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &name, 4); ptr += 4; *(unsigned int *)(ptr) = __size_buffer; ptr += 4; memcpy(ptr, &bufferSize, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(buffer, __size_buffer); + if (useChecksum) checksumCalculator->addBuffer(buffer, __size_buffer); EGLint retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcQueryEGLString: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -87,21 +148,41 @@ EGLint rcGetGLString_enc(void *self , EGLenum name, void* buffer, EGLint bufferS renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_buffer = bufferSize; unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_buffer + 4 + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_buffer + 4 + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcGetGLString;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &name, 4); ptr += 4; *(unsigned int *)(ptr) = __size_buffer; ptr += 4; memcpy(ptr, &bufferSize, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(buffer, __size_buffer); + if (useChecksum) checksumCalculator->addBuffer(buffer, __size_buffer); EGLint retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcGetGLString: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -110,19 +191,39 @@ EGLint rcGetNumConfigs_enc(void *self , uint32_t* numAttribs) renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_numAttribs = sizeof(uint32_t); unsigned char *ptr; - const size_t packetSize = 8 + __size_numAttribs + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_numAttribs + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcGetNumConfigs;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_numAttribs; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(numAttribs, __size_numAttribs); + if (useChecksum) checksumCalculator->addBuffer(numAttribs, __size_numAttribs); EGLint retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcGetNumConfigs: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -131,20 +232,40 @@ EGLint rcGetConfigs_enc(void *self , uint32_t bufSize, GLuint* buffer) renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_buffer = bufSize; unsigned char *ptr; - const size_t packetSize = 8 + 4 + __size_buffer + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + __size_buffer + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcGetConfigs;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &bufSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_buffer; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(buffer, __size_buffer); + if (useChecksum) checksumCalculator->addBuffer(buffer, __size_buffer); EGLint retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcGetConfigs: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -153,24 +274,46 @@ EGLint rcChooseConfig_enc(void *self , EGLint* attribs, uint32_t attribs_size, u renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_attribs = attribs_size; const unsigned int __size_configs = ((configs != NULL) ? configs_size*sizeof(uint32_t) : 0); unsigned char *ptr; - const size_t packetSize = 8 + __size_attribs + 4 + __size_configs + 4 + 2*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + __size_attribs + 4 + __size_configs + 4 + 2*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcChooseConfig;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; *(unsigned int *)(ptr) = __size_attribs; ptr += 4; memcpy(ptr, attribs, __size_attribs);ptr += __size_attribs; memcpy(ptr, &attribs_size, 4); ptr += 4; *(unsigned int *)(ptr) = __size_configs; ptr += 4; memcpy(ptr, &configs_size, 4); ptr += 4; - if (configs != NULL) stream->readback(configs, __size_configs); + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + if (configs != NULL) { + stream->readback(configs, __size_configs); + if (useChecksum) checksumCalculator->addBuffer(configs, __size_configs); + } EGLint retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcChooseConfig: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -179,17 +322,36 @@ EGLint rcGetFBParam_enc(void *self , EGLint param) renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcGetFBParam;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, ¶m, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + EGLint retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcGetFBParam: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -198,19 +360,38 @@ uint32_t rcCreateContext_enc(void *self , uint32_t config, uint32_t share, uint3 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcCreateContext;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &config, 4); ptr += 4; memcpy(ptr, &share, 4); ptr += 4; memcpy(ptr, &glVersion, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + uint32_t retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcCreateContext: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -219,14 +400,24 @@ void rcDestroyContext_enc(void *self , uint32_t context) renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcDestroyContext;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &context, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } uint32_t rcCreateWindowSurface_enc(void *self , uint32_t config, uint32_t width, uint32_t height) @@ -234,19 +425,38 @@ uint32_t rcCreateWindowSurface_enc(void *self , uint32_t config, uint32_t width, renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcCreateWindowSurface;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &config, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + uint32_t retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcCreateWindowSurface: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -255,14 +465,24 @@ void rcDestroyWindowSurface_enc(void *self , uint32_t windowSurface) renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcDestroyWindowSurface;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &windowSurface, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } uint32_t rcCreateColorBuffer_enc(void *self , uint32_t width, uint32_t height, GLenum internalFormat) @@ -270,19 +490,38 @@ uint32_t rcCreateColorBuffer_enc(void *self , uint32_t width, uint32_t height, G renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcCreateColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &width, 4); ptr += 4; memcpy(ptr, &height, 4); ptr += 4; memcpy(ptr, &internalFormat, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + uint32_t retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcCreateColorBuffer: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -291,14 +530,24 @@ void rcOpenColorBuffer_enc(void *self , uint32_t colorbuffer) renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcOpenColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &colorbuffer, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void rcCloseColorBuffer_enc(void *self , uint32_t colorbuffer) @@ -306,14 +555,24 @@ void rcCloseColorBuffer_enc(void *self , uint32_t colorbuffer) renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcCloseColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &colorbuffer, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->flush(); } @@ -322,15 +581,25 @@ void rcSetWindowColorBuffer_enc(void *self , uint32_t windowSurface, uint32_t co renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcSetWindowColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &windowSurface, 4); ptr += 4; memcpy(ptr, &colorBuffer, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } int rcFlushWindowColorBuffer_enc(void *self , uint32_t windowSurface) @@ -338,17 +607,36 @@ int rcFlushWindowColorBuffer_enc(void *self , uint32_t windowSurface) renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcFlushWindowColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &windowSurface, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + int retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcFlushWindowColorBuffer: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -357,19 +645,38 @@ EGLint rcMakeCurrent_enc(void *self , uint32_t context, uint32_t drawSurf, uint3 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcMakeCurrent;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &context, 4); ptr += 4; memcpy(ptr, &drawSurf, 4); ptr += 4; memcpy(ptr, &readSurf, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + EGLint retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcMakeCurrent: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -378,14 +685,24 @@ void rcFBPost_enc(void *self , uint32_t colorBuffer) renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcFBPost;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &colorBuffer, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void rcFBSetSwapInterval_enc(void *self , EGLint interval) @@ -393,14 +710,24 @@ void rcFBSetSwapInterval_enc(void *self , EGLint interval) renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcFBSetSwapInterval;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &interval, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void rcBindTexture_enc(void *self , uint32_t colorBuffer) @@ -408,14 +735,24 @@ void rcBindTexture_enc(void *self , uint32_t colorBuffer) renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcBindTexture;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &colorBuffer, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } void rcBindRenderbuffer_enc(void *self , uint32_t colorBuffer) @@ -423,14 +760,24 @@ void rcBindRenderbuffer_enc(void *self , uint32_t colorBuffer) renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcBindRenderbuffer;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &colorBuffer, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + } EGLint rcColorBufferCacheFlush_enc(void *self , uint32_t colorbuffer, EGLint postCount, int forRead) @@ -438,19 +785,38 @@ EGLint rcColorBufferCacheFlush_enc(void *self , uint32_t colorbuffer, EGLint pos renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcColorBufferCacheFlush;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &colorbuffer, 4); ptr += 4; memcpy(ptr, &postCount, 4); ptr += 4; memcpy(ptr, &forRead, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + EGLint retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcColorBufferCacheFlush: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -459,13 +825,19 @@ void rcReadColorBuffer_enc(void *self , uint32_t colorbuffer, GLint x, GLint y, renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_pixels = (((glUtilsPixelBitSize(format, type) * width) >> 3) * height); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcReadColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &colorbuffer, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; @@ -475,7 +847,20 @@ void rcReadColorBuffer_enc(void *self , uint32_t colorbuffer, GLint x, GLint y, memcpy(ptr, &format, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; *(unsigned int *)(ptr) = __size_pixels; ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + stream->readback(pixels, __size_pixels); + if (useChecksum) checksumCalculator->addBuffer(pixels, __size_pixels); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcReadColorBuffer: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } } int rcUpdateColorBuffer_enc(void *self , uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void* pixels) @@ -483,13 +868,19 @@ int rcUpdateColorBuffer_enc(void *self , uint32_t colorbuffer, GLint x, GLint y, renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; const unsigned int __size_pixels = (((glUtilsPixelBitSize(format, type) * width) >> 3) * height); unsigned char *ptr; - const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; - ptr = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4); + ptr = buf; int tmp = OP_rcUpdateColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &colorbuffer, 4); ptr += 4; memcpy(ptr, &x, 4); ptr += 4; @@ -498,12 +889,28 @@ int rcUpdateColorBuffer_enc(void *self , uint32_t colorbuffer, GLint x, GLint y, memcpy(ptr, &height, 4); ptr += 4; memcpy(ptr, &format, 4); ptr += 4; memcpy(ptr, &type, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); stream->flush(); stream->writeFully(&__size_pixels,4); - stream->writeFully(pixels, __size_pixels); + if (useChecksum) checksumCalculator->addBuffer(&__size_pixels,4); + stream->writeFully(pixels, __size_pixels); + if (useChecksum) checksumCalculator->addBuffer(pixels, __size_pixels); + buf = stream->alloc(checksumSize); + if (useChecksum) checksumCalculator->writeChecksum(buf, checksumSize); + int retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcUpdateColorBuffer: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } @@ -512,25 +919,149 @@ int rcOpenColorBuffer2_enc(void *self , uint32_t colorbuffer) renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; unsigned char *ptr; - const size_t packetSize = 8 + 4; - ptr = stream->alloc(packetSize); + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; int tmp = OP_rcOpenColorBuffer2;memcpy(ptr, &tmp, 4); ptr += 4; - memcpy(ptr, &packetSize, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; memcpy(ptr, &colorbuffer, 4); ptr += 4; + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + int retval; stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcOpenColorBuffer2: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } + return retval; +} + +uint32_t rcCreateClientImage_enc(void *self , uint32_t context, EGLenum target, GLuint buffer) +{ + + renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; + IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; + + unsigned char *ptr; + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; + int tmp = OP_rcCreateClientImage;memcpy(ptr, &tmp, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + memcpy(ptr, &context, 4); ptr += 4; + memcpy(ptr, &target, 4); ptr += 4; + memcpy(ptr, &buffer, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + + uint32_t retval; + stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcCreateClientImage: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } return retval; } +int rcDestroyClientImage_enc(void *self , uint32_t image) +{ + + renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; + IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; + + unsigned char *ptr; + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; + int tmp = OP_rcDestroyClientImage;memcpy(ptr, &tmp, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + memcpy(ptr, &image, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + + + int retval; + stream->readback(&retval, 4); + if (useChecksum) checksumCalculator->addBuffer(&retval, 4); + if (useChecksum) { + std::unique_ptr<unsigned char[]> checksumBuf(new unsigned char[checksumSize]); + stream->readback(checksumBuf.get(), checksumSize); + if (!checksumCalculator->validate(checksumBuf.get(), checksumSize)) { + ALOGE("rcDestroyClientImage: GL communication error, please report this issue to b.android.com.\n"); + abort(); + } + } + return retval; +} + +void rcSelectChecksumHelper_enc(void *self , uint32_t newProtocol, uint32_t reserved) +{ + + renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; + IOStream *stream = ctx->m_stream; + ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator; + bool useChecksum = checksumCalculator->getVersion() > 0; + + unsigned char *ptr; + unsigned char *buf; + const size_t sizeWithoutChecksum = 8 + 4 + 4; + const size_t checksumSize = checksumCalculator->checksumByteSize(); + const size_t totalSize = sizeWithoutChecksum + checksumSize; + buf = stream->alloc(totalSize); + ptr = buf; + int tmp = OP_rcSelectChecksumHelper;memcpy(ptr, &tmp, 4); ptr += 4; + memcpy(ptr, &totalSize, 4); ptr += 4; + + memcpy(ptr, &newProtocol, 4); ptr += 4; + memcpy(ptr, &reserved, 4); ptr += 4; + + if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf); + if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize; + +} + } // namespace -renderControl_encoder_context_t::renderControl_encoder_context_t(IOStream *stream) +renderControl_encoder_context_t::renderControl_encoder_context_t(IOStream *stream, ChecksumCalculator *checksumCalculator) { m_stream = stream; + m_checksumCalculator = checksumCalculator; this->rcGetRendererVersion = &rcGetRendererVersion_enc; this->rcGetEGLVersion = &rcGetEGLVersion_enc; @@ -558,5 +1089,8 @@ renderControl_encoder_context_t::renderControl_encoder_context_t(IOStream *strea this->rcReadColorBuffer = &rcReadColorBuffer_enc; this->rcUpdateColorBuffer = &rcUpdateColorBuffer_enc; this->rcOpenColorBuffer2 = &rcOpenColorBuffer2_enc; + this->rcCreateClientImage = &rcCreateClientImage_enc; + this->rcDestroyClientImage = &rcDestroyClientImage_enc; + this->rcSelectChecksumHelper = &rcSelectChecksumHelper_enc; } diff --git a/opengl/system/renderControl_enc/renderControl_enc.h b/opengl/system/renderControl_enc/renderControl_enc.h index 9469ae4..628cff3 100644 --- a/opengl/system/renderControl_enc/renderControl_enc.h +++ b/opengl/system/renderControl_enc/renderControl_enc.h @@ -5,6 +5,7 @@ #define GUARD_renderControl_encoder_context_t #include "IOStream.h" +#include "ChecksumCalculator.h" #include "renderControl_client_context.h" @@ -15,8 +16,9 @@ struct renderControl_encoder_context_t : public renderControl_client_context_t { IOStream *m_stream; + ChecksumCalculator *m_checksumCalculator; - renderControl_encoder_context_t(IOStream *stream); + renderControl_encoder_context_t(IOStream *stream, ChecksumCalculator *checksumCalculator); }; #endif // GUARD_renderControl_encoder_context_t
\ No newline at end of file diff --git a/opengl/system/renderControl_enc/renderControl_entry.cpp b/opengl/system/renderControl_enc/renderControl_entry.cpp index 71edb83..6a51108 100644 --- a/opengl/system/renderControl_enc/renderControl_entry.cpp +++ b/opengl/system/renderControl_enc/renderControl_entry.cpp @@ -32,6 +32,9 @@ extern "C" { void rcReadColorBuffer(uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void* pixels); int rcUpdateColorBuffer(uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void* pixels); int rcOpenColorBuffer2(uint32_t colorbuffer); + uint32_t rcCreateClientImage(uint32_t context, EGLenum target, GLuint buffer); + int rcDestroyClientImage(uint32_t image); + void rcSelectChecksumHelper(uint32_t newProtocol, uint32_t reserved); }; #endif @@ -197,3 +200,21 @@ int rcOpenColorBuffer2(uint32_t colorbuffer) return ctx->rcOpenColorBuffer2(ctx, colorbuffer); } +uint32_t rcCreateClientImage(uint32_t context, EGLenum target, GLuint buffer) +{ + GET_CONTEXT; + return ctx->rcCreateClientImage(ctx, context, target, buffer); +} + +int rcDestroyClientImage(uint32_t image) +{ + GET_CONTEXT; + return ctx->rcDestroyClientImage(ctx, image); +} + +void rcSelectChecksumHelper(uint32_t newProtocol, uint32_t reserved) +{ + GET_CONTEXT; + ctx->rcSelectChecksumHelper(ctx, newProtocol, reserved); +} + diff --git a/opengl/system/renderControl_enc/renderControl_ftable.h b/opengl/system/renderControl_enc/renderControl_ftable.h index e15fb0c..ac772e6 100644 --- a/opengl/system/renderControl_enc/renderControl_ftable.h +++ b/opengl/system/renderControl_enc/renderControl_ftable.h @@ -34,6 +34,9 @@ static const struct _renderControl_funcs_by_name { {"rcReadColorBuffer", (void*)rcReadColorBuffer}, {"rcUpdateColorBuffer", (void*)rcUpdateColorBuffer}, {"rcOpenColorBuffer2", (void*)rcOpenColorBuffer2}, + {"rcCreateClientImage", (void*)rcCreateClientImage}, + {"rcDestroyClientImage", (void*)rcDestroyClientImage}, + {"rcSelectChecksumHelper", (void*)rcSelectChecksumHelper}, }; static const int renderControl_num_funcs = sizeof(renderControl_funcs_by_name) / sizeof(struct _renderControl_funcs_by_name); diff --git a/opengl/system/renderControl_enc/renderControl_opcodes.h b/opengl/system/renderControl_enc/renderControl_opcodes.h index a00dc77..4861c9c 100644 --- a/opengl/system/renderControl_enc/renderControl_opcodes.h +++ b/opengl/system/renderControl_enc/renderControl_opcodes.h @@ -29,7 +29,10 @@ #define OP_rcReadColorBuffer 10023 #define OP_rcUpdateColorBuffer 10024 #define OP_rcOpenColorBuffer2 10025 -#define OP_last 10026 +#define OP_rcCreateClientImage 10026 +#define OP_rcDestroyClientImage 10027 +#define OP_rcSelectChecksumHelper 10028 +#define OP_last 10029 #endif diff --git a/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml new file mode 100644 index 0000000..6602627 --- /dev/null +++ b/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright (c) 2015, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +--> + +<resources> + <bool name="def_lockscreen_disabled">true</bool> + + <!-- Allow users to use both the on-screen keyboard, as well as a real + keyboard --> + <bool name="def_show_ime_with_hard_keyboard">true</bool> +</resources> diff --git a/sensors/sensors_qemu.c b/sensors/sensors_qemu.c index 0567411..b0e858c 100644 --- a/sensors/sensors_qemu.c +++ b/sensors/sensors_qemu.c @@ -50,7 +50,7 @@ /** SENSOR IDS AND NAMES **/ -#define MAX_NUM_SENSORS 5 +#define MAX_NUM_SENSORS 8 #define SUPPORTED_SENSORS ((1<<MAX_NUM_SENSORS)-1) @@ -60,12 +60,18 @@ #define ID_ORIENTATION (ID_BASE+2) #define ID_TEMPERATURE (ID_BASE+3) #define ID_PROXIMITY (ID_BASE+4) +#define ID_LIGHT (ID_BASE+5) +#define ID_PRESSURE (ID_BASE+6) +#define ID_HUMIDITY (ID_BASE+7) #define SENSORS_ACCELERATION (1 << ID_ACCELERATION) #define SENSORS_MAGNETIC_FIELD (1 << ID_MAGNETIC_FIELD) #define SENSORS_ORIENTATION (1 << ID_ORIENTATION) #define SENSORS_TEMPERATURE (1 << ID_TEMPERATURE) #define SENSORS_PROXIMITY (1 << ID_PROXIMITY) +#define SENSORS_LIGHT (1 << ID_LIGHT) +#define SENSORS_PRESSURE (1 << ID_PRESSURE) +#define SENSORS_HUMIDITY (1 << ID_HUMIDITY) #define ID_CHECK(x) ((unsigned)((x) - ID_BASE) < MAX_NUM_SENSORS) @@ -75,6 +81,9 @@ SENSOR_(ORIENTATION,"orientation") \ SENSOR_(TEMPERATURE,"temperature") \ SENSOR_(PROXIMITY,"proximity") \ + SENSOR_(LIGHT, "light") \ + SENSOR_(PRESSURE, "pressure") \ + SENSOR_(HUMIDITY, "humidity") static const struct { const char* name; @@ -302,7 +311,7 @@ static int sensor_device_poll_event_locked(SensorDevice* dev) events[ID_ORIENTATION].orientation.roll = params[2]; events[ID_ORIENTATION].orientation.status = SENSOR_STATUS_ACCURACY_HIGH; - events[ID_ACCELERATION].type = SENSOR_TYPE_ORIENTATION; + events[ID_ORIENTATION].type = SENSOR_TYPE_ORIENTATION; continue; } @@ -316,7 +325,7 @@ static int sensor_device_poll_event_locked(SensorDevice* dev) events[ID_MAGNETIC_FIELD].magnetic.z = params[2]; events[ID_MAGNETIC_FIELD].magnetic.status = SENSOR_STATUS_ACCURACY_HIGH; - events[ID_ACCELERATION].type = SENSOR_TYPE_MAGNETIC_FIELD; + events[ID_MAGNETIC_FIELD].type = SENSOR_TYPE_MAGNETIC_FIELD; continue; } @@ -324,15 +333,38 @@ static int sensor_device_poll_event_locked(SensorDevice* dev) if (sscanf(buff, "temperature:%g", params+0) == 1) { new_sensors |= SENSORS_TEMPERATURE; events[ID_TEMPERATURE].temperature = params[0]; - events[ID_ACCELERATION].type = SENSOR_TYPE_TEMPERATURE; + events[ID_TEMPERATURE].type = SENSOR_TYPE_TEMPERATURE; continue; } - + /* "proximity:<value>" */ if (sscanf(buff, "proximity:%g", params+0) == 1) { new_sensors |= SENSORS_PROXIMITY; events[ID_PROXIMITY].distance = params[0]; - events[ID_ACCELERATION].type = SENSOR_TYPE_PROXIMITY; + events[ID_PROXIMITY].type = SENSOR_TYPE_PROXIMITY; + continue; + } + /* "light:<lux>" */ + if (sscanf(buff, "light:%g", params+0) == 1) { + new_sensors |= SENSORS_LIGHT; + events[ID_LIGHT].light = params[0]; + events[ID_LIGHT].type = SENSOR_TYPE_LIGHT; + continue; + } + + /* "pressure:<hpa>" */ + if (sscanf(buff, "pressure:%g", params+0) == 1) { + new_sensors |= SENSORS_PRESSURE; + events[ID_PRESSURE].pressure = params[0]; + events[ID_PRESSURE].type = SENSOR_TYPE_PRESSURE; + continue; + } + + /* "humidity:<percent>" */ + if (sscanf(buff, "humidity:%g", params+0) == 1) { + new_sensors |= SENSORS_HUMIDITY; + events[ID_HUMIDITY].relative_humidity = params[0]; + events[ID_HUMIDITY].type = SENSOR_TYPE_RELATIVE_HUMIDITY; continue; } @@ -526,7 +558,8 @@ static int sensor_device_set_delay(struct sensors_poll_device_t *dev0, * according to which hardware sensors are reported as * available from the emulator (see get_sensors_list below) * - * note: numerical values for maxRange/resolution/power were + * note: numerical values for maxRange/resolution/power for + * all sensors but light, pressure and humidity were * taken from the reference AK8976A implementation */ static const struct sensor_t sSensorListInit[] = { @@ -584,6 +617,39 @@ static const struct sensor_t sSensorListInit[] = { .power = 20.0f, .reserved = {} }, + + { .name = "Goldfish Light sensor", + .vendor = "The Android Open Source Project", + .version = 1, + .handle = ID_LIGHT, + .type = SENSOR_TYPE_LIGHT, + .maxRange = 40000.0f, + .resolution = 1.0f, + .power = 20.0f, + .reserved = {} + }, + + { .name = "Goldfish Pressure sensor", + .vendor = "The Android Open Source Project", + .version = 1, + .handle = ID_PRESSURE, + .type = SENSOR_TYPE_PRESSURE, + .maxRange = 800.0f, + .resolution = 1.0f, + .power = 20.0f, + .reserved = {} + }, + + { .name = "Goldfish Humidity sensor", + .vendor = "The Android Open Source Project", + .version = 1, + .handle = ID_HUMIDITY, + .type = SENSOR_TYPE_RELATIVE_HUMIDITY, + .maxRange = 100.0f, + .resolution = 1.0f, + .power = 20.0f, + .reserved = {} + } }; static struct sensor_t sSensorList[MAX_NUM_SENSORS]; |