summaryrefslogtreecommitdiffstats
path: root/recipes-kernel/linux/linux-boundary-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-kernel/linux/linux-boundary-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch')
-rw-r--r--recipes-kernel/linux/linux-boundary-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch6261
1 files changed, 6261 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-boundary-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch b/recipes-kernel/linux/linux-boundary-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
new file mode 100644
index 0000000..1e039fd
--- /dev/null
+++ b/recipes-kernel/linux/linux-boundary-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
@@ -0,0 +1,6261 @@
1From 2e575255b8c53d3cfe2af068411696fe3c40debb Mon Sep 17 00:00:00 2001
2From: Loren Huang <b02279@freescale.com>
3Date: Mon, 2 Sep 2013 12:16:48 +0800
4Subject: [PATCH 01/16] ENGR00278350 gpu:viante 4.6.9p13 kernel part
5 integration
6
7Integrated 4.6.9p13 kernel part change.
8This integration is mainly for android test.
9Linux test will be focused on 3.10 kernel.
10
11Signed-off-by: Loren HUANG <b02279@freescale.com>
12Acked-by: Shawn Guo
13---
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
50
51diff --git a/drivers/mxc/gpu-viv/Kbuild b/drivers/mxc/gpu-viv/Kbuild
52index 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
58
59-ifeq ($(USE_3D_VG), 1)
60-
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
67 endif
68-else
69-
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
77-
78-OBJS += $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware.o \
79- $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware_command.o
80
81+ifneq ($(CONFIG_SYNC),)
82+OBJS += $(OS_KERNEL_DIR)/gc_hal_kernel_sync.o
83 endif
84
85 ifeq ($(KERNELRELEASE), )
86@@ -129,23 +117,16 @@ ifeq ($(CONFIG_DOVE_GPU), 1)
87 EXTRA_CFLAGS += -DCONFIG_DOVE_GPU=1
88 endif
89
90-ifeq ($(USE_POWER_MANAGEMENT), 1)
91-EXTRA_CFLAGS += -DgcdPOWER_MANAGEMENT=1
92-else
93-EXTRA_CFLAGS += -DgcdPOWER_MANAGEMENT=0
94-endif
95-
96 ifneq ($(USE_PLATFORM_DRIVER), 0)
97 EXTRA_CFLAGS += -DUSE_PLATFORM_DRIVER=1
98 else
99 EXTRA_CFLAGS += -DUSE_PLATFORM_DRIVER=0
100 endif
101
102-ifeq ($(USE_PROFILER), 1)
103+
104 EXTRA_CFLAGS += -DVIVANTE_PROFILER=1
105-else
106-EXTRA_CFLAGS += -DVIVANTE_PROFILER=0
107-endif
108+EXTRA_CFLAGS += -DVIVANTE_PROFILER_CONTEXT=1
109+
110
111 ifeq ($(ANDROID), 1)
112 EXTRA_CFLAGS += -DANDROID=1
113@@ -235,6 +216,10 @@ ifeq ($(USE_BANK_ALIGNMENT), 1)
114 endif
115 endif
116
117+ifneq ($(CONFIG_SYNC),)
118+EXTRA_CFLAGS += -DgcdANDROID_NATIVE_FENCE_SYNC=1
119+endif
120+
121 EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel/inc
122 EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel
123 EXTRA_CFLAGS += -I$(AQARCH)/hal/kernel
124diff --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
125index 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(
129 return status;
130 }
131
132-static gctTHREADFUNCRESULT gctTHREADFUNCTYPE
133-_TimeIdleThread(
134- gctTHREADFUNCPARAMETER ThreadParameter
135+#if gcdPOWEROFF_TIMEOUT
136+void
137+_VGPowerTimerFunction(
138+ gctPOINTER Data
139 )
140 {
141- gctUINT32 currentTime = 0;
142- gctBOOL isAfter = gcvFALSE;
143- gceCHIPPOWERSTATE state;
144-
145- /* Cast the object. */
146- gckVGHARDWARE hardware = (gckVGHARDWARE) ThreadParameter;
147-
148- while(gcvTRUE)
149- {
150- gcmkVERIFY_OK(gckOS_WaitSignal(hardware->os,
151- hardware->idleSignal, gcvINFINITE));
152-
153- if (hardware->killThread)
154- {
155- break;
156- }
157-
158- do
159- {
160- gcmkVERIFY_OK(gckOS_GetTicks(&currentTime));
161-
162- gcmkVERIFY_OK(
163- gckOS_TicksAfter(currentTime, hardware->powerOffTime, &isAfter));
164-
165- if (isAfter)
166- {
167- gcmkVERIFY_OK(gckVGHARDWARE_SetPowerManagementState(
168- hardware, gcvPOWER_OFF_BROADCAST));
169- }
170-
171- gcmkVERIFY_OK(gckOS_Delay(hardware->os, 200));
172-
173- gcmkVERIFY_OK(gckVGHARDWARE_QueryPowerManagementState(
174- hardware, &state));
175-
176- } while (state == gcvPOWER_IDLE);
177- }
178- return 0;
179+ gckVGHARDWARE hardware = (gckVGHARDWARE)Data;
180+ gcmkVERIFY_OK(
181+ gckVGHARDWARE_SetPowerManagementState(hardware, gcvPOWER_OFF_TIMEOUT));
182 }
183+#endif
184
185 /******************************************************************************\
186 ****************************** gckVGHARDWARE API code *****************************
187@@ -338,15 +305,21 @@ gckVGHARDWARE_Construct(
188 hardware->chipMinorFeatures2 = chipMinorFeatures2;
189
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;
197+
198 hardware->powerOffTime = 0;
199- hardware->timeIdleThread = gcvNULL;
200- hardware->killThread = gcvFALSE;
201+#if gcdPOWEROFF_TIMEOUT
202+ hardware->powerOffTimeout = gcdPOWEROFF_TIMEOUT;
203+
204+ gcmkVERIFY_OK(gckOS_CreateTimer(Os,
205+ _VGPowerTimerFunction,
206+ (gctPOINTER)hardware,
207+ &hardware->powerOffTimer));
208+#endif
209+
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)))))));
212
213@@ -365,18 +338,10 @@ gckVGHARDWARE_Construct(
214 gcmkVERIFY_OK(gckVGHARDWARE_SetFastClear(hardware, -1));
215
216 gcmkERR_BREAK(gckOS_CreateMutex(Os, &hardware->powerMutex));
217- gcmkERR_BREAK(gckOS_CreateSignal(Os, gcvFALSE, &hardware->idleSignal));
218
219 /* Enable power management by default. */
220 hardware->powerManagement = gcvTRUE;
221
222- gcmkERR_BREAK(gckOS_StartThread(
223- hardware->os,
224- _TimeIdleThread,
225- hardware,
226- &hardware->timeIdleThread
227- ));
228-
229 /* Return pointer to the gckVGHARDWARE object. */
230 *Hardware = hardware;
231
232@@ -386,6 +351,14 @@ gckVGHARDWARE_Construct(
233 }
234 while (gcvFALSE);
235
236+#if gcdPOWEROFF_TIMEOUT
237+ if (hardware->powerOffTimer != gcvNULL)
238+ {
239+ gcmkVERIFY_OK(gckOS_StopTimer(Os, hardware->powerOffTimer));
240+ gcmkVERIFY_OK(gckOS_DestroyTimer(Os, hardware->powerOffTimer));
241+ }
242+#endif
243+
244 if (hardware->pageTableDirty != gcvNULL)
245 {
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);
250
251- Hardware->killThread = gcvTRUE;
252- gcmkVERIFY_OK(gckOS_Signal(Hardware->os, Hardware->idleSignal, gcvTRUE));
253- gcmkVERIFY_OK(gckOS_StopThread(Hardware->os, Hardware->timeIdleThread));
254-
255 /* Mark the object as unknown. */
256 Hardware->object.type = gcvOBJ_UNKNOWN;
257
258@@ -441,11 +410,10 @@ gckVGHARDWARE_Destroy(
259 Hardware->os, Hardware->powerMutex));
260 }
261
262- if (Hardware->idleSignal != gcvNULL)
263- {
264- gcmkVERIFY_OK(gckOS_DestroySignal(
265- Hardware->os, Hardware->idleSignal));
266- }
267+#if gcdPOWEROFF_TIMEOUT
268+ gcmkVERIFY_OK(gckOS_StopTimer(Hardware->os, Hardware->powerOffTimer));
269+ gcmkVERIFY_OK(gckOS_DestroyTimer(Hardware->os, Hardware->powerOffTimer));
270+#endif
271
272 if (Hardware->pageTableDirty != gcvNULL)
273 {
274@@ -1510,11 +1478,15 @@ gckVGHARDWARE_SetPowerManagementState(
275 gctBOOL commitMutex = gcvFALSE;
276 gctBOOL mutexAcquired = gcvFALSE;
277
278+#if gcdPOWEROFF_TIMEOUT
279+ gctBOOL timeout = gcvFALSE;
280+ gctBOOL isAfter = gcvFALSE;
281+ gctUINT32 currentTime;
282+#endif
283+
284 gctBOOL broadcast = gcvFALSE;
285 gctUINT32 process, thread;
286 gctBOOL global = gcvFALSE;
287- gctUINT32 currentTime;
288-
289
290 #if gcdENABLE_PROFILING
291 gctUINT64 time, freq, mutexTime, onTime, stallTime, stopTime, delayTime,
292@@ -1661,6 +1633,16 @@ gckVGHARDWARE_SetPowerManagementState(
293 global = gcvTRUE;
294 break;
295
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 */
302+ timeout = gcvTRUE;
303+ break;
304+#endif
305+
306 default:
307 break;
308 }
309@@ -1719,6 +1701,31 @@ gckVGHARDWARE_SetPowerManagementState(
310 flag = flags[Hardware->chipPowerState][State];
311 /*clock = clocks[State];*/
312
313+#if gcdPOWEROFF_TIMEOUT
314+ if (timeout)
315+ {
316+ gcmkONERROR(gckOS_GetTicks(&currentTime));
317+
318+ gcmkONERROR(
319+ gckOS_TicksAfter(Hardware->powerOffTime, currentTime, &isAfter));
320+
321+ /* powerOffTime is pushed forward, give up.*/
322+ if (isAfter
323+ /* Expect a transition start from IDLE. */
324+ || (Hardware->chipPowerState == gcvPOWER_ON)
325+ || (Hardware->chipPowerState == gcvPOWER_OFF)
326+ )
327+ {
328+ /* Release the power mutex. */
329+ gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
330+
331+ /* No need to do anything. */
332+ gcmkFOOTER_NO();
333+ return gcvSTATUS_OK;
334+ }
335+ }
336+#endif
337+
338 if (flag == 0)
339 {
340 /* Release the power mutex. */
341@@ -1742,6 +1749,18 @@ gckVGHARDWARE_SetPowerManagementState(
342 return gcvSTATUS_OK;
343 }
344 }
345+ else
346+ {
347+ if (flag & gcvPOWER_FLAG_ACQUIRE)
348+ {
349+ /* Acquire the power management semaphore. */
350+ gcmkONERROR(gckOS_AcquireSemaphore(os, command->powerSemaphore));
351+ acquired = gcvTRUE;
352+
353+ /* avoid acquiring again. */
354+ flag &= ~gcvPOWER_FLAG_ACQUIRE;
355+ }
356+ }
357
358 if (flag & (gcvPOWER_FLAG_INITIALIZE | gcvPOWER_FLAG_CLOCK_ON))
359 {
360@@ -1858,14 +1877,6 @@ gckVGHARDWARE_SetPowerManagementState(
361 Hardware->chipPowerStateGlobal = State;
362 }
363
364- if (State == gcvPOWER_IDLE)
365- {
366- gcmkVERIFY_OK(gckOS_Signal(os, Hardware->idleSignal, gcvTRUE));
367- }
368- /* Reset power off time */
369- gcmkVERIFY_OK(gckOS_GetTicks(&currentTime));
370- Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
371-
372 if (commitMutex)
373 {
374 /* Acquire the mutex. */
375@@ -1875,6 +1886,28 @@ gckVGHARDWARE_SetPowerManagementState(
376 ));
377 }
378
379+#if gcdPOWEROFF_TIMEOUT
380+ /* Reset power off time */
381+ gcmkONERROR(gckOS_GetTicks(&currentTime));
382+
383+ Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
384+
385+ if (State == gcvPOWER_IDLE)
386+ {
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));
391+ }
392+ else
393+ {
394+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE, "Cancel powerOfftimer");
395+
396+ /* Cancel running timer when GPU enters ON or OFF. */
397+ gcmkVERIFY_OK(gckOS_StopTimer(os, Hardware->powerOffTimer));
398+ }
399+#endif
400+
401 /* Release the power mutex. */
402 gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
403
404diff --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
405index 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
409 gctBOOL clockState;
410 gctBOOL powerState;
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;
421+
422+#if gcdPOWEROFF_TIMEOUT
423 gctUINT32 powerOffTime;
424 gctUINT32 powerOffTimeout;
425- gctTHREAD timeIdleThread;
426- gctBOOL killThread;
427- gctPOINTER pageTableDirty;
428+ gctPOINTER powerOffTimer;
429+#endif
430
431 gctBOOL powerManagement;
432 };
433diff --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
434index 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)));
444
445 /* Semaphore from FE to PE. */
446 *buffer++
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)
453+ {
454+ index += _State(Context, index, (0x02C00 >> 2) + i * 16, 0x00000000, 14, gcvFALSE, gcvFALSE);
455+ }
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);
459diff --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
460index 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
464 #if gcdSECURE_USER
465 gctBOOL_PTR hint;
466 #endif
467+
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;
479+#endif
480 };
481
482 #ifdef __cplusplus
483diff --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
484index 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
487@@ -21,6 +21,9 @@
488
489 #include "gc_hal.h"
490 #include "gc_hal_kernel.h"
491+#if VIVANTE_PROFILER_CONTEXT
492+#include "gc_hal_kernel_context.h"
493+#endif
494
495 #define _GC_OBJ_ZONE gcvZONE_HARDWARE
496
497@@ -69,6 +72,7 @@ _IdentifyHardware(
498 gctUINT32 numConstants = 0;
499 gctUINT32 bufferSize = 0;
500 gctUINT32 varyingsCount = 0;
501+ gctBOOL useHZ;
502
503 gcmkHEADER_ARG("Os=0x%x", Os);
504
505@@ -209,6 +213,15 @@ _IdentifyHardware(
506 0x00088,
507 &Identity->chipMinorFeatures3));
508
509+ /*The BG2 chip has no compression supertiled, and the bit of GCMinorFeature3BugFixes15 is n/a*/
510+ if(Identity->chipModel == gcv1000 && Identity->chipRevision == 0x5036)
511+ {
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)));
516+ }
517+
518 /* Read chip minor featuress register #4. */
519 gcmkONERROR(
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)))
528 {
529 Identity->superTileMode = 1;
530 }
531
532+ if (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5245)
533+ {
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)))))));
536+ }
537+ else
538+ {
539+ useHZ = gcvFALSE;
540+ }
541
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))))))))
544+ if (useHZ)
545+ {
546+ /* Disable EZ. */
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)));
549+ }
550+
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))))))))
553 {
554 /* Disable HIERARCHICAL_Z. */
555 Identity->chipMinorFeatures
556@@ -470,6 +500,15 @@ _IdentifyHardware(
557 Identity->varyingsCount = 8;
558 }
559
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)))
565+ {
566+ Identity->varyingsCount -= 1;
567+ }
568+
569 /* Success. */
570 gcmkFOOTER();
571 return gcvSTATUS_OK;
572@@ -535,9 +574,9 @@ _DumpDebugRegisters(
573 IN gcsiDEBUG_REGISTERS_PTR Descriptor
574 )
575 {
576- gceSTATUS status;
577+ gceSTATUS status = gcvSTATUS_OK;
578 gctUINT32 select;
579- gctUINT32 data;
580+ gctUINT32 data = 0;
581 gctUINT i;
582
583 gcmkHEADER_ARG("Os=0x%X Descriptor=0x%X", Os, Descriptor);
584@@ -643,6 +682,42 @@ OnError:
585 return status;
586 }
587
588+gceSTATUS
589+_FlushCache(
590+ gckHARDWARE Hardware,
591+ gckCOMMAND Command
592+ )
593+{
594+ gceSTATUS status;
595+ gctSIZE_T bytes, requested;
596+ gctPOINTER buffer;
597+
598+ /* Get the size of the flush command. */
599+ gcmkONERROR(gckHARDWARE_Flush(Hardware,
600+ gcvFLUSH_ALL,
601+ gcvNULL,
602+ &requested));
603+
604+ /* Reserve space in the command queue. */
605+ gcmkONERROR(gckCOMMAND_Reserve(Command,
606+ requested,
607+ &buffer,
608+ &bytes));
609+
610+ /* Append a flush. */
611+ gcmkONERROR(gckHARDWARE_Flush(
612+ Hardware, gcvFLUSH_ALL, buffer, &bytes
613+ ));
614+
615+ /* Execute the command queue. */
616+ gcmkONERROR(gckCOMMAND_Execute(Command, requested));
617+
618+ return gcvSTATUS_OK;
619+
620+OnError:
621+ return status;
622+}
623+
624 /******************************************************************************\
625 ****************************** gckHARDWARE API code *****************************
626 \******************************************************************************/
627@@ -809,6 +884,9 @@ gckHARDWARE_Construct(
628 /* Enable power management by default. */
629 hardware->powerManagement = gcvTRUE;
630
631+ /* Disable profiler by default */
632+ hardware->gpuProfiler = gcvFALSE;
633+
634 /* Return pointer to the gckHARDWARE object. */
635 *Hardware = hardware;
636
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)))));
639 }
640
641+ if ((gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) == gcvFALSE)
642+ || (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) && (Hardware->identity.chipRevision < 0x5422))
643+ )
644+ {
645+ gctUINT32 data;
646+
647+ gcmkONERROR(
648+ gckOS_ReadRegisterEx(Hardware->os,
649+ Hardware->core,
650+ Hardware->powerBaseAddress
651+ + 0x00104,
652+ &data));
653+
654+
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)));
656+
657+
658+ gcmkONERROR(
659+ gckOS_WriteRegisterEx(Hardware->os,
660+ Hardware->core,
661+ Hardware->powerBaseAddress
662+ + 0x00104,
663+ data));
664+ }
665+
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(
670 }
671
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)
676+ )
677 {
678 gctUINT32 data;
679
680@@ -2883,35 +2988,44 @@ gckHARDWARE_QueryShaderCaps(
681 OUT gctUINT * Varyings
682 )
683 {
684+ gctUINT32 vsConstMax;
685+ gctUINT32 psConstMax;
686+
687 gcmkHEADER_ARG("Hardware=0x%x VertexUniforms=0x%x "
688 "FragmentUniforms=0x%x Varyings=0x%x",
689 Hardware, VertexUniforms,
690 FragmentUniforms, Varyings);
691
692+ if ((Hardware->identity.chipModel == gcv2000)
693+ && (Hardware->identity.chipRevision == 0x5118))
694+ {
695+ vsConstMax = 256;
696+ psConstMax = 64;
697+ }
698+ else if (Hardware->identity.numConstants > 256)
699+ {
700+ vsConstMax = 256;
701+ psConstMax = 256;
702+ }
703+ else if (Hardware->identity.numConstants == 256)
704+ {
705+ vsConstMax = 256;
706+ psConstMax = 256;
707+ }
708+ else
709+ {
710+ vsConstMax = 168;
711+ psConstMax = 64;
712+ }
713+
714 if (VertexUniforms != gcvNULL)
715 {
716- /* Return the vs shader const count. */
717- if (Hardware->identity.chipModel < gcv4000)
718- {
719- *VertexUniforms = 168;
720- }
721- else
722- {
723- *VertexUniforms = 256;
724- }
725+ *VertexUniforms = vsConstMax;
726 }
727
728 if (FragmentUniforms != gcvNULL)
729 {
730- /* Return the ps shader const count. */
731- if (Hardware->identity.chipModel < gcv4000)
732- {
733- *FragmentUniforms = 64;
734- }
735- else
736- {
737- *FragmentUniforms = 256;
738- }
739+ *FragmentUniforms = psConstMax;
740 }
741
742 if (Varyings != gcvNULL)
743@@ -3229,12 +3343,28 @@ gckHARDWARE_SetMMUv2(
744 gctBOOL commitEntered = gcvFALSE;
745 gctPOINTER pointer = gcvNULL;
746 gctBOOL acquired = gcvFALSE;
747+ gctBOOL config2D;
748+ gctSIZE_T configSize;
749
750 gcmkHEADER_ARG("Hardware=0x%x Enable=%d", Hardware, Enable);
751
752 /* Verify the arguments. */
753 gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
754
755+ config2D = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_3D)
756+ && gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_2D);
757+
758+ configSize = 4 * 4;
759+
760+ if (config2D)
761+ {
762+ configSize +=
763+ /* Pipe Select. */
764+ 4 * 4
765+ /* Configure MMU States. */
766+ + 4 * 4;
767+ }
768+
769 /* Convert logical address into physical address. */
770 gcmkONERROR(
771 gckOS_GetPhysicalAddress(Hardware->os, MtlbAddress, &config));
772@@ -3281,7 +3411,7 @@ gckHARDWARE_SetMMUv2(
773 commitEntered = gcvTRUE;
774
775 gcmkONERROR(gckCOMMAND_Reserve(
776- command, 16, &pointer, &bufferSize
777+ command, configSize, &pointer, &bufferSize
778 ));
779
780 buffer = pointer;
781@@ -3300,10 +3430,43 @@ gckHARDWARE_SetMMUv2(
782
783 buffer[3] = address;
784
785+ if (config2D)
786+ {
787+ /* LoadState(AQPipeSelect, 1), pipe. */
788+ buffer[4]
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)));
792+
793+ buffer[5] = 0x1;
794+
795+ buffer[6]
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)));
799+
800+ buffer[7] = config;
801+
802+ buffer[8]
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)));
806+
807+ buffer[9] = address;
808+
809+ /* LoadState(AQPipeSelect, 1), pipe. */
810+ buffer[10]
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)));
814+
815+ buffer[11] = 0x0;
816+ }
817+
818 gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
819 "Setup MMU: config=%08x, Safe Address=%08x\n.", config, address);
820
821- gcmkONERROR(gckCOMMAND_Execute(command, 16));
822+ gcmkONERROR(gckCOMMAND_Execute(command, configSize));
823
824 if (FromPower == gcvFALSE)
825 {
826@@ -3501,6 +3664,8 @@ gckHARDWARE_Flush(
827 gctUINT32 flush = 0;
828 gctUINT32_PTR logical = (gctUINT32_PTR) Logical;
829 gceSTATUS status;
830+ gctBOOL fcFlushStall;
831+ gctUINT32 reserveBytes = 8;
832
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;
838
839+ fcFlushStall
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)
842+ ;
843+
844+ if (fcFlushStall)
845+ {
846+ reserveBytes += 8;
847+ }
848+
849 /* Flush 3D color cache. */
850 if ((Flush & gcvFLUSH_COLOR) && (pipe == 0x0))
851 {
852@@ -3527,6 +3702,7 @@ gckHARDWARE_Flush(
853 if ((Flush & gcvFLUSH_TEXTURE) && (pipe == 0x0))
854 {
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)));
857 }
858
859 /* Flush 2D cache. */
860@@ -3550,7 +3726,7 @@ gckHARDWARE_Flush(
861 /* Copy to command queue. */
862 if (Logical != gcvNULL)
863 {
864- if (*Bytes < 8)
865+ if (*Bytes < reserveBytes)
866 {
867 /* Command queue too small. */
868 gcmkONERROR(gcvSTATUS_BUFFER_TOO_SMALL);
869@@ -3565,12 +3741,26 @@ gckHARDWARE_Flush(
870
871 gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
872 "0x%x: FLUSH 0x%x", logical, flush);
873+
874+ if (fcFlushStall)
875+ {
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)));
879+
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)));
881+
882+
883+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
884+ "0x%x: FLUSH 0x%x", logical + 3, logical[3]);
885+ }
886+
887 }
888
889 if (Bytes != gcvNULL)
890 {
891- /* 8 bytes required. */
892- *Bytes = 8;
893+ /* bytes required. */
894+ *Bytes = reserveBytes;
895 }
896 }
897
898@@ -4285,6 +4475,48 @@ gckHARDWARE_SetPowerManagementState(
899 }
900 }
901
902+ /* Flush Cache before Power Off. */
903+ if (flag & gcvPOWER_FLAG_POWER_OFF)
904+ {
905+ if (Hardware->clockState == gcvFALSE)
906+ {
907+ /* Turn off the GPU power. */
908+ gcmkONERROR(
909+ gckOS_SetGPUPower(os,
910+ Hardware->core,
911+ gcvTRUE,
912+ gcvTRUE));
913+
914+ Hardware->clockState = gcvTRUE;
915+
916+ if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_DYNAMIC_FREQUENCY_SCALING) != gcvTRUE)
917+ {
918+ /* Write the clock control register. */
919+ gcmkONERROR(gckOS_WriteRegisterEx(os,
920+ Hardware->core,
921+ 0x00000,
922+ clocks[0]));
923+
924+ /* Done loading the frequency scaler. */
925+ gcmkONERROR(gckOS_WriteRegisterEx(os,
926+ Hardware->core,
927+ 0x00000,
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)))));
929+ }
930+ }
931+
932+ gcmkONERROR(gckCOMMAND_Start(command));
933+
934+ gcmkONERROR(_FlushCache(Hardware, command));
935+
936+ gckOS_Delay(gcvNULL, 1);
937+
938+ /* Stop the command parser. */
939+ gcmkONERROR(gckCOMMAND_Stop(command, gcvFALSE));
940+
941+ flag |= gcvPOWER_FLAG_CLOCK_OFF;
942+ }
943+
944 /* Get time until stopped. */
945 gcmkPROFILE_QUERY(time, stopTime);
946
947@@ -4582,6 +4814,40 @@ gckHARDWARE_SetPowerManagement(
948 return gcvSTATUS_OK;
949 }
950
951+/*******************************************************************************
952+**
953+** gckHARDWARE_SetGpuProfiler
954+**
955+** Configure GPU profiler function.
956+** Only used in driver initialization stage.
957+**
958+** INPUT:
959+**
960+** gckHARDWARE Harwdare
961+** Pointer to an gckHARDWARE object.
962+**
963+** gctBOOL GpuProfiler
964+** GOU Profiler State.
965+**
966+*/
967+gceSTATUS
968+gckHARDWARE_SetGpuProfiler(
969+ IN gckHARDWARE Hardware,
970+ IN gctBOOL GpuProfiler
971+ )
972+{
973+ gcmkHEADER_ARG("Hardware=0x%x", Hardware);
974+
975+ /* Verify the arguments. */
976+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
977+
978+ Hardware->gpuProfiler = GpuProfiler;
979+
980+ /* Success. */
981+ gcmkFOOTER_NO();
982+ return gcvSTATUS_OK;
983+}
984+
985 #if gcdENABLE_FSCALE_VAL_ADJUST
986 gceSTATUS
987 gckHARDWARE_SetFscaleValue(
988@@ -5141,6 +5407,402 @@ OnError:
989 }
990 #endif
991
992+#if VIVANTE_PROFILER_CONTEXT
993+#define gcmkUPDATE_PROFILE_DATA(data) \
994+ profilerHistroy->data += profiler->data
995+
996+gceSTATUS
997+gckHARDWARE_QueryContextProfile(
998+ IN gckHARDWARE Hardware,
999+ IN gctBOOL Reset,
1000+ IN gckCONTEXT Context,
1001+ OUT gcsPROFILER_COUNTERS * Counters
1002+ )
1003+{
1004+ gceSTATUS status;
1005+ gckCOMMAND command = Hardware->kernel->command;
1006+ gcsPROFILER_COUNTERS * profiler = Counters;
1007+
1008+ gcmkHEADER_ARG("Hardware=0x%x Counters=0x%x", Hardware, Counters);
1009+
1010+ /* Verify the arguments. */
1011+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
1012+
1013+ /* Acquire the context sequnence mutex. */
1014+ gcmkONERROR(gckOS_AcquireMutex(
1015+ command->os, command->mutexContextSeq, gcvINFINITE
1016+ ));
1017+
1018+ /* Read the counters. */
1019+ gcmkVERIFY_OK(gckOS_MemCopy(
1020+ profiler, &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
1021+ ));
1022+
1023+ if (Reset)
1024+ {
1025+ /* Reset counters. */
1026+ gcmkVERIFY_OK(gckOS_ZeroMemory(
1027+ &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
1028+ ));
1029+ }
1030+
1031+ gcmkVERIFY_OK(gckOS_ReleaseMutex(
1032+ command->os, command->mutexContextSeq
1033+ ));
1034+
1035+ /* Success. */
1036+ gcmkFOOTER_NO();
1037+ return gcvSTATUS_OK;
1038+
1039+OnError:
1040+ /* Return the status. */
1041+ gcmkFOOTER();
1042+ return status;
1043+}
1044+
1045+
1046+gceSTATUS
1047+gckHARDWARE_UpdateContextProfile(
1048+ IN gckHARDWARE Hardware,
1049+ IN gckCONTEXT Context
1050+ )
1051+{
1052+ gceSTATUS status;
1053+ gcsPROFILER_COUNTERS * profiler = &Context->latestProfiler;
1054+ gcsPROFILER_COUNTERS * profilerHistroy = &Context->histroyProfiler;
1055+ gctUINT i, clock;
1056+ gctUINT32 colorKilled, colorDrawn, depthKilled, depthDrawn;
1057+ gctUINT32 totalRead, totalWrite;
1058+ gceCHIPMODEL chipModel;
1059+ gctUINT32 chipRevision;
1060+ gctUINT32 temp;
1061+ gctBOOL needResetShader = gcvFALSE;
1062+
1063+ gcmkHEADER_ARG("Hardware=0x%x Context=0x%x", Hardware, Context);
1064+
1065+ /* Verify the arguments. */
1066+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
1067+ gcmkVERIFY_OBJECT(Context, gcvOBJ_CONTEXT);
1068+
1069+ chipModel = Hardware->identity.chipModel;
1070+ chipRevision = Hardware->identity.chipRevision;
1071+ if (chipModel == gcv2000 || (chipModel == gcv2100 && chipRevision == 0x5118))
1072+ {
1073+ needResetShader = gcvTRUE;
1074+ }
1075+
1076+ /* Read the counters. */
1077+ gcmkONERROR(
1078+ gckOS_ReadRegisterEx(Hardware->os,
1079+ Hardware->core,
1080+ 0x00438,
1081+ &profiler->gpuCyclesCounter));
1082+ gcmkUPDATE_PROFILE_DATA(gpuCyclesCounter);
1083+
1084+ gcmkONERROR(
1085+ gckOS_ReadRegisterEx(Hardware->os,
1086+ Hardware->core,
1087+ 0x00078,
1088+ &profiler->gpuTotalCyclesCounter));
1089+ gcmkUPDATE_PROFILE_DATA(gpuTotalCyclesCounter);
1090+
1091+ gcmkONERROR(
1092+ gckOS_ReadRegisterEx(Hardware->os,
1093+ Hardware->core,
1094+ 0x0007C,
1095+ &profiler->gpuIdleCyclesCounter));
1096+ gcmkUPDATE_PROFILE_DATA(gpuIdleCyclesCounter);
1097+
1098+ /* Read clock control register. */
1099+ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
1100+ Hardware->core,
1101+ 0x00000,
1102+ &clock));
1103+
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;
1110+
1111+ /* Walk through all avaiable pixel pipes. */
1112+ for (i = 0; i < Hardware->identity.pixelPipes; ++i)
1113+ {
1114+ /* Select proper pipe. */
1115+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
1116+ Hardware->core,
1117+ 0x00000,
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)))));
1119+
1120+ /* BW */
1121+ gcmkONERROR(
1122+ gckOS_ReadRegisterEx(Hardware->os,
1123+ Hardware->core,
1124+ 0x00040,
1125+ &totalRead));
1126+ gcmkONERROR(
1127+ gckOS_ReadRegisterEx(Hardware->os,
1128+ Hardware->core,
1129+ 0x00044,
1130+ &totalWrite));
1131+
1132+ profiler->gpuTotalRead64BytesPerFrame += totalRead;
1133+ profiler->gpuTotalWrite64BytesPerFrame += totalWrite;
1134+ gcmkUPDATE_PROFILE_DATA(gpuTotalRead64BytesPerFrame);
1135+ gcmkUPDATE_PROFILE_DATA(gpuTotalWrite64BytesPerFrame);
1136+
1137+ /* PE */
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));
1142+
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);
1151+ }
1152+
1153+ /* Reset clock control register. */
1154+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
1155+ Hardware->core,
1156+ 0x00000,
1157+ clock));
1158+
1159+
1160+
1161+
1162+ /* Reset counters. */
1163+ gcmkONERROR(
1164+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 1));
1165+ gcmkONERROR(
1166+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 0));
1167+ gcmkONERROR(
1168+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00438, 0));
1169+ gcmkONERROR(
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)))
1173+));
1174+
1175+ /* SH */
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)
1179+ {
1180+ temp = profiler->ps_inst_counter;
1181+ profiler->ps_inst_counter -= Context->prevPSInstCount;
1182+ Context->prevPSInstCount = temp;
1183+ }
1184+ gcmkUPDATE_PROFILE_DATA(ps_inst_counter);
1185+
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)
1189+ {
1190+ temp = profiler->rendered_pixel_counter;
1191+ profiler->rendered_pixel_counter -= Context->prevPSPixelCount;
1192+ Context->prevPSPixelCount = temp;
1193+ }
1194+ gcmkUPDATE_PROFILE_DATA(rendered_pixel_counter);
1195+
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)
1199+ {
1200+ temp = profiler->vs_inst_counter;
1201+ profiler->vs_inst_counter -= Context->prevVSInstCount;
1202+ Context->prevVSInstCount = temp;
1203+ }
1204+ gcmkUPDATE_PROFILE_DATA(vs_inst_counter);
1205+
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)
1209+ {
1210+ temp = profiler->rendered_vertice_counter;
1211+ profiler->rendered_vertice_counter -= Context->prevVSVertexCount;
1212+ Context->prevVSVertexCount = temp;
1213+ }
1214+ gcmkUPDATE_PROFILE_DATA(rendered_vertice_counter);
1215+
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)
1219+ {
1220+ temp = profiler->vtx_branch_inst_counter;
1221+ profiler->vtx_branch_inst_counter -= Context->prevVSBranchInstCount;
1222+ Context->prevVSBranchInstCount = temp;
1223+ }
1224+ gcmkUPDATE_PROFILE_DATA(vtx_branch_inst_counter);
1225+
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)
1229+ {
1230+ temp = profiler->vtx_texld_inst_counter;
1231+ profiler->vtx_texld_inst_counter -= Context->prevVSTexInstCount;
1232+ Context->prevVSTexInstCount = temp;
1233+ }
1234+ gcmkUPDATE_PROFILE_DATA(vtx_texld_inst_counter);
1235+
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)
1239+ {
1240+ temp = profiler->pxl_branch_inst_counter;
1241+ profiler->pxl_branch_inst_counter -= Context->prevPSBranchInstCount;
1242+ Context->prevPSBranchInstCount = temp;
1243+ }
1244+ gcmkUPDATE_PROFILE_DATA(pxl_branch_inst_counter);
1245+
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)
1249+ {
1250+ temp = profiler->pxl_texld_inst_counter;
1251+ profiler->pxl_texld_inst_counter -= Context->prevPSTexInstCount;
1252+ Context->prevPSTexInstCount = temp;
1253+ }
1254+ gcmkUPDATE_PROFILE_DATA(pxl_texld_inst_counter);
1255+
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)))
1258+));
1259+
1260+ /* PA */
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)))
1281+));
1282+
1283+ /* SE */
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)))
1292+));
1293+
1294+ /* RA */
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)))
1315+));
1316+
1317+ /* TX */
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)))
1347+));
1348+
1349+ /* MC */
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)))
1361+));
1362+
1363+ /* HI */
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)))
1375+));
1376+
1377+ /* Success. */
1378+ gcmkFOOTER_NO();
1379+ return gcvSTATUS_OK;
1380+
1381+OnError:
1382+ /* Return the status. */
1383+ gcmkFOOTER();
1384+ return status;
1385+}
1386+#endif
1387+
1388 static gceSTATUS
1389 _ResetGPU(
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)))))));
1393 break;
1394
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)))))));
1397+ break;
1398+
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)))))));
1402+#else
1403+ available = gcvFALSE;
1404+#endif
1405+ break;
1406+
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)))))));
1409+ break;
1410+
1411 default:
1412 gcmkFATAL("Invalid feature has been requested.");
1413 available = gcvFALSE;
1414diff --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
1415index 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
1419 #endif
1420
1421 gctBOOL powerManagement;
1422+ gctBOOL gpuProfiler;
1423 };
1424
1425 gceSTATUS
1426diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
1427index 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
1432 ** object.
1433 */
1434-#ifdef ANDROID
1435-#if gcdNEW_PROFILER_FILE
1436-#define DEFAULT_PROFILE_FILE_NAME "/sdcard/vprofiler.vpd"
1437-#else
1438-#define DEFAULT_PROFILE_FILE_NAME "/sdcard/vprofiler.xml"
1439-#endif
1440-#else
1441-#if gcdNEW_PROFILER_FILE
1442-#define DEFAULT_PROFILE_FILE_NAME "vprofiler.vpd"
1443-#else
1444-#define DEFAULT_PROFILE_FILE_NAME "vprofiler.xml"
1445-#endif
1446-#endif
1447
1448 gceSTATUS
1449 gckKERNEL_Construct(
1450@@ -302,17 +289,12 @@ gckKERNEL_Construct(
1451
1452 #if VIVANTE_PROFILER
1453 /* Initialize profile setting */
1454-#if defined ANDROID
1455 kernel->profileEnable = gcvFALSE;
1456-#else
1457- kernel->profileEnable = gcvTRUE;
1458-#endif
1459 kernel->profileCleanRegister = gcvTRUE;
1460+#endif
1461
1462- gcmkVERIFY_OK(
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));
1468 #endif
1469
1470 /* Return pointer to the gckKERNEL object. */
1471@@ -395,6 +377,13 @@ OnError:
1472 }
1473 #endif
1474
1475+#if gcdANDROID_NATIVE_FENCE_SYNC
1476+ if (kernel->timeline)
1477+ {
1478+ gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Os, kernel->timeline));
1479+ }
1480+#endif
1481+
1482 gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Os, kernel));
1483 }
1484
1485@@ -525,6 +514,10 @@ gckKERNEL_Destroy(
1486 }
1487 #endif
1488
1489+#if gcdANDROID_NATIVE_FENCE_SYNC
1490+ gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Kernel->os, Kernel->timeline));
1491+#endif
1492+
1493 /* Mark the gckKERNEL object as unknown. */
1494 Kernel->object.type = gcvOBJ_UNKNOWN;
1495
1496@@ -1310,7 +1303,8 @@ gckKERNEL_Dispatch(
1497 /* Commit a command and context buffer. */
1498 gcmkONERROR(
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(
1507 break;
1508
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. */
1513+ gcmkONERROR(
1514+ gckHARDWARE_QueryContextProfile(
1515+ Kernel->hardware,
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. */
1521 gcmkONERROR(
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;
1527-
1528- gcmkVERIFY_OK(
1529- gckOS_MemCopy(Interface->u.GetProfileSetting.fileName,
1530- Kernel->profileFileName,
1531- gcdMAX_PROFILE_FILE_NAME));
1532 #endif
1533
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;
1540-
1541- gcmkVERIFY_OK(
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;
1547+ else
1548+ {
1549+ status = gcvSTATUS_NOT_SUPPORTED;
1550+ break;
1551+ }
1552 #endif
1553
1554 status = gcvSTATUS_OK;
1555@@ -2093,6 +2091,61 @@ gckKERNEL_Dispatch(
1556 #endif
1557 break;
1558
1559+#if gcdANDROID_NATIVE_FENCE_SYNC
1560+ case gcvHAL_SYNC_POINT:
1561+ {
1562+ gctSYNC_POINT syncPoint;
1563+
1564+ switch (Interface->u.SyncPoint.command)
1565+ {
1566+ case gcvSYNC_POINT_CREATE:
1567+ gcmkONERROR(gckOS_CreateSyncPoint(Kernel->os, &syncPoint));
1568+
1569+ Interface->u.SyncPoint.syncPoint = gcmPTR_TO_UINT64(syncPoint);
1570+
1571+ gcmkVERIFY_OK(
1572+ gckKERNEL_AddProcessDB(Kernel,
1573+ processID, gcvDB_SYNC_POINT,
1574+ syncPoint,
1575+ gcvNULL,
1576+ 0));
1577+ break;
1578+
1579+ case gcvSYNC_POINT_DESTROY:
1580+ syncPoint = gcmUINT64_TO_PTR(Interface->u.SyncPoint.syncPoint);
1581+
1582+ gcmkONERROR(gckOS_DestroySyncPoint(Kernel->os, syncPoint));
1583+
1584+ gcmkVERIFY_OK(
1585+ gckKERNEL_RemoveProcessDB(Kernel,
1586+ processID, gcvDB_SYNC_POINT,
1587+ syncPoint));
1588+ break;
1589+
1590+ default:
1591+ gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
1592+ break;
1593+ }
1594+ }
1595+ break;
1596+
1597+ case gcvHAL_CREATE_NATIVE_FENCE:
1598+ {
1599+ gctINT fenceFD;
1600+ gctSYNC_POINT syncPoint =
1601+ gcmUINT64_TO_PTR(Interface->u.CreateNativeFence.syncPoint);
1602+
1603+ gcmkONERROR(
1604+ gckOS_CreateNativeFence(Kernel->os,
1605+ Kernel->timeline,
1606+ syncPoint,
1607+ &fenceFD));
1608+
1609+ Interface->u.CreateNativeFence.fenceFD = fenceFD;
1610+ }
1611+ break;
1612+#endif
1613+
1614 default:
1615 /* Invalid command. */
1616 gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
1617@@ -2856,6 +2909,8 @@ gckKERNEL_Recovery(
1618 return gcvSTATUS_OK;
1619 }
1620
1621+ gcmkPRINT("[galcore]: GPU[%d] hang, automatic recovery.", Kernel->core);
1622+
1623 /* Start a timer to clear reset flag, before timer is expired,
1624 ** other recovery request is ignored. */
1625 gcmkVERIFY_OK(
1626@@ -3382,7 +3437,7 @@ gckLINKQUEUE_Dequeue(
1627 IN gckLINKQUEUE LinkQueue
1628 )
1629 {
1630- gcmASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
1631+ gcmkASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
1632
1633 LinkQueue->count--;
1634 LinkQueue->front = (LinkQueue->front + 1) % gcdLINK_QUEUE_SIZE;
1635diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
1636index 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. */
1648 }
1649 gceDATABASE_TYPE;
1650
1651@@ -406,9 +407,6 @@ struct _gckKERNEL
1652 /* Enable profiling */
1653 gctBOOL profileEnable;
1654
1655- /* The profile file name */
1656- gctCHAR profileFileName[gcdMAX_PROFILE_FILE_NAME];
1657-
1658 /* Clear profile register or not*/
1659 gctBOOL profileCleanRegister;
1660
1661@@ -445,6 +443,10 @@ struct _gckKERNEL
1662 #if gcdDVFS
1663 gckDVFS dvfs;
1664 #endif
1665+
1666+#if gcdANDROID_NATIVE_FENCE_SYNC
1667+ gctHANDLE timeline;
1668+#endif
1669 };
1670
1671 struct _FrequencyHistory
1672@@ -496,6 +498,11 @@ struct _gckCOMMAND
1673 /* Context switching mutex. */
1674 gctPOINTER mutexContext;
1675
1676+#if VIVANTE_PROFILER_CONTEXT
1677+ /* Context sequence mutex. */
1678+ gctPOINTER mutexContextSeq;
1679+#endif
1680+
1681 /* Command queue power semaphore. */
1682 gctPOINTER powerSemaphore;
1683
1684@@ -649,6 +656,8 @@ struct _gckEVENT
1685 gctPOINTER eventListMutex;
1686
1687 gctPOINTER submitTimer;
1688+
1689+ volatile gctBOOL inNotify;
1690 };
1691
1692 /* Free all events belonging to a process. */
1693@@ -668,6 +677,11 @@ gckEVENT_Stop(
1694 IN OUT gctSIZE_T * waitSize
1695 );
1696
1697+gceSTATUS
1698+gckEVENT_WaitEmpty(
1699+ IN gckEVENT Event
1700+ );
1701+
1702 /* gcuVIDMEM_NODE structure. */
1703 typedef union _gcuVIDMEM_NODE
1704 {
1705diff --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
1706index 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));
1712
1713+#if VIVANTE_PROFILER_CONTEXT
1714+ /* Create the context switching mutex. */
1715+ gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContextSeq));
1716+#endif
1717+
1718 /* Create the power management semaphore. */
1719 gcmkONERROR(gckOS_CreateSemaphore(os, &command->powerSemaphore));
1720
1721@@ -572,6 +577,13 @@ OnError:
1722 gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContext));
1723 }
1724
1725+#if VIVANTE_PROFILER_CONTEXT
1726+ if (command->mutexContextSeq != gcvNULL)
1727+ {
1728+ gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContextSeq));
1729+ }
1730+#endif
1731+
1732 if (command->mutexQueue != gcvNULL)
1733 {
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));
1738
1739+#if VIVANTE_PROFILER_CONTEXT
1740+ if (Command->mutexContextSeq != gcvNULL)
1741+ gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContextSeq));
1742+#endif
1743+
1744 /* Delete the command queue mutex. */
1745 gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexQueue));
1746
1747@@ -1127,6 +1144,10 @@ gckCOMMAND_Commit(
1748 # endif
1749 #endif
1750
1751+#if VIVANTE_PROFILER_CONTEXT
1752+ gctBOOL sequenceAcquired = gcvFALSE;
1753+#endif
1754+
1755 gctPOINTER pointer = gcvNULL;
1756
1757 gcmkHEADER_ARG(
1758@@ -1145,6 +1166,17 @@ gckCOMMAND_Commit(
1759
1760 gcmkONERROR(_FlushMMU(Command));
1761
1762+#if VIVANTE_PROFILER_CONTEXT
1763+ if((Command->kernel->hardware->gpuProfiler) && (Command->kernel->profileEnable))
1764+ {
1765+ /* Acquire the context sequnence mutex. */
1766+ gcmkONERROR(gckOS_AcquireMutex(
1767+ Command->os, Command->mutexContextSeq, gcvINFINITE
1768+ ));
1769+ sequenceAcquired = gcvTRUE;
1770+ }
1771+#endif
1772+
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;
1779
1780+#if VIVANTE_PROFILER_CONTEXT
1781+ if(sequenceAcquired)
1782+ {
1783+ gcmkONERROR(gckCOMMAND_Stall(Command, gcvTRUE));
1784+ if (Command->currContext)
1785+ {
1786+ gcmkONERROR(gckHARDWARE_UpdateContextProfile(
1787+ hardware,
1788+ Command->currContext));
1789+ }
1790+
1791+ /* Release the context switching mutex. */
1792+ gcmkONERROR(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
1793+ sequenceAcquired = gcvFALSE;
1794+ }
1795+#endif
1796+
1797 /* Loop while there are records in the queue. */
1798 while (EventQueue != gcvNULL)
1799 {
1800@@ -2114,6 +2163,14 @@ OnError:
1801 gcmkVERIFY_OK(gckCOMMAND_ExitCommit(Command, gcvFALSE));
1802 }
1803
1804+#if VIVANTE_PROFILER_CONTEXT
1805+ if (sequenceAcquired)
1806+ {
1807+ /* Release the context sequence mutex. */
1808+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
1809+ }
1810+#endif
1811+
1812 /* Unmap the command buffer pointer. */
1813 if (commandBufferMapped)
1814 {
1815diff --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
1816index 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.
1821 */
1822
1823+ command->info.tsOverflowInt = 0;
1824 gcmkERR_BREAK(gckVGINTERRUPT_Enable(
1825 Kernel->interrupt,
1826 &command->info.tsOverflowInt,
1827@@ -3406,38 +3407,26 @@ gckVGCOMMAND_Commit(
1828 gctBOOL previousExecuted;
1829 gctUINT controlIndex;
1830
1831+ gcmkERR_BREAK(gckVGHARDWARE_SetPowerManagementState(
1832+ Command->hardware, gcvPOWER_ON_AUTO
1833+ ));
1834+
1835+ /* Acquire the power semaphore. */
1836+ gcmkERR_BREAK(gckOS_AcquireSemaphore(
1837+ Command->os, Command->powerSemaphore
1838+ ));
1839+
1840 /* Acquire the mutex. */
1841- gcmkERR_BREAK(gckOS_AcquireMutex(
1842+ status = gckOS_AcquireMutex(
1843 Command->os,
1844 Command->commitMutex,
1845 gcvINFINITE
1846- ));
1847-
1848- status = gckVGHARDWARE_SetPowerManagementState(
1849- Command->hardware, gcvPOWER_ON_AUTO);
1850-
1851- if (gcmIS_ERROR(status))
1852- {
1853- /* Acquire the mutex. */
1854- gcmkVERIFY_OK(gckOS_ReleaseMutex(
1855- Command->os,
1856- Command->commitMutex
1857- ));
1858-
1859- break;
1860- }
1861- /* Acquire the power semaphore. */
1862- status = gckOS_AcquireSemaphore(
1863- Command->os, Command->powerSemaphore);
1864+ );
1865
1866 if (gcmIS_ERROR(status))
1867 {
1868- /* Acquire the mutex. */
1869- gcmkVERIFY_OK(gckOS_ReleaseMutex(
1870- Command->os,
1871- Command->commitMutex
1872- ));
1873-
1874+ gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
1875+ Command->os, Command->powerSemaphore));
1876 break;
1877 }
1878
1879@@ -3669,14 +3658,14 @@ gckVGCOMMAND_Commit(
1880 }
1881 while (gcvFALSE);
1882
1883- gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
1884- Command->os, Command->powerSemaphore));
1885-
1886 /* Release the mutex. */
1887 gcmkCHECK_STATUS(gckOS_ReleaseMutex(
1888 Command->os,
1889 Command->commitMutex
1890 ));
1891+
1892+ gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
1893+ Command->os, Command->powerSemaphore));
1894 }
1895 while (gcvFALSE);
1896
1897diff --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
1898index 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);
1903 break;
1904
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);
1910+
1911+ gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE,
1912+ "DB: SYNC POINT %d (status=%d)",
1913+ (gctINT)(gctUINTPTR_T)record->data, status);
1914+ break;
1915+#endif
1916+
1917 default:
1918 gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DATABASE,
1919 "DB: Correcupted record=0x%08x type=%d",
1920diff --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
1921index 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)
1929 );
1930
1931 /* Validate the source. */
1932@@ -2131,6 +2132,9 @@ gckEVENT_Notify(
1933 gcvINFINITE));
1934 acquired = gcvTRUE;
1935
1936+ /* We are in the notify loop. */
1937+ Event->inNotify = gcvTRUE;
1938+
1939 /* Grab the event head. */
1940 record = queue->head;
1941
1942@@ -2463,6 +2467,17 @@ gckEVENT_Notify(
1943 break;
1944 #endif
1945
1946+#if gcdANDROID_NATIVE_FENCE_SYNC
1947+ case gcvHAL_SYNC_POINT:
1948+ {
1949+ gctSYNC_POINT syncPoint;
1950+
1951+ syncPoint = gcmUINT64_TO_PTR(record->info.u.SyncPoint.syncPoint);
1952+ status = gckOS_SignalSyncPoint(Event->os, syncPoint);
1953+ }
1954+ break;
1955+#endif
1956+
1957 case gcvHAL_COMMIT_DONE:
1958 break;
1959
1960@@ -2505,6 +2520,9 @@ gckEVENT_Notify(
1961 gcmkONERROR(_TryToIdleGPU(Event));
1962 }
1963
1964+ /* We are out the notify loop. */
1965+ Event->inNotify = gcvFALSE;
1966+
1967 /* Success. */
1968 gcmkFOOTER_NO();
1969 return gcvSTATUS_OK;
1970@@ -2524,6 +2542,9 @@ OnError:
1971 }
1972 #endif
1973
1974+ /* We are out the notify loop. */
1975+ Event->inNotify = gcvFALSE;
1976+
1977 /* Return the status. */
1978 gcmkFOOTER();
1979 return status;
1980@@ -2871,3 +2892,11 @@ gckEVENT_Dump(
1981 return gcvSTATUS_OK;
1982 }
1983
1984+gceSTATUS gckEVENT_WaitEmpty(gckEVENT Event)
1985+{
1986+ gctBOOL isEmpty;
1987+
1988+ while (Event->inNotify || (gcmIS_SUCCESS(gckEVENT_IsEmpty(Event, &isEmpty)) && !isEmpty)) ;
1989+
1990+ return gcvSTATUS_OK;
1991+}
1992diff --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
1993index 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
1998 ));
1999
2000+ /* Mask out TS overflow interrupt */
2001+ triggered &= 0xfffffffe;
2002+
2003 /* No interrupts to process? */
2004 if (triggered == 0)
2005 {
2006diff --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
2007index 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(
2011 acquired = gcvTRUE;
2012
2013 /* Allocate page table for current MMU. */
2014- for (i = 0; i < mirrorPageTable->reference; i++)
2015+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2016 {
2017 if (Mmu == mirrorPageTable->mmus[i])
2018 {
2019@@ -1446,7 +1446,7 @@ gckMMU_AllocatePages(
2020 }
2021
2022 /* Allocate page table for other MMUs. */
2023- for (i = 0; i < mirrorPageTable->reference; i++)
2024+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2025 {
2026 mmu = mirrorPageTable->mmus[i];
2027
2028@@ -1500,7 +1500,7 @@ gckMMU_FreePages(
2029
2030 offset = (gctUINT32)PageTable - (gctUINT32)Mmu->pageTableLogical;
2031
2032- for (i = 0; i < mirrorPageTable->reference; i++)
2033+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2034 {
2035 mmu = mirrorPageTable->mmus[i];
2036
2037@@ -1639,7 +1639,7 @@ gckMMU_SetPage(
2038 _WritePageEntry(PageEntry, data);
2039
2040 #if gcdMIRROR_PAGETABLE
2041- for (i = 0; i < mirrorPageTable->reference; i++)
2042+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2043 {
2044 mmu = mirrorPageTable->mmus[i];
2045
2046diff --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
2047index 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(
2051 gctUINT32 end;
2052 gcePOOL pool;
2053 gctUINT32 offset;
2054+ gctUINT32 baseAddress;
2055
2056 gcmkHEADER_ARG("Node=0x%X", Node);
2057
2058@@ -1601,10 +1602,16 @@ _NeedVirtualMapping(
2059 else
2060 #endif
2061 {
2062- /* For cores which can't access all physical address. */
2063- gcmkONERROR(gckHARDWARE_ConvertLogical(Kernel->hardware,
2064- Node->Virtual.logical,
2065- &phys));
2066+ /* Convert logical address into a physical address. */
2067+ gcmkONERROR(
2068+ gckOS_GetPhysicalAddress(Kernel->os, Node->Virtual.logical, &phys));
2069+
2070+ gcmkONERROR(gckOS_GetBaseAddress(Kernel->os, &baseAddress));
2071+
2072+ gcmkASSERT(phys >= baseAddress);
2073+
2074+ /* Subtract baseAddress to get a GPU address used for programming. */
2075+ phys -= baseAddress;
2076
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));
2081 acquired = gcvTRUE;
2082
2083+#if gcdPAGED_MEMORY_CACHEABLE
2084+ /* Force video memory cacheable. */
2085+ Cacheable = gcvTRUE;
2086+#endif
2087+
2088 gcmkONERROR(
2089 gckOS_LockPages(os,
2090 Node->Virtual.physical,
2091diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
2092index 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" {
2096
2097 #define gcvINVALID_ADDRESS ~0U
2098
2099+#define gcmGET_PRE_ROTATION(rotate) \
2100+ ((rotate) & (~(gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y)))
2101+
2102+#define gcmGET_POST_ROTATION(rotate) \
2103+ ((rotate) & (gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y))
2104+
2105 /******************************************************************************\
2106 ******************************** gcsOBJECT Object *******************************
2107 \******************************************************************************/
2108@@ -1124,6 +1130,60 @@ gckOS_UnmapUserMemory(
2109 IN gctUINT32 Address
2110 );
2111
2112+/******************************************************************************\
2113+************************** Android Native Fence Sync ***************************
2114+\******************************************************************************/
2115+gceSTATUS
2116+gckOS_CreateSyncTimeline(
2117+ IN gckOS Os,
2118+ OUT gctHANDLE * Timeline
2119+ );
2120+
2121+gceSTATUS
2122+gckOS_DestroySyncTimeline(
2123+ IN gckOS Os,
2124+ IN gctHANDLE Timeline
2125+ );
2126+
2127+gceSTATUS
2128+gckOS_CreateSyncPoint(
2129+ IN gckOS Os,
2130+ OUT gctSYNC_POINT * SyncPoint
2131+ );
2132+
2133+gceSTATUS
2134+gckOS_ReferenceSyncPoint(
2135+ IN gckOS Os,
2136+ IN gctSYNC_POINT SyncPoint
2137+ );
2138+
2139+gceSTATUS
2140+gckOS_DestroySyncPoint(
2141+ IN gckOS Os,
2142+ IN gctSYNC_POINT SyncPoint
2143+ );
2144+
2145+gceSTATUS
2146+gckOS_SignalSyncPoint(
2147+ IN gckOS Os,
2148+ IN gctSYNC_POINT SyncPoint
2149+ );
2150+
2151+gceSTATUS
2152+gckOS_QuerySyncPoint(
2153+ IN gckOS Os,
2154+ IN gctSYNC_POINT SyncPoint,
2155+ OUT gctBOOL_PTR State
2156+ );
2157+
2158+gceSTATUS
2159+gckOS_CreateNativeFence(
2160+ IN gckOS Os,
2161+ IN gctHANDLE Timeline,
2162+ IN gctSYNC_POINT SyncPoint,
2163+ OUT gctINT * FenceFD
2164+ );
2165+
2166 #if !USE_NEW_LINUX_SIGNAL
2167 /* Create signal to be used in the user space. */
2168 gceSTATUS
2169@@ -1758,7 +1818,7 @@ gckKERNEL_Recovery(
2170 void
2171 gckKERNEL_SetTimeOut(
2172 IN gckKERNEL Kernel,
2173- IN gctUINT32 timeOut
2174+ IN gctUINT32 timeOut
2175 );
2176
2177 /* Get access to the user data. */
2178@@ -2078,6 +2138,12 @@ gckHARDWARE_SetPowerManagement(
2179 IN gctBOOL PowerManagement
2180 );
2181
2182+gceSTATUS
2183+gckHARDWARE_SetGpuProfiler(
2184+ IN gckHARDWARE Hardware,
2185+ IN gctBOOL GpuProfiler
2186+ );
2187+
2188 #if gcdENABLE_FSCALE_VAL_ADJUST
2189 gceSTATUS
2190 gckHARDWARE_SetFscaleValue(
2191@@ -2554,6 +2620,22 @@ gckHARDWARE_QueryProfileRegisters(
2192 );
2193 #endif
2194
2195+#if VIVANTE_PROFILER_CONTEXT
2196+gceSTATUS
2197+gckHARDWARE_QueryContextProfile(
2198+ IN gckHARDWARE Hardware,
2199+ IN gctBOOL Clear,
2200+ IN gckCONTEXT Context,
2201+ OUT gcsPROFILER_COUNTERS * Counters
2202+ );
2203+
2204+gceSTATUS
2205+gckHARDWARE_UpdateContextProfile(
2206+ IN gckHARDWARE Hardware,
2207+ IN gckCONTEXT Context
2208+ );
2209+#endif
2210+
2211 gceSTATUS
2212 gckOS_SignalQueryHardware(
2213 IN gckOS Os,
2214diff --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
2215index 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;
2220 #endif
2221
2222+typedef struct _gcoOS_SymbolsList gcoOS_SymbolsList;
2223+
2224 /******************************************************************************\
2225 ******************************* Process local storage *************************
2226 \******************************************************************************/
2227 typedef struct _gcsPLS * gcsPLS_PTR;
2228+
2229+typedef void (* gctPLS_DESTRUCTOR) (
2230+ gcsPLS_PTR
2231+ );
2232+
2233 typedef struct _gcsPLS
2234 {
2235 /* Global objects. */
2236@@ -103,6 +110,12 @@ typedef struct _gcsPLS
2237
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. */
2244+ gctBOOL exiting;
2245+#endif
2246
2247 /* Reference count for destructor. */
2248 gcsATOM_PTR reference;
2249@@ -111,6 +124,8 @@ typedef struct _gcsPLS
2250 gctBOOL bNeedSupportNP2Texture;
2251 #endif
2252
2253+ /* Destructor for eglDisplayInfo. */
2254+ gctPLS_DESTRUCTOR destructor;
2255 }
2256 gcsPLS;
2257
2258@@ -148,6 +163,11 @@ typedef struct _gcsTLS
2259 #endif
2260 gco2D engine2D;
2261 gctBOOL copied;
2262+
2263+#if gcdFORCE_GAL_LOAD_TWICE
2264+ /* libGAL.so handle */
2265+ gctHANDLE handle;
2266+#endif
2267 }
2268 gcsTLS;
2269
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,
2275 }
2276 gcePLS_VALUE;
2277
2278@@ -577,6 +598,12 @@ gcoHAL_Call(
2279 IN OUT gcsHAL_INTERFACE_PTR Interface
2280 );
2281
2282+gceSTATUS
2283+gcoHAL_GetPatchID(
2284+ IN gcoHAL Hal,
2285+ OUT gcePATCH_ID * PatchID
2286+ );
2287+
2288 /* Schedule an event. */
2289 gceSTATUS
2290 gcoHAL_ScheduleEvent(
2291@@ -637,6 +664,16 @@ gcoHAL_QuerySeparated3D2D(
2292 IN gcoHAL Hal
2293 );
2294
2295+gceSTATUS
2296+gcoHAL_QuerySpecialHint(
2297+ IN gceSPECIAL_HINT Hint
2298+ );
2299+
2300+gceSTATUS
2301+gcoHAL_SetSpecialHintData(
2302+ IN gcoHARDWARE Hardware
2303+ );
2304+
2305 /* Get pointer to gcoVG object. */
2306 gceSTATUS
2307 gcoHAL_GetVGEngine(
2308@@ -786,7 +823,6 @@ gcoOS_FreeVideoMemory(
2309 IN gctPOINTER Handle
2310 );
2311
2312-#if gcdENABLE_BANK_ALIGNMENT
2313 gceSTATUS
2314 gcoSURF_GetBankOffsetBytes(
2315 IN gcoSURF Surfce,
2316@@ -794,7 +830,6 @@ gcoSURF_GetBankOffsetBytes(
2317 IN gctUINT32 Stride,
2318 IN gctUINT32_PTR Bytes
2319 );
2320-#endif
2321
2322 /* Map user memory. */
2323 gceSTATUS
2324@@ -918,6 +953,21 @@ gcoOS_Flush(
2325 IN gctFILE File
2326 );
2327
2328+/* Close a file descriptor. */
2329+gceSTATUS
2330+gcoOS_CloseFD(
2331+ IN gcoOS Os,
2332+ IN gctINT FD
2333+ );
2334+
2335+/* Dup file descriptor to another. */
2336+gceSTATUS
2337+gcoOS_DupFD(
2338+ IN gcoOS Os,
2339+ IN gctINT FD,
2340+ OUT gctINT * FD2
2341+ );
2342+
2343 /* Create an endpoint for communication. */
2344 gceSTATUS
2345 gcoOS_Socket(
2346@@ -977,6 +1027,14 @@ gcoOS_GetEnv(
2347 OUT gctSTRING * Value
2348 );
2349
2350+/* Set environment variable value. */
2351+gceSTATUS
2352+gcoOS_SetEnv(
2353+ IN gcoOS Os,
2354+ IN gctCONST_STRING VarName,
2355+ IN gctSTRING Value
2356+ );
2357+
2358 /* Get current working directory. */
2359 gceSTATUS
2360 gcoOS_GetCwd(
2361@@ -1210,6 +1268,13 @@ gcoOS_DetectProcessByEncryptedName(
2362 IN gctCONST_STRING Name
2363 );
2364
2365+#if defined(ANDROID)
2366+gceSTATUS
2367+gcoOS_DetectProgrameByEncryptedSymbols(
2368+ IN gcoOS_SymbolsList Symbols
2369+ );
2370+#endif
2371+
2372 /*----------------------------------------------------------------------------*/
2373 /*----- Atoms ----------------------------------------------------------------*/
2374
2375@@ -1403,6 +1468,42 @@ gcoOS_UnmapSignal(
2376 IN gctSIGNAL Signal
2377 );
2378
2379+/*----------------------------------------------------------------------------*/
2380+/*----- Android Native Fence -------------------------------------------------*/
2381+
2382+/* Create sync point. */
2383+gceSTATUS
2384+gcoOS_CreateSyncPoint(
2385+ IN gcoOS Os,
2386+ OUT gctSYNC_POINT * SyncPoint
2387+ );
2388+
2389+/* Destroy sync point. */
2390+gceSTATUS
2391+gcoOS_DestroySyncPoint(
2392+ IN gcoOS Os,
2393+ IN gctSYNC_POINT SyncPoint
2394+ );
2395+
2396+/* Create native fence. */
2397+gceSTATUS
2398+gcoOS_CreateNativeFence(
2399+ IN gcoOS Os,
2400+ IN gctSYNC_POINT SyncPoint,
2401+ OUT gctINT * FenceFD
2402+ );
2403+
2404+/* Wait on native fence. */
2405+gceSTATUS
2406+gcoOS_WaitNativeFence(
2407+ IN gcoOS Os,
2408+ IN gctINT FenceFD,
2409+ IN gctUINT32 Timeout
2410+ );
2411+
2412+/*----------------------------------------------------------------------------*/
2413+/*----- Memory Access and Cache ----------------------------------------------*/
2414+
2415 /* Write a register. */
2416 gceSTATUS
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
2425 #endif
2426
2427@@ -1579,6 +1680,28 @@ typedef struct _gcsRECT
2428 }
2429 gcsRECT;
2430
2431+typedef union _gcsPIXEL
2432+{
2433+ struct
2434+ {
2435+ gctFLOAT r, g, b, a;
2436+ gctFLOAT d, s;
2437+ } pf;
2438+
2439+ struct
2440+ {
2441+ gctINT32 r, g, b, a;
2442+ gctINT32 d, s;
2443+ } pi;
2444+
2445+ struct
2446+ {
2447+ gctUINT32 r, g, b, a;
2448+ gctUINT32 d, s;
2449+ } pui;
2450+
2451+} gcsPIXEL;
2452+
2453
2454 /******************************************************************************\
2455 ********************************* gcoSURF Object ********************************
2456@@ -1795,6 +1918,18 @@ gcoSURF_SetRotation(
2457 );
2458
2459 gceSTATUS
2460+gcoSURF_SetPreRotation(
2461+ IN gcoSURF Surface,
2462+ IN gceSURF_ROTATION Rotation
2463+ );
2464+
2465+gceSTATUS
2466+gcoSURF_GetPreRotation(
2467+ IN gcoSURF Surface,
2468+ IN gceSURF_ROTATION *Rotation
2469+ );
2470+
2471+gceSTATUS
2472 gcoSURF_IsValid(
2473 IN gcoSURF Surface
2474 );
2475@@ -1824,6 +1959,15 @@ gcoSURF_DisableTileStatus(
2476 IN gcoSURF Surface,
2477 IN gctBOOL Decompress
2478 );
2479+
2480+gceSTATUS
2481+gcoSURF_AlignResolveRect(
2482+ IN gcoSURF Surf,
2483+ IN gcsPOINT_PTR RectOrigin,
2484+ IN gcsPOINT_PTR RectSize,
2485+ OUT gcsPOINT_PTR AlignedOrigin,
2486+ OUT gcsPOINT_PTR AlignedSize
2487+ );
2488 #endif /* VIVANTE_NO_3D */
2489
2490 /* Get surface size. */
2491@@ -1910,6 +2054,9 @@ gcoSURF_FillFromTile(
2492 IN gcoSURF Surface
2493 );
2494
2495+/* Check if surface needs a filler. */
2496+gceSTATUS gcoSURF_NeedFiller(IN gcoSURF Surface);
2497+
2498 /* Fill surface with a value. */
2499 gceSTATUS
2500 gcoSURF_Fill(
2501@@ -1949,6 +2096,19 @@ gcoSURF_SetBuffer(
2502 IN gctUINT32 Physical
2503 );
2504
2505+/* Set the underlying video buffer for the surface wrapper. */
2506+gceSTATUS
2507+gcoSURF_SetVideoBuffer(
2508+ IN gcoSURF Surface,
2509+ IN gceSURF_TYPE Type,
2510+ IN gceSURF_FORMAT Format,
2511+ IN gctUINT Width,
2512+ IN gctUINT Height,
2513+ IN gctUINT Stride,
2514+ IN gctPOINTER *LogicalPlane1,
2515+ IN gctUINT32 *PhysicalPlane1
2516+ );
2517+
2518 /* Set the size of the surface in pixels and map the underlying buffer. */
2519 gceSTATUS
2520 gcoSURF_SetWindow(
2521@@ -3705,6 +3865,12 @@ gcGetUserDebugOption(
2522 void
2523 );
2524
2525+struct _gcoOS_SymbolsList
2526+{
2527+ gcePATCH_ID patchId;
2528+ const char * symList[10];
2529+};
2530+
2531 #if gcdHAS_ELLIPSES
2532 #define gcmUSER_DEBUG_MSG(level, ...) \
2533 do \
2534diff --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
2535index 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
2540 #endif
2541
2542-#define TEMP_OPT_CONSTANT_TEXLD_COORD 1
2543+#define TEMP_OPT_CONSTANT_TEXLD_COORD 0
2544
2545 #define TEMP_SHADER_PATCH 1
2546
2547-#define ADD_PRE_ROTATION_TO_VS 0
2548-
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 */
2557 gcSL_MAXOPCODE
2558 }
2559 gcSL_OPCODE;
2560@@ -474,6 +473,9 @@ struct _gcsHINT
2561
2562 gctBOOL clipW;
2563
2564+ /* Flag whether or not the shader has a KILL instruction. */
2565+ gctBOOL hasKill;
2566+
2567 /* Element count. */
2568 gctUINT32 elementCount;
2569
2570@@ -495,12 +497,18 @@ struct _gcsHINT
2571 /* Balance maximum. */
2572 gctUINT32 balanceMax;
2573
2574+ /* Auto-shift balancing. */
2575+ gctBOOL autoShift;
2576+
2577 /* Flag whether the PS outputs the depth value or not. */
2578 gctBOOL psHasFragDepthOut;
2579
2580 /* Flag whether the ThreadWalker is in PS. */
2581 gctBOOL threadWalkerInPS;
2582
2583+ /* HW reg number for position of VS */
2584+ gctUINT32 hwRegNoOfSIVPos;
2585+
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,
2591 #endif
2592
2593-#if ADD_PRE_ROTATION_TO_VS
2594+#if gcdPRE_ROTATION && (ANDROID_SDK_VERSION >= 14)
2595 gcvSHADER_VS_PRE_ROTATION = 0x200,
2596 #endif
2597
2598 #if TEMP_INLINE_ALL_EXPANSION
2599- gcvSHADER_INLINE_ALL_EXPANSION = 0x200,
2600+ gcvSHADER_INLINE_ALL_EXPANSION = 0x400,
2601 #endif
2602 }
2603 gceSHADER_FLAGS;
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 */
2609
2610 /* Code generation */
2611
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)
2618
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;
2624
2625+typedef struct _gcZBIAS_PATCH_PARAM
2626+{
2627+ /* Driver uses this to program uniform that designating zbias */
2628+ gctINT uniformAddr;
2629+ gctINT channel;
2630+}gcZBIAS_PATCH_PARAM, *gcZBIAS_PATCH_PARAM_PTR;
2631+
2632 void
2633 gcGetOptionFromEnv(
2634 IN OUT gcOPTIMIZER_OPTION * Option
2635@@ -1556,6 +1574,43 @@ gcSHADER_AddUniform(
2636 OUT gcUNIFORM * Uniform
2637 );
2638
2639+/*******************************************************************************
2640+** gcSHADER_AddPreRotationUniform
2641+********************************************************************************
2642+**
2643+** Add an uniform to a gcSHADER object.
2644+**
2645+** INPUT:
2646+**
2647+** gcSHADER Shader
2648+** Pointer to a gcSHADER object.
2649+**
2650+** gctCONST_STRING Name
2651+** Name of the uniform to add.
2652+**
2653+** gcSHADER_TYPE Type
2654+** Type of the uniform to add.
2655+**
2656+** gctSIZE_T Length
2657+** Array length of the uniform to add. 'Length' must be at least 1.
2658+**
2659+** gctINT col
2660+** Which uniform.
2661+**
2662+** OUTPUT:
2663+**
2664+** gcUNIFORM * Uniform
2665+** Pointer to a variable receiving the gcUNIFORM object pointer.
2666+*/
2667+gceSTATUS
2668+gcSHADER_AddPreRotationUniform(
2669+ IN gcSHADER Shader,
2670+ IN gctCONST_STRING Name,
2671+ IN gcSHADER_TYPE Type,
2672+ IN gctSIZE_T Length,
2673+ IN gctINT col,
2674+ OUT gcUNIFORM * Uniform
2675+ );
2676
2677 /*******************************************************************************
2678 ** gcSHADER_AddUniformEx
2679@@ -1677,6 +1732,28 @@ gcSHADER_GetUniformCount(
2680 );
2681
2682 /*******************************************************************************
2683+** gcSHADER_GetPreRotationUniform
2684+********************************************************************************
2685+**
2686+** Get the preRotate Uniform.
2687+**
2688+** INPUT:
2689+**
2690+** gcSHADER Shader
2691+** Pointer to a gcSHADER object.
2692+**
2693+** OUTPUT:
2694+**
2695+** gcUNIFORM ** pUniform
2696+** Pointer to a preRotation uniforms array.
2697+*/
2698+gceSTATUS
2699+gcSHADER_GetPreRotationUniform(
2700+ IN gcSHADER Shader,
2701+ OUT gcUNIFORM ** pUniform
2702+ );
2703+
2704+/*******************************************************************************
2705 ** gcSHADER_GetUniform
2706 ********************************************************************************
2707 **
2708@@ -3438,6 +3515,34 @@ gcUNIFORM_SetValueF(
2709 );
2710
2711 /*******************************************************************************
2712+** gcUNIFORM_ProgramF
2713+**
2714+** Set the value of a uniform in floating point.
2715+**
2716+** INPUT:
2717+**
2718+** gctUINT32 Address
2719+** Address of Uniform.
2720+**
2721+** gctSIZE_T Row/Col
2722+**
2723+** const gctFLOAT * Value
2724+** Pointer to a buffer holding the floating point values for the
2725+** uniform.
2726+**
2727+** OUTPUT:
2728+**
2729+** Nothing.
2730+*/
2731+gceSTATUS
2732+gcUNIFORM_ProgramF(
2733+ IN gctUINT32 Address,
2734+ IN gctSIZE_T Row,
2735+ IN gctSIZE_T Col,
2736+ IN const gctFLOAT * Value
2737+ );
2738+
2739+/*******************************************************************************
2740 ** gcUNIFORM_GetModelViewProjMatrix
2741 ********************************************************************************
2742 **
2743@@ -3912,6 +4017,23 @@ gcRecompileShaders(
2744 IN gctUINT32 *SamplerWrapS,
2745 IN gctUINT32 *SamplerWrapT
2746 );
2747+
2748+gceSTATUS
2749+gcRecompileDepthBias(
2750+ IN gcoHAL Hal,
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,
2756+ /* natvie state*/
2757+ IN gctPOINTER pNativeStateBuffer,
2758+ IN gctSIZE_T nativeStateBufferSize,
2759+ IN gcsHINT_PTR pNativeHints,
2760+ OUT gctINT * uniformAddr,
2761+ OUT gctINT * uniformChannel
2762+ );
2763+
2764 /*******************************************************************************
2765 ** gcSaveProgram
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 */
2769 );
2770
2771+gceSTATUS
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 */
2779+ );
2780+
2781 #ifdef __cplusplus
2782 }
2783 #endif
2784diff --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
2785index 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
2789
2790 /* Reset time stamp. */
2791 gcvHAL_QUERY_RESET_TIME_STAMP,
2792+
2793+ /* Sync point operations. */
2794+ gcvHAL_SYNC_POINT,
2795+
2796+ /* Create native fence and return its fd. */
2797+ gcvHAL_CREATE_NATIVE_FENCE,
2798 }
2799 gceHAL_COMMAND_CODES;
2800
2801@@ -723,6 +729,10 @@ typedef struct _gcsHAL_INTERFACE
2802 /* gcvHAL_READ_ALL_PROFILE_REGISTERS */
2803 struct _gcsHAL_READ_ALL_PROFILE_REGISTERS
2804 {
2805+#if VIVANTE_PROFILER_CONTEXT
2806+ /* Context buffer object gckCONTEXT. Just a name. */
2807+ IN gctUINT32 context;
2808+#endif
2809 /* Data read. */
2810 OUT gcsPROFILER_COUNTERS counters;
2811 }
2812@@ -978,6 +988,33 @@ typedef struct _gcsHAL_INTERFACE
2813 OUT gctUINT64 timeStamp;
2814 }
2815 QueryResetTimeStamp;
2816+
2817+ struct _gcsHAL_SYNC_POINT
2818+ {
2819+ /* Command. */
2820+ gceSYNC_POINT_COMMAND_CODES command;
2821+
2822+ /* Sync point. */
2823+ IN OUT gctUINT64 syncPoint;
2824+
2825+ /* From where. */
2826+ IN gceKERNEL_WHERE fromWhere;
2827+
2828+ /* Signaled state. */
2829+ OUT gctBOOL state;
2830+ }
2831+ SyncPoint;
2832+
2833+ struct _gcsHAL_CREATE_NATIVE_FENCE
2834+ {
2835+ /* Signal id to dup. */
2836+ IN gctUINT64 syncPoint;
2837+
2838+ /* Native fence file descriptor. */
2839+ OUT gctINT fenceFD;
2840+
2841+ }
2842+ CreateNativeFence;
2843 }
2844 u;
2845 }
2846diff --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
2847index 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
2852 );
2853
2854+gceSTATUS
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
2861+ );
2862+
2863 /* Resolve rectangular area of a surface. */
2864 gceSTATUS
2865 gcoSURF_ResolveRect(
2866@@ -345,6 +354,11 @@ gcoSURF_IsRenderable(
2867 IN gcoSURF Surface
2868 );
2869
2870+gceSTATUS
2871+gcoSURF_IsFormatRenderableAsRT(
2872+ IN gcoSURF Surface
2873+ );
2874+
2875 #if gcdSYNC
2876 gceSTATUS
2877 gcoSURF_GetFence(
2878@@ -1006,6 +1020,7 @@ typedef struct _gcsALPHA_INFO
2879 gctBOOL test;
2880 gceCOMPARE compare;
2881 gctUINT8 reference;
2882+ gctFLOAT floatReference;
2883
2884 /* Alpha blending states. */
2885 gctBOOL blend;
2886@@ -1040,7 +1055,8 @@ gco3D_SetAlphaCompare(
2887 gceSTATUS
2888 gco3D_SetAlphaReference(
2889 IN gco3D Engine,
2890- IN gctUINT8 Reference
2891+ IN gctUINT8 Reference,
2892+ IN gctFLOAT FloatReference
2893 );
2894
2895 /* Set alpha test reference in fixed point. */
2896@@ -1504,6 +1520,19 @@ gcoTEXTURE_UploadSub(
2897 IN gceSURF_FORMAT Format
2898 );
2899
2900+/* Upload YUV data to an gcoTEXTURE object. */
2901+gceSTATUS
2902+gcoTEXTURE_UploadYUV(
2903+ IN gcoTEXTURE Texture,
2904+ IN gceTEXTURE_FACE Face,
2905+ IN gctUINT Width,
2906+ IN gctUINT Height,
2907+ IN gctUINT Slice,
2908+ IN gctPOINTER Memory[3],
2909+ IN gctINT Stride[3],
2910+ IN gceSURF_FORMAT Format
2911+ );
2912+
2913 /* Upload compressed data to an gcoTEXTURE object. */
2914 gceSTATUS
2915 gcoTEXTURE_UploadCompressed(
2916@@ -1621,6 +1650,13 @@ gcoTEXTURE_QueryCaps(
2917 );
2918
2919 gceSTATUS
2920+gcoTEXTURE_GetTiling(
2921+ IN gcoTEXTURE Texture,
2922+ IN gctINT preferLevel,
2923+ OUT gceTILING * Tiling
2924+ );
2925+
2926+gceSTATUS
2927 gcoTEXTURE_GetClosestFormat(
2928 IN gcoHAL Hal,
2929 IN gceSURF_FORMAT InFormat,
2930@@ -2001,6 +2037,14 @@ gcoHAL_SetSharedInfo(
2931 IN gctSIZE_T Bytes
2932 );
2933
2934+#if VIVANTE_PROFILER_CONTEXT
2935+gceSTATUS
2936+gcoHARDWARE_GetContext(
2937+ IN gcoHARDWARE Hardware,
2938+ OUT gctUINT32 * Context
2939+ );
2940+#endif
2941+
2942 #ifdef __cplusplus
2943 }
2944 #endif
2945diff --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
2946index 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,
2973 }
2974 gceFEATURE;
2975
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 */
2982-#endif
2983 gcvSURF_TILE_STATUS_DIRTY = 0x1000, /* Init tile status to all dirty */
2984
2985+ gcvSURF_LINEAR = 0x2000,
2986+
2987+ gcvSURF_TEXTURE_LINEAR = gcvSURF_TEXTURE
2988+ | gcvSURF_LINEAR,
2989+
2990 gcvSURF_RENDER_TARGET_NO_TILE_STATUS = gcvSURF_RENDER_TARGET
2991 | gcvSURF_NO_TILE_STATUS,
2992
2993@@ -217,6 +236,9 @@ typedef enum _gceSURF_TYPE
2994 gcvSURF_DEPTH_NO_TILE_STATUS = gcvSURF_DEPTH
2995 | gcvSURF_NO_TILE_STATUS,
2996
2997+ gcvSURF_DEPTH_TS_DIRTY = gcvSURF_DEPTH
2998+ | gcvSURF_TILE_STATUS_DIRTY,
2999+
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,
3006
3007-#if gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
3008 gcvSURF_FLIP_BITMAP = gcvSURF_BITMAP
3009 | gcvSURF_FLIP,
3010-#endif
3011 }
3012 gceSURF_TYPE;
3013
3014@@ -263,6 +283,9 @@ typedef enum _gceSURF_ROTATION
3015 gcvSURF_270_DEGREE,
3016 gcvSURF_FLIP_X,
3017 gcvSURF_FLIP_Y,
3018+
3019+ gcvSURF_POST_FLIP_X = 0x40000000,
3020+ gcvSURF_POST_FLIP_Y = 0x80000000,
3021 }
3022 gceSURF_ROTATION;
3023
3024@@ -622,21 +645,16 @@ gce2D_PORTER_DUFF_RULE;
3025 typedef enum _gce2D_YUV_COLOR_MODE
3026 {
3027 gcv2D_YUV_601= 0,
3028- gcv2D_YUV_709
3029-}
3030-gce2D_YUV_COLOR_MODE;
3031+ gcv2D_YUV_709,
3032+ gcv2D_YUV_USER_DEFINED,
3033+ gcv2D_YUV_USER_DEFINED_CLAMP,
3034
3035-/* 2D Rotation and flipping. */
3036-typedef enum _gce2D_ORIENTATION
3037-{
3038- gcv2D_0_DEGREE = 0,
3039- gcv2D_90_DEGREE,
3040- gcv2D_180_DEGREE,
3041- gcv2D_270_DEGREE,
3042- gcv2D_X_FLIP,
3043- gcv2D_Y_FLIP
3044+ /* Default setting is for src. gcv2D_YUV_DST
3045+ can be ORed to set dst.
3046+ */
3047+ gcv2D_YUV_DST = 0x80000000,
3048 }
3049-gce2D_ORIENTATION;
3050+gce2D_YUV_COLOR_MODE;
3051
3052 typedef enum _gce2D_COMMAND
3053 {
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,
3059 }
3060 gce2D_TILE_STATUS_CONFIG;
3061
3062 typedef enum _gce2D_QUERY
3063 {
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,
3072 }
3073 gce2D_QUERY;
3074
3075+typedef enum _gce2D_SUPER_TILE_VERSION
3076+{
3077+ gcv2D_SUPER_TILE_VERSION_V1 = 1,
3078+ gcv2D_SUPER_TILE_VERSION_V2 = 2,
3079+ gcv2D_SUPER_TILE_VERSION_V3 = 3,
3080+}
3081+gce2D_SUPER_TILE_VERSION;
3082+
3083 typedef enum _gce2D_STATE
3084 {
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,
3090+
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,
3095 }
3096 gce2D_STATE;
3097
3098@@ -809,6 +845,15 @@ typedef enum _gceUSER_SIGNAL_COMMAND_CODES
3099 }
3100 gceUSER_SIGNAL_COMMAND_CODES;
3101
3102+/* Sync point command codes. */
3103+typedef enum _gceSYNC_POINT_COMMAND_CODES
3104+{
3105+ gcvSYNC_POINT_CREATE,
3106+ gcvSYNC_POINT_DESTROY,
3107+ gcvSYNC_POINT_SIGNAL,
3108+}
3109+gceSYNC_POINT_COMMAND_CODES;
3110+
3111 /* Event locations. */
3112 typedef enum _gceKERNEL_WHERE
3113 {
3114@@ -848,6 +893,44 @@ typedef enum _gceDEBUG_MESSAGE_TYPE
3115 }
3116 gceDEBUG_MESSAGE_TYPE;
3117
3118+typedef enum _gceSPECIAL_HINT
3119+{
3120+ gceSPECIAL_HINT0,
3121+ gceSPECIAL_HINT1,
3122+ gceSPECIAL_HINT2,
3123+ gceSPECIAL_HINT3,
3124+ /* For disable dynamic stream/index */
3125+ gceSPECIAL_HINT4
3126+}
3127+gceSPECIAL_HINT;
3128+
3129+typedef enum _gceMACHINECODE
3130+{
3131+ gcvMACHINECODE_HOVERJET0 = 0x0,
3132+ gcvMACHINECODE_HOVERJET1 ,
3133+
3134+ gcvMACHINECODE_TAIJI0 ,
3135+ gcvMACHINECODE_TAIJI1 ,
3136+ gcvMACHINECODE_TAIJI2 ,
3137+
3138+ gcvMACHINECODE_ANTUTU0 ,
3139+
3140+ gcvMACHINECODE_GLB27_RELEASE_0,
3141+ gcvMACHINECODE_GLB27_RELEASE_1,
3142+
3143+ gcvMACHINECODE_WAVESCAPE0 ,
3144+ gcvMACHINECODE_WAVESCAPE1 ,
3145+
3146+ gcvMACHINECODE_NENAMARKV2_4_0 ,
3147+ gcvMACHINECODE_NENAMARKV2_4_1 ,
3148+
3149+ gcvMACHINECODE_GLB25_RELEASE_0,
3150+ gcvMACHINECODE_GLB25_RELEASE_1,
3151+ gcvMACHINECODE_GLB25_RELEASE_2,
3152+}
3153+gceMACHINECODE;
3154+
3155+
3156 /******************************************************************************\
3157 ****************************** Object Declarations *****************************
3158 \******************************************************************************/
3159diff --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
3160index 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
3163@@ -46,7 +46,7 @@
3164 This define enables the profiler.
3165 */
3166 #ifndef VIVANTE_PROFILER
3167-# define VIVANTE_PROFILER 0
3168+# define VIVANTE_PROFILER 1
3169 #endif
3170
3171 #ifndef VIVANTE_PROFILER_PERDRAW
3172@@ -54,6 +54,15 @@
3173 #endif
3174
3175 /*
3176+ VIVANTE_PROFILER_CONTEXT
3177+
3178+ This define enables the profiler according to each hw context.
3179+*/
3180+#ifndef VIVANTE_PROFILER_CONTEXT
3181+# define VIVANTE_PROFILER_CONTEXT 1
3182+#endif
3183+
3184+/*
3185 gcdUSE_VG
3186
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.
3190 */
3191 #ifndef gcdGPU_LINEAR_BUFFER_ENABLED
3192-# define gcdGPU_LINEAR_BUFFER_ENABLED 0
3193+# define gcdGPU_LINEAR_BUFFER_ENABLED 1
3194+#endif
3195+
3196+/*
3197+ gcdENABLE_RENDER_INTO_WINDOW
3198+
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
3203+ to normal mode.
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'.
3208+*/
3209+#ifndef gcdENABLE_RENDER_INTO_WINDOW
3210+# define gcdENABLE_RENDER_INTO_WINDOW 1
3211 #endif
3212
3213 /*
3214@@ -758,7 +784,11 @@
3215 #endif
3216
3217 #ifndef gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
3218-# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 0
3219+# ifdef ANDROID
3220+# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 1
3221+# else
3222+# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 0
3223+# endif
3224 #endif
3225
3226 #ifndef gcdENABLE_PE_DITHER_FIX
3227@@ -800,6 +830,10 @@
3228 # define gcdDISALBE_EARLY_EARLY_Z 1
3229 #endif
3230
3231+#ifndef gcdSHADER_SRC_BY_MACHINECODE
3232+# define gcdSHADER_SRC_BY_MACHINECODE 1
3233+#endif
3234+
3235 /*
3236 gcdLINK_QUEUE_SIZE
3237
3238@@ -849,11 +883,20 @@
3239 #define gcdUSE_NPOT_PATCH 1
3240 #endif
3241
3242-
3243 #ifndef gcdSYNC
3244 # define gcdSYNC 1
3245 #endif
3246
3247+#ifndef gcdENABLE_SPECIAL_HINT3
3248+# define gcdENABLE_SPECIAL_HINT3 1
3249+#endif
3250+
3251+#if defined(ANDROID)
3252+#ifndef gcdPRE_ROTATION
3253+# define gcdPRE_ROTATION 1
3254+#endif
3255+#endif
3256+
3257 /*
3258 gcdDVFS
3259
3260@@ -866,4 +909,39 @@
3261 # define gcdDVFS_POLLING_TIME (gcdDVFS_ANAYLSE_WINDOW * 4)
3262 #endif
3263
3264+/*
3265+ gcdANDROID_NATIVE_FENCE_SYNC
3266+
3267+ Enable android native fence sync. It is introduced since jellybean-4.2.
3268+ Depends on linux kernel option: CONFIG_SYNC.
3269+
3270+ 0: Disabled
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
3280+ */
3281+#ifndef gcdANDROID_NATIVE_FENCE_SYNC
3282+# define gcdANDROID_NATIVE_FENCE_SYNC 0
3283+#endif
3284+
3285+#ifndef gcdFORCE_MIPMAP
3286+# define gcdFORCE_MIPMAP 0
3287+#endif
3288+
3289+/*
3290+ gcdFORCE_GAL_LOAD_TWICE
3291+
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.
3294+ */
3295+#ifndef gcdFORCE_GAL_LOAD_TWICE
3296+# define gcdFORCE_GAL_LOAD_TWICE 0
3297+#endif
3298+
3299 #endif /* __gc_hal_options_h_ */
3300diff --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
3301index 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
3306 #endif
3307
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)
3465-
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)
3631-
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)
3731+
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)
3738+
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. */
3745
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)
3759-
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)
3765-
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)
3770-
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)
3775-
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)
3782-
3783-#define SE_TRIANGLECOUNT 1
3784-#define SE_LINECOUNT (SE_TRIANGLECOUNT + 1)
3785-
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)
3793-
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)
3803-
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)
3808-
3809-#define MC_READREQ8BPIPE 1
3810-#define MC_READREQ8BIP (MC_READREQ8BPIPE + 1)
3811-#define MC_WRITEREQ8BPIPE (MC_READREQ8BIP + 1)
3812-
3813-#define AXI_READREQSTALLED 1
3814-#define AXI_WRITEREQSTALLED (AXI_READREQSTALLED + 1)
3815-#define AXI_WRITEDATASTALLED (AXI_WRITEREQSTALLED + 1)
3816-
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)
3823-
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)
3842+
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)
3848+
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)
3854+
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)
3860+
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)
3867+
3868+#define SE_TRIANGLECOUNT 1
3869+#define SE_LINECOUNT (SE_TRIANGLECOUNT + 1)
3870+
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)
3878+
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)
3888+
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)
3893+
3894+#define MC_READREQ8BPIPE 1
3895+#define MC_READREQ8BIP (MC_READREQ8BPIPE + 1)
3896+#define MC_WRITEREQ8BPIPE (MC_READREQ8BIP + 1)
3897+
3898+#define AXI_READREQSTALLED 1
3899+#define AXI_WRITEREQSTALLED (AXI_READREQSTALLED + 1)
3900+#define AXI_WRITEDATASTALLED (AXI_WRITEREQSTALLED + 1)
3901+
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)
3909+
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. */
3918
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
3929
3930 /* Info. */
3931@@ -592,7 +198,7 @@ extern "C" {
3932 #define VPC_INFOSCREENSIZE (VPC_INFODRIVERMODE + 1)
3933
3934 /* Counter Constants. */
3935-#define VPC_ELAPSETIME (VPG_TIME + 1)
3936+#define VPC_ELAPSETIME (VPG_TIME + 1)
3937 #define VPC_CPUTIME (VPC_ELAPSETIME + 1)
3938
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)
3943
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)
4096-
4097-/* OpenGLES 2.x */
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)
4246+
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)
4254-
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)
4349+
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)
4361
4362 /* HAL Counters. */
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)
4370
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)
4376 /* HW: PS Count. */
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)
4384
4385
4386@@ -1071,7 +301,7 @@ extern "C" {
4387 #define VPC_PEDRAWNBYDEPTH (VPG_PE + PE_DRAWNBYDEPTH)
4388
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)
4394
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)
4400
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)
4408
4409+#define VPC_PROGRAMHANDLE (VPG_PROG + 1)
4410
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
4414
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;
4423
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;
4430
4431 /* TX */
4432 gctUINT32 tx_total_bilinear_requests;
4433@@ -1190,7 +423,7 @@ typedef struct _gcsPROFILER
4434 gctBOOL enableHal;
4435 gctBOOL enableHW;
4436 gctBOOL enableSH;
4437- gctBOOL isSyncMode;
4438+ gctBOOL isSyncMode;
4439
4440 gctBOOL useSocket;
4441 gctINT sockFd;
4442@@ -1234,14 +467,17 @@ typedef struct _gcsPROFILER
4443 gctUINT32 redundantStateChangeCalls;
4444 #endif
4445
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;
4462+
4463+ char* psSource;
4464+ char* vsSource;
4465
4466 }
4467 gcsPROFILER;
4468@@ -1315,6 +551,18 @@ gcoPROFILER_Count(
4469 IN gctINT Value
4470 );
4471
4472+gceSTATUS
4473+gcoPROFILER_ShaderSourceFS(
4474+ IN gcoHAL Hal,
4475+ IN char* source
4476+ );
4477+
4478+gceSTATUS
4479+gcoPROFILER_ShaderSourceVS(
4480+ IN gcoHAL Hal,
4481+ IN char* source
4482+ );
4483+
4484 /* Profile input vertex shader. */
4485 gceSTATUS
4486 gcoPROFILER_ShaderVS(
4487diff --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
4488index 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
4493 );
4494
4495+gceSTATUS
4496+gco2D_MonoBlitEx(
4497+ IN gco2D Engine,
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,
4509+ IN gctUINT8 BgRop
4510+ );
4511+
4512 /* Set kernel size. */
4513 gceSTATUS
4514 gco2D_SetKernelSize(
4515@@ -942,6 +959,15 @@ gco2D_SetSourceTileStatus(
4516 );
4517
4518 gceSTATUS
4519+gco2D_SetTargetTileStatus(
4520+ IN gco2D Engine,
4521+ IN gce2D_TILE_STATUS_CONFIG TileStatusConfig,
4522+ IN gceSURF_FORMAT CompressedFormat,
4523+ IN gctUINT32 ClearValue,
4524+ IN gctUINT32 GpuAddress
4525+ );
4526+
4527+gceSTATUS
4528 gco2D_QueryU32(
4529 IN gco2D Engine,
4530 IN gce2D_QUERY Item,
4531@@ -955,6 +981,28 @@ gco2D_SetStateU32(
4532 IN gctUINT32 Value
4533 );
4534
4535+gceSTATUS
4536+gco2D_SetStateArrayI32(
4537+ IN gco2D Engine,
4538+ IN gce2D_STATE State,
4539+ IN gctINT32_PTR Array,
4540+ IN gctINT32 ArraySize
4541+ );
4542+
4543+gceSTATUS
4544+gco2D_SetStateArrayU32(
4545+ IN gco2D Engine,
4546+ IN gce2D_STATE State,
4547+ IN gctUINT32_PTR Array,
4548+ IN gctINT32 ArraySize
4549+ );
4550+
4551+gceSTATUS
4552+gco2D_SetTargetRect(
4553+ IN gco2D Engine,
4554+ IN gcsRECT_PTR Rect
4555+ );
4556+
4557 #ifdef __cplusplus
4558 }
4559 #endif
4560diff --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
4561index 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;
4566
4567 typedef int gctINT;
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;
4577
4578 typedef void * gctSEMAPHORE;
4579
4580@@ -941,12 +943,19 @@ typedef struct _gcsHAL_FRAME_INFO
4581 OUT gctUINT readRequests[8];
4582 OUT gctUINT writeRequests[8];
4583
4584+ /* FE counters. */
4585+ OUT gctUINT drawCount;
4586+ OUT gctUINT vertexOutCount;
4587+ OUT gctUINT vertexMissCount;
4588+
4589 /* 3D counters. */
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;
4610
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;
4618 }
4619 gcsHAL_FRAME_INFO;
4620
4621+typedef enum _gcePATCH_ID
4622+{
4623+ gcePATCH_UNKNOWN = 0xFFFFFFFF,
4624+
4625+ /* Benchmark list*/
4626+ gcePATCH_GLB11 = 0x0,
4627+ gcePATCH_GLB21,
4628+ gcePATCH_GLB25,
4629+ gcePATCH_GLB27,
4630+
4631+ gcePATCH_BM21,
4632+ gcePATCH_MM,
4633+ gcePATCH_MM06,
4634+ gcePATCH_MM07,
4635+ gcePATCH_QUADRANT,
4636+ gcePATCH_ANTUTU,
4637+ gcePATCH_SMARTBENCH,
4638+ gcePATCH_JPCT,
4639+ gcePATCH_NENAMARK,
4640+ gcePATCH_NENAMARK2,
4641+ gcePATCH_NEOCORE,
4642+ gcePATCH_GLB,
4643+ gcePATCH_GB,
4644+ gcePATCH_RTESTVA,
4645+ gcePATCH_BMX,
4646+ gcePATCH_BMGUI,
4647+
4648+ /* Game list */
4649+ gcePATCH_NBA2013,
4650+ gcePATCH_BARDTALE,
4651+ gcePATCH_BUSPARKING3D,
4652+ gcePATCH_FISHBOODLE,
4653+ gcePATCH_SUBWAYSURFER,
4654+ gcePATCH_HIGHWAYDRIVER,
4655+ gcePATCH_PREMIUM,
4656+ gcePATCH_RACEILLEGAL,
4657+ gcePATCH_BLABLA,
4658+ gcePATCH_MEGARUN,
4659+ gcePATCH_GALAXYONFIRE2,
4660+ gcePATCH_GLOFTR3HM,
4661+ gcePATCH_GLOFTSXHM,
4662+ gcePATCH_GLOFTF3HM,
4663+ gcePATCH_GLOFTGANG,
4664+ gcePATCH_XRUNNER,
4665+ gcePATCH_WP,
4666+ gcePATCH_DEVIL,
4667+ gcePATCH_HOLYARCH,
4668+ gcePATCH_MUSE,
4669+ gcePATCH_SG,
4670+ gcePATCH_SIEGECRAFT,
4671+ gcePATCH_CARCHALLENGE,
4672+ gcePATCH_HEROESCALL,
4673+ gcePATCH_MONOPOLY,
4674+ gcePATCH_CTGL20,
4675+ gcePATCH_FIREFOX,
4676+ gcePATCH_CHORME,
4677+ gcePATCH_DUOKANTV,
4678+ gcePATCH_TESTAPP,
4679+
4680+ /* Count enum*/
4681+ gcePATCH_COUNT,
4682+}
4683+gcePATCH_ID;
4684+
4685 #if gcdLINK_QUEUE_SIZE
4686 typedef struct _gckLINKDATA * gckLINKDATA;
4687 struct _gckLINKDATA
4688diff --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
4689index 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
4692@@ -28,7 +28,7 @@
4693
4694 #define gcvVERSION_PATCH 9
4695
4696-#define gcvVERSION_BUILD 6622
4697+#define gcvVERSION_BUILD 9754
4698
4699 #define gcvVERSION_DATE __DATE__
4700
4701diff --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
4702index 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
4705@@ -25,7 +25,9 @@
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>
4711+#endif
4712 #include <linux/pm_runtime.h>
4713
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
4721 )
4722 {
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");
4729+#endif
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
4736 ));
4737
4738+ gcmkONERROR(gckHARDWARE_SetGpuProfiler(
4739+ device->kernels[gcvCORE_MAJOR]->hardware, GpuProfiler
4740+ ));
4741+
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
4747 ));
4748
4749+
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,
4755 PowerManagement
4756 ));
4757+
4758 #endif
4759 }
4760 else
4761@@ -849,6 +862,7 @@ gckGALDEVICE_Construct(
4762 }
4763 else
4764 {
4765+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
4766 mem_region = request_mem_region(
4767 ContiguousBase, ContiguousSize, "galcore managed memory"
4768 );
4769@@ -864,6 +878,7 @@ gckGALDEVICE_Construct(
4770
4771 gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
4772 }
4773+#endif
4774
4775 device->requestedContiguousBase = ContiguousBase;
4776 device->requestedContiguousSize = ContiguousSize;
4777@@ -1107,7 +1122,7 @@ gckGALDEVICE_Destroy(
4778 pm_runtime_disable(Device->pmdev);
4779 #endif
4780
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;
4786diff --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
4787index 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
4790@@ -26,6 +26,15 @@
4791 ******************************* gckGALDEVICE Structure *******************************
4792 \******************************************************************************/
4793
4794+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4795+struct contiguous_mem_pool {
4796+ struct dma_attrs attrs;
4797+ dma_addr_t phys;
4798+ void *virt;
4799+ size_t size;
4800+};
4801+#endif
4802+
4803 typedef struct _gckGALDEVICE
4804 {
4805 /* Objects. */
4806@@ -91,12 +100,16 @@ typedef struct _gckGALDEVICE
4807 struct clk *clk_2d_axi;
4808 struct clk *clk_vg_axi;
4809
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;
4814 #endif
4815 /*Run time pm*/
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];
4820+#endif
4821 }
4822 * gckGALDEVICE;
4823
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
4830 );
4831
4832diff --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
4833index 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
4836@@ -1,7 +1,7 @@
4837 /****************************************************************************
4838 *
4839 * Copyright (C) 2005 - 2013 by Vivante Corp.
4840-* Copyright (C) 2011-2012 Freescale Semiconductor, Inc.
4841+* Copyright (C) 2011-2013 Freescale Semiconductor, Inc.
4842 *
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>
4847 #else
4848 #include <linux/pm_runtime.h>
4849+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
4850 #include <mach/busfreq.h>
4851+#else
4852+#include <linux/reset.h>
4853+#endif
4854 #endif
4855 /* Zone used for header/footer. */
4856 #define _GC_OBJ_ZONE gcvZONE_DRIVER
4857
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);
4863+#else
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);
4868+#endif
4869 #endif
4870
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);
4875
4876+#if gcdENABLE_FSCALE_VAL_ADJUST
4877+static ulong contiguousSize = 128 << 20;
4878+#else
4879 static ulong contiguousSize = 4 << 20;
4880+#endif
4881 module_param(contiguousSize, ulong, 0644);
4882
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);
4887
4888+static int gpuProfiler = 0;
4889+module_param(gpuProfiler, int, 0644);
4890+
4891 static int signal = 48;
4892 module_param(signal, int, 0644);
4893
4894@@ -786,7 +805,9 @@ static int drv_init(struct device *pdev)
4895
4896 printk(KERN_INFO "Galcore version %d.%d.%d.%d\n",
4897 gcvVERSION_MAJOR, gcvVERSION_MINOR, gcvVERSION_PATCH, gcvVERSION_BUILD);
4898-
4899+ /* when enable gpu profiler, we need to turn off gpu powerMangement */
4900+ if(gpuProfiler)
4901+ powerManagement = 0;
4902 if (showArgs)
4903 {
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);
4912 #endif
4913@@ -841,9 +863,14 @@ static int drv_init(struct device *pdev)
4914 logFileSize,
4915 pdev,
4916 powerManagement,
4917+ gpuProfiler,
4918 &device
4919 ));
4920
4921+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4922+ device->pool = dev_get_drvdata(pdev);
4923+#endif
4924+
4925 /* Start the GAL device. */
4926 gcmkONERROR(gckGALDEVICE_Start(device));
4927
4928@@ -1028,11 +1055,18 @@ static struct notifier_block thermal_hot_pm_notifier = {
4929
4930
4931
4932+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
4933+static int gpu_probe(struct platform_device *pdev)
4934+#else
4935 static int __devinit gpu_probe(struct platform_device *pdev)
4936+#endif
4937 {
4938 int ret = -ENODEV;
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;
4946 const u32 *prop;
4947 #else
4948@@ -1077,7 +1111,22 @@ static int __devinit gpu_probe(struct platform_device *pdev)
4949 registerMemSizeVG = res->end - res->start + 1;
4950 }
4951
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);
4955+ if (!pool)
4956+ return -ENOMEM;
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");
4964+ return -ENOMEM;
4965+ }
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);
4970 if(prop)
4971 contiguousBase = *prop;
4972@@ -1095,30 +1144,56 @@ static int __devinit gpu_probe(struct platform_device *pdev)
4973
4974 if (!ret)
4975 {
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;
4979+
4980+ rstc = devm_reset_control_get(&pdev->dev, "gpu2d");
4981+ galDevice->rstc[gcvCORE_2D] = IS_ERR(rstc) ? NULL : rstc;
4982+
4983+ rstc = devm_reset_control_get(&pdev->dev, "gpuvg");
4984+ galDevice->rstc[gcvCORE_VG] = IS_ERR(rstc) ? NULL : rstc;
4985+#endif
4986 platform_set_drvdata(pdev, galDevice);
4987
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);
4993 #endif
4994 gcmkFOOTER_NO();
4995 return ret;
4996 }
4997 #if gcdENABLE_FSCALE_VAL_ADJUST
4998- unregister_thermal_notifier(&thermal_hot_pm_notifier);
4999+ UNREG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
5000+#endif
5001+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5002+ dma_free_attrs(&pdev->dev, pool->size, pool->virt, pool->phys,
5003+ &pool->attrs);
5004 #endif
5005 gcmkFOOTER_ARG(KERN_INFO "Failed to register gpu driver: %d\n", ret);
5006 return ret;
5007 }
5008
5009+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
5010+static int gpu_remove(struct platform_device *pdev)
5011+#else
5012 static int __devexit gpu_remove(struct platform_device *pdev)
5013+#endif
5014 {
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;
5018+#endif
5019 gcmkHEADER();
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);
5024 #endif
5025 drv_exit();
5026+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5027+ dma_free_attrs(&pdev->dev, pool->size, pool->virt, pool->phys,
5028+ &pool->attrs);
5029+#endif
5030 gcmkFOOTER_NO();
5031 return 0;
5032 }
5033@@ -1254,13 +1329,17 @@ MODULE_DEVICE_TABLE(of, mxs_gpu_dt_ids);
5034 #ifdef CONFIG_PM
5035 static int gpu_runtime_suspend(struct device *dev)
5036 {
5037+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
5038 release_bus_freq(BUS_FREQ_HIGH);
5039+#endif
5040 return 0;
5041 }
5042
5043 static int gpu_runtime_resume(struct device *dev)
5044 {
5045+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
5046 request_bus_freq(BUS_FREQ_HIGH);
5047+#endif
5048 return 0;
5049 }
5050
5051@@ -1284,7 +1363,11 @@ static const struct dev_pm_ops gpu_pm_ops = {
5052
5053 static struct platform_driver gpu_driver = {
5054 .probe = gpu_probe,
5055+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
5056+ .remove = gpu_remove,
5057+#else
5058 .remove = __devexit_p(gpu_remove),
5059+#endif
5060
5061 .suspend = gpu_suspend,
5062 .resume = gpu_resume,
5063diff --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
5064index 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
5067@@ -30,19 +30,30 @@
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>
5073+#endif
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>
5078 #endif
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>
5085 #endif
5086 #include <linux/delay.h>
5087 #include <linux/pm_runtime.h>
5088
5089
5090+#if gcdANDROID_NATIVE_FENCE_SYNC
5091+#include <linux/file.h>
5092+#include "gc_hal_kernel_sync.h"
5093+#endif
5094+
5095+
5096 #define _GC_OBJ_ZONE gcvZONE_OS
5097
5098 /*******************************************************************************
5099@@ -148,6 +159,7 @@ typedef struct _gcsINTEGER_DB
5100 {
5101 struct idr idr;
5102 spinlock_t lock;
5103+ gctINT curr;
5104 }
5105 gcsINTEGER_DB;
5106
5107@@ -180,6 +192,14 @@ struct _gckOS
5108 /* signal id database. */
5109 gcsINTEGER_DB signalDB;
5110
5111+#if gcdANDROID_NATIVE_FENCE_SYNC
5112+ /* Lock. */
5113+ gctPOINTER syncPointMutex;
5114+
5115+ /* sync point id database. */
5116+ gcsINTEGER_DB syncPointDB;
5117+#endif
5118+
5119 gcsUSER_MAPPING_PTR userMap;
5120 gctPOINTER debugLock;
5121
5122@@ -215,6 +235,25 @@ typedef struct _gcsSIGNAL
5123 }
5124 gcsSIGNAL;
5125
5126+#if gcdANDROID_NATIVE_FENCE_SYNC
5127+typedef struct _gcsSYNC_POINT * gcsSYNC_POINT_PTR;
5128+typedef struct _gcsSYNC_POINT
5129+{
5130+ /* The reference counter. */
5131+ atomic_t ref;
5132+
5133+ /* State. */
5134+ atomic_t state;
5135+
5136+ /* timeline. */
5137+ struct sync_timeline * timeline;
5138+
5139+ /* ID. */
5140+ gctUINT32 id;
5141+}
5142+gcsSYNC_POINT;
5143+#endif
5144+
5145 typedef struct _gcsPageInfo * gcsPageInfo_PTR;
5146 typedef struct _gcsPageInfo
5147 {
5148@@ -767,7 +806,32 @@ _AllocateIntegerId(
5149 )
5150 {
5151 int result;
5152+ gctINT next;
5153+
5154+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
5155+ idr_preload(GFP_KERNEL | gcdNOWARN);
5156
5157+ spin_lock(&Database->lock);
5158+
5159+ next = (Database->curr + 1 <= 0) ? 1 : Database->curr + 1;
5160+ result = idr_alloc(&Database->idr, KernelPointer, next, 0, GFP_ATOMIC);
5161+
5162+ if (!result)
5163+ {
5164+ Database->curr = *Id;
5165+ }
5166+
5167+ spin_unlock(&Database->lock);
5168+
5169+ idr_preload_end();
5170+
5171+ if (result < 0)
5172+ {
5173+ return gcvSTATUS_OUT_OF_RESOURCES;
5174+ }
5175+
5176+ *Id = result;
5177+#else
5178 again:
5179 if (idr_pre_get(&Database->idr, GFP_KERNEL | gcdNOWARN) == 0)
5180 {
5181@@ -776,8 +840,15 @@ again:
5182
5183 spin_lock(&Database->lock);
5184
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;
5188+
5189+ /* Try to get a id greater than current id. */
5190+ result = idr_get_new_above(&Database->idr, KernelPointer, next, Id);
5191+
5192+ if (!result)
5193+ {
5194+ Database->curr = *Id;
5195+ }
5196
5197 spin_unlock(&Database->lock);
5198
5199@@ -790,6 +861,7 @@ again:
5200 {
5201 return gcvSTATUS_OUT_OF_RESOURCES;
5202 }
5203+#endif
5204
5205 return gcvSTATUS_OK;
5206 }
5207@@ -1008,6 +1080,21 @@ gckOS_Construct(
5208 /* Initialize signal id database. */
5209 idr_init(&os->signalDB.idr);
5210
5211+#if gcdANDROID_NATIVE_FENCE_SYNC
5212+ /*
5213+ * Initialize the sync point manager.
5214+ */
5215+
5216+ /* Initialize mutex. */
5217+ gcmkONERROR(gckOS_CreateMutex(os, &os->syncPointMutex));
5218+
5219+ /* Initialize sync point id database lock. */
5220+ spin_lock_init(&os->syncPointDB.lock);
5221+
5222+ /* Initialize sync point id database. */
5223+ idr_init(&os->syncPointDB.idr);
5224+#endif
5225+
5226 #if gcdUSE_NON_PAGED_MEMORY_CACHE
5227 os->cacheSize = 0;
5228 os->cacheHead = gcvNULL;
5229@@ -1031,6 +1118,15 @@ gckOS_Construct(
5230 return gcvSTATUS_OK;
5231
5232 OnError:
5233+
5234+#if gcdANDROID_NATIVE_FENCE_SYNC
5235+ if (os->syncPointMutex != gcvNULL)
5236+ {
5237+ gcmkVERIFY_OK(
5238+ gckOS_DeleteMutex(os, os->syncPointMutex));
5239+ }
5240+#endif
5241+
5242 if (os->signalMutex != gcvNULL)
5243 {
5244 gcmkVERIFY_OK(
5245@@ -1104,6 +1200,15 @@ gckOS_Destroy(
5246 _FreeAllNonPagedMemoryCache(Os);
5247 #endif
5248
5249+#if gcdANDROID_NATIVE_FENCE_SYNC
5250+ /*
5251+ * Destroy the sync point manager.
5252+ */
5253+
5254+ /* Destroy the mutex. */
5255+ gcmkVERIFY_OK(gckOS_DeleteMutex(Os, Os->syncPointMutex));
5256+#endif
5257+
5258 /*
5259 * Destroy the signal manager.
5260 */
5261@@ -1961,12 +2066,6 @@ gckOS_AllocateNonPagedMemory(
5262 gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5263 }
5264
5265- if ((Os->device->baseAddress & 0x80000000) != (mdl->dmaHandle & 0x80000000))
5266- {
5267- mdl->dmaHandle = (mdl->dmaHandle & ~0x80000000)
5268- | (Os->device->baseAddress & 0x80000000);
5269- }
5270-
5271 mdl->addr = addr;
5272
5273 /* Return allocated memory. */
5274@@ -2307,6 +2406,7 @@ gckOS_ReadRegisterEx(
5275
5276 /* Verify the arguments. */
5277 gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5278+ gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
5279 gcmkVERIFY_ARGUMENT(Data != gcvNULL);
5280
5281 *Data = readl((gctUINT8 *)Os->device->registerBases[Core] + Address);
5282@@ -2357,6 +2457,8 @@ gckOS_WriteRegisterEx(
5283 {
5284 gcmkHEADER_ARG("Os=0x%X Core=%d Address=0x%X Data=0x%08x", Os, Core, Address, Data);
5285
5286+ gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
5287+
5288 writel(Data, (gctUINT8 *)Os->device->registerBases[Core] + Address);
5289
5290 /* Success. */
5291@@ -2799,16 +2901,25 @@ gckOS_MapPhysical(
5292
5293 if (mdl == gcvNULL)
5294 {
5295+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5296+ struct contiguous_mem_pool *pool = Os->device->pool;
5297+
5298+ if (Physical >= pool->phys && Physical < pool->phys + pool->size)
5299+ logical = (gctPOINTER)(Physical - pool->phys + pool->virt);
5300+ else
5301+ logical = gcvNULL;
5302+#else
5303 /* Map memory as cached memory. */
5304 request_mem_region(physical, Bytes, "MapRegion");
5305 logical = (gctPOINTER) ioremap_nocache(physical, Bytes);
5306+#endif
5307
5308 if (logical == gcvNULL)
5309 {
5310 gcmkTRACE_ZONE(
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
5316 );
5317
5318 MEMORY_UNLOCK(Os);
5319@@ -3621,7 +3732,7 @@ gckOS_Delay(
5320 if (Delay > 0)
5321 {
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);
5327 #else
5328@@ -3881,8 +3992,13 @@ gckOS_AllocatePagedMemoryEx(
5329
5330 if (Contiguous)
5331 {
5332- /* Get contiguous pages, and suppress warning (stack dump) from kernel when
5333- we run out of memory. */
5334+ gctUINT32 order = get_order(bytes);
5335+
5336+ if (order >= MAX_ORDER)
5337+ {
5338+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5339+ }
5340+
5341 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
5342 addr =
5343 alloc_pages_exact(numPages * PAGE_SIZE, GFP_KERNEL | gcdNOWARN | __GFP_NORETRY);
5344@@ -3894,12 +4010,12 @@ gckOS_AllocatePagedMemoryEx(
5345 mdl->exact = gcvTRUE;
5346 #else
5347 mdl->u.contiguousPages =
5348- alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, GetOrder(numPages));
5349+ alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, order);
5350 #endif
5351 if (mdl->u.contiguousPages == gcvNULL)
5352 {
5353 mdl->u.contiguousPages =
5354- alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, GetOrder(numPages));
5355+ alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, order);
5356
5357 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
5358 mdl->exact = gcvFALSE;
5359@@ -4239,13 +4355,13 @@ gckOS_LockPages(
5360 }
5361
5362 mdlMap->vma->vm_flags |= gcdVM_FLAGS;
5363-#if !gcdPAGED_MEMORY_CACHEABLE
5364+
5365 if (Cacheable == gcvFALSE)
5366 {
5367 /* Make this mapping non-cached. */
5368 mdlMap->vma->vm_page_prot = gcmkPAGED_MEMROY_PROT(mdlMap->vma->vm_page_prot);
5369 }
5370-#endif
5371+
5372 addr = mdl->addr;
5373
5374 /* Now map all the vmalloc pages to this user address. */
5375@@ -5336,6 +5452,7 @@ OnError:
5376 {
5377 /* Get the user pages. */
5378 down_read(&current->mm->mmap_sem);
5379+
5380 result = get_user_pages(current,
5381 current->mm,
5382 memory & PAGE_MASK,
5383@@ -5345,105 +5462,127 @@ OnError:
5384 pages,
5385 gcvNULL
5386 );
5387+
5388 up_read(&current->mm->mmap_sem);
5389
5390 if (result <=0 || result < pageCount)
5391 {
5392 struct vm_area_struct *vma;
5393
5394- /* Free the page table. */
5395- if (pages != gcvNULL)
5396+ /* Release the pages if any. */
5397+ if (result > 0)
5398 {
5399- /* Release the pages if any. */
5400- if (result > 0)
5401+ for (i = 0; i < result; i++)
5402 {
5403- for (i = 0; i < result; i++)
5404+ if (pages[i] == gcvNULL)
5405 {
5406- if (pages[i] == gcvNULL)
5407- {
5408- break;
5409- }
5410-
5411- page_cache_release(pages[i]);
5412+ break;
5413 }
5414+
5415+ page_cache_release(pages[i]);
5416+ pages[i] = gcvNULL;
5417 }
5418
5419- kfree(pages);
5420- pages = gcvNULL;
5421+ result = 0;
5422 }
5423
5424 vma = find_vma(current->mm, memory);
5425
5426- if (vma && (vma->vm_flags & VM_PFNMAP) )
5427+ if (vma && (vma->vm_flags & VM_PFNMAP))
5428 {
5429 pte_t * pte;
5430 spinlock_t * ptl;
5431- unsigned long pfn;
5432+ gctUINTPTR_T logical = memory;
5433
5434- pgd_t * pgd = pgd_offset(current->mm, memory);
5435- pud_t * pud = pud_offset(pgd, memory);
5436- if (pud)
5437+ for (i = 0; i < pageCount; i++)
5438 {
5439- pmd_t * pmd = pmd_offset(pud, memory);
5440- pte = pte_offset_map_lock(current->mm, pmd, memory, &ptl);
5441- if (!pte)
5442+ pgd_t * pgd = pgd_offset(current->mm, logical);
5443+ pud_t * pud = pud_offset(pgd, logical);
5444+
5445+ if (pud)
5446+ {
5447+ pmd_t * pmd = pmd_offset(pud, logical);
5448+ pte = pte_offset_map_lock(current->mm, pmd, logical, &ptl);
5449+ if (!pte)
5450+ {
5451+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5452+ }
5453+ }
5454+ else
5455 {
5456 gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5457 }
5458+
5459+ pages[i] = pte_page(*pte);
5460+ pte_unmap_unlock(pte, ptl);
5461+
5462+ /* Advance to next. */
5463+ logical += PAGE_SIZE;
5464 }
5465- else
5466+ }
5467+ else
5468+ {
5469+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5470+ }
5471+
5472+ /* Check if this memory is contiguous for old mmu. */
5473+ if (Os->device->kernels[Core]->hardware->mmuVersion == 0)
5474+ {
5475+ for (i = 1; i < pageCount; i++)
5476 {
5477- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5478+ if (pages[i] != nth_page(pages[0], i))
5479+ {
5480+ /* Non-contiguous. */
5481+ break;
5482+ }
5483 }
5484
5485- pfn = pte_pfn(*pte);
5486-
5487- physical = (pfn << PAGE_SHIFT) | (memory & ~PAGE_MASK);
5488+ if (i == pageCount)
5489+ {
5490+ /* Contiguous memory. */
5491+ physical = page_to_phys(pages[0]) | (memory & ~PAGE_MASK);
5492
5493- pte_unmap_unlock(pte, ptl);
5494+ if (!((physical - Os->device->baseAddress) & 0x80000000))
5495+ {
5496+ kfree(pages);
5497+ pages = gcvNULL;
5498
5499- if ((Os->device->kernels[Core]->hardware->mmuVersion == 0)
5500- && !((physical - Os->device->baseAddress) & 0x80000000))
5501- {
5502- info->pages = gcvNULL;
5503- info->pageTable = gcvNULL;
5504+ info->pages = gcvNULL;
5505+ info->pageTable = gcvNULL;
5506
5507- MEMORY_MAP_UNLOCK(Os);
5508+ MEMORY_MAP_UNLOCK(Os);
5509
5510- *Address = physical - Os->device->baseAddress;
5511- *Info = info;
5512+ *Address = physical - Os->device->baseAddress;
5513+ *Info = info;
5514
5515- gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x",
5516- *Info, *Address);
5517+ gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x",
5518+ *Info, *Address);
5519
5520- return gcvSTATUS_OK;
5521+ return gcvSTATUS_OK;
5522+ }
5523 }
5524 }
5525- else
5526+
5527+ /* Reference pages. */
5528+ for (i = 0; i < pageCount; i++)
5529 {
5530- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5531+ get_page(pages[i]);
5532 }
5533 }
5534 }
5535
5536- if (pages)
5537- {
5538- for (i = 0; i < pageCount; i++)
5539- {
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,
5544- PAGE_SIZE));
5545- }
5546- }
5547- else
5548+ for (i = 0; i < pageCount; i++)
5549 {
5550+#ifdef CONFIG_ARM
5551+ gctUINT32 data;
5552+ get_user(data, (gctUINT32*)((memory & PAGE_MASK) + i * PAGE_SIZE));
5553+#endif
5554+
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,
5562+ PAGE_SIZE));
5563 }
5564
5565 #if gcdENABLE_VG
5566@@ -5464,20 +5603,14 @@ OnError:
5567 (gctPOINTER *) &pageTable,
5568 &address));
5569 }
5570+
5571 /* Fill the page table. */
5572 for (i = 0; i < pageCount; i++)
5573 {
5574 gctUINT32 phys;
5575 gctUINT32_PTR tab = pageTable + i * (PAGE_SIZE/4096);
5576
5577- if (pages)
5578- {
5579- phys = page_to_phys(pages[i]);
5580- }
5581- else
5582- {
5583- phys = (physical & PAGE_MASK) + i * PAGE_SIZE;
5584- }
5585+ phys = page_to_phys(pages[i]);
5586
5587 #if gcdENABLE_VG
5588 if (Core == gcvCORE_VG)
5589@@ -6126,7 +6259,7 @@ gckOS_CacheClean(
5590 #else
5591 dma_sync_single_for_device(
5592 gcvNULL,
5593- Physical,
5594+ (dma_addr_t)Physical,
5595 Bytes,
5596 DMA_TO_DEVICE);
5597 #endif
5598@@ -6205,7 +6338,7 @@ gckOS_CacheInvalidate(
5599 #else
5600 dma_sync_single_for_device(
5601 gcvNULL,
5602- Physical,
5603+ (dma_addr_t)Physical,
5604 Bytes,
5605 DMA_FROM_DEVICE);
5606 #endif
5607@@ -6279,7 +6412,7 @@ gckOS_CacheFlush(
5608 #else
5609 dma_sync_single_for_device(
5610 gcvNULL,
5611- Physical,
5612+ (dma_addr_t)Physical,
5613 Bytes,
5614 DMA_BIDIRECTIONAL);
5615 #endif
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)
5621+ int ret;
5622+#endif
5623
5624 gctBOOL oldClockState = gcvFALSE;
5625 gctBOOL oldPowerState = gcvFALSE;
5626@@ -6852,9 +6988,13 @@ gckOS_SetGPUPower(
5627 }
5628 if((Power == gcvTRUE) && (oldPowerState == gcvFALSE))
5629 {
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);
5636+ if (ret != 0)
5637+ gckOS_Print("%s(%d): fail to enable pu regulator %d!\n",
5638+ __FUNCTION__, __LINE__, ret);
5639+ }
5640 #else
5641 imx_gpc_power_up_pu(true);
5642 #endif
5643@@ -6969,7 +7109,7 @@ gckOS_SetGPUPower(
5644 pm_runtime_put_sync(Os->device->pmdev);
5645 #endif
5646
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);
5651 #else
5652@@ -7033,6 +7173,10 @@ gckOS_ResetGPU(
5653 }
5654
5655 gcmkFOOTER_NO();
5656+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5657+ struct reset_control *rstc = Os->device->rstc[Core];
5658+ if (rstc)
5659+ reset_control_reset(rstc);
5660 #else
5661 imx_src_reset_gpu((int)Core);
5662 #endif
5663@@ -8529,3 +8673,338 @@ gckOS_GetProcessNameByPid(
5664 return gcvSTATUS_OK;
5665 }
5666
5667+#if gcdANDROID_NATIVE_FENCE_SYNC
5668+
5669+gceSTATUS
5670+gckOS_CreateSyncPoint(
5671+ IN gckOS Os,
5672+ OUT gctSYNC_POINT * SyncPoint
5673+ )
5674+{
5675+ gceSTATUS status;
5676+ gcsSYNC_POINT_PTR syncPoint;
5677+
5678+ gcmkHEADER_ARG("Os=0x%X", Os);
5679+
5680+ /* Verify the arguments. */
5681+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5682+
5683+ /* Create an sync point structure. */
5684+ syncPoint = (gcsSYNC_POINT_PTR) kmalloc(
5685+ sizeof(gcsSYNC_POINT), GFP_KERNEL | gcdNOWARN);
5686+
5687+ if (syncPoint == gcvNULL)
5688+ {
5689+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5690+ }
5691+
5692+ /* Initialize the sync point. */
5693+ atomic_set(&syncPoint->ref, 1);
5694+ atomic_set(&syncPoint->state, 0);
5695+
5696+ gcmkONERROR(_AllocateIntegerId(&Os->syncPointDB, syncPoint, &syncPoint->id));
5697+
5698+ *SyncPoint = (gctSYNC_POINT)(gctUINTPTR_T)syncPoint->id;
5699+
5700+ gcmkFOOTER_ARG("*SyncPonint=%d", syncPoint->id);
5701+ return gcvSTATUS_OK;
5702+
5703+OnError:
5704+ if (syncPoint != gcvNULL)
5705+ {
5706+ kfree(syncPoint);
5707+ }
5708+
5709+ gcmkFOOTER();
5710+ return status;
5711+}
5712+
5713+gceSTATUS
5714+gckOS_ReferenceSyncPoint(
5715+ IN gckOS Os,
5716+ IN gctSYNC_POINT SyncPoint
5717+ )
5718+{
5719+ gceSTATUS status;
5720+ gcsSYNC_POINT_PTR syncPoint;
5721+
5722+ gcmkHEADER_ARG("Os=0x%X", Os);
5723+
5724+ /* Verify the arguments. */
5725+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5726+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5727+
5728+ gcmkONERROR(
5729+ _QueryIntegerId(&Os->syncPointDB,
5730+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5731+ (gctPOINTER)&syncPoint));
5732+
5733+ /* Initialize the sync point. */
5734+ atomic_inc(&syncPoint->ref);
5735+
5736+ gcmkFOOTER_NO();
5737+ return gcvSTATUS_OK;
5738+
5739+OnError:
5740+ gcmkFOOTER();
5741+ return status;
5742+}
5743+
5744+gceSTATUS
5745+gckOS_DestroySyncPoint(
5746+ IN gckOS Os,
5747+ IN gctSYNC_POINT SyncPoint
5748+ )
5749+{
5750+ gceSTATUS status;
5751+ gcsSYNC_POINT_PTR syncPoint;
5752+ gctBOOL acquired = gcvFALSE;
5753+
5754+ gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
5755+
5756+ /* Verify the arguments. */
5757+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5758+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5759+
5760+ gcmkONERROR(gckOS_AcquireMutex(Os, Os->syncPointMutex, gcvINFINITE));
5761+ acquired = gcvTRUE;
5762+
5763+ gcmkONERROR(
5764+ _QueryIntegerId(&Os->syncPointDB,
5765+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5766+ (gctPOINTER)&syncPoint));
5767+
5768+ gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
5769+
5770+ if (atomic_dec_and_test(&syncPoint->ref))
5771+ {
5772+ gcmkVERIFY_OK(_DestroyIntegerId(&Os->syncPointDB, syncPoint->id));
5773+
5774+ /* Free the sgianl. */
5775+ syncPoint->timeline = gcvNULL;
5776+ kfree(syncPoint);
5777+ }
5778+
5779+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5780+ acquired = gcvFALSE;
5781+
5782+ /* Success. */
5783+ gcmkFOOTER_NO();
5784+ return gcvSTATUS_OK;
5785+
5786+OnError:
5787+ if (acquired)
5788+ {
5789+ /* Release the mutex. */
5790+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5791+ }
5792+
5793+ gcmkFOOTER();
5794+ return status;
5795+}
5796+
5797+gceSTATUS
5798+gckOS_SignalSyncPoint(
5799+ IN gckOS Os,
5800+ IN gctSYNC_POINT SyncPoint
5801+ )
5802+{
5803+ gceSTATUS status;
5804+ gcsSYNC_POINT_PTR syncPoint;
5805+ gctBOOL acquired = gcvFALSE;
5806+
5807+ gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
5808+
5809+ /* Verify the arguments. */
5810+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5811+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5812+
5813+ gcmkONERROR(gckOS_AcquireMutex(Os, Os->syncPointMutex, gcvINFINITE));
5814+ acquired = gcvTRUE;
5815+
5816+ gcmkONERROR(
5817+ _QueryIntegerId(&Os->syncPointDB,
5818+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5819+ (gctPOINTER)&syncPoint));
5820+
5821+ gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
5822+
5823+ /* Get state. */
5824+ atomic_set(&syncPoint->state, gcvTRUE);
5825+
5826+ /* Signal timeline. */
5827+ if (syncPoint->timeline)
5828+ {
5829+ sync_timeline_signal(syncPoint->timeline);
5830+ }
5831+
5832+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5833+ acquired = gcvFALSE;
5834+
5835+ /* Success. */
5836+ gcmkFOOTER_NO();
5837+ return gcvSTATUS_OK;
5838+
5839+OnError:
5840+ if (acquired)
5841+ {
5842+ /* Release the mutex. */
5843+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5844+ }
5845+
5846+ gcmkFOOTER();
5847+ return status;
5848+}
5849+
5850+gceSTATUS
5851+gckOS_QuerySyncPoint(
5852+ IN gckOS Os,
5853+ IN gctSYNC_POINT SyncPoint,
5854+ OUT gctBOOL_PTR State
5855+ )
5856+{
5857+ gceSTATUS status;
5858+ gcsSYNC_POINT_PTR syncPoint;
5859+
5860+ gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
5861+
5862+ /* Verify the arguments. */
5863+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5864+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5865+
5866+ gcmkONERROR(
5867+ _QueryIntegerId(&Os->syncPointDB,
5868+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5869+ (gctPOINTER)&syncPoint));
5870+
5871+ gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
5872+
5873+ /* Get state. */
5874+ *State = atomic_read(&syncPoint->state);
5875+
5876+ /* Success. */
5877+ gcmkFOOTER_ARG("*State=%d", *State);
5878+ return gcvSTATUS_OK;
5879+
5880+OnError:
5881+ gcmkFOOTER();
5882+ return status;
5883+}
5884+
5885+gceSTATUS
5886+gckOS_CreateSyncTimeline(
5887+ IN gckOS Os,
5888+ OUT gctHANDLE * Timeline
5889+ )
5890+{
5891+ struct viv_sync_timeline * timeline;
5892+
5893+ /* Create viv sync timeline. */
5894+ timeline = viv_sync_timeline_create("viv timeline", Os);
5895+
5896+ if (timeline == gcvNULL)
5897+ {
5898+ /* Out of memory. */
5899+ return gcvSTATUS_OUT_OF_MEMORY;
5900+ }
5901+
5902+ *Timeline = (gctHANDLE) timeline;
5903+ return gcvSTATUS_OK;
5904+}
5905+
5906+gceSTATUS
5907+gckOS_DestroySyncTimeline(
5908+ IN gckOS Os,
5909+ IN gctHANDLE Timeline
5910+ )
5911+{
5912+ struct viv_sync_timeline * timeline;
5913+ gcmkASSERT(Timeline != gcvNULL);
5914+
5915+ /* Destroy timeline. */
5916+ timeline = (struct viv_sync_timeline *) Timeline;
5917+ sync_timeline_destroy(&timeline->obj);
5918+
5919+ return gcvSTATUS_OK;
5920+}
5921+
5922+gceSTATUS
5923+gckOS_CreateNativeFence(
5924+ IN gckOS Os,
5925+ IN gctHANDLE Timeline,
5926+ IN gctSYNC_POINT SyncPoint,
5927+ OUT gctINT * FenceFD
5928+ )
5929+{
5930+ int fd = -1;
5931+ struct viv_sync_timeline *timeline;
5932+ struct sync_pt * pt = gcvNULL;
5933+ struct sync_fence * fence;
5934+ char name[32];
5935+ gcsSYNC_POINT_PTR syncPoint;
5936+ gceSTATUS status;
5937+
5938+ gcmkHEADER_ARG("Os=0x%X Timeline=0x%X SyncPoint=%d",
5939+ Os, Timeline, (gctUINT)(gctUINTPTR_T)SyncPoint);
5940+
5941+ gcmkONERROR(
5942+ _QueryIntegerId(&Os->syncPointDB,
5943+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5944+ (gctPOINTER)&syncPoint));
5945+
5946+ /* Cast timeline. */
5947+ timeline = (struct viv_sync_timeline *) Timeline;
5948+
5949+ fd = get_unused_fd();
5950+
5951+ if (fd < 0)
5952+ {
5953+ /* Out of resources. */
5954+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5955+ }
5956+
5957+ /* Create viv_sync_pt. */
5958+ pt = viv_sync_pt_create(timeline, SyncPoint);
5959+
5960+ if (pt == gcvNULL)
5961+ {
5962+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5963+ }
5964+
5965+ /* Reference sync_timeline. */
5966+ syncPoint->timeline = &timeline->obj;
5967+
5968+ /* Build fence name. */
5969+ snprintf(name, 32, "viv sync_fence-%u", (gctUINT)(gctUINTPTR_T)SyncPoint);
5970+
5971+ /* Create sync_fence. */
5972+ fence = sync_fence_create(name, pt);
5973+
5974+ if (fence == NULL)
5975+ {
5976+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5977+ }
5978+
5979+ /* Install fence to fd. */
5980+ sync_fence_install(fence, fd);
5981+
5982+ *FenceFD = fd;
5983+ gcmkFOOTER_ARG("*FenceFD=%d", fd);
5984+ return gcvSTATUS_OK;
5985+
5986+OnError:
5987+ /* Error roll back. */
5988+ if (pt)
5989+ {
5990+ sync_pt_free(pt);
5991+ }
5992+
5993+ if (fd > 0)
5994+ {
5995+ put_unused_fd(fd);
5996+ }
5997+
5998+ gcmkFOOTER();
5999+ return status;
6000+}
6001+#endif
6002diff --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
6003new file mode 100644
6004index 0000000..7efae1c
6005--- /dev/null
6006+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
6007@@ -0,0 +1,174 @@
6008+/****************************************************************************
6009+*
6010+* Copyright (C) 2005 - 2013 by Vivante Corp.
6011+*
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.
6016+*
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.
6021+*
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.
6025+*
6026+*****************************************************************************/
6027+
6028+
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>
6036+
6037+#include "gc_hal_kernel_sync.h"
6038+
6039+#if gcdANDROID_NATIVE_FENCE_SYNC
6040+
6041+static struct sync_pt *
6042+viv_sync_pt_dup(
6043+ struct sync_pt * sync_pt
6044+ )
6045+{
6046+ gceSTATUS status;
6047+ struct viv_sync_pt *pt;
6048+ struct viv_sync_pt *src;
6049+ struct viv_sync_timeline *obj;
6050+
6051+ src = (struct viv_sync_pt *) sync_pt;
6052+ obj = (struct viv_sync_timeline *) sync_pt->parent;
6053+
6054+ /* Create the new sync_pt. */
6055+ pt = (struct viv_sync_pt *)
6056+ sync_pt_create(&obj->obj, sizeof(struct viv_sync_pt));
6057+
6058+ pt->stamp = src->stamp;
6059+ pt->sync = src->sync;
6060+
6061+ /* Reference sync point. */
6062+ status = gckOS_ReferenceSyncPoint(obj->os, pt->sync);
6063+
6064+ if (gcmIS_ERROR(status))
6065+ {
6066+ sync_pt_free((struct sync_pt *)pt);
6067+ return NULL;
6068+ }
6069+
6070+ return (struct sync_pt *)pt;
6071+}
6072+
6073+static int
6074+viv_sync_pt_has_signaled(
6075+ struct sync_pt * sync_pt
6076+ )
6077+{
6078+ gceSTATUS status;
6079+ gctBOOL state;
6080+ struct viv_sync_pt * pt;
6081+ struct viv_sync_timeline * obj;
6082+
6083+ pt = (struct viv_sync_pt *)sync_pt;
6084+ obj = (struct viv_sync_timeline *)sync_pt->parent;
6085+
6086+ status = gckOS_QuerySyncPoint(obj->os, pt->sync, &state);
6087+
6088+ if (gcmIS_ERROR(status))
6089+ {
6090+ /* Error. */
6091+ return -1;
6092+ }
6093+
6094+ return state;
6095+}
6096+
6097+static int
6098+viv_sync_pt_compare(
6099+ struct sync_pt * a,
6100+ struct sync_pt * b
6101+ )
6102+{
6103+ int ret;
6104+ struct viv_sync_pt * pt1 = (struct viv_sync_pt *) a;
6105+ struct viv_sync_pt * pt2 = (struct viv_sync_pt *) b;
6106+
6107+ ret = (pt1->stamp < pt2->stamp) ? -1
6108+ : (pt1->stamp == pt2->stamp) ? 0
6109+ : 1;
6110+
6111+ return ret;
6112+}
6113+
6114+static void
6115+viv_sync_pt_free(
6116+ struct sync_pt * sync_pt
6117+ )
6118+{
6119+ struct viv_sync_pt * pt;
6120+ struct viv_sync_timeline * obj;
6121+
6122+ pt = (struct viv_sync_pt *) sync_pt;
6123+ obj = (struct viv_sync_timeline *) sync_pt->parent;
6124+
6125+ gckOS_DestroySyncPoint(obj->os, pt->sync);
6126+}
6127+
6128+static struct sync_timeline_ops viv_timeline_ops =
6129+{
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,
6135+};
6136+
6137+struct viv_sync_timeline *
6138+viv_sync_timeline_create(
6139+ const char * name,
6140+ gckOS os
6141+ )
6142+{
6143+ struct viv_sync_timeline * obj;
6144+
6145+ obj = (struct viv_sync_timeline *)
6146+ sync_timeline_create(&viv_timeline_ops, sizeof(struct viv_sync_timeline), name);
6147+
6148+ obj->os = os;
6149+ obj->stamp = 0;
6150+
6151+ return obj;
6152+}
6153+
6154+struct sync_pt *
6155+viv_sync_pt_create(
6156+ struct viv_sync_timeline * obj,
6157+ gctSYNC_POINT SyncPoint
6158+ )
6159+{
6160+ gceSTATUS status;
6161+ struct viv_sync_pt * pt;
6162+
6163+ pt = (struct viv_sync_pt *)
6164+ sync_pt_create(&obj->obj, sizeof(struct viv_sync_pt));
6165+
6166+ pt->stamp = obj->stamp++;
6167+ pt->sync = SyncPoint;
6168+
6169+ /* Dup signal. */
6170+ status = gckOS_ReferenceSyncPoint(obj->os, SyncPoint);
6171+
6172+ if (gcmIS_ERROR(status))
6173+ {
6174+ sync_pt_free((struct sync_pt *)pt);
6175+ return NULL;
6176+ }
6177+
6178+ return (struct sync_pt *) pt;
6179+}
6180+
6181+#endif
6182diff --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
6183new file mode 100644
6184index 0000000..6fc12e5
6185--- /dev/null
6186+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
6187@@ -0,0 +1,71 @@
6188+/****************************************************************************
6189+*
6190+* Copyright (C) 2005 - 2013 by Vivante Corp.
6191+*
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.
6196+*
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.
6201+*
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.
6205+*
6206+*****************************************************************************/
6207+
6208+
6209+#ifndef __gc_hal_kernel_sync_h_
6210+#define __gc_hal_kernel_sync_h_
6211+
6212+#include <linux/types.h>
6213+
6214+#include <linux/sync.h>
6215+
6216+#include <gc_hal.h>
6217+#include <gc_hal_base.h>
6218+
6219+struct viv_sync_timeline
6220+{
6221+ /* Parent object. */
6222+ struct sync_timeline obj;
6223+
6224+ /* Timestamp when sync_pt is created. */
6225+ gctUINT stamp;
6226+
6227+ /* Pointer to os struct. */
6228+ gckOS os;
6229+};
6230+
6231+
6232+struct viv_sync_pt
6233+{
6234+ /* Parent object. */
6235+ struct sync_pt pt;
6236+
6237+ /* Reference sync point*/
6238+ gctSYNC_POINT sync;
6239+
6240+ /* Timestamp when sync_pt is created. */
6241+ gctUINT stamp;
6242+};
6243+
6244+/* Create viv_sync_timeline object. */
6245+struct viv_sync_timeline *
6246+viv_sync_timeline_create(
6247+ const char * Name,
6248+ gckOS Os
6249+ );
6250+
6251+/* Create viv_sync_pt object. */
6252+struct sync_pt *
6253+viv_sync_pt_create(
6254+ struct viv_sync_timeline * Obj,
6255+ gctSYNC_POINT SyncPoint
6256+ );
6257+
6258+#endif /* __gc_hal_kernel_sync_h_ */
6259--
62601.7.9.5
6261