+++ /dev/null
-From 2e575255b8c53d3cfe2af068411696fe3c40debb Mon Sep 17 00:00:00 2001
-From: Loren Huang <b02279@freescale.com>
-Date: Mon, 2 Sep 2013 12:16:48 +0800
-Subject: [PATCH 01/16] ENGR00278350 gpu:viante 4.6.9p13 kernel part
- integration
-
-Integrated 4.6.9p13 kernel part change.
-This integration is mainly for android test.
-Linux test will be focused on 3.10 kernel.
-
-Signed-off-by: Loren HUANG <b02279@freescale.com>
-Acked-by: Shawn Guo
----
- drivers/mxc/gpu-viv/Kbuild | 33 +-
- .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.c | 177 ++--
- .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.h | 9 +-
- .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.c | 8 +-
- .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.h | 13 +
- .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c | 736 ++++++++++++-
- .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h | 1 +
- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c | 125 ++-
- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h | 24 +-
- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c | 57 ++
- .../gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c | 45 +-
- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c | 12 +
- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c | 29 +
- .../hal/kernel/gc_hal_kernel_interrupt_vg.c | 3 +
- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c | 8 +-
- .../hal/kernel/gc_hal_kernel_video_memory.c | 20 +-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h | 84 +-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h | 172 +++-
- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h | 142 ++-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h | 37 +
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h | 46 +-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h | 125 ++-
- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h | 86 +-
- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h | 1078 +++-----------------
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h | 48 +
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h | 79 +-
- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h | 2 +-
- .../hal/os/linux/kernel/gc_hal_kernel_device.c | 17 +-
- .../hal/os/linux/kernel/gc_hal_kernel_device.h | 16 +-
- .../hal/os/linux/kernel/gc_hal_kernel_driver.c | 99 +-
- .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c | 655 ++++++++++--
- .../hal/os/linux/kernel/gc_hal_kernel_sync.c | 174 ++++
- .../hal/os/linux/kernel/gc_hal_kernel_sync.h | 71 ++
- 33 files changed, 2974 insertions(+), 1257 deletions(-)
- create mode 100644 drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
- create mode 100644 drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
-
-diff --git a/drivers/mxc/gpu-viv/Kbuild b/drivers/mxc/gpu-viv/Kbuild
-index 93b1259..2b277d6 100644
---- a/drivers/mxc/gpu-viv/Kbuild
-+++ b/drivers/mxc/gpu-viv/Kbuild
-@@ -45,8 +45,6 @@ OBJS := $(OS_KERNEL_DIR)/gc_hal_kernel_device.o \
- $(OS_KERNEL_DIR)/gc_hal_kernel_os.o \
- $(OS_KERNEL_DIR)/gc_hal_kernel_debugfs.o
-
--ifeq ($(USE_3D_VG), 1)
--
- OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \
- $(HAL_KERNEL_DIR)/gc_hal_kernel_command.o \
- $(HAL_KERNEL_DIR)/gc_hal_kernel_db.o \
-@@ -69,19 +67,9 @@ OBJS +=\
- $(ARCH_VG_KERNEL_DIR)/gc_hal_kernel_hardware_command_vg.o\
- $(ARCH_VG_KERNEL_DIR)/gc_hal_kernel_hardware_vg.o
- endif
--else
--
--OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \
-- $(HAL_KERNEL_DIR)/gc_hal_kernel_command.o \
-- $(HAL_KERNEL_DIR)/gc_hal_kernel_heap.o \
-- $(HAL_KERNEL_DIR)/gc_hal_kernel_interrupt.o \
-- $(HAL_KERNEL_DIR)/gc_hal_kernel_mmu.o \
-- $(HAL_KERNEL_DIR)/gc_hal_kernel_video_memory.o \
-- $(OS_KERNEL_DIR)/gc_hal_kernel_debug.o
--
--OBJS += $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware.o \
-- $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware_command.o
-
-+ifneq ($(CONFIG_SYNC),)
-+OBJS += $(OS_KERNEL_DIR)/gc_hal_kernel_sync.o
- endif
-
- ifeq ($(KERNELRELEASE), )
-@@ -129,23 +117,16 @@ ifeq ($(CONFIG_DOVE_GPU), 1)
- EXTRA_CFLAGS += -DCONFIG_DOVE_GPU=1
- endif
-
--ifeq ($(USE_POWER_MANAGEMENT), 1)
--EXTRA_CFLAGS += -DgcdPOWER_MANAGEMENT=1
--else
--EXTRA_CFLAGS += -DgcdPOWER_MANAGEMENT=0
--endif
--
- ifneq ($(USE_PLATFORM_DRIVER), 0)
- EXTRA_CFLAGS += -DUSE_PLATFORM_DRIVER=1
- else
- EXTRA_CFLAGS += -DUSE_PLATFORM_DRIVER=0
- endif
-
--ifeq ($(USE_PROFILER), 1)
-+
- EXTRA_CFLAGS += -DVIVANTE_PROFILER=1
--else
--EXTRA_CFLAGS += -DVIVANTE_PROFILER=0
--endif
-+EXTRA_CFLAGS += -DVIVANTE_PROFILER_CONTEXT=1
-+
-
- ifeq ($(ANDROID), 1)
- EXTRA_CFLAGS += -DANDROID=1
-@@ -235,6 +216,10 @@ ifeq ($(USE_BANK_ALIGNMENT), 1)
- endif
- endif
-
-+ifneq ($(CONFIG_SYNC),)
-+EXTRA_CFLAGS += -DgcdANDROID_NATIVE_FENCE_SYNC=1
-+endif
-+
- EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel/inc
- EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel
- EXTRA_CFLAGS += -I$(AQARCH)/hal/kernel
-diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
-index 70c2cd6..a17d2fd 100644
---- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
-+++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
-@@ -217,50 +217,17 @@ _IdentifyHardware(
- return status;
- }
-
--static gctTHREADFUNCRESULT gctTHREADFUNCTYPE
--_TimeIdleThread(
-- gctTHREADFUNCPARAMETER ThreadParameter
-+#if gcdPOWEROFF_TIMEOUT
-+void
-+_VGPowerTimerFunction(
-+ gctPOINTER Data
- )
- {
-- gctUINT32 currentTime = 0;
-- gctBOOL isAfter = gcvFALSE;
-- gceCHIPPOWERSTATE state;
--
-- /* Cast the object. */
-- gckVGHARDWARE hardware = (gckVGHARDWARE) ThreadParameter;
--
-- while(gcvTRUE)
-- {
-- gcmkVERIFY_OK(gckOS_WaitSignal(hardware->os,
-- hardware->idleSignal, gcvINFINITE));
--
-- if (hardware->killThread)
-- {
-- break;
-- }
--
-- do
-- {
-- gcmkVERIFY_OK(gckOS_GetTicks(¤tTime));
--
-- gcmkVERIFY_OK(
-- gckOS_TicksAfter(currentTime, hardware->powerOffTime, &isAfter));
--
-- if (isAfter)
-- {
-- gcmkVERIFY_OK(gckVGHARDWARE_SetPowerManagementState(
-- hardware, gcvPOWER_OFF_BROADCAST));
-- }
--
-- gcmkVERIFY_OK(gckOS_Delay(hardware->os, 200));
--
-- gcmkVERIFY_OK(gckVGHARDWARE_QueryPowerManagementState(
-- hardware, &state));
--
-- } while (state == gcvPOWER_IDLE);
-- }
-- return 0;
-+ gckVGHARDWARE hardware = (gckVGHARDWARE)Data;
-+ gcmkVERIFY_OK(
-+ gckVGHARDWARE_SetPowerManagementState(hardware, gcvPOWER_OFF_TIMEOUT));
- }
-+#endif
-
- /******************************************************************************\
- ****************************** gckVGHARDWARE API code *****************************
-@@ -338,15 +305,21 @@ gckVGHARDWARE_Construct(
- hardware->chipMinorFeatures2 = chipMinorFeatures2;
-
- hardware->powerMutex = gcvNULL;
-- hardware->idleSignal = gcvNULL;
- hardware->chipPowerState = gcvPOWER_ON;
- hardware->chipPowerStateGlobal = gcvPOWER_ON;
- hardware->clockState = gcvTRUE;
- hardware->powerState = gcvTRUE;
-- hardware->powerOffTimeout = gcdPOWEROFF_TIMEOUT;
-+
- hardware->powerOffTime = 0;
-- hardware->timeIdleThread = gcvNULL;
-- hardware->killThread = gcvFALSE;
-+#if gcdPOWEROFF_TIMEOUT
-+ hardware->powerOffTimeout = gcdPOWEROFF_TIMEOUT;
-+
-+ gcmkVERIFY_OK(gckOS_CreateTimer(Os,
-+ _VGPowerTimerFunction,
-+ (gctPOINTER)hardware,
-+ &hardware->powerOffTimer));
-+#endif
-+
- /* Determine whether FE 2.0 is present. */
- hardware->fe20 = ((((gctUINT32) (hardware->chipFeatures)) >> (0 ? 28:28) & ((gctUINT32) ((((1 ? 28:28) - (0 ? 28:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 28:28) - (0 ? 28:28) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 28:28) - (0 ? 28:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 28:28) - (0 ? 28:28) + 1)))))));
-
-@@ -365,18 +338,10 @@ gckVGHARDWARE_Construct(
- gcmkVERIFY_OK(gckVGHARDWARE_SetFastClear(hardware, -1));
-
- gcmkERR_BREAK(gckOS_CreateMutex(Os, &hardware->powerMutex));
-- gcmkERR_BREAK(gckOS_CreateSignal(Os, gcvFALSE, &hardware->idleSignal));
-
- /* Enable power management by default. */
- hardware->powerManagement = gcvTRUE;
-
-- gcmkERR_BREAK(gckOS_StartThread(
-- hardware->os,
-- _TimeIdleThread,
-- hardware,
-- &hardware->timeIdleThread
-- ));
--
- /* Return pointer to the gckVGHARDWARE object. */
- *Hardware = hardware;
-
-@@ -386,6 +351,14 @@ gckVGHARDWARE_Construct(
- }
- while (gcvFALSE);
-
-+#if gcdPOWEROFF_TIMEOUT
-+ if (hardware->powerOffTimer != gcvNULL)
-+ {
-+ gcmkVERIFY_OK(gckOS_StopTimer(Os, hardware->powerOffTimer));
-+ gcmkVERIFY_OK(gckOS_DestroyTimer(Os, hardware->powerOffTimer));
-+ }
-+#endif
-+
- if (hardware->pageTableDirty != gcvNULL)
- {
- gcmkVERIFY_OK(gckOS_AtomDestroy(Os, hardware->pageTableDirty));
-@@ -428,10 +401,6 @@ gckVGHARDWARE_Destroy(
- /* Verify the arguments. */
- gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
-
-- Hardware->killThread = gcvTRUE;
-- gcmkVERIFY_OK(gckOS_Signal(Hardware->os, Hardware->idleSignal, gcvTRUE));
-- gcmkVERIFY_OK(gckOS_StopThread(Hardware->os, Hardware->timeIdleThread));
--
- /* Mark the object as unknown. */
- Hardware->object.type = gcvOBJ_UNKNOWN;
-
-@@ -441,11 +410,10 @@ gckVGHARDWARE_Destroy(
- Hardware->os, Hardware->powerMutex));
- }
-
-- if (Hardware->idleSignal != gcvNULL)
-- {
-- gcmkVERIFY_OK(gckOS_DestroySignal(
-- Hardware->os, Hardware->idleSignal));
-- }
-+#if gcdPOWEROFF_TIMEOUT
-+ gcmkVERIFY_OK(gckOS_StopTimer(Hardware->os, Hardware->powerOffTimer));
-+ gcmkVERIFY_OK(gckOS_DestroyTimer(Hardware->os, Hardware->powerOffTimer));
-+#endif
-
- if (Hardware->pageTableDirty != gcvNULL)
- {
-@@ -1510,11 +1478,15 @@ gckVGHARDWARE_SetPowerManagementState(
- gctBOOL commitMutex = gcvFALSE;
- gctBOOL mutexAcquired = gcvFALSE;
-
-+#if gcdPOWEROFF_TIMEOUT
-+ gctBOOL timeout = gcvFALSE;
-+ gctBOOL isAfter = gcvFALSE;
-+ gctUINT32 currentTime;
-+#endif
-+
- gctBOOL broadcast = gcvFALSE;
- gctUINT32 process, thread;
- gctBOOL global = gcvFALSE;
-- gctUINT32 currentTime;
--
-
- #if gcdENABLE_PROFILING
- gctUINT64 time, freq, mutexTime, onTime, stallTime, stopTime, delayTime,
-@@ -1661,6 +1633,16 @@ gckVGHARDWARE_SetPowerManagementState(
- global = gcvTRUE;
- break;
-
-+#if gcdPOWEROFF_TIMEOUT
-+ case gcvPOWER_OFF_TIMEOUT:
-+ /* Convert to OFF and note we are inside broadcast. */
-+ State = gcvPOWER_OFF;
-+ broadcast = gcvTRUE;
-+ /* Check time out */
-+ timeout = gcvTRUE;
-+ break;
-+#endif
-+
- default:
- break;
- }
-@@ -1719,6 +1701,31 @@ gckVGHARDWARE_SetPowerManagementState(
- flag = flags[Hardware->chipPowerState][State];
- /*clock = clocks[State];*/
-
-+#if gcdPOWEROFF_TIMEOUT
-+ if (timeout)
-+ {
-+ gcmkONERROR(gckOS_GetTicks(¤tTime));
-+
-+ gcmkONERROR(
-+ gckOS_TicksAfter(Hardware->powerOffTime, currentTime, &isAfter));
-+
-+ /* powerOffTime is pushed forward, give up.*/
-+ if (isAfter
-+ /* Expect a transition start from IDLE. */
-+ || (Hardware->chipPowerState == gcvPOWER_ON)
-+ || (Hardware->chipPowerState == gcvPOWER_OFF)
-+ )
-+ {
-+ /* Release the power mutex. */
-+ gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
-+
-+ /* No need to do anything. */
-+ gcmkFOOTER_NO();
-+ return gcvSTATUS_OK;
-+ }
-+ }
-+#endif
-+
- if (flag == 0)
- {
- /* Release the power mutex. */
-@@ -1742,6 +1749,18 @@ gckVGHARDWARE_SetPowerManagementState(
- return gcvSTATUS_OK;
- }
- }
-+ else
-+ {
-+ if (flag & gcvPOWER_FLAG_ACQUIRE)
-+ {
-+ /* Acquire the power management semaphore. */
-+ gcmkONERROR(gckOS_AcquireSemaphore(os, command->powerSemaphore));
-+ acquired = gcvTRUE;
-+
-+ /* avoid acquiring again. */
-+ flag &= ~gcvPOWER_FLAG_ACQUIRE;
-+ }
-+ }
-
- if (flag & (gcvPOWER_FLAG_INITIALIZE | gcvPOWER_FLAG_CLOCK_ON))
- {
-@@ -1858,14 +1877,6 @@ gckVGHARDWARE_SetPowerManagementState(
- Hardware->chipPowerStateGlobal = State;
- }
-
-- if (State == gcvPOWER_IDLE)
-- {
-- gcmkVERIFY_OK(gckOS_Signal(os, Hardware->idleSignal, gcvTRUE));
-- }
-- /* Reset power off time */
-- gcmkVERIFY_OK(gckOS_GetTicks(¤tTime));
-- Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
--
- if (commitMutex)
- {
- /* Acquire the mutex. */
-@@ -1875,6 +1886,28 @@ gckVGHARDWARE_SetPowerManagementState(
- ));
- }
-
-+#if gcdPOWEROFF_TIMEOUT
-+ /* Reset power off time */
-+ gcmkONERROR(gckOS_GetTicks(¤tTime));
-+
-+ Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
-+
-+ if (State == gcvPOWER_IDLE)
-+ {
-+ /* Start a timer to power off GPU when GPU enters IDLE or SUSPEND. */
-+ gcmkVERIFY_OK(gckOS_StartTimer(os,
-+ Hardware->powerOffTimer,
-+ Hardware->powerOffTimeout));
-+ }
-+ else
-+ {
-+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE, "Cancel powerOfftimer");
-+
-+ /* Cancel running timer when GPU enters ON or OFF. */
-+ gcmkVERIFY_OK(gckOS_StopTimer(os, Hardware->powerOffTimer));
-+ }
-+#endif
-+
- /* Release the power mutex. */
- gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
-
-diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
-index 16b81ae..73d4594 100644
---- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
-+++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
-@@ -53,7 +53,6 @@ struct _gckVGHARDWARE
- gctBOOL clockState;
- gctBOOL powerState;
- gctPOINTER powerMutex;
-- gctSIGNAL idleSignal;
- gctUINT32 powerProcess;
- gctUINT32 powerThread;
- gceCHIPPOWERSTATE chipPowerState;
-@@ -61,11 +60,13 @@ struct _gckVGHARDWARE
- gctISRMANAGERFUNC startIsr;
- gctISRMANAGERFUNC stopIsr;
- gctPOINTER isrContext;
-+ gctPOINTER pageTableDirty;
-+
-+#if gcdPOWEROFF_TIMEOUT
- gctUINT32 powerOffTime;
- gctUINT32 powerOffTimeout;
-- gctTHREAD timeIdleThread;
-- gctBOOL killThread;
-- gctPOINTER pageTableDirty;
-+ gctPOINTER powerOffTimer;
-+#endif
-
- gctBOOL powerManagement;
- };
-diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
-index 24003e7..42e6915 100644
---- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
-+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
-@@ -181,7 +181,8 @@ _FlushPipe(
- ? ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)))
- : ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
-- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)));
-+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))
-+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
-
- /* Semaphore from FE to PE. */
- *buffer++
-@@ -620,7 +621,10 @@ _InitializeContextBuffer(
- index += _State(Context, index, 0x10180 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x10200 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x10280 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
-- index += _State(Context, index, 0x02C00 >> 2, 0x00000000, 256, gcvFALSE, gcvFALSE);
-+ for (i = 0; i < 256 / 16; i += 1)
-+ {
-+ index += _State(Context, index, (0x02C00 >> 2) + i * 16, 0x00000000, 14, gcvFALSE, gcvFALSE);
-+ }
- index += _State(Context, index, 0x10300 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x10380 >> 2, 0x00321000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x10400 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
-diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
-index 7554045..5d2c7c7 100644
---- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
-+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
-@@ -134,6 +134,19 @@ struct _gckCONTEXT
- #if gcdSECURE_USER
- gctBOOL_PTR hint;
- #endif
-+
-+#if VIVANTE_PROFILER_CONTEXT
-+ gcsPROFILER_COUNTERS latestProfiler;
-+ gcsPROFILER_COUNTERS histroyProfiler;
-+ gctUINT32 prevVSInstCount;
-+ gctUINT32 prevVSBranchInstCount;
-+ gctUINT32 prevVSTexInstCount;
-+ gctUINT32 prevVSVertexCount;
-+ gctUINT32 prevPSInstCount;
-+ gctUINT32 prevPSBranchInstCount;
-+ gctUINT32 prevPSTexInstCount;
-+ gctUINT32 prevPSPixelCount;
-+#endif
- };
-
- #ifdef __cplusplus
-diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
-index 00f3839..e02dc23 100644
---- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
-+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
-@@ -21,6 +21,9 @@
-
- #include "gc_hal.h"
- #include "gc_hal_kernel.h"
-+#if VIVANTE_PROFILER_CONTEXT
-+#include "gc_hal_kernel_context.h"
-+#endif
-
- #define _GC_OBJ_ZONE gcvZONE_HARDWARE
-
-@@ -69,6 +72,7 @@ _IdentifyHardware(
- gctUINT32 numConstants = 0;
- gctUINT32 bufferSize = 0;
- gctUINT32 varyingsCount = 0;
-+ gctBOOL useHZ;
-
- gcmkHEADER_ARG("Os=0x%x", Os);
-
-@@ -209,6 +213,15 @@ _IdentifyHardware(
- 0x00088,
- &Identity->chipMinorFeatures3));
-
-+ /*The BG2 chip has no compression supertiled, and the bit of GCMinorFeature3BugFixes15 is n/a*/
-+ if(Identity->chipModel == gcv1000 && Identity->chipRevision == 0x5036)
-+ {
-+ Identity->chipMinorFeatures3
-+ = ((((gctUINT32) (Identity->chipMinorFeatures3)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)));
-+ Identity->chipMinorFeatures3
-+ = ((((gctUINT32) (Identity->chipMinorFeatures3)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27)));
-+ }
-+
- /* Read chip minor featuress register #4. */
- gcmkONERROR(
- gckOS_ReadRegisterEx(Os, Core,
-@@ -244,14 +257,31 @@ _IdentifyHardware(
- if (((Identity->chipModel == gcv1000) && ((Identity->chipRevision == 0x5035)
- || (Identity->chipRevision == 0x5036)
- || (Identity->chipRevision == 0x5037)))
-- || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612)))
-+ || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612))
-+ || ((Identity->chipModel == gcv860) && (Identity->chipRevision == 0x4647)))
- {
- Identity->superTileMode = 1;
- }
-
-+ if (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5245)
-+ {
-+ useHZ = ((((gctUINT32) (Identity->chipMinorFeatures3)) >> (0 ? 26:26) & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1)))))))
-+ || ((((gctUINT32) (Identity->chipMinorFeatures3)) >> (0 ? 8:8) & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1)))))));
-+ }
-+ else
-+ {
-+ useHZ = gcvFALSE;
-+ }
-
-- /* Disable HZ when EZ is present for older chips. */
-- if (!((((gctUINT32) (Identity->chipFeatures)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))))
-+ if (useHZ)
-+ {
-+ /* Disable EZ. */
-+ Identity->chipFeatures
-+ = ((((gctUINT32) (Identity->chipFeatures)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16)));
-+ }
-+
-+ /* Disable HZ when EZ is present for older chips. */
-+ else if (!((((gctUINT32) (Identity->chipFeatures)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))))
- {
- /* Disable HIERARCHICAL_Z. */
- Identity->chipMinorFeatures
-@@ -470,6 +500,15 @@ _IdentifyHardware(
- Identity->varyingsCount = 8;
- }
-
-+ /* For some cores, it consumes two varying for position, so the max varying vectors should minus one. */
-+ if ((Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5222) ||
-+ (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5208) ||
-+ ((Identity->chipModel == gcv2100 || Identity->chipModel == gcv2000) && Identity->chipRevision == 0x5108) ||
-+ (Identity->chipModel == gcv880 && (Identity->chipRevision == 0x5107 || Identity->chipRevision == 0x5106)))
-+ {
-+ Identity->varyingsCount -= 1;
-+ }
-+
- /* Success. */
- gcmkFOOTER();
- return gcvSTATUS_OK;
-@@ -535,9 +574,9 @@ _DumpDebugRegisters(
- IN gcsiDEBUG_REGISTERS_PTR Descriptor
- )
- {
-- gceSTATUS status;
-+ gceSTATUS status = gcvSTATUS_OK;
- gctUINT32 select;
-- gctUINT32 data;
-+ gctUINT32 data = 0;
- gctUINT i;
-
- gcmkHEADER_ARG("Os=0x%X Descriptor=0x%X", Os, Descriptor);
-@@ -643,6 +682,42 @@ OnError:
- return status;
- }
-
-+gceSTATUS
-+_FlushCache(
-+ gckHARDWARE Hardware,
-+ gckCOMMAND Command
-+ )
-+{
-+ gceSTATUS status;
-+ gctSIZE_T bytes, requested;
-+ gctPOINTER buffer;
-+
-+ /* Get the size of the flush command. */
-+ gcmkONERROR(gckHARDWARE_Flush(Hardware,
-+ gcvFLUSH_ALL,
-+ gcvNULL,
-+ &requested));
-+
-+ /* Reserve space in the command queue. */
-+ gcmkONERROR(gckCOMMAND_Reserve(Command,
-+ requested,
-+ &buffer,
-+ &bytes));
-+
-+ /* Append a flush. */
-+ gcmkONERROR(gckHARDWARE_Flush(
-+ Hardware, gcvFLUSH_ALL, buffer, &bytes
-+ ));
-+
-+ /* Execute the command queue. */
-+ gcmkONERROR(gckCOMMAND_Execute(Command, requested));
-+
-+ return gcvSTATUS_OK;
-+
-+OnError:
-+ return status;
-+}
-+
- /******************************************************************************\
- ****************************** gckHARDWARE API code *****************************
- \******************************************************************************/
-@@ -809,6 +884,9 @@ gckHARDWARE_Construct(
- /* Enable power management by default. */
- hardware->powerManagement = gcvTRUE;
-
-+ /* Disable profiler by default */
-+ hardware->gpuProfiler = gcvFALSE;
-+
- /* Return pointer to the gckHARDWARE object. */
- *Hardware = hardware;
-
-@@ -1113,6 +1191,31 @@ gckHARDWARE_InitializeHardware(
- ((((gctUINT32) (0x01590880)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23)))));
- }
-
-+ if ((gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) == gcvFALSE)
-+ || (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) && (Hardware->identity.chipRevision < 0x5422))
-+ )
-+ {
-+ gctUINT32 data;
-+
-+ gcmkONERROR(
-+ gckOS_ReadRegisterEx(Hardware->os,
-+ Hardware->core,
-+ Hardware->powerBaseAddress
-+ + 0x00104,
-+ &data));
-+
-+
-+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15)));
-+
-+
-+ gcmkONERROR(
-+ gckOS_WriteRegisterEx(Hardware->os,
-+ Hardware->core,
-+ Hardware->powerBaseAddress
-+ + 0x00104,
-+ data));
-+ }
-+
- /* Special workaround for this core
- ** Make sure FE and TX are on different buses */
- if ((Hardware->identity.chipModel == gcv2000)
-@@ -1152,7 +1255,9 @@ gckHARDWARE_InitializeHardware(
- }
-
- if (Hardware->identity.chipModel >= gcv400
-- && Hardware->identity.chipModel != gcv420)
-+ && Hardware->identity.chipModel != gcv420
-+ && (((((gctUINT32) (Hardware->identity.chipMinorFeatures3)) >> (0 ? 15:15) & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) != gcvTRUE)
-+ )
- {
- gctUINT32 data;
-
-@@ -2883,35 +2988,44 @@ gckHARDWARE_QueryShaderCaps(
- OUT gctUINT * Varyings
- )
- {
-+ gctUINT32 vsConstMax;
-+ gctUINT32 psConstMax;
-+
- gcmkHEADER_ARG("Hardware=0x%x VertexUniforms=0x%x "
- "FragmentUniforms=0x%x Varyings=0x%x",
- Hardware, VertexUniforms,
- FragmentUniforms, Varyings);
-
-+ if ((Hardware->identity.chipModel == gcv2000)
-+ && (Hardware->identity.chipRevision == 0x5118))
-+ {
-+ vsConstMax = 256;
-+ psConstMax = 64;
-+ }
-+ else if (Hardware->identity.numConstants > 256)
-+ {
-+ vsConstMax = 256;
-+ psConstMax = 256;
-+ }
-+ else if (Hardware->identity.numConstants == 256)
-+ {
-+ vsConstMax = 256;
-+ psConstMax = 256;
-+ }
-+ else
-+ {
-+ vsConstMax = 168;
-+ psConstMax = 64;
-+ }
-+
- if (VertexUniforms != gcvNULL)
- {
-- /* Return the vs shader const count. */
-- if (Hardware->identity.chipModel < gcv4000)
-- {
-- *VertexUniforms = 168;
-- }
-- else
-- {
-- *VertexUniforms = 256;
-- }
-+ *VertexUniforms = vsConstMax;
- }
-
- if (FragmentUniforms != gcvNULL)
- {
-- /* Return the ps shader const count. */
-- if (Hardware->identity.chipModel < gcv4000)
-- {
-- *FragmentUniforms = 64;
-- }
-- else
-- {
-- *FragmentUniforms = 256;
-- }
-+ *FragmentUniforms = psConstMax;
- }
-
- if (Varyings != gcvNULL)
-@@ -3229,12 +3343,28 @@ gckHARDWARE_SetMMUv2(
- gctBOOL commitEntered = gcvFALSE;
- gctPOINTER pointer = gcvNULL;
- gctBOOL acquired = gcvFALSE;
-+ gctBOOL config2D;
-+ gctSIZE_T configSize;
-
- gcmkHEADER_ARG("Hardware=0x%x Enable=%d", Hardware, Enable);
-
- /* Verify the arguments. */
- gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
-
-+ config2D = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_3D)
-+ && gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_2D);
-+
-+ configSize = 4 * 4;
-+
-+ if (config2D)
-+ {
-+ configSize +=
-+ /* Pipe Select. */
-+ 4 * 4
-+ /* Configure MMU States. */
-+ + 4 * 4;
-+ }
-+
- /* Convert logical address into physical address. */
- gcmkONERROR(
- gckOS_GetPhysicalAddress(Hardware->os, MtlbAddress, &config));
-@@ -3281,7 +3411,7 @@ gckHARDWARE_SetMMUv2(
- commitEntered = gcvTRUE;
-
- gcmkONERROR(gckCOMMAND_Reserve(
-- command, 16, &pointer, &bufferSize
-+ command, configSize, &pointer, &bufferSize
- ));
-
- buffer = pointer;
-@@ -3300,10 +3430,43 @@ gckHARDWARE_SetMMUv2(
-
- buffer[3] = address;
-
-+ if (config2D)
-+ {
-+ /* LoadState(AQPipeSelect, 1), pipe. */
-+ buffer[4]
-+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
-+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
-+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
-+
-+ buffer[5] = 0x1;
-+
-+ buffer[6]
-+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
-+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
-+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
-+
-+ buffer[7] = config;
-+
-+ buffer[8]
-+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
-+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
-+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
-+
-+ buffer[9] = address;
-+
-+ /* LoadState(AQPipeSelect, 1), pipe. */
-+ buffer[10]
-+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
-+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
-+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
-+
-+ buffer[11] = 0x0;
-+ }
-+
- gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
- "Setup MMU: config=%08x, Safe Address=%08x\n.", config, address);
-
-- gcmkONERROR(gckCOMMAND_Execute(command, 16));
-+ gcmkONERROR(gckCOMMAND_Execute(command, configSize));
-
- if (FromPower == gcvFALSE)
- {
-@@ -3501,6 +3664,8 @@ gckHARDWARE_Flush(
- gctUINT32 flush = 0;
- gctUINT32_PTR logical = (gctUINT32_PTR) Logical;
- gceSTATUS status;
-+ gctBOOL fcFlushStall;
-+ gctUINT32 reserveBytes = 8;
-
- gcmkHEADER_ARG("Hardware=0x%x Flush=0x%x Logical=0x%x *Bytes=%lu",
- Hardware, Flush, Logical, gcmOPT_VALUE(Bytes));
-@@ -3511,6 +3676,16 @@ gckHARDWARE_Flush(
- /* Get current pipe. */
- pipe = Hardware->kernel->command->pipeSelect;
-
-+ fcFlushStall
-+ = ((((gctUINT32) (Hardware->identity.chipMinorFeatures1)) >> (0 ? 31:31) & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1)))))))
-+ && (Flush == gcvFLUSH_ALL)
-+ ;
-+
-+ if (fcFlushStall)
-+ {
-+ reserveBytes += 8;
-+ }
-+
- /* Flush 3D color cache. */
- if ((Flush & gcvFLUSH_COLOR) && (pipe == 0x0))
- {
-@@ -3527,6 +3702,7 @@ gckHARDWARE_Flush(
- if ((Flush & gcvFLUSH_TEXTURE) && (pipe == 0x0))
- {
- flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)));
-+ flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
- }
-
- /* Flush 2D cache. */
-@@ -3550,7 +3726,7 @@ gckHARDWARE_Flush(
- /* Copy to command queue. */
- if (Logical != gcvNULL)
- {
-- if (*Bytes < 8)
-+ if (*Bytes < reserveBytes)
- {
- /* Command queue too small. */
- gcmkONERROR(gcvSTATUS_BUFFER_TOO_SMALL);
-@@ -3565,12 +3741,26 @@ gckHARDWARE_Flush(
-
- gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
- "0x%x: FLUSH 0x%x", logical, flush);
-+
-+ if (fcFlushStall)
-+ {
-+ logical[2] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
-+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0594) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
-+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
-+
-+ logical[3] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
-+
-+
-+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
-+ "0x%x: FLUSH 0x%x", logical + 3, logical[3]);
-+ }
-+
- }
-
- if (Bytes != gcvNULL)
- {
-- /* 8 bytes required. */
-- *Bytes = 8;
-+ /* bytes required. */
-+ *Bytes = reserveBytes;
- }
- }
-
-@@ -4285,6 +4475,48 @@ gckHARDWARE_SetPowerManagementState(
- }
- }
-
-+ /* Flush Cache before Power Off. */
-+ if (flag & gcvPOWER_FLAG_POWER_OFF)
-+ {
-+ if (Hardware->clockState == gcvFALSE)
-+ {
-+ /* Turn off the GPU power. */
-+ gcmkONERROR(
-+ gckOS_SetGPUPower(os,
-+ Hardware->core,
-+ gcvTRUE,
-+ gcvTRUE));
-+
-+ Hardware->clockState = gcvTRUE;
-+
-+ if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_DYNAMIC_FREQUENCY_SCALING) != gcvTRUE)
-+ {
-+ /* Write the clock control register. */
-+ gcmkONERROR(gckOS_WriteRegisterEx(os,
-+ Hardware->core,
-+ 0x00000,
-+ clocks[0]));
-+
-+ /* Done loading the frequency scaler. */
-+ gcmkONERROR(gckOS_WriteRegisterEx(os,
-+ Hardware->core,
-+ 0x00000,
-+ ((((gctUINT32) (clocks[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9)))));
-+ }
-+ }
-+
-+ gcmkONERROR(gckCOMMAND_Start(command));
-+
-+ gcmkONERROR(_FlushCache(Hardware, command));
-+
-+ gckOS_Delay(gcvNULL, 1);
-+
-+ /* Stop the command parser. */
-+ gcmkONERROR(gckCOMMAND_Stop(command, gcvFALSE));
-+
-+ flag |= gcvPOWER_FLAG_CLOCK_OFF;
-+ }
-+
- /* Get time until stopped. */
- gcmkPROFILE_QUERY(time, stopTime);
-
-@@ -4582,6 +4814,40 @@ gckHARDWARE_SetPowerManagement(
- return gcvSTATUS_OK;
- }
-
-+/*******************************************************************************
-+**
-+** gckHARDWARE_SetGpuProfiler
-+**
-+** Configure GPU profiler function.
-+** Only used in driver initialization stage.
-+**
-+** INPUT:
-+**
-+** gckHARDWARE Harwdare
-+** Pointer to an gckHARDWARE object.
-+**
-+** gctBOOL GpuProfiler
-+** GOU Profiler State.
-+**
-+*/
-+gceSTATUS
-+gckHARDWARE_SetGpuProfiler(
-+ IN gckHARDWARE Hardware,
-+ IN gctBOOL GpuProfiler
-+ )
-+{
-+ gcmkHEADER_ARG("Hardware=0x%x", Hardware);
-+
-+ /* Verify the arguments. */
-+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
-+
-+ Hardware->gpuProfiler = GpuProfiler;
-+
-+ /* Success. */
-+ gcmkFOOTER_NO();
-+ return gcvSTATUS_OK;
-+}
-+
- #if gcdENABLE_FSCALE_VAL_ADJUST
- gceSTATUS
- gckHARDWARE_SetFscaleValue(
-@@ -5141,6 +5407,402 @@ OnError:
- }
- #endif
-
-+#if VIVANTE_PROFILER_CONTEXT
-+#define gcmkUPDATE_PROFILE_DATA(data) \
-+ profilerHistroy->data += profiler->data
-+
-+gceSTATUS
-+gckHARDWARE_QueryContextProfile(
-+ IN gckHARDWARE Hardware,
-+ IN gctBOOL Reset,
-+ IN gckCONTEXT Context,
-+ OUT gcsPROFILER_COUNTERS * Counters
-+ )
-+{
-+ gceSTATUS status;
-+ gckCOMMAND command = Hardware->kernel->command;
-+ gcsPROFILER_COUNTERS * profiler = Counters;
-+
-+ gcmkHEADER_ARG("Hardware=0x%x Counters=0x%x", Hardware, Counters);
-+
-+ /* Verify the arguments. */
-+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
-+
-+ /* Acquire the context sequnence mutex. */
-+ gcmkONERROR(gckOS_AcquireMutex(
-+ command->os, command->mutexContextSeq, gcvINFINITE
-+ ));
-+
-+ /* Read the counters. */
-+ gcmkVERIFY_OK(gckOS_MemCopy(
-+ profiler, &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
-+ ));
-+
-+ if (Reset)
-+ {
-+ /* Reset counters. */
-+ gcmkVERIFY_OK(gckOS_ZeroMemory(
-+ &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
-+ ));
-+ }
-+
-+ gcmkVERIFY_OK(gckOS_ReleaseMutex(
-+ command->os, command->mutexContextSeq
-+ ));
-+
-+ /* Success. */
-+ gcmkFOOTER_NO();
-+ return gcvSTATUS_OK;
-+
-+OnError:
-+ /* Return the status. */
-+ gcmkFOOTER();
-+ return status;
-+}
-+
-+
-+gceSTATUS
-+gckHARDWARE_UpdateContextProfile(
-+ IN gckHARDWARE Hardware,
-+ IN gckCONTEXT Context
-+ )
-+{
-+ gceSTATUS status;
-+ gcsPROFILER_COUNTERS * profiler = &Context->latestProfiler;
-+ gcsPROFILER_COUNTERS * profilerHistroy = &Context->histroyProfiler;
-+ gctUINT i, clock;
-+ gctUINT32 colorKilled, colorDrawn, depthKilled, depthDrawn;
-+ gctUINT32 totalRead, totalWrite;
-+ gceCHIPMODEL chipModel;
-+ gctUINT32 chipRevision;
-+ gctUINT32 temp;
-+ gctBOOL needResetShader = gcvFALSE;
-+
-+ gcmkHEADER_ARG("Hardware=0x%x Context=0x%x", Hardware, Context);
-+
-+ /* Verify the arguments. */
-+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
-+ gcmkVERIFY_OBJECT(Context, gcvOBJ_CONTEXT);
-+
-+ chipModel = Hardware->identity.chipModel;
-+ chipRevision = Hardware->identity.chipRevision;
-+ if (chipModel == gcv2000 || (chipModel == gcv2100 && chipRevision == 0x5118))
-+ {
-+ needResetShader = gcvTRUE;
-+ }
-+
-+ /* Read the counters. */
-+ gcmkONERROR(
-+ gckOS_ReadRegisterEx(Hardware->os,
-+ Hardware->core,
-+ 0x00438,
-+ &profiler->gpuCyclesCounter));
-+ gcmkUPDATE_PROFILE_DATA(gpuCyclesCounter);
-+
-+ gcmkONERROR(
-+ gckOS_ReadRegisterEx(Hardware->os,
-+ Hardware->core,
-+ 0x00078,
-+ &profiler->gpuTotalCyclesCounter));
-+ gcmkUPDATE_PROFILE_DATA(gpuTotalCyclesCounter);
-+
-+ gcmkONERROR(
-+ gckOS_ReadRegisterEx(Hardware->os,
-+ Hardware->core,
-+ 0x0007C,
-+ &profiler->gpuIdleCyclesCounter));
-+ gcmkUPDATE_PROFILE_DATA(gpuIdleCyclesCounter);
-+
-+ /* Read clock control register. */
-+ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
-+ Hardware->core,
-+ 0x00000,
-+ &clock));
-+
-+ profiler->gpuTotalRead64BytesPerFrame = 0;
-+ profiler->gpuTotalWrite64BytesPerFrame = 0;
-+ profiler->pe_pixel_count_killed_by_color_pipe = 0;
-+ profiler->pe_pixel_count_killed_by_depth_pipe = 0;
-+ profiler->pe_pixel_count_drawn_by_color_pipe = 0;
-+ profiler->pe_pixel_count_drawn_by_depth_pipe = 0;
-+
-+ /* Walk through all avaiable pixel pipes. */
-+ for (i = 0; i < Hardware->identity.pixelPipes; ++i)
-+ {
-+ /* Select proper pipe. */
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
-+ Hardware->core,
-+ 0x00000,
-+ ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20)))));
-+
-+ /* BW */
-+ gcmkONERROR(
-+ gckOS_ReadRegisterEx(Hardware->os,
-+ Hardware->core,
-+ 0x00040,
-+ &totalRead));
-+ gcmkONERROR(
-+ gckOS_ReadRegisterEx(Hardware->os,
-+ Hardware->core,
-+ 0x00044,
-+ &totalWrite));
-+
-+ profiler->gpuTotalRead64BytesPerFrame += totalRead;
-+ profiler->gpuTotalWrite64BytesPerFrame += totalWrite;
-+ gcmkUPDATE_PROFILE_DATA(gpuTotalRead64BytesPerFrame);
-+ gcmkUPDATE_PROFILE_DATA(gpuTotalWrite64BytesPerFrame);
-+
-+ /* PE */
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorKilled));
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthKilled));
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorDrawn));
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthDrawn));
-+
-+ profiler->pe_pixel_count_killed_by_color_pipe += colorKilled;
-+ profiler->pe_pixel_count_killed_by_depth_pipe += depthKilled;
-+ profiler->pe_pixel_count_drawn_by_color_pipe += colorDrawn;
-+ profiler->pe_pixel_count_drawn_by_depth_pipe += depthDrawn;
-+ gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_color_pipe);
-+ gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_depth_pipe);
-+ gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_color_pipe);
-+ gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_depth_pipe);
-+ }
-+
-+ /* Reset clock control register. */
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
-+ Hardware->core,
-+ 0x00000,
-+ clock));
-+
-+
-+
-+
-+ /* Reset counters. */
-+ gcmkONERROR(
-+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 1));
-+ gcmkONERROR(
-+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 0));
-+ gcmkONERROR(
-+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00438, 0));
-+ gcmkONERROR(
-+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00078, 0));
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
-+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
-+));
-+
-+ /* SH */
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->ps_inst_counter));
-+ if (needResetShader)
-+ {
-+ temp = profiler->ps_inst_counter;
-+ profiler->ps_inst_counter -= Context->prevPSInstCount;
-+ Context->prevPSInstCount = temp;
-+ }
-+ gcmkUPDATE_PROFILE_DATA(ps_inst_counter);
-+
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_pixel_counter));
-+ if (needResetShader)
-+ {
-+ temp = profiler->rendered_pixel_counter;
-+ profiler->rendered_pixel_counter -= Context->prevPSPixelCount;
-+ Context->prevPSPixelCount = temp;
-+ }
-+ gcmkUPDATE_PROFILE_DATA(rendered_pixel_counter);
-+
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vs_inst_counter));
-+ if (needResetShader)
-+ {
-+ temp = profiler->vs_inst_counter;
-+ profiler->vs_inst_counter -= Context->prevVSInstCount;
-+ Context->prevVSInstCount = temp;
-+ }
-+ gcmkUPDATE_PROFILE_DATA(vs_inst_counter);
-+
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_vertice_counter));
-+ if (needResetShader)
-+ {
-+ temp = profiler->rendered_vertice_counter;
-+ profiler->rendered_vertice_counter -= Context->prevVSVertexCount;
-+ Context->prevVSVertexCount = temp;
-+ }
-+ gcmkUPDATE_PROFILE_DATA(rendered_vertice_counter);
-+
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (11) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_branch_inst_counter));
-+ if (needResetShader)
-+ {
-+ temp = profiler->vtx_branch_inst_counter;
-+ profiler->vtx_branch_inst_counter -= Context->prevVSBranchInstCount;
-+ Context->prevVSBranchInstCount = temp;
-+ }
-+ gcmkUPDATE_PROFILE_DATA(vtx_branch_inst_counter);
-+
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (12) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_texld_inst_counter));
-+ if (needResetShader)
-+ {
-+ temp = profiler->vtx_texld_inst_counter;
-+ profiler->vtx_texld_inst_counter -= Context->prevVSTexInstCount;
-+ Context->prevVSTexInstCount = temp;
-+ }
-+ gcmkUPDATE_PROFILE_DATA(vtx_texld_inst_counter);
-+
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (13) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_branch_inst_counter));
-+ if (needResetShader)
-+ {
-+ temp = profiler->pxl_branch_inst_counter;
-+ profiler->pxl_branch_inst_counter -= Context->prevPSBranchInstCount;
-+ Context->prevPSBranchInstCount = temp;
-+ }
-+ gcmkUPDATE_PROFILE_DATA(pxl_branch_inst_counter);
-+
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (14) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_texld_inst_counter));
-+ if (needResetShader)
-+ {
-+ temp = profiler->pxl_texld_inst_counter;
-+ profiler->pxl_texld_inst_counter -= Context->prevPSTexInstCount;
-+ Context->prevPSTexInstCount = temp;
-+ }
-+ gcmkUPDATE_PROFILE_DATA(pxl_texld_inst_counter);
-+
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
-+));
-+
-+ /* PA */
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_vtx_counter));
-+ gcmkUPDATE_PROFILE_DATA(pa_input_vtx_counter);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_prim_counter));
-+ gcmkUPDATE_PROFILE_DATA(pa_input_prim_counter);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_output_prim_counter));
-+ gcmkUPDATE_PROFILE_DATA(pa_output_prim_counter);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_depth_clipped_counter));
-+ gcmkUPDATE_PROFILE_DATA(pa_depth_clipped_counter);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_trivial_rejected_counter));
-+ gcmkUPDATE_PROFILE_DATA(pa_trivial_rejected_counter);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_culled_counter));
-+ gcmkUPDATE_PROFILE_DATA(pa_culled_counter);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
-+));
-+
-+ /* SE */
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_triangle_count));
-+ gcmkUPDATE_PROFILE_DATA(se_culled_triangle_count);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_lines_count));
-+ gcmkUPDATE_PROFILE_DATA(se_culled_lines_count);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
-+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
-+));
-+
-+ /* RA */
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_pixel_count));
-+ gcmkUPDATE_PROFILE_DATA(ra_valid_pixel_count);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_quad_count));
-+ gcmkUPDATE_PROFILE_DATA(ra_total_quad_count);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_quad_count_after_early_z));
-+ gcmkUPDATE_PROFILE_DATA(ra_valid_quad_count_after_early_z);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_primitive_count));
-+ gcmkUPDATE_PROFILE_DATA(ra_total_primitive_count);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_pipe_cache_miss_counter));
-+ gcmkUPDATE_PROFILE_DATA(ra_pipe_cache_miss_counter);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_prefetch_cache_miss_counter));
-+ gcmkUPDATE_PROFILE_DATA(ra_prefetch_cache_miss_counter);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
-+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
-+));
-+
-+ /* TX */
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_bilinear_requests));
-+ gcmkUPDATE_PROFILE_DATA(tx_total_bilinear_requests);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_trilinear_requests));
-+ gcmkUPDATE_PROFILE_DATA(tx_total_trilinear_requests);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_discarded_texture_requests));
-+ gcmkUPDATE_PROFILE_DATA(tx_total_discarded_texture_requests);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_texture_requests));
-+ gcmkUPDATE_PROFILE_DATA(tx_total_texture_requests);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_count));
-+ gcmkUPDATE_PROFILE_DATA(tx_mem_read_count);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_in_8B_count));
-+ gcmkUPDATE_PROFILE_DATA(tx_mem_read_in_8B_count);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_count));
-+ gcmkUPDATE_PROFILE_DATA(tx_cache_miss_count);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_hit_texel_count));
-+ gcmkUPDATE_PROFILE_DATA(tx_cache_hit_texel_count);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_texel_count));
-+ gcmkUPDATE_PROFILE_DATA(tx_cache_miss_texel_count);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
-+));
-+
-+ /* MC */
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_pipeline));
-+ gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_pipeline);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_IP));
-+ gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_IP);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_write_req_8B_from_pipeline));
-+ gcmkUPDATE_PROFILE_DATA(mc_total_write_req_8B_from_pipeline);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
-+));
-+
-+ /* HI */
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_read_request_stalled));
-+ gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_read_request_stalled);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_request_stalled));
-+ gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_request_stalled);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_data_stalled));
-+ gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_data_stalled);
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
-+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
-+));
-+
-+ /* Success. */
-+ gcmkFOOTER_NO();
-+ return gcvSTATUS_OK;
-+
-+OnError:
-+ /* Return the status. */
-+ gcmkFOOTER();
-+ return status;
-+}
-+#endif
-+
- static gceSTATUS
- _ResetGPU(
- IN gckHARDWARE Hardware,
-@@ -5602,6 +6264,22 @@ gckHARDWARE_IsFeatureAvailable(
- && ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 2:2) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))));
- break;
-
-+ case gcvFEATURE_PIPE_2D:
-+ available = ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 9:9) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))));
-+ break;
-+
-+ case gcvFEATURE_PIPE_3D:
-+#ifndef VIVANTE_NO_3D
-+ available = ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 2:2) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))));
-+#else
-+ available = gcvFALSE;
-+#endif
-+ break;
-+
-+ case gcvFEATURE_HALTI2:
-+ available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures4)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))));
-+ break;
-+
- default:
- gcmkFATAL("Invalid feature has been requested.");
- available = gcvFALSE;
-diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
-index 37226b7..287ea60 100644
---- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
-+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
-@@ -92,6 +92,7 @@ struct _gckHARDWARE
- #endif
-
- gctBOOL powerManagement;
-+ gctBOOL gpuProfiler;
- };
-
- gceSTATUS
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
-index b7b0d28..12a5340 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
-@@ -128,19 +128,6 @@ _ResetFinishFunction(
- ** Pointer to a variable that will hold the pointer to the gckKERNEL
- ** object.
- */
--#ifdef ANDROID
--#if gcdNEW_PROFILER_FILE
--#define DEFAULT_PROFILE_FILE_NAME "/sdcard/vprofiler.vpd"
--#else
--#define DEFAULT_PROFILE_FILE_NAME "/sdcard/vprofiler.xml"
--#endif
--#else
--#if gcdNEW_PROFILER_FILE
--#define DEFAULT_PROFILE_FILE_NAME "vprofiler.vpd"
--#else
--#define DEFAULT_PROFILE_FILE_NAME "vprofiler.xml"
--#endif
--#endif
-
- gceSTATUS
- gckKERNEL_Construct(
-@@ -302,17 +289,12 @@ gckKERNEL_Construct(
-
- #if VIVANTE_PROFILER
- /* Initialize profile setting */
--#if defined ANDROID
- kernel->profileEnable = gcvFALSE;
--#else
-- kernel->profileEnable = gcvTRUE;
--#endif
- kernel->profileCleanRegister = gcvTRUE;
-+#endif
-
-- gcmkVERIFY_OK(
-- gckOS_MemCopy(kernel->profileFileName,
-- DEFAULT_PROFILE_FILE_NAME,
-- gcmSIZEOF(DEFAULT_PROFILE_FILE_NAME) + 1));
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+ gcmkONERROR(gckOS_CreateSyncTimeline(Os, &kernel->timeline));
- #endif
-
- /* Return pointer to the gckKERNEL object. */
-@@ -395,6 +377,13 @@ OnError:
- }
- #endif
-
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+ if (kernel->timeline)
-+ {
-+ gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Os, kernel->timeline));
-+ }
-+#endif
-+
- gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Os, kernel));
- }
-
-@@ -525,6 +514,10 @@ gckKERNEL_Destroy(
- }
- #endif
-
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+ gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Kernel->os, Kernel->timeline));
-+#endif
-+
- /* Mark the gckKERNEL object as unknown. */
- Kernel->object.type = gcvOBJ_UNKNOWN;
-
-@@ -1310,7 +1303,8 @@ gckKERNEL_Dispatch(
- /* Commit a command and context buffer. */
- gcmkONERROR(
- gckCOMMAND_Commit(Kernel->command,
-- gcmNAME_TO_PTR(Interface->u.Commit.context),
-+ Interface->u.Commit.context ?
-+ gcmNAME_TO_PTR(Interface->u.Commit.context) : gcvNULL,
- gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffer),
- gcmUINT64_TO_PTR(Interface->u.Commit.delta),
- gcmUINT64_TO_PTR(Interface->u.Commit.queue),
-@@ -1600,7 +1594,15 @@ gckKERNEL_Dispatch(
- break;
-
- case gcvHAL_READ_ALL_PROFILE_REGISTERS:
--#if VIVANTE_PROFILER
-+#if VIVANTE_PROFILER && VIVANTE_PROFILER_CONTEXT
-+ /* Read profile data according to the context. */
-+ gcmkONERROR(
-+ gckHARDWARE_QueryContextProfile(
-+ Kernel->hardware,
-+ Kernel->profileCleanRegister,
-+ gcmNAME_TO_PTR(Interface->u.RegisterProfileData.context),
-+ &Interface->u.RegisterProfileData.counters));
-+#elif VIVANTE_PROFILER
- /* Read all 3D profile registers. */
- gcmkONERROR(
- gckHARDWARE_QueryProfileRegisters(
-@@ -1628,11 +1630,6 @@ gckKERNEL_Dispatch(
- #if VIVANTE_PROFILER
- /* Get profile setting */
- Interface->u.GetProfileSetting.enable = Kernel->profileEnable;
--
-- gcmkVERIFY_OK(
-- gckOS_MemCopy(Interface->u.GetProfileSetting.fileName,
-- Kernel->profileFileName,
-- gcdMAX_PROFILE_FILE_NAME));
- #endif
-
- status = gcvSTATUS_OK;
-@@ -1640,12 +1637,13 @@ gckKERNEL_Dispatch(
- case gcvHAL_SET_PROFILE_SETTING:
- #if VIVANTE_PROFILER
- /* Set profile setting */
-- Kernel->profileEnable = Interface->u.SetProfileSetting.enable;
--
-- gcmkVERIFY_OK(
-- gckOS_MemCopy(Kernel->profileFileName,
-- Interface->u.SetProfileSetting.fileName,
-- gcdMAX_PROFILE_FILE_NAME));
-+ if(Kernel->hardware->gpuProfiler)
-+ Kernel->profileEnable = Interface->u.SetProfileSetting.enable;
-+ else
-+ {
-+ status = gcvSTATUS_NOT_SUPPORTED;
-+ break;
-+ }
- #endif
-
- status = gcvSTATUS_OK;
-@@ -2093,6 +2091,61 @@ gckKERNEL_Dispatch(
- #endif
- break;
-
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+ case gcvHAL_SYNC_POINT:
-+ {
-+ gctSYNC_POINT syncPoint;
-+
-+ switch (Interface->u.SyncPoint.command)
-+ {
-+ case gcvSYNC_POINT_CREATE:
-+ gcmkONERROR(gckOS_CreateSyncPoint(Kernel->os, &syncPoint));
-+
-+ Interface->u.SyncPoint.syncPoint = gcmPTR_TO_UINT64(syncPoint);
-+
-+ gcmkVERIFY_OK(
-+ gckKERNEL_AddProcessDB(Kernel,
-+ processID, gcvDB_SYNC_POINT,
-+ syncPoint,
-+ gcvNULL,
-+ 0));
-+ break;
-+
-+ case gcvSYNC_POINT_DESTROY:
-+ syncPoint = gcmUINT64_TO_PTR(Interface->u.SyncPoint.syncPoint);
-+
-+ gcmkONERROR(gckOS_DestroySyncPoint(Kernel->os, syncPoint));
-+
-+ gcmkVERIFY_OK(
-+ gckKERNEL_RemoveProcessDB(Kernel,
-+ processID, gcvDB_SYNC_POINT,
-+ syncPoint));
-+ break;
-+
-+ default:
-+ gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
-+ break;
-+ }
-+ }
-+ break;
-+
-+ case gcvHAL_CREATE_NATIVE_FENCE:
-+ {
-+ gctINT fenceFD;
-+ gctSYNC_POINT syncPoint =
-+ gcmUINT64_TO_PTR(Interface->u.CreateNativeFence.syncPoint);
-+
-+ gcmkONERROR(
-+ gckOS_CreateNativeFence(Kernel->os,
-+ Kernel->timeline,
-+ syncPoint,
-+ &fenceFD));
-+
-+ Interface->u.CreateNativeFence.fenceFD = fenceFD;
-+ }
-+ break;
-+#endif
-+
- default:
- /* Invalid command. */
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
-@@ -2856,6 +2909,8 @@ gckKERNEL_Recovery(
- return gcvSTATUS_OK;
- }
-
-+ gcmkPRINT("[galcore]: GPU[%d] hang, automatic recovery.", Kernel->core);
-+
- /* Start a timer to clear reset flag, before timer is expired,
- ** other recovery request is ignored. */
- gcmkVERIFY_OK(
-@@ -3382,7 +3437,7 @@ gckLINKQUEUE_Dequeue(
- IN gckLINKQUEUE LinkQueue
- )
- {
-- gcmASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
-+ gcmkASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
-
- LinkQueue->count--;
- LinkQueue->front = (LinkQueue->front + 1) % gcdLINK_QUEUE_SIZE;
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
-index 5896e93..1c40df2 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
-@@ -140,8 +140,9 @@ typedef enum _gceDATABASE_TYPE
- gcvDB_CONTEXT, /* Context */
- gcvDB_IDLE, /* GPU idle. */
- gcvDB_MAP_MEMORY, /* Map memory */
-- gcvDB_SHARED_INFO, /* Private data */
-- gcvDB_MAP_USER_MEMORY /* Map user memory */
-+ gcvDB_SHARED_INFO, /* Private data */
-+ gcvDB_MAP_USER_MEMORY, /* Map user memory */
-+ gcvDB_SYNC_POINT, /* Sync point. */
- }
- gceDATABASE_TYPE;
-
-@@ -406,9 +407,6 @@ struct _gckKERNEL
- /* Enable profiling */
- gctBOOL profileEnable;
-
-- /* The profile file name */
-- gctCHAR profileFileName[gcdMAX_PROFILE_FILE_NAME];
--
- /* Clear profile register or not*/
- gctBOOL profileCleanRegister;
-
-@@ -445,6 +443,10 @@ struct _gckKERNEL
- #if gcdDVFS
- gckDVFS dvfs;
- #endif
-+
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+ gctHANDLE timeline;
-+#endif
- };
-
- struct _FrequencyHistory
-@@ -496,6 +498,11 @@ struct _gckCOMMAND
- /* Context switching mutex. */
- gctPOINTER mutexContext;
-
-+#if VIVANTE_PROFILER_CONTEXT
-+ /* Context sequence mutex. */
-+ gctPOINTER mutexContextSeq;
-+#endif
-+
- /* Command queue power semaphore. */
- gctPOINTER powerSemaphore;
-
-@@ -649,6 +656,8 @@ struct _gckEVENT
- gctPOINTER eventListMutex;
-
- gctPOINTER submitTimer;
-+
-+ volatile gctBOOL inNotify;
- };
-
- /* Free all events belonging to a process. */
-@@ -668,6 +677,11 @@ gckEVENT_Stop(
- IN OUT gctSIZE_T * waitSize
- );
-
-+gceSTATUS
-+gckEVENT_WaitEmpty(
-+ IN gckEVENT Event
-+ );
-+
- /* gcuVIDMEM_NODE structure. */
- typedef union _gcuVIDMEM_NODE
- {
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
-index 9ee9ea1..73dab81 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
-@@ -494,6 +494,11 @@ gckCOMMAND_Construct(
- /* Create the context switching mutex. */
- gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContext));
-
-+#if VIVANTE_PROFILER_CONTEXT
-+ /* Create the context switching mutex. */
-+ gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContextSeq));
-+#endif
-+
- /* Create the power management semaphore. */
- gcmkONERROR(gckOS_CreateSemaphore(os, &command->powerSemaphore));
-
-@@ -572,6 +577,13 @@ OnError:
- gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContext));
- }
-
-+#if VIVANTE_PROFILER_CONTEXT
-+ if (command->mutexContextSeq != gcvNULL)
-+ {
-+ gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContextSeq));
-+ }
-+#endif
-+
- if (command->mutexQueue != gcvNULL)
- {
- gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexQueue));
-@@ -662,6 +674,11 @@ gckCOMMAND_Destroy(
- /* Delete the context switching mutex. */
- gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContext));
-
-+#if VIVANTE_PROFILER_CONTEXT
-+ if (Command->mutexContextSeq != gcvNULL)
-+ gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContextSeq));
-+#endif
-+
- /* Delete the command queue mutex. */
- gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexQueue));
-
-@@ -1127,6 +1144,10 @@ gckCOMMAND_Commit(
- # endif
- #endif
-
-+#if VIVANTE_PROFILER_CONTEXT
-+ gctBOOL sequenceAcquired = gcvFALSE;
-+#endif
-+
- gctPOINTER pointer = gcvNULL;
-
- gcmkHEADER_ARG(
-@@ -1145,6 +1166,17 @@ gckCOMMAND_Commit(
-
- gcmkONERROR(_FlushMMU(Command));
-
-+#if VIVANTE_PROFILER_CONTEXT
-+ if((Command->kernel->hardware->gpuProfiler) && (Command->kernel->profileEnable))
-+ {
-+ /* Acquire the context sequnence mutex. */
-+ gcmkONERROR(gckOS_AcquireMutex(
-+ Command->os, Command->mutexContextSeq, gcvINFINITE
-+ ));
-+ sequenceAcquired = gcvTRUE;
-+ }
-+#endif
-+
- /* Acquire the command queue. */
- gcmkONERROR(gckCOMMAND_EnterCommit(Command, gcvFALSE));
- commitEntered = gcvTRUE;
-@@ -2002,6 +2034,23 @@ gckCOMMAND_Commit(
- gcmkONERROR(gckCOMMAND_ExitCommit(Command, gcvFALSE));
- commitEntered = gcvFALSE;
-
-+#if VIVANTE_PROFILER_CONTEXT
-+ if(sequenceAcquired)
-+ {
-+ gcmkONERROR(gckCOMMAND_Stall(Command, gcvTRUE));
-+ if (Command->currContext)
-+ {
-+ gcmkONERROR(gckHARDWARE_UpdateContextProfile(
-+ hardware,
-+ Command->currContext));
-+ }
-+
-+ /* Release the context switching mutex. */
-+ gcmkONERROR(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
-+ sequenceAcquired = gcvFALSE;
-+ }
-+#endif
-+
- /* Loop while there are records in the queue. */
- while (EventQueue != gcvNULL)
- {
-@@ -2114,6 +2163,14 @@ OnError:
- gcmkVERIFY_OK(gckCOMMAND_ExitCommit(Command, gcvFALSE));
- }
-
-+#if VIVANTE_PROFILER_CONTEXT
-+ if (sequenceAcquired)
-+ {
-+ /* Release the context sequence mutex. */
-+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
-+ }
-+#endif
-+
- /* Unmap the command buffer pointer. */
- if (commandBufferMapped)
- {
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
-index 76c1c10..1a7c340 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
-@@ -2819,6 +2819,7 @@ gckVGCOMMAND_Construct(
- ** Enable TS overflow interrupt.
- */
-
-+ command->info.tsOverflowInt = 0;
- gcmkERR_BREAK(gckVGINTERRUPT_Enable(
- Kernel->interrupt,
- &command->info.tsOverflowInt,
-@@ -3406,38 +3407,26 @@ gckVGCOMMAND_Commit(
- gctBOOL previousExecuted;
- gctUINT controlIndex;
-
-+ gcmkERR_BREAK(gckVGHARDWARE_SetPowerManagementState(
-+ Command->hardware, gcvPOWER_ON_AUTO
-+ ));
-+
-+ /* Acquire the power semaphore. */
-+ gcmkERR_BREAK(gckOS_AcquireSemaphore(
-+ Command->os, Command->powerSemaphore
-+ ));
-+
- /* Acquire the mutex. */
-- gcmkERR_BREAK(gckOS_AcquireMutex(
-+ status = gckOS_AcquireMutex(
- Command->os,
- Command->commitMutex,
- gcvINFINITE
-- ));
--
-- status = gckVGHARDWARE_SetPowerManagementState(
-- Command->hardware, gcvPOWER_ON_AUTO);
--
-- if (gcmIS_ERROR(status))
-- {
-- /* Acquire the mutex. */
-- gcmkVERIFY_OK(gckOS_ReleaseMutex(
-- Command->os,
-- Command->commitMutex
-- ));
--
-- break;
-- }
-- /* Acquire the power semaphore. */
-- status = gckOS_AcquireSemaphore(
-- Command->os, Command->powerSemaphore);
-+ );
-
- if (gcmIS_ERROR(status))
- {
-- /* Acquire the mutex. */
-- gcmkVERIFY_OK(gckOS_ReleaseMutex(
-- Command->os,
-- Command->commitMutex
-- ));
--
-+ gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
-+ Command->os, Command->powerSemaphore));
- break;
- }
-
-@@ -3669,14 +3658,14 @@ gckVGCOMMAND_Commit(
- }
- while (gcvFALSE);
-
-- gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
-- Command->os, Command->powerSemaphore));
--
- /* Release the mutex. */
- gcmkCHECK_STATUS(gckOS_ReleaseMutex(
- Command->os,
- Command->commitMutex
- ));
-+
-+ gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
-+ Command->os, Command->powerSemaphore));
- }
- while (gcvFALSE);
-
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
-index 673d4f7..134351a 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
-@@ -1307,6 +1307,18 @@ gckKERNEL_DestroyProcessDB(
- status = gckOS_FreeMemory(Kernel->os, record->physical);
- break;
-
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+ case gcvDB_SYNC_POINT:
-+ /* Free the user signal. */
-+ status = gckOS_DestroySyncPoint(Kernel->os,
-+ (gctSYNC_POINT) record->data);
-+
-+ gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE,
-+ "DB: SYNC POINT %d (status=%d)",
-+ (gctINT)(gctUINTPTR_T)record->data, status);
-+ break;
-+#endif
-+
- default:
- gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DATABASE,
- "DB: Correcupted record=0x%08x type=%d",
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
-index 217f7f1..2d81a56 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
-@@ -931,6 +931,7 @@ gckEVENT_AddList(
- || (Interface->command == gcvHAL_TIMESTAMP)
- || (Interface->command == gcvHAL_COMMIT_DONE)
- || (Interface->command == gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER)
-+ || (Interface->command == gcvHAL_SYNC_POINT)
- );
-
- /* Validate the source. */
-@@ -2131,6 +2132,9 @@ gckEVENT_Notify(
- gcvINFINITE));
- acquired = gcvTRUE;
-
-+ /* We are in the notify loop. */
-+ Event->inNotify = gcvTRUE;
-+
- /* Grab the event head. */
- record = queue->head;
-
-@@ -2463,6 +2467,17 @@ gckEVENT_Notify(
- break;
- #endif
-
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+ case gcvHAL_SYNC_POINT:
-+ {
-+ gctSYNC_POINT syncPoint;
-+
-+ syncPoint = gcmUINT64_TO_PTR(record->info.u.SyncPoint.syncPoint);
-+ status = gckOS_SignalSyncPoint(Event->os, syncPoint);
-+ }
-+ break;
-+#endif
-+
- case gcvHAL_COMMIT_DONE:
- break;
-
-@@ -2505,6 +2520,9 @@ gckEVENT_Notify(
- gcmkONERROR(_TryToIdleGPU(Event));
- }
-
-+ /* We are out the notify loop. */
-+ Event->inNotify = gcvFALSE;
-+
- /* Success. */
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-@@ -2524,6 +2542,9 @@ OnError:
- }
- #endif
-
-+ /* We are out the notify loop. */
-+ Event->inNotify = gcvFALSE;
-+
- /* Return the status. */
- gcmkFOOTER();
- return status;
-@@ -2871,3 +2892,11 @@ gckEVENT_Dump(
- return gcvSTATUS_OK;
- }
-
-+gceSTATUS gckEVENT_WaitEmpty(gckEVENT Event)
-+{
-+ gctBOOL isEmpty;
-+
-+ while (Event->inNotify || (gcmIS_SUCCESS(gckEVENT_IsEmpty(Event, &isEmpty)) && !isEmpty)) ;
-+
-+ return gcvSTATUS_OK;
-+}
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
-index 8ac187b..50bc63e 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
-@@ -794,6 +794,9 @@ gckVGINTERRUPT_Enque(
- Interrupt->kernel->hardware, &triggered
- ));
-
-+ /* Mask out TS overflow interrupt */
-+ triggered &= 0xfffffffe;
-+
- /* No interrupts to process? */
- if (triggered == 0)
- {
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
-index c7f67c7..e4ca497 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
-@@ -1436,7 +1436,7 @@ gckMMU_AllocatePages(
- acquired = gcvTRUE;
-
- /* Allocate page table for current MMU. */
-- for (i = 0; i < mirrorPageTable->reference; i++)
-+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
- {
- if (Mmu == mirrorPageTable->mmus[i])
- {
-@@ -1446,7 +1446,7 @@ gckMMU_AllocatePages(
- }
-
- /* Allocate page table for other MMUs. */
-- for (i = 0; i < mirrorPageTable->reference; i++)
-+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
- {
- mmu = mirrorPageTable->mmus[i];
-
-@@ -1500,7 +1500,7 @@ gckMMU_FreePages(
-
- offset = (gctUINT32)PageTable - (gctUINT32)Mmu->pageTableLogical;
-
-- for (i = 0; i < mirrorPageTable->reference; i++)
-+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
- {
- mmu = mirrorPageTable->mmus[i];
-
-@@ -1639,7 +1639,7 @@ gckMMU_SetPage(
- _WritePageEntry(PageEntry, data);
-
- #if gcdMIRROR_PAGETABLE
-- for (i = 0; i < mirrorPageTable->reference; i++)
-+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
- {
- mmu = mirrorPageTable->mmus[i];
-
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
-index 8b8bbdc..3b5dd82 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
-@@ -1582,6 +1582,7 @@ _NeedVirtualMapping(
- gctUINT32 end;
- gcePOOL pool;
- gctUINT32 offset;
-+ gctUINT32 baseAddress;
-
- gcmkHEADER_ARG("Node=0x%X", Node);
-
-@@ -1601,10 +1602,16 @@ _NeedVirtualMapping(
- else
- #endif
- {
-- /* For cores which can't access all physical address. */
-- gcmkONERROR(gckHARDWARE_ConvertLogical(Kernel->hardware,
-- Node->Virtual.logical,
-- &phys));
-+ /* Convert logical address into a physical address. */
-+ gcmkONERROR(
-+ gckOS_GetPhysicalAddress(Kernel->os, Node->Virtual.logical, &phys));
-+
-+ gcmkONERROR(gckOS_GetBaseAddress(Kernel->os, &baseAddress));
-+
-+ gcmkASSERT(phys >= baseAddress);
-+
-+ /* Subtract baseAddress to get a GPU address used for programming. */
-+ phys -= baseAddress;
-
- /* If part of region is belong to gcvPOOL_VIRTUAL,
- ** whole region has to be mapped. */
-@@ -1734,6 +1741,11 @@ gckVIDMEM_Lock(
- gcmkONERROR(gckOS_AcquireMutex(os, Node->Virtual.mutex, gcvINFINITE));
- acquired = gcvTRUE;
-
-+#if gcdPAGED_MEMORY_CACHEABLE
-+ /* Force video memory cacheable. */
-+ Cacheable = gcvTRUE;
-+#endif
-+
- gcmkONERROR(
- gckOS_LockPages(os,
- Node->Virtual.physical,
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
-index 4406d7e..7312cc2 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
-@@ -123,6 +123,12 @@ extern "C" {
-
- #define gcvINVALID_ADDRESS ~0U
-
-+#define gcmGET_PRE_ROTATION(rotate) \
-+ ((rotate) & (~(gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y)))
-+
-+#define gcmGET_POST_ROTATION(rotate) \
-+ ((rotate) & (gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y))
-+
- /******************************************************************************\
- ******************************** gcsOBJECT Object *******************************
- \******************************************************************************/
-@@ -1124,6 +1130,60 @@ gckOS_UnmapUserMemory(
- IN gctUINT32 Address
- );
-
-+/******************************************************************************\
-+************************** Android Native Fence Sync ***************************
-+\******************************************************************************/
-+gceSTATUS
-+gckOS_CreateSyncTimeline(
-+ IN gckOS Os,
-+ OUT gctHANDLE * Timeline
-+ );
-+
-+gceSTATUS
-+gckOS_DestroySyncTimeline(
-+ IN gckOS Os,
-+ IN gctHANDLE Timeline
-+ );
-+
-+gceSTATUS
-+gckOS_CreateSyncPoint(
-+ IN gckOS Os,
-+ OUT gctSYNC_POINT * SyncPoint
-+ );
-+
-+gceSTATUS
-+gckOS_ReferenceSyncPoint(
-+ IN gckOS Os,
-+ IN gctSYNC_POINT SyncPoint
-+ );
-+
-+gceSTATUS
-+gckOS_DestroySyncPoint(
-+ IN gckOS Os,
-+ IN gctSYNC_POINT SyncPoint
-+ );
-+
-+gceSTATUS
-+gckOS_SignalSyncPoint(
-+ IN gckOS Os,
-+ IN gctSYNC_POINT SyncPoint
-+ );
-+
-+gceSTATUS
-+gckOS_QuerySyncPoint(
-+ IN gckOS Os,
-+ IN gctSYNC_POINT SyncPoint,
-+ OUT gctBOOL_PTR State
-+ );
-+
-+gceSTATUS
-+gckOS_CreateNativeFence(
-+ IN gckOS Os,
-+ IN gctHANDLE Timeline,
-+ IN gctSYNC_POINT SyncPoint,
-+ OUT gctINT * FenceFD
-+ );
-+
- #if !USE_NEW_LINUX_SIGNAL
- /* Create signal to be used in the user space. */
- gceSTATUS
-@@ -1758,7 +1818,7 @@ gckKERNEL_Recovery(
- void
- gckKERNEL_SetTimeOut(
- IN gckKERNEL Kernel,
-- IN gctUINT32 timeOut
-+ IN gctUINT32 timeOut
- );
-
- /* Get access to the user data. */
-@@ -2078,6 +2138,12 @@ gckHARDWARE_SetPowerManagement(
- IN gctBOOL PowerManagement
- );
-
-+gceSTATUS
-+gckHARDWARE_SetGpuProfiler(
-+ IN gckHARDWARE Hardware,
-+ IN gctBOOL GpuProfiler
-+ );
-+
- #if gcdENABLE_FSCALE_VAL_ADJUST
- gceSTATUS
- gckHARDWARE_SetFscaleValue(
-@@ -2554,6 +2620,22 @@ gckHARDWARE_QueryProfileRegisters(
- );
- #endif
-
-+#if VIVANTE_PROFILER_CONTEXT
-+gceSTATUS
-+gckHARDWARE_QueryContextProfile(
-+ IN gckHARDWARE Hardware,
-+ IN gctBOOL Clear,
-+ IN gckCONTEXT Context,
-+ OUT gcsPROFILER_COUNTERS * Counters
-+ );
-+
-+gceSTATUS
-+gckHARDWARE_UpdateContextProfile(
-+ IN gckHARDWARE Hardware,
-+ IN gckCONTEXT Context
-+ );
-+#endif
-+
- gceSTATUS
- gckOS_SignalQueryHardware(
- IN gckOS Os,
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
-index 44689b0..9c17114 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
-@@ -71,10 +71,17 @@ typedef struct _gcoFENCE * gcoFENCE;
- typedef struct _gcsSYNC_CONTEXT * gcsSYNC_CONTEXT_PTR;
- #endif
-
-+typedef struct _gcoOS_SymbolsList gcoOS_SymbolsList;
-+
- /******************************************************************************\
- ******************************* Process local storage *************************
- \******************************************************************************/
- typedef struct _gcsPLS * gcsPLS_PTR;
-+
-+typedef void (* gctPLS_DESTRUCTOR) (
-+ gcsPLS_PTR
-+ );
-+
- typedef struct _gcsPLS
- {
- /* Global objects. */
-@@ -103,6 +110,12 @@ typedef struct _gcsPLS
-
- /* PorcessID of the constrcutor process */
- gctUINT32 processID;
-+#if gcdFORCE_GAL_LOAD_TWICE
-+ /* ThreadID of the constrcutor process. */
-+ gctSIZE_T threadID;
-+ /* Flag for calling module destructor. */
-+ gctBOOL exiting;
-+#endif
-
- /* Reference count for destructor. */
- gcsATOM_PTR reference;
-@@ -111,6 +124,8 @@ typedef struct _gcsPLS
- gctBOOL bNeedSupportNP2Texture;
- #endif
-
-+ /* Destructor for eglDisplayInfo. */
-+ gctPLS_DESTRUCTOR destructor;
- }
- gcsPLS;
-
-@@ -148,6 +163,11 @@ typedef struct _gcsTLS
- #endif
- gco2D engine2D;
- gctBOOL copied;
-+
-+#if gcdFORCE_GAL_LOAD_TWICE
-+ /* libGAL.so handle */
-+ gctHANDLE handle;
-+#endif
- }
- gcsTLS;
-
-@@ -160,6 +180,7 @@ typedef enum _gcePLS_VALUE
- gcePLS_VALUE_EGL_DISPLAY_INFO,
- gcePLS_VALUE_EGL_SURFACE_INFO,
- gcePLS_VALUE_EGL_CONFIG_FORMAT_INFO,
-+ gcePLS_VALUE_EGL_DESTRUCTOR_INFO,
- }
- gcePLS_VALUE;
-
-@@ -577,6 +598,12 @@ gcoHAL_Call(
- IN OUT gcsHAL_INTERFACE_PTR Interface
- );
-
-+gceSTATUS
-+gcoHAL_GetPatchID(
-+ IN gcoHAL Hal,
-+ OUT gcePATCH_ID * PatchID
-+ );
-+
- /* Schedule an event. */
- gceSTATUS
- gcoHAL_ScheduleEvent(
-@@ -637,6 +664,16 @@ gcoHAL_QuerySeparated3D2D(
- IN gcoHAL Hal
- );
-
-+gceSTATUS
-+gcoHAL_QuerySpecialHint(
-+ IN gceSPECIAL_HINT Hint
-+ );
-+
-+gceSTATUS
-+gcoHAL_SetSpecialHintData(
-+ IN gcoHARDWARE Hardware
-+ );
-+
- /* Get pointer to gcoVG object. */
- gceSTATUS
- gcoHAL_GetVGEngine(
-@@ -786,7 +823,6 @@ gcoOS_FreeVideoMemory(
- IN gctPOINTER Handle
- );
-
--#if gcdENABLE_BANK_ALIGNMENT
- gceSTATUS
- gcoSURF_GetBankOffsetBytes(
- IN gcoSURF Surfce,
-@@ -794,7 +830,6 @@ gcoSURF_GetBankOffsetBytes(
- IN gctUINT32 Stride,
- IN gctUINT32_PTR Bytes
- );
--#endif
-
- /* Map user memory. */
- gceSTATUS
-@@ -918,6 +953,21 @@ gcoOS_Flush(
- IN gctFILE File
- );
-
-+/* Close a file descriptor. */
-+gceSTATUS
-+gcoOS_CloseFD(
-+ IN gcoOS Os,
-+ IN gctINT FD
-+ );
-+
-+/* Dup file descriptor to another. */
-+gceSTATUS
-+gcoOS_DupFD(
-+ IN gcoOS Os,
-+ IN gctINT FD,
-+ OUT gctINT * FD2
-+ );
-+
- /* Create an endpoint for communication. */
- gceSTATUS
- gcoOS_Socket(
-@@ -977,6 +1027,14 @@ gcoOS_GetEnv(
- OUT gctSTRING * Value
- );
-
-+/* Set environment variable value. */
-+gceSTATUS
-+gcoOS_SetEnv(
-+ IN gcoOS Os,
-+ IN gctCONST_STRING VarName,
-+ IN gctSTRING Value
-+ );
-+
- /* Get current working directory. */
- gceSTATUS
- gcoOS_GetCwd(
-@@ -1210,6 +1268,13 @@ gcoOS_DetectProcessByEncryptedName(
- IN gctCONST_STRING Name
- );
-
-+#if defined(ANDROID)
-+gceSTATUS
-+gcoOS_DetectProgrameByEncryptedSymbols(
-+ IN gcoOS_SymbolsList Symbols
-+ );
-+#endif
-+
- /*----------------------------------------------------------------------------*/
- /*----- Atoms ----------------------------------------------------------------*/
-
-@@ -1403,6 +1468,42 @@ gcoOS_UnmapSignal(
- IN gctSIGNAL Signal
- );
-
-+/*----------------------------------------------------------------------------*/
-+/*----- Android Native Fence -------------------------------------------------*/
-+
-+/* Create sync point. */
-+gceSTATUS
-+gcoOS_CreateSyncPoint(
-+ IN gcoOS Os,
-+ OUT gctSYNC_POINT * SyncPoint
-+ );
-+
-+/* Destroy sync point. */
-+gceSTATUS
-+gcoOS_DestroySyncPoint(
-+ IN gcoOS Os,
-+ IN gctSYNC_POINT SyncPoint
-+ );
-+
-+/* Create native fence. */
-+gceSTATUS
-+gcoOS_CreateNativeFence(
-+ IN gcoOS Os,
-+ IN gctSYNC_POINT SyncPoint,
-+ OUT gctINT * FenceFD
-+ );
-+
-+/* Wait on native fence. */
-+gceSTATUS
-+gcoOS_WaitNativeFence(
-+ IN gcoOS Os,
-+ IN gctINT FenceFD,
-+ IN gctUINT32 Timeout
-+ );
-+
-+/*----------------------------------------------------------------------------*/
-+/*----- Memory Access and Cache ----------------------------------------------*/
-+
- /* Write a register. */
- gceSTATUS
- gcoOS_WriteRegister(
-@@ -1507,7 +1608,7 @@ gcoOS_QueryProfileTickRate(
- # define gcmPROFILE_QUERY(start, ticks) do { } while (gcvFALSE)
- # define gcmPROFILE_ONLY(x) do { } while (gcvFALSE)
- # define gcmPROFILE_ELSE(x) x
--# define gcmPROFILE_DECLARE_ONLY(x) typedef x
-+# define gcmPROFILE_DECLARE_ONLY(x) do { } while (gcvFALSE)
- # define gcmPROFILE_DECLARE_ELSE(x) x
- #endif
-
-@@ -1579,6 +1680,28 @@ typedef struct _gcsRECT
- }
- gcsRECT;
-
-+typedef union _gcsPIXEL
-+{
-+ struct
-+ {
-+ gctFLOAT r, g, b, a;
-+ gctFLOAT d, s;
-+ } pf;
-+
-+ struct
-+ {
-+ gctINT32 r, g, b, a;
-+ gctINT32 d, s;
-+ } pi;
-+
-+ struct
-+ {
-+ gctUINT32 r, g, b, a;
-+ gctUINT32 d, s;
-+ } pui;
-+
-+} gcsPIXEL;
-+
-
- /******************************************************************************\
- ********************************* gcoSURF Object ********************************
-@@ -1795,6 +1918,18 @@ gcoSURF_SetRotation(
- );
-
- gceSTATUS
-+gcoSURF_SetPreRotation(
-+ IN gcoSURF Surface,
-+ IN gceSURF_ROTATION Rotation
-+ );
-+
-+gceSTATUS
-+gcoSURF_GetPreRotation(
-+ IN gcoSURF Surface,
-+ IN gceSURF_ROTATION *Rotation
-+ );
-+
-+gceSTATUS
- gcoSURF_IsValid(
- IN gcoSURF Surface
- );
-@@ -1824,6 +1959,15 @@ gcoSURF_DisableTileStatus(
- IN gcoSURF Surface,
- IN gctBOOL Decompress
- );
-+
-+gceSTATUS
-+gcoSURF_AlignResolveRect(
-+ IN gcoSURF Surf,
-+ IN gcsPOINT_PTR RectOrigin,
-+ IN gcsPOINT_PTR RectSize,
-+ OUT gcsPOINT_PTR AlignedOrigin,
-+ OUT gcsPOINT_PTR AlignedSize
-+ );
- #endif /* VIVANTE_NO_3D */
-
- /* Get surface size. */
-@@ -1910,6 +2054,9 @@ gcoSURF_FillFromTile(
- IN gcoSURF Surface
- );
-
-+/* Check if surface needs a filler. */
-+gceSTATUS gcoSURF_NeedFiller(IN gcoSURF Surface);
-+
- /* Fill surface with a value. */
- gceSTATUS
- gcoSURF_Fill(
-@@ -1949,6 +2096,19 @@ gcoSURF_SetBuffer(
- IN gctUINT32 Physical
- );
-
-+/* Set the underlying video buffer for the surface wrapper. */
-+gceSTATUS
-+gcoSURF_SetVideoBuffer(
-+ IN gcoSURF Surface,
-+ IN gceSURF_TYPE Type,
-+ IN gceSURF_FORMAT Format,
-+ IN gctUINT Width,
-+ IN gctUINT Height,
-+ IN gctUINT Stride,
-+ IN gctPOINTER *LogicalPlane1,
-+ IN gctUINT32 *PhysicalPlane1
-+ );
-+
- /* Set the size of the surface in pixels and map the underlying buffer. */
- gceSTATUS
- gcoSURF_SetWindow(
-@@ -3705,6 +3865,12 @@ gcGetUserDebugOption(
- void
- );
-
-+struct _gcoOS_SymbolsList
-+{
-+ gcePATCH_ID patchId;
-+ const char * symList[10];
-+};
-+
- #if gcdHAS_ELLIPSES
- #define gcmUSER_DEBUG_MSG(level, ...) \
- do \
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
-index 8693c37..062224c 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
-@@ -39,12 +39,10 @@ extern "C" {
- #define GC_ENABLE_LOADTIME_OPT 1
- #endif
-
--#define TEMP_OPT_CONSTANT_TEXLD_COORD 1
-+#define TEMP_OPT_CONSTANT_TEXLD_COORD 0
-
- #define TEMP_SHADER_PATCH 1
-
--#define ADD_PRE_ROTATION_TO_VS 0
--
- #define TEMP_INLINE_ALL_EXPANSION 1
- /******************************* IR VERSION ******************/
- #define gcdSL_IR_VERSION gcmCC('\0','\0','\0','\1')
-@@ -271,6 +269,7 @@ typedef enum _gcSL_OPCODE
- gcSL_ADDSAT, /* 0x5C */ /* Integer only. */
- gcSL_SUBSAT, /* 0x5D */ /* Integer only. */
- gcSL_MULSAT, /* 0x5E */ /* Integer only. */
-+ gcSL_DP2, /* 0x5F */
- gcSL_MAXOPCODE
- }
- gcSL_OPCODE;
-@@ -474,6 +473,9 @@ struct _gcsHINT
-
- gctBOOL clipW;
-
-+ /* Flag whether or not the shader has a KILL instruction. */
-+ gctBOOL hasKill;
-+
- /* Element count. */
- gctUINT32 elementCount;
-
-@@ -495,12 +497,18 @@ struct _gcsHINT
- /* Balance maximum. */
- gctUINT32 balanceMax;
-
-+ /* Auto-shift balancing. */
-+ gctBOOL autoShift;
-+
- /* Flag whether the PS outputs the depth value or not. */
- gctBOOL psHasFragDepthOut;
-
- /* Flag whether the ThreadWalker is in PS. */
- gctBOOL threadWalkerInPS;
-
-+ /* HW reg number for position of VS */
-+ gctUINT32 hwRegNoOfSIVPos;
-+
- #if gcdALPHA_KILL_IN_SHADER
- /* States to set when alpha kill is enabled. */
- gctUINT32 killStateAddress;
-@@ -687,12 +695,12 @@ typedef enum _gceSHADER_FLAGS
- gcvSHADER_USE_ALPHA_KILL = 0x100,
- #endif
-
--#if ADD_PRE_ROTATION_TO_VS
-+#if gcdPRE_ROTATION && (ANDROID_SDK_VERSION >= 14)
- gcvSHADER_VS_PRE_ROTATION = 0x200,
- #endif
-
- #if TEMP_INLINE_ALL_EXPANSION
-- gcvSHADER_INLINE_ALL_EXPANSION = 0x200,
-+ gcvSHADER_INLINE_ALL_EXPANSION = 0x400,
- #endif
- }
- gceSHADER_FLAGS;
-@@ -827,6 +835,7 @@ typedef struct _gcOPTIMIZER_OPTION
- gctBOOL dumpOptimizerVerbose; /* dump result IR in each optimization phase */
- gctBOOL dumpBEGenertedCode; /* dump generated machine code */
- gctBOOL dumpBEVerbose; /* dump BE tree and optimization detail */
-+ gctBOOL dumpBEFinalIR; /* dump BE final IR */
-
- /* Code generation */
-
-@@ -945,6 +954,8 @@ extern gcOPTIMIZER_OPTION theOptimizerOption;
- gcmOPT_DUMP_CODEGEN_VERBOSE() )
- #define gcmOPT_DUMP_CODEGEN_VERBOSE() \
- (gcmGetOptimizerOption()->dumpBEVerbose != 0)
-+#define gcmOPT_DUMP_FINAL_IR() \
-+ (gcmGetOptimizerOption()->dumpBEFinalIR != 0)
-
- #define gcmOPT_SET_DUMP_SHADER_SRC(v) \
- gcmGetOptimizerOption()->dumpShaderSource = (v)
-@@ -1064,6 +1075,13 @@ typedef struct _gcNPOT_PATCH_PARAM
- gctINT texDimension; /* 2 or 3 */
- }gcNPOT_PATCH_PARAM, *gcNPOT_PATCH_PARAM_PTR;
-
-+typedef struct _gcZBIAS_PATCH_PARAM
-+{
-+ /* Driver uses this to program uniform that designating zbias */
-+ gctINT uniformAddr;
-+ gctINT channel;
-+}gcZBIAS_PATCH_PARAM, *gcZBIAS_PATCH_PARAM_PTR;
-+
- void
- gcGetOptionFromEnv(
- IN OUT gcOPTIMIZER_OPTION * Option
-@@ -1556,6 +1574,43 @@ gcSHADER_AddUniform(
- OUT gcUNIFORM * Uniform
- );
-
-+/*******************************************************************************
-+** gcSHADER_AddPreRotationUniform
-+********************************************************************************
-+**
-+** Add an uniform to a gcSHADER object.
-+**
-+** INPUT:
-+**
-+** gcSHADER Shader
-+** Pointer to a gcSHADER object.
-+**
-+** gctCONST_STRING Name
-+** Name of the uniform to add.
-+**
-+** gcSHADER_TYPE Type
-+** Type of the uniform to add.
-+**
-+** gctSIZE_T Length
-+** Array length of the uniform to add. 'Length' must be at least 1.
-+**
-+** gctINT col
-+** Which uniform.
-+**
-+** OUTPUT:
-+**
-+** gcUNIFORM * Uniform
-+** Pointer to a variable receiving the gcUNIFORM object pointer.
-+*/
-+gceSTATUS
-+gcSHADER_AddPreRotationUniform(
-+ IN gcSHADER Shader,
-+ IN gctCONST_STRING Name,
-+ IN gcSHADER_TYPE Type,
-+ IN gctSIZE_T Length,
-+ IN gctINT col,
-+ OUT gcUNIFORM * Uniform
-+ );
-
- /*******************************************************************************
- ** gcSHADER_AddUniformEx
-@@ -1677,6 +1732,28 @@ gcSHADER_GetUniformCount(
- );
-
- /*******************************************************************************
-+** gcSHADER_GetPreRotationUniform
-+********************************************************************************
-+**
-+** Get the preRotate Uniform.
-+**
-+** INPUT:
-+**
-+** gcSHADER Shader
-+** Pointer to a gcSHADER object.
-+**
-+** OUTPUT:
-+**
-+** gcUNIFORM ** pUniform
-+** Pointer to a preRotation uniforms array.
-+*/
-+gceSTATUS
-+gcSHADER_GetPreRotationUniform(
-+ IN gcSHADER Shader,
-+ OUT gcUNIFORM ** pUniform
-+ );
-+
-+/*******************************************************************************
- ** gcSHADER_GetUniform
- ********************************************************************************
- **
-@@ -3438,6 +3515,34 @@ gcUNIFORM_SetValueF(
- );
-
- /*******************************************************************************
-+** gcUNIFORM_ProgramF
-+**
-+** Set the value of a uniform in floating point.
-+**
-+** INPUT:
-+**
-+** gctUINT32 Address
-+** Address of Uniform.
-+**
-+** gctSIZE_T Row/Col
-+**
-+** const gctFLOAT * Value
-+** Pointer to a buffer holding the floating point values for the
-+** uniform.
-+**
-+** OUTPUT:
-+**
-+** Nothing.
-+*/
-+gceSTATUS
-+gcUNIFORM_ProgramF(
-+ IN gctUINT32 Address,
-+ IN gctSIZE_T Row,
-+ IN gctSIZE_T Col,
-+ IN const gctFLOAT * Value
-+ );
-+
-+/*******************************************************************************
- ** gcUNIFORM_GetModelViewProjMatrix
- ********************************************************************************
- **
-@@ -3912,6 +4017,23 @@ gcRecompileShaders(
- IN gctUINT32 *SamplerWrapS,
- IN gctUINT32 *SamplerWrapT
- );
-+
-+gceSTATUS
-+gcRecompileDepthBias(
-+ IN gcoHAL Hal,
-+ IN gcMACHINECODE_PTR pVsMachineCode,
-+ /*Recompile variables*/
-+ IN OUT gctPOINTER *ppRecompileStateBuffer,
-+ IN OUT gctSIZE_T *pRecompileStateBufferSize,
-+ IN OUT gcsHINT_PTR *ppRecompileHints,
-+ /* natvie state*/
-+ IN gctPOINTER pNativeStateBuffer,
-+ IN gctSIZE_T nativeStateBufferSize,
-+ IN gcsHINT_PTR pNativeHints,
-+ OUT gctINT * uniformAddr,
-+ OUT gctINT * uniformChannel
-+ );
-+
- /*******************************************************************************
- ** gcSaveProgram
- ********************************************************************************
-@@ -4138,6 +4260,16 @@ gcSHADER_PatchNPOTForMachineCode(
- IN OUT gcsHINT_PTR pHints /* User needs copy original hints to this one, then passed this one in */
- );
-
-+gceSTATUS
-+gcSHADER_PatchZBiasForMachineCodeVS(
-+ IN gcMACHINECODE_PTR pMachineCode,
-+ IN OUT gcZBIAS_PATCH_PARAM_PTR pPatchParam,
-+ IN gctUINT hwSupportedInstCount,
-+ OUT gctPOINTER* ppCmdBuffer,
-+ OUT gctUINT32* pByteSizeOfCmdBuffer,
-+ IN OUT gcsHINT_PTR pHints /* User needs copy original hints to this one, then passed this one in */
-+ );
-+
- #ifdef __cplusplus
- }
- #endif
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
-index b056c52..fc8c395 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
-@@ -166,6 +166,12 @@ typedef enum _gceHAL_COMMAND_CODES
-
- /* Reset time stamp. */
- gcvHAL_QUERY_RESET_TIME_STAMP,
-+
-+ /* Sync point operations. */
-+ gcvHAL_SYNC_POINT,
-+
-+ /* Create native fence and return its fd. */
-+ gcvHAL_CREATE_NATIVE_FENCE,
- }
- gceHAL_COMMAND_CODES;
-
-@@ -723,6 +729,10 @@ typedef struct _gcsHAL_INTERFACE
- /* gcvHAL_READ_ALL_PROFILE_REGISTERS */
- struct _gcsHAL_READ_ALL_PROFILE_REGISTERS
- {
-+#if VIVANTE_PROFILER_CONTEXT
-+ /* Context buffer object gckCONTEXT. Just a name. */
-+ IN gctUINT32 context;
-+#endif
- /* Data read. */
- OUT gcsPROFILER_COUNTERS counters;
- }
-@@ -978,6 +988,33 @@ typedef struct _gcsHAL_INTERFACE
- OUT gctUINT64 timeStamp;
- }
- QueryResetTimeStamp;
-+
-+ struct _gcsHAL_SYNC_POINT
-+ {
-+ /* Command. */
-+ gceSYNC_POINT_COMMAND_CODES command;
-+
-+ /* Sync point. */
-+ IN OUT gctUINT64 syncPoint;
-+
-+ /* From where. */
-+ IN gceKERNEL_WHERE fromWhere;
-+
-+ /* Signaled state. */
-+ OUT gctBOOL state;
-+ }
-+ SyncPoint;
-+
-+ struct _gcsHAL_CREATE_NATIVE_FENCE
-+ {
-+ /* Signal id to dup. */
-+ IN gctUINT64 syncPoint;
-+
-+ /* Native fence file descriptor. */
-+ OUT gctINT fenceFD;
-+
-+ }
-+ CreateNativeFence;
- }
- u;
- }
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
-index 8481375..3fb2fe4 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
-@@ -323,6 +323,15 @@ gcoSURF_Resolve(
- IN gcoSURF DestSurface
- );
-
-+gceSTATUS
-+gcoSURF_IsHWResolveable(
-+ IN gcoSURF SrcSurface,
-+ IN gcoSURF DestSurface,
-+ IN gcsPOINT_PTR SrcOrigin,
-+ IN gcsPOINT_PTR DestOrigin,
-+ IN gcsPOINT_PTR RectSize
-+ );
-+
- /* Resolve rectangular area of a surface. */
- gceSTATUS
- gcoSURF_ResolveRect(
-@@ -345,6 +354,11 @@ gcoSURF_IsRenderable(
- IN gcoSURF Surface
- );
-
-+gceSTATUS
-+gcoSURF_IsFormatRenderableAsRT(
-+ IN gcoSURF Surface
-+ );
-+
- #if gcdSYNC
- gceSTATUS
- gcoSURF_GetFence(
-@@ -1006,6 +1020,7 @@ typedef struct _gcsALPHA_INFO
- gctBOOL test;
- gceCOMPARE compare;
- gctUINT8 reference;
-+ gctFLOAT floatReference;
-
- /* Alpha blending states. */
- gctBOOL blend;
-@@ -1040,7 +1055,8 @@ gco3D_SetAlphaCompare(
- gceSTATUS
- gco3D_SetAlphaReference(
- IN gco3D Engine,
-- IN gctUINT8 Reference
-+ IN gctUINT8 Reference,
-+ IN gctFLOAT FloatReference
- );
-
- /* Set alpha test reference in fixed point. */
-@@ -1504,6 +1520,19 @@ gcoTEXTURE_UploadSub(
- IN gceSURF_FORMAT Format
- );
-
-+/* Upload YUV data to an gcoTEXTURE object. */
-+gceSTATUS
-+gcoTEXTURE_UploadYUV(
-+ IN gcoTEXTURE Texture,
-+ IN gceTEXTURE_FACE Face,
-+ IN gctUINT Width,
-+ IN gctUINT Height,
-+ IN gctUINT Slice,
-+ IN gctPOINTER Memory[3],
-+ IN gctINT Stride[3],
-+ IN gceSURF_FORMAT Format
-+ );
-+
- /* Upload compressed data to an gcoTEXTURE object. */
- gceSTATUS
- gcoTEXTURE_UploadCompressed(
-@@ -1621,6 +1650,13 @@ gcoTEXTURE_QueryCaps(
- );
-
- gceSTATUS
-+gcoTEXTURE_GetTiling(
-+ IN gcoTEXTURE Texture,
-+ IN gctINT preferLevel,
-+ OUT gceTILING * Tiling
-+ );
-+
-+gceSTATUS
- gcoTEXTURE_GetClosestFormat(
- IN gcoHAL Hal,
- IN gceSURF_FORMAT InFormat,
-@@ -2001,6 +2037,14 @@ gcoHAL_SetSharedInfo(
- IN gctSIZE_T Bytes
- );
-
-+#if VIVANTE_PROFILER_CONTEXT
-+gceSTATUS
-+gcoHARDWARE_GetContext(
-+ IN gcoHARDWARE Hardware,
-+ OUT gctUINT32 * Context
-+ );
-+#endif
-+
- #ifdef __cplusplus
- }
- #endif
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
-index a1d9ae5..8e3c2f8 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
-@@ -146,10 +146,26 @@ typedef enum _gceFEATURE
- gcvFEATURE_FRUSTUM_CLIP_FIX,
- gcvFEATURE_TEXTURE_LINEAR,
- gcvFEATURE_TEXTURE_YUV_ASSEMBLER,
-+ gcvFEATURE_SHADER_HAS_INSTRUCTION_CACHE,
- gcvFEATURE_DYNAMIC_FREQUENCY_SCALING,
- gcvFEATURE_BUGFIX15,
-+ gcvFEATURE_2D_GAMMA,
-+ gcvFEATURE_2D_COLOR_SPACE_CONVERSION,
-+ gcvFEATURE_2D_SUPER_TILE_VERSION,
- gcvFEATURE_2D_MIRROR_EXTENSION,
-+ gcvFEATURE_2D_SUPER_TILE_V1,
-+ gcvFEATURE_2D_SUPER_TILE_V2,
-+ gcvFEATURE_2D_SUPER_TILE_V3,
-+ gcvFEATURE_2D_MULTI_SOURCE_BLT_EX2,
- gcvFEATURE_ELEMENT_INDEX_UINT,
-+ gcvFEATURE_2D_COMPRESSION,
-+ gcvFEATURE_2D_OPF_YUV_OUTPUT,
-+ gcvFEATURE_2D_MULTI_SRC_BLT_TO_UNIFIED_DST_RECT,
-+ gcvFEATURE_2D_YUV_MODE,
-+ gcvFEATURE_DECOMPRESS_Z16,
-+ gcvFEATURE_LINEAR_RENDER_TARGET,
-+ gcvFEATURE_BUG_FIXES8,
-+ gcvFEATURE_HALTI2,
- }
- gceFEATURE;
-
-@@ -203,11 +219,14 @@ typedef enum _gceSURF_TYPE
- gcvSURF_NO_VIDMEM = 0x200, /* Used to allocate surfaces with no underlying vidmem node.
- In Android, vidmem node is allocated by another process. */
- gcvSURF_CACHEABLE = 0x400, /* Used to allocate a cacheable surface */
--#if gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
- gcvSURF_FLIP = 0x800, /* The Resolve Target the will been flip resolve from RT */
--#endif
- gcvSURF_TILE_STATUS_DIRTY = 0x1000, /* Init tile status to all dirty */
-
-+ gcvSURF_LINEAR = 0x2000,
-+
-+ gcvSURF_TEXTURE_LINEAR = gcvSURF_TEXTURE
-+ | gcvSURF_LINEAR,
-+
- gcvSURF_RENDER_TARGET_NO_TILE_STATUS = gcvSURF_RENDER_TARGET
- | gcvSURF_NO_TILE_STATUS,
-
-@@ -217,6 +236,9 @@ typedef enum _gceSURF_TYPE
- gcvSURF_DEPTH_NO_TILE_STATUS = gcvSURF_DEPTH
- | gcvSURF_NO_TILE_STATUS,
-
-+ gcvSURF_DEPTH_TS_DIRTY = gcvSURF_DEPTH
-+ | gcvSURF_TILE_STATUS_DIRTY,
-+
- /* Supported surface types with no vidmem node. */
- gcvSURF_BITMAP_NO_VIDMEM = gcvSURF_BITMAP
- | gcvSURF_NO_VIDMEM,
-@@ -231,10 +253,8 @@ typedef enum _gceSURF_TYPE
- gcvSURF_CACHEABLE_BITMAP = gcvSURF_BITMAP
- | gcvSURF_CACHEABLE,
-
--#if gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
- gcvSURF_FLIP_BITMAP = gcvSURF_BITMAP
- | gcvSURF_FLIP,
--#endif
- }
- gceSURF_TYPE;
-
-@@ -263,6 +283,9 @@ typedef enum _gceSURF_ROTATION
- gcvSURF_270_DEGREE,
- gcvSURF_FLIP_X,
- gcvSURF_FLIP_Y,
-+
-+ gcvSURF_POST_FLIP_X = 0x40000000,
-+ gcvSURF_POST_FLIP_Y = 0x80000000,
- }
- gceSURF_ROTATION;
-
-@@ -622,21 +645,16 @@ gce2D_PORTER_DUFF_RULE;
- typedef enum _gce2D_YUV_COLOR_MODE
- {
- gcv2D_YUV_601= 0,
-- gcv2D_YUV_709
--}
--gce2D_YUV_COLOR_MODE;
-+ gcv2D_YUV_709,
-+ gcv2D_YUV_USER_DEFINED,
-+ gcv2D_YUV_USER_DEFINED_CLAMP,
-
--/* 2D Rotation and flipping. */
--typedef enum _gce2D_ORIENTATION
--{
-- gcv2D_0_DEGREE = 0,
-- gcv2D_90_DEGREE,
-- gcv2D_180_DEGREE,
-- gcv2D_270_DEGREE,
-- gcv2D_X_FLIP,
-- gcv2D_Y_FLIP
-+ /* Default setting is for src. gcv2D_YUV_DST
-+ can be ORed to set dst.
-+ */
-+ gcv2D_YUV_DST = 0x80000000,
- }
--gce2D_ORIENTATION;
-+gce2D_YUV_COLOR_MODE;
-
- typedef enum _gce2D_COMMAND
- {
-@@ -656,21 +674,39 @@ typedef enum _gce2D_TILE_STATUS_CONFIG
- gcv2D_TSC_ENABLE = 0x00000001,
- gcv2D_TSC_COMPRESSED = 0x00000002,
- gcv2D_TSC_DOWN_SAMPLER = 0x00000004,
-+ gcv2D_TSC_2D_COMPRESSED = 0x00000008,
- }
- gce2D_TILE_STATUS_CONFIG;
-
- typedef enum _gce2D_QUERY
- {
-- gcv2D_QUERY_RGB_ADDRESS_MAX_ALIGN = 0,
-- gcv2D_QUERY_RGB_STRIDE_MAX_ALIGN,
-- gcv2D_QUERY_YUV_ADDRESS_MAX_ALIGN,
-- gcv2D_QUERY_YUV_STRIDE_MAX_ALIGN,
-+ gcv2D_QUERY_RGB_ADDRESS_MIN_ALIGN = 0,
-+ gcv2D_QUERY_RGB_STRIDE_MIN_ALIGN,
-+ gcv2D_QUERY_YUV_ADDRESS_MIN_ALIGN,
-+ gcv2D_QUERY_YUV_STRIDE_MIN_ALIGN,
- }
- gce2D_QUERY;
-
-+typedef enum _gce2D_SUPER_TILE_VERSION
-+{
-+ gcv2D_SUPER_TILE_VERSION_V1 = 1,
-+ gcv2D_SUPER_TILE_VERSION_V2 = 2,
-+ gcv2D_SUPER_TILE_VERSION_V3 = 3,
-+}
-+gce2D_SUPER_TILE_VERSION;
-+
- typedef enum _gce2D_STATE
- {
- gcv2D_STATE_SPECIAL_FILTER_MIRROR_MODE = 1,
-+ gcv2D_STATE_SUPER_TILE_VERSION,
-+ gcv2D_STATE_EN_GAMMA,
-+ gcv2D_STATE_DE_GAMMA,
-+ gcv2D_STATE_MULTI_SRC_BLIT_UNIFIED_DST_RECT,
-+
-+ gcv2D_STATE_ARRAY_EN_GAMMA = 0x10001,
-+ gcv2D_STATE_ARRAY_DE_GAMMA,
-+ gcv2D_STATE_ARRAY_CSC_YUV_TO_RGB,
-+ gcv2D_STATE_ARRAY_CSC_RGB_TO_YUV,
- }
- gce2D_STATE;
-
-@@ -809,6 +845,15 @@ typedef enum _gceUSER_SIGNAL_COMMAND_CODES
- }
- gceUSER_SIGNAL_COMMAND_CODES;
-
-+/* Sync point command codes. */
-+typedef enum _gceSYNC_POINT_COMMAND_CODES
-+{
-+ gcvSYNC_POINT_CREATE,
-+ gcvSYNC_POINT_DESTROY,
-+ gcvSYNC_POINT_SIGNAL,
-+}
-+gceSYNC_POINT_COMMAND_CODES;
-+
- /* Event locations. */
- typedef enum _gceKERNEL_WHERE
- {
-@@ -848,6 +893,44 @@ typedef enum _gceDEBUG_MESSAGE_TYPE
- }
- gceDEBUG_MESSAGE_TYPE;
-
-+typedef enum _gceSPECIAL_HINT
-+{
-+ gceSPECIAL_HINT0,
-+ gceSPECIAL_HINT1,
-+ gceSPECIAL_HINT2,
-+ gceSPECIAL_HINT3,
-+ /* For disable dynamic stream/index */
-+ gceSPECIAL_HINT4
-+}
-+gceSPECIAL_HINT;
-+
-+typedef enum _gceMACHINECODE
-+{
-+ gcvMACHINECODE_HOVERJET0 = 0x0,
-+ gcvMACHINECODE_HOVERJET1 ,
-+
-+ gcvMACHINECODE_TAIJI0 ,
-+ gcvMACHINECODE_TAIJI1 ,
-+ gcvMACHINECODE_TAIJI2 ,
-+
-+ gcvMACHINECODE_ANTUTU0 ,
-+
-+ gcvMACHINECODE_GLB27_RELEASE_0,
-+ gcvMACHINECODE_GLB27_RELEASE_1,
-+
-+ gcvMACHINECODE_WAVESCAPE0 ,
-+ gcvMACHINECODE_WAVESCAPE1 ,
-+
-+ gcvMACHINECODE_NENAMARKV2_4_0 ,
-+ gcvMACHINECODE_NENAMARKV2_4_1 ,
-+
-+ gcvMACHINECODE_GLB25_RELEASE_0,
-+ gcvMACHINECODE_GLB25_RELEASE_1,
-+ gcvMACHINECODE_GLB25_RELEASE_2,
-+}
-+gceMACHINECODE;
-+
-+
- /******************************************************************************\
- ****************************** Object Declarations *****************************
- \******************************************************************************/
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
-index 9e2a8db..b53b618 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
-@@ -46,7 +46,7 @@
- This define enables the profiler.
- */
- #ifndef VIVANTE_PROFILER
--# define VIVANTE_PROFILER 0
-+# define VIVANTE_PROFILER 1
- #endif
-
- #ifndef VIVANTE_PROFILER_PERDRAW
-@@ -54,6 +54,15 @@
- #endif
-
- /*
-+ VIVANTE_PROFILER_CONTEXT
-+
-+ This define enables the profiler according to each hw context.
-+*/
-+#ifndef VIVANTE_PROFILER_CONTEXT
-+# define VIVANTE_PROFILER_CONTEXT 1
-+#endif
-+
-+/*
- gcdUSE_VG
-
- Enable VG HAL layer (only for GC350).
-@@ -729,7 +738,24 @@
- Use linear buffer for GPU apps so HWC can do 2D composition.
- */
- #ifndef gcdGPU_LINEAR_BUFFER_ENABLED
--# define gcdGPU_LINEAR_BUFFER_ENABLED 0
-+# define gcdGPU_LINEAR_BUFFER_ENABLED 1
-+#endif
-+
-+/*
-+ gcdENABLE_RENDER_INTO_WINDOW
-+
-+ Enable Render-Into-Window (ie, No-Resolve) feature on android.
-+ NOTE that even if enabled, it still depends on hardware feature and
-+ android application behavior. When hardware feature or application
-+ behavior can not support render into window mode, it will fail back
-+ to normal mode.
-+ When Render-Into-Window is finally used, window back buffer of android
-+ applications will be allocated matching render target tiling format.
-+ Otherwise buffer tiling is decided by the above option
-+ 'gcdGPU_LINEAR_BUFFER_ENABLED'.
-+*/
-+#ifndef gcdENABLE_RENDER_INTO_WINDOW
-+# define gcdENABLE_RENDER_INTO_WINDOW 1
- #endif
-
- /*
-@@ -758,7 +784,11 @@
- #endif
-
- #ifndef gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
--# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 0
-+# ifdef ANDROID
-+# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 1
-+# else
-+# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 0
-+# endif
- #endif
-
- #ifndef gcdENABLE_PE_DITHER_FIX
-@@ -800,6 +830,10 @@
- # define gcdDISALBE_EARLY_EARLY_Z 1
- #endif
-
-+#ifndef gcdSHADER_SRC_BY_MACHINECODE
-+# define gcdSHADER_SRC_BY_MACHINECODE 1
-+#endif
-+
- /*
- gcdLINK_QUEUE_SIZE
-
-@@ -849,11 +883,20 @@
- #define gcdUSE_NPOT_PATCH 1
- #endif
-
--
- #ifndef gcdSYNC
- # define gcdSYNC 1
- #endif
-
-+#ifndef gcdENABLE_SPECIAL_HINT3
-+# define gcdENABLE_SPECIAL_HINT3 1
-+#endif
-+
-+#if defined(ANDROID)
-+#ifndef gcdPRE_ROTATION
-+# define gcdPRE_ROTATION 1
-+#endif
-+#endif
-+
- /*
- gcdDVFS
-
-@@ -866,4 +909,39 @@
- # define gcdDVFS_POLLING_TIME (gcdDVFS_ANAYLSE_WINDOW * 4)
- #endif
-
-+/*
-+ gcdANDROID_NATIVE_FENCE_SYNC
-+
-+ Enable android native fence sync. It is introduced since jellybean-4.2.
-+ Depends on linux kernel option: CONFIG_SYNC.
-+
-+ 0: Disabled
-+ 1: Build framework for native fence sync feature, and EGL extension
-+ 2: Enable async swap buffers for client
-+ * Native fence sync for client 'queueBuffer' in EGL, which is
-+ 'acquireFenceFd' for layer in compositor side.
-+ 3. Enable async hwcomposer composition.
-+ * 'releaseFenceFd' for layer in compositor side, which is native
-+ fence sync when client 'dequeueBuffer'
-+ * Native fence sync for compositor 'queueBuffer' in EGL, which is
-+ 'acquireFenceFd' for framebuffer target for DC
-+ */
-+#ifndef gcdANDROID_NATIVE_FENCE_SYNC
-+# define gcdANDROID_NATIVE_FENCE_SYNC 0
-+#endif
-+
-+#ifndef gcdFORCE_MIPMAP
-+# define gcdFORCE_MIPMAP 0
-+#endif
-+
-+/*
-+ gcdFORCE_GAL_LOAD_TWICE
-+
-+ When non-zero, each thread except the main one will load libGAL.so twice to avoid potential segmetantion fault when app using dlopen/dlclose.
-+ If threads exit arbitrarily, libGAL.so may not unload until the process quit.
-+ */
-+#ifndef gcdFORCE_GAL_LOAD_TWICE
-+# define gcdFORCE_GAL_LOAD_TWICE 0
-+#endif
-+
- #endif /* __gc_hal_options_h_ */
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
-index 3e450ba..aed73aa 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
-@@ -45,509 +45,115 @@ extern "C" {
- #define gcdNEW_PROFILER_FILE 1
- #endif
-
--/* OpenGL ES11 API IDs. */
--#define ES11_ACTIVETEXTURE 1
--#define ES11_ALPHAFUNC (ES11_ACTIVETEXTURE + 1)
--#define ES11_ALPHAFUNCX (ES11_ALPHAFUNC + 1)
--#define ES11_BINDBUFFER (ES11_ALPHAFUNCX + 1)
--#define ES11_BINDTEXTURE (ES11_BINDBUFFER + 1)
--#define ES11_BLENDFUNC (ES11_BINDTEXTURE + 1)
--#define ES11_BUFFERDATA (ES11_BLENDFUNC + 1)
--#define ES11_BUFFERSUBDATA (ES11_BUFFERDATA + 1)
--#define ES11_CLEAR (ES11_BUFFERSUBDATA + 1)
--#define ES11_CLEARCOLOR (ES11_CLEAR + 1)
--#define ES11_CLEARCOLORX (ES11_CLEARCOLOR + 1)
--#define ES11_CLEARDEPTHF (ES11_CLEARCOLORX + 1)
--#define ES11_CLEARDEPTHX (ES11_CLEARDEPTHF + 1)
--#define ES11_CLEARSTENCIL (ES11_CLEARDEPTHX + 1)
--#define ES11_CLIENTACTIVETEXTURE (ES11_CLEARSTENCIL + 1)
--#define ES11_CLIPPLANEF (ES11_CLIENTACTIVETEXTURE + 1)
--#define ES11_CLIPPLANEX (ES11_CLIPPLANEF + 1)
--#define ES11_COLOR4F (ES11_CLIPPLANEX + 1)
--#define ES11_COLOR4UB (ES11_COLOR4F + 1)
--#define ES11_COLOR4X (ES11_COLOR4UB + 1)
--#define ES11_COLORMASK (ES11_COLOR4X + 1)
--#define ES11_COLORPOINTER (ES11_COLORMASK + 1)
--#define ES11_COMPRESSEDTEXIMAGE2D (ES11_COLORPOINTER + 1)
--#define ES11_COMPRESSEDTEXSUBIMAGE2D (ES11_COMPRESSEDTEXIMAGE2D + 1)
--#define ES11_COPYTEXIMAGE2D (ES11_COMPRESSEDTEXSUBIMAGE2D + 1)
--#define ES11_COPYTEXSUBIMAGE2D (ES11_COPYTEXIMAGE2D + 1)
--#define ES11_CULLFACE (ES11_COPYTEXSUBIMAGE2D + 1)
--#define ES11_DELETEBUFFERS (ES11_CULLFACE + 1)
--#define ES11_DELETETEXTURES (ES11_DELETEBUFFERS + 1)
--#define ES11_DEPTHFUNC (ES11_DELETETEXTURES + 1)
--#define ES11_DEPTHMASK (ES11_DEPTHFUNC + 1)
--#define ES11_DEPTHRANGEF (ES11_DEPTHMASK + 1)
--#define ES11_DEPTHRANGEX (ES11_DEPTHRANGEF + 1)
--#define ES11_DISABLE (ES11_DEPTHRANGEX + 1)
--#define ES11_DISABLECLIENTSTATE (ES11_DISABLE + 1)
--#define ES11_DRAWARRAYS (ES11_DISABLECLIENTSTATE + 1)
--#define ES11_DRAWELEMENTS (ES11_DRAWARRAYS + 1)
--#define ES11_ENABLE (ES11_DRAWELEMENTS + 1)
--#define ES11_ENABLECLIENTSTATE (ES11_ENABLE + 1)
--#define ES11_FINISH (ES11_ENABLECLIENTSTATE + 1)
--#define ES11_FLUSH (ES11_FINISH + 1)
--#define ES11_FOGF (ES11_FLUSH + 1)
--#define ES11_FOGFV (ES11_FOGF + 1)
--#define ES11_FOGX (ES11_FOGFV + 1)
--#define ES11_FOGXV (ES11_FOGX + 1)
--#define ES11_FRONTFACE (ES11_FOGXV + 1)
--#define ES11_FRUSTUMF (ES11_FRONTFACE + 1)
--#define ES11_FRUSTUMX (ES11_FRUSTUMF + 1)
--#define ES11_GENBUFFERS (ES11_FRUSTUMX + 1)
--#define ES11_GENTEXTURES (ES11_GENBUFFERS + 1)
--#define ES11_GETBOOLEANV (ES11_GENTEXTURES + 1)
--#define ES11_GETBUFFERPARAMETERIV (ES11_GETBOOLEANV + 1)
--#define ES11_GETCLIPPLANEF (ES11_GETBUFFERPARAMETERIV + 1)
--#define ES11_GETCLIPPLANEX (ES11_GETCLIPPLANEF + 1)
--#define ES11_GETERROR (ES11_GETCLIPPLANEX + 1)
--#define ES11_GETFIXEDV (ES11_GETERROR + 1)
--#define ES11_GETFLOATV (ES11_GETFIXEDV + 1)
--#define ES11_GETINTEGERV (ES11_GETFLOATV + 1)
--#define ES11_GETLIGHTFV (ES11_GETINTEGERV + 1)
--#define ES11_GETLIGHTXV (ES11_GETLIGHTFV + 1)
--#define ES11_GETMATERIALFV (ES11_GETLIGHTXV + 1)
--#define ES11_GETMATERIALXV (ES11_GETMATERIALFV + 1)
--#define ES11_GETPOINTERV (ES11_GETMATERIALXV + 1)
--#define ES11_GETSTRING (ES11_GETPOINTERV + 1)
--#define ES11_GETTEXENVFV (ES11_GETSTRING + 1)
--#define ES11_GETTEXENVIV (ES11_GETTEXENVFV + 1)
--#define ES11_GETTEXENVXV (ES11_GETTEXENVIV + 1)
--#define ES11_GETTEXPARAMETERFV (ES11_GETTEXENVXV + 1)
--#define ES11_GETTEXPARAMETERIV (ES11_GETTEXPARAMETERFV + 1)
--#define ES11_GETTEXPARAMETERXV (ES11_GETTEXPARAMETERIV + 1)
--#define ES11_HINT (ES11_GETTEXPARAMETERXV + 1)
--#define ES11_ISBUFFER (ES11_HINT + 1)
--#define ES11_ISENABLED (ES11_ISBUFFER + 1)
--#define ES11_ISTEXTURE (ES11_ISENABLED + 1)
--#define ES11_LIGHTF (ES11_ISTEXTURE + 1)
--#define ES11_LIGHTFV (ES11_LIGHTF + 1)
--#define ES11_LIGHTMODELF (ES11_LIGHTFV + 1)
--#define ES11_LIGHTMODELFV (ES11_LIGHTMODELF + 1)
--#define ES11_LIGHTMODELX (ES11_LIGHTMODELFV + 1)
--#define ES11_LIGHTMODELXV (ES11_LIGHTMODELX + 1)
--#define ES11_LIGHTX (ES11_LIGHTMODELXV + 1)
--#define ES11_LIGHTXV (ES11_LIGHTX + 1)
--#define ES11_LINEWIDTH (ES11_LIGHTXV + 1)
--#define ES11_LINEWIDTHX (ES11_LINEWIDTH + 1)
--#define ES11_LOADIDENTITY (ES11_LINEWIDTHX + 1)
--#define ES11_LOADMATRIXF (ES11_LOADIDENTITY + 1)
--#define ES11_LOADMATRIXX (ES11_LOADMATRIXF + 1)
--#define ES11_LOGICOP (ES11_LOADMATRIXX + 1)
--#define ES11_MATERIALF (ES11_LOGICOP + 1)
--#define ES11_MATERIALFV (ES11_MATERIALF + 1)
--#define ES11_MATERIALX (ES11_MATERIALFV + 1)
--#define ES11_MATERIALXV (ES11_MATERIALX + 1)
--#define ES11_MATRIXMODE (ES11_MATERIALXV + 1)
--#define ES11_MULTITEXCOORD4F (ES11_MATRIXMODE + 1)
--#define ES11_MULTITEXCOORD4X (ES11_MULTITEXCOORD4F + 1)
--#define ES11_MULTMATRIXF (ES11_MULTITEXCOORD4X + 1)
--#define ES11_MULTMATRIXX (ES11_MULTMATRIXF + 1)
--#define ES11_NORMAL3F (ES11_MULTMATRIXX + 1)
--#define ES11_NORMAL3X (ES11_NORMAL3F + 1)
--#define ES11_NORMALPOINTER (ES11_NORMAL3X + 1)
--#define ES11_ORTHOF (ES11_NORMALPOINTER + 1)
--#define ES11_ORTHOX (ES11_ORTHOF + 1)
--#define ES11_PIXELSTOREI (ES11_ORTHOX + 1)
--#define ES11_POINTPARAMETERF (ES11_PIXELSTOREI + 1)
--#define ES11_POINTPARAMETERFV (ES11_POINTPARAMETERF + 1)
--#define ES11_POINTPARAMETERX (ES11_POINTPARAMETERFV + 1)
--#define ES11_POINTPARAMETERXV (ES11_POINTPARAMETERX + 1)
--#define ES11_POINTSIZE (ES11_POINTPARAMETERXV + 1)
--#define ES11_POINTSIZEX (ES11_POINTSIZE + 1)
--#define ES11_POLYGONOFFSET (ES11_POINTSIZEX + 1)
--#define ES11_POLYGONOFFSETX (ES11_POLYGONOFFSET + 1)
--#define ES11_POPMATRIX (ES11_POLYGONOFFSETX + 1)
--#define ES11_PUSHMATRIX (ES11_POPMATRIX + 1)
--#define ES11_READPIXELS (ES11_PUSHMATRIX + 1)
--#define ES11_ROTATEF (ES11_READPIXELS + 1)
--#define ES11_ROTATEX (ES11_ROTATEF + 1)
--#define ES11_SAMPLECOVERAGE (ES11_ROTATEX + 1)
--#define ES11_SAMPLECOVERAGEX (ES11_SAMPLECOVERAGE + 1)
--#define ES11_SCALEF (ES11_SAMPLECOVERAGEX + 1)
--#define ES11_SCALEX (ES11_SCALEF + 1)
--#define ES11_SCISSOR (ES11_SCALEX + 1)
--#define ES11_SHADEMODEL (ES11_SCISSOR + 1)
--#define ES11_STENCILFUNC (ES11_SHADEMODEL + 1)
--#define ES11_STENCILMASK (ES11_STENCILFUNC + 1)
--#define ES11_STENCILOP (ES11_STENCILMASK + 1)
--#define ES11_TEXCOORDPOINTER (ES11_STENCILOP + 1)
--#define ES11_TEXENVF (ES11_TEXCOORDPOINTER + 1)
--#define ES11_TEXENVFV (ES11_TEXENVF + 1)
--#define ES11_TEXENVI (ES11_TEXENVFV + 1)
--#define ES11_TEXENVIV (ES11_TEXENVI + 1)
--#define ES11_TEXENVX (ES11_TEXENVIV + 1)
--#define ES11_TEXENVXV (ES11_TEXENVX + 1)
--#define ES11_TEXIMAGE2D (ES11_TEXENVXV + 1)
--#define ES11_TEXPARAMETERF (ES11_TEXIMAGE2D + 1)
--#define ES11_TEXPARAMETERFV (ES11_TEXPARAMETERF + 1)
--#define ES11_TEXPARAMETERI (ES11_TEXPARAMETERFV + 1)
--#define ES11_TEXPARAMETERIV (ES11_TEXPARAMETERI + 1)
--#define ES11_TEXPARAMETERX (ES11_TEXPARAMETERIV + 1)
--#define ES11_TEXPARAMETERXV (ES11_TEXPARAMETERX + 1)
--#define ES11_TEXSUBIMAGE2D (ES11_TEXPARAMETERXV + 1)
--#define ES11_TRANSLATEF (ES11_TEXSUBIMAGE2D + 1)
--#define ES11_TRANSLATEX (ES11_TRANSLATEF + 1)
--#define ES11_VERTEXPOINTER (ES11_TRANSLATEX + 1)
--#define ES11_VIEWPORT (ES11_VERTEXPOINTER + 1)
--#define ES11_BLENDEQUATIONOES (ES11_VIEWPORT + 1)
--#define ES11_BLENDFUNCSEPERATEOES (ES11_BLENDEQUATIONOES + 1)
--#define ES11_BLENDEQUATIONSEPARATEOES (ES11_BLENDFUNCSEPERATEOES + 1)
--#define ES11_GLMAPBUFFEROES (ES11_BLENDEQUATIONSEPARATEOES + 1)
--#define ES11_GLUNMAPBUFFEROES (ES11_GLMAPBUFFEROES + 1)
--#define ES11_GLGETBUFFERPOINTERVOES (ES11_GLUNMAPBUFFEROES + 1)
--#define ES11_CALLS (ES11_GLGETBUFFERPOINTERVOES + 1)
--#define ES11_DRAWCALLS (ES11_CALLS + 1)
--#define ES11_STATECHANGECALLS (ES11_DRAWCALLS + 1)
--#define ES11_POINTCOUNT (ES11_STATECHANGECALLS + 1)
--#define ES11_LINECOUNT (ES11_POINTCOUNT + 1)
--#define ES11_TRIANGLECOUNT (ES11_LINECOUNT + 1)
--
--/* OpenGL ES2X API IDs. */
--#define ES20_ACTIVETEXTURE 1
--#define ES20_ATTACHSHADER (ES20_ACTIVETEXTURE + 1)
--#define ES20_BINDATTRIBLOCATION (ES20_ATTACHSHADER + 1)
--#define ES20_BINDBUFFER (ES20_BINDATTRIBLOCATION + 1)
--#define ES20_BINDFRAMEBUFFER (ES20_BINDBUFFER + 1)
--#define ES20_BINDRENDERBUFFER (ES20_BINDFRAMEBUFFER + 1)
--#define ES20_BINDTEXTURE (ES20_BINDRENDERBUFFER + 1)
--#define ES20_BLENDCOLOR (ES20_BINDTEXTURE + 1)
--#define ES20_BLENDEQUATION (ES20_BLENDCOLOR + 1)
--#define ES20_BLENDEQUATIONSEPARATE (ES20_BLENDEQUATION + 1)
--#define ES20_BLENDFUNC (ES20_BLENDEQUATIONSEPARATE + 1)
--#define ES20_BLENDFUNCSEPARATE (ES20_BLENDFUNC + 1)
--#define ES20_BUFFERDATA (ES20_BLENDFUNCSEPARATE + 1)
--#define ES20_BUFFERSUBDATA (ES20_BUFFERDATA + 1)
--#define ES20_CHECKFRAMEBUFFERSTATUS (ES20_BUFFERSUBDATA + 1)
--#define ES20_CLEAR (ES20_CHECKFRAMEBUFFERSTATUS + 1)
--#define ES20_CLEARCOLOR (ES20_CLEAR + 1)
--#define ES20_CLEARDEPTHF (ES20_CLEARCOLOR + 1)
--#define ES20_CLEARSTENCIL (ES20_CLEARDEPTHF + 1)
--#define ES20_COLORMASK (ES20_CLEARSTENCIL + 1)
--#define ES20_COMPILESHADER (ES20_COLORMASK + 1)
--#define ES20_COMPRESSEDTEXIMAGE2D (ES20_COMPILESHADER + 1)
--#define ES20_COMPRESSEDTEXSUBIMAGE2D (ES20_COMPRESSEDTEXIMAGE2D + 1)
--#define ES20_COPYTEXIMAGE2D (ES20_COMPRESSEDTEXSUBIMAGE2D + 1)
--#define ES20_COPYTEXSUBIMAGE2D (ES20_COPYTEXIMAGE2D + 1)
--#define ES20_CREATEPROGRAM (ES20_COPYTEXSUBIMAGE2D + 1)
--#define ES20_CREATESHADER (ES20_CREATEPROGRAM + 1)
--#define ES20_CULLFACE (ES20_CREATESHADER + 1)
--#define ES20_DELETEBUFFERS (ES20_CULLFACE + 1)
--#define ES20_DELETEFRAMEBUFFERS (ES20_DELETEBUFFERS + 1)
--#define ES20_DELETEPROGRAM (ES20_DELETEFRAMEBUFFERS + 1)
--#define ES20_DELETERENDERBUFFERS (ES20_DELETEPROGRAM + 1)
--#define ES20_DELETESHADER (ES20_DELETERENDERBUFFERS + 1)
--#define ES20_DELETETEXTURES (ES20_DELETESHADER + 1)
--#define ES20_DEPTHFUNC (ES20_DELETETEXTURES + 1)
--#define ES20_DEPTHMASK (ES20_DEPTHFUNC + 1)
--#define ES20_DEPTHRANGEF (ES20_DEPTHMASK + 1)
--#define ES20_DETACHSHADER (ES20_DEPTHRANGEF + 1)
--#define ES20_DISABLE (ES20_DETACHSHADER + 1)
--#define ES20_DISABLEVERTEXATTRIBARRAY (ES20_DISABLE + 1)
--#define ES20_DRAWARRAYS (ES20_DISABLEVERTEXATTRIBARRAY + 1)
--#define ES20_DRAWELEMENTS (ES20_DRAWARRAYS + 1)
--#define ES20_ENABLE (ES20_DRAWELEMENTS + 1)
--#define ES20_ENABLEVERTEXATTRIBARRAY (ES20_ENABLE + 1)
--#define ES20_FINISH (ES20_ENABLEVERTEXATTRIBARRAY + 1)
--#define ES20_FLUSH (ES20_FINISH + 1)
--#define ES20_FRAMEBUFFERRENDERBUFFER (ES20_FLUSH + 1)
--#define ES20_FRAMEBUFFERTEXTURE2D (ES20_FRAMEBUFFERRENDERBUFFER + 1)
--#define ES20_FRONTFACE (ES20_FRAMEBUFFERTEXTURE2D + 1)
--#define ES20_GENBUFFERS (ES20_FRONTFACE + 1)
--#define ES20_GENERATEMIPMAP (ES20_GENBUFFERS + 1)
--#define ES20_GENFRAMEBUFFERS (ES20_GENERATEMIPMAP + 1)
--#define ES20_GENRENDERBUFFERS (ES20_GENFRAMEBUFFERS + 1)
--#define ES20_GENTEXTURES (ES20_GENRENDERBUFFERS + 1)
--#define ES20_GETACTIVEATTRIB (ES20_GENTEXTURES + 1)
--#define ES20_GETACTIVEUNIFORM (ES20_GETACTIVEATTRIB + 1)
--#define ES20_GETATTACHEDSHADERS (ES20_GETACTIVEUNIFORM + 1)
--#define ES20_GETATTRIBLOCATION (ES20_GETATTACHEDSHADERS + 1)
--#define ES20_GETBOOLEANV (ES20_GETATTRIBLOCATION + 1)
--#define ES20_GETBUFFERPARAMETERIV (ES20_GETBOOLEANV + 1)
--#define ES20_GETERROR (ES20_GETBUFFERPARAMETERIV + 1)
--#define ES20_GETFLOATV (ES20_GETERROR + 1)
--#define ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV (ES20_GETFLOATV + 1)
--#define ES20_GETINTEGERV (ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV + 1)
--#define ES20_GETPROGRAMIV (ES20_GETINTEGERV + 1)
--#define ES20_GETPROGRAMINFOLOG (ES20_GETPROGRAMIV + 1)
--#define ES20_GETRENDERBUFFERPARAMETERIV (ES20_GETPROGRAMINFOLOG + 1)
--#define ES20_GETSHADERIV (ES20_GETRENDERBUFFERPARAMETERIV + 1)
--#define ES20_GETSHADERINFOLOG (ES20_GETSHADERIV + 1)
--#define ES20_GETSHADERPRECISIONFORMAT (ES20_GETSHADERINFOLOG + 1)
--#define ES20_GETSHADERSOURCE (ES20_GETSHADERPRECISIONFORMAT + 1)
--#define ES20_GETSTRING (ES20_GETSHADERSOURCE + 1)
--#define ES20_GETTEXPARAMETERFV (ES20_GETSTRING + 1)
--#define ES20_GETTEXPARAMETERIV (ES20_GETTEXPARAMETERFV + 1)
--#define ES20_GETUNIFORMFV (ES20_GETTEXPARAMETERIV + 1)
--#define ES20_GETUNIFORMIV (ES20_GETUNIFORMFV + 1)
--#define ES20_GETUNIFORMLOCATION (ES20_GETUNIFORMIV + 1)
--#define ES20_GETVERTEXATTRIBFV (ES20_GETUNIFORMLOCATION + 1)
--#define ES20_GETVERTEXATTRIBIV (ES20_GETVERTEXATTRIBFV + 1)
--#define ES20_GETVERTEXATTRIBPOINTERV (ES20_GETVERTEXATTRIBIV + 1)
--#define ES20_HINT (ES20_GETVERTEXATTRIBPOINTERV + 1)
--#define ES20_ISBUFFER (ES20_HINT + 1)
--#define ES20_ISENABLED (ES20_ISBUFFER + 1)
--#define ES20_ISFRAMEBUFFER (ES20_ISENABLED + 1)
--#define ES20_ISPROGRAM (ES20_ISFRAMEBUFFER + 1)
--#define ES20_ISRENDERBUFFER (ES20_ISPROGRAM + 1)
--#define ES20_ISSHADER (ES20_ISRENDERBUFFER + 1)
--#define ES20_ISTEXTURE (ES20_ISSHADER + 1)
--#define ES20_LINEWIDTH (ES20_ISTEXTURE + 1)
--#define ES20_LINKPROGRAM (ES20_LINEWIDTH + 1)
--#define ES20_PIXELSTOREI (ES20_LINKPROGRAM + 1)
--#define ES20_POLYGONOFFSET (ES20_PIXELSTOREI + 1)
--#define ES20_READPIXELS (ES20_POLYGONOFFSET + 1)
--#define ES20_RELEASESHADERCOMPILER (ES20_READPIXELS + 1)
--#define ES20_RENDERBUFFERSTORAGE (ES20_RELEASESHADERCOMPILER + 1)
--#define ES20_SAMPLECOVERAGE (ES20_RENDERBUFFERSTORAGE + 1)
--#define ES20_SCISSOR (ES20_SAMPLECOVERAGE + 1)
--#define ES20_SHADERBINARY (ES20_SCISSOR + 1)
--#define ES20_SHADERSOURCE (ES20_SHADERBINARY + 1)
--#define ES20_STENCILFUNC (ES20_SHADERSOURCE + 1)
--#define ES20_STENCILFUNCSEPARATE (ES20_STENCILFUNC + 1)
--#define ES20_STENCILMASK (ES20_STENCILFUNCSEPARATE + 1)
--#define ES20_STENCILMASKSEPARATE (ES20_STENCILMASK + 1)
--#define ES20_STENCILOP (ES20_STENCILMASKSEPARATE + 1)
--#define ES20_STENCILOPSEPARATE (ES20_STENCILOP + 1)
--#define ES20_TEXIMAGE2D (ES20_STENCILOPSEPARATE + 1)
--#define ES20_TEXPARAMETERF (ES20_TEXIMAGE2D + 1)
--#define ES20_TEXPARAMETERFV (ES20_TEXPARAMETERF + 1)
--#define ES20_TEXPARAMETERI (ES20_TEXPARAMETERFV + 1)
--#define ES20_TEXPARAMETERIV (ES20_TEXPARAMETERI + 1)
--#define ES20_TEXSUBIMAGE2D (ES20_TEXPARAMETERIV + 1)
--#define ES20_UNIFORM1F (ES20_TEXSUBIMAGE2D + 1)
--#define ES20_UNIFORM1FV (ES20_UNIFORM1F + 1)
--#define ES20_UNIFORM1I (ES20_UNIFORM1FV + 1)
--#define ES20_UNIFORM1IV (ES20_UNIFORM1I + 1)
--#define ES20_UNIFORM2F (ES20_UNIFORM1IV + 1)
--#define ES20_UNIFORM2FV (ES20_UNIFORM2F + 1)
--#define ES20_UNIFORM2I (ES20_UNIFORM2FV + 1)
--#define ES20_UNIFORM2IV (ES20_UNIFORM2I + 1)
--#define ES20_UNIFORM3F (ES20_UNIFORM2IV + 1)
--#define ES20_UNIFORM3FV (ES20_UNIFORM3F + 1)
--#define ES20_UNIFORM3I (ES20_UNIFORM3FV + 1)
--#define ES20_UNIFORM3IV (ES20_UNIFORM3I + 1)
--#define ES20_UNIFORM4F (ES20_UNIFORM3IV + 1)
--#define ES20_UNIFORM4FV (ES20_UNIFORM4F + 1)
--#define ES20_UNIFORM4I (ES20_UNIFORM4FV + 1)
--#define ES20_UNIFORM4IV (ES20_UNIFORM4I + 1)
--#define ES20_UNIFORMMATRIX2FV (ES20_UNIFORM4IV + 1)
--#define ES20_UNIFORMMATRIX3FV (ES20_UNIFORMMATRIX2FV + 1)
--#define ES20_UNIFORMMATRIX4FV (ES20_UNIFORMMATRIX3FV + 1)
--#define ES20_USEPROGRAM (ES20_UNIFORMMATRIX4FV + 1)
--#define ES20_VALIDATEPROGRAM (ES20_USEPROGRAM + 1)
--#define ES20_VERTEXATTRIB1F (ES20_VALIDATEPROGRAM + 1)
--#define ES20_VERTEXATTRIB1FV (ES20_VERTEXATTRIB1F + 1)
--#define ES20_VERTEXATTRIB2F (ES20_VERTEXATTRIB1FV + 1)
--#define ES20_VERTEXATTRIB2FV (ES20_VERTEXATTRIB2F + 1)
--#define ES20_VERTEXATTRIB3F (ES20_VERTEXATTRIB2FV + 1)
--#define ES20_VERTEXATTRIB3FV (ES20_VERTEXATTRIB3F + 1)
--#define ES20_VERTEXATTRIB4F (ES20_VERTEXATTRIB3FV + 1)
--#define ES20_VERTEXATTRIB4FV (ES20_VERTEXATTRIB4F + 1)
--#define ES20_VERTEXATTRIBPOINTER (ES20_VERTEXATTRIB4FV + 1)
--#define ES20_VIEWPORT (ES20_VERTEXATTRIBPOINTER + 1)
--#define ES20_GETPROGRAMBINARYOES (ES20_VIEWPORT + 1)
--#define ES20_PROGRAMBINARYOES (ES20_GETPROGRAMBINARYOES + 1)
--#define ES20_TEXIMAGE3DOES (ES20_PROGRAMBINARYOES + 1)
--#define ES20_TEXSUBIMAGE3DOES (ES20_TEXIMAGE3DOES + 1)
--#define ES20_COPYSUBIMAGE3DOES (ES20_TEXSUBIMAGE3DOES + 1)
--#define ES20_COMPRESSEDTEXIMAGE3DOES (ES20_COPYSUBIMAGE3DOES + 1)
--#define ES20_COMPRESSEDTEXSUBIMAGE3DOES (ES20_COMPRESSEDTEXIMAGE3DOES + 1)
--#define ES20_FRAMEBUFFERTEXTURE3DOES (ES20_COMPRESSEDTEXSUBIMAGE3DOES + 1)
--#define ES20_BINDVERTEXARRAYOES (ES20_FRAMEBUFFERTEXTURE3DOES + 1)
--#define ES20_GENVERTEXARRAYOES (ES20_BINDVERTEXARRAYOES + 1)
--#define ES20_ISVERTEXARRAYOES (ES20_GENVERTEXARRAYOES + 1)
--#define ES20_DELETEVERTEXARRAYOES (ES20_ISVERTEXARRAYOES + 1)
--#define ES20_GLMAPBUFFEROES (ES20_DELETEVERTEXARRAYOES + 1)
--#define ES20_GLUNMAPBUFFEROES (ES20_GLMAPBUFFEROES + 1)
--#define ES20_GLGETBUFFERPOINTERVOES (ES20_GLUNMAPBUFFEROES + 1)
--#define ES20_DISCARDFRAMEBUFFEREXT (ES20_GLGETBUFFERPOINTERVOES + 1)
--#define ES20_CALLS (ES20_DISCARDFRAMEBUFFEREXT + 1)
--#define ES20_DRAWCALLS (ES20_CALLS + 1)
--#define ES20_STATECHANGECALLS (ES20_DRAWCALLS + 1)
--#define ES20_POINTCOUNT (ES20_STATECHANGECALLS + 1)
--#define ES20_LINECOUNT (ES20_POINTCOUNT + 1)
--#define ES20_TRIANGLECOUNT (ES20_LINECOUNT + 1)
--
--/* OpenVG API IDs. */
--#define VG11_APPENDPATH 1
--#define VG11_APPENDPATHDATA (VG11_APPENDPATH + 1)
--#define VG11_CHILDIMAGE (VG11_APPENDPATHDATA + 1)
--#define VG11_CLEAR (VG11_CHILDIMAGE + 1)
--#define VG11_CLEARGLYPH (VG11_CLEAR + 1)
--#define VG11_CLEARIMAGE (VG11_CLEARGLYPH + 1)
--#define VG11_CLEARPATH (VG11_CLEARIMAGE + 1)
--#define VG11_COLORMATRIX (VG11_CLEARPATH + 1)
--#define VG11_CONVOLVE (VG11_COLORMATRIX + 1)
--#define VG11_COPYIMAGE (VG11_CONVOLVE + 1)
--#define VG11_COPYMASK (VG11_COPYIMAGE + 1)
--#define VG11_COPYPIXELS (VG11_COPYMASK + 1)
--#define VG11_CREATEFONT (VG11_COPYPIXELS + 1)
--#define VG11_CREATEIMAGE (VG11_CREATEFONT + 1)
--#define VG11_CREATEMASKLAYER (VG11_CREATEIMAGE + 1)
--#define VG11_CREATEPAINT (VG11_CREATEMASKLAYER + 1)
--#define VG11_CREATEPATH (VG11_CREATEPAINT + 1)
--#define VG11_DESTROYFONT (VG11_CREATEPATH + 1)
--#define VG11_DESTROYIMAGE (VG11_DESTROYFONT + 1)
--#define VG11_DESTROYMASKLAYER (VG11_DESTROYIMAGE + 1)
--#define VG11_DESTROYPAINT (VG11_DESTROYMASKLAYER + 1)
--#define VG11_DESTROYPATH (VG11_DESTROYPAINT + 1)
--#define VG11_DRAWGLYPH (VG11_DESTROYPATH + 1)
--#define VG11_DRAWGLYPHS (VG11_DRAWGLYPH + 1)
--#define VG11_DRAWIMAGE (VG11_DRAWGLYPHS + 1)
--#define VG11_DRAWPATH (VG11_DRAWIMAGE + 1)
--#define VG11_FILLMASKLAYER (VG11_DRAWPATH + 1)
--#define VG11_FINISH (VG11_FILLMASKLAYER + 1)
--#define VG11_FLUSH (VG11_FINISH + 1)
--#define VG11_GAUSSIANBLUR (VG11_FLUSH + 1)
--#define VG11_GETCOLOR (VG11_GAUSSIANBLUR + 1)
--#define VG11_GETERROR (VG11_GETCOLOR + 1)
--#define VG11_GETF (VG11_GETERROR + 1)
--#define VG11_GETFV (VG11_GETF + 1)
--#define VG11_GETI (VG11_GETFV + 1)
--#define VG11_GETIMAGESUBDATA (VG11_GETI + 1)
--#define VG11_GETIV (VG11_GETIMAGESUBDATA + 1)
--#define VG11_GETMATRIX (VG11_GETIV + 1)
--#define VG11_GETPAINT (VG11_GETMATRIX + 1)
--#define VG11_GETPARAMETERF (VG11_GETPAINT + 1)
--#define VG11_GETPARAMETERFV (VG11_GETPARAMETERF + 1)
--#define VG11_GETPARAMETERI (VG11_GETPARAMETERFV + 1)
--#define VG11_GETPARAMETERIV (VG11_GETPARAMETERI + 1)
--#define VG11_GETPARAMETERVECTORSIZE (VG11_GETPARAMETERIV + 1)
--#define VG11_GETPARENT (VG11_GETPARAMETERVECTORSIZE + 1)
--#define VG11_GETPATHCAPABILITIES (VG11_GETPARENT + 1)
--#define VG11_GETPIXELS (VG11_GETPATHCAPABILITIES + 1)
--#define VG11_GETSTRING (VG11_GETPIXELS + 1)
--#define VG11_GETVECTORSIZE (VG11_GETSTRING + 1)
--#define VG11_HARDWAREQUERY (VG11_GETVECTORSIZE + 1)
--#define VG11_IMAGESUBDATA (VG11_HARDWAREQUERY + 1)
--#define VG11_INTERPOLATEPATH (VG11_IMAGESUBDATA + 1)
--#define VG11_LOADIDENTITY (VG11_INTERPOLATEPATH + 1)
--#define VG11_LOADMATRIX (VG11_LOADIDENTITY + 1)
--#define VG11_LOOKUP (VG11_LOADMATRIX + 1)
--#define VG11_LOOKUPSINGLE (VG11_LOOKUP + 1)
--#define VG11_MASK (VG11_LOOKUPSINGLE + 1)
--#define VG11_MODIFYPATHCOORDS (VG11_MASK + 1)
--#define VG11_MULTMATRIX (VG11_MODIFYPATHCOORDS + 1)
--#define VG11_PAINTPATTERN (VG11_MULTMATRIX + 1)
--#define VG11_PATHBOUNDS (VG11_PAINTPATTERN + 1)
--#define VG11_PATHLENGTH (VG11_PATHBOUNDS + 1)
--#define VG11_PATHTRANSFORMEDBOUNDS (VG11_PATHLENGTH + 1)
--#define VG11_POINTALONGPATH (VG11_PATHTRANSFORMEDBOUNDS + 1)
--#define VG11_READPIXELS (VG11_POINTALONGPATH + 1)
--#define VG11_REMOVEPATHCAPABILITIES (VG11_READPIXELS + 1)
--#define VG11_RENDERTOMASK (VG11_REMOVEPATHCAPABILITIES + 1)
--#define VG11_ROTATE (VG11_RENDERTOMASK + 1)
--#define VG11_SCALE (VG11_ROTATE + 1)
--#define VG11_SEPARABLECONVOLVE (VG11_SCALE + 1)
--#define VG11_SETCOLOR (VG11_SEPARABLECONVOLVE + 1)
--#define VG11_SETF (VG11_SETCOLOR + 1)
--#define VG11_SETFV (VG11_SETF + 1)
--#define VG11_SETGLYPHTOIMAGE (VG11_SETFV + 1)
--#define VG11_SETGLYPHTOPATH (VG11_SETGLYPHTOIMAGE + 1)
--#define VG11_SETI (VG11_SETGLYPHTOPATH + 1)
--#define VG11_SETIV (VG11_SETI + 1)
--#define VG11_SETPAINT (VG11_SETIV + 1)
--#define VG11_SETPARAMETERF (VG11_SETPAINT + 1)
--#define VG11_SETPARAMETERFV (VG11_SETPARAMETERF + 1)
--#define VG11_SETPARAMETERI (VG11_SETPARAMETERFV + 1)
--#define VG11_SETPARAMETERIV (VG11_SETPARAMETERI + 1)
--#define VG11_SETPIXELS (VG11_SETPARAMETERIV + 1)
--#define VG11_SHEAR (VG11_SETPIXELS + 1)
--#define VG11_TRANSFORMPATH (VG11_SHEAR + 1)
--#define VG11_TRANSLATE (VG11_TRANSFORMPATH + 1)
--#define VG11_WRITEPIXELS (VG11_TRANSLATE + 1)
--#define VG11_CALLS (VG11_WRITEPIXELS + 1)
--#define VG11_DRAWCALLS (VG11_CALLS + 1)
--#define VG11_STATECHANGECALLS (VG11_DRAWCALLS + 1)
--#define VG11_FILLCOUNT (VG11_STATECHANGECALLS + 1)
--#define VG11_STROKECOUNT (VG11_FILLCOUNT + 1)
-+#define ES11_CALLS 151
-+#define ES11_DRAWCALLS (ES11_CALLS + 1)
-+#define ES11_STATECHANGECALLS (ES11_DRAWCALLS + 1)
-+#define ES11_POINTCOUNT (ES11_STATECHANGECALLS + 1)
-+#define ES11_LINECOUNT (ES11_POINTCOUNT + 1)
-+#define ES11_TRIANGLECOUNT (ES11_LINECOUNT + 1)
-+
-+#define ES20_CALLS 159
-+#define ES20_DRAWCALLS (ES20_CALLS + 1)
-+#define ES20_STATECHANGECALLS (ES20_DRAWCALLS + 1)
-+#define ES20_POINTCOUNT (ES20_STATECHANGECALLS + 1)
-+#define ES20_LINECOUNT (ES20_POINTCOUNT + 1)
-+#define ES20_TRIANGLECOUNT (ES20_LINECOUNT + 1)
-+
-+#define VG11_CALLS 88
-+#define VG11_DRAWCALLS (VG11_CALLS + 1)
-+#define VG11_STATECHANGECALLS (VG11_DRAWCALLS + 1)
-+#define VG11_FILLCOUNT (VG11_STATECHANGECALLS + 1)
-+#define VG11_STROKECOUNT (VG11_FILLCOUNT + 1)
- /* End of Driver API ID Definitions. */
-
- /* HAL & MISC IDs. */
--#define HAL_VERTBUFNEWBYTEALLOC 1
--#define HAL_VERTBUFTOTALBYTEALLOC (HAL_VERTBUFNEWBYTEALLOC + 1)
--#define HAL_VERTBUFNEWOBJALLOC (HAL_VERTBUFTOTALBYTEALLOC + 1)
--#define HAL_VERTBUFTOTALOBJALLOC (HAL_VERTBUFNEWOBJALLOC + 1)
--#define HAL_INDBUFNEWBYTEALLOC (HAL_VERTBUFTOTALOBJALLOC + 1)
--#define HAL_INDBUFTOTALBYTEALLOC (HAL_INDBUFNEWBYTEALLOC + 1)
--#define HAL_INDBUFNEWOBJALLOC (HAL_INDBUFTOTALBYTEALLOC + 1)
--#define HAL_INDBUFTOTALOBJALLOC (HAL_INDBUFNEWOBJALLOC + 1)
--#define HAL_TEXBUFNEWBYTEALLOC (HAL_INDBUFTOTALOBJALLOC + 1)
--#define HAL_TEXBUFTOTALBYTEALLOC (HAL_TEXBUFNEWBYTEALLOC + 1)
--#define HAL_TEXBUFNEWOBJALLOC (HAL_TEXBUFTOTALBYTEALLOC + 1)
--#define HAL_TEXBUFTOTALOBJALLOC (HAL_TEXBUFNEWOBJALLOC + 1)
--
--#define GPU_CYCLES 1
--#define GPU_READ64BYTE (GPU_CYCLES + 1)
--#define GPU_WRITE64BYTE (GPU_READ64BYTE + 1)
--#define GPU_TOTALCYCLES (GPU_WRITE64BYTE + 1)
--#define GPU_IDLECYCLES (GPU_TOTALCYCLES + 1)
--
--#define VS_INSTCOUNT 1
--#define VS_BRANCHINSTCOUNT (VS_INSTCOUNT + 1)
--#define VS_TEXLDINSTCOUNT (VS_BRANCHINSTCOUNT + 1)
--#define VS_RENDEREDVERTCOUNT (VS_TEXLDINSTCOUNT + 1)
--
--#define PS_INSTCOUNT 1
--#define PS_BRANCHINSTCOUNT (PS_INSTCOUNT + 1)
--#define PS_TEXLDINSTCOUNT (PS_BRANCHINSTCOUNT + 1)
--#define PS_RENDEREDPIXCOUNT (PS_TEXLDINSTCOUNT + 1)
--
--#define PA_INVERTCOUNT 1
--#define PA_INPRIMCOUNT (PA_INVERTCOUNT + 1)
--#define PA_OUTPRIMCOUNT (PA_INPRIMCOUNT + 1)
--#define PA_DEPTHCLIPCOUNT (PA_OUTPRIMCOUNT + 1)
--#define PA_TRIVIALREJCOUNT (PA_DEPTHCLIPCOUNT + 1)
--#define PA_CULLCOUNT (PA_TRIVIALREJCOUNT + 1)
--
--#define SE_TRIANGLECOUNT 1
--#define SE_LINECOUNT (SE_TRIANGLECOUNT + 1)
--
--#define RA_VALIDPIXCOUNT 1
--#define RA_TOTALQUADCOUNT (RA_VALIDPIXCOUNT + 1)
--#define RA_VALIDQUADCOUNTEZ (RA_TOTALQUADCOUNT + 1)
--#define RA_TOTALPRIMCOUNT (RA_VALIDQUADCOUNTEZ + 1)
--#define RA_PIPECACHEMISSCOUNT (RA_TOTALPRIMCOUNT + 1)
--#define RA_PREFCACHEMISSCOUNT (RA_PIPECACHEMISSCOUNT + 1)
--#define RA_EEZCULLCOUNT (RA_PREFCACHEMISSCOUNT + 1)
--
--#define TX_TOTBILINEARREQ 1
--#define TX_TOTTRILINEARREQ (TX_TOTBILINEARREQ + 1)
--#define TX_TOTDISCARDTEXREQ (TX_TOTTRILINEARREQ + 1)
--#define TX_TOTTEXREQ (TX_TOTDISCARDTEXREQ + 1)
--#define TX_MEMREADCOUNT (TX_TOTTEXREQ + 1)
--#define TX_MEMREADIN8BCOUNT (TX_MEMREADCOUNT + 1)
--#define TX_CACHEMISSCOUNT (TX_MEMREADIN8BCOUNT + 1)
--#define TX_CACHEHITTEXELCOUNT (TX_CACHEMISSCOUNT + 1)
--#define TX_CACHEMISSTEXELCOUNT (TX_CACHEHITTEXELCOUNT + 1)
--
--#define PE_KILLEDBYCOLOR 1
--#define PE_KILLEDBYDEPTH (PE_KILLEDBYCOLOR + 1)
--#define PE_DRAWNBYCOLOR (PE_KILLEDBYDEPTH + 1)
--#define PE_DRAWNBYDEPTH (PE_DRAWNBYCOLOR + 1)
--
--#define MC_READREQ8BPIPE 1
--#define MC_READREQ8BIP (MC_READREQ8BPIPE + 1)
--#define MC_WRITEREQ8BPIPE (MC_READREQ8BIP + 1)
--
--#define AXI_READREQSTALLED 1
--#define AXI_WRITEREQSTALLED (AXI_READREQSTALLED + 1)
--#define AXI_WRITEDATASTALLED (AXI_WRITEREQSTALLED + 1)
--
--#define PVS_INSTRCOUNT 1
--#define PVS_ALUINSTRCOUNT (PVS_INSTRCOUNT + 1)
--#define PVS_TEXINSTRCOUNT (PVS_ALUINSTRCOUNT + 1)
--#define PVS_ATTRIBCOUNT (PVS_TEXINSTRCOUNT + 1)
--#define PVS_UNIFORMCOUNT (PVS_ATTRIBCOUNT + 1)
--#define PVS_FUNCTIONCOUNT (PVS_UNIFORMCOUNT + 1)
--
--#define PPS_INSTRCOUNT 1
--#define PPS_ALUINSTRCOUNT (PPS_INSTRCOUNT + 1)
--#define PPS_TEXINSTRCOUNT (PPS_ALUINSTRCOUNT + 1)
--#define PPS_ATTRIBCOUNT (PPS_TEXINSTRCOUNT + 1)
--#define PPS_UNIFORMCOUNT (PPS_ATTRIBCOUNT + 1)
--#define PPS_FUNCTIONCOUNT (PPS_UNIFORMCOUNT + 1)
-+#define HAL_VERTBUFNEWBYTEALLOC 1
-+#define HAL_VERTBUFTOTALBYTEALLOC (HAL_VERTBUFNEWBYTEALLOC + 1)
-+#define HAL_VERTBUFNEWOBJALLOC (HAL_VERTBUFTOTALBYTEALLOC + 1)
-+#define HAL_VERTBUFTOTALOBJALLOC (HAL_VERTBUFNEWOBJALLOC + 1)
-+#define HAL_INDBUFNEWBYTEALLOC (HAL_VERTBUFTOTALOBJALLOC + 1)
-+#define HAL_INDBUFTOTALBYTEALLOC (HAL_INDBUFNEWBYTEALLOC + 1)
-+#define HAL_INDBUFNEWOBJALLOC (HAL_INDBUFTOTALBYTEALLOC + 1)
-+#define HAL_INDBUFTOTALOBJALLOC (HAL_INDBUFNEWOBJALLOC + 1)
-+#define HAL_TEXBUFNEWBYTEALLOC (HAL_INDBUFTOTALOBJALLOC + 1)
-+#define HAL_TEXBUFTOTALBYTEALLOC (HAL_TEXBUFNEWBYTEALLOC + 1)
-+#define HAL_TEXBUFNEWOBJALLOC (HAL_TEXBUFTOTALBYTEALLOC + 1)
-+#define HAL_TEXBUFTOTALOBJALLOC (HAL_TEXBUFNEWOBJALLOC + 1)
-+
-+#define GPU_CYCLES 1
-+#define GPU_READ64BYTE (GPU_CYCLES + 1)
-+#define GPU_WRITE64BYTE (GPU_READ64BYTE + 1)
-+#define GPU_TOTALCYCLES (GPU_WRITE64BYTE + 1)
-+#define GPU_IDLECYCLES (GPU_TOTALCYCLES + 1)
-+
-+#define VS_INSTCOUNT 1
-+#define VS_BRANCHINSTCOUNT (VS_INSTCOUNT + 1)
-+#define VS_TEXLDINSTCOUNT (VS_BRANCHINSTCOUNT + 1)
-+#define VS_RENDEREDVERTCOUNT (VS_TEXLDINSTCOUNT + 1)
-+#define VS_SOURCE (VS_RENDEREDVERTCOUNT + 1)
-+
-+#define PS_INSTCOUNT 1
-+#define PS_BRANCHINSTCOUNT (PS_INSTCOUNT + 1)
-+#define PS_TEXLDINSTCOUNT (PS_BRANCHINSTCOUNT + 1)
-+#define PS_RENDEREDPIXCOUNT (PS_TEXLDINSTCOUNT + 1)
-+#define PS_SOURCE (PS_RENDEREDPIXCOUNT + 1)
-+
-+#define PA_INVERTCOUNT 1
-+#define PA_INPRIMCOUNT (PA_INVERTCOUNT + 1)
-+#define PA_OUTPRIMCOUNT (PA_INPRIMCOUNT + 1)
-+#define PA_DEPTHCLIPCOUNT (PA_OUTPRIMCOUNT + 1)
-+#define PA_TRIVIALREJCOUNT (PA_DEPTHCLIPCOUNT + 1)
-+#define PA_CULLCOUNT (PA_TRIVIALREJCOUNT + 1)
-+
-+#define SE_TRIANGLECOUNT 1
-+#define SE_LINECOUNT (SE_TRIANGLECOUNT + 1)
-+
-+#define RA_VALIDPIXCOUNT 1
-+#define RA_TOTALQUADCOUNT (RA_VALIDPIXCOUNT + 1)
-+#define RA_VALIDQUADCOUNTEZ (RA_TOTALQUADCOUNT + 1)
-+#define RA_TOTALPRIMCOUNT (RA_VALIDQUADCOUNTEZ + 1)
-+#define RA_PIPECACHEMISSCOUNT (RA_TOTALPRIMCOUNT + 1)
-+#define RA_PREFCACHEMISSCOUNT (RA_PIPECACHEMISSCOUNT + 1)
-+#define RA_EEZCULLCOUNT (RA_PREFCACHEMISSCOUNT + 1)
-+
-+#define TX_TOTBILINEARREQ 1
-+#define TX_TOTTRILINEARREQ (TX_TOTBILINEARREQ + 1)
-+#define TX_TOTDISCARDTEXREQ (TX_TOTTRILINEARREQ + 1)
-+#define TX_TOTTEXREQ (TX_TOTDISCARDTEXREQ + 1)
-+#define TX_MEMREADCOUNT (TX_TOTTEXREQ + 1)
-+#define TX_MEMREADIN8BCOUNT (TX_MEMREADCOUNT + 1)
-+#define TX_CACHEMISSCOUNT (TX_MEMREADIN8BCOUNT + 1)
-+#define TX_CACHEHITTEXELCOUNT (TX_CACHEMISSCOUNT + 1)
-+#define TX_CACHEMISSTEXELCOUNT (TX_CACHEHITTEXELCOUNT + 1)
-+
-+#define PE_KILLEDBYCOLOR 1
-+#define PE_KILLEDBYDEPTH (PE_KILLEDBYCOLOR + 1)
-+#define PE_DRAWNBYCOLOR (PE_KILLEDBYDEPTH + 1)
-+#define PE_DRAWNBYDEPTH (PE_DRAWNBYCOLOR + 1)
-+
-+#define MC_READREQ8BPIPE 1
-+#define MC_READREQ8BIP (MC_READREQ8BPIPE + 1)
-+#define MC_WRITEREQ8BPIPE (MC_READREQ8BIP + 1)
-+
-+#define AXI_READREQSTALLED 1
-+#define AXI_WRITEREQSTALLED (AXI_READREQSTALLED + 1)
-+#define AXI_WRITEDATASTALLED (AXI_WRITEREQSTALLED + 1)
-+
-+#define PVS_INSTRCOUNT 1
-+#define PVS_ALUINSTRCOUNT (PVS_INSTRCOUNT + 1)
-+#define PVS_TEXINSTRCOUNT (PVS_ALUINSTRCOUNT + 1)
-+#define PVS_ATTRIBCOUNT (PVS_TEXINSTRCOUNT + 1)
-+#define PVS_UNIFORMCOUNT (PVS_ATTRIBCOUNT + 1)
-+#define PVS_FUNCTIONCOUNT (PVS_UNIFORMCOUNT + 1)
-+#define PVS_SOURCE (PVS_FUNCTIONCOUNT + 1)
-+
-+#define PPS_INSTRCOUNT 1
-+#define PPS_ALUINSTRCOUNT (PPS_INSTRCOUNT + 1)
-+#define PPS_TEXINSTRCOUNT (PPS_ALUINSTRCOUNT + 1)
-+#define PPS_ATTRIBCOUNT (PPS_TEXINSTRCOUNT + 1)
-+#define PPS_UNIFORMCOUNT (PPS_ATTRIBCOUNT + 1)
-+#define PPS_FUNCTIONCOUNT (PPS_UNIFORMCOUNT + 1)
-+#define PPS_SOURCE (PPS_FUNCTIONCOUNT + 1)
- /* End of MISC Counter IDs. */
-
- #ifdef gcdNEW_PROFILER_FILE
-@@ -578,8 +184,8 @@ extern "C" {
- #define VPG_ES11_TIME 0x170000
- #define VPG_ES20_TIME 0x180000
- #define VPG_FRAME 0x190000
--#define VPG_ES11_DRAW 0x200000
--#define VPG_ES20_DRAW 0x210000
-+#define VPG_ES11_DRAW 0x200000
-+#define VPG_ES20_DRAW 0x210000
- #define VPG_END 0xff0000
-
- /* Info. */
-@@ -592,7 +198,7 @@ extern "C" {
- #define VPC_INFOSCREENSIZE (VPC_INFODRIVERMODE + 1)
-
- /* Counter Constants. */
--#define VPC_ELAPSETIME (VPG_TIME + 1)
-+#define VPC_ELAPSETIME (VPG_TIME + 1)
- #define VPC_CPUTIME (VPC_ELAPSETIME + 1)
-
- #define VPC_MEMMAXRES (VPG_MEM + 1)
-@@ -600,404 +206,28 @@ extern "C" {
- #define VPC_MEMUNSHAREDDATA (VPC_MEMSHARED + 1)
- #define VPC_MEMUNSHAREDSTACK (VPC_MEMUNSHAREDDATA + 1)
-
--/* OpenGL ES11 Counters. */
--#define VPC_ES11ACTIVETEXTURE (VPG_ES11 + ES11_ACTIVETEXTURE)
--#define VPC_ES11ALPHAFUNC (VPG_ES11 + ES11_ALPHAFUNC)
--#define VPC_ES11ALPHAFUNCX (VPG_ES11 + ES11_ALPHAFUNCX)
--#define VPC_ES11BINDBUFFER (VPG_ES11 + ES11_BINDBUFFER)
--#define VPC_ES11BINDTEXTURE (VPG_ES11 + ES11_BINDTEXTURE)
--#define VPC_ES11BLENDFUNC (VPG_ES11 + ES11_BLENDFUNC)
--#define VPC_ES11BUFFERDATA (VPG_ES11 + ES11_BUFFERDATA)
--#define VPC_ES11BUFFERSUBDATA (VPG_ES11 + ES11_BUFFERSUBDATA)
--#define VPC_ES11CLEAR (VPG_ES11 + ES11_CLEAR)
--#define VPC_ES11CLEARCOLOR (VPG_ES11 + ES11_CLEARCOLOR)
--#define VPC_ES11CLEARCOLORX (VPG_ES11 + ES11_CLEARCOLORX)
--#define VPC_ES11CLEARDEPTHF (VPG_ES11 + ES11_CLEARDEPTHF)
--#define VPC_ES11CLEARDEPTHX (VPG_ES11 + ES11_CLEARDEPTHX)
--#define VPC_ES11CLEARSTENCIL (VPG_ES11 + ES11_CLEARSTENCIL)
--#define VPC_ES11CLIENTACTIVETEXTURE (VPG_ES11 + ES11_CLIENTACTIVETEXTURE)
--#define VPC_ES11CLIPPLANEF (VPG_ES11 + ES11_CLIPPLANEF)
--#define VPC_ES11CLIPPLANEX (VPG_ES11 + ES11_CLIPPLANEX)
--#define VPC_ES11COLOR4F (VPG_ES11 + ES11_COLOR4F)
--#define VPC_ES11COLOR4UB (VPG_ES11 + ES11_COLOR4UB)
--#define VPC_ES11COLOR4X (VPG_ES11 + ES11_COLOR4X)
--#define VPC_ES11COLORMASK (VPG_ES11 + ES11_COLORMASK)
--#define VPC_ES11COLORPOINTER (VPG_ES11 + ES11_COLORPOINTER)
--#define VPC_ES11COMPRESSEDTEXIMAGE2D (VPG_ES11 + ES11_COMPRESSEDTEXIMAGE2D)
--#define VPC_ES11COMPRESSEDTEXSUBIMAGE2D (VPG_ES11 + ES11_COMPRESSEDTEXSUBIMAGE2D)
--#define VPC_ES11COPYTEXIMAGE2D (VPG_ES11 + ES11_COPYTEXIMAGE2D)
--#define VPC_ES11COPYTEXSUBIMAGE2D (VPG_ES11 + ES11_COPYTEXSUBIMAGE2D)
--#define VPC_ES11CULLFACE (VPG_ES11 + ES11_CULLFACE)
--#define VPC_ES11DELETEBUFFERS (VPG_ES11 + ES11_DELETEBUFFERS)
--#define VPC_ES11DELETETEXTURES (VPG_ES11 + ES11_DELETETEXTURES)
--#define VPC_ES11DEPTHFUNC (VPG_ES11 + ES11_DEPTHFUNC)
--#define VPC_ES11DEPTHMASK (VPG_ES11 + ES11_DEPTHMASK)
--#define VPC_ES11DEPTHRANGEF (VPG_ES11 + ES11_DEPTHRANGEF)
--#define VPC_ES11DEPTHRANGEX (VPG_ES11 + ES11_DEPTHRANGEX)
--#define VPC_ES11DISABLE (VPG_ES11 + ES11_DISABLE)
--#define VPC_ES11DISABLECLIENTSTATE (VPG_ES11 + ES11_DISABLECLIENTSTATE)
--#define VPC_ES11DRAWARRAYS (VPG_ES11 + ES11_DRAWARRAYS)
--#define VPC_ES11DRAWELEMENTS (VPG_ES11 + ES11_DRAWELEMENTS)
--#define VPC_ES11ENABLE (VPG_ES11 + ES11_ENABLE)
--#define VPC_ES11ENABLECLIENTSTATE (VPG_ES11 + ES11_ENABLECLIENTSTATE)
--#define VPC_ES11FINISH (VPG_ES11 + ES11_FINISH)
--#define VPC_ES11FLUSH (VPG_ES11 + ES11_FLUSH)
--#define VPC_ES11FOGF (VPG_ES11 + ES11_FOGF)
--#define VPC_ES11FOGFV (VPG_ES11 + ES11_FOGFV)
--#define VPC_ES11FOGX (VPG_ES11 + ES11_FOGX)
--#define VPC_ES11FOGXV (VPG_ES11 + ES11_FOGXV)
--#define VPC_ES11FRONTFACE (VPG_ES11 + ES11_FRONTFACE)
--#define VPC_ES11FRUSTUMF (VPG_ES11 + ES11_FRUSTUMF)
--#define VPC_ES11FRUSTUMX (VPG_ES11 + ES11_FRUSTUMX)
--#define VPC_ES11GENBUFFERS (VPG_ES11 + ES11_GENBUFFERS)
--#define VPC_ES11GENTEXTURES (VPG_ES11 + ES11_GENTEXTURES)
--#define VPC_ES11GETBOOLEANV (VPG_ES11 + ES11_GETBOOLEANV)
--#define VPC_ES11GETBUFFERPARAMETERIV (VPG_ES11 + ES11_GETBUFFERPARAMETERIV)
--#define VPC_ES11GETCLIPPLANEF (VPG_ES11 + ES11_GETCLIPPLANEF)
--#define VPC_ES11GETCLIPPLANEX (VPG_ES11 + ES11_GETCLIPPLANEX)
--#define VPC_ES11GETERROR (VPG_ES11 + ES11_GETERROR)
--#define VPC_ES11GETFIXEDV (VPG_ES11 + ES11_GETFIXEDV)
--#define VPC_ES11GETFLOATV (VPG_ES11 + ES11_GETFLOATV)
--#define VPC_ES11GETINTEGERV (VPG_ES11 + ES11_GETINTEGERV)
--#define VPC_ES11GETLIGHTFV (VPG_ES11 + ES11_GETLIGHTFV)
--#define VPC_ES11GETLIGHTXV (VPG_ES11 + ES11_GETLIGHTXV)
--#define VPC_ES11GETMATERIALFV (VPG_ES11 + ES11_GETMATERIALFV)
--#define VPC_ES11GETMATERIALXV (VPG_ES11 + ES11_GETMATERIALXV)
--#define VPC_ES11GETPOINTERV (VPG_ES11 + ES11_GETPOINTERV)
--#define VPC_ES11GETSTRING (VPG_ES11 + ES11_GETSTRING)
--#define VPC_ES11GETTEXENVFV (VPG_ES11 + ES11_GETTEXENVFV)
--#define VPC_ES11GETTEXENVIV (VPG_ES11 + ES11_GETTEXENVIV)
--#define VPC_ES11GETTEXENVXV (VPG_ES11 + ES11_GETTEXENVXV)
--#define VPC_ES11GETTEXPARAMETERFV (VPG_ES11 + ES11_GETTEXPARAMETERFV)
--#define VPC_ES11GETTEXPARAMETERIV (VPG_ES11 + ES11_GETTEXPARAMETERIV)
--#define VPC_ES11GETTEXPARAMETERXV (VPG_ES11 + ES11_GETTEXPARAMETERXV)
--#define VPC_ES11HINT (VPG_ES11 + ES11_HINT)
--#define VPC_ES11ISBUFFER (VPG_ES11 + ES11_ISBUFFER)
--#define VPC_ES11ISENABLED (VPG_ES11 + ES11_ISENABLED)
--#define VPC_ES11ISTEXTURE (VPG_ES11 + ES11_ISTEXTURE)
--#define VPC_ES11LIGHTF (VPG_ES11 + ES11_LIGHTF)
--#define VPC_ES11LIGHTFV (VPG_ES11 + ES11_LIGHTFV)
--#define VPC_ES11LIGHTMODELF (VPG_ES11 + ES11_LIGHTMODELF)
--#define VPC_ES11LIGHTMODELFV (VPG_ES11 + ES11_LIGHTMODELFV)
--#define VPC_ES11LIGHTMODELX (VPG_ES11 + ES11_LIGHTMODELX)
--#define VPC_ES11LIGHTMODELXV (VPG_ES11 + ES11_LIGHTMODELXV)
--#define VPC_ES11LIGHTX (VPG_ES11 + ES11_LIGHTX)
--#define VPC_ES11LIGHTXV (VPG_ES11 + ES11_LIGHTXV)
--#define VPC_ES11LINEWIDTH (VPG_ES11 + ES11_LINEWIDTH)
--#define VPC_ES11LINEWIDTHX (VPG_ES11 + ES11_LINEWIDTHX)
--#define VPC_ES11LOADIDENTITY (VPG_ES11 + ES11_LOADIDENTITY)
--#define VPC_ES11LOADMATRIXF (VPG_ES11 + ES11_LOADMATRIXF)
--#define VPC_ES11LOADMATRIXX (VPG_ES11 + ES11_LOADMATRIXX)
--#define VPC_ES11LOGICOP (VPG_ES11 + ES11_LOGICOP)
--#define VPC_ES11MATERIALF (VPG_ES11 + ES11_MATERIALF)
--#define VPC_ES11MATERIALFV (VPG_ES11 + ES11_MATERIALFV)
--#define VPC_ES11MATERIALX (VPG_ES11 + ES11_MATERIALX)
--#define VPC_ES11MATERIALXV (VPG_ES11 + ES11_MATERIALXV)
--#define VPC_ES11MATRIXMODE (VPG_ES11 + ES11_MATRIXMODE)
--#define VPC_ES11MULTITEXCOORD4F (VPG_ES11 + ES11_MULTITEXCOORD4F)
--#define VPC_ES11MULTITEXCOORD4X (VPG_ES11 + ES11_MULTITEXCOORD4X)
--#define VPC_ES11MULTMATRIXF (VPG_ES11 + ES11_MULTMATRIXF)
--#define VPC_ES11MULTMATRIXX (VPG_ES11 + ES11_MULTMATRIXX)
--#define VPC_ES11NORMAL3F (VPG_ES11 + ES11_NORMAL3F)
--#define VPC_ES11NORMAL3X (VPG_ES11 + ES11_NORMAL3X)
--#define VPC_ES11NORMALPOINTER (VPG_ES11 + ES11_NORMALPOINTER)
--#define VPC_ES11ORTHOF (VPG_ES11 + ES11_ORTHOF)
--#define VPC_ES11ORTHOX (VPG_ES11 + ES11_ORTHOX)
--#define VPC_ES11PIXELSTOREI (VPG_ES11 + ES11_PIXELSTOREI)
--#define VPC_ES11POINTPARAMETERF (VPG_ES11 + ES11_POINTPARAMETERF)
--#define VPC_ES11POINTPARAMETERFV (VPG_ES11 + ES11_POINTPARAMETERFV)
--#define VPC_ES11POINTPARAMETERX (VPG_ES11 + ES11_POINTPARAMETERX)
--#define VPC_ES11POINTPARAMETERXV (VPG_ES11 + ES11_POINTPARAMETERXV)
--#define VPC_ES11POINTSIZE (VPG_ES11 + ES11_POINTSIZE)
--#define VPC_ES11POINTSIZEX (VPG_ES11 + ES11_POINTSIZEX)
--#define VPC_ES11POLYGONOFFSET (VPG_ES11 + ES11_POLYGONOFFSET)
--#define VPC_ES11POLYGONOFFSETX (VPG_ES11 + ES11_POLYGONOFFSETX)
--#define VPC_ES11POPMATRIX (VPG_ES11 + ES11_POPMATRIX)
--#define VPC_ES11PUSHMATRIX (VPG_ES11 + ES11_PUSHMATRIX)
--#define VPC_ES11READPIXELS (VPG_ES11 + ES11_READPIXELS)
--#define VPC_ES11ROTATEF (VPG_ES11 + ES11_ROTATEF)
--#define VPC_ES11ROTATEX (VPG_ES11 + ES11_ROTATEX)
--#define VPC_ES11SAMPLECOVERAGE (VPG_ES11 + ES11_SAMPLECOVERAGE)
--#define VPC_ES11SAMPLECOVERAGEX (VPG_ES11 + ES11_SAMPLECOVERAGEX)
--#define VPC_ES11SCALEF (VPG_ES11 + ES11_SCALEF)
--#define VPC_ES11SCALEX (VPG_ES11 + ES11_SCALEX)
--#define VPC_ES11SCISSOR (VPG_ES11 + ES11_SCISSOR)
--#define VPC_ES11SHADEMODEL (VPG_ES11 + ES11_SHADEMODEL)
--#define VPC_ES11STENCILFUNC (VPG_ES11 + ES11_STENCILFUNC)
--#define VPC_ES11STENCILMASK (VPG_ES11 + ES11_STENCILMASK)
--#define VPC_ES11STENCILOP (VPG_ES11 + ES11_STENCILOP)
--#define VPC_ES11TEXCOORDPOINTER (VPG_ES11 + ES11_TEXCOORDPOINTER)
--#define VPC_ES11TEXENVF (VPG_ES11 + ES11_TEXENVF)
--#define VPC_ES11TEXENVFV (VPG_ES11 + ES11_TEXENVFV)
--#define VPC_ES11TEXENVI (VPG_ES11 + ES11_TEXENVI)
--#define VPC_ES11TEXENVIV (VPG_ES11 + ES11_TEXENVIV)
--#define VPC_ES11TEXENVX (VPG_ES11 + ES11_TEXENVX)
--#define VPC_ES11TEXENVXV (VPG_ES11 + ES11_TEXENVXV)
--#define VPC_ES11TEXIMAGE2D (VPG_ES11 + ES11_TEXIMAGE2D)
--#define VPC_ES11TEXPARAMETERF (VPG_ES11 + ES11_TEXPARAMETERF)
--#define VPC_ES11TEXPARAMETERFV (VPG_ES11 + ES11_TEXPARAMETERFV)
--#define VPC_ES11TEXPARAMETERI (VPG_ES11 + ES11_TEXPARAMETERI)
--#define VPC_ES11TEXPARAMETERIV (VPG_ES11 + ES11_TEXPARAMETERIV)
--#define VPC_ES11TEXPARAMETERX (VPG_ES11 + ES11_TEXPARAMETERX)
--#define VPC_ES11TEXPARAMETERXV (VPG_ES11 + ES11_TEXPARAMETERXV)
--#define VPC_ES11TEXSUBIMAGE2D (VPG_ES11 + ES11_TEXSUBIMAGE2D)
--#define VPC_ES11TRANSLATEF (VPG_ES11 + ES11_TRANSLATEF)
--#define VPC_ES11TRANSLATEX (VPG_ES11 + ES11_TRANSLATEX)
--#define VPC_ES11VERTEXPOINTER (VPG_ES11 + ES11_VERTEXPOINTER)
--#define VPC_ES11VIEWPORT (VPG_ES11 + ES11_VIEWPORT)
- /* OpenGL ES11 Statics Counter IDs. */
--#define VPC_ES11CALLS (VPG_ES11 + ES11_CALLS)
--#define VPC_ES11DRAWCALLS (VPG_ES11 + ES11_DRAWCALLS)
--#define VPC_ES11STATECHANGECALLS (VPG_ES11 + ES11_STATECHANGECALLS)
--#define VPC_ES11POINTCOUNT (VPG_ES11 + ES11_POINTCOUNT)
--#define VPC_ES11LINECOUNT (VPG_ES11 + ES11_LINECOUNT)
--#define VPC_ES11TRIANGLECOUNT (VPG_ES11 + ES11_TRIANGLECOUNT)
--
--/* OpenGLES 2.x */
--#define VPC_ES20ACTIVETEXTURE (VPG_ES20 + ES20_ACTIVETEXTURE)
--#define VPC_ES20ATTACHSHADER (VPG_ES20 + ES20_ATTACHSHADER)
--#define VPC_ES20BINDATTRIBLOCATION (VPG_ES20 + ES20_BINDATTRIBLOCATION)
--#define VPC_ES20BINDBUFFER (VPG_ES20 + ES20_BINDBUFFER)
--#define VPC_ES20BINDFRAMEBUFFER (VPG_ES20 + ES20_BINDFRAMEBUFFER)
--#define VPC_ES20BINDRENDERBUFFER (VPG_ES20 + ES20_BINDRENDERBUFFER)
--#define VPC_ES20BINDTEXTURE (VPG_ES20 + ES20_BINDTEXTURE)
--#define VPC_ES20BLENDCOLOR (VPG_ES20 + ES20_BLENDCOLOR)
--#define VPC_ES20BLENDEQUATION (VPG_ES20 + ES20_BLENDEQUATION)
--#define VPC_ES20BLENDEQUATIONSEPARATE (VPG_ES20 + ES20_BLENDEQUATIONSEPARATE)
--#define VPC_ES20BLENDFUNC (VPG_ES20 + ES20_BLENDFUNC)
--#define VPC_ES20BLENDFUNCSEPARATE (VPG_ES20 + ES20_BLENDFUNCSEPARATE)
--#define VPC_ES20BUFFERDATA (VPG_ES20 + ES20_BUFFERDATA)
--#define VPC_ES20BUFFERSUBDATA (VPG_ES20 + ES20_BUFFERSUBDATA)
--#define VPC_ES20CHECKFRAMEBUFFERSTATUS (VPG_ES20 + ES20_CHECKFRAMEBUFFERSTATUS)
--#define VPC_ES20CLEAR (VPG_ES20 + ES20_CLEAR)
--#define VPC_ES20CLEARCOLOR (VPG_ES20 + ES20_CLEARCOLOR)
--#define VPC_ES20CLEARDEPTHF (VPG_ES20 + ES20_CLEARDEPTHF)
--#define VPC_ES20CLEARSTENCIL (VPG_ES20 + ES20_CLEARSTENCIL)
--#define VPC_ES20COLORMASK (VPG_ES20 + ES20_COLORMASK)
--#define VPC_ES20COMPILESHADER (VPG_ES20 + ES20_COMPILESHADER)
--#define VPC_ES20COMPRESSEDTEXIMAGE2D (VPG_ES20 + ES20_COMPRESSEDTEXIMAGE2D)
--#define VPC_ES20COMPRESSEDTEXSUBIMAGE2D (VPG_ES20 + ES20_COMPRESSEDTEXSUBIMAGE2D)
--#define VPC_ES20COPYTEXIMAGE2D (VPG_ES20 + ES20_COPYTEXIMAGE2D)
--#define VPC_ES20COPYTEXSUBIMAGE2D (VPG_ES20 + ES20_COPYTEXSUBIMAGE2D)
--#define VPC_ES20CREATEPROGRAM (VPG_ES20 + ES20_CREATEPROGRAM)
--#define VPC_ES20CREATESHADER (VPG_ES20 + ES20_CREATESHADER)
--#define VPC_ES20CULLFACE (VPG_ES20 + ES20_CULLFACE)
--#define VPC_ES20DELETEBUFFERS (VPG_ES20 + ES20_DELETEBUFFERS)
--#define VPC_ES20DELETEFRAMEBUFFERS (VPG_ES20 + ES20_DELETEFRAMEBUFFERS)
--#define VPC_ES20DELETEPROGRAM (VPG_ES20 + ES20_DELETEPROGRAM)
--#define VPC_ES20DELETERENDERBUFFERS (VPG_ES20 + ES20_DELETERENDERBUFFERS)
--#define VPC_ES20DELETESHADER (VPG_ES20 + ES20_DELETESHADER)
--#define VPC_ES20DELETETEXTURES (VPG_ES20 + ES20_DELETETEXTURES)
--#define VPC_ES20DEPTHFUNC (VPG_ES20 + ES20_DEPTHFUNC)
--#define VPC_ES20DEPTHMASK (VPG_ES20 + ES20_DEPTHMASK)
--#define VPC_ES20DEPTHRANGEF (VPG_ES20 + ES20_DEPTHRANGEF)
--#define VPC_ES20DETACHSHADER (VPG_ES20 + ES20_DETACHSHADER)
--#define VPC_ES20DISABLE (VPG_ES20 + ES20_DISABLE)
--#define VPC_ES20DISABLEVERTEXATTRIBARRAY (VPG_ES20 + ES20_DISABLEVERTEXATTRIBARRAY)
--#define VPC_ES20DRAWARRAYS (VPG_ES20 + ES20_DRAWARRAYS)
--#define VPC_ES20DRAWELEMENTS (VPG_ES20 + ES20_DRAWELEMENTS)
--#define VPC_ES20ENABLE (VPG_ES20 + ES20_ENABLE)
--#define VPC_ES20ENABLEVERTEXATTRIBARRAY (VPG_ES20 + ES20_ENABLEVERTEXATTRIBARRAY)
--#define VPC_ES20FINISH (VPG_ES20 + ES20_FINISH)
--#define VPC_ES20FLUSH (VPG_ES20 + ES20_FLUSH)
--#define VPC_ES20FRAMEBUFFERRENDERBUFFER (VPG_ES20 + ES20_FRAMEBUFFERRENDERBUFFER)
--#define VPC_ES20FRAMEBUFFERTEXTURE2D (VPG_ES20 + ES20_FRAMEBUFFERTEXTURE2D)
--#define VPC_ES20FRONTFACE (VPG_ES20 + ES20_FRONTFACE)
--#define VPC_ES20GENBUFFERS (VPG_ES20 + ES20_GENBUFFERS)
--#define VPC_ES20GENERATEMIPMAP (VPG_ES20 + ES20_GENERATEMIPMAP)
--#define VPC_ES20GENFRAMEBUFFERS (VPG_ES20 + ES20_GENFRAMEBUFFERS)
--#define VPC_ES20GENRENDERBUFFERS (VPG_ES20 + ES20_GENRENDERBUFFERS)
--#define VPC_ES20GENTEXTURES (VPG_ES20 + ES20_GENTEXTURES)
--#define VPC_ES20GETACTIVEATTRIB (VPG_ES20 + ES20_GETACTIVEATTRIB)
--#define VPC_ES20GETACTIVEUNIFORM (VPG_ES20 + ES20_GETACTIVEUNIFORM)
--#define VPC_ES20GETATTACHEDSHADERS (VPG_ES20 + ES20_GETATTACHEDSHADERS)
--#define VPC_ES20GETATTRIBLOCATION (VPG_ES20 + ES20_GETATTRIBLOCATION)
--#define VPC_ES20GETBOOLEANV (VPG_ES20 + ES20_GETBOOLEANV)
--#define VPC_ES20GETBUFFERPARAMETERIV (VPG_ES20 + ES20_GETBUFFERPARAMETERIV)
--#define VPC_ES20GETERROR (VPG_ES20 + ES20_GETERROR)
--#define VPC_ES20GETFLOATV (VPG_ES20 + ES20_GETFLOATV)
--#define VPC_ES20GETFRAMEBUFFERATTACHMENTPARAMETERIV (VPG_ES20 + ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV)
--#define VPC_ES20GETINTEGERV (VPG_ES20 + ES20_GETINTEGERV)
--#define VPC_ES20GETPROGRAMIV (VPG_ES20 + ES20_GETPROGRAMIV)
--#define VPC_ES20GETPROGRAMINFOLOG (VPG_ES20 + ES20_GETPROGRAMINFOLOG)
--#define VPC_ES20GETRENDERBUFFERPARAMETERIV (VPG_ES20 + ES20_GETRENDERBUFFERPARAMETERIV)
--#define VPC_ES20GETSHADERIV (VPG_ES20 + ES20_GETSHADERIV)
--#define VPC_ES20GETSHADERINFOLOG (VPG_ES20 + ES20_GETSHADERINFOLOG)
--#define VPC_ES20GETSHADERPRECISIONFORMAT (VPG_ES20 + ES20_GETSHADERPRECISIONFORMAT)
--#define VPC_ES20GETSHADERSOURCE (VPG_ES20 + ES20_GETSHADERSOURCE)
--#define VPC_ES20GETSTRING (VPG_ES20 + ES20_GETSTRING)
--#define VPC_ES20GETTEXPARAMETERFV (VPG_ES20 + ES20_GETTEXPARAMETERFV)
--#define VPC_ES20GETTEXPARAMETERIV (VPG_ES20 + ES20_GETTEXPARAMETERIV)
--#define VPC_ES20GETUNIFORMFV (VPG_ES20 + ES20_GETUNIFORMFV)
--#define VPC_ES20GETUNIFORMIV (VPG_ES20 + ES20_GETUNIFORMIV)
--#define VPC_ES20GETUNIFORMLOCATION (VPG_ES20 + ES20_GETUNIFORMLOCATION)
--#define VPC_ES20GETVERTEXATTRIBFV (VPG_ES20 + ES20_GETVERTEXATTRIBFV)
--#define VPC_ES20GETVERTEXATTRIBIV (VPG_ES20 + ES20_GETVERTEXATTRIBIV)
--#define VPC_ES20GETVERTEXATTRIBPOINTERV (VPG_ES20 + ES20_GETVERTEXATTRIBPOINTERV)
--#define VPC_ES20HINT (VPG_ES20 + ES20_HINT)
--#define VPC_ES20ISBUFFER (VPG_ES20 + ES20_ISBUFFER)
--#define VPC_ES20ISENABLED (VPG_ES20 + ES20_ISENABLED)
--#define VPC_ES20ISFRAMEBUFFER (VPG_ES20 + ES20_ISFRAMEBUFFER)
--#define VPC_ES20ISPROGRAM (VPG_ES20 + ES20_ISPROGRAM)
--#define VPC_ES20ISRENDERBUFFER (VPG_ES20 + ES20_ISRENDERBUFFER)
--#define VPC_ES20ISSHADER (VPG_ES20 + ES20_ISSHADER)
--#define VPC_ES20ISTEXTURE (VPG_ES20 + ES20_ISTEXTURE)
--#define VPC_ES20LINEWIDTH (VPG_ES20 + ES20_LINEWIDTH)
--#define VPC_ES20LINKPROGRAM (VPG_ES20 + ES20_LINKPROGRAM)
--#define VPC_ES20PIXELSTOREI (VPG_ES20 + ES20_PIXELSTOREI)
--#define VPC_ES20POLYGONOFFSET (VPG_ES20 + ES20_POLYGONOFFSET)
--#define VPC_ES20READPIXELS (VPG_ES20 + ES20_READPIXELS)
--#define VPC_ES20RELEASESHADERCOMPILER (VPG_ES20 + ES20_RELEASESHADERCOMPILER)
--#define VPC_ES20RENDERBUFFERSTORAGE (VPG_ES20 + ES20_RENDERBUFFERSTORAGE)
--#define VPC_ES20SAMPLECOVERAGE (VPG_ES20 + ES20_SAMPLECOVERAGE)
--#define VPC_ES20SCISSOR (VPG_ES20 + ES20_SCISSOR)
--#define VPC_ES20SHADERBINARY (VPG_ES20 + ES20_SHADERBINARY)
--#define VPC_ES20SHADERSOURCE (VPG_ES20 + ES20_SHADERSOURCE)
--#define VPC_ES20STENCILFUNC (VPG_ES20 + ES20_STENCILFUNC)
--#define VPC_ES20STENCILFUNCSEPARATE (VPG_ES20 + ES20_STENCILFUNCSEPARATE)
--#define VPC_ES20STENCILMASK (VPG_ES20 + ES20_STENCILMASK)
--#define VPC_ES20STENCILMASKSEPARATE (VPG_ES20 + ES20_STENCILMASKSEPARATE)
--#define VPC_ES20STENCILOP (VPG_ES20 + ES20_STENCILOP)
--#define VPC_ES20STENCILOPSEPARATE (VPG_ES20 + ES20_STENCILOPSEPARATE)
--#define VPC_ES20TEXIMAGE2D (VPG_ES20 + ES20_TEXIMAGE2D)
--#define VPC_ES20TEXPARAMETERF (VPG_ES20 + ES20_TEXPARAMETERF)
--#define VPC_ES20TEXPARAMETERFV (VPG_ES20 + ES20_TEXPARAMETERFV)
--#define VPC_ES20TEXPARAMETERI (VPG_ES20 + ES20_TEXPARAMETERI)
--#define VPC_ES20TEXPARAMETERIV (VPG_ES20 + ES20_TEXPARAMETERIV)
--#define VPC_ES20TEXSUBIMAGE2D (VPG_ES20 + ES20_TEXSUBIMAGE2D)
--#define VPC_ES20UNIFORM1F (VPG_ES20 + ES20_UNIFORM1F)
--#define VPC_ES20UNIFORM1FV (VPG_ES20 + ES20_UNIFORM1FV)
--#define VPC_ES20UNIFORM1I (VPG_ES20 + ES20_UNIFORM1I)
--#define VPC_ES20UNIFORM1IV (VPG_ES20 + ES20_UNIFORM1IV)
--#define VPC_ES20UNIFORM2F (VPG_ES20 + ES20_UNIFORM2F)
--#define VPC_ES20UNIFORM2FV (VPG_ES20 + ES20_UNIFORM2FV)
--#define VPC_ES20UNIFORM2I (VPG_ES20 + ES20_UNIFORM2I)
--#define VPC_ES20UNIFORM2IV (VPG_ES20 + ES20_UNIFORM2IV)
--#define VPC_ES20UNIFORM3F (VPG_ES20 + ES20_UNIFORM3F)
--#define VPC_ES20UNIFORM3FV (VPG_ES20 + ES20_UNIFORM3FV)
--#define VPC_ES20UNIFORM3I (VPG_ES20 + ES20_UNIFORM3I)
--#define VPC_ES20UNIFORM3IV (VPG_ES20 + ES20_UNIFORM3IV)
--#define VPC_ES20UNIFORM4F (VPG_ES20 + ES20_UNIFORM4F)
--#define VPC_ES20UNIFORM4FV (VPG_ES20 + ES20_UNIFORM4FV)
--#define VPC_ES20UNIFORM4I (VPG_ES20 + ES20_UNIFORM4I)
--#define VPC_ES20UNIFORM4IV (VPG_ES20 + ES20_UNIFORM4IV)
--#define VPC_ES20UNIFORMMATRIX2FV (VPG_ES20 + ES20_UNIFORMMATRIX2FV)
--#define VPC_ES20UNIFORMMATRIX3FV (VPG_ES20 + ES20_UNIFORMMATRIX3FV)
--#define VPC_ES20UNIFORMMATRIX4FV (VPG_ES20 + ES20_UNIFORMMATRIX4FV)
--#define VPC_ES20USEPROGRAM (VPG_ES20 + ES20_USEPROGRAM)
--#define VPC_ES20VALIDATEPROGRAM (VPG_ES20 + ES20_VALIDATEPROGRAM)
--#define VPC_ES20VERTEXATTRIB1F (VPG_ES20 + ES20_VERTEXATTRIB1F)
--#define VPC_ES20VERTEXATTRIB1FV (VPG_ES20 + ES20_VERTEXATTRIB1FV)
--#define VPC_ES20VERTEXATTRIB2F (VPG_ES20 + ES20_VERTEXATTRIB2F)
--#define VPC_ES20VERTEXATTRIB2FV (VPG_ES20 + ES20_VERTEXATTRIB2FV)
--#define VPC_ES20VERTEXATTRIB3F (VPG_ES20 + ES20_VERTEXATTRIB3F)
--#define VPC_ES20VERTEXATTRIB3FV (VPG_ES20 + ES20_VERTEXATTRIB3FV)
--#define VPC_ES20VERTEXATTRIB4F (VPG_ES20 + ES20_VERTEXATTRIB4F)
--#define VPC_ES20VERTEXATTRIB4FV (VPG_ES20 + ES20_VERTEXATTRIB4FV)
--#define VPC_ES20VERTEXATTRIBPOINTER (VPG_ES20 + ES20_VERTEXATTRIBPOINTER)
--#define VPC_ES20VIEWPORT (VPG_ES20 + ES20_VIEWPORT)
-+#define VPC_ES11CALLS (VPG_ES11 + ES11_CALLS)
-+#define VPC_ES11DRAWCALLS (VPG_ES11 + ES11_DRAWCALLS)
-+#define VPC_ES11STATECHANGECALLS (VPG_ES11 + ES11_STATECHANGECALLS)
-+#define VPC_ES11POINTCOUNT (VPG_ES11 + ES11_POINTCOUNT)
-+#define VPC_ES11LINECOUNT (VPG_ES11 + ES11_LINECOUNT)
-+#define VPC_ES11TRIANGLECOUNT (VPG_ES11 + ES11_TRIANGLECOUNT)
-+
- /* OpenGL ES20 Statistics Counter IDs. */
--#define VPC_ES20CALLS (VPG_ES20 + ES20_CALLS)
--#define VPC_ES20DRAWCALLS (VPG_ES20 + ES20_DRAWCALLS)
--#define VPC_ES20STATECHANGECALLS (VPG_ES20 + ES20_STATECHANGECALLS)
--#define VPC_ES20POINTCOUNT (VPG_ES20 + ES20_POINTCOUNT)
--#define VPC_ES20LINECOUNT (VPG_ES20 + ES20_LINECOUNT)
--#define VPC_ES20TRIANGLECOUNT (VPG_ES20 + ES20_TRIANGLECOUNT)
--
--/* VG11 Counters. */
--#define VPC_VG11APPENDPATH (VPG_VG11 + VG11_APPENDPATH)
--#define VPC_VG11APPENDPATHDATA (VPG_VG11 + VG11_APPENDPATHDATA)
--#define VPC_VG11CHILDIMAGE (VPG_VG11 + VG11_CHILDIMAGE)
--#define VPC_VG11CLEAR (VPG_VG11 + VG11_CLEAR)
--#define VPC_VG11CLEARGLYPH (VPG_VG11 + VG11_CLEARGLYPH)
--#define VPC_VG11CLEARIMAGE (VPG_VG11 + VG11_CLEARIMAGE)
--#define VPC_VG11CLEARPATH (VPG_VG11 + VG11_CLEARPATH)
--#define VPC_VG11COLORMATRIX (VPG_VG11 + VG11_COLORMATRIX)
--#define VPC_VG11CONVOLVE (VPG_VG11 + VG11_CONVOLVE)
--#define VPC_VG11COPYIMAGE (VPG_VG11 + VG11_COPYIMAGE)
--#define VPC_VG11COPYMASK (VPG_VG11 + VG11_COPYMASK)
--#define VPC_VG11COPYPIXELS (VPG_VG11 + VG11_COPYPIXELS)
--#define VPC_VG11CREATEFONT (VPG_VG11 + VG11_CREATEFONT)
--#define VPC_VG11CREATEIMAGE (VPG_VG11 + VG11_CREATEIMAGE)
--#define VPC_VG11CREATEMASKLAYER (VPG_VG11 + VG11_CREATEMASKLAYER)
--#define VPC_VG11CREATEPAINT (VPG_VG11 + VG11_CREATEPAINT)
--#define VPC_VG11CREATEPATH (VPG_VG11 + VG11_CREATEPATH)
--#define VPC_VG11DESTROYFONT (VPG_VG11 + VG11_DESTROYFONT)
--#define VPC_VG11DESTROYIMAGE (VPG_VG11 + VG11_DESTROYIMAGE)
--#define VPC_VG11DESTROYMASKLAYER (VPG_VG11 + VG11_DESTROYMASKLAYER)
--#define VPC_VG11DESTROYPAINT (VPG_VG11 + VG11_DESTROYPAINT)
--#define VPC_VG11DESTROYPATH (VPG_VG11 + VG11_DESTROYPATH)
--#define VPC_VG11DRAWGLYPH (VPG_VG11 + VG11_DRAWGLYPH)
--#define VPC_VG11DRAWGLYPHS (VPG_VG11 + VG11_DRAWGLYPHS)
--#define VPC_VG11DRAWIMAGE (VPG_VG11 + VG11_DRAWIMAGE)
--#define VPC_VG11DRAWPATH (VPG_VG11 + VG11_DRAWPATH)
--#define VPC_VG11FILLMASKLAYER (VPG_VG11 + VG11_FILLMASKLAYER)
--#define VPC_VG11FINISH (VPG_VG11 + VG11_FINISH)
--#define VPC_VG11FLUSH (VPG_VG11 + VG11_FLUSH)
--#define VPC_VG11GAUSSIANBLUR (VPG_VG11 + VG11_GAUSSIANBLUR)
--#define VPC_VG11GETCOLOR (VPG_VG11 + VG11_GETCOLOR)
--#define VPC_VG11GETERROR (VPG_VG11 + VG11_GETERROR)
--#define VPC_VG11GETF (VPG_VG11 + VG11_GETF)
--#define VPC_VG11GETFV (VPG_VG11 + VG11_GETFV)
--#define VPC_VG11GETI (VPG_VG11 + VG11_GETI)
--#define VPC_VG11GETIMAGESUBDATA (VPG_VG11 + VG11_GETIMAGESUBDATA)
--#define VPC_VG11GETIV (VPG_VG11 + VG11_GETIV)
--#define VPC_VG11GETMATRIX (VPG_VG11 + VG11_GETMATRIX)
--#define VPC_VG11GETPAINT (VPG_VG11 + VG11_GETPAINT)
--#define VPC_VG11GETPARAMETERF (VPG_VG11 + VG11_GETPARAMETERF)
--#define VPC_VG11GETPARAMETERFV (VPG_VG11 + VG11_GETPARAMETERFV)
--#define VPC_VG11GETPARAMETERI (VPG_VG11 + VG11_GETPARAMETERI)
--#define VPC_VG11GETPARAMETERIV (VPG_VG11 + VG11_GETPARAMETERIV)
--#define VPC_VG11GETPARAMETERVECTORSIZE (VPG_VG11 + VG11_GETPARAMETERVECTORSIZE)
--#define VPC_VG11GETPARENT (VPG_VG11 + VG11_GETPARENT)
--#define VPC_VG11GETPATHCAPABILITIES (VPG_VG11 + VG11_GETPATHCAPABILITIES)
--#define VPC_VG11GETPIXELS (VPG_VG11 + VG11_GETPIXELS)
--#define VPC_VG11GETSTRING (VPG_VG11 + VG11_GETSTRING)
--#define VPC_VG11GETVECTORSIZE (VPG_VG11 + VG11_GETVECTORSIZE)
--#define VPC_VG11HARDWAREQUERY (VPG_VG11 + VG11_HARDWAREQUERY)
--#define VPC_VG11IMAGESUBDATA (VPG_VG11 + VG11_IMAGESUBDATA)
--#define VPC_VG11INTERPOLATEPATH (VPG_VG11 + VG11_INTERPOLATEPATH)
--#define VPC_VG11LOADIDENTITY (VPG_VG11 + VG11_LOADIDENTITY)
--#define VPC_VG11LOADMATRIX (VPG_VG11 + VG11_LOADMATRIX)
--#define VPC_VG11LOOKUP (VPG_VG11 + VG11_LOOKUP)
--#define VPC_VG11LOOKUPSINGLE (VPG_VG11 + VG11_LOOKUPSINGLE)
--#define VPC_VG11MASK (VPG_VG11 + VG11_MASK)
--#define VPC_VG11MODIFYPATHCOORDS (VPG_VG11 + VG11_MODIFYPATHCOORDS)
--#define VPC_VG11MULTMATRIX (VPG_VG11 + VG11_MULTMATRIX)
--#define VPC_VG11PAINTPATTERN (VPG_VG11 + VG11_PAINTPATTERN)
--#define VPC_VG11PATHBOUNDS (VPG_VG11 + VG11_PATHBOUNDS)
--#define VPC_VG11PATHLENGTH (VPG_VG11 + VG11_PATHLENGTH)
--#define VPC_VG11PATHTRANSFORMEDBOUNDS (VPG_VG11 + VG11_PATHTRANSFORMEDBOUNDS)
--#define VPC_VG11POINTALONGPATH (VPG_VG11 + VG11_POINTALONGPATH)
--#define VPC_VG11READPIXELS (VPG_VG11 + VG11_READPIXELS)
--#define VPC_VG11REMOVEPATHCAPABILITIES (VPG_VG11 + VG11_REMOVEPATHCAPABILITIES)
--#define VPC_VG11RENDERTOMASK (VPG_VG11 + VG11_RENDERTOMASK)
--#define VPC_VG11ROTATE (VPG_VG11 + VG11_ROTATE)
--#define VPC_VG11SCALE (VPG_VG11 + VG11_SCALE)
--#define VPC_VG11SEPARABLECONVOLVE (VPG_VG11 + VG11_SEPARABLECONVOLVE)
--#define VPC_VG11SETCOLOR (VPG_VG11 + VG11_SETCOLOR)
--#define VPC_VG11SETF (VPG_VG11 + VG11_SETF)
--#define VPC_VG11SETFV (VPG_VG11 + VG11_SETFV)
--#define VPC_VG11SETGLYPHTOIMAGE (VPG_VG11 + VG11_SETGLYPHTOIMAGE)
--#define VPC_VG11SETGLYPHTOPATH (VPG_VG11 + VG11_SETGLYPHTOPATH)
--#define VPC_VG11SETI (VPG_VG11 + VG11_SETI)
--#define VPC_VG11SETIV (VPG_VG11 + VG11_SETIV)
--#define VPC_VG11SETPAINT (VPG_VG11 + VG11_SETPAINT)
--#define VPC_VG11SETPARAMETERF (VPG_VG11 + VG11_SETPARAMETERF)
--#define VPC_VG11SETPARAMETERFV (VPG_VG11 + VG11_SETPARAMETERFV)
--#define VPC_VG11SETPARAMETERI (VPG_VG11 + VG11_SETPARAMETERI)
--#define VPC_VG11SETPARAMETERIV (VPG_VG11 + VG11_SETPARAMETERIV)
--#define VPC_VG11SETPIXELS (VPG_VG11 + VG11_SETPIXELS)
--#define VPC_VG11SHEAR (VPG_VG11 + VG11_SHEAR)
--#define VPC_VG11TRANSFORMPATH (VPG_VG11 + VG11_TRANSFORMPATH)
--#define VPC_VG11TRANSLATE (VPG_VG11 + VG11_TRANSLATE)
--#define VPC_VG11WRITEPIXELS (VPG_VG11 + VG11_WRITEPIXELS)
-+#define VPC_ES20CALLS (VPG_ES20 + ES20_CALLS)
-+#define VPC_ES20DRAWCALLS (VPG_ES20 + ES20_DRAWCALLS)
-+#define VPC_ES20STATECHANGECALLS (VPG_ES20 + ES20_STATECHANGECALLS)
-+#define VPC_ES20POINTCOUNT (VPG_ES20 + ES20_POINTCOUNT)
-+#define VPC_ES20LINECOUNT (VPG_ES20 + ES20_LINECOUNT)
-+#define VPC_ES20TRIANGLECOUNT (VPG_ES20 + ES20_TRIANGLECOUNT)
-+
- /* OpenVG Statistics Counter IDs. */
--#define VPC_VG11CALLS (VPG_VG11 + VG11_CALLS)
--#define VPC_VG11DRAWCALLS (VPG_VG11 + VG11_DRAWCALLS)
--#define VPC_VG11STATECHANGECALLS (VPG_VG11 + VG11_STATECHANGECALLS)
--#define VPC_VG11FILLCOUNT (VPG_VG11 + VG11_FILLCOUNT)
--#define VPC_VG11STROKECOUNT (VPG_VG11 + VG11_STROKECOUNT)
-+#define VPC_VG11CALLS (VPG_VG11 + VG11_CALLS)
-+#define VPC_VG11DRAWCALLS (VPG_VG11 + VG11_DRAWCALLS)
-+#define VPC_VG11STATECHANGECALLS (VPG_VG11 + VG11_STATECHANGECALLS)
-+#define VPC_VG11FILLCOUNT (VPG_VG11 + VG11_FILLCOUNT)
-+#define VPC_VG11STROKECOUNT (VPG_VG11 + VG11_STROKECOUNT)
-
- /* HAL Counters. */
- #define VPC_HALVERTBUFNEWBYTEALLOC (VPG_HAL + HAL_VERTBUFNEWBYTEALLOC)
-@@ -1018,7 +248,7 @@ extern "C" {
- #define VPC_GPUREAD64BYTE (VPG_GPU + GPU_READ64BYTE)
- #define VPC_GPUWRITE64BYTE (VPG_GPU + GPU_WRITE64BYTE)
- #define VPC_GPUTOTALCYCLES (VPG_GPU + GPU_TOTALCYCLES)
--#define VPC_GPUIDLECYCLES (VPG_GPU + GPU_IDLECYCLES)
-+#define VPC_GPUIDLECYCLES (VPG_GPU + GPU_IDLECYCLES)
-
- /* HW: Shader Counters. */
- #define VPC_VSINSTCOUNT (VPG_VS + VS_INSTCOUNT)
-@@ -1026,9 +256,9 @@ extern "C" {
- #define VPC_VSTEXLDINSTCOUNT (VPG_VS + VS_TEXLDINSTCOUNT)
- #define VPC_VSRENDEREDVERTCOUNT (VPG_VS + VS_RENDEREDVERTCOUNT)
- /* HW: PS Count. */
--#define VPC_PSINSTCOUNT (VPG_PS + PS_INSTCOUNT)
--#define VPC_PSBRANCHINSTCOUNT (VPG_PS + PS_BRANCHINSTCOUNT)
--#define VPC_PSTEXLDINSTCOUNT (VPG_PS + PS_TEXLDINSTCOUNT)
-+#define VPC_PSINSTCOUNT (VPG_PS + PS_INSTCOUNT)
-+#define VPC_PSBRANCHINSTCOUNT (VPG_PS + PS_BRANCHINSTCOUNT)
-+#define VPC_PSTEXLDINSTCOUNT (VPG_PS + PS_TEXLDINSTCOUNT)
- #define VPC_PSRENDEREDPIXCOUNT (VPG_PS + PS_RENDEREDPIXCOUNT)
-
-
-@@ -1071,7 +301,7 @@ extern "C" {
- #define VPC_PEDRAWNBYDEPTH (VPG_PE + PE_DRAWNBYDEPTH)
-
- /* HW: MC Counters. */
--#define VPC_MCREADREQ8BPIPE (VPG_MC + MC_READREQ8BPIPE)
-+#define VPC_MCREADREQ8BPIPE (VPG_MC + MC_READREQ8BPIPE)
- #define VPC_MCREADREQ8BIP (VPG_MC + MC_READREQ8BIP)
- #define VPC_MCWRITEREQ8BPIPE (VPG_MC + MC_WRITEREQ8BPIPE)
-
-@@ -1087,6 +317,7 @@ extern "C" {
- #define VPC_PVSATTRIBCOUNT (VPG_PVS + PVS_ATTRIBCOUNT)
- #define VPC_PVSUNIFORMCOUNT (VPG_PVS + PVS_UNIFORMCOUNT)
- #define VPC_PVSFUNCTIONCOUNT (VPG_PVS + PVS_FUNCTIONCOUNT)
-+#define VPC_PVSSOURCE (VPG_PVS + PVS_SOURCE)
-
- #define VPC_PPSINSTRCOUNT (VPG_PPS + PPS_INSTRCOUNT)
- #define VPC_PPSALUINSTRCOUNT (VPG_PPS + PPS_ALUINSTRCOUNT)
-@@ -1094,7 +325,9 @@ extern "C" {
- #define VPC_PPSATTRIBCOUNT (VPG_PPS + PPS_ATTRIBCOUNT)
- #define VPC_PPSUNIFORMCOUNT (VPG_PPS + PPS_UNIFORMCOUNT)
- #define VPC_PPSFUNCTIONCOUNT (VPG_PPS + PPS_FUNCTIONCOUNT)
-+#define VPC_PPSSOURCE (VPG_PPS + PPS_SOURCE)
-
-+#define VPC_PROGRAMHANDLE (VPG_PROG + 1)
-
- #define VPG_ES20_DRAW_NO (VPG_ES20_DRAW + 1)
- #define VPG_ES11_DRAW_NO (VPG_ES11_DRAW + 1)
-@@ -1118,8 +351,8 @@ typedef struct _gcsPROFILER_COUNTERS
-
- /* HW vairable counters. */
- gctUINT32 gpuCyclesCounter;
-- gctUINT32 gpuTotalCyclesCounter;
-- gctUINT32 gpuIdleCyclesCounter;
-+ gctUINT32 gpuTotalCyclesCounter;
-+ gctUINT32 gpuIdleCyclesCounter;
- gctUINT32 gpuTotalRead64BytesPerFrame;
- gctUINT32 gpuTotalWrite64BytesPerFrame;
-
-@@ -1158,7 +391,7 @@ typedef struct _gcsPROFILER_COUNTERS
- gctUINT32 ra_total_primitive_count;
- gctUINT32 ra_pipe_cache_miss_counter;
- gctUINT32 ra_prefetch_cache_miss_counter;
-- gctUINT32 ra_eez_culled_counter;
-+ gctUINT32 ra_eez_culled_counter;
-
- /* TX */
- gctUINT32 tx_total_bilinear_requests;
-@@ -1190,7 +423,7 @@ typedef struct _gcsPROFILER
- gctBOOL enableHal;
- gctBOOL enableHW;
- gctBOOL enableSH;
-- gctBOOL isSyncMode;
-+ gctBOOL isSyncMode;
-
- gctBOOL useSocket;
- gctINT sockFd;
-@@ -1234,14 +467,17 @@ typedef struct _gcsPROFILER
- gctUINT32 redundantStateChangeCalls;
- #endif
-
-- gctUINT32 prevVSInstCount;
-- gctUINT32 prevVSBranchInstCount;
-- gctUINT32 prevVSTexInstCount;
-- gctUINT32 prevVSVertexCount;
-- gctUINT32 prevPSInstCount;
-- gctUINT32 prevPSBranchInstCount;
-- gctUINT32 prevPSTexInstCount;
-- gctUINT32 prevPSPixelCount;
-+ gctUINT32 prevVSInstCount;
-+ gctUINT32 prevVSBranchInstCount;
-+ gctUINT32 prevVSTexInstCount;
-+ gctUINT32 prevVSVertexCount;
-+ gctUINT32 prevPSInstCount;
-+ gctUINT32 prevPSBranchInstCount;
-+ gctUINT32 prevPSTexInstCount;
-+ gctUINT32 prevPSPixelCount;
-+
-+ char* psSource;
-+ char* vsSource;
-
- }
- gcsPROFILER;
-@@ -1315,6 +551,18 @@ gcoPROFILER_Count(
- IN gctINT Value
- );
-
-+gceSTATUS
-+gcoPROFILER_ShaderSourceFS(
-+ IN gcoHAL Hal,
-+ IN char* source
-+ );
-+
-+gceSTATUS
-+gcoPROFILER_ShaderSourceVS(
-+ IN gcoHAL Hal,
-+ IN char* source
-+ );
-+
- /* Profile input vertex shader. */
- gceSTATUS
- gcoPROFILER_ShaderVS(
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
-index bc4171e..6e4d830 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
-@@ -568,6 +568,23 @@ gco2D_MonoBlit(
- IN gceSURF_FORMAT DestFormat
- );
-
-+gceSTATUS
-+gco2D_MonoBlitEx(
-+ IN gco2D Engine,
-+ IN gctPOINTER StreamBits,
-+ IN gctINT32 StreamStride,
-+ IN gctINT32 StreamWidth,
-+ IN gctINT32 StreamHeight,
-+ IN gctINT32 StreamX,
-+ IN gctINT32 StreamY,
-+ IN gctUINT32 FgColor,
-+ IN gctUINT32 BgColor,
-+ IN gcsRECT_PTR SrcRect,
-+ IN gcsRECT_PTR DstRect,
-+ IN gctUINT8 FgRop,
-+ IN gctUINT8 BgRop
-+ );
-+
- /* Set kernel size. */
- gceSTATUS
- gco2D_SetKernelSize(
-@@ -942,6 +959,15 @@ gco2D_SetSourceTileStatus(
- );
-
- gceSTATUS
-+gco2D_SetTargetTileStatus(
-+ IN gco2D Engine,
-+ IN gce2D_TILE_STATUS_CONFIG TileStatusConfig,
-+ IN gceSURF_FORMAT CompressedFormat,
-+ IN gctUINT32 ClearValue,
-+ IN gctUINT32 GpuAddress
-+ );
-+
-+gceSTATUS
- gco2D_QueryU32(
- IN gco2D Engine,
- IN gce2D_QUERY Item,
-@@ -955,6 +981,28 @@ gco2D_SetStateU32(
- IN gctUINT32 Value
- );
-
-+gceSTATUS
-+gco2D_SetStateArrayI32(
-+ IN gco2D Engine,
-+ IN gce2D_STATE State,
-+ IN gctINT32_PTR Array,
-+ IN gctINT32 ArraySize
-+ );
-+
-+gceSTATUS
-+gco2D_SetStateArrayU32(
-+ IN gco2D Engine,
-+ IN gce2D_STATE State,
-+ IN gctUINT32_PTR Array,
-+ IN gctINT32 ArraySize
-+ );
-+
-+gceSTATUS
-+gco2D_SetTargetRect(
-+ IN gco2D Engine,
-+ IN gcsRECT_PTR Rect
-+ );
-+
- #ifdef __cplusplus
- }
- #endif
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
-index 5c0877d..14801aa 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
-@@ -128,6 +128,7 @@ typedef int gctBOOL;
- typedef gctBOOL * gctBOOL_PTR;
-
- typedef int gctINT;
-+typedef long gctLONG;
- typedef signed char gctINT8;
- typedef signed short gctINT16;
- typedef signed int gctINT32;
-@@ -171,6 +172,7 @@ typedef void * gctFILE;
- typedef void * gctSIGNAL;
- typedef void * gctWINDOW;
- typedef void * gctIMAGE;
-+typedef void * gctSYNC_POINT;
-
- typedef void * gctSEMAPHORE;
-
-@@ -941,12 +943,19 @@ typedef struct _gcsHAL_FRAME_INFO
- OUT gctUINT readRequests[8];
- OUT gctUINT writeRequests[8];
-
-+ /* FE counters. */
-+ OUT gctUINT drawCount;
-+ OUT gctUINT vertexOutCount;
-+ OUT gctUINT vertexMissCount;
-+
- /* 3D counters. */
- OUT gctUINT vertexCount;
- OUT gctUINT primitiveCount;
- OUT gctUINT rejectedPrimitives;
- OUT gctUINT culledPrimitives;
- OUT gctUINT clippedPrimitives;
-+ OUT gctUINT droppedPrimitives;
-+ OUT gctUINT frustumClippedPrimitives;
- OUT gctUINT outPrimitives;
- OUT gctUINT inPrimitives;
- OUT gctUINT culledQuadCount;
-@@ -964,18 +973,86 @@ typedef struct _gcsHAL_FRAME_INFO
- OUT gctUINT shaderCycles;
- OUT gctUINT vsInstructionCount;
- OUT gctUINT vsTextureCount;
-+ OUT gctUINT vsBranchCount;
-+ OUT gctUINT vsVertices;
- OUT gctUINT psInstructionCount;
- OUT gctUINT psTextureCount;
-+ OUT gctUINT psBranchCount;
-+ OUT gctUINT psPixels;
-
- /* Texture counters. */
- OUT gctUINT bilinearRequests;
- OUT gctUINT trilinearRequests;
-- OUT gctUINT txBytes8;
-+ OUT gctUINT txBytes8[2];
- OUT gctUINT txHitCount;
- OUT gctUINT txMissCount;
- }
- gcsHAL_FRAME_INFO;
-
-+typedef enum _gcePATCH_ID
-+{
-+ gcePATCH_UNKNOWN = 0xFFFFFFFF,
-+
-+ /* Benchmark list*/
-+ gcePATCH_GLB11 = 0x0,
-+ gcePATCH_GLB21,
-+ gcePATCH_GLB25,
-+ gcePATCH_GLB27,
-+
-+ gcePATCH_BM21,
-+ gcePATCH_MM,
-+ gcePATCH_MM06,
-+ gcePATCH_MM07,
-+ gcePATCH_QUADRANT,
-+ gcePATCH_ANTUTU,
-+ gcePATCH_SMARTBENCH,
-+ gcePATCH_JPCT,
-+ gcePATCH_NENAMARK,
-+ gcePATCH_NENAMARK2,
-+ gcePATCH_NEOCORE,
-+ gcePATCH_GLB,
-+ gcePATCH_GB,
-+ gcePATCH_RTESTVA,
-+ gcePATCH_BMX,
-+ gcePATCH_BMGUI,
-+
-+ /* Game list */
-+ gcePATCH_NBA2013,
-+ gcePATCH_BARDTALE,
-+ gcePATCH_BUSPARKING3D,
-+ gcePATCH_FISHBOODLE,
-+ gcePATCH_SUBWAYSURFER,
-+ gcePATCH_HIGHWAYDRIVER,
-+ gcePATCH_PREMIUM,
-+ gcePATCH_RACEILLEGAL,
-+ gcePATCH_BLABLA,
-+ gcePATCH_MEGARUN,
-+ gcePATCH_GALAXYONFIRE2,
-+ gcePATCH_GLOFTR3HM,
-+ gcePATCH_GLOFTSXHM,
-+ gcePATCH_GLOFTF3HM,
-+ gcePATCH_GLOFTGANG,
-+ gcePATCH_XRUNNER,
-+ gcePATCH_WP,
-+ gcePATCH_DEVIL,
-+ gcePATCH_HOLYARCH,
-+ gcePATCH_MUSE,
-+ gcePATCH_SG,
-+ gcePATCH_SIEGECRAFT,
-+ gcePATCH_CARCHALLENGE,
-+ gcePATCH_HEROESCALL,
-+ gcePATCH_MONOPOLY,
-+ gcePATCH_CTGL20,
-+ gcePATCH_FIREFOX,
-+ gcePATCH_CHORME,
-+ gcePATCH_DUOKANTV,
-+ gcePATCH_TESTAPP,
-+
-+ /* Count enum*/
-+ gcePATCH_COUNT,
-+}
-+gcePATCH_ID;
-+
- #if gcdLINK_QUEUE_SIZE
- typedef struct _gckLINKDATA * gckLINKDATA;
- struct _gckLINKDATA
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
-index 03cb4d6..2eab666 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
-@@ -28,7 +28,7 @@
-
- #define gcvVERSION_PATCH 9
-
--#define gcvVERSION_BUILD 6622
-+#define gcvVERSION_BUILD 9754
-
- #define gcvVERSION_DATE __DATE__
-
-diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
-index 4d48bd5..b029428 100644
---- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
-+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
-@@ -25,7 +25,9 @@
- #include <linux/mm.h>
- #include <linux/mman.h>
- #include <linux/slab.h>
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
- #include <mach/hardware.h>
-+#endif
- #include <linux/pm_runtime.h>
-
- #define _GC_OBJ_ZONE gcvZONE_DEVICE
-@@ -305,6 +307,7 @@ gckGALDEVICE_Construct(
- IN gctUINT LogFileSize,
- IN struct device *pdev,
- IN gctINT PowerManagement,
-+ IN gctINT GpuProfiler,
- OUT gckGALDEVICE *Device
- )
- {
-@@ -369,6 +372,10 @@ gckGALDEVICE_Construct(
- #if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
- /*get gpu regulator*/
- device->gpu_regulator = regulator_get(pdev, "cpu_vddgpu");
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+ device->gpu_regulator = regulator_get(pdev, "vddpu");
-+#endif
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
- if (IS_ERR(device->gpu_regulator)) {
- gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): Failed to get gpu regulator %s/%s \n",
-@@ -541,6 +548,10 @@ gckGALDEVICE_Construct(
- device->kernels[gcvCORE_MAJOR]->hardware, PowerManagement
- ));
-
-+ gcmkONERROR(gckHARDWARE_SetGpuProfiler(
-+ device->kernels[gcvCORE_MAJOR]->hardware, GpuProfiler
-+ ));
-+
- #if COMMAND_PROCESSOR_VERSION == 1
- /* Start the command queue. */
- gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_MAJOR]->command));
-@@ -599,6 +610,7 @@ gckGALDEVICE_Construct(
- device->kernels[gcvCORE_2D]->hardware, PowerManagement
- ));
-
-+
- #if COMMAND_PROCESSOR_VERSION == 1
- /* Start the command queue. */
- gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_2D]->command));
-@@ -635,6 +647,7 @@ gckGALDEVICE_Construct(
- device->kernels[gcvCORE_VG]->vg->hardware,
- PowerManagement
- ));
-+
- #endif
- }
- else
-@@ -849,6 +862,7 @@ gckGALDEVICE_Construct(
- }
- else
- {
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
- mem_region = request_mem_region(
- ContiguousBase, ContiguousSize, "galcore managed memory"
- );
-@@ -864,6 +878,7 @@ gckGALDEVICE_Construct(
-
- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
- }
-+#endif
-
- device->requestedContiguousBase = ContiguousBase;
- device->requestedContiguousSize = ContiguousSize;
-@@ -1107,7 +1122,7 @@ gckGALDEVICE_Destroy(
- pm_runtime_disable(Device->pmdev);
- #endif
-
--#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
- if (Device->gpu_regulator) {
- regulator_put(Device->gpu_regulator);
- Device->gpu_regulator = NULL;
-diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
-index dde4f03..c51432f 100644
---- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
-+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
-@@ -26,6 +26,15 @@
- ******************************* gckGALDEVICE Structure *******************************
- \******************************************************************************/
-
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+struct contiguous_mem_pool {
-+ struct dma_attrs attrs;
-+ dma_addr_t phys;
-+ void *virt;
-+ size_t size;
-+};
-+#endif
-+
- typedef struct _gckGALDEVICE
- {
- /* Objects. */
-@@ -91,12 +100,16 @@ typedef struct _gckGALDEVICE
- struct clk *clk_2d_axi;
- struct clk *clk_vg_axi;
-
--#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
- /*Power management.*/
- struct regulator *gpu_regulator;
- #endif
- /*Run time pm*/
- struct device *pmdev;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+ struct contiguous_mem_pool *pool;
-+ struct reset_control *rstc[gcdMAX_GPU_COUNT];
-+#endif
- }
- * gckGALDEVICE;
-
-@@ -171,6 +184,7 @@ gceSTATUS gckGALDEVICE_Construct(
- IN gctUINT LogFileSize,
- IN struct device *pdev,
- IN gctINT PowerManagement,
-+ IN gctINT GpuProfiler,
- OUT gckGALDEVICE *Device
- );
-
-diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
-index bacd531..88a7e4e6 100644
---- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
-+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
-@@ -1,7 +1,7 @@
- /****************************************************************************
- *
- * Copyright (C) 2005 - 2013 by Vivante Corp.
--* Copyright (C) 2011-2012 Freescale Semiconductor, Inc.
-+* Copyright (C) 2011-2013 Freescale Semiconductor, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
-@@ -69,14 +69,26 @@ task_notify_func(struct notifier_block *self, unsigned long val, void *data)
- #include <mach/viv_gpu.h>
- #else
- #include <linux/pm_runtime.h>
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
- #include <mach/busfreq.h>
-+#else
-+#include <linux/reset.h>
-+#endif
- #endif
- /* Zone used for header/footer. */
- #define _GC_OBJ_ZONE gcvZONE_DRIVER
-
- #if gcdENABLE_FSCALE_VAL_ADJUST
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+#include <linux/device_cooling.h>
-+#define REG_THERMAL_NOTIFIER(a) register_devfreq_cooling_notifier(a);
-+#define UNREG_THERMAL_NOTIFIER(a) unregister_devfreq_cooling_notifier(a);
-+#else
- extern int register_thermal_notifier(struct notifier_block *nb);
- extern int unregister_thermal_notifier(struct notifier_block *nb);
-+#define REG_THERMAL_NOTIFIER(a) register_thermal_notifier(a);
-+#define UNREG_THERMAL_NOTIFIER(a) unregister_thermal_notifier(a);
-+#endif
- #endif
-
- MODULE_DESCRIPTION("Vivante Graphics Driver");
-@@ -116,7 +128,11 @@ module_param(registerMemBaseVG, ulong, 0644);
- static ulong registerMemSizeVG = 2 << 10;
- module_param(registerMemSizeVG, ulong, 0644);
-
-+#if gcdENABLE_FSCALE_VAL_ADJUST
-+static ulong contiguousSize = 128 << 20;
-+#else
- static ulong contiguousSize = 4 << 20;
-+#endif
- module_param(contiguousSize, ulong, 0644);
-
- static ulong contiguousBase = 0;
-@@ -134,6 +150,9 @@ module_param(compression, int, 0644);
- static int powerManagement = 1;
- module_param(powerManagement, int, 0644);
-
-+static int gpuProfiler = 0;
-+module_param(gpuProfiler, int, 0644);
-+
- static int signal = 48;
- module_param(signal, int, 0644);
-
-@@ -786,7 +805,9 @@ static int drv_init(struct device *pdev)
-
- printk(KERN_INFO "Galcore version %d.%d.%d.%d\n",
- gcvVERSION_MAJOR, gcvVERSION_MINOR, gcvVERSION_PATCH, gcvVERSION_BUILD);
--
-+ /* when enable gpu profiler, we need to turn off gpu powerMangement */
-+ if(gpuProfiler)
-+ powerManagement = 0;
- if (showArgs)
- {
- printk("galcore options:\n");
-@@ -818,6 +839,7 @@ static int drv_init(struct device *pdev)
- printk(" physSize = 0x%08lX\n", physSize);
- printk(" logFileSize = %d KB \n", logFileSize);
- printk(" powerManagement = %d\n", powerManagement);
-+ printk(" gpuProfiler = %d\n", gpuProfiler);
- #if ENABLE_GPU_CLOCK_BY_DRIVER
- printk(" coreClock = %lu\n", coreClock);
- #endif
-@@ -841,9 +863,14 @@ static int drv_init(struct device *pdev)
- logFileSize,
- pdev,
- powerManagement,
-+ gpuProfiler,
- &device
- ));
-
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+ device->pool = dev_get_drvdata(pdev);
-+#endif
-+
- /* Start the GAL device. */
- gcmkONERROR(gckGALDEVICE_Start(device));
-
-@@ -1028,11 +1055,18 @@ static struct notifier_block thermal_hot_pm_notifier = {
-
-
-
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
-+static int gpu_probe(struct platform_device *pdev)
-+#else
- static int __devinit gpu_probe(struct platform_device *pdev)
-+#endif
- {
- int ret = -ENODEV;
- struct resource* res;
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+ struct contiguous_mem_pool *pool;
-+ struct reset_control *rstc;
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
- struct device_node *dn =pdev->dev.of_node;
- const u32 *prop;
- #else
-@@ -1077,7 +1111,22 @@ static int __devinit gpu_probe(struct platform_device *pdev)
- registerMemSizeVG = res->end - res->start + 1;
- }
-
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+ pool = devm_kzalloc(&pdev->dev, sizeof(*pool), GFP_KERNEL);
-+ if (!pool)
-+ return -ENOMEM;
-+ pool->size = contiguousSize;
-+ init_dma_attrs(&pool->attrs);
-+ dma_set_attr(DMA_ATTR_WRITE_COMBINE, &pool->attrs);
-+ pool->virt = dma_alloc_attrs(&pdev->dev, pool->size, &pool->phys,
-+ GFP_KERNEL, &pool->attrs);
-+ if (!pool->virt) {
-+ dev_err(&pdev->dev, "Failed to allocate contiguous memory\n");
-+ return -ENOMEM;
-+ }
-+ contiguousBase = pool->phys;
-+ dev_set_drvdata(&pdev->dev, pool);
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
- prop = of_get_property(dn, "contiguousbase", NULL);
- if(prop)
- contiguousBase = *prop;
-@@ -1095,30 +1144,56 @@ static int __devinit gpu_probe(struct platform_device *pdev)
-
- if (!ret)
- {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+ rstc = devm_reset_control_get(&pdev->dev, "gpu3d");
-+ galDevice->rstc[gcvCORE_MAJOR] = IS_ERR(rstc) ? NULL : rstc;
-+
-+ rstc = devm_reset_control_get(&pdev->dev, "gpu2d");
-+ galDevice->rstc[gcvCORE_2D] = IS_ERR(rstc) ? NULL : rstc;
-+
-+ rstc = devm_reset_control_get(&pdev->dev, "gpuvg");
-+ galDevice->rstc[gcvCORE_VG] = IS_ERR(rstc) ? NULL : rstc;
-+#endif
- platform_set_drvdata(pdev, galDevice);
-
- #if gcdENABLE_FSCALE_VAL_ADJUST
-- if(galDevice->kernels[gcvCORE_MAJOR])
-- register_thermal_notifier(&thermal_hot_pm_notifier);
-+ if (galDevice->kernels[gcvCORE_MAJOR])
-+ REG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
- #endif
- gcmkFOOTER_NO();
- return ret;
- }
- #if gcdENABLE_FSCALE_VAL_ADJUST
-- unregister_thermal_notifier(&thermal_hot_pm_notifier);
-+ UNREG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+ dma_free_attrs(&pdev->dev, pool->size, pool->virt, pool->phys,
-+ &pool->attrs);
- #endif
- gcmkFOOTER_ARG(KERN_INFO "Failed to register gpu driver: %d\n", ret);
- return ret;
- }
-
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
-+static int gpu_remove(struct platform_device *pdev)
-+#else
- static int __devexit gpu_remove(struct platform_device *pdev)
-+#endif
- {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+ gckGALDEVICE device = platform_get_drvdata(pdev);
-+ struct contiguous_mem_pool *pool = device->pool;
-+#endif
- gcmkHEADER();
- #if gcdENABLE_FSCALE_VAL_ADJUST
- if(galDevice->kernels[gcvCORE_MAJOR])
-- unregister_thermal_notifier(&thermal_hot_pm_notifier);
-+ UNREG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
- #endif
- drv_exit();
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+ dma_free_attrs(&pdev->dev, pool->size, pool->virt, pool->phys,
-+ &pool->attrs);
-+#endif
- gcmkFOOTER_NO();
- return 0;
- }
-@@ -1254,13 +1329,17 @@ MODULE_DEVICE_TABLE(of, mxs_gpu_dt_ids);
- #ifdef CONFIG_PM
- static int gpu_runtime_suspend(struct device *dev)
- {
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
- release_bus_freq(BUS_FREQ_HIGH);
-+#endif
- return 0;
- }
-
- static int gpu_runtime_resume(struct device *dev)
- {
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
- request_bus_freq(BUS_FREQ_HIGH);
-+#endif
- return 0;
- }
-
-@@ -1284,7 +1363,11 @@ static const struct dev_pm_ops gpu_pm_ops = {
-
- static struct platform_driver gpu_driver = {
- .probe = gpu_probe,
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
-+ .remove = gpu_remove,
-+#else
- .remove = __devexit_p(gpu_remove),
-+#endif
-
- .suspend = gpu_suspend,
- .resume = gpu_resume,
-diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
-index e7edc39..331c73f 100644
---- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
-+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
-@@ -30,19 +30,30 @@
- #include <linux/dma-mapping.h>
- #include <linux/slab.h>
- #include <linux/idr.h>
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
- #include <mach/hardware.h>
-+#endif
- #include <linux/workqueue.h>
- #include <linux/idr.h>
- #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,23)
- #include <linux/math64.h>
- #endif
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+#include <linux/reset.h>
-+static inline void imx_gpc_power_up_pu(bool flag) {}
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
- #include <mach/common.h>
- #endif
- #include <linux/delay.h>
- #include <linux/pm_runtime.h>
-
-
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+#include <linux/file.h>
-+#include "gc_hal_kernel_sync.h"
-+#endif
-+
-+
- #define _GC_OBJ_ZONE gcvZONE_OS
-
- /*******************************************************************************
-@@ -148,6 +159,7 @@ typedef struct _gcsINTEGER_DB
- {
- struct idr idr;
- spinlock_t lock;
-+ gctINT curr;
- }
- gcsINTEGER_DB;
-
-@@ -180,6 +192,14 @@ struct _gckOS
- /* signal id database. */
- gcsINTEGER_DB signalDB;
-
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+ /* Lock. */
-+ gctPOINTER syncPointMutex;
-+
-+ /* sync point id database. */
-+ gcsINTEGER_DB syncPointDB;
-+#endif
-+
- gcsUSER_MAPPING_PTR userMap;
- gctPOINTER debugLock;
-
-@@ -215,6 +235,25 @@ typedef struct _gcsSIGNAL
- }
- gcsSIGNAL;
-
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+typedef struct _gcsSYNC_POINT * gcsSYNC_POINT_PTR;
-+typedef struct _gcsSYNC_POINT
-+{
-+ /* The reference counter. */
-+ atomic_t ref;
-+
-+ /* State. */
-+ atomic_t state;
-+
-+ /* timeline. */
-+ struct sync_timeline * timeline;
-+
-+ /* ID. */
-+ gctUINT32 id;
-+}
-+gcsSYNC_POINT;
-+#endif
-+
- typedef struct _gcsPageInfo * gcsPageInfo_PTR;
- typedef struct _gcsPageInfo
- {
-@@ -767,7 +806,32 @@ _AllocateIntegerId(
- )
- {
- int result;
-+ gctINT next;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
-+ idr_preload(GFP_KERNEL | gcdNOWARN);
-
-+ spin_lock(&Database->lock);
-+
-+ next = (Database->curr + 1 <= 0) ? 1 : Database->curr + 1;
-+ result = idr_alloc(&Database->idr, KernelPointer, next, 0, GFP_ATOMIC);
-+
-+ if (!result)
-+ {
-+ Database->curr = *Id;
-+ }
-+
-+ spin_unlock(&Database->lock);
-+
-+ idr_preload_end();
-+
-+ if (result < 0)
-+ {
-+ return gcvSTATUS_OUT_OF_RESOURCES;
-+ }
-+
-+ *Id = result;
-+#else
- again:
- if (idr_pre_get(&Database->idr, GFP_KERNEL | gcdNOWARN) == 0)
- {
-@@ -776,8 +840,15 @@ again:
-
- spin_lock(&Database->lock);
-
-- /* Try to get a id greater than 0. */
-- result = idr_get_new_above(&Database->idr, KernelPointer, 1, Id);
-+ next = (Database->curr + 1 <= 0) ? 1 : Database->curr + 1;
-+
-+ /* Try to get a id greater than current id. */
-+ result = idr_get_new_above(&Database->idr, KernelPointer, next, Id);
-+
-+ if (!result)
-+ {
-+ Database->curr = *Id;
-+ }
-
- spin_unlock(&Database->lock);
-
-@@ -790,6 +861,7 @@ again:
- {
- return gcvSTATUS_OUT_OF_RESOURCES;
- }
-+#endif
-
- return gcvSTATUS_OK;
- }
-@@ -1008,6 +1080,21 @@ gckOS_Construct(
- /* Initialize signal id database. */
- idr_init(&os->signalDB.idr);
-
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+ /*
-+ * Initialize the sync point manager.
-+ */
-+
-+ /* Initialize mutex. */
-+ gcmkONERROR(gckOS_CreateMutex(os, &os->syncPointMutex));
-+
-+ /* Initialize sync point id database lock. */
-+ spin_lock_init(&os->syncPointDB.lock);
-+
-+ /* Initialize sync point id database. */
-+ idr_init(&os->syncPointDB.idr);
-+#endif
-+
- #if gcdUSE_NON_PAGED_MEMORY_CACHE
- os->cacheSize = 0;
- os->cacheHead = gcvNULL;
-@@ -1031,6 +1118,15 @@ gckOS_Construct(
- return gcvSTATUS_OK;
-
- OnError:
-+
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+ if (os->syncPointMutex != gcvNULL)
-+ {
-+ gcmkVERIFY_OK(
-+ gckOS_DeleteMutex(os, os->syncPointMutex));
-+ }
-+#endif
-+
- if (os->signalMutex != gcvNULL)
- {
- gcmkVERIFY_OK(
-@@ -1104,6 +1200,15 @@ gckOS_Destroy(
- _FreeAllNonPagedMemoryCache(Os);
- #endif
-
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+ /*
-+ * Destroy the sync point manager.
-+ */
-+
-+ /* Destroy the mutex. */
-+ gcmkVERIFY_OK(gckOS_DeleteMutex(Os, Os->syncPointMutex));
-+#endif
-+
- /*
- * Destroy the signal manager.
- */
-@@ -1961,12 +2066,6 @@ gckOS_AllocateNonPagedMemory(
- gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
- }
-
-- if ((Os->device->baseAddress & 0x80000000) != (mdl->dmaHandle & 0x80000000))
-- {
-- mdl->dmaHandle = (mdl->dmaHandle & ~0x80000000)
-- | (Os->device->baseAddress & 0x80000000);
-- }
--
- mdl->addr = addr;
-
- /* Return allocated memory. */
-@@ -2307,6 +2406,7 @@ gckOS_ReadRegisterEx(
-
- /* Verify the arguments. */
- gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-+ gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
- gcmkVERIFY_ARGUMENT(Data != gcvNULL);
-
- *Data = readl((gctUINT8 *)Os->device->registerBases[Core] + Address);
-@@ -2357,6 +2457,8 @@ gckOS_WriteRegisterEx(
- {
- gcmkHEADER_ARG("Os=0x%X Core=%d Address=0x%X Data=0x%08x", Os, Core, Address, Data);
-
-+ gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
-+
- writel(Data, (gctUINT8 *)Os->device->registerBases[Core] + Address);
-
- /* Success. */
-@@ -2799,16 +2901,25 @@ gckOS_MapPhysical(
-
- if (mdl == gcvNULL)
- {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+ struct contiguous_mem_pool *pool = Os->device->pool;
-+
-+ if (Physical >= pool->phys && Physical < pool->phys + pool->size)
-+ logical = (gctPOINTER)(Physical - pool->phys + pool->virt);
-+ else
-+ logical = gcvNULL;
-+#else
- /* Map memory as cached memory. */
- request_mem_region(physical, Bytes, "MapRegion");
- logical = (gctPOINTER) ioremap_nocache(physical, Bytes);
-+#endif
-
- if (logical == gcvNULL)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_INFO, gcvZONE_OS,
-- "%s(%d): Failed to ioremap",
-- __FUNCTION__, __LINE__
-+ "%s(%d): Failed to map physical address 0x%08x",
-+ __FUNCTION__, __LINE__, Physical
- );
-
- MEMORY_UNLOCK(Os);
-@@ -3621,7 +3732,7 @@ gckOS_Delay(
- if (Delay > 0)
- {
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28)
-- ktime_t delay = ktime_set(0, Delay * NSEC_PER_MSEC);
-+ ktime_t delay = ktime_set(Delay/1000, (Delay%1000) * NSEC_PER_MSEC);
- __set_current_state(TASK_UNINTERRUPTIBLE);
- schedule_hrtimeout(&delay, HRTIMER_MODE_REL);
- #else
-@@ -3881,8 +3992,13 @@ gckOS_AllocatePagedMemoryEx(
-
- if (Contiguous)
- {
-- /* Get contiguous pages, and suppress warning (stack dump) from kernel when
-- we run out of memory. */
-+ gctUINT32 order = get_order(bytes);
-+
-+ if (order >= MAX_ORDER)
-+ {
-+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
-+ }
-+
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
- addr =
- alloc_pages_exact(numPages * PAGE_SIZE, GFP_KERNEL | gcdNOWARN | __GFP_NORETRY);
-@@ -3894,12 +4010,12 @@ gckOS_AllocatePagedMemoryEx(
- mdl->exact = gcvTRUE;
- #else
- mdl->u.contiguousPages =
-- alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, GetOrder(numPages));
-+ alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, order);
- #endif
- if (mdl->u.contiguousPages == gcvNULL)
- {
- mdl->u.contiguousPages =
-- alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, GetOrder(numPages));
-+ alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, order);
-
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
- mdl->exact = gcvFALSE;
-@@ -4239,13 +4355,13 @@ gckOS_LockPages(
- }
-
- mdlMap->vma->vm_flags |= gcdVM_FLAGS;
--#if !gcdPAGED_MEMORY_CACHEABLE
-+
- if (Cacheable == gcvFALSE)
- {
- /* Make this mapping non-cached. */
- mdlMap->vma->vm_page_prot = gcmkPAGED_MEMROY_PROT(mdlMap->vma->vm_page_prot);
- }
--#endif
-+
- addr = mdl->addr;
-
- /* Now map all the vmalloc pages to this user address. */
-@@ -5336,6 +5452,7 @@ OnError:
- {
- /* Get the user pages. */
- down_read(¤t->mm->mmap_sem);
-+
- result = get_user_pages(current,
- current->mm,
- memory & PAGE_MASK,
-@@ -5345,105 +5462,127 @@ OnError:
- pages,
- gcvNULL
- );
-+
- up_read(¤t->mm->mmap_sem);
-
- if (result <=0 || result < pageCount)
- {
- struct vm_area_struct *vma;
-
-- /* Free the page table. */
-- if (pages != gcvNULL)
-+ /* Release the pages if any. */
-+ if (result > 0)
- {
-- /* Release the pages if any. */
-- if (result > 0)
-+ for (i = 0; i < result; i++)
- {
-- for (i = 0; i < result; i++)
-+ if (pages[i] == gcvNULL)
- {
-- if (pages[i] == gcvNULL)
-- {
-- break;
-- }
--
-- page_cache_release(pages[i]);
-+ break;
- }
-+
-+ page_cache_release(pages[i]);
-+ pages[i] = gcvNULL;
- }
-
-- kfree(pages);
-- pages = gcvNULL;
-+ result = 0;
- }
-
- vma = find_vma(current->mm, memory);
-
-- if (vma && (vma->vm_flags & VM_PFNMAP) )
-+ if (vma && (vma->vm_flags & VM_PFNMAP))
- {
- pte_t * pte;
- spinlock_t * ptl;
-- unsigned long pfn;
-+ gctUINTPTR_T logical = memory;
-
-- pgd_t * pgd = pgd_offset(current->mm, memory);
-- pud_t * pud = pud_offset(pgd, memory);
-- if (pud)
-+ for (i = 0; i < pageCount; i++)
- {
-- pmd_t * pmd = pmd_offset(pud, memory);
-- pte = pte_offset_map_lock(current->mm, pmd, memory, &ptl);
-- if (!pte)
-+ pgd_t * pgd = pgd_offset(current->mm, logical);
-+ pud_t * pud = pud_offset(pgd, logical);
-+
-+ if (pud)
-+ {
-+ pmd_t * pmd = pmd_offset(pud, logical);
-+ pte = pte_offset_map_lock(current->mm, pmd, logical, &ptl);
-+ if (!pte)
-+ {
-+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
-+ }
-+ }
-+ else
- {
- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
- }
-+
-+ pages[i] = pte_page(*pte);
-+ pte_unmap_unlock(pte, ptl);
-+
-+ /* Advance to next. */
-+ logical += PAGE_SIZE;
- }
-- else
-+ }
-+ else
-+ {
-+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
-+ }
-+
-+ /* Check if this memory is contiguous for old mmu. */
-+ if (Os->device->kernels[Core]->hardware->mmuVersion == 0)
-+ {
-+ for (i = 1; i < pageCount; i++)
- {
-- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
-+ if (pages[i] != nth_page(pages[0], i))
-+ {
-+ /* Non-contiguous. */
-+ break;
-+ }
- }
-
-- pfn = pte_pfn(*pte);
--
-- physical = (pfn << PAGE_SHIFT) | (memory & ~PAGE_MASK);
-+ if (i == pageCount)
-+ {
-+ /* Contiguous memory. */
-+ physical = page_to_phys(pages[0]) | (memory & ~PAGE_MASK);
-
-- pte_unmap_unlock(pte, ptl);
-+ if (!((physical - Os->device->baseAddress) & 0x80000000))
-+ {
-+ kfree(pages);
-+ pages = gcvNULL;
-
-- if ((Os->device->kernels[Core]->hardware->mmuVersion == 0)
-- && !((physical - Os->device->baseAddress) & 0x80000000))
-- {
-- info->pages = gcvNULL;
-- info->pageTable = gcvNULL;
-+ info->pages = gcvNULL;
-+ info->pageTable = gcvNULL;
-
-- MEMORY_MAP_UNLOCK(Os);
-+ MEMORY_MAP_UNLOCK(Os);
-
-- *Address = physical - Os->device->baseAddress;
-- *Info = info;
-+ *Address = physical - Os->device->baseAddress;
-+ *Info = info;
-
-- gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x",
-- *Info, *Address);
-+ gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x",
-+ *Info, *Address);
-
-- return gcvSTATUS_OK;
-+ return gcvSTATUS_OK;
-+ }
- }
- }
-- else
-+
-+ /* Reference pages. */
-+ for (i = 0; i < pageCount; i++)
- {
-- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
-+ get_page(pages[i]);
- }
- }
- }
-
-- if (pages)
-- {
-- for (i = 0; i < pageCount; i++)
-- {
-- /* Flush(clean) the data cache. */
-- gcmkONERROR(gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
-- (gctPOINTER)(gctUINTPTR_T)page_to_phys(pages[i]),
-- (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE,
-- PAGE_SIZE));
-- }
-- }
-- else
-+ for (i = 0; i < pageCount; i++)
- {
-+#ifdef CONFIG_ARM
-+ gctUINT32 data;
-+ get_user(data, (gctUINT32*)((memory & PAGE_MASK) + i * PAGE_SIZE));
-+#endif
-+
- /* Flush(clean) the data cache. */
- gcmkONERROR(gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
-- (gctPOINTER)(gctUINTPTR_T)(physical & PAGE_MASK),
-- (gctPOINTER)(memory & PAGE_MASK),
-- PAGE_SIZE * pageCount));
-+ (gctPOINTER)(gctUINTPTR_T)page_to_phys(pages[i]),
-+ (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE,
-+ PAGE_SIZE));
- }
-
- #if gcdENABLE_VG
-@@ -5464,20 +5603,14 @@ OnError:
- (gctPOINTER *) &pageTable,
- &address));
- }
-+
- /* Fill the page table. */
- for (i = 0; i < pageCount; i++)
- {
- gctUINT32 phys;
- gctUINT32_PTR tab = pageTable + i * (PAGE_SIZE/4096);
-
-- if (pages)
-- {
-- phys = page_to_phys(pages[i]);
-- }
-- else
-- {
-- phys = (physical & PAGE_MASK) + i * PAGE_SIZE;
-- }
-+ phys = page_to_phys(pages[i]);
-
- #if gcdENABLE_VG
- if (Core == gcvCORE_VG)
-@@ -6126,7 +6259,7 @@ gckOS_CacheClean(
- #else
- dma_sync_single_for_device(
- gcvNULL,
-- Physical,
-+ (dma_addr_t)Physical,
- Bytes,
- DMA_TO_DEVICE);
- #endif
-@@ -6205,7 +6338,7 @@ gckOS_CacheInvalidate(
- #else
- dma_sync_single_for_device(
- gcvNULL,
-- Physical,
-+ (dma_addr_t)Physical,
- Bytes,
- DMA_FROM_DEVICE);
- #endif
-@@ -6279,7 +6412,7 @@ gckOS_CacheFlush(
- #else
- dma_sync_single_for_device(
- gcvNULL,
-- Physical,
-+ (dma_addr_t)Physical,
- Bytes,
- DMA_BIDIRECTIONAL);
- #endif
-@@ -6827,6 +6960,9 @@ gckOS_SetGPUPower(
- struct clk *clk_2dcore = Os->device->clk_2d_core;
- struct clk *clk_2d_axi = Os->device->clk_2d_axi;
- struct clk *clk_vg_axi = Os->device->clk_vg_axi;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+ int ret;
-+#endif
-
- gctBOOL oldClockState = gcvFALSE;
- gctBOOL oldPowerState = gcvFALSE;
-@@ -6852,9 +6988,13 @@ gckOS_SetGPUPower(
- }
- if((Power == gcvTRUE) && (oldPowerState == gcvFALSE))
- {
--#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
-- if(!IS_ERR(Os->device->gpu_regulator))
-- regulator_enable(Os->device->gpu_regulator);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+ if(!IS_ERR(Os->device->gpu_regulator)) {
-+ ret = regulator_enable(Os->device->gpu_regulator);
-+ if (ret != 0)
-+ gckOS_Print("%s(%d): fail to enable pu regulator %d!\n",
-+ __FUNCTION__, __LINE__, ret);
-+ }
- #else
- imx_gpc_power_up_pu(true);
- #endif
-@@ -6969,7 +7109,7 @@ gckOS_SetGPUPower(
- pm_runtime_put_sync(Os->device->pmdev);
- #endif
-
--#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
- if(!IS_ERR(Os->device->gpu_regulator))
- regulator_disable(Os->device->gpu_regulator);
- #else
-@@ -7033,6 +7173,10 @@ gckOS_ResetGPU(
- }
-
- gcmkFOOTER_NO();
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+ struct reset_control *rstc = Os->device->rstc[Core];
-+ if (rstc)
-+ reset_control_reset(rstc);
- #else
- imx_src_reset_gpu((int)Core);
- #endif
-@@ -8529,3 +8673,338 @@ gckOS_GetProcessNameByPid(
- return gcvSTATUS_OK;
- }
-
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+
-+gceSTATUS
-+gckOS_CreateSyncPoint(
-+ IN gckOS Os,
-+ OUT gctSYNC_POINT * SyncPoint
-+ )
-+{
-+ gceSTATUS status;
-+ gcsSYNC_POINT_PTR syncPoint;
-+
-+ gcmkHEADER_ARG("Os=0x%X", Os);
-+
-+ /* Verify the arguments. */
-+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-+
-+ /* Create an sync point structure. */
-+ syncPoint = (gcsSYNC_POINT_PTR) kmalloc(
-+ sizeof(gcsSYNC_POINT), GFP_KERNEL | gcdNOWARN);
-+
-+ if (syncPoint == gcvNULL)
-+ {
-+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
-+ }
-+
-+ /* Initialize the sync point. */
-+ atomic_set(&syncPoint->ref, 1);
-+ atomic_set(&syncPoint->state, 0);
-+
-+ gcmkONERROR(_AllocateIntegerId(&Os->syncPointDB, syncPoint, &syncPoint->id));
-+
-+ *SyncPoint = (gctSYNC_POINT)(gctUINTPTR_T)syncPoint->id;
-+
-+ gcmkFOOTER_ARG("*SyncPonint=%d", syncPoint->id);
-+ return gcvSTATUS_OK;
-+
-+OnError:
-+ if (syncPoint != gcvNULL)
-+ {
-+ kfree(syncPoint);
-+ }
-+
-+ gcmkFOOTER();
-+ return status;
-+}
-+
-+gceSTATUS
-+gckOS_ReferenceSyncPoint(
-+ IN gckOS Os,
-+ IN gctSYNC_POINT SyncPoint
-+ )
-+{
-+ gceSTATUS status;
-+ gcsSYNC_POINT_PTR syncPoint;
-+
-+ gcmkHEADER_ARG("Os=0x%X", Os);
-+
-+ /* Verify the arguments. */
-+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
-+
-+ gcmkONERROR(
-+ _QueryIntegerId(&Os->syncPointDB,
-+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
-+ (gctPOINTER)&syncPoint));
-+
-+ /* Initialize the sync point. */
-+ atomic_inc(&syncPoint->ref);
-+
-+ gcmkFOOTER_NO();
-+ return gcvSTATUS_OK;
-+
-+OnError:
-+ gcmkFOOTER();
-+ return status;
-+}
-+
-+gceSTATUS
-+gckOS_DestroySyncPoint(
-+ IN gckOS Os,
-+ IN gctSYNC_POINT SyncPoint
-+ )
-+{
-+ gceSTATUS status;
-+ gcsSYNC_POINT_PTR syncPoint;
-+ gctBOOL acquired = gcvFALSE;
-+
-+ gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
-+
-+ /* Verify the arguments. */
-+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
-+
-+ gcmkONERROR(gckOS_AcquireMutex(Os, Os->syncPointMutex, gcvINFINITE));
-+ acquired = gcvTRUE;
-+
-+ gcmkONERROR(
-+ _QueryIntegerId(&Os->syncPointDB,
-+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
-+ (gctPOINTER)&syncPoint));
-+
-+ gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
-+
-+ if (atomic_dec_and_test(&syncPoint->ref))
-+ {
-+ gcmkVERIFY_OK(_DestroyIntegerId(&Os->syncPointDB, syncPoint->id));
-+
-+ /* Free the sgianl. */
-+ syncPoint->timeline = gcvNULL;
-+ kfree(syncPoint);
-+ }
-+
-+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
-+ acquired = gcvFALSE;
-+
-+ /* Success. */
-+ gcmkFOOTER_NO();
-+ return gcvSTATUS_OK;
-+
-+OnError:
-+ if (acquired)
-+ {
-+ /* Release the mutex. */
-+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
-+ }
-+
-+ gcmkFOOTER();
-+ return status;
-+}
-+
-+gceSTATUS
-+gckOS_SignalSyncPoint(
-+ IN gckOS Os,
-+ IN gctSYNC_POINT SyncPoint
-+ )
-+{
-+ gceSTATUS status;
-+ gcsSYNC_POINT_PTR syncPoint;
-+ gctBOOL acquired = gcvFALSE;
-+
-+ gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
-+
-+ /* Verify the arguments. */
-+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
-+
-+ gcmkONERROR(gckOS_AcquireMutex(Os, Os->syncPointMutex, gcvINFINITE));
-+ acquired = gcvTRUE;
-+
-+ gcmkONERROR(
-+ _QueryIntegerId(&Os->syncPointDB,
-+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
-+ (gctPOINTER)&syncPoint));
-+
-+ gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
-+
-+ /* Get state. */
-+ atomic_set(&syncPoint->state, gcvTRUE);
-+
-+ /* Signal timeline. */
-+ if (syncPoint->timeline)
-+ {
-+ sync_timeline_signal(syncPoint->timeline);
-+ }
-+
-+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
-+ acquired = gcvFALSE;
-+
-+ /* Success. */
-+ gcmkFOOTER_NO();
-+ return gcvSTATUS_OK;
-+
-+OnError:
-+ if (acquired)
-+ {
-+ /* Release the mutex. */
-+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
-+ }
-+
-+ gcmkFOOTER();
-+ return status;
-+}
-+
-+gceSTATUS
-+gckOS_QuerySyncPoint(
-+ IN gckOS Os,
-+ IN gctSYNC_POINT SyncPoint,
-+ OUT gctBOOL_PTR State
-+ )
-+{
-+ gceSTATUS status;
-+ gcsSYNC_POINT_PTR syncPoint;
-+
-+ gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
-+
-+ /* Verify the arguments. */
-+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
-+
-+ gcmkONERROR(
-+ _QueryIntegerId(&Os->syncPointDB,
-+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
-+ (gctPOINTER)&syncPoint));
-+
-+ gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
-+
-+ /* Get state. */
-+ *State = atomic_read(&syncPoint->state);
-+
-+ /* Success. */
-+ gcmkFOOTER_ARG("*State=%d", *State);
-+ return gcvSTATUS_OK;
-+
-+OnError:
-+ gcmkFOOTER();
-+ return status;
-+}
-+
-+gceSTATUS
-+gckOS_CreateSyncTimeline(
-+ IN gckOS Os,
-+ OUT gctHANDLE * Timeline
-+ )
-+{
-+ struct viv_sync_timeline * timeline;
-+
-+ /* Create viv sync timeline. */
-+ timeline = viv_sync_timeline_create("viv timeline", Os);
-+
-+ if (timeline == gcvNULL)
-+ {
-+ /* Out of memory. */
-+ return gcvSTATUS_OUT_OF_MEMORY;
-+ }
-+
-+ *Timeline = (gctHANDLE) timeline;
-+ return gcvSTATUS_OK;
-+}
-+
-+gceSTATUS
-+gckOS_DestroySyncTimeline(
-+ IN gckOS Os,
-+ IN gctHANDLE Timeline
-+ )
-+{
-+ struct viv_sync_timeline * timeline;
-+ gcmkASSERT(Timeline != gcvNULL);
-+
-+ /* Destroy timeline. */
-+ timeline = (struct viv_sync_timeline *) Timeline;
-+ sync_timeline_destroy(&timeline->obj);
-+
-+ return gcvSTATUS_OK;
-+}
-+
-+gceSTATUS
-+gckOS_CreateNativeFence(
-+ IN gckOS Os,
-+ IN gctHANDLE Timeline,
-+ IN gctSYNC_POINT SyncPoint,
-+ OUT gctINT * FenceFD
-+ )
-+{
-+ int fd = -1;
-+ struct viv_sync_timeline *timeline;
-+ struct sync_pt * pt = gcvNULL;
-+ struct sync_fence * fence;
-+ char name[32];
-+ gcsSYNC_POINT_PTR syncPoint;
-+ gceSTATUS status;
-+
-+ gcmkHEADER_ARG("Os=0x%X Timeline=0x%X SyncPoint=%d",
-+ Os, Timeline, (gctUINT)(gctUINTPTR_T)SyncPoint);
-+
-+ gcmkONERROR(
-+ _QueryIntegerId(&Os->syncPointDB,
-+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
-+ (gctPOINTER)&syncPoint));
-+
-+ /* Cast timeline. */
-+ timeline = (struct viv_sync_timeline *) Timeline;
-+
-+ fd = get_unused_fd();
-+
-+ if (fd < 0)
-+ {
-+ /* Out of resources. */
-+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
-+ }
-+
-+ /* Create viv_sync_pt. */
-+ pt = viv_sync_pt_create(timeline, SyncPoint);
-+
-+ if (pt == gcvNULL)
-+ {
-+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
-+ }
-+
-+ /* Reference sync_timeline. */
-+ syncPoint->timeline = &timeline->obj;
-+
-+ /* Build fence name. */
-+ snprintf(name, 32, "viv sync_fence-%u", (gctUINT)(gctUINTPTR_T)SyncPoint);
-+
-+ /* Create sync_fence. */
-+ fence = sync_fence_create(name, pt);
-+
-+ if (fence == NULL)
-+ {
-+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
-+ }
-+
-+ /* Install fence to fd. */
-+ sync_fence_install(fence, fd);
-+
-+ *FenceFD = fd;
-+ gcmkFOOTER_ARG("*FenceFD=%d", fd);
-+ return gcvSTATUS_OK;
-+
-+OnError:
-+ /* Error roll back. */
-+ if (pt)
-+ {
-+ sync_pt_free(pt);
-+ }
-+
-+ if (fd > 0)
-+ {
-+ put_unused_fd(fd);
-+ }
-+
-+ gcmkFOOTER();
-+ return status;
-+}
-+#endif
-diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
-new file mode 100644
-index 0000000..7efae1c
---- /dev/null
-+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
-@@ -0,0 +1,174 @@
-+/****************************************************************************
-+*
-+* Copyright (C) 2005 - 2013 by Vivante Corp.
-+*
-+* This program is free software; you can redistribute it and/or modify
-+* it under the terms of the GNU General Public License as published by
-+* the Free Software Foundation; either version 2 of the license, or
-+* (at your option) any later version.
-+*
-+* This program is distributed in the hope that it will be useful,
-+* but WITHOUT ANY WARRANTY; without even the implied warranty of
-+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+* GNU General Public License for more details.
-+*
-+* You should have received a copy of the GNU General Public License
-+* along with this program; if not write to the Free Software
-+* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+*
-+*****************************************************************************/
-+
-+
-+#include <linux/kernel.h>
-+#include <linux/file.h>
-+#include <linux/fs.h>
-+#include <linux/miscdevice.h>
-+#include <linux/module.h>
-+#include <linux/syscalls.h>
-+#include <linux/uaccess.h>
-+
-+#include "gc_hal_kernel_sync.h"
-+
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+
-+static struct sync_pt *
-+viv_sync_pt_dup(
-+ struct sync_pt * sync_pt
-+ )
-+{
-+ gceSTATUS status;
-+ struct viv_sync_pt *pt;
-+ struct viv_sync_pt *src;
-+ struct viv_sync_timeline *obj;
-+
-+ src = (struct viv_sync_pt *) sync_pt;
-+ obj = (struct viv_sync_timeline *) sync_pt->parent;
-+
-+ /* Create the new sync_pt. */
-+ pt = (struct viv_sync_pt *)
-+ sync_pt_create(&obj->obj, sizeof(struct viv_sync_pt));
-+
-+ pt->stamp = src->stamp;
-+ pt->sync = src->sync;
-+
-+ /* Reference sync point. */
-+ status = gckOS_ReferenceSyncPoint(obj->os, pt->sync);
-+
-+ if (gcmIS_ERROR(status))
-+ {
-+ sync_pt_free((struct sync_pt *)pt);
-+ return NULL;
-+ }
-+
-+ return (struct sync_pt *)pt;
-+}
-+
-+static int
-+viv_sync_pt_has_signaled(
-+ struct sync_pt * sync_pt
-+ )
-+{
-+ gceSTATUS status;
-+ gctBOOL state;
-+ struct viv_sync_pt * pt;
-+ struct viv_sync_timeline * obj;
-+
-+ pt = (struct viv_sync_pt *)sync_pt;
-+ obj = (struct viv_sync_timeline *)sync_pt->parent;
-+
-+ status = gckOS_QuerySyncPoint(obj->os, pt->sync, &state);
-+
-+ if (gcmIS_ERROR(status))
-+ {
-+ /* Error. */
-+ return -1;
-+ }
-+
-+ return state;
-+}
-+
-+static int
-+viv_sync_pt_compare(
-+ struct sync_pt * a,
-+ struct sync_pt * b
-+ )
-+{
-+ int ret;
-+ struct viv_sync_pt * pt1 = (struct viv_sync_pt *) a;
-+ struct viv_sync_pt * pt2 = (struct viv_sync_pt *) b;
-+
-+ ret = (pt1->stamp < pt2->stamp) ? -1
-+ : (pt1->stamp == pt2->stamp) ? 0
-+ : 1;
-+
-+ return ret;
-+}
-+
-+static void
-+viv_sync_pt_free(
-+ struct sync_pt * sync_pt
-+ )
-+{
-+ struct viv_sync_pt * pt;
-+ struct viv_sync_timeline * obj;
-+
-+ pt = (struct viv_sync_pt *) sync_pt;
-+ obj = (struct viv_sync_timeline *) sync_pt->parent;
-+
-+ gckOS_DestroySyncPoint(obj->os, pt->sync);
-+}
-+
-+static struct sync_timeline_ops viv_timeline_ops =
-+{
-+ .driver_name = "viv_sync",
-+ .dup = viv_sync_pt_dup,
-+ .has_signaled = viv_sync_pt_has_signaled,
-+ .compare = viv_sync_pt_compare,
-+ .free_pt = viv_sync_pt_free,
-+};
-+
-+struct viv_sync_timeline *
-+viv_sync_timeline_create(
-+ const char * name,
-+ gckOS os
-+ )
-+{
-+ struct viv_sync_timeline * obj;
-+
-+ obj = (struct viv_sync_timeline *)
-+ sync_timeline_create(&viv_timeline_ops, sizeof(struct viv_sync_timeline), name);
-+
-+ obj->os = os;
-+ obj->stamp = 0;
-+
-+ return obj;
-+}
-+
-+struct sync_pt *
-+viv_sync_pt_create(
-+ struct viv_sync_timeline * obj,
-+ gctSYNC_POINT SyncPoint
-+ )
-+{
-+ gceSTATUS status;
-+ struct viv_sync_pt * pt;
-+
-+ pt = (struct viv_sync_pt *)
-+ sync_pt_create(&obj->obj, sizeof(struct viv_sync_pt));
-+
-+ pt->stamp = obj->stamp++;
-+ pt->sync = SyncPoint;
-+
-+ /* Dup signal. */
-+ status = gckOS_ReferenceSyncPoint(obj->os, SyncPoint);
-+
-+ if (gcmIS_ERROR(status))
-+ {
-+ sync_pt_free((struct sync_pt *)pt);
-+ return NULL;
-+ }
-+
-+ return (struct sync_pt *) pt;
-+}
-+
-+#endif
-diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
-new file mode 100644
-index 0000000..6fc12e5
---- /dev/null
-+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
-@@ -0,0 +1,71 @@
-+/****************************************************************************
-+*
-+* Copyright (C) 2005 - 2013 by Vivante Corp.
-+*
-+* This program is free software; you can redistribute it and/or modify
-+* it under the terms of the GNU General Public License as published by
-+* the Free Software Foundation; either version 2 of the license, or
-+* (at your option) any later version.
-+*
-+* This program is distributed in the hope that it will be useful,
-+* but WITHOUT ANY WARRANTY; without even the implied warranty of
-+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+* GNU General Public License for more details.
-+*
-+* You should have received a copy of the GNU General Public License
-+* along with this program; if not write to the Free Software
-+* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+*
-+*****************************************************************************/
-+
-+
-+#ifndef __gc_hal_kernel_sync_h_
-+#define __gc_hal_kernel_sync_h_
-+
-+#include <linux/types.h>
-+
-+#include <linux/sync.h>
-+
-+#include <gc_hal.h>
-+#include <gc_hal_base.h>
-+
-+struct viv_sync_timeline
-+{
-+ /* Parent object. */
-+ struct sync_timeline obj;
-+
-+ /* Timestamp when sync_pt is created. */
-+ gctUINT stamp;
-+
-+ /* Pointer to os struct. */
-+ gckOS os;
-+};
-+
-+
-+struct viv_sync_pt
-+{
-+ /* Parent object. */
-+ struct sync_pt pt;
-+
-+ /* Reference sync point*/
-+ gctSYNC_POINT sync;
-+
-+ /* Timestamp when sync_pt is created. */
-+ gctUINT stamp;
-+};
-+
-+/* Create viv_sync_timeline object. */
-+struct viv_sync_timeline *
-+viv_sync_timeline_create(
-+ const char * Name,
-+ gckOS Os
-+ );
-+
-+/* Create viv_sync_pt object. */
-+struct sync_pt *
-+viv_sync_pt_create(
-+ struct viv_sync_timeline * Obj,
-+ gctSYNC_POINT SyncPoint
-+ );
-+
-+#endif /* __gc_hal_kernel_sync_h_ */
---
-1.7.9.5
-