diff options
author | Tudor Florea <tudor.florea@enea.com> | 2014-10-16 02:06:17 +0200 |
---|---|---|
committer | Tudor Florea <tudor.florea@enea.com> | 2014-10-16 02:06:17 +0200 |
commit | 54eecdabe0cdfdc47d77b3e182fda5899702ded7 (patch) | |
tree | 8e28d750773f0aa38f0d2de83109b190faf0b425 /recipes-kernel/linux/linux-boundary-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch | |
download | meta-fsl-arm-extra-54eecdabe0cdfdc47d77b3e182fda5899702ded7.tar.gz |
initial commit for Enea Linux 4.0-140929daisy-140929
Migrated from the internal git server on the daisy-enea-point-release branch
Signed-off-by: Tudor Florea <tudor.florea@enea.com>
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.patch | 6261 |
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 @@ | |||
1 | From 2e575255b8c53d3cfe2af068411696fe3c40debb Mon Sep 17 00:00:00 2001 | ||
2 | From: Loren Huang <b02279@freescale.com> | ||
3 | Date: Mon, 2 Sep 2013 12:16:48 +0800 | ||
4 | Subject: [PATCH 01/16] ENGR00278350 gpu:viante 4.6.9p13 kernel part | ||
5 | integration | ||
6 | |||
7 | Integrated 4.6.9p13 kernel part change. | ||
8 | This integration is mainly for android test. | ||
9 | Linux test will be focused on 3.10 kernel. | ||
10 | |||
11 | Signed-off-by: Loren HUANG <b02279@freescale.com> | ||
12 | Acked-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 | |||
51 | diff --git a/drivers/mxc/gpu-viv/Kbuild b/drivers/mxc/gpu-viv/Kbuild | ||
52 | index 93b1259..2b277d6 100644 | ||
53 | --- a/drivers/mxc/gpu-viv/Kbuild | ||
54 | +++ b/drivers/mxc/gpu-viv/Kbuild | ||
55 | @@ -45,8 +45,6 @@ OBJS := $(OS_KERNEL_DIR)/gc_hal_kernel_device.o \ | ||
56 | $(OS_KERNEL_DIR)/gc_hal_kernel_os.o \ | ||
57 | $(OS_KERNEL_DIR)/gc_hal_kernel_debugfs.o | ||
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 | ||
124 | diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c | ||
125 | index 70c2cd6..a17d2fd 100644 | ||
126 | --- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c | ||
127 | +++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c | ||
128 | @@ -217,50 +217,17 @@ _IdentifyHardware( | ||
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(¤tTime)); | ||
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(¤tTime)); | ||
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(¤tTime)); | ||
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(¤tTime)); | ||
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 | |||
404 | diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h | ||
405 | index 16b81ae..73d4594 100644 | ||
406 | --- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h | ||
407 | +++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h | ||
408 | @@ -53,7 +53,6 @@ struct _gckVGHARDWARE | ||
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 | }; | ||
433 | diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c | ||
434 | index 24003e7..42e6915 100644 | ||
435 | --- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c | ||
436 | +++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c | ||
437 | @@ -181,7 +181,8 @@ _FlushPipe( | ||
438 | ? ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) | ||
439 | : ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | ||
440 | | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | ||
441 | - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))); | ||
442 | + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | ||
443 | + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))); | ||
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); | ||
459 | diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h | ||
460 | index 7554045..5d2c7c7 100644 | ||
461 | --- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h | ||
462 | +++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h | ||
463 | @@ -134,6 +134,19 @@ struct _gckCONTEXT | ||
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 | ||
483 | diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c | ||
484 | index 00f3839..e02dc23 100644 | ||
485 | --- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c | ||
486 | +++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c | ||
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; | ||
1414 | diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h | ||
1415 | index 37226b7..287ea60 100644 | ||
1416 | --- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h | ||
1417 | +++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h | ||
1418 | @@ -92,6 +92,7 @@ struct _gckHARDWARE | ||
1419 | #endif | ||
1420 | |||
1421 | gctBOOL powerManagement; | ||
1422 | + gctBOOL gpuProfiler; | ||
1423 | }; | ||
1424 | |||
1425 | gceSTATUS | ||
1426 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c | ||
1427 | index b7b0d28..12a5340 100644 | ||
1428 | --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c | ||
1429 | +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c | ||
1430 | @@ -128,19 +128,6 @@ _ResetFinishFunction( | ||
1431 | ** Pointer to a variable that will hold the pointer to the gckKERNEL | ||
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; | ||
1635 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h | ||
1636 | index 5896e93..1c40df2 100644 | ||
1637 | --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h | ||
1638 | +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h | ||
1639 | @@ -140,8 +140,9 @@ typedef enum _gceDATABASE_TYPE | ||
1640 | gcvDB_CONTEXT, /* Context */ | ||
1641 | gcvDB_IDLE, /* GPU idle. */ | ||
1642 | gcvDB_MAP_MEMORY, /* Map memory */ | ||
1643 | - gcvDB_SHARED_INFO, /* Private data */ | ||
1644 | - gcvDB_MAP_USER_MEMORY /* Map user memory */ | ||
1645 | + gcvDB_SHARED_INFO, /* Private data */ | ||
1646 | + gcvDB_MAP_USER_MEMORY, /* Map user memory */ | ||
1647 | + gcvDB_SYNC_POINT, /* Sync point. */ | ||
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 | { | ||
1705 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c | ||
1706 | index 9ee9ea1..73dab81 100644 | ||
1707 | --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c | ||
1708 | +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c | ||
1709 | @@ -494,6 +494,11 @@ gckCOMMAND_Construct( | ||
1710 | /* Create the context switching mutex. */ | ||
1711 | gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContext)); | ||
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 | { | ||
1815 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c | ||
1816 | index 76c1c10..1a7c340 100644 | ||
1817 | --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c | ||
1818 | +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c | ||
1819 | @@ -2819,6 +2819,7 @@ gckVGCOMMAND_Construct( | ||
1820 | ** Enable TS overflow interrupt. | ||
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 | |||
1897 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c | ||
1898 | index 673d4f7..134351a 100644 | ||
1899 | --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c | ||
1900 | +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c | ||
1901 | @@ -1307,6 +1307,18 @@ gckKERNEL_DestroyProcessDB( | ||
1902 | status = gckOS_FreeMemory(Kernel->os, record->physical); | ||
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", | ||
1920 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c | ||
1921 | index 217f7f1..2d81a56 100644 | ||
1922 | --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c | ||
1923 | +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c | ||
1924 | @@ -931,6 +931,7 @@ gckEVENT_AddList( | ||
1925 | || (Interface->command == gcvHAL_TIMESTAMP) | ||
1926 | || (Interface->command == gcvHAL_COMMIT_DONE) | ||
1927 | || (Interface->command == gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER) | ||
1928 | + || (Interface->command == gcvHAL_SYNC_POINT) | ||
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 | +} | ||
1992 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c | ||
1993 | index 8ac187b..50bc63e 100644 | ||
1994 | --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c | ||
1995 | +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c | ||
1996 | @@ -794,6 +794,9 @@ gckVGINTERRUPT_Enque( | ||
1997 | Interrupt->kernel->hardware, &triggered | ||
1998 | )); | ||
1999 | |||
2000 | + /* Mask out TS overflow interrupt */ | ||
2001 | + triggered &= 0xfffffffe; | ||
2002 | + | ||
2003 | /* No interrupts to process? */ | ||
2004 | if (triggered == 0) | ||
2005 | { | ||
2006 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c | ||
2007 | index c7f67c7..e4ca497 100644 | ||
2008 | --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c | ||
2009 | +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c | ||
2010 | @@ -1436,7 +1436,7 @@ gckMMU_AllocatePages( | ||
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 | |||
2046 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c | ||
2047 | index 8b8bbdc..3b5dd82 100644 | ||
2048 | --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c | ||
2049 | +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c | ||
2050 | @@ -1582,6 +1582,7 @@ _NeedVirtualMapping( | ||
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, | ||
2091 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h | ||
2092 | index 4406d7e..7312cc2 100644 | ||
2093 | --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h | ||
2094 | +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h | ||
2095 | @@ -123,6 +123,12 @@ extern "C" { | ||
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, | ||
2214 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h | ||
2215 | index 44689b0..9c17114 100644 | ||
2216 | --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h | ||
2217 | +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h | ||
2218 | @@ -71,10 +71,17 @@ typedef struct _gcoFENCE * gcoFENCE; | ||
2219 | typedef struct _gcsSYNC_CONTEXT * gcsSYNC_CONTEXT_PTR; | ||
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 \ | ||
2534 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h | ||
2535 | index 8693c37..062224c 100644 | ||
2536 | --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h | ||
2537 | +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h | ||
2538 | @@ -39,12 +39,10 @@ extern "C" { | ||
2539 | #define GC_ENABLE_LOADTIME_OPT 1 | ||
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 | ||
2784 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h | ||
2785 | index b056c52..fc8c395 100644 | ||
2786 | --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h | ||
2787 | +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h | ||
2788 | @@ -166,6 +166,12 @@ typedef enum _gceHAL_COMMAND_CODES | ||
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 | } | ||
2846 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h | ||
2847 | index 8481375..3fb2fe4 100644 | ||
2848 | --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h | ||
2849 | +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h | ||
2850 | @@ -323,6 +323,15 @@ gcoSURF_Resolve( | ||
2851 | IN gcoSURF DestSurface | ||
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 | ||
2945 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h | ||
2946 | index a1d9ae5..8e3c2f8 100644 | ||
2947 | --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h | ||
2948 | +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h | ||
2949 | @@ -146,10 +146,26 @@ typedef enum _gceFEATURE | ||
2950 | gcvFEATURE_FRUSTUM_CLIP_FIX, | ||
2951 | gcvFEATURE_TEXTURE_LINEAR, | ||
2952 | gcvFEATURE_TEXTURE_YUV_ASSEMBLER, | ||
2953 | + gcvFEATURE_SHADER_HAS_INSTRUCTION_CACHE, | ||
2954 | gcvFEATURE_DYNAMIC_FREQUENCY_SCALING, | ||
2955 | gcvFEATURE_BUGFIX15, | ||
2956 | + gcvFEATURE_2D_GAMMA, | ||
2957 | + gcvFEATURE_2D_COLOR_SPACE_CONVERSION, | ||
2958 | + gcvFEATURE_2D_SUPER_TILE_VERSION, | ||
2959 | gcvFEATURE_2D_MIRROR_EXTENSION, | ||
2960 | + gcvFEATURE_2D_SUPER_TILE_V1, | ||
2961 | + gcvFEATURE_2D_SUPER_TILE_V2, | ||
2962 | + gcvFEATURE_2D_SUPER_TILE_V3, | ||
2963 | + gcvFEATURE_2D_MULTI_SOURCE_BLT_EX2, | ||
2964 | gcvFEATURE_ELEMENT_INDEX_UINT, | ||
2965 | + gcvFEATURE_2D_COMPRESSION, | ||
2966 | + gcvFEATURE_2D_OPF_YUV_OUTPUT, | ||
2967 | + gcvFEATURE_2D_MULTI_SRC_BLT_TO_UNIFIED_DST_RECT, | ||
2968 | + gcvFEATURE_2D_YUV_MODE, | ||
2969 | + gcvFEATURE_DECOMPRESS_Z16, | ||
2970 | + gcvFEATURE_LINEAR_RENDER_TARGET, | ||
2971 | + gcvFEATURE_BUG_FIXES8, | ||
2972 | + gcvFEATURE_HALTI2, | ||
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 | \******************************************************************************/ | ||
3159 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h | ||
3160 | index 9e2a8db..b53b618 100644 | ||
3161 | --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h | ||
3162 | +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h | ||
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_ */ | ||
3300 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h | ||
3301 | index 3e450ba..aed73aa 100644 | ||
3302 | --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h | ||
3303 | +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h | ||
3304 | @@ -45,509 +45,115 @@ extern "C" { | ||
3305 | #define gcdNEW_PROFILER_FILE 1 | ||
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( | ||
4487 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h | ||
4488 | index bc4171e..6e4d830 100644 | ||
4489 | --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h | ||
4490 | +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h | ||
4491 | @@ -568,6 +568,23 @@ gco2D_MonoBlit( | ||
4492 | IN gceSURF_FORMAT DestFormat | ||
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 | ||
4560 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h | ||
4561 | index 5c0877d..14801aa 100644 | ||
4562 | --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h | ||
4563 | +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h | ||
4564 | @@ -128,6 +128,7 @@ typedef int gctBOOL; | ||
4565 | typedef gctBOOL * gctBOOL_PTR; | ||
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 | ||
4688 | diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h | ||
4689 | index 03cb4d6..2eab666 100644 | ||
4690 | --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h | ||
4691 | +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h | ||
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 | |||
4701 | diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c | ||
4702 | index 4d48bd5..b029428 100644 | ||
4703 | --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c | ||
4704 | +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c | ||
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; | ||
4786 | diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h | ||
4787 | index dde4f03..c51432f 100644 | ||
4788 | --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h | ||
4789 | +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h | ||
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 | |||
4832 | diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c | ||
4833 | index bacd531..88a7e4e6 100644 | ||
4834 | --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c | ||
4835 | +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c | ||
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, | ||
5063 | diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c | ||
5064 | index e7edc39..331c73f 100644 | ||
5065 | --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c | ||
5066 | +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c | ||
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(¤t->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(¤t->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 | ||
6002 | diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c | ||
6003 | new file mode 100644 | ||
6004 | index 0000000..7efae1c | ||
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 | ||
6182 | diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h | ||
6183 | new file mode 100644 | ||
6184 | index 0000000..6fc12e5 | ||
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 | -- | ||
6260 | 1.7.9.5 | ||
6261 | |||