1 From 2e575255b8c53d3cfe2af068411696fe3c40debb Mon Sep 17 00:00:00 2001
2 From: Loren Huang <b02279@freescale.com>
3 Date: Mon, 2 Sep 2013 12:16:48 +0800
4 Subject: [PATCH 01/16] ENGR00278350 gpu:viante 4.6.9p13 kernel part
7 Integrated 4.6.9p13 kernel part change.
8 This integration is mainly for android test.
9 Linux test will be focused on 3.10 kernel.
11 Signed-off-by: Loren HUANG <b02279@freescale.com>
14 drivers/mxc/gpu-viv/Kbuild | 33 +-
15 .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.c | 177 ++--
16 .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.h | 9 +-
17 .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.c | 8 +-
18 .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.h | 13 +
19 .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c | 736 ++++++++++++-
20 .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h | 1 +
21 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c | 125 ++-
22 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h | 24 +-
23 .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c | 57 ++
24 .../gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c | 45 +-
25 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c | 12 +
26 .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c | 29 +
27 .../hal/kernel/gc_hal_kernel_interrupt_vg.c | 3 +
28 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c | 8 +-
29 .../hal/kernel/gc_hal_kernel_video_memory.c | 20 +-
30 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h | 84 +-
31 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h | 172 +++-
32 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h | 142 ++-
33 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h | 37 +
34 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h | 46 +-
35 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h | 125 ++-
36 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h | 86 +-
37 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h | 1078 +++-----------------
38 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h | 48 +
39 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h | 79 +-
40 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h | 2 +-
41 .../hal/os/linux/kernel/gc_hal_kernel_device.c | 17 +-
42 .../hal/os/linux/kernel/gc_hal_kernel_device.h | 16 +-
43 .../hal/os/linux/kernel/gc_hal_kernel_driver.c | 99 +-
44 .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c | 655 ++++++++++--
45 .../hal/os/linux/kernel/gc_hal_kernel_sync.c | 174 ++++
46 .../hal/os/linux/kernel/gc_hal_kernel_sync.h | 71 ++
47 33 files changed, 2974 insertions(+), 1257 deletions(-)
48 create mode 100644 drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
49 create mode 100644 drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
51 diff --git a/drivers/mxc/gpu-viv/Kbuild b/drivers/mxc/gpu-viv/Kbuild
52 index 93b1259..2b277d6 100644
53 --- a/drivers/mxc/gpu-viv/Kbuild
54 +++ b/drivers/mxc/gpu-viv/Kbuild
55 @@ -45,8 +45,6 @@ OBJS := $(OS_KERNEL_DIR)/gc_hal_kernel_device.o \
56 $(OS_KERNEL_DIR)/gc_hal_kernel_os.o \
57 $(OS_KERNEL_DIR)/gc_hal_kernel_debugfs.o
59 -ifeq ($(USE_3D_VG), 1)
61 OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \
62 $(HAL_KERNEL_DIR)/gc_hal_kernel_command.o \
63 $(HAL_KERNEL_DIR)/gc_hal_kernel_db.o \
64 @@ -69,19 +67,9 @@ OBJS +=\
65 $(ARCH_VG_KERNEL_DIR)/gc_hal_kernel_hardware_command_vg.o\
66 $(ARCH_VG_KERNEL_DIR)/gc_hal_kernel_hardware_vg.o
70 -OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \
71 - $(HAL_KERNEL_DIR)/gc_hal_kernel_command.o \
72 - $(HAL_KERNEL_DIR)/gc_hal_kernel_heap.o \
73 - $(HAL_KERNEL_DIR)/gc_hal_kernel_interrupt.o \
74 - $(HAL_KERNEL_DIR)/gc_hal_kernel_mmu.o \
75 - $(HAL_KERNEL_DIR)/gc_hal_kernel_video_memory.o \
76 - $(OS_KERNEL_DIR)/gc_hal_kernel_debug.o
78 -OBJS += $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware.o \
79 - $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware_command.o
81 +ifneq ($(CONFIG_SYNC),)
82 +OBJS += $(OS_KERNEL_DIR)/gc_hal_kernel_sync.o
85 ifeq ($(KERNELRELEASE), )
86 @@ -129,23 +117,16 @@ ifeq ($(CONFIG_DOVE_GPU), 1)
87 EXTRA_CFLAGS += -DCONFIG_DOVE_GPU=1
90 -ifeq ($(USE_POWER_MANAGEMENT), 1)
91 -EXTRA_CFLAGS += -DgcdPOWER_MANAGEMENT=1
93 -EXTRA_CFLAGS += -DgcdPOWER_MANAGEMENT=0
96 ifneq ($(USE_PLATFORM_DRIVER), 0)
97 EXTRA_CFLAGS += -DUSE_PLATFORM_DRIVER=1
99 EXTRA_CFLAGS += -DUSE_PLATFORM_DRIVER=0
102 -ifeq ($(USE_PROFILER), 1)
104 EXTRA_CFLAGS += -DVIVANTE_PROFILER=1
106 -EXTRA_CFLAGS += -DVIVANTE_PROFILER=0
108 +EXTRA_CFLAGS += -DVIVANTE_PROFILER_CONTEXT=1
112 EXTRA_CFLAGS += -DANDROID=1
113 @@ -235,6 +216,10 @@ ifeq ($(USE_BANK_ALIGNMENT), 1)
117 +ifneq ($(CONFIG_SYNC),)
118 +EXTRA_CFLAGS += -DgcdANDROID_NATIVE_FENCE_SYNC=1
121 EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel/inc
122 EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel
123 EXTRA_CFLAGS += -I$(AQARCH)/hal/kernel
124 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
125 index 70c2cd6..a17d2fd 100644
126 --- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
127 +++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
128 @@ -217,50 +217,17 @@ _IdentifyHardware(
132 -static gctTHREADFUNCRESULT gctTHREADFUNCTYPE
134 - gctTHREADFUNCPARAMETER ThreadParameter
135 +#if gcdPOWEROFF_TIMEOUT
137 +_VGPowerTimerFunction(
141 - gctUINT32 currentTime = 0;
142 - gctBOOL isAfter = gcvFALSE;
143 - gceCHIPPOWERSTATE state;
145 - /* Cast the object. */
146 - gckVGHARDWARE hardware = (gckVGHARDWARE) ThreadParameter;
150 - gcmkVERIFY_OK(gckOS_WaitSignal(hardware->os,
151 - hardware->idleSignal, gcvINFINITE));
153 - if (hardware->killThread)
160 - gcmkVERIFY_OK(gckOS_GetTicks(¤tTime));
163 - gckOS_TicksAfter(currentTime, hardware->powerOffTime, &isAfter));
167 - gcmkVERIFY_OK(gckVGHARDWARE_SetPowerManagementState(
168 - hardware, gcvPOWER_OFF_BROADCAST));
171 - gcmkVERIFY_OK(gckOS_Delay(hardware->os, 200));
173 - gcmkVERIFY_OK(gckVGHARDWARE_QueryPowerManagementState(
174 - hardware, &state));
176 - } while (state == gcvPOWER_IDLE);
179 + gckVGHARDWARE hardware = (gckVGHARDWARE)Data;
181 + gckVGHARDWARE_SetPowerManagementState(hardware, gcvPOWER_OFF_TIMEOUT));
185 /******************************************************************************\
186 ****************************** gckVGHARDWARE API code *****************************
187 @@ -338,15 +305,21 @@ gckVGHARDWARE_Construct(
188 hardware->chipMinorFeatures2 = chipMinorFeatures2;
190 hardware->powerMutex = gcvNULL;
191 - hardware->idleSignal = gcvNULL;
192 hardware->chipPowerState = gcvPOWER_ON;
193 hardware->chipPowerStateGlobal = gcvPOWER_ON;
194 hardware->clockState = gcvTRUE;
195 hardware->powerState = gcvTRUE;
196 - hardware->powerOffTimeout = gcdPOWEROFF_TIMEOUT;
198 hardware->powerOffTime = 0;
199 - hardware->timeIdleThread = gcvNULL;
200 - hardware->killThread = gcvFALSE;
201 +#if gcdPOWEROFF_TIMEOUT
202 + hardware->powerOffTimeout = gcdPOWEROFF_TIMEOUT;
204 + gcmkVERIFY_OK(gckOS_CreateTimer(Os,
205 + _VGPowerTimerFunction,
206 + (gctPOINTER)hardware,
207 + &hardware->powerOffTimer));
210 /* Determine whether FE 2.0 is present. */
211 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)))))));
213 @@ -365,18 +338,10 @@ gckVGHARDWARE_Construct(
214 gcmkVERIFY_OK(gckVGHARDWARE_SetFastClear(hardware, -1));
216 gcmkERR_BREAK(gckOS_CreateMutex(Os, &hardware->powerMutex));
217 - gcmkERR_BREAK(gckOS_CreateSignal(Os, gcvFALSE, &hardware->idleSignal));
219 /* Enable power management by default. */
220 hardware->powerManagement = gcvTRUE;
222 - gcmkERR_BREAK(gckOS_StartThread(
226 - &hardware->timeIdleThread
229 /* Return pointer to the gckVGHARDWARE object. */
230 *Hardware = hardware;
232 @@ -386,6 +351,14 @@ gckVGHARDWARE_Construct(
236 +#if gcdPOWEROFF_TIMEOUT
237 + if (hardware->powerOffTimer != gcvNULL)
239 + gcmkVERIFY_OK(gckOS_StopTimer(Os, hardware->powerOffTimer));
240 + gcmkVERIFY_OK(gckOS_DestroyTimer(Os, hardware->powerOffTimer));
244 if (hardware->pageTableDirty != gcvNULL)
246 gcmkVERIFY_OK(gckOS_AtomDestroy(Os, hardware->pageTableDirty));
247 @@ -428,10 +401,6 @@ gckVGHARDWARE_Destroy(
248 /* Verify the arguments. */
249 gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
251 - Hardware->killThread = gcvTRUE;
252 - gcmkVERIFY_OK(gckOS_Signal(Hardware->os, Hardware->idleSignal, gcvTRUE));
253 - gcmkVERIFY_OK(gckOS_StopThread(Hardware->os, Hardware->timeIdleThread));
255 /* Mark the object as unknown. */
256 Hardware->object.type = gcvOBJ_UNKNOWN;
258 @@ -441,11 +410,10 @@ gckVGHARDWARE_Destroy(
259 Hardware->os, Hardware->powerMutex));
262 - if (Hardware->idleSignal != gcvNULL)
264 - gcmkVERIFY_OK(gckOS_DestroySignal(
265 - Hardware->os, Hardware->idleSignal));
267 +#if gcdPOWEROFF_TIMEOUT
268 + gcmkVERIFY_OK(gckOS_StopTimer(Hardware->os, Hardware->powerOffTimer));
269 + gcmkVERIFY_OK(gckOS_DestroyTimer(Hardware->os, Hardware->powerOffTimer));
272 if (Hardware->pageTableDirty != gcvNULL)
274 @@ -1510,11 +1478,15 @@ gckVGHARDWARE_SetPowerManagementState(
275 gctBOOL commitMutex = gcvFALSE;
276 gctBOOL mutexAcquired = gcvFALSE;
278 +#if gcdPOWEROFF_TIMEOUT
279 + gctBOOL timeout = gcvFALSE;
280 + gctBOOL isAfter = gcvFALSE;
281 + gctUINT32 currentTime;
284 gctBOOL broadcast = gcvFALSE;
285 gctUINT32 process, thread;
286 gctBOOL global = gcvFALSE;
287 - gctUINT32 currentTime;
290 #if gcdENABLE_PROFILING
291 gctUINT64 time, freq, mutexTime, onTime, stallTime, stopTime, delayTime,
292 @@ -1661,6 +1633,16 @@ gckVGHARDWARE_SetPowerManagementState(
296 +#if gcdPOWEROFF_TIMEOUT
297 + case gcvPOWER_OFF_TIMEOUT:
298 + /* Convert to OFF and note we are inside broadcast. */
299 + State = gcvPOWER_OFF;
300 + broadcast = gcvTRUE;
301 + /* Check time out */
309 @@ -1719,6 +1701,31 @@ gckVGHARDWARE_SetPowerManagementState(
310 flag = flags[Hardware->chipPowerState][State];
311 /*clock = clocks[State];*/
313 +#if gcdPOWEROFF_TIMEOUT
316 + gcmkONERROR(gckOS_GetTicks(¤tTime));
319 + gckOS_TicksAfter(Hardware->powerOffTime, currentTime, &isAfter));
321 + /* powerOffTime is pushed forward, give up.*/
323 + /* Expect a transition start from IDLE. */
324 + || (Hardware->chipPowerState == gcvPOWER_ON)
325 + || (Hardware->chipPowerState == gcvPOWER_OFF)
328 + /* Release the power mutex. */
329 + gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
331 + /* No need to do anything. */
333 + return gcvSTATUS_OK;
340 /* Release the power mutex. */
341 @@ -1742,6 +1749,18 @@ gckVGHARDWARE_SetPowerManagementState(
347 + if (flag & gcvPOWER_FLAG_ACQUIRE)
349 + /* Acquire the power management semaphore. */
350 + gcmkONERROR(gckOS_AcquireSemaphore(os, command->powerSemaphore));
351 + acquired = gcvTRUE;
353 + /* avoid acquiring again. */
354 + flag &= ~gcvPOWER_FLAG_ACQUIRE;
358 if (flag & (gcvPOWER_FLAG_INITIALIZE | gcvPOWER_FLAG_CLOCK_ON))
360 @@ -1858,14 +1877,6 @@ gckVGHARDWARE_SetPowerManagementState(
361 Hardware->chipPowerStateGlobal = State;
364 - if (State == gcvPOWER_IDLE)
366 - gcmkVERIFY_OK(gckOS_Signal(os, Hardware->idleSignal, gcvTRUE));
368 - /* Reset power off time */
369 - gcmkVERIFY_OK(gckOS_GetTicks(¤tTime));
370 - Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
374 /* Acquire the mutex. */
375 @@ -1875,6 +1886,28 @@ gckVGHARDWARE_SetPowerManagementState(
379 +#if gcdPOWEROFF_TIMEOUT
380 + /* Reset power off time */
381 + gcmkONERROR(gckOS_GetTicks(¤tTime));
383 + Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
385 + if (State == gcvPOWER_IDLE)
387 + /* Start a timer to power off GPU when GPU enters IDLE or SUSPEND. */
388 + gcmkVERIFY_OK(gckOS_StartTimer(os,
389 + Hardware->powerOffTimer,
390 + Hardware->powerOffTimeout));
394 + gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE, "Cancel powerOfftimer");
396 + /* Cancel running timer when GPU enters ON or OFF. */
397 + gcmkVERIFY_OK(gckOS_StopTimer(os, Hardware->powerOffTimer));
401 /* Release the power mutex. */
402 gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
404 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
405 index 16b81ae..73d4594 100644
406 --- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
407 +++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
408 @@ -53,7 +53,6 @@ struct _gckVGHARDWARE
411 gctPOINTER powerMutex;
412 - gctSIGNAL idleSignal;
413 gctUINT32 powerProcess;
414 gctUINT32 powerThread;
415 gceCHIPPOWERSTATE chipPowerState;
416 @@ -61,11 +60,13 @@ struct _gckVGHARDWARE
417 gctISRMANAGERFUNC startIsr;
418 gctISRMANAGERFUNC stopIsr;
419 gctPOINTER isrContext;
420 + gctPOINTER pageTableDirty;
422 +#if gcdPOWEROFF_TIMEOUT
423 gctUINT32 powerOffTime;
424 gctUINT32 powerOffTimeout;
425 - gctTHREAD timeIdleThread;
426 - gctBOOL killThread;
427 - gctPOINTER pageTableDirty;
428 + gctPOINTER powerOffTimer;
431 gctBOOL powerManagement;
433 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
434 index 24003e7..42e6915 100644
435 --- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
436 +++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
437 @@ -181,7 +181,8 @@ _FlushPipe(
438 ? ((((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)))
439 : ((((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)))
440 | ((((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)))
441 - | ((((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)));
442 + | ((((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)))
443 + | ((((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)));
445 /* Semaphore from FE to PE. */
447 @@ -620,7 +621,10 @@ _InitializeContextBuffer(
448 index += _State(Context, index, 0x10180 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
449 index += _State(Context, index, 0x10200 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
450 index += _State(Context, index, 0x10280 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
451 - index += _State(Context, index, 0x02C00 >> 2, 0x00000000, 256, gcvFALSE, gcvFALSE);
452 + for (i = 0; i < 256 / 16; i += 1)
454 + index += _State(Context, index, (0x02C00 >> 2) + i * 16, 0x00000000, 14, gcvFALSE, gcvFALSE);
456 index += _State(Context, index, 0x10300 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
457 index += _State(Context, index, 0x10380 >> 2, 0x00321000, 32, gcvFALSE, gcvFALSE);
458 index += _State(Context, index, 0x10400 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
459 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
460 index 7554045..5d2c7c7 100644
461 --- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
462 +++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
463 @@ -134,6 +134,19 @@ struct _gckCONTEXT
468 +#if VIVANTE_PROFILER_CONTEXT
469 + gcsPROFILER_COUNTERS latestProfiler;
470 + gcsPROFILER_COUNTERS histroyProfiler;
471 + gctUINT32 prevVSInstCount;
472 + gctUINT32 prevVSBranchInstCount;
473 + gctUINT32 prevVSTexInstCount;
474 + gctUINT32 prevVSVertexCount;
475 + gctUINT32 prevPSInstCount;
476 + gctUINT32 prevPSBranchInstCount;
477 + gctUINT32 prevPSTexInstCount;
478 + gctUINT32 prevPSPixelCount;
483 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
484 index 00f3839..e02dc23 100644
485 --- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
486 +++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
490 #include "gc_hal_kernel.h"
491 +#if VIVANTE_PROFILER_CONTEXT
492 +#include "gc_hal_kernel_context.h"
495 #define _GC_OBJ_ZONE gcvZONE_HARDWARE
497 @@ -69,6 +72,7 @@ _IdentifyHardware(
498 gctUINT32 numConstants = 0;
499 gctUINT32 bufferSize = 0;
500 gctUINT32 varyingsCount = 0;
503 gcmkHEADER_ARG("Os=0x%x", Os);
505 @@ -209,6 +213,15 @@ _IdentifyHardware(
507 &Identity->chipMinorFeatures3));
509 + /*The BG2 chip has no compression supertiled, and the bit of GCMinorFeature3BugFixes15 is n/a*/
510 + if(Identity->chipModel == gcv1000 && Identity->chipRevision == 0x5036)
512 + Identity->chipMinorFeatures3
513 + = ((((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)));
514 + Identity->chipMinorFeatures3
515 + = ((((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)));
518 /* Read chip minor featuress register #4. */
520 gckOS_ReadRegisterEx(Os, Core,
521 @@ -244,14 +257,31 @@ _IdentifyHardware(
522 if (((Identity->chipModel == gcv1000) && ((Identity->chipRevision == 0x5035)
523 || (Identity->chipRevision == 0x5036)
524 || (Identity->chipRevision == 0x5037)))
525 - || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612)))
526 + || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612))
527 + || ((Identity->chipModel == gcv860) && (Identity->chipRevision == 0x4647)))
529 Identity->superTileMode = 1;
532 + if (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5245)
534 + 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)))))))
535 + || ((((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)))))));
542 - /* Disable HZ when EZ is present for older chips. */
543 - 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))))))))
547 + Identity->chipFeatures
548 + = ((((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)));
551 + /* Disable HZ when EZ is present for older chips. */
552 + 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))))))))
554 /* Disable HIERARCHICAL_Z. */
555 Identity->chipMinorFeatures
556 @@ -470,6 +500,15 @@ _IdentifyHardware(
557 Identity->varyingsCount = 8;
560 + /* For some cores, it consumes two varying for position, so the max varying vectors should minus one. */
561 + if ((Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5222) ||
562 + (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5208) ||
563 + ((Identity->chipModel == gcv2100 || Identity->chipModel == gcv2000) && Identity->chipRevision == 0x5108) ||
564 + (Identity->chipModel == gcv880 && (Identity->chipRevision == 0x5107 || Identity->chipRevision == 0x5106)))
566 + Identity->varyingsCount -= 1;
572 @@ -535,9 +574,9 @@ _DumpDebugRegisters(
573 IN gcsiDEBUG_REGISTERS_PTR Descriptor
577 + gceSTATUS status = gcvSTATUS_OK;
580 + gctUINT32 data = 0;
583 gcmkHEADER_ARG("Os=0x%X Descriptor=0x%X", Os, Descriptor);
584 @@ -643,6 +682,42 @@ OnError:
590 + gckHARDWARE Hardware,
595 + gctSIZE_T bytes, requested;
598 + /* Get the size of the flush command. */
599 + gcmkONERROR(gckHARDWARE_Flush(Hardware,
604 + /* Reserve space in the command queue. */
605 + gcmkONERROR(gckCOMMAND_Reserve(Command,
610 + /* Append a flush. */
611 + gcmkONERROR(gckHARDWARE_Flush(
612 + Hardware, gcvFLUSH_ALL, buffer, &bytes
615 + /* Execute the command queue. */
616 + gcmkONERROR(gckCOMMAND_Execute(Command, requested));
618 + return gcvSTATUS_OK;
624 /******************************************************************************\
625 ****************************** gckHARDWARE API code *****************************
626 \******************************************************************************/
627 @@ -809,6 +884,9 @@ gckHARDWARE_Construct(
628 /* Enable power management by default. */
629 hardware->powerManagement = gcvTRUE;
631 + /* Disable profiler by default */
632 + hardware->gpuProfiler = gcvFALSE;
634 /* Return pointer to the gckHARDWARE object. */
635 *Hardware = hardware;
637 @@ -1113,6 +1191,31 @@ gckHARDWARE_InitializeHardware(
638 ((((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)))));
641 + if ((gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) == gcvFALSE)
642 + || (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) && (Hardware->identity.chipRevision < 0x5422))
648 + gckOS_ReadRegisterEx(Hardware->os,
650 + Hardware->powerBaseAddress
655 + 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)));
659 + gckOS_WriteRegisterEx(Hardware->os,
661 + Hardware->powerBaseAddress
666 /* Special workaround for this core
667 ** Make sure FE and TX are on different buses */
668 if ((Hardware->identity.chipModel == gcv2000)
669 @@ -1152,7 +1255,9 @@ gckHARDWARE_InitializeHardware(
672 if (Hardware->identity.chipModel >= gcv400
673 - && Hardware->identity.chipModel != gcv420)
674 + && Hardware->identity.chipModel != gcv420
675 + && (((((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)
680 @@ -2883,35 +2988,44 @@ gckHARDWARE_QueryShaderCaps(
681 OUT gctUINT * Varyings
684 + gctUINT32 vsConstMax;
685 + gctUINT32 psConstMax;
687 gcmkHEADER_ARG("Hardware=0x%x VertexUniforms=0x%x "
688 "FragmentUniforms=0x%x Varyings=0x%x",
689 Hardware, VertexUniforms,
690 FragmentUniforms, Varyings);
692 + if ((Hardware->identity.chipModel == gcv2000)
693 + && (Hardware->identity.chipRevision == 0x5118))
698 + else if (Hardware->identity.numConstants > 256)
703 + else if (Hardware->identity.numConstants == 256)
714 if (VertexUniforms != gcvNULL)
716 - /* Return the vs shader const count. */
717 - if (Hardware->identity.chipModel < gcv4000)
719 - *VertexUniforms = 168;
723 - *VertexUniforms = 256;
725 + *VertexUniforms = vsConstMax;
728 if (FragmentUniforms != gcvNULL)
730 - /* Return the ps shader const count. */
731 - if (Hardware->identity.chipModel < gcv4000)
733 - *FragmentUniforms = 64;
737 - *FragmentUniforms = 256;
739 + *FragmentUniforms = psConstMax;
742 if (Varyings != gcvNULL)
743 @@ -3229,12 +3343,28 @@ gckHARDWARE_SetMMUv2(
744 gctBOOL commitEntered = gcvFALSE;
745 gctPOINTER pointer = gcvNULL;
746 gctBOOL acquired = gcvFALSE;
748 + gctSIZE_T configSize;
750 gcmkHEADER_ARG("Hardware=0x%x Enable=%d", Hardware, Enable);
752 /* Verify the arguments. */
753 gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
755 + config2D = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_3D)
756 + && gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_2D);
758 + configSize = 4 * 4;
765 + /* Configure MMU States. */
769 /* Convert logical address into physical address. */
771 gckOS_GetPhysicalAddress(Hardware->os, MtlbAddress, &config));
772 @@ -3281,7 +3411,7 @@ gckHARDWARE_SetMMUv2(
773 commitEntered = gcvTRUE;
775 gcmkONERROR(gckCOMMAND_Reserve(
776 - command, 16, &pointer, &bufferSize
777 + command, configSize, &pointer, &bufferSize
781 @@ -3300,10 +3430,43 @@ gckHARDWARE_SetMMUv2(
787 + /* LoadState(AQPipeSelect, 1), pipe. */
789 + = ((((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)))
790 + | ((((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)))
791 + | ((((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)));
796 + = ((((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)))
797 + | ((((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)))
798 + | ((((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)));
800 + buffer[7] = config;
803 + = ((((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)))
804 + | ((((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)))
805 + | ((((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)));
807 + buffer[9] = address;
809 + /* LoadState(AQPipeSelect, 1), pipe. */
811 + = ((((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)))
812 + | ((((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)))
813 + | ((((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)));
818 gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
819 "Setup MMU: config=%08x, Safe Address=%08x\n.", config, address);
821 - gcmkONERROR(gckCOMMAND_Execute(command, 16));
822 + gcmkONERROR(gckCOMMAND_Execute(command, configSize));
824 if (FromPower == gcvFALSE)
826 @@ -3501,6 +3664,8 @@ gckHARDWARE_Flush(
828 gctUINT32_PTR logical = (gctUINT32_PTR) Logical;
830 + gctBOOL fcFlushStall;
831 + gctUINT32 reserveBytes = 8;
833 gcmkHEADER_ARG("Hardware=0x%x Flush=0x%x Logical=0x%x *Bytes=%lu",
834 Hardware, Flush, Logical, gcmOPT_VALUE(Bytes));
835 @@ -3511,6 +3676,16 @@ gckHARDWARE_Flush(
836 /* Get current pipe. */
837 pipe = Hardware->kernel->command->pipeSelect;
840 + = ((((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)))))))
841 + && (Flush == gcvFLUSH_ALL)
849 /* Flush 3D color cache. */
850 if ((Flush & gcvFLUSH_COLOR) && (pipe == 0x0))
852 @@ -3527,6 +3702,7 @@ gckHARDWARE_Flush(
853 if ((Flush & gcvFLUSH_TEXTURE) && (pipe == 0x0))
855 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)));
856 + 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)));
859 /* Flush 2D cache. */
860 @@ -3550,7 +3726,7 @@ gckHARDWARE_Flush(
861 /* Copy to command queue. */
862 if (Logical != gcvNULL)
865 + if (*Bytes < reserveBytes)
867 /* Command queue too small. */
868 gcmkONERROR(gcvSTATUS_BUFFER_TOO_SMALL);
869 @@ -3565,12 +3741,26 @@ gckHARDWARE_Flush(
871 gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
872 "0x%x: FLUSH 0x%x", logical, flush);
876 + 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)))
877 + | ((((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)))
878 + | ((((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)));
880 + 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)));
883 + gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
884 + "0x%x: FLUSH 0x%x", logical + 3, logical[3]);
889 if (Bytes != gcvNULL)
891 - /* 8 bytes required. */
893 + /* bytes required. */
894 + *Bytes = reserveBytes;
898 @@ -4285,6 +4475,48 @@ gckHARDWARE_SetPowerManagementState(
902 + /* Flush Cache before Power Off. */
903 + if (flag & gcvPOWER_FLAG_POWER_OFF)
905 + if (Hardware->clockState == gcvFALSE)
907 + /* Turn off the GPU power. */
909 + gckOS_SetGPUPower(os,
914 + Hardware->clockState = gcvTRUE;
916 + if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_DYNAMIC_FREQUENCY_SCALING) != gcvTRUE)
918 + /* Write the clock control register. */
919 + gcmkONERROR(gckOS_WriteRegisterEx(os,
924 + /* Done loading the frequency scaler. */
925 + gcmkONERROR(gckOS_WriteRegisterEx(os,
928 + ((((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)))));
932 + gcmkONERROR(gckCOMMAND_Start(command));
934 + gcmkONERROR(_FlushCache(Hardware, command));
936 + gckOS_Delay(gcvNULL, 1);
938 + /* Stop the command parser. */
939 + gcmkONERROR(gckCOMMAND_Stop(command, gcvFALSE));
941 + flag |= gcvPOWER_FLAG_CLOCK_OFF;
944 /* Get time until stopped. */
945 gcmkPROFILE_QUERY(time, stopTime);
947 @@ -4582,6 +4814,40 @@ gckHARDWARE_SetPowerManagement(
951 +/*******************************************************************************
953 +** gckHARDWARE_SetGpuProfiler
955 +** Configure GPU profiler function.
956 +** Only used in driver initialization stage.
960 +** gckHARDWARE Harwdare
961 +** Pointer to an gckHARDWARE object.
963 +** gctBOOL GpuProfiler
964 +** GOU Profiler State.
968 +gckHARDWARE_SetGpuProfiler(
969 + IN gckHARDWARE Hardware,
970 + IN gctBOOL GpuProfiler
973 + gcmkHEADER_ARG("Hardware=0x%x", Hardware);
975 + /* Verify the arguments. */
976 + gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
978 + Hardware->gpuProfiler = GpuProfiler;
982 + return gcvSTATUS_OK;
985 #if gcdENABLE_FSCALE_VAL_ADJUST
987 gckHARDWARE_SetFscaleValue(
988 @@ -5141,6 +5407,402 @@ OnError:
992 +#if VIVANTE_PROFILER_CONTEXT
993 +#define gcmkUPDATE_PROFILE_DATA(data) \
994 + profilerHistroy->data += profiler->data
997 +gckHARDWARE_QueryContextProfile(
998 + IN gckHARDWARE Hardware,
1000 + IN gckCONTEXT Context,
1001 + OUT gcsPROFILER_COUNTERS * Counters
1005 + gckCOMMAND command = Hardware->kernel->command;
1006 + gcsPROFILER_COUNTERS * profiler = Counters;
1008 + gcmkHEADER_ARG("Hardware=0x%x Counters=0x%x", Hardware, Counters);
1010 + /* Verify the arguments. */
1011 + gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
1013 + /* Acquire the context sequnence mutex. */
1014 + gcmkONERROR(gckOS_AcquireMutex(
1015 + command->os, command->mutexContextSeq, gcvINFINITE
1018 + /* Read the counters. */
1019 + gcmkVERIFY_OK(gckOS_MemCopy(
1020 + profiler, &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
1025 + /* Reset counters. */
1026 + gcmkVERIFY_OK(gckOS_ZeroMemory(
1027 + &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
1031 + gcmkVERIFY_OK(gckOS_ReleaseMutex(
1032 + command->os, command->mutexContextSeq
1037 + return gcvSTATUS_OK;
1040 + /* Return the status. */
1047 +gckHARDWARE_UpdateContextProfile(
1048 + IN gckHARDWARE Hardware,
1049 + IN gckCONTEXT Context
1053 + gcsPROFILER_COUNTERS * profiler = &Context->latestProfiler;
1054 + gcsPROFILER_COUNTERS * profilerHistroy = &Context->histroyProfiler;
1056 + gctUINT32 colorKilled, colorDrawn, depthKilled, depthDrawn;
1057 + gctUINT32 totalRead, totalWrite;
1058 + gceCHIPMODEL chipModel;
1059 + gctUINT32 chipRevision;
1061 + gctBOOL needResetShader = gcvFALSE;
1063 + gcmkHEADER_ARG("Hardware=0x%x Context=0x%x", Hardware, Context);
1065 + /* Verify the arguments. */
1066 + gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
1067 + gcmkVERIFY_OBJECT(Context, gcvOBJ_CONTEXT);
1069 + chipModel = Hardware->identity.chipModel;
1070 + chipRevision = Hardware->identity.chipRevision;
1071 + if (chipModel == gcv2000 || (chipModel == gcv2100 && chipRevision == 0x5118))
1073 + needResetShader = gcvTRUE;
1076 + /* Read the counters. */
1078 + gckOS_ReadRegisterEx(Hardware->os,
1081 + &profiler->gpuCyclesCounter));
1082 + gcmkUPDATE_PROFILE_DATA(gpuCyclesCounter);
1085 + gckOS_ReadRegisterEx(Hardware->os,
1088 + &profiler->gpuTotalCyclesCounter));
1089 + gcmkUPDATE_PROFILE_DATA(gpuTotalCyclesCounter);
1092 + gckOS_ReadRegisterEx(Hardware->os,
1095 + &profiler->gpuIdleCyclesCounter));
1096 + gcmkUPDATE_PROFILE_DATA(gpuIdleCyclesCounter);
1098 + /* Read clock control register. */
1099 + gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
1104 + profiler->gpuTotalRead64BytesPerFrame = 0;
1105 + profiler->gpuTotalWrite64BytesPerFrame = 0;
1106 + profiler->pe_pixel_count_killed_by_color_pipe = 0;
1107 + profiler->pe_pixel_count_killed_by_depth_pipe = 0;
1108 + profiler->pe_pixel_count_drawn_by_color_pipe = 0;
1109 + profiler->pe_pixel_count_drawn_by_depth_pipe = 0;
1111 + /* Walk through all avaiable pixel pipes. */
1112 + for (i = 0; i < Hardware->identity.pixelPipes; ++i)
1114 + /* Select proper pipe. */
1115 + gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
1118 + ((((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)))));
1122 + gckOS_ReadRegisterEx(Hardware->os,
1127 + gckOS_ReadRegisterEx(Hardware->os,
1132 + profiler->gpuTotalRead64BytesPerFrame += totalRead;
1133 + profiler->gpuTotalWrite64BytesPerFrame += totalWrite;
1134 + gcmkUPDATE_PROFILE_DATA(gpuTotalRead64BytesPerFrame);
1135 + gcmkUPDATE_PROFILE_DATA(gpuTotalWrite64BytesPerFrame);
1138 + 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));
1139 + 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));
1140 + 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));
1141 + 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));
1143 + profiler->pe_pixel_count_killed_by_color_pipe += colorKilled;
1144 + profiler->pe_pixel_count_killed_by_depth_pipe += depthKilled;
1145 + profiler->pe_pixel_count_drawn_by_color_pipe += colorDrawn;
1146 + profiler->pe_pixel_count_drawn_by_depth_pipe += depthDrawn;
1147 + gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_color_pipe);
1148 + gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_depth_pipe);
1149 + gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_color_pipe);
1150 + gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_depth_pipe);
1153 + /* Reset clock control register. */
1154 + gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
1162 + /* Reset counters. */
1164 + gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 1));
1166 + gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 0));
1168 + gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00438, 0));
1170 + gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00078, 0));
1171 + 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))) ));
1172 +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)))
1176 + 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))) ));
1177 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->ps_inst_counter));
1178 + if (needResetShader)
1180 + temp = profiler->ps_inst_counter;
1181 + profiler->ps_inst_counter -= Context->prevPSInstCount;
1182 + Context->prevPSInstCount = temp;
1184 + gcmkUPDATE_PROFILE_DATA(ps_inst_counter);
1186 + 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))) ));
1187 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_pixel_counter));
1188 + if (needResetShader)
1190 + temp = profiler->rendered_pixel_counter;
1191 + profiler->rendered_pixel_counter -= Context->prevPSPixelCount;
1192 + Context->prevPSPixelCount = temp;
1194 + gcmkUPDATE_PROFILE_DATA(rendered_pixel_counter);
1196 + 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))) ));
1197 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vs_inst_counter));
1198 + if (needResetShader)
1200 + temp = profiler->vs_inst_counter;
1201 + profiler->vs_inst_counter -= Context->prevVSInstCount;
1202 + Context->prevVSInstCount = temp;
1204 + gcmkUPDATE_PROFILE_DATA(vs_inst_counter);
1206 + 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))) ));
1207 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_vertice_counter));
1208 + if (needResetShader)
1210 + temp = profiler->rendered_vertice_counter;
1211 + profiler->rendered_vertice_counter -= Context->prevVSVertexCount;
1212 + Context->prevVSVertexCount = temp;
1214 + gcmkUPDATE_PROFILE_DATA(rendered_vertice_counter);
1216 + 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))) ));
1217 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_branch_inst_counter));
1218 + if (needResetShader)
1220 + temp = profiler->vtx_branch_inst_counter;
1221 + profiler->vtx_branch_inst_counter -= Context->prevVSBranchInstCount;
1222 + Context->prevVSBranchInstCount = temp;
1224 + gcmkUPDATE_PROFILE_DATA(vtx_branch_inst_counter);
1226 + 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))) ));
1227 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_texld_inst_counter));
1228 + if (needResetShader)
1230 + temp = profiler->vtx_texld_inst_counter;
1231 + profiler->vtx_texld_inst_counter -= Context->prevVSTexInstCount;
1232 + Context->prevVSTexInstCount = temp;
1234 + gcmkUPDATE_PROFILE_DATA(vtx_texld_inst_counter);
1236 + 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))) ));
1237 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_branch_inst_counter));
1238 + if (needResetShader)
1240 + temp = profiler->pxl_branch_inst_counter;
1241 + profiler->pxl_branch_inst_counter -= Context->prevPSBranchInstCount;
1242 + Context->prevPSBranchInstCount = temp;
1244 + gcmkUPDATE_PROFILE_DATA(pxl_branch_inst_counter);
1246 + 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))) ));
1247 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_texld_inst_counter));
1248 + if (needResetShader)
1250 + temp = profiler->pxl_texld_inst_counter;
1251 + profiler->pxl_texld_inst_counter -= Context->prevPSTexInstCount;
1252 + Context->prevPSTexInstCount = temp;
1254 + gcmkUPDATE_PROFILE_DATA(pxl_texld_inst_counter);
1256 + 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))) ));
1257 +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)))
1261 + 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))) ));
1262 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_vtx_counter));
1263 + gcmkUPDATE_PROFILE_DATA(pa_input_vtx_counter);
1264 + 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))) ));
1265 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_prim_counter));
1266 + gcmkUPDATE_PROFILE_DATA(pa_input_prim_counter);
1267 + 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))) ));
1268 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_output_prim_counter));
1269 + gcmkUPDATE_PROFILE_DATA(pa_output_prim_counter);
1270 + 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))) ));
1271 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_depth_clipped_counter));
1272 + gcmkUPDATE_PROFILE_DATA(pa_depth_clipped_counter);
1273 + 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))) ));
1274 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_trivial_rejected_counter));
1275 + gcmkUPDATE_PROFILE_DATA(pa_trivial_rejected_counter);
1276 + 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))) ));
1277 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_culled_counter));
1278 + gcmkUPDATE_PROFILE_DATA(pa_culled_counter);
1279 + 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))) ));
1280 +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)))
1284 + 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))) ));
1285 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_triangle_count));
1286 + gcmkUPDATE_PROFILE_DATA(se_culled_triangle_count);
1287 + 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))) ));
1288 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_lines_count));
1289 + gcmkUPDATE_PROFILE_DATA(se_culled_lines_count);
1290 + 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))) ));
1291 +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)))
1295 + 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))) ));
1296 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_pixel_count));
1297 + gcmkUPDATE_PROFILE_DATA(ra_valid_pixel_count);
1298 + 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))) ));
1299 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_quad_count));
1300 + gcmkUPDATE_PROFILE_DATA(ra_total_quad_count);
1301 + 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))) ));
1302 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_quad_count_after_early_z));
1303 + gcmkUPDATE_PROFILE_DATA(ra_valid_quad_count_after_early_z);
1304 + 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))) ));
1305 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_primitive_count));
1306 + gcmkUPDATE_PROFILE_DATA(ra_total_primitive_count);
1307 + 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))) ));
1308 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_pipe_cache_miss_counter));
1309 + gcmkUPDATE_PROFILE_DATA(ra_pipe_cache_miss_counter);
1310 + 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))) ));
1311 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_prefetch_cache_miss_counter));
1312 + gcmkUPDATE_PROFILE_DATA(ra_prefetch_cache_miss_counter);
1313 + 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))) ));
1314 +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)))
1318 + 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))) ));
1319 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_bilinear_requests));
1320 + gcmkUPDATE_PROFILE_DATA(tx_total_bilinear_requests);
1321 + 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))) ));
1322 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_trilinear_requests));
1323 + gcmkUPDATE_PROFILE_DATA(tx_total_trilinear_requests);
1324 + 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))) ));
1325 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_discarded_texture_requests));
1326 + gcmkUPDATE_PROFILE_DATA(tx_total_discarded_texture_requests);
1327 + 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))) ));
1328 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_texture_requests));
1329 + gcmkUPDATE_PROFILE_DATA(tx_total_texture_requests);
1330 + 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))) ));
1331 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_count));
1332 + gcmkUPDATE_PROFILE_DATA(tx_mem_read_count);
1333 + 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))) ));
1334 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_in_8B_count));
1335 + gcmkUPDATE_PROFILE_DATA(tx_mem_read_in_8B_count);
1336 + 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))) ));
1337 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_count));
1338 + gcmkUPDATE_PROFILE_DATA(tx_cache_miss_count);
1339 + 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))) ));
1340 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_hit_texel_count));
1341 + gcmkUPDATE_PROFILE_DATA(tx_cache_hit_texel_count);
1342 + 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))) ));
1343 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_texel_count));
1344 + gcmkUPDATE_PROFILE_DATA(tx_cache_miss_texel_count);
1345 + 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))) ));
1346 +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)))
1350 + 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))) ));
1351 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_pipeline));
1352 + gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_pipeline);
1353 + 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))) ));
1354 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_IP));
1355 + gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_IP);
1356 + 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))) ));
1357 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_write_req_8B_from_pipeline));
1358 + gcmkUPDATE_PROFILE_DATA(mc_total_write_req_8B_from_pipeline);
1359 + 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))) ));
1360 +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)))
1364 + 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))) ));
1365 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_read_request_stalled));
1366 + gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_read_request_stalled);
1367 + 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))) ));
1368 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_request_stalled));
1369 + gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_request_stalled);
1370 + 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))) ));
1371 +gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_data_stalled));
1372 + gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_data_stalled);
1373 + 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))) ));
1374 +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)))
1379 + return gcvSTATUS_OK;
1382 + /* Return the status. */
1390 IN gckHARDWARE Hardware,
1391 @@ -5602,6 +6264,22 @@ gckHARDWARE_IsFeatureAvailable(
1392 && ((((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)))))));
1395 + case gcvFEATURE_PIPE_2D:
1396 + 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)))))));
1399 + case gcvFEATURE_PIPE_3D:
1400 +#ifndef VIVANTE_NO_3D
1401 + 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)))))));
1403 + available = gcvFALSE;
1407 + case gcvFEATURE_HALTI2:
1408 + 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)))))));
1412 gcmkFATAL("Invalid feature has been requested.");
1413 available = gcvFALSE;
1414 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
1415 index 37226b7..287ea60 100644
1416 --- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
1417 +++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
1418 @@ -92,6 +92,7 @@ struct _gckHARDWARE
1421 gctBOOL powerManagement;
1422 + gctBOOL gpuProfiler;
1426 diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
1427 index b7b0d28..12a5340 100644
1428 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
1429 +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
1430 @@ -128,19 +128,6 @@ _ResetFinishFunction(
1431 ** Pointer to a variable that will hold the pointer to the gckKERNEL
1435 -#if gcdNEW_PROFILER_FILE
1436 -#define DEFAULT_PROFILE_FILE_NAME "/sdcard/vprofiler.vpd"
1438 -#define DEFAULT_PROFILE_FILE_NAME "/sdcard/vprofiler.xml"
1441 -#if gcdNEW_PROFILER_FILE
1442 -#define DEFAULT_PROFILE_FILE_NAME "vprofiler.vpd"
1444 -#define DEFAULT_PROFILE_FILE_NAME "vprofiler.xml"
1449 gckKERNEL_Construct(
1450 @@ -302,17 +289,12 @@ gckKERNEL_Construct(
1452 #if VIVANTE_PROFILER
1453 /* Initialize profile setting */
1454 -#if defined ANDROID
1455 kernel->profileEnable = gcvFALSE;
1457 - kernel->profileEnable = gcvTRUE;
1459 kernel->profileCleanRegister = gcvTRUE;
1463 - gckOS_MemCopy(kernel->profileFileName,
1464 - DEFAULT_PROFILE_FILE_NAME,
1465 - gcmSIZEOF(DEFAULT_PROFILE_FILE_NAME) + 1));
1466 +#if gcdANDROID_NATIVE_FENCE_SYNC
1467 + gcmkONERROR(gckOS_CreateSyncTimeline(Os, &kernel->timeline));
1470 /* Return pointer to the gckKERNEL object. */
1471 @@ -395,6 +377,13 @@ OnError:
1475 +#if gcdANDROID_NATIVE_FENCE_SYNC
1476 + if (kernel->timeline)
1478 + gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Os, kernel->timeline));
1482 gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Os, kernel));
1485 @@ -525,6 +514,10 @@ gckKERNEL_Destroy(
1489 +#if gcdANDROID_NATIVE_FENCE_SYNC
1490 + gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Kernel->os, Kernel->timeline));
1493 /* Mark the gckKERNEL object as unknown. */
1494 Kernel->object.type = gcvOBJ_UNKNOWN;
1496 @@ -1310,7 +1303,8 @@ gckKERNEL_Dispatch(
1497 /* Commit a command and context buffer. */
1499 gckCOMMAND_Commit(Kernel->command,
1500 - gcmNAME_TO_PTR(Interface->u.Commit.context),
1501 + Interface->u.Commit.context ?
1502 + gcmNAME_TO_PTR(Interface->u.Commit.context) : gcvNULL,
1503 gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffer),
1504 gcmUINT64_TO_PTR(Interface->u.Commit.delta),
1505 gcmUINT64_TO_PTR(Interface->u.Commit.queue),
1506 @@ -1600,7 +1594,15 @@ gckKERNEL_Dispatch(
1509 case gcvHAL_READ_ALL_PROFILE_REGISTERS:
1510 -#if VIVANTE_PROFILER
1511 +#if VIVANTE_PROFILER && VIVANTE_PROFILER_CONTEXT
1512 + /* Read profile data according to the context. */
1514 + gckHARDWARE_QueryContextProfile(
1516 + Kernel->profileCleanRegister,
1517 + gcmNAME_TO_PTR(Interface->u.RegisterProfileData.context),
1518 + &Interface->u.RegisterProfileData.counters));
1519 +#elif VIVANTE_PROFILER
1520 /* Read all 3D profile registers. */
1522 gckHARDWARE_QueryProfileRegisters(
1523 @@ -1628,11 +1630,6 @@ gckKERNEL_Dispatch(
1524 #if VIVANTE_PROFILER
1525 /* Get profile setting */
1526 Interface->u.GetProfileSetting.enable = Kernel->profileEnable;
1529 - gckOS_MemCopy(Interface->u.GetProfileSetting.fileName,
1530 - Kernel->profileFileName,
1531 - gcdMAX_PROFILE_FILE_NAME));
1534 status = gcvSTATUS_OK;
1535 @@ -1640,12 +1637,13 @@ gckKERNEL_Dispatch(
1536 case gcvHAL_SET_PROFILE_SETTING:
1537 #if VIVANTE_PROFILER
1538 /* Set profile setting */
1539 - Kernel->profileEnable = Interface->u.SetProfileSetting.enable;
1542 - gckOS_MemCopy(Kernel->profileFileName,
1543 - Interface->u.SetProfileSetting.fileName,
1544 - gcdMAX_PROFILE_FILE_NAME));
1545 + if(Kernel->hardware->gpuProfiler)
1546 + Kernel->profileEnable = Interface->u.SetProfileSetting.enable;
1549 + status = gcvSTATUS_NOT_SUPPORTED;
1554 status = gcvSTATUS_OK;
1555 @@ -2093,6 +2091,61 @@ gckKERNEL_Dispatch(
1559 +#if gcdANDROID_NATIVE_FENCE_SYNC
1560 + case gcvHAL_SYNC_POINT:
1562 + gctSYNC_POINT syncPoint;
1564 + switch (Interface->u.SyncPoint.command)
1566 + case gcvSYNC_POINT_CREATE:
1567 + gcmkONERROR(gckOS_CreateSyncPoint(Kernel->os, &syncPoint));
1569 + Interface->u.SyncPoint.syncPoint = gcmPTR_TO_UINT64(syncPoint);
1572 + gckKERNEL_AddProcessDB(Kernel,
1573 + processID, gcvDB_SYNC_POINT,
1579 + case gcvSYNC_POINT_DESTROY:
1580 + syncPoint = gcmUINT64_TO_PTR(Interface->u.SyncPoint.syncPoint);
1582 + gcmkONERROR(gckOS_DestroySyncPoint(Kernel->os, syncPoint));
1585 + gckKERNEL_RemoveProcessDB(Kernel,
1586 + processID, gcvDB_SYNC_POINT,
1591 + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
1597 + case gcvHAL_CREATE_NATIVE_FENCE:
1600 + gctSYNC_POINT syncPoint =
1601 + gcmUINT64_TO_PTR(Interface->u.CreateNativeFence.syncPoint);
1604 + gckOS_CreateNativeFence(Kernel->os,
1609 + Interface->u.CreateNativeFence.fenceFD = fenceFD;
1615 /* Invalid command. */
1616 gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
1617 @@ -2856,6 +2909,8 @@ gckKERNEL_Recovery(
1618 return gcvSTATUS_OK;
1621 + gcmkPRINT("[galcore]: GPU[%d] hang, automatic recovery.", Kernel->core);
1623 /* Start a timer to clear reset flag, before timer is expired,
1624 ** other recovery request is ignored. */
1626 @@ -3382,7 +3437,7 @@ gckLINKQUEUE_Dequeue(
1627 IN gckLINKQUEUE LinkQueue
1630 - gcmASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
1631 + gcmkASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
1634 LinkQueue->front = (LinkQueue->front + 1) % gcdLINK_QUEUE_SIZE;
1635 diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
1636 index 5896e93..1c40df2 100644
1637 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
1638 +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
1639 @@ -140,8 +140,9 @@ typedef enum _gceDATABASE_TYPE
1640 gcvDB_CONTEXT, /* Context */
1641 gcvDB_IDLE, /* GPU idle. */
1642 gcvDB_MAP_MEMORY, /* Map memory */
1643 - gcvDB_SHARED_INFO, /* Private data */
1644 - gcvDB_MAP_USER_MEMORY /* Map user memory */
1645 + gcvDB_SHARED_INFO, /* Private data */
1646 + gcvDB_MAP_USER_MEMORY, /* Map user memory */
1647 + gcvDB_SYNC_POINT, /* Sync point. */
1651 @@ -406,9 +407,6 @@ struct _gckKERNEL
1652 /* Enable profiling */
1653 gctBOOL profileEnable;
1655 - /* The profile file name */
1656 - gctCHAR profileFileName[gcdMAX_PROFILE_FILE_NAME];
1658 /* Clear profile register or not*/
1659 gctBOOL profileCleanRegister;
1661 @@ -445,6 +443,10 @@ struct _gckKERNEL
1666 +#if gcdANDROID_NATIVE_FENCE_SYNC
1667 + gctHANDLE timeline;
1671 struct _FrequencyHistory
1672 @@ -496,6 +498,11 @@ struct _gckCOMMAND
1673 /* Context switching mutex. */
1674 gctPOINTER mutexContext;
1676 +#if VIVANTE_PROFILER_CONTEXT
1677 + /* Context sequence mutex. */
1678 + gctPOINTER mutexContextSeq;
1681 /* Command queue power semaphore. */
1682 gctPOINTER powerSemaphore;
1684 @@ -649,6 +656,8 @@ struct _gckEVENT
1685 gctPOINTER eventListMutex;
1687 gctPOINTER submitTimer;
1689 + volatile gctBOOL inNotify;
1692 /* Free all events belonging to a process. */
1693 @@ -668,6 +677,11 @@ gckEVENT_Stop(
1694 IN OUT gctSIZE_T * waitSize
1698 +gckEVENT_WaitEmpty(
1702 /* gcuVIDMEM_NODE structure. */
1703 typedef union _gcuVIDMEM_NODE
1705 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
1706 index 9ee9ea1..73dab81 100644
1707 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
1708 +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
1709 @@ -494,6 +494,11 @@ gckCOMMAND_Construct(
1710 /* Create the context switching mutex. */
1711 gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContext));
1713 +#if VIVANTE_PROFILER_CONTEXT
1714 + /* Create the context switching mutex. */
1715 + gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContextSeq));
1718 /* Create the power management semaphore. */
1719 gcmkONERROR(gckOS_CreateSemaphore(os, &command->powerSemaphore));
1721 @@ -572,6 +577,13 @@ OnError:
1722 gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContext));
1725 +#if VIVANTE_PROFILER_CONTEXT
1726 + if (command->mutexContextSeq != gcvNULL)
1728 + gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContextSeq));
1732 if (command->mutexQueue != gcvNULL)
1734 gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexQueue));
1735 @@ -662,6 +674,11 @@ gckCOMMAND_Destroy(
1736 /* Delete the context switching mutex. */
1737 gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContext));
1739 +#if VIVANTE_PROFILER_CONTEXT
1740 + if (Command->mutexContextSeq != gcvNULL)
1741 + gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContextSeq));
1744 /* Delete the command queue mutex. */
1745 gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexQueue));
1747 @@ -1127,6 +1144,10 @@ gckCOMMAND_Commit(
1751 +#if VIVANTE_PROFILER_CONTEXT
1752 + gctBOOL sequenceAcquired = gcvFALSE;
1755 gctPOINTER pointer = gcvNULL;
1758 @@ -1145,6 +1166,17 @@ gckCOMMAND_Commit(
1760 gcmkONERROR(_FlushMMU(Command));
1762 +#if VIVANTE_PROFILER_CONTEXT
1763 + if((Command->kernel->hardware->gpuProfiler) && (Command->kernel->profileEnable))
1765 + /* Acquire the context sequnence mutex. */
1766 + gcmkONERROR(gckOS_AcquireMutex(
1767 + Command->os, Command->mutexContextSeq, gcvINFINITE
1769 + sequenceAcquired = gcvTRUE;
1773 /* Acquire the command queue. */
1774 gcmkONERROR(gckCOMMAND_EnterCommit(Command, gcvFALSE));
1775 commitEntered = gcvTRUE;
1776 @@ -2002,6 +2034,23 @@ gckCOMMAND_Commit(
1777 gcmkONERROR(gckCOMMAND_ExitCommit(Command, gcvFALSE));
1778 commitEntered = gcvFALSE;
1780 +#if VIVANTE_PROFILER_CONTEXT
1781 + if(sequenceAcquired)
1783 + gcmkONERROR(gckCOMMAND_Stall(Command, gcvTRUE));
1784 + if (Command->currContext)
1786 + gcmkONERROR(gckHARDWARE_UpdateContextProfile(
1788 + Command->currContext));
1791 + /* Release the context switching mutex. */
1792 + gcmkONERROR(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
1793 + sequenceAcquired = gcvFALSE;
1797 /* Loop while there are records in the queue. */
1798 while (EventQueue != gcvNULL)
1800 @@ -2114,6 +2163,14 @@ OnError:
1801 gcmkVERIFY_OK(gckCOMMAND_ExitCommit(Command, gcvFALSE));
1804 +#if VIVANTE_PROFILER_CONTEXT
1805 + if (sequenceAcquired)
1807 + /* Release the context sequence mutex. */
1808 + gcmkVERIFY_OK(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
1812 /* Unmap the command buffer pointer. */
1813 if (commandBufferMapped)
1815 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
1816 index 76c1c10..1a7c340 100644
1817 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
1818 +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
1819 @@ -2819,6 +2819,7 @@ gckVGCOMMAND_Construct(
1820 ** Enable TS overflow interrupt.
1823 + command->info.tsOverflowInt = 0;
1824 gcmkERR_BREAK(gckVGINTERRUPT_Enable(
1826 &command->info.tsOverflowInt,
1827 @@ -3406,38 +3407,26 @@ gckVGCOMMAND_Commit(
1828 gctBOOL previousExecuted;
1829 gctUINT controlIndex;
1831 + gcmkERR_BREAK(gckVGHARDWARE_SetPowerManagementState(
1832 + Command->hardware, gcvPOWER_ON_AUTO
1835 + /* Acquire the power semaphore. */
1836 + gcmkERR_BREAK(gckOS_AcquireSemaphore(
1837 + Command->os, Command->powerSemaphore
1840 /* Acquire the mutex. */
1841 - gcmkERR_BREAK(gckOS_AcquireMutex(
1842 + status = gckOS_AcquireMutex(
1844 Command->commitMutex,
1848 - status = gckVGHARDWARE_SetPowerManagementState(
1849 - Command->hardware, gcvPOWER_ON_AUTO);
1851 - if (gcmIS_ERROR(status))
1853 - /* Acquire the mutex. */
1854 - gcmkVERIFY_OK(gckOS_ReleaseMutex(
1856 - Command->commitMutex
1861 - /* Acquire the power semaphore. */
1862 - status = gckOS_AcquireSemaphore(
1863 - Command->os, Command->powerSemaphore);
1866 if (gcmIS_ERROR(status))
1868 - /* Acquire the mutex. */
1869 - gcmkVERIFY_OK(gckOS_ReleaseMutex(
1871 - Command->commitMutex
1874 + gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
1875 + Command->os, Command->powerSemaphore));
1879 @@ -3669,14 +3658,14 @@ gckVGCOMMAND_Commit(
1883 - gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
1884 - Command->os, Command->powerSemaphore));
1886 /* Release the mutex. */
1887 gcmkCHECK_STATUS(gckOS_ReleaseMutex(
1889 Command->commitMutex
1892 + gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
1893 + Command->os, Command->powerSemaphore));
1897 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
1898 index 673d4f7..134351a 100644
1899 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
1900 +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
1901 @@ -1307,6 +1307,18 @@ gckKERNEL_DestroyProcessDB(
1902 status = gckOS_FreeMemory(Kernel->os, record->physical);
1905 +#if gcdANDROID_NATIVE_FENCE_SYNC
1906 + case gcvDB_SYNC_POINT:
1907 + /* Free the user signal. */
1908 + status = gckOS_DestroySyncPoint(Kernel->os,
1909 + (gctSYNC_POINT) record->data);
1911 + gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE,
1912 + "DB: SYNC POINT %d (status=%d)",
1913 + (gctINT)(gctUINTPTR_T)record->data, status);
1918 gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DATABASE,
1919 "DB: Correcupted record=0x%08x type=%d",
1920 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
1921 index 217f7f1..2d81a56 100644
1922 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
1923 +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
1924 @@ -931,6 +931,7 @@ gckEVENT_AddList(
1925 || (Interface->command == gcvHAL_TIMESTAMP)
1926 || (Interface->command == gcvHAL_COMMIT_DONE)
1927 || (Interface->command == gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER)
1928 + || (Interface->command == gcvHAL_SYNC_POINT)
1931 /* Validate the source. */
1932 @@ -2131,6 +2132,9 @@ gckEVENT_Notify(
1936 + /* We are in the notify loop. */
1937 + Event->inNotify = gcvTRUE;
1939 /* Grab the event head. */
1940 record = queue->head;
1942 @@ -2463,6 +2467,17 @@ gckEVENT_Notify(
1946 +#if gcdANDROID_NATIVE_FENCE_SYNC
1947 + case gcvHAL_SYNC_POINT:
1949 + gctSYNC_POINT syncPoint;
1951 + syncPoint = gcmUINT64_TO_PTR(record->info.u.SyncPoint.syncPoint);
1952 + status = gckOS_SignalSyncPoint(Event->os, syncPoint);
1957 case gcvHAL_COMMIT_DONE:
1960 @@ -2505,6 +2520,9 @@ gckEVENT_Notify(
1961 gcmkONERROR(_TryToIdleGPU(Event));
1964 + /* We are out the notify loop. */
1965 + Event->inNotify = gcvFALSE;
1969 return gcvSTATUS_OK;
1970 @@ -2524,6 +2542,9 @@ OnError:
1974 + /* We are out the notify loop. */
1975 + Event->inNotify = gcvFALSE;
1977 /* Return the status. */
1980 @@ -2871,3 +2892,11 @@ gckEVENT_Dump(
1981 return gcvSTATUS_OK;
1984 +gceSTATUS gckEVENT_WaitEmpty(gckEVENT Event)
1988 + while (Event->inNotify || (gcmIS_SUCCESS(gckEVENT_IsEmpty(Event, &isEmpty)) && !isEmpty)) ;
1990 + return gcvSTATUS_OK;
1992 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
1993 index 8ac187b..50bc63e 100644
1994 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
1995 +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
1996 @@ -794,6 +794,9 @@ gckVGINTERRUPT_Enque(
1997 Interrupt->kernel->hardware, &triggered
2000 + /* Mask out TS overflow interrupt */
2001 + triggered &= 0xfffffffe;
2003 /* No interrupts to process? */
2006 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
2007 index c7f67c7..e4ca497 100644
2008 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
2009 +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
2010 @@ -1436,7 +1436,7 @@ gckMMU_AllocatePages(
2013 /* Allocate page table for current MMU. */
2014 - for (i = 0; i < mirrorPageTable->reference; i++)
2015 + for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2017 if (Mmu == mirrorPageTable->mmus[i])
2019 @@ -1446,7 +1446,7 @@ gckMMU_AllocatePages(
2022 /* Allocate page table for other MMUs. */
2023 - for (i = 0; i < mirrorPageTable->reference; i++)
2024 + for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2026 mmu = mirrorPageTable->mmus[i];
2028 @@ -1500,7 +1500,7 @@ gckMMU_FreePages(
2030 offset = (gctUINT32)PageTable - (gctUINT32)Mmu->pageTableLogical;
2032 - for (i = 0; i < mirrorPageTable->reference; i++)
2033 + for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2035 mmu = mirrorPageTable->mmus[i];
2037 @@ -1639,7 +1639,7 @@ gckMMU_SetPage(
2038 _WritePageEntry(PageEntry, data);
2040 #if gcdMIRROR_PAGETABLE
2041 - for (i = 0; i < mirrorPageTable->reference; i++)
2042 + for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2044 mmu = mirrorPageTable->mmus[i];
2046 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
2047 index 8b8bbdc..3b5dd82 100644
2048 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
2049 +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
2050 @@ -1582,6 +1582,7 @@ _NeedVirtualMapping(
2054 + gctUINT32 baseAddress;
2056 gcmkHEADER_ARG("Node=0x%X", Node);
2058 @@ -1601,10 +1602,16 @@ _NeedVirtualMapping(
2062 - /* For cores which can't access all physical address. */
2063 - gcmkONERROR(gckHARDWARE_ConvertLogical(Kernel->hardware,
2064 - Node->Virtual.logical,
2066 + /* Convert logical address into a physical address. */
2068 + gckOS_GetPhysicalAddress(Kernel->os, Node->Virtual.logical, &phys));
2070 + gcmkONERROR(gckOS_GetBaseAddress(Kernel->os, &baseAddress));
2072 + gcmkASSERT(phys >= baseAddress);
2074 + /* Subtract baseAddress to get a GPU address used for programming. */
2075 + phys -= baseAddress;
2077 /* If part of region is belong to gcvPOOL_VIRTUAL,
2078 ** whole region has to be mapped. */
2079 @@ -1734,6 +1741,11 @@ gckVIDMEM_Lock(
2080 gcmkONERROR(gckOS_AcquireMutex(os, Node->Virtual.mutex, gcvINFINITE));
2083 +#if gcdPAGED_MEMORY_CACHEABLE
2084 + /* Force video memory cacheable. */
2085 + Cacheable = gcvTRUE;
2090 Node->Virtual.physical,
2091 diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
2092 index 4406d7e..7312cc2 100644
2093 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
2094 +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
2095 @@ -123,6 +123,12 @@ extern "C" {
2097 #define gcvINVALID_ADDRESS ~0U
2099 +#define gcmGET_PRE_ROTATION(rotate) \
2100 + ((rotate) & (~(gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y)))
2102 +#define gcmGET_POST_ROTATION(rotate) \
2103 + ((rotate) & (gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y))
2105 /******************************************************************************\
2106 ******************************** gcsOBJECT Object *******************************
2107 \******************************************************************************/
2108 @@ -1124,6 +1130,60 @@ gckOS_UnmapUserMemory(
2109 IN gctUINT32 Address
2112 +/******************************************************************************\
2113 +************************** Android Native Fence Sync ***************************
2114 +\******************************************************************************/
2116 +gckOS_CreateSyncTimeline(
2118 + OUT gctHANDLE * Timeline
2122 +gckOS_DestroySyncTimeline(
2124 + IN gctHANDLE Timeline
2128 +gckOS_CreateSyncPoint(
2130 + OUT gctSYNC_POINT * SyncPoint
2134 +gckOS_ReferenceSyncPoint(
2136 + IN gctSYNC_POINT SyncPoint
2140 +gckOS_DestroySyncPoint(
2142 + IN gctSYNC_POINT SyncPoint
2146 +gckOS_SignalSyncPoint(
2148 + IN gctSYNC_POINT SyncPoint
2152 +gckOS_QuerySyncPoint(
2154 + IN gctSYNC_POINT SyncPoint,
2155 + OUT gctBOOL_PTR State
2159 +gckOS_CreateNativeFence(
2161 + IN gctHANDLE Timeline,
2162 + IN gctSYNC_POINT SyncPoint,
2163 + OUT gctINT * FenceFD
2166 #if !USE_NEW_LINUX_SIGNAL
2167 /* Create signal to be used in the user space. */
2169 @@ -1758,7 +1818,7 @@ gckKERNEL_Recovery(
2171 gckKERNEL_SetTimeOut(
2172 IN gckKERNEL Kernel,
2173 - IN gctUINT32 timeOut
2174 + IN gctUINT32 timeOut
2177 /* Get access to the user data. */
2178 @@ -2078,6 +2138,12 @@ gckHARDWARE_SetPowerManagement(
2179 IN gctBOOL PowerManagement
2183 +gckHARDWARE_SetGpuProfiler(
2184 + IN gckHARDWARE Hardware,
2185 + IN gctBOOL GpuProfiler
2188 #if gcdENABLE_FSCALE_VAL_ADJUST
2190 gckHARDWARE_SetFscaleValue(
2191 @@ -2554,6 +2620,22 @@ gckHARDWARE_QueryProfileRegisters(
2195 +#if VIVANTE_PROFILER_CONTEXT
2197 +gckHARDWARE_QueryContextProfile(
2198 + IN gckHARDWARE Hardware,
2200 + IN gckCONTEXT Context,
2201 + OUT gcsPROFILER_COUNTERS * Counters
2205 +gckHARDWARE_UpdateContextProfile(
2206 + IN gckHARDWARE Hardware,
2207 + IN gckCONTEXT Context
2212 gckOS_SignalQueryHardware(
2214 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
2215 index 44689b0..9c17114 100644
2216 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
2217 +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
2218 @@ -71,10 +71,17 @@ typedef struct _gcoFENCE * gcoFENCE;
2219 typedef struct _gcsSYNC_CONTEXT * gcsSYNC_CONTEXT_PTR;
2222 +typedef struct _gcoOS_SymbolsList gcoOS_SymbolsList;
2224 /******************************************************************************\
2225 ******************************* Process local storage *************************
2226 \******************************************************************************/
2227 typedef struct _gcsPLS * gcsPLS_PTR;
2229 +typedef void (* gctPLS_DESTRUCTOR) (
2233 typedef struct _gcsPLS
2235 /* Global objects. */
2236 @@ -103,6 +110,12 @@ typedef struct _gcsPLS
2238 /* PorcessID of the constrcutor process */
2239 gctUINT32 processID;
2240 +#if gcdFORCE_GAL_LOAD_TWICE
2241 + /* ThreadID of the constrcutor process. */
2242 + gctSIZE_T threadID;
2243 + /* Flag for calling module destructor. */
2247 /* Reference count for destructor. */
2248 gcsATOM_PTR reference;
2249 @@ -111,6 +124,8 @@ typedef struct _gcsPLS
2250 gctBOOL bNeedSupportNP2Texture;
2253 + /* Destructor for eglDisplayInfo. */
2254 + gctPLS_DESTRUCTOR destructor;
2258 @@ -148,6 +163,11 @@ typedef struct _gcsTLS
2263 +#if gcdFORCE_GAL_LOAD_TWICE
2264 + /* libGAL.so handle */
2270 @@ -160,6 +180,7 @@ typedef enum _gcePLS_VALUE
2271 gcePLS_VALUE_EGL_DISPLAY_INFO,
2272 gcePLS_VALUE_EGL_SURFACE_INFO,
2273 gcePLS_VALUE_EGL_CONFIG_FORMAT_INFO,
2274 + gcePLS_VALUE_EGL_DESTRUCTOR_INFO,
2278 @@ -577,6 +598,12 @@ gcoHAL_Call(
2279 IN OUT gcsHAL_INTERFACE_PTR Interface
2285 + OUT gcePATCH_ID * PatchID
2288 /* Schedule an event. */
2290 gcoHAL_ScheduleEvent(
2291 @@ -637,6 +664,16 @@ gcoHAL_QuerySeparated3D2D(
2296 +gcoHAL_QuerySpecialHint(
2297 + IN gceSPECIAL_HINT Hint
2301 +gcoHAL_SetSpecialHintData(
2302 + IN gcoHARDWARE Hardware
2305 /* Get pointer to gcoVG object. */
2308 @@ -786,7 +823,6 @@ gcoOS_FreeVideoMemory(
2309 IN gctPOINTER Handle
2312 -#if gcdENABLE_BANK_ALIGNMENT
2314 gcoSURF_GetBankOffsetBytes(
2316 @@ -794,7 +830,6 @@ gcoSURF_GetBankOffsetBytes(
2317 IN gctUINT32 Stride,
2318 IN gctUINT32_PTR Bytes
2322 /* Map user memory. */
2324 @@ -918,6 +953,21 @@ gcoOS_Flush(
2328 +/* Close a file descriptor. */
2335 +/* Dup file descriptor to another. */
2343 /* Create an endpoint for communication. */
2346 @@ -977,6 +1027,14 @@ gcoOS_GetEnv(
2347 OUT gctSTRING * Value
2350 +/* Set environment variable value. */
2354 + IN gctCONST_STRING VarName,
2355 + IN gctSTRING Value
2358 /* Get current working directory. */
2361 @@ -1210,6 +1268,13 @@ gcoOS_DetectProcessByEncryptedName(
2362 IN gctCONST_STRING Name
2365 +#if defined(ANDROID)
2367 +gcoOS_DetectProgrameByEncryptedSymbols(
2368 + IN gcoOS_SymbolsList Symbols
2372 /*----------------------------------------------------------------------------*/
2373 /*----- Atoms ----------------------------------------------------------------*/
2375 @@ -1403,6 +1468,42 @@ gcoOS_UnmapSignal(
2379 +/*----------------------------------------------------------------------------*/
2380 +/*----- Android Native Fence -------------------------------------------------*/
2382 +/* Create sync point. */
2384 +gcoOS_CreateSyncPoint(
2386 + OUT gctSYNC_POINT * SyncPoint
2389 +/* Destroy sync point. */
2391 +gcoOS_DestroySyncPoint(
2393 + IN gctSYNC_POINT SyncPoint
2396 +/* Create native fence. */
2398 +gcoOS_CreateNativeFence(
2400 + IN gctSYNC_POINT SyncPoint,
2401 + OUT gctINT * FenceFD
2404 +/* Wait on native fence. */
2406 +gcoOS_WaitNativeFence(
2408 + IN gctINT FenceFD,
2409 + IN gctUINT32 Timeout
2412 +/*----------------------------------------------------------------------------*/
2413 +/*----- Memory Access and Cache ----------------------------------------------*/
2415 /* Write a register. */
2417 gcoOS_WriteRegister(
2418 @@ -1507,7 +1608,7 @@ gcoOS_QueryProfileTickRate(
2419 # define gcmPROFILE_QUERY(start, ticks) do { } while (gcvFALSE)
2420 # define gcmPROFILE_ONLY(x) do { } while (gcvFALSE)
2421 # define gcmPROFILE_ELSE(x) x
2422 -# define gcmPROFILE_DECLARE_ONLY(x) typedef x
2423 +# define gcmPROFILE_DECLARE_ONLY(x) do { } while (gcvFALSE)
2424 # define gcmPROFILE_DECLARE_ELSE(x) x
2427 @@ -1579,6 +1680,28 @@ typedef struct _gcsRECT
2431 +typedef union _gcsPIXEL
2435 + gctFLOAT r, g, b, a;
2441 + gctINT32 r, g, b, a;
2447 + gctUINT32 r, g, b, a;
2454 /******************************************************************************\
2455 ********************************* gcoSURF Object ********************************
2456 @@ -1795,6 +1918,18 @@ gcoSURF_SetRotation(
2460 +gcoSURF_SetPreRotation(
2461 + IN gcoSURF Surface,
2462 + IN gceSURF_ROTATION Rotation
2466 +gcoSURF_GetPreRotation(
2467 + IN gcoSURF Surface,
2468 + IN gceSURF_ROTATION *Rotation
2475 @@ -1824,6 +1959,15 @@ gcoSURF_DisableTileStatus(
2477 IN gctBOOL Decompress
2481 +gcoSURF_AlignResolveRect(
2483 + IN gcsPOINT_PTR RectOrigin,
2484 + IN gcsPOINT_PTR RectSize,
2485 + OUT gcsPOINT_PTR AlignedOrigin,
2486 + OUT gcsPOINT_PTR AlignedSize
2488 #endif /* VIVANTE_NO_3D */
2490 /* Get surface size. */
2491 @@ -1910,6 +2054,9 @@ gcoSURF_FillFromTile(
2495 +/* Check if surface needs a filler. */
2496 +gceSTATUS gcoSURF_NeedFiller(IN gcoSURF Surface);
2498 /* Fill surface with a value. */
2501 @@ -1949,6 +2096,19 @@ gcoSURF_SetBuffer(
2502 IN gctUINT32 Physical
2505 +/* Set the underlying video buffer for the surface wrapper. */
2507 +gcoSURF_SetVideoBuffer(
2508 + IN gcoSURF Surface,
2509 + IN gceSURF_TYPE Type,
2510 + IN gceSURF_FORMAT Format,
2512 + IN gctUINT Height,
2513 + IN gctUINT Stride,
2514 + IN gctPOINTER *LogicalPlane1,
2515 + IN gctUINT32 *PhysicalPlane1
2518 /* Set the size of the surface in pixels and map the underlying buffer. */
2521 @@ -3705,6 +3865,12 @@ gcGetUserDebugOption(
2525 +struct _gcoOS_SymbolsList
2527 + gcePATCH_ID patchId;
2528 + const char * symList[10];
2532 #define gcmUSER_DEBUG_MSG(level, ...) \
2534 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
2535 index 8693c37..062224c 100644
2536 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
2537 +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
2538 @@ -39,12 +39,10 @@ extern "C" {
2539 #define GC_ENABLE_LOADTIME_OPT 1
2542 -#define TEMP_OPT_CONSTANT_TEXLD_COORD 1
2543 +#define TEMP_OPT_CONSTANT_TEXLD_COORD 0
2545 #define TEMP_SHADER_PATCH 1
2547 -#define ADD_PRE_ROTATION_TO_VS 0
2549 #define TEMP_INLINE_ALL_EXPANSION 1
2550 /******************************* IR VERSION ******************/
2551 #define gcdSL_IR_VERSION gcmCC('\0','\0','\0','\1')
2552 @@ -271,6 +269,7 @@ typedef enum _gcSL_OPCODE
2553 gcSL_ADDSAT, /* 0x5C */ /* Integer only. */
2554 gcSL_SUBSAT, /* 0x5D */ /* Integer only. */
2555 gcSL_MULSAT, /* 0x5E */ /* Integer only. */
2556 + gcSL_DP2, /* 0x5F */
2560 @@ -474,6 +473,9 @@ struct _gcsHINT
2564 + /* Flag whether or not the shader has a KILL instruction. */
2567 /* Element count. */
2568 gctUINT32 elementCount;
2570 @@ -495,12 +497,18 @@ struct _gcsHINT
2571 /* Balance maximum. */
2572 gctUINT32 balanceMax;
2574 + /* Auto-shift balancing. */
2575 + gctBOOL autoShift;
2577 /* Flag whether the PS outputs the depth value or not. */
2578 gctBOOL psHasFragDepthOut;
2580 /* Flag whether the ThreadWalker is in PS. */
2581 gctBOOL threadWalkerInPS;
2583 + /* HW reg number for position of VS */
2584 + gctUINT32 hwRegNoOfSIVPos;
2586 #if gcdALPHA_KILL_IN_SHADER
2587 /* States to set when alpha kill is enabled. */
2588 gctUINT32 killStateAddress;
2589 @@ -687,12 +695,12 @@ typedef enum _gceSHADER_FLAGS
2590 gcvSHADER_USE_ALPHA_KILL = 0x100,
2593 -#if ADD_PRE_ROTATION_TO_VS
2594 +#if gcdPRE_ROTATION && (ANDROID_SDK_VERSION >= 14)
2595 gcvSHADER_VS_PRE_ROTATION = 0x200,
2598 #if TEMP_INLINE_ALL_EXPANSION
2599 - gcvSHADER_INLINE_ALL_EXPANSION = 0x200,
2600 + gcvSHADER_INLINE_ALL_EXPANSION = 0x400,
2604 @@ -827,6 +835,7 @@ typedef struct _gcOPTIMIZER_OPTION
2605 gctBOOL dumpOptimizerVerbose; /* dump result IR in each optimization phase */
2606 gctBOOL dumpBEGenertedCode; /* dump generated machine code */
2607 gctBOOL dumpBEVerbose; /* dump BE tree and optimization detail */
2608 + gctBOOL dumpBEFinalIR; /* dump BE final IR */
2610 /* Code generation */
2612 @@ -945,6 +954,8 @@ extern gcOPTIMIZER_OPTION theOptimizerOption;
2613 gcmOPT_DUMP_CODEGEN_VERBOSE() )
2614 #define gcmOPT_DUMP_CODEGEN_VERBOSE() \
2615 (gcmGetOptimizerOption()->dumpBEVerbose != 0)
2616 +#define gcmOPT_DUMP_FINAL_IR() \
2617 + (gcmGetOptimizerOption()->dumpBEFinalIR != 0)
2619 #define gcmOPT_SET_DUMP_SHADER_SRC(v) \
2620 gcmGetOptimizerOption()->dumpShaderSource = (v)
2621 @@ -1064,6 +1075,13 @@ typedef struct _gcNPOT_PATCH_PARAM
2622 gctINT texDimension; /* 2 or 3 */
2623 }gcNPOT_PATCH_PARAM, *gcNPOT_PATCH_PARAM_PTR;
2625 +typedef struct _gcZBIAS_PATCH_PARAM
2627 + /* Driver uses this to program uniform that designating zbias */
2628 + gctINT uniformAddr;
2630 +}gcZBIAS_PATCH_PARAM, *gcZBIAS_PATCH_PARAM_PTR;
2634 IN OUT gcOPTIMIZER_OPTION * Option
2635 @@ -1556,6 +1574,43 @@ gcSHADER_AddUniform(
2636 OUT gcUNIFORM * Uniform
2639 +/*******************************************************************************
2640 +** gcSHADER_AddPreRotationUniform
2641 +********************************************************************************
2643 +** Add an uniform to a gcSHADER object.
2648 +** Pointer to a gcSHADER object.
2650 +** gctCONST_STRING Name
2651 +** Name of the uniform to add.
2653 +** gcSHADER_TYPE Type
2654 +** Type of the uniform to add.
2656 +** gctSIZE_T Length
2657 +** Array length of the uniform to add. 'Length' must be at least 1.
2664 +** gcUNIFORM * Uniform
2665 +** Pointer to a variable receiving the gcUNIFORM object pointer.
2668 +gcSHADER_AddPreRotationUniform(
2669 + IN gcSHADER Shader,
2670 + IN gctCONST_STRING Name,
2671 + IN gcSHADER_TYPE Type,
2672 + IN gctSIZE_T Length,
2674 + OUT gcUNIFORM * Uniform
2677 /*******************************************************************************
2678 ** gcSHADER_AddUniformEx
2679 @@ -1677,6 +1732,28 @@ gcSHADER_GetUniformCount(
2682 /*******************************************************************************
2683 +** gcSHADER_GetPreRotationUniform
2684 +********************************************************************************
2686 +** Get the preRotate Uniform.
2691 +** Pointer to a gcSHADER object.
2695 +** gcUNIFORM ** pUniform
2696 +** Pointer to a preRotation uniforms array.
2699 +gcSHADER_GetPreRotationUniform(
2700 + IN gcSHADER Shader,
2701 + OUT gcUNIFORM ** pUniform
2704 +/*******************************************************************************
2705 ** gcSHADER_GetUniform
2706 ********************************************************************************
2708 @@ -3438,6 +3515,34 @@ gcUNIFORM_SetValueF(
2711 /*******************************************************************************
2712 +** gcUNIFORM_ProgramF
2714 +** Set the value of a uniform in floating point.
2718 +** gctUINT32 Address
2719 +** Address of Uniform.
2721 +** gctSIZE_T Row/Col
2723 +** const gctFLOAT * Value
2724 +** Pointer to a buffer holding the floating point values for the
2732 +gcUNIFORM_ProgramF(
2733 + IN gctUINT32 Address,
2736 + IN const gctFLOAT * Value
2739 +/*******************************************************************************
2740 ** gcUNIFORM_GetModelViewProjMatrix
2741 ********************************************************************************
2743 @@ -3912,6 +4017,23 @@ gcRecompileShaders(
2744 IN gctUINT32 *SamplerWrapS,
2745 IN gctUINT32 *SamplerWrapT
2749 +gcRecompileDepthBias(
2751 + IN gcMACHINECODE_PTR pVsMachineCode,
2752 + /*Recompile variables*/
2753 + IN OUT gctPOINTER *ppRecompileStateBuffer,
2754 + IN OUT gctSIZE_T *pRecompileStateBufferSize,
2755 + IN OUT gcsHINT_PTR *ppRecompileHints,
2757 + IN gctPOINTER pNativeStateBuffer,
2758 + IN gctSIZE_T nativeStateBufferSize,
2759 + IN gcsHINT_PTR pNativeHints,
2760 + OUT gctINT * uniformAddr,
2761 + OUT gctINT * uniformChannel
2764 /*******************************************************************************
2766 ********************************************************************************
2767 @@ -4138,6 +4260,16 @@ gcSHADER_PatchNPOTForMachineCode(
2768 IN OUT gcsHINT_PTR pHints /* User needs copy original hints to this one, then passed this one in */
2772 +gcSHADER_PatchZBiasForMachineCodeVS(
2773 + IN gcMACHINECODE_PTR pMachineCode,
2774 + IN OUT gcZBIAS_PATCH_PARAM_PTR pPatchParam,
2775 + IN gctUINT hwSupportedInstCount,
2776 + OUT gctPOINTER* ppCmdBuffer,
2777 + OUT gctUINT32* pByteSizeOfCmdBuffer,
2778 + IN OUT gcsHINT_PTR pHints /* User needs copy original hints to this one, then passed this one in */
2784 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
2785 index b056c52..fc8c395 100644
2786 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
2787 +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
2788 @@ -166,6 +166,12 @@ typedef enum _gceHAL_COMMAND_CODES
2790 /* Reset time stamp. */
2791 gcvHAL_QUERY_RESET_TIME_STAMP,
2793 + /* Sync point operations. */
2794 + gcvHAL_SYNC_POINT,
2796 + /* Create native fence and return its fd. */
2797 + gcvHAL_CREATE_NATIVE_FENCE,
2799 gceHAL_COMMAND_CODES;
2801 @@ -723,6 +729,10 @@ typedef struct _gcsHAL_INTERFACE
2802 /* gcvHAL_READ_ALL_PROFILE_REGISTERS */
2803 struct _gcsHAL_READ_ALL_PROFILE_REGISTERS
2805 +#if VIVANTE_PROFILER_CONTEXT
2806 + /* Context buffer object gckCONTEXT. Just a name. */
2807 + IN gctUINT32 context;
2810 OUT gcsPROFILER_COUNTERS counters;
2812 @@ -978,6 +988,33 @@ typedef struct _gcsHAL_INTERFACE
2813 OUT gctUINT64 timeStamp;
2815 QueryResetTimeStamp;
2817 + struct _gcsHAL_SYNC_POINT
2820 + gceSYNC_POINT_COMMAND_CODES command;
2823 + IN OUT gctUINT64 syncPoint;
2826 + IN gceKERNEL_WHERE fromWhere;
2828 + /* Signaled state. */
2829 + OUT gctBOOL state;
2833 + struct _gcsHAL_CREATE_NATIVE_FENCE
2835 + /* Signal id to dup. */
2836 + IN gctUINT64 syncPoint;
2838 + /* Native fence file descriptor. */
2839 + OUT gctINT fenceFD;
2842 + CreateNativeFence;
2846 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
2847 index 8481375..3fb2fe4 100644
2848 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
2849 +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
2850 @@ -323,6 +323,15 @@ gcoSURF_Resolve(
2851 IN gcoSURF DestSurface
2855 +gcoSURF_IsHWResolveable(
2856 + IN gcoSURF SrcSurface,
2857 + IN gcoSURF DestSurface,
2858 + IN gcsPOINT_PTR SrcOrigin,
2859 + IN gcsPOINT_PTR DestOrigin,
2860 + IN gcsPOINT_PTR RectSize
2863 /* Resolve rectangular area of a surface. */
2865 gcoSURF_ResolveRect(
2866 @@ -345,6 +354,11 @@ gcoSURF_IsRenderable(
2871 +gcoSURF_IsFormatRenderableAsRT(
2872 + IN gcoSURF Surface
2878 @@ -1006,6 +1020,7 @@ typedef struct _gcsALPHA_INFO
2882 + gctFLOAT floatReference;
2884 /* Alpha blending states. */
2886 @@ -1040,7 +1055,8 @@ gco3D_SetAlphaCompare(
2888 gco3D_SetAlphaReference(
2890 - IN gctUINT8 Reference
2891 + IN gctUINT8 Reference,
2892 + IN gctFLOAT FloatReference
2895 /* Set alpha test reference in fixed point. */
2896 @@ -1504,6 +1520,19 @@ gcoTEXTURE_UploadSub(
2897 IN gceSURF_FORMAT Format
2900 +/* Upload YUV data to an gcoTEXTURE object. */
2902 +gcoTEXTURE_UploadYUV(
2903 + IN gcoTEXTURE Texture,
2904 + IN gceTEXTURE_FACE Face,
2906 + IN gctUINT Height,
2908 + IN gctPOINTER Memory[3],
2909 + IN gctINT Stride[3],
2910 + IN gceSURF_FORMAT Format
2913 /* Upload compressed data to an gcoTEXTURE object. */
2915 gcoTEXTURE_UploadCompressed(
2916 @@ -1621,6 +1650,13 @@ gcoTEXTURE_QueryCaps(
2920 +gcoTEXTURE_GetTiling(
2921 + IN gcoTEXTURE Texture,
2922 + IN gctINT preferLevel,
2923 + OUT gceTILING * Tiling
2927 gcoTEXTURE_GetClosestFormat(
2929 IN gceSURF_FORMAT InFormat,
2930 @@ -2001,6 +2037,14 @@ gcoHAL_SetSharedInfo(
2934 +#if VIVANTE_PROFILER_CONTEXT
2936 +gcoHARDWARE_GetContext(
2937 + IN gcoHARDWARE Hardware,
2938 + OUT gctUINT32 * Context
2945 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
2946 index a1d9ae5..8e3c2f8 100644
2947 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
2948 +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
2949 @@ -146,10 +146,26 @@ typedef enum _gceFEATURE
2950 gcvFEATURE_FRUSTUM_CLIP_FIX,
2951 gcvFEATURE_TEXTURE_LINEAR,
2952 gcvFEATURE_TEXTURE_YUV_ASSEMBLER,
2953 + gcvFEATURE_SHADER_HAS_INSTRUCTION_CACHE,
2954 gcvFEATURE_DYNAMIC_FREQUENCY_SCALING,
2955 gcvFEATURE_BUGFIX15,
2956 + gcvFEATURE_2D_GAMMA,
2957 + gcvFEATURE_2D_COLOR_SPACE_CONVERSION,
2958 + gcvFEATURE_2D_SUPER_TILE_VERSION,
2959 gcvFEATURE_2D_MIRROR_EXTENSION,
2960 + gcvFEATURE_2D_SUPER_TILE_V1,
2961 + gcvFEATURE_2D_SUPER_TILE_V2,
2962 + gcvFEATURE_2D_SUPER_TILE_V3,
2963 + gcvFEATURE_2D_MULTI_SOURCE_BLT_EX2,
2964 gcvFEATURE_ELEMENT_INDEX_UINT,
2965 + gcvFEATURE_2D_COMPRESSION,
2966 + gcvFEATURE_2D_OPF_YUV_OUTPUT,
2967 + gcvFEATURE_2D_MULTI_SRC_BLT_TO_UNIFIED_DST_RECT,
2968 + gcvFEATURE_2D_YUV_MODE,
2969 + gcvFEATURE_DECOMPRESS_Z16,
2970 + gcvFEATURE_LINEAR_RENDER_TARGET,
2971 + gcvFEATURE_BUG_FIXES8,
2972 + gcvFEATURE_HALTI2,
2976 @@ -203,11 +219,14 @@ typedef enum _gceSURF_TYPE
2977 gcvSURF_NO_VIDMEM = 0x200, /* Used to allocate surfaces with no underlying vidmem node.
2978 In Android, vidmem node is allocated by another process. */
2979 gcvSURF_CACHEABLE = 0x400, /* Used to allocate a cacheable surface */
2980 -#if gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
2981 gcvSURF_FLIP = 0x800, /* The Resolve Target the will been flip resolve from RT */
2983 gcvSURF_TILE_STATUS_DIRTY = 0x1000, /* Init tile status to all dirty */
2985 + gcvSURF_LINEAR = 0x2000,
2987 + gcvSURF_TEXTURE_LINEAR = gcvSURF_TEXTURE
2990 gcvSURF_RENDER_TARGET_NO_TILE_STATUS = gcvSURF_RENDER_TARGET
2991 | gcvSURF_NO_TILE_STATUS,
2993 @@ -217,6 +236,9 @@ typedef enum _gceSURF_TYPE
2994 gcvSURF_DEPTH_NO_TILE_STATUS = gcvSURF_DEPTH
2995 | gcvSURF_NO_TILE_STATUS,
2997 + gcvSURF_DEPTH_TS_DIRTY = gcvSURF_DEPTH
2998 + | gcvSURF_TILE_STATUS_DIRTY,
3000 /* Supported surface types with no vidmem node. */
3001 gcvSURF_BITMAP_NO_VIDMEM = gcvSURF_BITMAP
3002 | gcvSURF_NO_VIDMEM,
3003 @@ -231,10 +253,8 @@ typedef enum _gceSURF_TYPE
3004 gcvSURF_CACHEABLE_BITMAP = gcvSURF_BITMAP
3005 | gcvSURF_CACHEABLE,
3007 -#if gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
3008 gcvSURF_FLIP_BITMAP = gcvSURF_BITMAP
3014 @@ -263,6 +283,9 @@ typedef enum _gceSURF_ROTATION
3019 + gcvSURF_POST_FLIP_X = 0x40000000,
3020 + gcvSURF_POST_FLIP_Y = 0x80000000,
3024 @@ -622,21 +645,16 @@ gce2D_PORTER_DUFF_RULE;
3025 typedef enum _gce2D_YUV_COLOR_MODE
3030 -gce2D_YUV_COLOR_MODE;
3032 + gcv2D_YUV_USER_DEFINED,
3033 + gcv2D_YUV_USER_DEFINED_CLAMP,
3035 -/* 2D Rotation and flipping. */
3036 -typedef enum _gce2D_ORIENTATION
3038 - gcv2D_0_DEGREE = 0,
3044 + /* Default setting is for src. gcv2D_YUV_DST
3045 + can be ORed to set dst.
3047 + gcv2D_YUV_DST = 0x80000000,
3050 +gce2D_YUV_COLOR_MODE;
3052 typedef enum _gce2D_COMMAND
3054 @@ -656,21 +674,39 @@ typedef enum _gce2D_TILE_STATUS_CONFIG
3055 gcv2D_TSC_ENABLE = 0x00000001,
3056 gcv2D_TSC_COMPRESSED = 0x00000002,
3057 gcv2D_TSC_DOWN_SAMPLER = 0x00000004,
3058 + gcv2D_TSC_2D_COMPRESSED = 0x00000008,
3060 gce2D_TILE_STATUS_CONFIG;
3062 typedef enum _gce2D_QUERY
3064 - gcv2D_QUERY_RGB_ADDRESS_MAX_ALIGN = 0,
3065 - gcv2D_QUERY_RGB_STRIDE_MAX_ALIGN,
3066 - gcv2D_QUERY_YUV_ADDRESS_MAX_ALIGN,
3067 - gcv2D_QUERY_YUV_STRIDE_MAX_ALIGN,
3068 + gcv2D_QUERY_RGB_ADDRESS_MIN_ALIGN = 0,
3069 + gcv2D_QUERY_RGB_STRIDE_MIN_ALIGN,
3070 + gcv2D_QUERY_YUV_ADDRESS_MIN_ALIGN,
3071 + gcv2D_QUERY_YUV_STRIDE_MIN_ALIGN,
3075 +typedef enum _gce2D_SUPER_TILE_VERSION
3077 + gcv2D_SUPER_TILE_VERSION_V1 = 1,
3078 + gcv2D_SUPER_TILE_VERSION_V2 = 2,
3079 + gcv2D_SUPER_TILE_VERSION_V3 = 3,
3081 +gce2D_SUPER_TILE_VERSION;
3083 typedef enum _gce2D_STATE
3085 gcv2D_STATE_SPECIAL_FILTER_MIRROR_MODE = 1,
3086 + gcv2D_STATE_SUPER_TILE_VERSION,
3087 + gcv2D_STATE_EN_GAMMA,
3088 + gcv2D_STATE_DE_GAMMA,
3089 + gcv2D_STATE_MULTI_SRC_BLIT_UNIFIED_DST_RECT,
3091 + gcv2D_STATE_ARRAY_EN_GAMMA = 0x10001,
3092 + gcv2D_STATE_ARRAY_DE_GAMMA,
3093 + gcv2D_STATE_ARRAY_CSC_YUV_TO_RGB,
3094 + gcv2D_STATE_ARRAY_CSC_RGB_TO_YUV,
3098 @@ -809,6 +845,15 @@ typedef enum _gceUSER_SIGNAL_COMMAND_CODES
3100 gceUSER_SIGNAL_COMMAND_CODES;
3102 +/* Sync point command codes. */
3103 +typedef enum _gceSYNC_POINT_COMMAND_CODES
3105 + gcvSYNC_POINT_CREATE,
3106 + gcvSYNC_POINT_DESTROY,
3107 + gcvSYNC_POINT_SIGNAL,
3109 +gceSYNC_POINT_COMMAND_CODES;
3111 /* Event locations. */
3112 typedef enum _gceKERNEL_WHERE
3114 @@ -848,6 +893,44 @@ typedef enum _gceDEBUG_MESSAGE_TYPE
3116 gceDEBUG_MESSAGE_TYPE;
3118 +typedef enum _gceSPECIAL_HINT
3124 + /* For disable dynamic stream/index */
3129 +typedef enum _gceMACHINECODE
3131 + gcvMACHINECODE_HOVERJET0 = 0x0,
3132 + gcvMACHINECODE_HOVERJET1 ,
3134 + gcvMACHINECODE_TAIJI0 ,
3135 + gcvMACHINECODE_TAIJI1 ,
3136 + gcvMACHINECODE_TAIJI2 ,
3138 + gcvMACHINECODE_ANTUTU0 ,
3140 + gcvMACHINECODE_GLB27_RELEASE_0,
3141 + gcvMACHINECODE_GLB27_RELEASE_1,
3143 + gcvMACHINECODE_WAVESCAPE0 ,
3144 + gcvMACHINECODE_WAVESCAPE1 ,
3146 + gcvMACHINECODE_NENAMARKV2_4_0 ,
3147 + gcvMACHINECODE_NENAMARKV2_4_1 ,
3149 + gcvMACHINECODE_GLB25_RELEASE_0,
3150 + gcvMACHINECODE_GLB25_RELEASE_1,
3151 + gcvMACHINECODE_GLB25_RELEASE_2,
3156 /******************************************************************************\
3157 ****************************** Object Declarations *****************************
3158 \******************************************************************************/
3159 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
3160 index 9e2a8db..b53b618 100644
3161 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
3162 +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
3164 This define enables the profiler.
3166 #ifndef VIVANTE_PROFILER
3167 -# define VIVANTE_PROFILER 0
3168 +# define VIVANTE_PROFILER 1
3171 #ifndef VIVANTE_PROFILER_PERDRAW
3176 + VIVANTE_PROFILER_CONTEXT
3178 + This define enables the profiler according to each hw context.
3180 +#ifndef VIVANTE_PROFILER_CONTEXT
3181 +# define VIVANTE_PROFILER_CONTEXT 1
3187 Enable VG HAL layer (only for GC350).
3188 @@ -729,7 +738,24 @@
3189 Use linear buffer for GPU apps so HWC can do 2D composition.
3191 #ifndef gcdGPU_LINEAR_BUFFER_ENABLED
3192 -# define gcdGPU_LINEAR_BUFFER_ENABLED 0
3193 +# define gcdGPU_LINEAR_BUFFER_ENABLED 1
3197 + gcdENABLE_RENDER_INTO_WINDOW
3199 + Enable Render-Into-Window (ie, No-Resolve) feature on android.
3200 + NOTE that even if enabled, it still depends on hardware feature and
3201 + android application behavior. When hardware feature or application
3202 + behavior can not support render into window mode, it will fail back
3204 + When Render-Into-Window is finally used, window back buffer of android
3205 + applications will be allocated matching render target tiling format.
3206 + Otherwise buffer tiling is decided by the above option
3207 + 'gcdGPU_LINEAR_BUFFER_ENABLED'.
3209 +#ifndef gcdENABLE_RENDER_INTO_WINDOW
3210 +# define gcdENABLE_RENDER_INTO_WINDOW 1
3214 @@ -758,7 +784,11 @@
3217 #ifndef gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
3218 -# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 0
3220 +# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 1
3222 +# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 0
3226 #ifndef gcdENABLE_PE_DITHER_FIX
3227 @@ -800,6 +830,10 @@
3228 # define gcdDISALBE_EARLY_EARLY_Z 1
3231 +#ifndef gcdSHADER_SRC_BY_MACHINECODE
3232 +# define gcdSHADER_SRC_BY_MACHINECODE 1
3238 @@ -849,11 +883,20 @@
3239 #define gcdUSE_NPOT_PATCH 1
3247 +#ifndef gcdENABLE_SPECIAL_HINT3
3248 +# define gcdENABLE_SPECIAL_HINT3 1
3251 +#if defined(ANDROID)
3252 +#ifndef gcdPRE_ROTATION
3253 +# define gcdPRE_ROTATION 1
3260 @@ -866,4 +909,39 @@
3261 # define gcdDVFS_POLLING_TIME (gcdDVFS_ANAYLSE_WINDOW * 4)
3265 + gcdANDROID_NATIVE_FENCE_SYNC
3267 + Enable android native fence sync. It is introduced since jellybean-4.2.
3268 + Depends on linux kernel option: CONFIG_SYNC.
3271 + 1: Build framework for native fence sync feature, and EGL extension
3272 + 2: Enable async swap buffers for client
3273 + * Native fence sync for client 'queueBuffer' in EGL, which is
3274 + 'acquireFenceFd' for layer in compositor side.
3275 + 3. Enable async hwcomposer composition.
3276 + * 'releaseFenceFd' for layer in compositor side, which is native
3277 + fence sync when client 'dequeueBuffer'
3278 + * Native fence sync for compositor 'queueBuffer' in EGL, which is
3279 + 'acquireFenceFd' for framebuffer target for DC
3281 +#ifndef gcdANDROID_NATIVE_FENCE_SYNC
3282 +# define gcdANDROID_NATIVE_FENCE_SYNC 0
3285 +#ifndef gcdFORCE_MIPMAP
3286 +# define gcdFORCE_MIPMAP 0
3290 + gcdFORCE_GAL_LOAD_TWICE
3292 + When non-zero, each thread except the main one will load libGAL.so twice to avoid potential segmetantion fault when app using dlopen/dlclose.
3293 + If threads exit arbitrarily, libGAL.so may not unload until the process quit.
3295 +#ifndef gcdFORCE_GAL_LOAD_TWICE
3296 +# define gcdFORCE_GAL_LOAD_TWICE 0
3299 #endif /* __gc_hal_options_h_ */
3300 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
3301 index 3e450ba..aed73aa 100644
3302 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
3303 +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
3304 @@ -45,509 +45,115 @@ extern "C" {
3305 #define gcdNEW_PROFILER_FILE 1
3308 -/* OpenGL ES11 API IDs. */
3309 -#define ES11_ACTIVETEXTURE 1
3310 -#define ES11_ALPHAFUNC (ES11_ACTIVETEXTURE + 1)
3311 -#define ES11_ALPHAFUNCX (ES11_ALPHAFUNC + 1)
3312 -#define ES11_BINDBUFFER (ES11_ALPHAFUNCX + 1)
3313 -#define ES11_BINDTEXTURE (ES11_BINDBUFFER + 1)
3314 -#define ES11_BLENDFUNC (ES11_BINDTEXTURE + 1)
3315 -#define ES11_BUFFERDATA (ES11_BLENDFUNC + 1)
3316 -#define ES11_BUFFERSUBDATA (ES11_BUFFERDATA + 1)
3317 -#define ES11_CLEAR (ES11_BUFFERSUBDATA + 1)
3318 -#define ES11_CLEARCOLOR (ES11_CLEAR + 1)
3319 -#define ES11_CLEARCOLORX (ES11_CLEARCOLOR + 1)
3320 -#define ES11_CLEARDEPTHF (ES11_CLEARCOLORX + 1)
3321 -#define ES11_CLEARDEPTHX (ES11_CLEARDEPTHF + 1)
3322 -#define ES11_CLEARSTENCIL (ES11_CLEARDEPTHX + 1)
3323 -#define ES11_CLIENTACTIVETEXTURE (ES11_CLEARSTENCIL + 1)
3324 -#define ES11_CLIPPLANEF (ES11_CLIENTACTIVETEXTURE + 1)
3325 -#define ES11_CLIPPLANEX (ES11_CLIPPLANEF + 1)
3326 -#define ES11_COLOR4F (ES11_CLIPPLANEX + 1)
3327 -#define ES11_COLOR4UB (ES11_COLOR4F + 1)
3328 -#define ES11_COLOR4X (ES11_COLOR4UB + 1)
3329 -#define ES11_COLORMASK (ES11_COLOR4X + 1)
3330 -#define ES11_COLORPOINTER (ES11_COLORMASK + 1)
3331 -#define ES11_COMPRESSEDTEXIMAGE2D (ES11_COLORPOINTER + 1)
3332 -#define ES11_COMPRESSEDTEXSUBIMAGE2D (ES11_COMPRESSEDTEXIMAGE2D + 1)
3333 -#define ES11_COPYTEXIMAGE2D (ES11_COMPRESSEDTEXSUBIMAGE2D + 1)
3334 -#define ES11_COPYTEXSUBIMAGE2D (ES11_COPYTEXIMAGE2D + 1)
3335 -#define ES11_CULLFACE (ES11_COPYTEXSUBIMAGE2D + 1)
3336 -#define ES11_DELETEBUFFERS (ES11_CULLFACE + 1)
3337 -#define ES11_DELETETEXTURES (ES11_DELETEBUFFERS + 1)
3338 -#define ES11_DEPTHFUNC (ES11_DELETETEXTURES + 1)
3339 -#define ES11_DEPTHMASK (ES11_DEPTHFUNC + 1)
3340 -#define ES11_DEPTHRANGEF (ES11_DEPTHMASK + 1)
3341 -#define ES11_DEPTHRANGEX (ES11_DEPTHRANGEF + 1)
3342 -#define ES11_DISABLE (ES11_DEPTHRANGEX + 1)
3343 -#define ES11_DISABLECLIENTSTATE (ES11_DISABLE + 1)
3344 -#define ES11_DRAWARRAYS (ES11_DISABLECLIENTSTATE + 1)
3345 -#define ES11_DRAWELEMENTS (ES11_DRAWARRAYS + 1)
3346 -#define ES11_ENABLE (ES11_DRAWELEMENTS + 1)
3347 -#define ES11_ENABLECLIENTSTATE (ES11_ENABLE + 1)
3348 -#define ES11_FINISH (ES11_ENABLECLIENTSTATE + 1)
3349 -#define ES11_FLUSH (ES11_FINISH + 1)
3350 -#define ES11_FOGF (ES11_FLUSH + 1)
3351 -#define ES11_FOGFV (ES11_FOGF + 1)
3352 -#define ES11_FOGX (ES11_FOGFV + 1)
3353 -#define ES11_FOGXV (ES11_FOGX + 1)
3354 -#define ES11_FRONTFACE (ES11_FOGXV + 1)
3355 -#define ES11_FRUSTUMF (ES11_FRONTFACE + 1)
3356 -#define ES11_FRUSTUMX (ES11_FRUSTUMF + 1)
3357 -#define ES11_GENBUFFERS (ES11_FRUSTUMX + 1)
3358 -#define ES11_GENTEXTURES (ES11_GENBUFFERS + 1)
3359 -#define ES11_GETBOOLEANV (ES11_GENTEXTURES + 1)
3360 -#define ES11_GETBUFFERPARAMETERIV (ES11_GETBOOLEANV + 1)
3361 -#define ES11_GETCLIPPLANEF (ES11_GETBUFFERPARAMETERIV + 1)
3362 -#define ES11_GETCLIPPLANEX (ES11_GETCLIPPLANEF + 1)
3363 -#define ES11_GETERROR (ES11_GETCLIPPLANEX + 1)
3364 -#define ES11_GETFIXEDV (ES11_GETERROR + 1)
3365 -#define ES11_GETFLOATV (ES11_GETFIXEDV + 1)
3366 -#define ES11_GETINTEGERV (ES11_GETFLOATV + 1)
3367 -#define ES11_GETLIGHTFV (ES11_GETINTEGERV + 1)
3368 -#define ES11_GETLIGHTXV (ES11_GETLIGHTFV + 1)
3369 -#define ES11_GETMATERIALFV (ES11_GETLIGHTXV + 1)
3370 -#define ES11_GETMATERIALXV (ES11_GETMATERIALFV + 1)
3371 -#define ES11_GETPOINTERV (ES11_GETMATERIALXV + 1)
3372 -#define ES11_GETSTRING (ES11_GETPOINTERV + 1)
3373 -#define ES11_GETTEXENVFV (ES11_GETSTRING + 1)
3374 -#define ES11_GETTEXENVIV (ES11_GETTEXENVFV + 1)
3375 -#define ES11_GETTEXENVXV (ES11_GETTEXENVIV + 1)
3376 -#define ES11_GETTEXPARAMETERFV (ES11_GETTEXENVXV + 1)
3377 -#define ES11_GETTEXPARAMETERIV (ES11_GETTEXPARAMETERFV + 1)
3378 -#define ES11_GETTEXPARAMETERXV (ES11_GETTEXPARAMETERIV + 1)
3379 -#define ES11_HINT (ES11_GETTEXPARAMETERXV + 1)
3380 -#define ES11_ISBUFFER (ES11_HINT + 1)
3381 -#define ES11_ISENABLED (ES11_ISBUFFER + 1)
3382 -#define ES11_ISTEXTURE (ES11_ISENABLED + 1)
3383 -#define ES11_LIGHTF (ES11_ISTEXTURE + 1)
3384 -#define ES11_LIGHTFV (ES11_LIGHTF + 1)
3385 -#define ES11_LIGHTMODELF (ES11_LIGHTFV + 1)
3386 -#define ES11_LIGHTMODELFV (ES11_LIGHTMODELF + 1)
3387 -#define ES11_LIGHTMODELX (ES11_LIGHTMODELFV + 1)
3388 -#define ES11_LIGHTMODELXV (ES11_LIGHTMODELX + 1)
3389 -#define ES11_LIGHTX (ES11_LIGHTMODELXV + 1)
3390 -#define ES11_LIGHTXV (ES11_LIGHTX + 1)
3391 -#define ES11_LINEWIDTH (ES11_LIGHTXV + 1)
3392 -#define ES11_LINEWIDTHX (ES11_LINEWIDTH + 1)
3393 -#define ES11_LOADIDENTITY (ES11_LINEWIDTHX + 1)
3394 -#define ES11_LOADMATRIXF (ES11_LOADIDENTITY + 1)
3395 -#define ES11_LOADMATRIXX (ES11_LOADMATRIXF + 1)
3396 -#define ES11_LOGICOP (ES11_LOADMATRIXX + 1)
3397 -#define ES11_MATERIALF (ES11_LOGICOP + 1)
3398 -#define ES11_MATERIALFV (ES11_MATERIALF + 1)
3399 -#define ES11_MATERIALX (ES11_MATERIALFV + 1)
3400 -#define ES11_MATERIALXV (ES11_MATERIALX + 1)
3401 -#define ES11_MATRIXMODE (ES11_MATERIALXV + 1)
3402 -#define ES11_MULTITEXCOORD4F (ES11_MATRIXMODE + 1)
3403 -#define ES11_MULTITEXCOORD4X (ES11_MULTITEXCOORD4F + 1)
3404 -#define ES11_MULTMATRIXF (ES11_MULTITEXCOORD4X + 1)
3405 -#define ES11_MULTMATRIXX (ES11_MULTMATRIXF + 1)
3406 -#define ES11_NORMAL3F (ES11_MULTMATRIXX + 1)
3407 -#define ES11_NORMAL3X (ES11_NORMAL3F + 1)
3408 -#define ES11_NORMALPOINTER (ES11_NORMAL3X + 1)
3409 -#define ES11_ORTHOF (ES11_NORMALPOINTER + 1)
3410 -#define ES11_ORTHOX (ES11_ORTHOF + 1)
3411 -#define ES11_PIXELSTOREI (ES11_ORTHOX + 1)
3412 -#define ES11_POINTPARAMETERF (ES11_PIXELSTOREI + 1)
3413 -#define ES11_POINTPARAMETERFV (ES11_POINTPARAMETERF + 1)
3414 -#define ES11_POINTPARAMETERX (ES11_POINTPARAMETERFV + 1)
3415 -#define ES11_POINTPARAMETERXV (ES11_POINTPARAMETERX + 1)
3416 -#define ES11_POINTSIZE (ES11_POINTPARAMETERXV + 1)
3417 -#define ES11_POINTSIZEX (ES11_POINTSIZE + 1)
3418 -#define ES11_POLYGONOFFSET (ES11_POINTSIZEX + 1)
3419 -#define ES11_POLYGONOFFSETX (ES11_POLYGONOFFSET + 1)
3420 -#define ES11_POPMATRIX (ES11_POLYGONOFFSETX + 1)
3421 -#define ES11_PUSHMATRIX (ES11_POPMATRIX + 1)
3422 -#define ES11_READPIXELS (ES11_PUSHMATRIX + 1)
3423 -#define ES11_ROTATEF (ES11_READPIXELS + 1)
3424 -#define ES11_ROTATEX (ES11_ROTATEF + 1)
3425 -#define ES11_SAMPLECOVERAGE (ES11_ROTATEX + 1)
3426 -#define ES11_SAMPLECOVERAGEX (ES11_SAMPLECOVERAGE + 1)
3427 -#define ES11_SCALEF (ES11_SAMPLECOVERAGEX + 1)
3428 -#define ES11_SCALEX (ES11_SCALEF + 1)
3429 -#define ES11_SCISSOR (ES11_SCALEX + 1)
3430 -#define ES11_SHADEMODEL (ES11_SCISSOR + 1)
3431 -#define ES11_STENCILFUNC (ES11_SHADEMODEL + 1)
3432 -#define ES11_STENCILMASK (ES11_STENCILFUNC + 1)
3433 -#define ES11_STENCILOP (ES11_STENCILMASK + 1)
3434 -#define ES11_TEXCOORDPOINTER (ES11_STENCILOP + 1)
3435 -#define ES11_TEXENVF (ES11_TEXCOORDPOINTER + 1)
3436 -#define ES11_TEXENVFV (ES11_TEXENVF + 1)
3437 -#define ES11_TEXENVI (ES11_TEXENVFV + 1)
3438 -#define ES11_TEXENVIV (ES11_TEXENVI + 1)
3439 -#define ES11_TEXENVX (ES11_TEXENVIV + 1)
3440 -#define ES11_TEXENVXV (ES11_TEXENVX + 1)
3441 -#define ES11_TEXIMAGE2D (ES11_TEXENVXV + 1)
3442 -#define ES11_TEXPARAMETERF (ES11_TEXIMAGE2D + 1)
3443 -#define ES11_TEXPARAMETERFV (ES11_TEXPARAMETERF + 1)
3444 -#define ES11_TEXPARAMETERI (ES11_TEXPARAMETERFV + 1)
3445 -#define ES11_TEXPARAMETERIV (ES11_TEXPARAMETERI + 1)
3446 -#define ES11_TEXPARAMETERX (ES11_TEXPARAMETERIV + 1)
3447 -#define ES11_TEXPARAMETERXV (ES11_TEXPARAMETERX + 1)
3448 -#define ES11_TEXSUBIMAGE2D (ES11_TEXPARAMETERXV + 1)
3449 -#define ES11_TRANSLATEF (ES11_TEXSUBIMAGE2D + 1)
3450 -#define ES11_TRANSLATEX (ES11_TRANSLATEF + 1)
3451 -#define ES11_VERTEXPOINTER (ES11_TRANSLATEX + 1)
3452 -#define ES11_VIEWPORT (ES11_VERTEXPOINTER + 1)
3453 -#define ES11_BLENDEQUATIONOES (ES11_VIEWPORT + 1)
3454 -#define ES11_BLENDFUNCSEPERATEOES (ES11_BLENDEQUATIONOES + 1)
3455 -#define ES11_BLENDEQUATIONSEPARATEOES (ES11_BLENDFUNCSEPERATEOES + 1)
3456 -#define ES11_GLMAPBUFFEROES (ES11_BLENDEQUATIONSEPARATEOES + 1)
3457 -#define ES11_GLUNMAPBUFFEROES (ES11_GLMAPBUFFEROES + 1)
3458 -#define ES11_GLGETBUFFERPOINTERVOES (ES11_GLUNMAPBUFFEROES + 1)
3459 -#define ES11_CALLS (ES11_GLGETBUFFERPOINTERVOES + 1)
3460 -#define ES11_DRAWCALLS (ES11_CALLS + 1)
3461 -#define ES11_STATECHANGECALLS (ES11_DRAWCALLS + 1)
3462 -#define ES11_POINTCOUNT (ES11_STATECHANGECALLS + 1)
3463 -#define ES11_LINECOUNT (ES11_POINTCOUNT + 1)
3464 -#define ES11_TRIANGLECOUNT (ES11_LINECOUNT + 1)
3466 -/* OpenGL ES2X API IDs. */
3467 -#define ES20_ACTIVETEXTURE 1
3468 -#define ES20_ATTACHSHADER (ES20_ACTIVETEXTURE + 1)
3469 -#define ES20_BINDATTRIBLOCATION (ES20_ATTACHSHADER + 1)
3470 -#define ES20_BINDBUFFER (ES20_BINDATTRIBLOCATION + 1)
3471 -#define ES20_BINDFRAMEBUFFER (ES20_BINDBUFFER + 1)
3472 -#define ES20_BINDRENDERBUFFER (ES20_BINDFRAMEBUFFER + 1)
3473 -#define ES20_BINDTEXTURE (ES20_BINDRENDERBUFFER + 1)
3474 -#define ES20_BLENDCOLOR (ES20_BINDTEXTURE + 1)
3475 -#define ES20_BLENDEQUATION (ES20_BLENDCOLOR + 1)
3476 -#define ES20_BLENDEQUATIONSEPARATE (ES20_BLENDEQUATION + 1)
3477 -#define ES20_BLENDFUNC (ES20_BLENDEQUATIONSEPARATE + 1)
3478 -#define ES20_BLENDFUNCSEPARATE (ES20_BLENDFUNC + 1)
3479 -#define ES20_BUFFERDATA (ES20_BLENDFUNCSEPARATE + 1)
3480 -#define ES20_BUFFERSUBDATA (ES20_BUFFERDATA + 1)
3481 -#define ES20_CHECKFRAMEBUFFERSTATUS (ES20_BUFFERSUBDATA + 1)
3482 -#define ES20_CLEAR (ES20_CHECKFRAMEBUFFERSTATUS + 1)
3483 -#define ES20_CLEARCOLOR (ES20_CLEAR + 1)
3484 -#define ES20_CLEARDEPTHF (ES20_CLEARCOLOR + 1)
3485 -#define ES20_CLEARSTENCIL (ES20_CLEARDEPTHF + 1)
3486 -#define ES20_COLORMASK (ES20_CLEARSTENCIL + 1)
3487 -#define ES20_COMPILESHADER (ES20_COLORMASK + 1)
3488 -#define ES20_COMPRESSEDTEXIMAGE2D (ES20_COMPILESHADER + 1)
3489 -#define ES20_COMPRESSEDTEXSUBIMAGE2D (ES20_COMPRESSEDTEXIMAGE2D + 1)
3490 -#define ES20_COPYTEXIMAGE2D (ES20_COMPRESSEDTEXSUBIMAGE2D + 1)
3491 -#define ES20_COPYTEXSUBIMAGE2D (ES20_COPYTEXIMAGE2D + 1)
3492 -#define ES20_CREATEPROGRAM (ES20_COPYTEXSUBIMAGE2D + 1)
3493 -#define ES20_CREATESHADER (ES20_CREATEPROGRAM + 1)
3494 -#define ES20_CULLFACE (ES20_CREATESHADER + 1)
3495 -#define ES20_DELETEBUFFERS (ES20_CULLFACE + 1)
3496 -#define ES20_DELETEFRAMEBUFFERS (ES20_DELETEBUFFERS + 1)
3497 -#define ES20_DELETEPROGRAM (ES20_DELETEFRAMEBUFFERS + 1)
3498 -#define ES20_DELETERENDERBUFFERS (ES20_DELETEPROGRAM + 1)
3499 -#define ES20_DELETESHADER (ES20_DELETERENDERBUFFERS + 1)
3500 -#define ES20_DELETETEXTURES (ES20_DELETESHADER + 1)
3501 -#define ES20_DEPTHFUNC (ES20_DELETETEXTURES + 1)
3502 -#define ES20_DEPTHMASK (ES20_DEPTHFUNC + 1)
3503 -#define ES20_DEPTHRANGEF (ES20_DEPTHMASK + 1)
3504 -#define ES20_DETACHSHADER (ES20_DEPTHRANGEF + 1)
3505 -#define ES20_DISABLE (ES20_DETACHSHADER + 1)
3506 -#define ES20_DISABLEVERTEXATTRIBARRAY (ES20_DISABLE + 1)
3507 -#define ES20_DRAWARRAYS (ES20_DISABLEVERTEXATTRIBARRAY + 1)
3508 -#define ES20_DRAWELEMENTS (ES20_DRAWARRAYS + 1)
3509 -#define ES20_ENABLE (ES20_DRAWELEMENTS + 1)
3510 -#define ES20_ENABLEVERTEXATTRIBARRAY (ES20_ENABLE + 1)
3511 -#define ES20_FINISH (ES20_ENABLEVERTEXATTRIBARRAY + 1)
3512 -#define ES20_FLUSH (ES20_FINISH + 1)
3513 -#define ES20_FRAMEBUFFERRENDERBUFFER (ES20_FLUSH + 1)
3514 -#define ES20_FRAMEBUFFERTEXTURE2D (ES20_FRAMEBUFFERRENDERBUFFER + 1)
3515 -#define ES20_FRONTFACE (ES20_FRAMEBUFFERTEXTURE2D + 1)
3516 -#define ES20_GENBUFFERS (ES20_FRONTFACE + 1)
3517 -#define ES20_GENERATEMIPMAP (ES20_GENBUFFERS + 1)
3518 -#define ES20_GENFRAMEBUFFERS (ES20_GENERATEMIPMAP + 1)
3519 -#define ES20_GENRENDERBUFFERS (ES20_GENFRAMEBUFFERS + 1)
3520 -#define ES20_GENTEXTURES (ES20_GENRENDERBUFFERS + 1)
3521 -#define ES20_GETACTIVEATTRIB (ES20_GENTEXTURES + 1)
3522 -#define ES20_GETACTIVEUNIFORM (ES20_GETACTIVEATTRIB + 1)
3523 -#define ES20_GETATTACHEDSHADERS (ES20_GETACTIVEUNIFORM + 1)
3524 -#define ES20_GETATTRIBLOCATION (ES20_GETATTACHEDSHADERS + 1)
3525 -#define ES20_GETBOOLEANV (ES20_GETATTRIBLOCATION + 1)
3526 -#define ES20_GETBUFFERPARAMETERIV (ES20_GETBOOLEANV + 1)
3527 -#define ES20_GETERROR (ES20_GETBUFFERPARAMETERIV + 1)
3528 -#define ES20_GETFLOATV (ES20_GETERROR + 1)
3529 -#define ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV (ES20_GETFLOATV + 1)
3530 -#define ES20_GETINTEGERV (ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV + 1)
3531 -#define ES20_GETPROGRAMIV (ES20_GETINTEGERV + 1)
3532 -#define ES20_GETPROGRAMINFOLOG (ES20_GETPROGRAMIV + 1)
3533 -#define ES20_GETRENDERBUFFERPARAMETERIV (ES20_GETPROGRAMINFOLOG + 1)
3534 -#define ES20_GETSHADERIV (ES20_GETRENDERBUFFERPARAMETERIV + 1)
3535 -#define ES20_GETSHADERINFOLOG (ES20_GETSHADERIV + 1)
3536 -#define ES20_GETSHADERPRECISIONFORMAT (ES20_GETSHADERINFOLOG + 1)
3537 -#define ES20_GETSHADERSOURCE (ES20_GETSHADERPRECISIONFORMAT + 1)
3538 -#define ES20_GETSTRING (ES20_GETSHADERSOURCE + 1)
3539 -#define ES20_GETTEXPARAMETERFV (ES20_GETSTRING + 1)
3540 -#define ES20_GETTEXPARAMETERIV (ES20_GETTEXPARAMETERFV + 1)
3541 -#define ES20_GETUNIFORMFV (ES20_GETTEXPARAMETERIV + 1)
3542 -#define ES20_GETUNIFORMIV (ES20_GETUNIFORMFV + 1)
3543 -#define ES20_GETUNIFORMLOCATION (ES20_GETUNIFORMIV + 1)
3544 -#define ES20_GETVERTEXATTRIBFV (ES20_GETUNIFORMLOCATION + 1)
3545 -#define ES20_GETVERTEXATTRIBIV (ES20_GETVERTEXATTRIBFV + 1)
3546 -#define ES20_GETVERTEXATTRIBPOINTERV (ES20_GETVERTEXATTRIBIV + 1)
3547 -#define ES20_HINT (ES20_GETVERTEXATTRIBPOINTERV + 1)
3548 -#define ES20_ISBUFFER (ES20_HINT + 1)
3549 -#define ES20_ISENABLED (ES20_ISBUFFER + 1)
3550 -#define ES20_ISFRAMEBUFFER (ES20_ISENABLED + 1)
3551 -#define ES20_ISPROGRAM (ES20_ISFRAMEBUFFER + 1)
3552 -#define ES20_ISRENDERBUFFER (ES20_ISPROGRAM + 1)
3553 -#define ES20_ISSHADER (ES20_ISRENDERBUFFER + 1)
3554 -#define ES20_ISTEXTURE (ES20_ISSHADER + 1)
3555 -#define ES20_LINEWIDTH (ES20_ISTEXTURE + 1)
3556 -#define ES20_LINKPROGRAM (ES20_LINEWIDTH + 1)
3557 -#define ES20_PIXELSTOREI (ES20_LINKPROGRAM + 1)
3558 -#define ES20_POLYGONOFFSET (ES20_PIXELSTOREI + 1)
3559 -#define ES20_READPIXELS (ES20_POLYGONOFFSET + 1)
3560 -#define ES20_RELEASESHADERCOMPILER (ES20_READPIXELS + 1)
3561 -#define ES20_RENDERBUFFERSTORAGE (ES20_RELEASESHADERCOMPILER + 1)
3562 -#define ES20_SAMPLECOVERAGE (ES20_RENDERBUFFERSTORAGE + 1)
3563 -#define ES20_SCISSOR (ES20_SAMPLECOVERAGE + 1)
3564 -#define ES20_SHADERBINARY (ES20_SCISSOR + 1)
3565 -#define ES20_SHADERSOURCE (ES20_SHADERBINARY + 1)
3566 -#define ES20_STENCILFUNC (ES20_SHADERSOURCE + 1)
3567 -#define ES20_STENCILFUNCSEPARATE (ES20_STENCILFUNC + 1)
3568 -#define ES20_STENCILMASK (ES20_STENCILFUNCSEPARATE + 1)
3569 -#define ES20_STENCILMASKSEPARATE (ES20_STENCILMASK + 1)
3570 -#define ES20_STENCILOP (ES20_STENCILMASKSEPARATE + 1)
3571 -#define ES20_STENCILOPSEPARATE (ES20_STENCILOP + 1)
3572 -#define ES20_TEXIMAGE2D (ES20_STENCILOPSEPARATE + 1)
3573 -#define ES20_TEXPARAMETERF (ES20_TEXIMAGE2D + 1)
3574 -#define ES20_TEXPARAMETERFV (ES20_TEXPARAMETERF + 1)
3575 -#define ES20_TEXPARAMETERI (ES20_TEXPARAMETERFV + 1)
3576 -#define ES20_TEXPARAMETERIV (ES20_TEXPARAMETERI + 1)
3577 -#define ES20_TEXSUBIMAGE2D (ES20_TEXPARAMETERIV + 1)
3578 -#define ES20_UNIFORM1F (ES20_TEXSUBIMAGE2D + 1)
3579 -#define ES20_UNIFORM1FV (ES20_UNIFORM1F + 1)
3580 -#define ES20_UNIFORM1I (ES20_UNIFORM1FV + 1)
3581 -#define ES20_UNIFORM1IV (ES20_UNIFORM1I + 1)
3582 -#define ES20_UNIFORM2F (ES20_UNIFORM1IV + 1)
3583 -#define ES20_UNIFORM2FV (ES20_UNIFORM2F + 1)
3584 -#define ES20_UNIFORM2I (ES20_UNIFORM2FV + 1)
3585 -#define ES20_UNIFORM2IV (ES20_UNIFORM2I + 1)
3586 -#define ES20_UNIFORM3F (ES20_UNIFORM2IV + 1)
3587 -#define ES20_UNIFORM3FV (ES20_UNIFORM3F + 1)
3588 -#define ES20_UNIFORM3I (ES20_UNIFORM3FV + 1)
3589 -#define ES20_UNIFORM3IV (ES20_UNIFORM3I + 1)
3590 -#define ES20_UNIFORM4F (ES20_UNIFORM3IV + 1)
3591 -#define ES20_UNIFORM4FV (ES20_UNIFORM4F + 1)
3592 -#define ES20_UNIFORM4I (ES20_UNIFORM4FV + 1)
3593 -#define ES20_UNIFORM4IV (ES20_UNIFORM4I + 1)
3594 -#define ES20_UNIFORMMATRIX2FV (ES20_UNIFORM4IV + 1)
3595 -#define ES20_UNIFORMMATRIX3FV (ES20_UNIFORMMATRIX2FV + 1)
3596 -#define ES20_UNIFORMMATRIX4FV (ES20_UNIFORMMATRIX3FV + 1)
3597 -#define ES20_USEPROGRAM (ES20_UNIFORMMATRIX4FV + 1)
3598 -#define ES20_VALIDATEPROGRAM (ES20_USEPROGRAM + 1)
3599 -#define ES20_VERTEXATTRIB1F (ES20_VALIDATEPROGRAM + 1)
3600 -#define ES20_VERTEXATTRIB1FV (ES20_VERTEXATTRIB1F + 1)
3601 -#define ES20_VERTEXATTRIB2F (ES20_VERTEXATTRIB1FV + 1)
3602 -#define ES20_VERTEXATTRIB2FV (ES20_VERTEXATTRIB2F + 1)
3603 -#define ES20_VERTEXATTRIB3F (ES20_VERTEXATTRIB2FV + 1)
3604 -#define ES20_VERTEXATTRIB3FV (ES20_VERTEXATTRIB3F + 1)
3605 -#define ES20_VERTEXATTRIB4F (ES20_VERTEXATTRIB3FV + 1)
3606 -#define ES20_VERTEXATTRIB4FV (ES20_VERTEXATTRIB4F + 1)
3607 -#define ES20_VERTEXATTRIBPOINTER (ES20_VERTEXATTRIB4FV + 1)
3608 -#define ES20_VIEWPORT (ES20_VERTEXATTRIBPOINTER + 1)
3609 -#define ES20_GETPROGRAMBINARYOES (ES20_VIEWPORT + 1)
3610 -#define ES20_PROGRAMBINARYOES (ES20_GETPROGRAMBINARYOES + 1)
3611 -#define ES20_TEXIMAGE3DOES (ES20_PROGRAMBINARYOES + 1)
3612 -#define ES20_TEXSUBIMAGE3DOES (ES20_TEXIMAGE3DOES + 1)
3613 -#define ES20_COPYSUBIMAGE3DOES (ES20_TEXSUBIMAGE3DOES + 1)
3614 -#define ES20_COMPRESSEDTEXIMAGE3DOES (ES20_COPYSUBIMAGE3DOES + 1)
3615 -#define ES20_COMPRESSEDTEXSUBIMAGE3DOES (ES20_COMPRESSEDTEXIMAGE3DOES + 1)
3616 -#define ES20_FRAMEBUFFERTEXTURE3DOES (ES20_COMPRESSEDTEXSUBIMAGE3DOES + 1)
3617 -#define ES20_BINDVERTEXARRAYOES (ES20_FRAMEBUFFERTEXTURE3DOES + 1)
3618 -#define ES20_GENVERTEXARRAYOES (ES20_BINDVERTEXARRAYOES + 1)
3619 -#define ES20_ISVERTEXARRAYOES (ES20_GENVERTEXARRAYOES + 1)
3620 -#define ES20_DELETEVERTEXARRAYOES (ES20_ISVERTEXARRAYOES + 1)
3621 -#define ES20_GLMAPBUFFEROES (ES20_DELETEVERTEXARRAYOES + 1)
3622 -#define ES20_GLUNMAPBUFFEROES (ES20_GLMAPBUFFEROES + 1)
3623 -#define ES20_GLGETBUFFERPOINTERVOES (ES20_GLUNMAPBUFFEROES + 1)
3624 -#define ES20_DISCARDFRAMEBUFFEREXT (ES20_GLGETBUFFERPOINTERVOES + 1)
3625 -#define ES20_CALLS (ES20_DISCARDFRAMEBUFFEREXT + 1)
3626 -#define ES20_DRAWCALLS (ES20_CALLS + 1)
3627 -#define ES20_STATECHANGECALLS (ES20_DRAWCALLS + 1)
3628 -#define ES20_POINTCOUNT (ES20_STATECHANGECALLS + 1)
3629 -#define ES20_LINECOUNT (ES20_POINTCOUNT + 1)
3630 -#define ES20_TRIANGLECOUNT (ES20_LINECOUNT + 1)
3632 -/* OpenVG API IDs. */
3633 -#define VG11_APPENDPATH 1
3634 -#define VG11_APPENDPATHDATA (VG11_APPENDPATH + 1)
3635 -#define VG11_CHILDIMAGE (VG11_APPENDPATHDATA + 1)
3636 -#define VG11_CLEAR (VG11_CHILDIMAGE + 1)
3637 -#define VG11_CLEARGLYPH (VG11_CLEAR + 1)
3638 -#define VG11_CLEARIMAGE (VG11_CLEARGLYPH + 1)
3639 -#define VG11_CLEARPATH (VG11_CLEARIMAGE + 1)
3640 -#define VG11_COLORMATRIX (VG11_CLEARPATH + 1)
3641 -#define VG11_CONVOLVE (VG11_COLORMATRIX + 1)
3642 -#define VG11_COPYIMAGE (VG11_CONVOLVE + 1)
3643 -#define VG11_COPYMASK (VG11_COPYIMAGE + 1)
3644 -#define VG11_COPYPIXELS (VG11_COPYMASK + 1)
3645 -#define VG11_CREATEFONT (VG11_COPYPIXELS + 1)
3646 -#define VG11_CREATEIMAGE (VG11_CREATEFONT + 1)
3647 -#define VG11_CREATEMASKLAYER (VG11_CREATEIMAGE + 1)
3648 -#define VG11_CREATEPAINT (VG11_CREATEMASKLAYER + 1)
3649 -#define VG11_CREATEPATH (VG11_CREATEPAINT + 1)
3650 -#define VG11_DESTROYFONT (VG11_CREATEPATH + 1)
3651 -#define VG11_DESTROYIMAGE (VG11_DESTROYFONT + 1)
3652 -#define VG11_DESTROYMASKLAYER (VG11_DESTROYIMAGE + 1)
3653 -#define VG11_DESTROYPAINT (VG11_DESTROYMASKLAYER + 1)
3654 -#define VG11_DESTROYPATH (VG11_DESTROYPAINT + 1)
3655 -#define VG11_DRAWGLYPH (VG11_DESTROYPATH + 1)
3656 -#define VG11_DRAWGLYPHS (VG11_DRAWGLYPH + 1)
3657 -#define VG11_DRAWIMAGE (VG11_DRAWGLYPHS + 1)
3658 -#define VG11_DRAWPATH (VG11_DRAWIMAGE + 1)
3659 -#define VG11_FILLMASKLAYER (VG11_DRAWPATH + 1)
3660 -#define VG11_FINISH (VG11_FILLMASKLAYER + 1)
3661 -#define VG11_FLUSH (VG11_FINISH + 1)
3662 -#define VG11_GAUSSIANBLUR (VG11_FLUSH + 1)
3663 -#define VG11_GETCOLOR (VG11_GAUSSIANBLUR + 1)
3664 -#define VG11_GETERROR (VG11_GETCOLOR + 1)
3665 -#define VG11_GETF (VG11_GETERROR + 1)
3666 -#define VG11_GETFV (VG11_GETF + 1)
3667 -#define VG11_GETI (VG11_GETFV + 1)
3668 -#define VG11_GETIMAGESUBDATA (VG11_GETI + 1)
3669 -#define VG11_GETIV (VG11_GETIMAGESUBDATA + 1)
3670 -#define VG11_GETMATRIX (VG11_GETIV + 1)
3671 -#define VG11_GETPAINT (VG11_GETMATRIX + 1)
3672 -#define VG11_GETPARAMETERF (VG11_GETPAINT + 1)
3673 -#define VG11_GETPARAMETERFV (VG11_GETPARAMETERF + 1)
3674 -#define VG11_GETPARAMETERI (VG11_GETPARAMETERFV + 1)
3675 -#define VG11_GETPARAMETERIV (VG11_GETPARAMETERI + 1)
3676 -#define VG11_GETPARAMETERVECTORSIZE (VG11_GETPARAMETERIV + 1)
3677 -#define VG11_GETPARENT (VG11_GETPARAMETERVECTORSIZE + 1)
3678 -#define VG11_GETPATHCAPABILITIES (VG11_GETPARENT + 1)
3679 -#define VG11_GETPIXELS (VG11_GETPATHCAPABILITIES + 1)
3680 -#define VG11_GETSTRING (VG11_GETPIXELS + 1)
3681 -#define VG11_GETVECTORSIZE (VG11_GETSTRING + 1)
3682 -#define VG11_HARDWAREQUERY (VG11_GETVECTORSIZE + 1)
3683 -#define VG11_IMAGESUBDATA (VG11_HARDWAREQUERY + 1)
3684 -#define VG11_INTERPOLATEPATH (VG11_IMAGESUBDATA + 1)
3685 -#define VG11_LOADIDENTITY (VG11_INTERPOLATEPATH + 1)
3686 -#define VG11_LOADMATRIX (VG11_LOADIDENTITY + 1)
3687 -#define VG11_LOOKUP (VG11_LOADMATRIX + 1)
3688 -#define VG11_LOOKUPSINGLE (VG11_LOOKUP + 1)
3689 -#define VG11_MASK (VG11_LOOKUPSINGLE + 1)
3690 -#define VG11_MODIFYPATHCOORDS (VG11_MASK + 1)
3691 -#define VG11_MULTMATRIX (VG11_MODIFYPATHCOORDS + 1)
3692 -#define VG11_PAINTPATTERN (VG11_MULTMATRIX + 1)
3693 -#define VG11_PATHBOUNDS (VG11_PAINTPATTERN + 1)
3694 -#define VG11_PATHLENGTH (VG11_PATHBOUNDS + 1)
3695 -#define VG11_PATHTRANSFORMEDBOUNDS (VG11_PATHLENGTH + 1)
3696 -#define VG11_POINTALONGPATH (VG11_PATHTRANSFORMEDBOUNDS + 1)
3697 -#define VG11_READPIXELS (VG11_POINTALONGPATH + 1)
3698 -#define VG11_REMOVEPATHCAPABILITIES (VG11_READPIXELS + 1)
3699 -#define VG11_RENDERTOMASK (VG11_REMOVEPATHCAPABILITIES + 1)
3700 -#define VG11_ROTATE (VG11_RENDERTOMASK + 1)
3701 -#define VG11_SCALE (VG11_ROTATE + 1)
3702 -#define VG11_SEPARABLECONVOLVE (VG11_SCALE + 1)
3703 -#define VG11_SETCOLOR (VG11_SEPARABLECONVOLVE + 1)
3704 -#define VG11_SETF (VG11_SETCOLOR + 1)
3705 -#define VG11_SETFV (VG11_SETF + 1)
3706 -#define VG11_SETGLYPHTOIMAGE (VG11_SETFV + 1)
3707 -#define VG11_SETGLYPHTOPATH (VG11_SETGLYPHTOIMAGE + 1)
3708 -#define VG11_SETI (VG11_SETGLYPHTOPATH + 1)
3709 -#define VG11_SETIV (VG11_SETI + 1)
3710 -#define VG11_SETPAINT (VG11_SETIV + 1)
3711 -#define VG11_SETPARAMETERF (VG11_SETPAINT + 1)
3712 -#define VG11_SETPARAMETERFV (VG11_SETPARAMETERF + 1)
3713 -#define VG11_SETPARAMETERI (VG11_SETPARAMETERFV + 1)
3714 -#define VG11_SETPARAMETERIV (VG11_SETPARAMETERI + 1)
3715 -#define VG11_SETPIXELS (VG11_SETPARAMETERIV + 1)
3716 -#define VG11_SHEAR (VG11_SETPIXELS + 1)
3717 -#define VG11_TRANSFORMPATH (VG11_SHEAR + 1)
3718 -#define VG11_TRANSLATE (VG11_TRANSFORMPATH + 1)
3719 -#define VG11_WRITEPIXELS (VG11_TRANSLATE + 1)
3720 -#define VG11_CALLS (VG11_WRITEPIXELS + 1)
3721 -#define VG11_DRAWCALLS (VG11_CALLS + 1)
3722 -#define VG11_STATECHANGECALLS (VG11_DRAWCALLS + 1)
3723 -#define VG11_FILLCOUNT (VG11_STATECHANGECALLS + 1)
3724 -#define VG11_STROKECOUNT (VG11_FILLCOUNT + 1)
3725 +#define ES11_CALLS 151
3726 +#define ES11_DRAWCALLS (ES11_CALLS + 1)
3727 +#define ES11_STATECHANGECALLS (ES11_DRAWCALLS + 1)
3728 +#define ES11_POINTCOUNT (ES11_STATECHANGECALLS + 1)
3729 +#define ES11_LINECOUNT (ES11_POINTCOUNT + 1)
3730 +#define ES11_TRIANGLECOUNT (ES11_LINECOUNT + 1)
3732 +#define ES20_CALLS 159
3733 +#define ES20_DRAWCALLS (ES20_CALLS + 1)
3734 +#define ES20_STATECHANGECALLS (ES20_DRAWCALLS + 1)
3735 +#define ES20_POINTCOUNT (ES20_STATECHANGECALLS + 1)
3736 +#define ES20_LINECOUNT (ES20_POINTCOUNT + 1)
3737 +#define ES20_TRIANGLECOUNT (ES20_LINECOUNT + 1)
3739 +#define VG11_CALLS 88
3740 +#define VG11_DRAWCALLS (VG11_CALLS + 1)
3741 +#define VG11_STATECHANGECALLS (VG11_DRAWCALLS + 1)
3742 +#define VG11_FILLCOUNT (VG11_STATECHANGECALLS + 1)
3743 +#define VG11_STROKECOUNT (VG11_FILLCOUNT + 1)
3744 /* End of Driver API ID Definitions. */
3746 /* HAL & MISC IDs. */
3747 -#define HAL_VERTBUFNEWBYTEALLOC 1
3748 -#define HAL_VERTBUFTOTALBYTEALLOC (HAL_VERTBUFNEWBYTEALLOC + 1)
3749 -#define HAL_VERTBUFNEWOBJALLOC (HAL_VERTBUFTOTALBYTEALLOC + 1)
3750 -#define HAL_VERTBUFTOTALOBJALLOC (HAL_VERTBUFNEWOBJALLOC + 1)
3751 -#define HAL_INDBUFNEWBYTEALLOC (HAL_VERTBUFTOTALOBJALLOC + 1)
3752 -#define HAL_INDBUFTOTALBYTEALLOC (HAL_INDBUFNEWBYTEALLOC + 1)
3753 -#define HAL_INDBUFNEWOBJALLOC (HAL_INDBUFTOTALBYTEALLOC + 1)
3754 -#define HAL_INDBUFTOTALOBJALLOC (HAL_INDBUFNEWOBJALLOC + 1)
3755 -#define HAL_TEXBUFNEWBYTEALLOC (HAL_INDBUFTOTALOBJALLOC + 1)
3756 -#define HAL_TEXBUFTOTALBYTEALLOC (HAL_TEXBUFNEWBYTEALLOC + 1)
3757 -#define HAL_TEXBUFNEWOBJALLOC (HAL_TEXBUFTOTALBYTEALLOC + 1)
3758 -#define HAL_TEXBUFTOTALOBJALLOC (HAL_TEXBUFNEWOBJALLOC + 1)
3760 -#define GPU_CYCLES 1
3761 -#define GPU_READ64BYTE (GPU_CYCLES + 1)
3762 -#define GPU_WRITE64BYTE (GPU_READ64BYTE + 1)
3763 -#define GPU_TOTALCYCLES (GPU_WRITE64BYTE + 1)
3764 -#define GPU_IDLECYCLES (GPU_TOTALCYCLES + 1)
3766 -#define VS_INSTCOUNT 1
3767 -#define VS_BRANCHINSTCOUNT (VS_INSTCOUNT + 1)
3768 -#define VS_TEXLDINSTCOUNT (VS_BRANCHINSTCOUNT + 1)
3769 -#define VS_RENDEREDVERTCOUNT (VS_TEXLDINSTCOUNT + 1)
3771 -#define PS_INSTCOUNT 1
3772 -#define PS_BRANCHINSTCOUNT (PS_INSTCOUNT + 1)
3773 -#define PS_TEXLDINSTCOUNT (PS_BRANCHINSTCOUNT + 1)
3774 -#define PS_RENDEREDPIXCOUNT (PS_TEXLDINSTCOUNT + 1)
3776 -#define PA_INVERTCOUNT 1
3777 -#define PA_INPRIMCOUNT (PA_INVERTCOUNT + 1)
3778 -#define PA_OUTPRIMCOUNT (PA_INPRIMCOUNT + 1)
3779 -#define PA_DEPTHCLIPCOUNT (PA_OUTPRIMCOUNT + 1)
3780 -#define PA_TRIVIALREJCOUNT (PA_DEPTHCLIPCOUNT + 1)
3781 -#define PA_CULLCOUNT (PA_TRIVIALREJCOUNT + 1)
3783 -#define SE_TRIANGLECOUNT 1
3784 -#define SE_LINECOUNT (SE_TRIANGLECOUNT + 1)
3786 -#define RA_VALIDPIXCOUNT 1
3787 -#define RA_TOTALQUADCOUNT (RA_VALIDPIXCOUNT + 1)
3788 -#define RA_VALIDQUADCOUNTEZ (RA_TOTALQUADCOUNT + 1)
3789 -#define RA_TOTALPRIMCOUNT (RA_VALIDQUADCOUNTEZ + 1)
3790 -#define RA_PIPECACHEMISSCOUNT (RA_TOTALPRIMCOUNT + 1)
3791 -#define RA_PREFCACHEMISSCOUNT (RA_PIPECACHEMISSCOUNT + 1)
3792 -#define RA_EEZCULLCOUNT (RA_PREFCACHEMISSCOUNT + 1)
3794 -#define TX_TOTBILINEARREQ 1
3795 -#define TX_TOTTRILINEARREQ (TX_TOTBILINEARREQ + 1)
3796 -#define TX_TOTDISCARDTEXREQ (TX_TOTTRILINEARREQ + 1)
3797 -#define TX_TOTTEXREQ (TX_TOTDISCARDTEXREQ + 1)
3798 -#define TX_MEMREADCOUNT (TX_TOTTEXREQ + 1)
3799 -#define TX_MEMREADIN8BCOUNT (TX_MEMREADCOUNT + 1)
3800 -#define TX_CACHEMISSCOUNT (TX_MEMREADIN8BCOUNT + 1)
3801 -#define TX_CACHEHITTEXELCOUNT (TX_CACHEMISSCOUNT + 1)
3802 -#define TX_CACHEMISSTEXELCOUNT (TX_CACHEHITTEXELCOUNT + 1)
3804 -#define PE_KILLEDBYCOLOR 1
3805 -#define PE_KILLEDBYDEPTH (PE_KILLEDBYCOLOR + 1)
3806 -#define PE_DRAWNBYCOLOR (PE_KILLEDBYDEPTH + 1)
3807 -#define PE_DRAWNBYDEPTH (PE_DRAWNBYCOLOR + 1)
3809 -#define MC_READREQ8BPIPE 1
3810 -#define MC_READREQ8BIP (MC_READREQ8BPIPE + 1)
3811 -#define MC_WRITEREQ8BPIPE (MC_READREQ8BIP + 1)
3813 -#define AXI_READREQSTALLED 1
3814 -#define AXI_WRITEREQSTALLED (AXI_READREQSTALLED + 1)
3815 -#define AXI_WRITEDATASTALLED (AXI_WRITEREQSTALLED + 1)
3817 -#define PVS_INSTRCOUNT 1
3818 -#define PVS_ALUINSTRCOUNT (PVS_INSTRCOUNT + 1)
3819 -#define PVS_TEXINSTRCOUNT (PVS_ALUINSTRCOUNT + 1)
3820 -#define PVS_ATTRIBCOUNT (PVS_TEXINSTRCOUNT + 1)
3821 -#define PVS_UNIFORMCOUNT (PVS_ATTRIBCOUNT + 1)
3822 -#define PVS_FUNCTIONCOUNT (PVS_UNIFORMCOUNT + 1)
3824 -#define PPS_INSTRCOUNT 1
3825 -#define PPS_ALUINSTRCOUNT (PPS_INSTRCOUNT + 1)
3826 -#define PPS_TEXINSTRCOUNT (PPS_ALUINSTRCOUNT + 1)
3827 -#define PPS_ATTRIBCOUNT (PPS_TEXINSTRCOUNT + 1)
3828 -#define PPS_UNIFORMCOUNT (PPS_ATTRIBCOUNT + 1)
3829 -#define PPS_FUNCTIONCOUNT (PPS_UNIFORMCOUNT + 1)
3830 +#define HAL_VERTBUFNEWBYTEALLOC 1
3831 +#define HAL_VERTBUFTOTALBYTEALLOC (HAL_VERTBUFNEWBYTEALLOC + 1)
3832 +#define HAL_VERTBUFNEWOBJALLOC (HAL_VERTBUFTOTALBYTEALLOC + 1)
3833 +#define HAL_VERTBUFTOTALOBJALLOC (HAL_VERTBUFNEWOBJALLOC + 1)
3834 +#define HAL_INDBUFNEWBYTEALLOC (HAL_VERTBUFTOTALOBJALLOC + 1)
3835 +#define HAL_INDBUFTOTALBYTEALLOC (HAL_INDBUFNEWBYTEALLOC + 1)
3836 +#define HAL_INDBUFNEWOBJALLOC (HAL_INDBUFTOTALBYTEALLOC + 1)
3837 +#define HAL_INDBUFTOTALOBJALLOC (HAL_INDBUFNEWOBJALLOC + 1)
3838 +#define HAL_TEXBUFNEWBYTEALLOC (HAL_INDBUFTOTALOBJALLOC + 1)
3839 +#define HAL_TEXBUFTOTALBYTEALLOC (HAL_TEXBUFNEWBYTEALLOC + 1)
3840 +#define HAL_TEXBUFNEWOBJALLOC (HAL_TEXBUFTOTALBYTEALLOC + 1)
3841 +#define HAL_TEXBUFTOTALOBJALLOC (HAL_TEXBUFNEWOBJALLOC + 1)
3843 +#define GPU_CYCLES 1
3844 +#define GPU_READ64BYTE (GPU_CYCLES + 1)
3845 +#define GPU_WRITE64BYTE (GPU_READ64BYTE + 1)
3846 +#define GPU_TOTALCYCLES (GPU_WRITE64BYTE + 1)
3847 +#define GPU_IDLECYCLES (GPU_TOTALCYCLES + 1)
3849 +#define VS_INSTCOUNT 1
3850 +#define VS_BRANCHINSTCOUNT (VS_INSTCOUNT + 1)
3851 +#define VS_TEXLDINSTCOUNT (VS_BRANCHINSTCOUNT + 1)
3852 +#define VS_RENDEREDVERTCOUNT (VS_TEXLDINSTCOUNT + 1)
3853 +#define VS_SOURCE (VS_RENDEREDVERTCOUNT + 1)
3855 +#define PS_INSTCOUNT 1
3856 +#define PS_BRANCHINSTCOUNT (PS_INSTCOUNT + 1)
3857 +#define PS_TEXLDINSTCOUNT (PS_BRANCHINSTCOUNT + 1)
3858 +#define PS_RENDEREDPIXCOUNT (PS_TEXLDINSTCOUNT + 1)
3859 +#define PS_SOURCE (PS_RENDEREDPIXCOUNT + 1)
3861 +#define PA_INVERTCOUNT 1
3862 +#define PA_INPRIMCOUNT (PA_INVERTCOUNT + 1)
3863 +#define PA_OUTPRIMCOUNT (PA_INPRIMCOUNT + 1)
3864 +#define PA_DEPTHCLIPCOUNT (PA_OUTPRIMCOUNT + 1)
3865 +#define PA_TRIVIALREJCOUNT (PA_DEPTHCLIPCOUNT + 1)
3866 +#define PA_CULLCOUNT (PA_TRIVIALREJCOUNT + 1)
3868 +#define SE_TRIANGLECOUNT 1
3869 +#define SE_LINECOUNT (SE_TRIANGLECOUNT + 1)
3871 +#define RA_VALIDPIXCOUNT 1
3872 +#define RA_TOTALQUADCOUNT (RA_VALIDPIXCOUNT + 1)
3873 +#define RA_VALIDQUADCOUNTEZ (RA_TOTALQUADCOUNT + 1)
3874 +#define RA_TOTALPRIMCOUNT (RA_VALIDQUADCOUNTEZ + 1)
3875 +#define RA_PIPECACHEMISSCOUNT (RA_TOTALPRIMCOUNT + 1)
3876 +#define RA_PREFCACHEMISSCOUNT (RA_PIPECACHEMISSCOUNT + 1)
3877 +#define RA_EEZCULLCOUNT (RA_PREFCACHEMISSCOUNT + 1)
3879 +#define TX_TOTBILINEARREQ 1
3880 +#define TX_TOTTRILINEARREQ (TX_TOTBILINEARREQ + 1)
3881 +#define TX_TOTDISCARDTEXREQ (TX_TOTTRILINEARREQ + 1)
3882 +#define TX_TOTTEXREQ (TX_TOTDISCARDTEXREQ + 1)
3883 +#define TX_MEMREADCOUNT (TX_TOTTEXREQ + 1)
3884 +#define TX_MEMREADIN8BCOUNT (TX_MEMREADCOUNT + 1)
3885 +#define TX_CACHEMISSCOUNT (TX_MEMREADIN8BCOUNT + 1)
3886 +#define TX_CACHEHITTEXELCOUNT (TX_CACHEMISSCOUNT + 1)
3887 +#define TX_CACHEMISSTEXELCOUNT (TX_CACHEHITTEXELCOUNT + 1)
3889 +#define PE_KILLEDBYCOLOR 1
3890 +#define PE_KILLEDBYDEPTH (PE_KILLEDBYCOLOR + 1)
3891 +#define PE_DRAWNBYCOLOR (PE_KILLEDBYDEPTH + 1)
3892 +#define PE_DRAWNBYDEPTH (PE_DRAWNBYCOLOR + 1)
3894 +#define MC_READREQ8BPIPE 1
3895 +#define MC_READREQ8BIP (MC_READREQ8BPIPE + 1)
3896 +#define MC_WRITEREQ8BPIPE (MC_READREQ8BIP + 1)
3898 +#define AXI_READREQSTALLED 1
3899 +#define AXI_WRITEREQSTALLED (AXI_READREQSTALLED + 1)
3900 +#define AXI_WRITEDATASTALLED (AXI_WRITEREQSTALLED + 1)
3902 +#define PVS_INSTRCOUNT 1
3903 +#define PVS_ALUINSTRCOUNT (PVS_INSTRCOUNT + 1)
3904 +#define PVS_TEXINSTRCOUNT (PVS_ALUINSTRCOUNT + 1)
3905 +#define PVS_ATTRIBCOUNT (PVS_TEXINSTRCOUNT + 1)
3906 +#define PVS_UNIFORMCOUNT (PVS_ATTRIBCOUNT + 1)
3907 +#define PVS_FUNCTIONCOUNT (PVS_UNIFORMCOUNT + 1)
3908 +#define PVS_SOURCE (PVS_FUNCTIONCOUNT + 1)
3910 +#define PPS_INSTRCOUNT 1
3911 +#define PPS_ALUINSTRCOUNT (PPS_INSTRCOUNT + 1)
3912 +#define PPS_TEXINSTRCOUNT (PPS_ALUINSTRCOUNT + 1)
3913 +#define PPS_ATTRIBCOUNT (PPS_TEXINSTRCOUNT + 1)
3914 +#define PPS_UNIFORMCOUNT (PPS_ATTRIBCOUNT + 1)
3915 +#define PPS_FUNCTIONCOUNT (PPS_UNIFORMCOUNT + 1)
3916 +#define PPS_SOURCE (PPS_FUNCTIONCOUNT + 1)
3917 /* End of MISC Counter IDs. */
3919 #ifdef gcdNEW_PROFILER_FILE
3920 @@ -578,8 +184,8 @@ extern "C" {
3921 #define VPG_ES11_TIME 0x170000
3922 #define VPG_ES20_TIME 0x180000
3923 #define VPG_FRAME 0x190000
3924 -#define VPG_ES11_DRAW 0x200000
3925 -#define VPG_ES20_DRAW 0x210000
3926 +#define VPG_ES11_DRAW 0x200000
3927 +#define VPG_ES20_DRAW 0x210000
3928 #define VPG_END 0xff0000
3931 @@ -592,7 +198,7 @@ extern "C" {
3932 #define VPC_INFOSCREENSIZE (VPC_INFODRIVERMODE + 1)
3934 /* Counter Constants. */
3935 -#define VPC_ELAPSETIME (VPG_TIME + 1)
3936 +#define VPC_ELAPSETIME (VPG_TIME + 1)
3937 #define VPC_CPUTIME (VPC_ELAPSETIME + 1)
3939 #define VPC_MEMMAXRES (VPG_MEM + 1)
3940 @@ -600,404 +206,28 @@ extern "C" {
3941 #define VPC_MEMUNSHAREDDATA (VPC_MEMSHARED + 1)
3942 #define VPC_MEMUNSHAREDSTACK (VPC_MEMUNSHAREDDATA + 1)
3944 -/* OpenGL ES11 Counters. */
3945 -#define VPC_ES11ACTIVETEXTURE (VPG_ES11 + ES11_ACTIVETEXTURE)
3946 -#define VPC_ES11ALPHAFUNC (VPG_ES11 + ES11_ALPHAFUNC)
3947 -#define VPC_ES11ALPHAFUNCX (VPG_ES11 + ES11_ALPHAFUNCX)
3948 -#define VPC_ES11BINDBUFFER (VPG_ES11 + ES11_BINDBUFFER)
3949 -#define VPC_ES11BINDTEXTURE (VPG_ES11 + ES11_BINDTEXTURE)
3950 -#define VPC_ES11BLENDFUNC (VPG_ES11 + ES11_BLENDFUNC)
3951 -#define VPC_ES11BUFFERDATA (VPG_ES11 + ES11_BUFFERDATA)
3952 -#define VPC_ES11BUFFERSUBDATA (VPG_ES11 + ES11_BUFFERSUBDATA)
3953 -#define VPC_ES11CLEAR (VPG_ES11 + ES11_CLEAR)
3954 -#define VPC_ES11CLEARCOLOR (VPG_ES11 + ES11_CLEARCOLOR)
3955 -#define VPC_ES11CLEARCOLORX (VPG_ES11 + ES11_CLEARCOLORX)
3956 -#define VPC_ES11CLEARDEPTHF (VPG_ES11 + ES11_CLEARDEPTHF)
3957 -#define VPC_ES11CLEARDEPTHX (VPG_ES11 + ES11_CLEARDEPTHX)
3958 -#define VPC_ES11CLEARSTENCIL (VPG_ES11 + ES11_CLEARSTENCIL)
3959 -#define VPC_ES11CLIENTACTIVETEXTURE (VPG_ES11 + ES11_CLIENTACTIVETEXTURE)
3960 -#define VPC_ES11CLIPPLANEF (VPG_ES11 + ES11_CLIPPLANEF)
3961 -#define VPC_ES11CLIPPLANEX (VPG_ES11 + ES11_CLIPPLANEX)
3962 -#define VPC_ES11COLOR4F (VPG_ES11 + ES11_COLOR4F)
3963 -#define VPC_ES11COLOR4UB (VPG_ES11 + ES11_COLOR4UB)
3964 -#define VPC_ES11COLOR4X (VPG_ES11 + ES11_COLOR4X)
3965 -#define VPC_ES11COLORMASK (VPG_ES11 + ES11_COLORMASK)
3966 -#define VPC_ES11COLORPOINTER (VPG_ES11 + ES11_COLORPOINTER)
3967 -#define VPC_ES11COMPRESSEDTEXIMAGE2D (VPG_ES11 + ES11_COMPRESSEDTEXIMAGE2D)
3968 -#define VPC_ES11COMPRESSEDTEXSUBIMAGE2D (VPG_ES11 + ES11_COMPRESSEDTEXSUBIMAGE2D)
3969 -#define VPC_ES11COPYTEXIMAGE2D (VPG_ES11 + ES11_COPYTEXIMAGE2D)
3970 -#define VPC_ES11COPYTEXSUBIMAGE2D (VPG_ES11 + ES11_COPYTEXSUBIMAGE2D)
3971 -#define VPC_ES11CULLFACE (VPG_ES11 + ES11_CULLFACE)
3972 -#define VPC_ES11DELETEBUFFERS (VPG_ES11 + ES11_DELETEBUFFERS)
3973 -#define VPC_ES11DELETETEXTURES (VPG_ES11 + ES11_DELETETEXTURES)
3974 -#define VPC_ES11DEPTHFUNC (VPG_ES11 + ES11_DEPTHFUNC)
3975 -#define VPC_ES11DEPTHMASK (VPG_ES11 + ES11_DEPTHMASK)
3976 -#define VPC_ES11DEPTHRANGEF (VPG_ES11 + ES11_DEPTHRANGEF)
3977 -#define VPC_ES11DEPTHRANGEX (VPG_ES11 + ES11_DEPTHRANGEX)
3978 -#define VPC_ES11DISABLE (VPG_ES11 + ES11_DISABLE)
3979 -#define VPC_ES11DISABLECLIENTSTATE (VPG_ES11 + ES11_DISABLECLIENTSTATE)
3980 -#define VPC_ES11DRAWARRAYS (VPG_ES11 + ES11_DRAWARRAYS)
3981 -#define VPC_ES11DRAWELEMENTS (VPG_ES11 + ES11_DRAWELEMENTS)
3982 -#define VPC_ES11ENABLE (VPG_ES11 + ES11_ENABLE)
3983 -#define VPC_ES11ENABLECLIENTSTATE (VPG_ES11 + ES11_ENABLECLIENTSTATE)
3984 -#define VPC_ES11FINISH (VPG_ES11 + ES11_FINISH)
3985 -#define VPC_ES11FLUSH (VPG_ES11 + ES11_FLUSH)
3986 -#define VPC_ES11FOGF (VPG_ES11 + ES11_FOGF)
3987 -#define VPC_ES11FOGFV (VPG_ES11 + ES11_FOGFV)
3988 -#define VPC_ES11FOGX (VPG_ES11 + ES11_FOGX)
3989 -#define VPC_ES11FOGXV (VPG_ES11 + ES11_FOGXV)
3990 -#define VPC_ES11FRONTFACE (VPG_ES11 + ES11_FRONTFACE)
3991 -#define VPC_ES11FRUSTUMF (VPG_ES11 + ES11_FRUSTUMF)
3992 -#define VPC_ES11FRUSTUMX (VPG_ES11 + ES11_FRUSTUMX)
3993 -#define VPC_ES11GENBUFFERS (VPG_ES11 + ES11_GENBUFFERS)
3994 -#define VPC_ES11GENTEXTURES (VPG_ES11 + ES11_GENTEXTURES)
3995 -#define VPC_ES11GETBOOLEANV (VPG_ES11 + ES11_GETBOOLEANV)
3996 -#define VPC_ES11GETBUFFERPARAMETERIV (VPG_ES11 + ES11_GETBUFFERPARAMETERIV)
3997 -#define VPC_ES11GETCLIPPLANEF (VPG_ES11 + ES11_GETCLIPPLANEF)
3998 -#define VPC_ES11GETCLIPPLANEX (VPG_ES11 + ES11_GETCLIPPLANEX)
3999 -#define VPC_ES11GETERROR (VPG_ES11 + ES11_GETERROR)
4000 -#define VPC_ES11GETFIXEDV (VPG_ES11 + ES11_GETFIXEDV)
4001 -#define VPC_ES11GETFLOATV (VPG_ES11 + ES11_GETFLOATV)
4002 -#define VPC_ES11GETINTEGERV (VPG_ES11 + ES11_GETINTEGERV)
4003 -#define VPC_ES11GETLIGHTFV (VPG_ES11 + ES11_GETLIGHTFV)
4004 -#define VPC_ES11GETLIGHTXV (VPG_ES11 + ES11_GETLIGHTXV)
4005 -#define VPC_ES11GETMATERIALFV (VPG_ES11 + ES11_GETMATERIALFV)
4006 -#define VPC_ES11GETMATERIALXV (VPG_ES11 + ES11_GETMATERIALXV)
4007 -#define VPC_ES11GETPOINTERV (VPG_ES11 + ES11_GETPOINTERV)
4008 -#define VPC_ES11GETSTRING (VPG_ES11 + ES11_GETSTRING)
4009 -#define VPC_ES11GETTEXENVFV (VPG_ES11 + ES11_GETTEXENVFV)
4010 -#define VPC_ES11GETTEXENVIV (VPG_ES11 + ES11_GETTEXENVIV)
4011 -#define VPC_ES11GETTEXENVXV (VPG_ES11 + ES11_GETTEXENVXV)
4012 -#define VPC_ES11GETTEXPARAMETERFV (VPG_ES11 + ES11_GETTEXPARAMETERFV)
4013 -#define VPC_ES11GETTEXPARAMETERIV (VPG_ES11 + ES11_GETTEXPARAMETERIV)
4014 -#define VPC_ES11GETTEXPARAMETERXV (VPG_ES11 + ES11_GETTEXPARAMETERXV)
4015 -#define VPC_ES11HINT (VPG_ES11 + ES11_HINT)
4016 -#define VPC_ES11ISBUFFER (VPG_ES11 + ES11_ISBUFFER)
4017 -#define VPC_ES11ISENABLED (VPG_ES11 + ES11_ISENABLED)
4018 -#define VPC_ES11ISTEXTURE (VPG_ES11 + ES11_ISTEXTURE)
4019 -#define VPC_ES11LIGHTF (VPG_ES11 + ES11_LIGHTF)
4020 -#define VPC_ES11LIGHTFV (VPG_ES11 + ES11_LIGHTFV)
4021 -#define VPC_ES11LIGHTMODELF (VPG_ES11 + ES11_LIGHTMODELF)
4022 -#define VPC_ES11LIGHTMODELFV (VPG_ES11 + ES11_LIGHTMODELFV)
4023 -#define VPC_ES11LIGHTMODELX (VPG_ES11 + ES11_LIGHTMODELX)
4024 -#define VPC_ES11LIGHTMODELXV (VPG_ES11 + ES11_LIGHTMODELXV)
4025 -#define VPC_ES11LIGHTX (VPG_ES11 + ES11_LIGHTX)
4026 -#define VPC_ES11LIGHTXV (VPG_ES11 + ES11_LIGHTXV)
4027 -#define VPC_ES11LINEWIDTH (VPG_ES11 + ES11_LINEWIDTH)
4028 -#define VPC_ES11LINEWIDTHX (VPG_ES11 + ES11_LINEWIDTHX)
4029 -#define VPC_ES11LOADIDENTITY (VPG_ES11 + ES11_LOADIDENTITY)
4030 -#define VPC_ES11LOADMATRIXF (VPG_ES11 + ES11_LOADMATRIXF)
4031 -#define VPC_ES11LOADMATRIXX (VPG_ES11 + ES11_LOADMATRIXX)
4032 -#define VPC_ES11LOGICOP (VPG_ES11 + ES11_LOGICOP)
4033 -#define VPC_ES11MATERIALF (VPG_ES11 + ES11_MATERIALF)
4034 -#define VPC_ES11MATERIALFV (VPG_ES11 + ES11_MATERIALFV)
4035 -#define VPC_ES11MATERIALX (VPG_ES11 + ES11_MATERIALX)
4036 -#define VPC_ES11MATERIALXV (VPG_ES11 + ES11_MATERIALXV)
4037 -#define VPC_ES11MATRIXMODE (VPG_ES11 + ES11_MATRIXMODE)
4038 -#define VPC_ES11MULTITEXCOORD4F (VPG_ES11 + ES11_MULTITEXCOORD4F)
4039 -#define VPC_ES11MULTITEXCOORD4X (VPG_ES11 + ES11_MULTITEXCOORD4X)
4040 -#define VPC_ES11MULTMATRIXF (VPG_ES11 + ES11_MULTMATRIXF)
4041 -#define VPC_ES11MULTMATRIXX (VPG_ES11 + ES11_MULTMATRIXX)
4042 -#define VPC_ES11NORMAL3F (VPG_ES11 + ES11_NORMAL3F)
4043 -#define VPC_ES11NORMAL3X (VPG_ES11 + ES11_NORMAL3X)
4044 -#define VPC_ES11NORMALPOINTER (VPG_ES11 + ES11_NORMALPOINTER)
4045 -#define VPC_ES11ORTHOF (VPG_ES11 + ES11_ORTHOF)
4046 -#define VPC_ES11ORTHOX (VPG_ES11 + ES11_ORTHOX)
4047 -#define VPC_ES11PIXELSTOREI (VPG_ES11 + ES11_PIXELSTOREI)
4048 -#define VPC_ES11POINTPARAMETERF (VPG_ES11 + ES11_POINTPARAMETERF)
4049 -#define VPC_ES11POINTPARAMETERFV (VPG_ES11 + ES11_POINTPARAMETERFV)
4050 -#define VPC_ES11POINTPARAMETERX (VPG_ES11 + ES11_POINTPARAMETERX)
4051 -#define VPC_ES11POINTPARAMETERXV (VPG_ES11 + ES11_POINTPARAMETERXV)
4052 -#define VPC_ES11POINTSIZE (VPG_ES11 + ES11_POINTSIZE)
4053 -#define VPC_ES11POINTSIZEX (VPG_ES11 + ES11_POINTSIZEX)
4054 -#define VPC_ES11POLYGONOFFSET (VPG_ES11 + ES11_POLYGONOFFSET)
4055 -#define VPC_ES11POLYGONOFFSETX (VPG_ES11 + ES11_POLYGONOFFSETX)
4056 -#define VPC_ES11POPMATRIX (VPG_ES11 + ES11_POPMATRIX)
4057 -#define VPC_ES11PUSHMATRIX (VPG_ES11 + ES11_PUSHMATRIX)
4058 -#define VPC_ES11READPIXELS (VPG_ES11 + ES11_READPIXELS)
4059 -#define VPC_ES11ROTATEF (VPG_ES11 + ES11_ROTATEF)
4060 -#define VPC_ES11ROTATEX (VPG_ES11 + ES11_ROTATEX)
4061 -#define VPC_ES11SAMPLECOVERAGE (VPG_ES11 + ES11_SAMPLECOVERAGE)
4062 -#define VPC_ES11SAMPLECOVERAGEX (VPG_ES11 + ES11_SAMPLECOVERAGEX)
4063 -#define VPC_ES11SCALEF (VPG_ES11 + ES11_SCALEF)
4064 -#define VPC_ES11SCALEX (VPG_ES11 + ES11_SCALEX)
4065 -#define VPC_ES11SCISSOR (VPG_ES11 + ES11_SCISSOR)
4066 -#define VPC_ES11SHADEMODEL (VPG_ES11 + ES11_SHADEMODEL)
4067 -#define VPC_ES11STENCILFUNC (VPG_ES11 + ES11_STENCILFUNC)
4068 -#define VPC_ES11STENCILMASK (VPG_ES11 + ES11_STENCILMASK)
4069 -#define VPC_ES11STENCILOP (VPG_ES11 + ES11_STENCILOP)
4070 -#define VPC_ES11TEXCOORDPOINTER (VPG_ES11 + ES11_TEXCOORDPOINTER)
4071 -#define VPC_ES11TEXENVF (VPG_ES11 + ES11_TEXENVF)
4072 -#define VPC_ES11TEXENVFV (VPG_ES11 + ES11_TEXENVFV)
4073 -#define VPC_ES11TEXENVI (VPG_ES11 + ES11_TEXENVI)
4074 -#define VPC_ES11TEXENVIV (VPG_ES11 + ES11_TEXENVIV)
4075 -#define VPC_ES11TEXENVX (VPG_ES11 + ES11_TEXENVX)
4076 -#define VPC_ES11TEXENVXV (VPG_ES11 + ES11_TEXENVXV)
4077 -#define VPC_ES11TEXIMAGE2D (VPG_ES11 + ES11_TEXIMAGE2D)
4078 -#define VPC_ES11TEXPARAMETERF (VPG_ES11 + ES11_TEXPARAMETERF)
4079 -#define VPC_ES11TEXPARAMETERFV (VPG_ES11 + ES11_TEXPARAMETERFV)
4080 -#define VPC_ES11TEXPARAMETERI (VPG_ES11 + ES11_TEXPARAMETERI)
4081 -#define VPC_ES11TEXPARAMETERIV (VPG_ES11 + ES11_TEXPARAMETERIV)
4082 -#define VPC_ES11TEXPARAMETERX (VPG_ES11 + ES11_TEXPARAMETERX)
4083 -#define VPC_ES11TEXPARAMETERXV (VPG_ES11 + ES11_TEXPARAMETERXV)
4084 -#define VPC_ES11TEXSUBIMAGE2D (VPG_ES11 + ES11_TEXSUBIMAGE2D)
4085 -#define VPC_ES11TRANSLATEF (VPG_ES11 + ES11_TRANSLATEF)
4086 -#define VPC_ES11TRANSLATEX (VPG_ES11 + ES11_TRANSLATEX)
4087 -#define VPC_ES11VERTEXPOINTER (VPG_ES11 + ES11_VERTEXPOINTER)
4088 -#define VPC_ES11VIEWPORT (VPG_ES11 + ES11_VIEWPORT)
4089 /* OpenGL ES11 Statics Counter IDs. */
4090 -#define VPC_ES11CALLS (VPG_ES11 + ES11_CALLS)
4091 -#define VPC_ES11DRAWCALLS (VPG_ES11 + ES11_DRAWCALLS)
4092 -#define VPC_ES11STATECHANGECALLS (VPG_ES11 + ES11_STATECHANGECALLS)
4093 -#define VPC_ES11POINTCOUNT (VPG_ES11 + ES11_POINTCOUNT)
4094 -#define VPC_ES11LINECOUNT (VPG_ES11 + ES11_LINECOUNT)
4095 -#define VPC_ES11TRIANGLECOUNT (VPG_ES11 + ES11_TRIANGLECOUNT)
4098 -#define VPC_ES20ACTIVETEXTURE (VPG_ES20 + ES20_ACTIVETEXTURE)
4099 -#define VPC_ES20ATTACHSHADER (VPG_ES20 + ES20_ATTACHSHADER)
4100 -#define VPC_ES20BINDATTRIBLOCATION (VPG_ES20 + ES20_BINDATTRIBLOCATION)
4101 -#define VPC_ES20BINDBUFFER (VPG_ES20 + ES20_BINDBUFFER)
4102 -#define VPC_ES20BINDFRAMEBUFFER (VPG_ES20 + ES20_BINDFRAMEBUFFER)
4103 -#define VPC_ES20BINDRENDERBUFFER (VPG_ES20 + ES20_BINDRENDERBUFFER)
4104 -#define VPC_ES20BINDTEXTURE (VPG_ES20 + ES20_BINDTEXTURE)
4105 -#define VPC_ES20BLENDCOLOR (VPG_ES20 + ES20_BLENDCOLOR)
4106 -#define VPC_ES20BLENDEQUATION (VPG_ES20 + ES20_BLENDEQUATION)
4107 -#define VPC_ES20BLENDEQUATIONSEPARATE (VPG_ES20 + ES20_BLENDEQUATIONSEPARATE)
4108 -#define VPC_ES20BLENDFUNC (VPG_ES20 + ES20_BLENDFUNC)
4109 -#define VPC_ES20BLENDFUNCSEPARATE (VPG_ES20 + ES20_BLENDFUNCSEPARATE)
4110 -#define VPC_ES20BUFFERDATA (VPG_ES20 + ES20_BUFFERDATA)
4111 -#define VPC_ES20BUFFERSUBDATA (VPG_ES20 + ES20_BUFFERSUBDATA)
4112 -#define VPC_ES20CHECKFRAMEBUFFERSTATUS (VPG_ES20 + ES20_CHECKFRAMEBUFFERSTATUS)
4113 -#define VPC_ES20CLEAR (VPG_ES20 + ES20_CLEAR)
4114 -#define VPC_ES20CLEARCOLOR (VPG_ES20 + ES20_CLEARCOLOR)
4115 -#define VPC_ES20CLEARDEPTHF (VPG_ES20 + ES20_CLEARDEPTHF)
4116 -#define VPC_ES20CLEARSTENCIL (VPG_ES20 + ES20_CLEARSTENCIL)
4117 -#define VPC_ES20COLORMASK (VPG_ES20 + ES20_COLORMASK)
4118 -#define VPC_ES20COMPILESHADER (VPG_ES20 + ES20_COMPILESHADER)
4119 -#define VPC_ES20COMPRESSEDTEXIMAGE2D (VPG_ES20 + ES20_COMPRESSEDTEXIMAGE2D)
4120 -#define VPC_ES20COMPRESSEDTEXSUBIMAGE2D (VPG_ES20 + ES20_COMPRESSEDTEXSUBIMAGE2D)
4121 -#define VPC_ES20COPYTEXIMAGE2D (VPG_ES20 + ES20_COPYTEXIMAGE2D)
4122 -#define VPC_ES20COPYTEXSUBIMAGE2D (VPG_ES20 + ES20_COPYTEXSUBIMAGE2D)
4123 -#define VPC_ES20CREATEPROGRAM (VPG_ES20 + ES20_CREATEPROGRAM)
4124 -#define VPC_ES20CREATESHADER (VPG_ES20 + ES20_CREATESHADER)
4125 -#define VPC_ES20CULLFACE (VPG_ES20 + ES20_CULLFACE)
4126 -#define VPC_ES20DELETEBUFFERS (VPG_ES20 + ES20_DELETEBUFFERS)
4127 -#define VPC_ES20DELETEFRAMEBUFFERS (VPG_ES20 + ES20_DELETEFRAMEBUFFERS)
4128 -#define VPC_ES20DELETEPROGRAM (VPG_ES20 + ES20_DELETEPROGRAM)
4129 -#define VPC_ES20DELETERENDERBUFFERS (VPG_ES20 + ES20_DELETERENDERBUFFERS)
4130 -#define VPC_ES20DELETESHADER (VPG_ES20 + ES20_DELETESHADER)
4131 -#define VPC_ES20DELETETEXTURES (VPG_ES20 + ES20_DELETETEXTURES)
4132 -#define VPC_ES20DEPTHFUNC (VPG_ES20 + ES20_DEPTHFUNC)
4133 -#define VPC_ES20DEPTHMASK (VPG_ES20 + ES20_DEPTHMASK)
4134 -#define VPC_ES20DEPTHRANGEF (VPG_ES20 + ES20_DEPTHRANGEF)
4135 -#define VPC_ES20DETACHSHADER (VPG_ES20 + ES20_DETACHSHADER)
4136 -#define VPC_ES20DISABLE (VPG_ES20 + ES20_DISABLE)
4137 -#define VPC_ES20DISABLEVERTEXATTRIBARRAY (VPG_ES20 + ES20_DISABLEVERTEXATTRIBARRAY)
4138 -#define VPC_ES20DRAWARRAYS (VPG_ES20 + ES20_DRAWARRAYS)
4139 -#define VPC_ES20DRAWELEMENTS (VPG_ES20 + ES20_DRAWELEMENTS)
4140 -#define VPC_ES20ENABLE (VPG_ES20 + ES20_ENABLE)
4141 -#define VPC_ES20ENABLEVERTEXATTRIBARRAY (VPG_ES20 + ES20_ENABLEVERTEXATTRIBARRAY)
4142 -#define VPC_ES20FINISH (VPG_ES20 + ES20_FINISH)
4143 -#define VPC_ES20FLUSH (VPG_ES20 + ES20_FLUSH)
4144 -#define VPC_ES20FRAMEBUFFERRENDERBUFFER (VPG_ES20 + ES20_FRAMEBUFFERRENDERBUFFER)
4145 -#define VPC_ES20FRAMEBUFFERTEXTURE2D (VPG_ES20 + ES20_FRAMEBUFFERTEXTURE2D)
4146 -#define VPC_ES20FRONTFACE (VPG_ES20 + ES20_FRONTFACE)
4147 -#define VPC_ES20GENBUFFERS (VPG_ES20 + ES20_GENBUFFERS)
4148 -#define VPC_ES20GENERATEMIPMAP (VPG_ES20 + ES20_GENERATEMIPMAP)
4149 -#define VPC_ES20GENFRAMEBUFFERS (VPG_ES20 + ES20_GENFRAMEBUFFERS)
4150 -#define VPC_ES20GENRENDERBUFFERS (VPG_ES20 + ES20_GENRENDERBUFFERS)
4151 -#define VPC_ES20GENTEXTURES (VPG_ES20 + ES20_GENTEXTURES)
4152 -#define VPC_ES20GETACTIVEATTRIB (VPG_ES20 + ES20_GETACTIVEATTRIB)
4153 -#define VPC_ES20GETACTIVEUNIFORM (VPG_ES20 + ES20_GETACTIVEUNIFORM)
4154 -#define VPC_ES20GETATTACHEDSHADERS (VPG_ES20 + ES20_GETATTACHEDSHADERS)
4155 -#define VPC_ES20GETATTRIBLOCATION (VPG_ES20 + ES20_GETATTRIBLOCATION)
4156 -#define VPC_ES20GETBOOLEANV (VPG_ES20 + ES20_GETBOOLEANV)
4157 -#define VPC_ES20GETBUFFERPARAMETERIV (VPG_ES20 + ES20_GETBUFFERPARAMETERIV)
4158 -#define VPC_ES20GETERROR (VPG_ES20 + ES20_GETERROR)
4159 -#define VPC_ES20GETFLOATV (VPG_ES20 + ES20_GETFLOATV)
4160 -#define VPC_ES20GETFRAMEBUFFERATTACHMENTPARAMETERIV (VPG_ES20 + ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV)
4161 -#define VPC_ES20GETINTEGERV (VPG_ES20 + ES20_GETINTEGERV)
4162 -#define VPC_ES20GETPROGRAMIV (VPG_ES20 + ES20_GETPROGRAMIV)
4163 -#define VPC_ES20GETPROGRAMINFOLOG (VPG_ES20 + ES20_GETPROGRAMINFOLOG)
4164 -#define VPC_ES20GETRENDERBUFFERPARAMETERIV (VPG_ES20 + ES20_GETRENDERBUFFERPARAMETERIV)
4165 -#define VPC_ES20GETSHADERIV (VPG_ES20 + ES20_GETSHADERIV)
4166 -#define VPC_ES20GETSHADERINFOLOG (VPG_ES20 + ES20_GETSHADERINFOLOG)
4167 -#define VPC_ES20GETSHADERPRECISIONFORMAT (VPG_ES20 + ES20_GETSHADERPRECISIONFORMAT)
4168 -#define VPC_ES20GETSHADERSOURCE (VPG_ES20 + ES20_GETSHADERSOURCE)
4169 -#define VPC_ES20GETSTRING (VPG_ES20 + ES20_GETSTRING)
4170 -#define VPC_ES20GETTEXPARAMETERFV (VPG_ES20 + ES20_GETTEXPARAMETERFV)
4171 -#define VPC_ES20GETTEXPARAMETERIV (VPG_ES20 + ES20_GETTEXPARAMETERIV)
4172 -#define VPC_ES20GETUNIFORMFV (VPG_ES20 + ES20_GETUNIFORMFV)
4173 -#define VPC_ES20GETUNIFORMIV (VPG_ES20 + ES20_GETUNIFORMIV)
4174 -#define VPC_ES20GETUNIFORMLOCATION (VPG_ES20 + ES20_GETUNIFORMLOCATION)
4175 -#define VPC_ES20GETVERTEXATTRIBFV (VPG_ES20 + ES20_GETVERTEXATTRIBFV)
4176 -#define VPC_ES20GETVERTEXATTRIBIV (VPG_ES20 + ES20_GETVERTEXATTRIBIV)
4177 -#define VPC_ES20GETVERTEXATTRIBPOINTERV (VPG_ES20 + ES20_GETVERTEXATTRIBPOINTERV)
4178 -#define VPC_ES20HINT (VPG_ES20 + ES20_HINT)
4179 -#define VPC_ES20ISBUFFER (VPG_ES20 + ES20_ISBUFFER)
4180 -#define VPC_ES20ISENABLED (VPG_ES20 + ES20_ISENABLED)
4181 -#define VPC_ES20ISFRAMEBUFFER (VPG_ES20 + ES20_ISFRAMEBUFFER)
4182 -#define VPC_ES20ISPROGRAM (VPG_ES20 + ES20_ISPROGRAM)
4183 -#define VPC_ES20ISRENDERBUFFER (VPG_ES20 + ES20_ISRENDERBUFFER)
4184 -#define VPC_ES20ISSHADER (VPG_ES20 + ES20_ISSHADER)
4185 -#define VPC_ES20ISTEXTURE (VPG_ES20 + ES20_ISTEXTURE)
4186 -#define VPC_ES20LINEWIDTH (VPG_ES20 + ES20_LINEWIDTH)
4187 -#define VPC_ES20LINKPROGRAM (VPG_ES20 + ES20_LINKPROGRAM)
4188 -#define VPC_ES20PIXELSTOREI (VPG_ES20 + ES20_PIXELSTOREI)
4189 -#define VPC_ES20POLYGONOFFSET (VPG_ES20 + ES20_POLYGONOFFSET)
4190 -#define VPC_ES20READPIXELS (VPG_ES20 + ES20_READPIXELS)
4191 -#define VPC_ES20RELEASESHADERCOMPILER (VPG_ES20 + ES20_RELEASESHADERCOMPILER)
4192 -#define VPC_ES20RENDERBUFFERSTORAGE (VPG_ES20 + ES20_RENDERBUFFERSTORAGE)
4193 -#define VPC_ES20SAMPLECOVERAGE (VPG_ES20 + ES20_SAMPLECOVERAGE)
4194 -#define VPC_ES20SCISSOR (VPG_ES20 + ES20_SCISSOR)
4195 -#define VPC_ES20SHADERBINARY (VPG_ES20 + ES20_SHADERBINARY)
4196 -#define VPC_ES20SHADERSOURCE (VPG_ES20 + ES20_SHADERSOURCE)
4197 -#define VPC_ES20STENCILFUNC (VPG_ES20 + ES20_STENCILFUNC)
4198 -#define VPC_ES20STENCILFUNCSEPARATE (VPG_ES20 + ES20_STENCILFUNCSEPARATE)
4199 -#define VPC_ES20STENCILMASK (VPG_ES20 + ES20_STENCILMASK)
4200 -#define VPC_ES20STENCILMASKSEPARATE (VPG_ES20 + ES20_STENCILMASKSEPARATE)
4201 -#define VPC_ES20STENCILOP (VPG_ES20 + ES20_STENCILOP)
4202 -#define VPC_ES20STENCILOPSEPARATE (VPG_ES20 + ES20_STENCILOPSEPARATE)
4203 -#define VPC_ES20TEXIMAGE2D (VPG_ES20 + ES20_TEXIMAGE2D)
4204 -#define VPC_ES20TEXPARAMETERF (VPG_ES20 + ES20_TEXPARAMETERF)
4205 -#define VPC_ES20TEXPARAMETERFV (VPG_ES20 + ES20_TEXPARAMETERFV)
4206 -#define VPC_ES20TEXPARAMETERI (VPG_ES20 + ES20_TEXPARAMETERI)
4207 -#define VPC_ES20TEXPARAMETERIV (VPG_ES20 + ES20_TEXPARAMETERIV)
4208 -#define VPC_ES20TEXSUBIMAGE2D (VPG_ES20 + ES20_TEXSUBIMAGE2D)
4209 -#define VPC_ES20UNIFORM1F (VPG_ES20 + ES20_UNIFORM1F)
4210 -#define VPC_ES20UNIFORM1FV (VPG_ES20 + ES20_UNIFORM1FV)
4211 -#define VPC_ES20UNIFORM1I (VPG_ES20 + ES20_UNIFORM1I)
4212 -#define VPC_ES20UNIFORM1IV (VPG_ES20 + ES20_UNIFORM1IV)
4213 -#define VPC_ES20UNIFORM2F (VPG_ES20 + ES20_UNIFORM2F)
4214 -#define VPC_ES20UNIFORM2FV (VPG_ES20 + ES20_UNIFORM2FV)
4215 -#define VPC_ES20UNIFORM2I (VPG_ES20 + ES20_UNIFORM2I)
4216 -#define VPC_ES20UNIFORM2IV (VPG_ES20 + ES20_UNIFORM2IV)
4217 -#define VPC_ES20UNIFORM3F (VPG_ES20 + ES20_UNIFORM3F)
4218 -#define VPC_ES20UNIFORM3FV (VPG_ES20 + ES20_UNIFORM3FV)
4219 -#define VPC_ES20UNIFORM3I (VPG_ES20 + ES20_UNIFORM3I)
4220 -#define VPC_ES20UNIFORM3IV (VPG_ES20 + ES20_UNIFORM3IV)
4221 -#define VPC_ES20UNIFORM4F (VPG_ES20 + ES20_UNIFORM4F)
4222 -#define VPC_ES20UNIFORM4FV (VPG_ES20 + ES20_UNIFORM4FV)
4223 -#define VPC_ES20UNIFORM4I (VPG_ES20 + ES20_UNIFORM4I)
4224 -#define VPC_ES20UNIFORM4IV (VPG_ES20 + ES20_UNIFORM4IV)
4225 -#define VPC_ES20UNIFORMMATRIX2FV (VPG_ES20 + ES20_UNIFORMMATRIX2FV)
4226 -#define VPC_ES20UNIFORMMATRIX3FV (VPG_ES20 + ES20_UNIFORMMATRIX3FV)
4227 -#define VPC_ES20UNIFORMMATRIX4FV (VPG_ES20 + ES20_UNIFORMMATRIX4FV)
4228 -#define VPC_ES20USEPROGRAM (VPG_ES20 + ES20_USEPROGRAM)
4229 -#define VPC_ES20VALIDATEPROGRAM (VPG_ES20 + ES20_VALIDATEPROGRAM)
4230 -#define VPC_ES20VERTEXATTRIB1F (VPG_ES20 + ES20_VERTEXATTRIB1F)
4231 -#define VPC_ES20VERTEXATTRIB1FV (VPG_ES20 + ES20_VERTEXATTRIB1FV)
4232 -#define VPC_ES20VERTEXATTRIB2F (VPG_ES20 + ES20_VERTEXATTRIB2F)
4233 -#define VPC_ES20VERTEXATTRIB2FV (VPG_ES20 + ES20_VERTEXATTRIB2FV)
4234 -#define VPC_ES20VERTEXATTRIB3F (VPG_ES20 + ES20_VERTEXATTRIB3F)
4235 -#define VPC_ES20VERTEXATTRIB3FV (VPG_ES20 + ES20_VERTEXATTRIB3FV)
4236 -#define VPC_ES20VERTEXATTRIB4F (VPG_ES20 + ES20_VERTEXATTRIB4F)
4237 -#define VPC_ES20VERTEXATTRIB4FV (VPG_ES20 + ES20_VERTEXATTRIB4FV)
4238 -#define VPC_ES20VERTEXATTRIBPOINTER (VPG_ES20 + ES20_VERTEXATTRIBPOINTER)
4239 -#define VPC_ES20VIEWPORT (VPG_ES20 + ES20_VIEWPORT)
4240 +#define VPC_ES11CALLS (VPG_ES11 + ES11_CALLS)
4241 +#define VPC_ES11DRAWCALLS (VPG_ES11 + ES11_DRAWCALLS)
4242 +#define VPC_ES11STATECHANGECALLS (VPG_ES11 + ES11_STATECHANGECALLS)
4243 +#define VPC_ES11POINTCOUNT (VPG_ES11 + ES11_POINTCOUNT)
4244 +#define VPC_ES11LINECOUNT (VPG_ES11 + ES11_LINECOUNT)
4245 +#define VPC_ES11TRIANGLECOUNT (VPG_ES11 + ES11_TRIANGLECOUNT)
4247 /* OpenGL ES20 Statistics Counter IDs. */
4248 -#define VPC_ES20CALLS (VPG_ES20 + ES20_CALLS)
4249 -#define VPC_ES20DRAWCALLS (VPG_ES20 + ES20_DRAWCALLS)
4250 -#define VPC_ES20STATECHANGECALLS (VPG_ES20 + ES20_STATECHANGECALLS)
4251 -#define VPC_ES20POINTCOUNT (VPG_ES20 + ES20_POINTCOUNT)
4252 -#define VPC_ES20LINECOUNT (VPG_ES20 + ES20_LINECOUNT)
4253 -#define VPC_ES20TRIANGLECOUNT (VPG_ES20 + ES20_TRIANGLECOUNT)
4255 -/* VG11 Counters. */
4256 -#define VPC_VG11APPENDPATH (VPG_VG11 + VG11_APPENDPATH)
4257 -#define VPC_VG11APPENDPATHDATA (VPG_VG11 + VG11_APPENDPATHDATA)
4258 -#define VPC_VG11CHILDIMAGE (VPG_VG11 + VG11_CHILDIMAGE)
4259 -#define VPC_VG11CLEAR (VPG_VG11 + VG11_CLEAR)
4260 -#define VPC_VG11CLEARGLYPH (VPG_VG11 + VG11_CLEARGLYPH)
4261 -#define VPC_VG11CLEARIMAGE (VPG_VG11 + VG11_CLEARIMAGE)
4262 -#define VPC_VG11CLEARPATH (VPG_VG11 + VG11_CLEARPATH)
4263 -#define VPC_VG11COLORMATRIX (VPG_VG11 + VG11_COLORMATRIX)
4264 -#define VPC_VG11CONVOLVE (VPG_VG11 + VG11_CONVOLVE)
4265 -#define VPC_VG11COPYIMAGE (VPG_VG11 + VG11_COPYIMAGE)
4266 -#define VPC_VG11COPYMASK (VPG_VG11 + VG11_COPYMASK)
4267 -#define VPC_VG11COPYPIXELS (VPG_VG11 + VG11_COPYPIXELS)
4268 -#define VPC_VG11CREATEFONT (VPG_VG11 + VG11_CREATEFONT)
4269 -#define VPC_VG11CREATEIMAGE (VPG_VG11 + VG11_CREATEIMAGE)
4270 -#define VPC_VG11CREATEMASKLAYER (VPG_VG11 + VG11_CREATEMASKLAYER)
4271 -#define VPC_VG11CREATEPAINT (VPG_VG11 + VG11_CREATEPAINT)
4272 -#define VPC_VG11CREATEPATH (VPG_VG11 + VG11_CREATEPATH)
4273 -#define VPC_VG11DESTROYFONT (VPG_VG11 + VG11_DESTROYFONT)
4274 -#define VPC_VG11DESTROYIMAGE (VPG_VG11 + VG11_DESTROYIMAGE)
4275 -#define VPC_VG11DESTROYMASKLAYER (VPG_VG11 + VG11_DESTROYMASKLAYER)
4276 -#define VPC_VG11DESTROYPAINT (VPG_VG11 + VG11_DESTROYPAINT)
4277 -#define VPC_VG11DESTROYPATH (VPG_VG11 + VG11_DESTROYPATH)
4278 -#define VPC_VG11DRAWGLYPH (VPG_VG11 + VG11_DRAWGLYPH)
4279 -#define VPC_VG11DRAWGLYPHS (VPG_VG11 + VG11_DRAWGLYPHS)
4280 -#define VPC_VG11DRAWIMAGE (VPG_VG11 + VG11_DRAWIMAGE)
4281 -#define VPC_VG11DRAWPATH (VPG_VG11 + VG11_DRAWPATH)
4282 -#define VPC_VG11FILLMASKLAYER (VPG_VG11 + VG11_FILLMASKLAYER)
4283 -#define VPC_VG11FINISH (VPG_VG11 + VG11_FINISH)
4284 -#define VPC_VG11FLUSH (VPG_VG11 + VG11_FLUSH)
4285 -#define VPC_VG11GAUSSIANBLUR (VPG_VG11 + VG11_GAUSSIANBLUR)
4286 -#define VPC_VG11GETCOLOR (VPG_VG11 + VG11_GETCOLOR)
4287 -#define VPC_VG11GETERROR (VPG_VG11 + VG11_GETERROR)
4288 -#define VPC_VG11GETF (VPG_VG11 + VG11_GETF)
4289 -#define VPC_VG11GETFV (VPG_VG11 + VG11_GETFV)
4290 -#define VPC_VG11GETI (VPG_VG11 + VG11_GETI)
4291 -#define VPC_VG11GETIMAGESUBDATA (VPG_VG11 + VG11_GETIMAGESUBDATA)
4292 -#define VPC_VG11GETIV (VPG_VG11 + VG11_GETIV)
4293 -#define VPC_VG11GETMATRIX (VPG_VG11 + VG11_GETMATRIX)
4294 -#define VPC_VG11GETPAINT (VPG_VG11 + VG11_GETPAINT)
4295 -#define VPC_VG11GETPARAMETERF (VPG_VG11 + VG11_GETPARAMETERF)
4296 -#define VPC_VG11GETPARAMETERFV (VPG_VG11 + VG11_GETPARAMETERFV)
4297 -#define VPC_VG11GETPARAMETERI (VPG_VG11 + VG11_GETPARAMETERI)
4298 -#define VPC_VG11GETPARAMETERIV (VPG_VG11 + VG11_GETPARAMETERIV)
4299 -#define VPC_VG11GETPARAMETERVECTORSIZE (VPG_VG11 + VG11_GETPARAMETERVECTORSIZE)
4300 -#define VPC_VG11GETPARENT (VPG_VG11 + VG11_GETPARENT)
4301 -#define VPC_VG11GETPATHCAPABILITIES (VPG_VG11 + VG11_GETPATHCAPABILITIES)
4302 -#define VPC_VG11GETPIXELS (VPG_VG11 + VG11_GETPIXELS)
4303 -#define VPC_VG11GETSTRING (VPG_VG11 + VG11_GETSTRING)
4304 -#define VPC_VG11GETVECTORSIZE (VPG_VG11 + VG11_GETVECTORSIZE)
4305 -#define VPC_VG11HARDWAREQUERY (VPG_VG11 + VG11_HARDWAREQUERY)
4306 -#define VPC_VG11IMAGESUBDATA (VPG_VG11 + VG11_IMAGESUBDATA)
4307 -#define VPC_VG11INTERPOLATEPATH (VPG_VG11 + VG11_INTERPOLATEPATH)
4308 -#define VPC_VG11LOADIDENTITY (VPG_VG11 + VG11_LOADIDENTITY)
4309 -#define VPC_VG11LOADMATRIX (VPG_VG11 + VG11_LOADMATRIX)
4310 -#define VPC_VG11LOOKUP (VPG_VG11 + VG11_LOOKUP)
4311 -#define VPC_VG11LOOKUPSINGLE (VPG_VG11 + VG11_LOOKUPSINGLE)
4312 -#define VPC_VG11MASK (VPG_VG11 + VG11_MASK)
4313 -#define VPC_VG11MODIFYPATHCOORDS (VPG_VG11 + VG11_MODIFYPATHCOORDS)
4314 -#define VPC_VG11MULTMATRIX (VPG_VG11 + VG11_MULTMATRIX)
4315 -#define VPC_VG11PAINTPATTERN (VPG_VG11 + VG11_PAINTPATTERN)
4316 -#define VPC_VG11PATHBOUNDS (VPG_VG11 + VG11_PATHBOUNDS)
4317 -#define VPC_VG11PATHLENGTH (VPG_VG11 + VG11_PATHLENGTH)
4318 -#define VPC_VG11PATHTRANSFORMEDBOUNDS (VPG_VG11 + VG11_PATHTRANSFORMEDBOUNDS)
4319 -#define VPC_VG11POINTALONGPATH (VPG_VG11 + VG11_POINTALONGPATH)
4320 -#define VPC_VG11READPIXELS (VPG_VG11 + VG11_READPIXELS)
4321 -#define VPC_VG11REMOVEPATHCAPABILITIES (VPG_VG11 + VG11_REMOVEPATHCAPABILITIES)
4322 -#define VPC_VG11RENDERTOMASK (VPG_VG11 + VG11_RENDERTOMASK)
4323 -#define VPC_VG11ROTATE (VPG_VG11 + VG11_ROTATE)
4324 -#define VPC_VG11SCALE (VPG_VG11 + VG11_SCALE)
4325 -#define VPC_VG11SEPARABLECONVOLVE (VPG_VG11 + VG11_SEPARABLECONVOLVE)
4326 -#define VPC_VG11SETCOLOR (VPG_VG11 + VG11_SETCOLOR)
4327 -#define VPC_VG11SETF (VPG_VG11 + VG11_SETF)
4328 -#define VPC_VG11SETFV (VPG_VG11 + VG11_SETFV)
4329 -#define VPC_VG11SETGLYPHTOIMAGE (VPG_VG11 + VG11_SETGLYPHTOIMAGE)
4330 -#define VPC_VG11SETGLYPHTOPATH (VPG_VG11 + VG11_SETGLYPHTOPATH)
4331 -#define VPC_VG11SETI (VPG_VG11 + VG11_SETI)
4332 -#define VPC_VG11SETIV (VPG_VG11 + VG11_SETIV)
4333 -#define VPC_VG11SETPAINT (VPG_VG11 + VG11_SETPAINT)
4334 -#define VPC_VG11SETPARAMETERF (VPG_VG11 + VG11_SETPARAMETERF)
4335 -#define VPC_VG11SETPARAMETERFV (VPG_VG11 + VG11_SETPARAMETERFV)
4336 -#define VPC_VG11SETPARAMETERI (VPG_VG11 + VG11_SETPARAMETERI)
4337 -#define VPC_VG11SETPARAMETERIV (VPG_VG11 + VG11_SETPARAMETERIV)
4338 -#define VPC_VG11SETPIXELS (VPG_VG11 + VG11_SETPIXELS)
4339 -#define VPC_VG11SHEAR (VPG_VG11 + VG11_SHEAR)
4340 -#define VPC_VG11TRANSFORMPATH (VPG_VG11 + VG11_TRANSFORMPATH)
4341 -#define VPC_VG11TRANSLATE (VPG_VG11 + VG11_TRANSLATE)
4342 -#define VPC_VG11WRITEPIXELS (VPG_VG11 + VG11_WRITEPIXELS)
4343 +#define VPC_ES20CALLS (VPG_ES20 + ES20_CALLS)
4344 +#define VPC_ES20DRAWCALLS (VPG_ES20 + ES20_DRAWCALLS)
4345 +#define VPC_ES20STATECHANGECALLS (VPG_ES20 + ES20_STATECHANGECALLS)
4346 +#define VPC_ES20POINTCOUNT (VPG_ES20 + ES20_POINTCOUNT)
4347 +#define VPC_ES20LINECOUNT (VPG_ES20 + ES20_LINECOUNT)
4348 +#define VPC_ES20TRIANGLECOUNT (VPG_ES20 + ES20_TRIANGLECOUNT)
4350 /* OpenVG Statistics Counter IDs. */
4351 -#define VPC_VG11CALLS (VPG_VG11 + VG11_CALLS)
4352 -#define VPC_VG11DRAWCALLS (VPG_VG11 + VG11_DRAWCALLS)
4353 -#define VPC_VG11STATECHANGECALLS (VPG_VG11 + VG11_STATECHANGECALLS)
4354 -#define VPC_VG11FILLCOUNT (VPG_VG11 + VG11_FILLCOUNT)
4355 -#define VPC_VG11STROKECOUNT (VPG_VG11 + VG11_STROKECOUNT)
4356 +#define VPC_VG11CALLS (VPG_VG11 + VG11_CALLS)
4357 +#define VPC_VG11DRAWCALLS (VPG_VG11 + VG11_DRAWCALLS)
4358 +#define VPC_VG11STATECHANGECALLS (VPG_VG11 + VG11_STATECHANGECALLS)
4359 +#define VPC_VG11FILLCOUNT (VPG_VG11 + VG11_FILLCOUNT)
4360 +#define VPC_VG11STROKECOUNT (VPG_VG11 + VG11_STROKECOUNT)
4363 #define VPC_HALVERTBUFNEWBYTEALLOC (VPG_HAL + HAL_VERTBUFNEWBYTEALLOC)
4364 @@ -1018,7 +248,7 @@ extern "C" {
4365 #define VPC_GPUREAD64BYTE (VPG_GPU + GPU_READ64BYTE)
4366 #define VPC_GPUWRITE64BYTE (VPG_GPU + GPU_WRITE64BYTE)
4367 #define VPC_GPUTOTALCYCLES (VPG_GPU + GPU_TOTALCYCLES)
4368 -#define VPC_GPUIDLECYCLES (VPG_GPU + GPU_IDLECYCLES)
4369 +#define VPC_GPUIDLECYCLES (VPG_GPU + GPU_IDLECYCLES)
4371 /* HW: Shader Counters. */
4372 #define VPC_VSINSTCOUNT (VPG_VS + VS_INSTCOUNT)
4373 @@ -1026,9 +256,9 @@ extern "C" {
4374 #define VPC_VSTEXLDINSTCOUNT (VPG_VS + VS_TEXLDINSTCOUNT)
4375 #define VPC_VSRENDEREDVERTCOUNT (VPG_VS + VS_RENDEREDVERTCOUNT)
4377 -#define VPC_PSINSTCOUNT (VPG_PS + PS_INSTCOUNT)
4378 -#define VPC_PSBRANCHINSTCOUNT (VPG_PS + PS_BRANCHINSTCOUNT)
4379 -#define VPC_PSTEXLDINSTCOUNT (VPG_PS + PS_TEXLDINSTCOUNT)
4380 +#define VPC_PSINSTCOUNT (VPG_PS + PS_INSTCOUNT)
4381 +#define VPC_PSBRANCHINSTCOUNT (VPG_PS + PS_BRANCHINSTCOUNT)
4382 +#define VPC_PSTEXLDINSTCOUNT (VPG_PS + PS_TEXLDINSTCOUNT)
4383 #define VPC_PSRENDEREDPIXCOUNT (VPG_PS + PS_RENDEREDPIXCOUNT)
4386 @@ -1071,7 +301,7 @@ extern "C" {
4387 #define VPC_PEDRAWNBYDEPTH (VPG_PE + PE_DRAWNBYDEPTH)
4389 /* HW: MC Counters. */
4390 -#define VPC_MCREADREQ8BPIPE (VPG_MC + MC_READREQ8BPIPE)
4391 +#define VPC_MCREADREQ8BPIPE (VPG_MC + MC_READREQ8BPIPE)
4392 #define VPC_MCREADREQ8BIP (VPG_MC + MC_READREQ8BIP)
4393 #define VPC_MCWRITEREQ8BPIPE (VPG_MC + MC_WRITEREQ8BPIPE)
4395 @@ -1087,6 +317,7 @@ extern "C" {
4396 #define VPC_PVSATTRIBCOUNT (VPG_PVS + PVS_ATTRIBCOUNT)
4397 #define VPC_PVSUNIFORMCOUNT (VPG_PVS + PVS_UNIFORMCOUNT)
4398 #define VPC_PVSFUNCTIONCOUNT (VPG_PVS + PVS_FUNCTIONCOUNT)
4399 +#define VPC_PVSSOURCE (VPG_PVS + PVS_SOURCE)
4401 #define VPC_PPSINSTRCOUNT (VPG_PPS + PPS_INSTRCOUNT)
4402 #define VPC_PPSALUINSTRCOUNT (VPG_PPS + PPS_ALUINSTRCOUNT)
4403 @@ -1094,7 +325,9 @@ extern "C" {
4404 #define VPC_PPSATTRIBCOUNT (VPG_PPS + PPS_ATTRIBCOUNT)
4405 #define VPC_PPSUNIFORMCOUNT (VPG_PPS + PPS_UNIFORMCOUNT)
4406 #define VPC_PPSFUNCTIONCOUNT (VPG_PPS + PPS_FUNCTIONCOUNT)
4407 +#define VPC_PPSSOURCE (VPG_PPS + PPS_SOURCE)
4409 +#define VPC_PROGRAMHANDLE (VPG_PROG + 1)
4411 #define VPG_ES20_DRAW_NO (VPG_ES20_DRAW + 1)
4412 #define VPG_ES11_DRAW_NO (VPG_ES11_DRAW + 1)
4413 @@ -1118,8 +351,8 @@ typedef struct _gcsPROFILER_COUNTERS
4415 /* HW vairable counters. */
4416 gctUINT32 gpuCyclesCounter;
4417 - gctUINT32 gpuTotalCyclesCounter;
4418 - gctUINT32 gpuIdleCyclesCounter;
4419 + gctUINT32 gpuTotalCyclesCounter;
4420 + gctUINT32 gpuIdleCyclesCounter;
4421 gctUINT32 gpuTotalRead64BytesPerFrame;
4422 gctUINT32 gpuTotalWrite64BytesPerFrame;
4424 @@ -1158,7 +391,7 @@ typedef struct _gcsPROFILER_COUNTERS
4425 gctUINT32 ra_total_primitive_count;
4426 gctUINT32 ra_pipe_cache_miss_counter;
4427 gctUINT32 ra_prefetch_cache_miss_counter;
4428 - gctUINT32 ra_eez_culled_counter;
4429 + gctUINT32 ra_eez_culled_counter;
4432 gctUINT32 tx_total_bilinear_requests;
4433 @@ -1190,7 +423,7 @@ typedef struct _gcsPROFILER
4437 - gctBOOL isSyncMode;
4438 + gctBOOL isSyncMode;
4442 @@ -1234,14 +467,17 @@ typedef struct _gcsPROFILER
4443 gctUINT32 redundantStateChangeCalls;
4446 - gctUINT32 prevVSInstCount;
4447 - gctUINT32 prevVSBranchInstCount;
4448 - gctUINT32 prevVSTexInstCount;
4449 - gctUINT32 prevVSVertexCount;
4450 - gctUINT32 prevPSInstCount;
4451 - gctUINT32 prevPSBranchInstCount;
4452 - gctUINT32 prevPSTexInstCount;
4453 - gctUINT32 prevPSPixelCount;
4454 + gctUINT32 prevVSInstCount;
4455 + gctUINT32 prevVSBranchInstCount;
4456 + gctUINT32 prevVSTexInstCount;
4457 + gctUINT32 prevVSVertexCount;
4458 + gctUINT32 prevPSInstCount;
4459 + gctUINT32 prevPSBranchInstCount;
4460 + gctUINT32 prevPSTexInstCount;
4461 + gctUINT32 prevPSPixelCount;
4468 @@ -1315,6 +551,18 @@ gcoPROFILER_Count(
4473 +gcoPROFILER_ShaderSourceFS(
4479 +gcoPROFILER_ShaderSourceVS(
4484 /* Profile input vertex shader. */
4486 gcoPROFILER_ShaderVS(
4487 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
4488 index bc4171e..6e4d830 100644
4489 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
4490 +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
4491 @@ -568,6 +568,23 @@ gco2D_MonoBlit(
4492 IN gceSURF_FORMAT DestFormat
4498 + IN gctPOINTER StreamBits,
4499 + IN gctINT32 StreamStride,
4500 + IN gctINT32 StreamWidth,
4501 + IN gctINT32 StreamHeight,
4502 + IN gctINT32 StreamX,
4503 + IN gctINT32 StreamY,
4504 + IN gctUINT32 FgColor,
4505 + IN gctUINT32 BgColor,
4506 + IN gcsRECT_PTR SrcRect,
4507 + IN gcsRECT_PTR DstRect,
4508 + IN gctUINT8 FgRop,
4512 /* Set kernel size. */
4514 gco2D_SetKernelSize(
4515 @@ -942,6 +959,15 @@ gco2D_SetSourceTileStatus(
4519 +gco2D_SetTargetTileStatus(
4521 + IN gce2D_TILE_STATUS_CONFIG TileStatusConfig,
4522 + IN gceSURF_FORMAT CompressedFormat,
4523 + IN gctUINT32 ClearValue,
4524 + IN gctUINT32 GpuAddress
4530 IN gce2D_QUERY Item,
4531 @@ -955,6 +981,28 @@ gco2D_SetStateU32(
4536 +gco2D_SetStateArrayI32(
4538 + IN gce2D_STATE State,
4539 + IN gctINT32_PTR Array,
4540 + IN gctINT32 ArraySize
4544 +gco2D_SetStateArrayU32(
4546 + IN gce2D_STATE State,
4547 + IN gctUINT32_PTR Array,
4548 + IN gctINT32 ArraySize
4552 +gco2D_SetTargetRect(
4554 + IN gcsRECT_PTR Rect
4560 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
4561 index 5c0877d..14801aa 100644
4562 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
4563 +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
4564 @@ -128,6 +128,7 @@ typedef int gctBOOL;
4565 typedef gctBOOL * gctBOOL_PTR;
4568 +typedef long gctLONG;
4569 typedef signed char gctINT8;
4570 typedef signed short gctINT16;
4571 typedef signed int gctINT32;
4572 @@ -171,6 +172,7 @@ typedef void * gctFILE;
4573 typedef void * gctSIGNAL;
4574 typedef void * gctWINDOW;
4575 typedef void * gctIMAGE;
4576 +typedef void * gctSYNC_POINT;
4578 typedef void * gctSEMAPHORE;
4580 @@ -941,12 +943,19 @@ typedef struct _gcsHAL_FRAME_INFO
4581 OUT gctUINT readRequests[8];
4582 OUT gctUINT writeRequests[8];
4584 + /* FE counters. */
4585 + OUT gctUINT drawCount;
4586 + OUT gctUINT vertexOutCount;
4587 + OUT gctUINT vertexMissCount;
4590 OUT gctUINT vertexCount;
4591 OUT gctUINT primitiveCount;
4592 OUT gctUINT rejectedPrimitives;
4593 OUT gctUINT culledPrimitives;
4594 OUT gctUINT clippedPrimitives;
4595 + OUT gctUINT droppedPrimitives;
4596 + OUT gctUINT frustumClippedPrimitives;
4597 OUT gctUINT outPrimitives;
4598 OUT gctUINT inPrimitives;
4599 OUT gctUINT culledQuadCount;
4600 @@ -964,18 +973,86 @@ typedef struct _gcsHAL_FRAME_INFO
4601 OUT gctUINT shaderCycles;
4602 OUT gctUINT vsInstructionCount;
4603 OUT gctUINT vsTextureCount;
4604 + OUT gctUINT vsBranchCount;
4605 + OUT gctUINT vsVertices;
4606 OUT gctUINT psInstructionCount;
4607 OUT gctUINT psTextureCount;
4608 + OUT gctUINT psBranchCount;
4609 + OUT gctUINT psPixels;
4611 /* Texture counters. */
4612 OUT gctUINT bilinearRequests;
4613 OUT gctUINT trilinearRequests;
4614 - OUT gctUINT txBytes8;
4615 + OUT gctUINT txBytes8[2];
4616 OUT gctUINT txHitCount;
4617 OUT gctUINT txMissCount;
4621 +typedef enum _gcePATCH_ID
4623 + gcePATCH_UNKNOWN = 0xFFFFFFFF,
4625 + /* Benchmark list*/
4626 + gcePATCH_GLB11 = 0x0,
4635 + gcePATCH_QUADRANT,
4637 + gcePATCH_SMARTBENCH,
4639 + gcePATCH_NENAMARK,
4640 + gcePATCH_NENAMARK2,
4650 + gcePATCH_BARDTALE,
4651 + gcePATCH_BUSPARKING3D,
4652 + gcePATCH_FISHBOODLE,
4653 + gcePATCH_SUBWAYSURFER,
4654 + gcePATCH_HIGHWAYDRIVER,
4656 + gcePATCH_RACEILLEGAL,
4659 + gcePATCH_GALAXYONFIRE2,
4660 + gcePATCH_GLOFTR3HM,
4661 + gcePATCH_GLOFTSXHM,
4662 + gcePATCH_GLOFTF3HM,
4663 + gcePATCH_GLOFTGANG,
4667 + gcePATCH_HOLYARCH,
4670 + gcePATCH_SIEGECRAFT,
4671 + gcePATCH_CARCHALLENGE,
4672 + gcePATCH_HEROESCALL,
4673 + gcePATCH_MONOPOLY,
4677 + gcePATCH_DUOKANTV,
4685 #if gcdLINK_QUEUE_SIZE
4686 typedef struct _gckLINKDATA * gckLINKDATA;
4688 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
4689 index 03cb4d6..2eab666 100644
4690 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
4691 +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
4694 #define gcvVERSION_PATCH 9
4696 -#define gcvVERSION_BUILD 6622
4697 +#define gcvVERSION_BUILD 9754
4699 #define gcvVERSION_DATE __DATE__
4701 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
4702 index 4d48bd5..b029428 100644
4703 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
4704 +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
4706 #include <linux/mm.h>
4707 #include <linux/mman.h>
4708 #include <linux/slab.h>
4709 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
4710 #include <mach/hardware.h>
4712 #include <linux/pm_runtime.h>
4714 #define _GC_OBJ_ZONE gcvZONE_DEVICE
4715 @@ -305,6 +307,7 @@ gckGALDEVICE_Construct(
4716 IN gctUINT LogFileSize,
4717 IN struct device *pdev,
4718 IN gctINT PowerManagement,
4719 + IN gctINT GpuProfiler,
4720 OUT gckGALDEVICE *Device
4723 @@ -369,6 +372,10 @@ gckGALDEVICE_Construct(
4724 #if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
4725 /*get gpu regulator*/
4726 device->gpu_regulator = regulator_get(pdev, "cpu_vddgpu");
4727 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4728 + device->gpu_regulator = regulator_get(pdev, "vddpu");
4730 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4731 if (IS_ERR(device->gpu_regulator)) {
4732 gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DRIVER,
4733 "%s(%d): Failed to get gpu regulator %s/%s \n",
4734 @@ -541,6 +548,10 @@ gckGALDEVICE_Construct(
4735 device->kernels[gcvCORE_MAJOR]->hardware, PowerManagement
4738 + gcmkONERROR(gckHARDWARE_SetGpuProfiler(
4739 + device->kernels[gcvCORE_MAJOR]->hardware, GpuProfiler
4742 #if COMMAND_PROCESSOR_VERSION == 1
4743 /* Start the command queue. */
4744 gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_MAJOR]->command));
4745 @@ -599,6 +610,7 @@ gckGALDEVICE_Construct(
4746 device->kernels[gcvCORE_2D]->hardware, PowerManagement
4750 #if COMMAND_PROCESSOR_VERSION == 1
4751 /* Start the command queue. */
4752 gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_2D]->command));
4753 @@ -635,6 +647,7 @@ gckGALDEVICE_Construct(
4754 device->kernels[gcvCORE_VG]->vg->hardware,
4761 @@ -849,6 +862,7 @@ gckGALDEVICE_Construct(
4765 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
4766 mem_region = request_mem_region(
4767 ContiguousBase, ContiguousSize, "galcore managed memory"
4769 @@ -864,6 +878,7 @@ gckGALDEVICE_Construct(
4771 gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
4775 device->requestedContiguousBase = ContiguousBase;
4776 device->requestedContiguousSize = ContiguousSize;
4777 @@ -1107,7 +1122,7 @@ gckGALDEVICE_Destroy(
4778 pm_runtime_disable(Device->pmdev);
4781 -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
4782 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4783 if (Device->gpu_regulator) {
4784 regulator_put(Device->gpu_regulator);
4785 Device->gpu_regulator = NULL;
4786 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
4787 index dde4f03..c51432f 100644
4788 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
4789 +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
4791 ******************************* gckGALDEVICE Structure *******************************
4792 \******************************************************************************/
4794 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4795 +struct contiguous_mem_pool {
4796 + struct dma_attrs attrs;
4803 typedef struct _gckGALDEVICE
4806 @@ -91,12 +100,16 @@ typedef struct _gckGALDEVICE
4807 struct clk *clk_2d_axi;
4808 struct clk *clk_vg_axi;
4810 -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
4811 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4812 /*Power management.*/
4813 struct regulator *gpu_regulator;
4816 struct device *pmdev;
4817 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4818 + struct contiguous_mem_pool *pool;
4819 + struct reset_control *rstc[gcdMAX_GPU_COUNT];
4824 @@ -171,6 +184,7 @@ gceSTATUS gckGALDEVICE_Construct(
4825 IN gctUINT LogFileSize,
4826 IN struct device *pdev,
4827 IN gctINT PowerManagement,
4828 + IN gctINT GpuProfiler,
4829 OUT gckGALDEVICE *Device
4832 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
4833 index bacd531..88a7e4e6 100644
4834 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
4835 +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
4837 /****************************************************************************
4839 * Copyright (C) 2005 - 2013 by Vivante Corp.
4840 -* Copyright (C) 2011-2012 Freescale Semiconductor, Inc.
4841 +* Copyright (C) 2011-2013 Freescale Semiconductor, Inc.
4843 * This program is free software; you can redistribute it and/or modify
4844 * it under the terms of the GNU General Public License as published by
4845 @@ -69,14 +69,26 @@ task_notify_func(struct notifier_block *self, unsigned long val, void *data)
4846 #include <mach/viv_gpu.h>
4848 #include <linux/pm_runtime.h>
4849 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
4850 #include <mach/busfreq.h>
4852 +#include <linux/reset.h>
4855 /* Zone used for header/footer. */
4856 #define _GC_OBJ_ZONE gcvZONE_DRIVER
4858 #if gcdENABLE_FSCALE_VAL_ADJUST
4859 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4860 +#include <linux/device_cooling.h>
4861 +#define REG_THERMAL_NOTIFIER(a) register_devfreq_cooling_notifier(a);
4862 +#define UNREG_THERMAL_NOTIFIER(a) unregister_devfreq_cooling_notifier(a);
4864 extern int register_thermal_notifier(struct notifier_block *nb);
4865 extern int unregister_thermal_notifier(struct notifier_block *nb);
4866 +#define REG_THERMAL_NOTIFIER(a) register_thermal_notifier(a);
4867 +#define UNREG_THERMAL_NOTIFIER(a) unregister_thermal_notifier(a);
4871 MODULE_DESCRIPTION("Vivante Graphics Driver");
4872 @@ -116,7 +128,11 @@ module_param(registerMemBaseVG, ulong, 0644);
4873 static ulong registerMemSizeVG = 2 << 10;
4874 module_param(registerMemSizeVG, ulong, 0644);
4876 +#if gcdENABLE_FSCALE_VAL_ADJUST
4877 +static ulong contiguousSize = 128 << 20;
4879 static ulong contiguousSize = 4 << 20;
4881 module_param(contiguousSize, ulong, 0644);
4883 static ulong contiguousBase = 0;
4884 @@ -134,6 +150,9 @@ module_param(compression, int, 0644);
4885 static int powerManagement = 1;
4886 module_param(powerManagement, int, 0644);
4888 +static int gpuProfiler = 0;
4889 +module_param(gpuProfiler, int, 0644);
4891 static int signal = 48;
4892 module_param(signal, int, 0644);
4894 @@ -786,7 +805,9 @@ static int drv_init(struct device *pdev)
4896 printk(KERN_INFO "Galcore version %d.%d.%d.%d\n",
4897 gcvVERSION_MAJOR, gcvVERSION_MINOR, gcvVERSION_PATCH, gcvVERSION_BUILD);
4899 + /* when enable gpu profiler, we need to turn off gpu powerMangement */
4901 + powerManagement = 0;
4904 printk("galcore options:\n");
4905 @@ -818,6 +839,7 @@ static int drv_init(struct device *pdev)
4906 printk(" physSize = 0x%08lX\n", physSize);
4907 printk(" logFileSize = %d KB \n", logFileSize);
4908 printk(" powerManagement = %d\n", powerManagement);
4909 + printk(" gpuProfiler = %d\n", gpuProfiler);
4910 #if ENABLE_GPU_CLOCK_BY_DRIVER
4911 printk(" coreClock = %lu\n", coreClock);
4913 @@ -841,9 +863,14 @@ static int drv_init(struct device *pdev)
4921 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4922 + device->pool = dev_get_drvdata(pdev);
4925 /* Start the GAL device. */
4926 gcmkONERROR(gckGALDEVICE_Start(device));
4928 @@ -1028,11 +1055,18 @@ static struct notifier_block thermal_hot_pm_notifier = {
4932 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
4933 +static int gpu_probe(struct platform_device *pdev)
4935 static int __devinit gpu_probe(struct platform_device *pdev)
4939 struct resource* res;
4940 -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
4941 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4942 + struct contiguous_mem_pool *pool;
4943 + struct reset_control *rstc;
4944 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
4945 struct device_node *dn =pdev->dev.of_node;
4948 @@ -1077,7 +1111,22 @@ static int __devinit gpu_probe(struct platform_device *pdev)
4949 registerMemSizeVG = res->end - res->start + 1;
4952 -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
4953 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4954 + pool = devm_kzalloc(&pdev->dev, sizeof(*pool), GFP_KERNEL);
4957 + pool->size = contiguousSize;
4958 + init_dma_attrs(&pool->attrs);
4959 + dma_set_attr(DMA_ATTR_WRITE_COMBINE, &pool->attrs);
4960 + pool->virt = dma_alloc_attrs(&pdev->dev, pool->size, &pool->phys,
4961 + GFP_KERNEL, &pool->attrs);
4962 + if (!pool->virt) {
4963 + dev_err(&pdev->dev, "Failed to allocate contiguous memory\n");
4966 + contiguousBase = pool->phys;
4967 + dev_set_drvdata(&pdev->dev, pool);
4968 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
4969 prop = of_get_property(dn, "contiguousbase", NULL);
4971 contiguousBase = *prop;
4972 @@ -1095,30 +1144,56 @@ static int __devinit gpu_probe(struct platform_device *pdev)
4976 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4977 + rstc = devm_reset_control_get(&pdev->dev, "gpu3d");
4978 + galDevice->rstc[gcvCORE_MAJOR] = IS_ERR(rstc) ? NULL : rstc;
4980 + rstc = devm_reset_control_get(&pdev->dev, "gpu2d");
4981 + galDevice->rstc[gcvCORE_2D] = IS_ERR(rstc) ? NULL : rstc;
4983 + rstc = devm_reset_control_get(&pdev->dev, "gpuvg");
4984 + galDevice->rstc[gcvCORE_VG] = IS_ERR(rstc) ? NULL : rstc;
4986 platform_set_drvdata(pdev, galDevice);
4988 #if gcdENABLE_FSCALE_VAL_ADJUST
4989 - if(galDevice->kernels[gcvCORE_MAJOR])
4990 - register_thermal_notifier(&thermal_hot_pm_notifier);
4991 + if (galDevice->kernels[gcvCORE_MAJOR])
4992 + REG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
4997 #if gcdENABLE_FSCALE_VAL_ADJUST
4998 - unregister_thermal_notifier(&thermal_hot_pm_notifier);
4999 + UNREG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
5001 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5002 + dma_free_attrs(&pdev->dev, pool->size, pool->virt, pool->phys,
5005 gcmkFOOTER_ARG(KERN_INFO "Failed to register gpu driver: %d\n", ret);
5009 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
5010 +static int gpu_remove(struct platform_device *pdev)
5012 static int __devexit gpu_remove(struct platform_device *pdev)
5015 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5016 + gckGALDEVICE device = platform_get_drvdata(pdev);
5017 + struct contiguous_mem_pool *pool = device->pool;
5020 #if gcdENABLE_FSCALE_VAL_ADJUST
5021 if(galDevice->kernels[gcvCORE_MAJOR])
5022 - unregister_thermal_notifier(&thermal_hot_pm_notifier);
5023 + UNREG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
5026 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5027 + dma_free_attrs(&pdev->dev, pool->size, pool->virt, pool->phys,
5033 @@ -1254,13 +1329,17 @@ MODULE_DEVICE_TABLE(of, mxs_gpu_dt_ids);
5035 static int gpu_runtime_suspend(struct device *dev)
5037 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
5038 release_bus_freq(BUS_FREQ_HIGH);
5043 static int gpu_runtime_resume(struct device *dev)
5045 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
5046 request_bus_freq(BUS_FREQ_HIGH);
5051 @@ -1284,7 +1363,11 @@ static const struct dev_pm_ops gpu_pm_ops = {
5053 static struct platform_driver gpu_driver = {
5055 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
5056 + .remove = gpu_remove,
5058 .remove = __devexit_p(gpu_remove),
5061 .suspend = gpu_suspend,
5062 .resume = gpu_resume,
5063 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
5064 index e7edc39..331c73f 100644
5065 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
5066 +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
5068 #include <linux/dma-mapping.h>
5069 #include <linux/slab.h>
5070 #include <linux/idr.h>
5071 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
5072 #include <mach/hardware.h>
5074 #include <linux/workqueue.h>
5075 #include <linux/idr.h>
5076 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,23)
5077 #include <linux/math64.h>
5079 -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
5080 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5081 +#include <linux/reset.h>
5082 +static inline void imx_gpc_power_up_pu(bool flag) {}
5083 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
5084 #include <mach/common.h>
5086 #include <linux/delay.h>
5087 #include <linux/pm_runtime.h>
5090 +#if gcdANDROID_NATIVE_FENCE_SYNC
5091 +#include <linux/file.h>
5092 +#include "gc_hal_kernel_sync.h"
5096 #define _GC_OBJ_ZONE gcvZONE_OS
5098 /*******************************************************************************
5099 @@ -148,6 +159,7 @@ typedef struct _gcsINTEGER_DB
5107 @@ -180,6 +192,14 @@ struct _gckOS
5108 /* signal id database. */
5109 gcsINTEGER_DB signalDB;
5111 +#if gcdANDROID_NATIVE_FENCE_SYNC
5113 + gctPOINTER syncPointMutex;
5115 + /* sync point id database. */
5116 + gcsINTEGER_DB syncPointDB;
5119 gcsUSER_MAPPING_PTR userMap;
5120 gctPOINTER debugLock;
5122 @@ -215,6 +235,25 @@ typedef struct _gcsSIGNAL
5126 +#if gcdANDROID_NATIVE_FENCE_SYNC
5127 +typedef struct _gcsSYNC_POINT * gcsSYNC_POINT_PTR;
5128 +typedef struct _gcsSYNC_POINT
5130 + /* The reference counter. */
5137 + struct sync_timeline * timeline;
5145 typedef struct _gcsPageInfo * gcsPageInfo_PTR;
5146 typedef struct _gcsPageInfo
5148 @@ -767,7 +806,32 @@ _AllocateIntegerId(
5154 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
5155 + idr_preload(GFP_KERNEL | gcdNOWARN);
5157 + spin_lock(&Database->lock);
5159 + next = (Database->curr + 1 <= 0) ? 1 : Database->curr + 1;
5160 + result = idr_alloc(&Database->idr, KernelPointer, next, 0, GFP_ATOMIC);
5164 + Database->curr = *Id;
5167 + spin_unlock(&Database->lock);
5169 + idr_preload_end();
5173 + return gcvSTATUS_OUT_OF_RESOURCES;
5179 if (idr_pre_get(&Database->idr, GFP_KERNEL | gcdNOWARN) == 0)
5181 @@ -776,8 +840,15 @@ again:
5183 spin_lock(&Database->lock);
5185 - /* Try to get a id greater than 0. */
5186 - result = idr_get_new_above(&Database->idr, KernelPointer, 1, Id);
5187 + next = (Database->curr + 1 <= 0) ? 1 : Database->curr + 1;
5189 + /* Try to get a id greater than current id. */
5190 + result = idr_get_new_above(&Database->idr, KernelPointer, next, Id);
5194 + Database->curr = *Id;
5197 spin_unlock(&Database->lock);
5199 @@ -790,6 +861,7 @@ again:
5201 return gcvSTATUS_OUT_OF_RESOURCES;
5205 return gcvSTATUS_OK;
5207 @@ -1008,6 +1080,21 @@ gckOS_Construct(
5208 /* Initialize signal id database. */
5209 idr_init(&os->signalDB.idr);
5211 +#if gcdANDROID_NATIVE_FENCE_SYNC
5213 + * Initialize the sync point manager.
5216 + /* Initialize mutex. */
5217 + gcmkONERROR(gckOS_CreateMutex(os, &os->syncPointMutex));
5219 + /* Initialize sync point id database lock. */
5220 + spin_lock_init(&os->syncPointDB.lock);
5222 + /* Initialize sync point id database. */
5223 + idr_init(&os->syncPointDB.idr);
5226 #if gcdUSE_NON_PAGED_MEMORY_CACHE
5228 os->cacheHead = gcvNULL;
5229 @@ -1031,6 +1118,15 @@ gckOS_Construct(
5230 return gcvSTATUS_OK;
5234 +#if gcdANDROID_NATIVE_FENCE_SYNC
5235 + if (os->syncPointMutex != gcvNULL)
5238 + gckOS_DeleteMutex(os, os->syncPointMutex));
5242 if (os->signalMutex != gcvNULL)
5245 @@ -1104,6 +1200,15 @@ gckOS_Destroy(
5246 _FreeAllNonPagedMemoryCache(Os);
5249 +#if gcdANDROID_NATIVE_FENCE_SYNC
5251 + * Destroy the sync point manager.
5254 + /* Destroy the mutex. */
5255 + gcmkVERIFY_OK(gckOS_DeleteMutex(Os, Os->syncPointMutex));
5259 * Destroy the signal manager.
5261 @@ -1961,12 +2066,6 @@ gckOS_AllocateNonPagedMemory(
5262 gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5265 - if ((Os->device->baseAddress & 0x80000000) != (mdl->dmaHandle & 0x80000000))
5267 - mdl->dmaHandle = (mdl->dmaHandle & ~0x80000000)
5268 - | (Os->device->baseAddress & 0x80000000);
5273 /* Return allocated memory. */
5274 @@ -2307,6 +2406,7 @@ gckOS_ReadRegisterEx(
5276 /* Verify the arguments. */
5277 gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5278 + gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
5279 gcmkVERIFY_ARGUMENT(Data != gcvNULL);
5281 *Data = readl((gctUINT8 *)Os->device->registerBases[Core] + Address);
5282 @@ -2357,6 +2457,8 @@ gckOS_WriteRegisterEx(
5284 gcmkHEADER_ARG("Os=0x%X Core=%d Address=0x%X Data=0x%08x", Os, Core, Address, Data);
5286 + gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
5288 writel(Data, (gctUINT8 *)Os->device->registerBases[Core] + Address);
5291 @@ -2799,16 +2901,25 @@ gckOS_MapPhysical(
5295 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5296 + struct contiguous_mem_pool *pool = Os->device->pool;
5298 + if (Physical >= pool->phys && Physical < pool->phys + pool->size)
5299 + logical = (gctPOINTER)(Physical - pool->phys + pool->virt);
5301 + logical = gcvNULL;
5303 /* Map memory as cached memory. */
5304 request_mem_region(physical, Bytes, "MapRegion");
5305 logical = (gctPOINTER) ioremap_nocache(physical, Bytes);
5308 if (logical == gcvNULL)
5311 gcvLEVEL_INFO, gcvZONE_OS,
5312 - "%s(%d): Failed to ioremap",
5313 - __FUNCTION__, __LINE__
5314 + "%s(%d): Failed to map physical address 0x%08x",
5315 + __FUNCTION__, __LINE__, Physical
5319 @@ -3621,7 +3732,7 @@ gckOS_Delay(
5322 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28)
5323 - ktime_t delay = ktime_set(0, Delay * NSEC_PER_MSEC);
5324 + ktime_t delay = ktime_set(Delay/1000, (Delay%1000) * NSEC_PER_MSEC);
5325 __set_current_state(TASK_UNINTERRUPTIBLE);
5326 schedule_hrtimeout(&delay, HRTIMER_MODE_REL);
5328 @@ -3881,8 +3992,13 @@ gckOS_AllocatePagedMemoryEx(
5332 - /* Get contiguous pages, and suppress warning (stack dump) from kernel when
5333 - we run out of memory. */
5334 + gctUINT32 order = get_order(bytes);
5336 + if (order >= MAX_ORDER)
5338 + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5341 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
5343 alloc_pages_exact(numPages * PAGE_SIZE, GFP_KERNEL | gcdNOWARN | __GFP_NORETRY);
5344 @@ -3894,12 +4010,12 @@ gckOS_AllocatePagedMemoryEx(
5345 mdl->exact = gcvTRUE;
5347 mdl->u.contiguousPages =
5348 - alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, GetOrder(numPages));
5349 + alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, order);
5351 if (mdl->u.contiguousPages == gcvNULL)
5353 mdl->u.contiguousPages =
5354 - alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, GetOrder(numPages));
5355 + alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, order);
5357 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
5358 mdl->exact = gcvFALSE;
5359 @@ -4239,13 +4355,13 @@ gckOS_LockPages(
5362 mdlMap->vma->vm_flags |= gcdVM_FLAGS;
5363 -#if !gcdPAGED_MEMORY_CACHEABLE
5365 if (Cacheable == gcvFALSE)
5367 /* Make this mapping non-cached. */
5368 mdlMap->vma->vm_page_prot = gcmkPAGED_MEMROY_PROT(mdlMap->vma->vm_page_prot);
5374 /* Now map all the vmalloc pages to this user address. */
5375 @@ -5336,6 +5452,7 @@ OnError:
5377 /* Get the user pages. */
5378 down_read(¤t->mm->mmap_sem);
5380 result = get_user_pages(current,
5383 @@ -5345,105 +5462,127 @@ OnError:
5388 up_read(¤t->mm->mmap_sem);
5390 if (result <=0 || result < pageCount)
5392 struct vm_area_struct *vma;
5394 - /* Free the page table. */
5395 - if (pages != gcvNULL)
5396 + /* Release the pages if any. */
5399 - /* Release the pages if any. */
5401 + for (i = 0; i < result; i++)
5403 - for (i = 0; i < result; i++)
5404 + if (pages[i] == gcvNULL)
5406 - if (pages[i] == gcvNULL)
5411 - page_cache_release(pages[i]);
5415 + page_cache_release(pages[i]);
5416 + pages[i] = gcvNULL;
5424 vma = find_vma(current->mm, memory);
5426 - if (vma && (vma->vm_flags & VM_PFNMAP) )
5427 + if (vma && (vma->vm_flags & VM_PFNMAP))
5431 - unsigned long pfn;
5432 + gctUINTPTR_T logical = memory;
5434 - pgd_t * pgd = pgd_offset(current->mm, memory);
5435 - pud_t * pud = pud_offset(pgd, memory);
5437 + for (i = 0; i < pageCount; i++)
5439 - pmd_t * pmd = pmd_offset(pud, memory);
5440 - pte = pte_offset_map_lock(current->mm, pmd, memory, &ptl);
5442 + pgd_t * pgd = pgd_offset(current->mm, logical);
5443 + pud_t * pud = pud_offset(pgd, logical);
5447 + pmd_t * pmd = pmd_offset(pud, logical);
5448 + pte = pte_offset_map_lock(current->mm, pmd, logical, &ptl);
5451 + gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5456 gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5459 + pages[i] = pte_page(*pte);
5460 + pte_unmap_unlock(pte, ptl);
5462 + /* Advance to next. */
5463 + logical += PAGE_SIZE;
5469 + gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5472 + /* Check if this memory is contiguous for old mmu. */
5473 + if (Os->device->kernels[Core]->hardware->mmuVersion == 0)
5475 + for (i = 1; i < pageCount; i++)
5477 - gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5478 + if (pages[i] != nth_page(pages[0], i))
5480 + /* Non-contiguous. */
5485 - pfn = pte_pfn(*pte);
5487 - physical = (pfn << PAGE_SHIFT) | (memory & ~PAGE_MASK);
5488 + if (i == pageCount)
5490 + /* Contiguous memory. */
5491 + physical = page_to_phys(pages[0]) | (memory & ~PAGE_MASK);
5493 - pte_unmap_unlock(pte, ptl);
5494 + if (!((physical - Os->device->baseAddress) & 0x80000000))
5499 - if ((Os->device->kernels[Core]->hardware->mmuVersion == 0)
5500 - && !((physical - Os->device->baseAddress) & 0x80000000))
5502 - info->pages = gcvNULL;
5503 - info->pageTable = gcvNULL;
5504 + info->pages = gcvNULL;
5505 + info->pageTable = gcvNULL;
5507 - MEMORY_MAP_UNLOCK(Os);
5508 + MEMORY_MAP_UNLOCK(Os);
5510 - *Address = physical - Os->device->baseAddress;
5512 + *Address = physical - Os->device->baseAddress;
5515 - gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x",
5517 + gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x",
5520 - return gcvSTATUS_OK;
5521 + return gcvSTATUS_OK;
5527 + /* Reference pages. */
5528 + for (i = 0; i < pageCount; i++)
5530 - gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5531 + get_page(pages[i]);
5538 - for (i = 0; i < pageCount; i++)
5540 - /* Flush(clean) the data cache. */
5541 - gcmkONERROR(gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
5542 - (gctPOINTER)(gctUINTPTR_T)page_to_phys(pages[i]),
5543 - (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE,
5548 + for (i = 0; i < pageCount; i++)
5552 + get_user(data, (gctUINT32*)((memory & PAGE_MASK) + i * PAGE_SIZE));
5555 /* Flush(clean) the data cache. */
5556 gcmkONERROR(gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
5557 - (gctPOINTER)(gctUINTPTR_T)(physical & PAGE_MASK),
5558 - (gctPOINTER)(memory & PAGE_MASK),
5559 - PAGE_SIZE * pageCount));
5560 + (gctPOINTER)(gctUINTPTR_T)page_to_phys(pages[i]),
5561 + (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE,
5566 @@ -5464,20 +5603,14 @@ OnError:
5567 (gctPOINTER *) &pageTable,
5571 /* Fill the page table. */
5572 for (i = 0; i < pageCount; i++)
5575 gctUINT32_PTR tab = pageTable + i * (PAGE_SIZE/4096);
5579 - phys = page_to_phys(pages[i]);
5583 - phys = (physical & PAGE_MASK) + i * PAGE_SIZE;
5585 + phys = page_to_phys(pages[i]);
5588 if (Core == gcvCORE_VG)
5589 @@ -6126,7 +6259,7 @@ gckOS_CacheClean(
5591 dma_sync_single_for_device(
5594 + (dma_addr_t)Physical,
5598 @@ -6205,7 +6338,7 @@ gckOS_CacheInvalidate(
5600 dma_sync_single_for_device(
5603 + (dma_addr_t)Physical,
5607 @@ -6279,7 +6412,7 @@ gckOS_CacheFlush(
5609 dma_sync_single_for_device(
5612 + (dma_addr_t)Physical,
5616 @@ -6827,6 +6960,9 @@ gckOS_SetGPUPower(
5617 struct clk *clk_2dcore = Os->device->clk_2d_core;
5618 struct clk *clk_2d_axi = Os->device->clk_2d_axi;
5619 struct clk *clk_vg_axi = Os->device->clk_vg_axi;
5620 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5624 gctBOOL oldClockState = gcvFALSE;
5625 gctBOOL oldPowerState = gcvFALSE;
5626 @@ -6852,9 +6988,13 @@ gckOS_SetGPUPower(
5628 if((Power == gcvTRUE) && (oldPowerState == gcvFALSE))
5630 -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
5631 - if(!IS_ERR(Os->device->gpu_regulator))
5632 - regulator_enable(Os->device->gpu_regulator);
5633 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5634 + if(!IS_ERR(Os->device->gpu_regulator)) {
5635 + ret = regulator_enable(Os->device->gpu_regulator);
5637 + gckOS_Print("%s(%d): fail to enable pu regulator %d!\n",
5638 + __FUNCTION__, __LINE__, ret);
5641 imx_gpc_power_up_pu(true);
5643 @@ -6969,7 +7109,7 @@ gckOS_SetGPUPower(
5644 pm_runtime_put_sync(Os->device->pmdev);
5647 -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
5648 +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5649 if(!IS_ERR(Os->device->gpu_regulator))
5650 regulator_disable(Os->device->gpu_regulator);
5652 @@ -7033,6 +7173,10 @@ gckOS_ResetGPU(
5656 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5657 + struct reset_control *rstc = Os->device->rstc[Core];
5659 + reset_control_reset(rstc);
5661 imx_src_reset_gpu((int)Core);
5663 @@ -8529,3 +8673,338 @@ gckOS_GetProcessNameByPid(
5664 return gcvSTATUS_OK;
5667 +#if gcdANDROID_NATIVE_FENCE_SYNC
5670 +gckOS_CreateSyncPoint(
5672 + OUT gctSYNC_POINT * SyncPoint
5676 + gcsSYNC_POINT_PTR syncPoint;
5678 + gcmkHEADER_ARG("Os=0x%X", Os);
5680 + /* Verify the arguments. */
5681 + gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5683 + /* Create an sync point structure. */
5684 + syncPoint = (gcsSYNC_POINT_PTR) kmalloc(
5685 + sizeof(gcsSYNC_POINT), GFP_KERNEL | gcdNOWARN);
5687 + if (syncPoint == gcvNULL)
5689 + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5692 + /* Initialize the sync point. */
5693 + atomic_set(&syncPoint->ref, 1);
5694 + atomic_set(&syncPoint->state, 0);
5696 + gcmkONERROR(_AllocateIntegerId(&Os->syncPointDB, syncPoint, &syncPoint->id));
5698 + *SyncPoint = (gctSYNC_POINT)(gctUINTPTR_T)syncPoint->id;
5700 + gcmkFOOTER_ARG("*SyncPonint=%d", syncPoint->id);
5701 + return gcvSTATUS_OK;
5704 + if (syncPoint != gcvNULL)
5714 +gckOS_ReferenceSyncPoint(
5716 + IN gctSYNC_POINT SyncPoint
5720 + gcsSYNC_POINT_PTR syncPoint;
5722 + gcmkHEADER_ARG("Os=0x%X", Os);
5724 + /* Verify the arguments. */
5725 + gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5726 + gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5729 + _QueryIntegerId(&Os->syncPointDB,
5730 + (gctUINT32)(gctUINTPTR_T)SyncPoint,
5731 + (gctPOINTER)&syncPoint));
5733 + /* Initialize the sync point. */
5734 + atomic_inc(&syncPoint->ref);
5737 + return gcvSTATUS_OK;
5745 +gckOS_DestroySyncPoint(
5747 + IN gctSYNC_POINT SyncPoint
5751 + gcsSYNC_POINT_PTR syncPoint;
5752 + gctBOOL acquired = gcvFALSE;
5754 + gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
5756 + /* Verify the arguments. */
5757 + gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5758 + gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5760 + gcmkONERROR(gckOS_AcquireMutex(Os, Os->syncPointMutex, gcvINFINITE));
5761 + acquired = gcvTRUE;
5764 + _QueryIntegerId(&Os->syncPointDB,
5765 + (gctUINT32)(gctUINTPTR_T)SyncPoint,
5766 + (gctPOINTER)&syncPoint));
5768 + gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
5770 + if (atomic_dec_and_test(&syncPoint->ref))
5772 + gcmkVERIFY_OK(_DestroyIntegerId(&Os->syncPointDB, syncPoint->id));
5774 + /* Free the sgianl. */
5775 + syncPoint->timeline = gcvNULL;
5779 + gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5780 + acquired = gcvFALSE;
5784 + return gcvSTATUS_OK;
5789 + /* Release the mutex. */
5790 + gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5798 +gckOS_SignalSyncPoint(
5800 + IN gctSYNC_POINT SyncPoint
5804 + gcsSYNC_POINT_PTR syncPoint;
5805 + gctBOOL acquired = gcvFALSE;
5807 + gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
5809 + /* Verify the arguments. */
5810 + gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5811 + gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5813 + gcmkONERROR(gckOS_AcquireMutex(Os, Os->syncPointMutex, gcvINFINITE));
5814 + acquired = gcvTRUE;
5817 + _QueryIntegerId(&Os->syncPointDB,
5818 + (gctUINT32)(gctUINTPTR_T)SyncPoint,
5819 + (gctPOINTER)&syncPoint));
5821 + gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
5824 + atomic_set(&syncPoint->state, gcvTRUE);
5826 + /* Signal timeline. */
5827 + if (syncPoint->timeline)
5829 + sync_timeline_signal(syncPoint->timeline);
5832 + gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5833 + acquired = gcvFALSE;
5837 + return gcvSTATUS_OK;
5842 + /* Release the mutex. */
5843 + gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5851 +gckOS_QuerySyncPoint(
5853 + IN gctSYNC_POINT SyncPoint,
5854 + OUT gctBOOL_PTR State
5858 + gcsSYNC_POINT_PTR syncPoint;
5860 + gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
5862 + /* Verify the arguments. */
5863 + gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5864 + gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5867 + _QueryIntegerId(&Os->syncPointDB,
5868 + (gctUINT32)(gctUINTPTR_T)SyncPoint,
5869 + (gctPOINTER)&syncPoint));
5871 + gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
5874 + *State = atomic_read(&syncPoint->state);
5877 + gcmkFOOTER_ARG("*State=%d", *State);
5878 + return gcvSTATUS_OK;
5886 +gckOS_CreateSyncTimeline(
5888 + OUT gctHANDLE * Timeline
5891 + struct viv_sync_timeline * timeline;
5893 + /* Create viv sync timeline. */
5894 + timeline = viv_sync_timeline_create("viv timeline", Os);
5896 + if (timeline == gcvNULL)
5898 + /* Out of memory. */
5899 + return gcvSTATUS_OUT_OF_MEMORY;
5902 + *Timeline = (gctHANDLE) timeline;
5903 + return gcvSTATUS_OK;
5907 +gckOS_DestroySyncTimeline(
5909 + IN gctHANDLE Timeline
5912 + struct viv_sync_timeline * timeline;
5913 + gcmkASSERT(Timeline != gcvNULL);
5915 + /* Destroy timeline. */
5916 + timeline = (struct viv_sync_timeline *) Timeline;
5917 + sync_timeline_destroy(&timeline->obj);
5919 + return gcvSTATUS_OK;
5923 +gckOS_CreateNativeFence(
5925 + IN gctHANDLE Timeline,
5926 + IN gctSYNC_POINT SyncPoint,
5927 + OUT gctINT * FenceFD
5931 + struct viv_sync_timeline *timeline;
5932 + struct sync_pt * pt = gcvNULL;
5933 + struct sync_fence * fence;
5935 + gcsSYNC_POINT_PTR syncPoint;
5938 + gcmkHEADER_ARG("Os=0x%X Timeline=0x%X SyncPoint=%d",
5939 + Os, Timeline, (gctUINT)(gctUINTPTR_T)SyncPoint);
5942 + _QueryIntegerId(&Os->syncPointDB,
5943 + (gctUINT32)(gctUINTPTR_T)SyncPoint,
5944 + (gctPOINTER)&syncPoint));
5946 + /* Cast timeline. */
5947 + timeline = (struct viv_sync_timeline *) Timeline;
5949 + fd = get_unused_fd();
5953 + /* Out of resources. */
5954 + gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5957 + /* Create viv_sync_pt. */
5958 + pt = viv_sync_pt_create(timeline, SyncPoint);
5960 + if (pt == gcvNULL)
5962 + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5965 + /* Reference sync_timeline. */
5966 + syncPoint->timeline = &timeline->obj;
5968 + /* Build fence name. */
5969 + snprintf(name, 32, "viv sync_fence-%u", (gctUINT)(gctUINTPTR_T)SyncPoint);
5971 + /* Create sync_fence. */
5972 + fence = sync_fence_create(name, pt);
5974 + if (fence == NULL)
5976 + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5979 + /* Install fence to fd. */
5980 + sync_fence_install(fence, fd);
5983 + gcmkFOOTER_ARG("*FenceFD=%d", fd);
5984 + return gcvSTATUS_OK;
5987 + /* Error roll back. */
5995 + put_unused_fd(fd);
6002 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
6003 new file mode 100644
6004 index 0000000..7efae1c
6006 +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
6008 +/****************************************************************************
6010 +* Copyright (C) 2005 - 2013 by Vivante Corp.
6012 +* This program is free software; you can redistribute it and/or modify
6013 +* it under the terms of the GNU General Public License as published by
6014 +* the Free Software Foundation; either version 2 of the license, or
6015 +* (at your option) any later version.
6017 +* This program is distributed in the hope that it will be useful,
6018 +* but WITHOUT ANY WARRANTY; without even the implied warranty of
6019 +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6020 +* GNU General Public License for more details.
6022 +* You should have received a copy of the GNU General Public License
6023 +* along with this program; if not write to the Free Software
6024 +* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6026 +*****************************************************************************/
6029 +#include <linux/kernel.h>
6030 +#include <linux/file.h>
6031 +#include <linux/fs.h>
6032 +#include <linux/miscdevice.h>
6033 +#include <linux/module.h>
6034 +#include <linux/syscalls.h>
6035 +#include <linux/uaccess.h>
6037 +#include "gc_hal_kernel_sync.h"
6039 +#if gcdANDROID_NATIVE_FENCE_SYNC
6041 +static struct sync_pt *
6043 + struct sync_pt * sync_pt
6047 + struct viv_sync_pt *pt;
6048 + struct viv_sync_pt *src;
6049 + struct viv_sync_timeline *obj;
6051 + src = (struct viv_sync_pt *) sync_pt;
6052 + obj = (struct viv_sync_timeline *) sync_pt->parent;
6054 + /* Create the new sync_pt. */
6055 + pt = (struct viv_sync_pt *)
6056 + sync_pt_create(&obj->obj, sizeof(struct viv_sync_pt));
6058 + pt->stamp = src->stamp;
6059 + pt->sync = src->sync;
6061 + /* Reference sync point. */
6062 + status = gckOS_ReferenceSyncPoint(obj->os, pt->sync);
6064 + if (gcmIS_ERROR(status))
6066 + sync_pt_free((struct sync_pt *)pt);
6070 + return (struct sync_pt *)pt;
6074 +viv_sync_pt_has_signaled(
6075 + struct sync_pt * sync_pt
6080 + struct viv_sync_pt * pt;
6081 + struct viv_sync_timeline * obj;
6083 + pt = (struct viv_sync_pt *)sync_pt;
6084 + obj = (struct viv_sync_timeline *)sync_pt->parent;
6086 + status = gckOS_QuerySyncPoint(obj->os, pt->sync, &state);
6088 + if (gcmIS_ERROR(status))
6098 +viv_sync_pt_compare(
6099 + struct sync_pt * a,
6100 + struct sync_pt * b
6104 + struct viv_sync_pt * pt1 = (struct viv_sync_pt *) a;
6105 + struct viv_sync_pt * pt2 = (struct viv_sync_pt *) b;
6107 + ret = (pt1->stamp < pt2->stamp) ? -1
6108 + : (pt1->stamp == pt2->stamp) ? 0
6116 + struct sync_pt * sync_pt
6119 + struct viv_sync_pt * pt;
6120 + struct viv_sync_timeline * obj;
6122 + pt = (struct viv_sync_pt *) sync_pt;
6123 + obj = (struct viv_sync_timeline *) sync_pt->parent;
6125 + gckOS_DestroySyncPoint(obj->os, pt->sync);
6128 +static struct sync_timeline_ops viv_timeline_ops =
6130 + .driver_name = "viv_sync",
6131 + .dup = viv_sync_pt_dup,
6132 + .has_signaled = viv_sync_pt_has_signaled,
6133 + .compare = viv_sync_pt_compare,
6134 + .free_pt = viv_sync_pt_free,
6137 +struct viv_sync_timeline *
6138 +viv_sync_timeline_create(
6139 + const char * name,
6143 + struct viv_sync_timeline * obj;
6145 + obj = (struct viv_sync_timeline *)
6146 + sync_timeline_create(&viv_timeline_ops, sizeof(struct viv_sync_timeline), name);
6155 +viv_sync_pt_create(
6156 + struct viv_sync_timeline * obj,
6157 + gctSYNC_POINT SyncPoint
6161 + struct viv_sync_pt * pt;
6163 + pt = (struct viv_sync_pt *)
6164 + sync_pt_create(&obj->obj, sizeof(struct viv_sync_pt));
6166 + pt->stamp = obj->stamp++;
6167 + pt->sync = SyncPoint;
6170 + status = gckOS_ReferenceSyncPoint(obj->os, SyncPoint);
6172 + if (gcmIS_ERROR(status))
6174 + sync_pt_free((struct sync_pt *)pt);
6178 + return (struct sync_pt *) pt;
6182 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
6183 new file mode 100644
6184 index 0000000..6fc12e5
6186 +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
6188 +/****************************************************************************
6190 +* Copyright (C) 2005 - 2013 by Vivante Corp.
6192 +* This program is free software; you can redistribute it and/or modify
6193 +* it under the terms of the GNU General Public License as published by
6194 +* the Free Software Foundation; either version 2 of the license, or
6195 +* (at your option) any later version.
6197 +* This program is distributed in the hope that it will be useful,
6198 +* but WITHOUT ANY WARRANTY; without even the implied warranty of
6199 +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6200 +* GNU General Public License for more details.
6202 +* You should have received a copy of the GNU General Public License
6203 +* along with this program; if not write to the Free Software
6204 +* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6206 +*****************************************************************************/
6209 +#ifndef __gc_hal_kernel_sync_h_
6210 +#define __gc_hal_kernel_sync_h_
6212 +#include <linux/types.h>
6214 +#include <linux/sync.h>
6216 +#include <gc_hal.h>
6217 +#include <gc_hal_base.h>
6219 +struct viv_sync_timeline
6221 + /* Parent object. */
6222 + struct sync_timeline obj;
6224 + /* Timestamp when sync_pt is created. */
6227 + /* Pointer to os struct. */
6234 + /* Parent object. */
6235 + struct sync_pt pt;
6237 + /* Reference sync point*/
6238 + gctSYNC_POINT sync;
6240 + /* Timestamp when sync_pt is created. */
6244 +/* Create viv_sync_timeline object. */
6245 +struct viv_sync_timeline *
6246 +viv_sync_timeline_create(
6247 + const char * Name,
6251 +/* Create viv_sync_pt object. */
6253 +viv_sync_pt_create(
6254 + struct viv_sync_timeline * Obj,
6255 + gctSYNC_POINT SyncPoint
6258 +#endif /* __gc_hal_kernel_sync_h_ */