summaryrefslogtreecommitdiff
path: root/drivers/mxc
diff options
context:
space:
mode:
authorXianzhong <xianzhong.li@nxp.com>2016-08-30 05:37:28 -0500
committerXianzhong <xianzhong.li@nxp.com>2016-08-30 05:50:15 -0500
commit0f0dac4798e905f75e8954d4b1b463c20e339107 (patch)
tree87a4ad760a359416766e509b61894c5b7a22a2e1 /drivers/mxc
parente21f697b3bcfc0a6b6d92c9099970c6276f48de1 (diff)
MGS-2217 sync 5.0.11.p8 gpu kernel driver
sync gpu kernel driver with the latest 5.0.11.p8 source branch: imx_5.0.11.p8 source commit: 864a00a65ede8d3ded786c9afccc0b8b4ef5007d Signed-off-by: Xianzhong <xianzhong.li@nxp.com>
Diffstat (limited to 'drivers/mxc')
-rw-r--r--drivers/mxc/gpu-viv/Kbuild48
-rw-r--r--drivers/mxc/gpu-viv/config1
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_context.c1846
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_context.h56
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.c8521
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.h128
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_recorder.c21
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_command_vg.c240
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.c306
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.h6
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c2052
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h570
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_async_command.c449
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c1358
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c22
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c75
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c964
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c1324
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_security_v1.c261
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c414
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c207
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/inc/gc_feature_database.h35549
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h263
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h936
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h152
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h184
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform_type.h34
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h796
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine_vg.h119
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h524
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer.h63
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h417
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h236
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h35
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_security_interface.h4
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h93
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h10
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h13
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_array.h22
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dma.c490
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dmabuf.c46
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_user_memory.c639
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_array.h21
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_cma.c67
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.c457
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.h48
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debug.h16
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.c255
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.h1
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c1807
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h96
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c1379
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.c10
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h89
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c1954
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h21
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_platform.h40
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_security_channel.c1
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_security_channel_emulator.c112
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c32
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6q14.c562
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6q14.config8
-rw-r--r--drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta.c294
-rw-r--r--drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta.h345
-rw-r--r--drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta_hardware.c830
-rw-r--r--drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta_hardware.h139
-rw-r--r--drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta_mmu.c522
-rw-r--r--drivers/mxc/gpu-viv/hal/security_v1/os/emulator/gc_hal_ta_emulator.c310
68 files changed, 10767 insertions, 58143 deletions
diff --git a/drivers/mxc/gpu-viv/Kbuild b/drivers/mxc/gpu-viv/Kbuild
index 5eb49db2ca11..8b4efe3e1377 100644
--- a/drivers/mxc/gpu-viv/Kbuild
+++ b/drivers/mxc/gpu-viv/Kbuild
@@ -60,17 +60,17 @@ AQROOT := $(srctree)/drivers/mxc/gpu-viv
include $(AQROOT)/config
-PLATFORM ?= default/gc_hal_kernel_platform_default
-
KERNEL_DIR ?= $(TOOL_DIR)/kernel
OS_KERNEL_DIR := hal/os/linux/kernel
ARCH_KERNEL_DIR := hal/kernel/arch
ARCH_VG_KERNEL_DIR := hal/kernel/archvg
HAL_KERNEL_DIR := hal/kernel
-TA_DIR := hal/security_v1
HOST := $(shell hostname)
+# Check and include platform config.
+ifneq ($(PLATFORM),)
+
# Get platform config path.
PLATFORM_CONFIG ?= $(AQROOT)/$(OS_KERNEL_DIR)/platform/$(PLATFORM).config
@@ -82,6 +82,8 @@ ifneq ($(PLATFORM_CONFIG),)
include $(PLATFORM_CONFIG)
endif
+endif
+
MODULE_NAME ?= galcore
CUSTOMER_ALLOCATOR_OBJS ?=
ALLOCATOR_ARRAY_H_LOCATION ?= $(OS_KERNEL_DIR)/allocator/default/
@@ -94,10 +96,6 @@ OBJS := $(OS_KERNEL_DIR)/gc_hal_kernel_device.o \
$(OS_KERNEL_DIR)/gc_hal_kernel_os.o \
$(OS_KERNEL_DIR)/gc_hal_kernel_debugfs.o \
$(OS_KERNEL_DIR)/gc_hal_kernel_allocator.o \
- $(OS_KERNEL_DIR)/allocator/default/gc_hal_kernel_allocator_user_memory.o \
- $(OS_KERNEL_DIR)/allocator/default/gc_hal_kernel_allocator_dma.o \
- $(OS_KERNEL_DIR)/gc_hal_kernel_driver.o \
- $(OS_KERNEL_DIR)/platform/$(PLATFORM).o
ifneq ($(CONFIG_DMA_SHARED_BUFFER),)
OBJS += $(OS_KERNEL_DIR)/allocator/default/gc_hal_kernel_allocator_dmabuf.o
@@ -107,17 +105,22 @@ ifneq ($(CONFIG_IOMMU_SUPPORT),)
OBJS += $(OS_KERNEL_DIR)/gc_hal_kernel_iommu.o
endif
+ifneq ($(PLATFORM),)
+OBJS += $(OS_KERNEL_DIR)/gc_hal_kernel_probe.o
+OBJS += $(OS_KERNEL_DIR)/platform/$(PLATFORM).o
+else
+OBJS += $(OS_KERNEL_DIR)/gc_hal_kernel_driver.o
+endif
+
OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \
$(HAL_KERNEL_DIR)/gc_hal_kernel_command.o \
- $(HAL_KERNEL_DIR)/gc_hal_kernel_async_command.o \
$(HAL_KERNEL_DIR)/gc_hal_kernel_db.o \
$(HAL_KERNEL_DIR)/gc_hal_kernel_debug.o \
$(HAL_KERNEL_DIR)/gc_hal_kernel_event.o \
$(HAL_KERNEL_DIR)/gc_hal_kernel_heap.o \
$(HAL_KERNEL_DIR)/gc_hal_kernel_mmu.o \
$(HAL_KERNEL_DIR)/gc_hal_kernel_video_memory.o \
- $(HAL_KERNEL_DIR)/gc_hal_kernel_power.o \
- $(HAL_KERNEL_DIR)/gc_hal_kernel_security_v1.o
+ $(HAL_KERNEL_DIR)/gc_hal_kernel_power.o
OBJS += $(ARCH_KERNEL_DIR)/gc_hal_kernel_context.o \
$(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware.o
@@ -151,12 +154,6 @@ ifneq ($(CUSTOMER_ALLOCATOR_OBJS),)
OBJS += $(CUSTOMER_ALLOCATOR_OBJS)
endif
-OBJS += $(OS_KERNEL_DIR)/gc_hal_kernel_security_channel_emulator.o \
- $(TA_DIR)/gc_hal_ta.o \
- $(TA_DIR)/gc_hal_ta_hardware.o \
- $(TA_DIR)/gc_hal_ta_mmu.o \
- $(TA_DIR)/os/emulator/gc_hal_ta_emulator.o
-
ifeq ($(KERNELRELEASE), )
.PHONY: all clean install
@@ -242,6 +239,12 @@ else
EXTRA_CFLAGS += -DgcdCACHE_FUNCTION_UNIMPLEMENTED=0
endif
+ifeq ($(CONFIG_SMP), y)
+EXTRA_CFLAGS += -DgcdSMP=1
+else
+EXTRA_CFLAGS += -DgcdSMP=0
+endif
+
ifeq ($(VIVANTE_ENABLE_3D),0)
EXTRA_CFLAGS += -DgcdENABLE_3D=0
else
@@ -260,6 +263,12 @@ else
EXTRA_CFLAGS += -DgcdENABLE_VG=1
endif
+ifeq ($(ENABLE_OUTER_CACHE_PATCH), 1)
+EXTRA_CFLAGS += -DgcdENABLE_OUTER_CACHE_PATCH=1
+else
+EXTRA_CFLAGS += -DgcdENABLE_OUTER_CACHE_PATCH=0
+endif
+
ifeq ($(USE_BANK_ALIGNMENT), 1)
EXTRA_CFLAGS += -DgcdENABLE_BANK_ALIGNMENT=1
ifneq ($(BANK_BIT_START), 0)
@@ -290,11 +299,6 @@ EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel/arch
EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel/inc
EXTRA_CFLAGS += -I$(AQROOT)/hal/os/linux/kernel
EXTRA_CFLAGS += -I$(AQROOT)/$(ALLOCATOR_ARRAY_H_LOCATION)
-EXTRA_CFLAGS += -I$(AQROOT)/hal/security_v1/
-
-ifneq ($(CONFIG_ARM), )
-EXTRA_CFLAGS += -Iarch/arm/mm
-endif
ifeq ($(VIVANTE_ENABLE_VG), 1)
EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel/archvg
@@ -302,8 +306,6 @@ endif
EXTRA_CFLAGS += -DHOST=\"$(HOST)\"
-EXTRA_CFLAGS += -DgcdENABLE_TRUST_APPLICATION=1
-
obj-$(CONFIG_MXC_GPU_VIV) = $(MODULE_NAME).o
$(MODULE_NAME)-objs = $(OBJS)
diff --git a/drivers/mxc/gpu-viv/config b/drivers/mxc/gpu-viv/config
index f35cf119b06d..46e652c879f1 100644
--- a/drivers/mxc/gpu-viv/config
+++ b/drivers/mxc/gpu-viv/config
@@ -62,6 +62,7 @@ FORCE_ALL_VIDEO_MEMORY_CACHED ?= 0
NONPAGED_MEMORY_CACHEABLE ?= 0
NONPAGED_MEMORY_BUFFERABLE ?= 1
CACHE_FUNCTION_UNIMPLEMENTED ?= 0
+ENABLE_OUTER_CACHE_PATCH ?= 1
USE_BANK_ALIGNMENT ?= 1
BANK_BIT_START ?= 13
BANK_BIT_END ?= 15
diff --git a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_context.c b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_context.c
index 3228a4549020..6607487b9c20 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_context.c
+++ b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_context.c
@@ -208,7 +208,7 @@ _TerminateStateBlock(
#endif
-#if gcdENABLE_3D
+#if (gcdENABLE_3D || gcdENABLE_2D)
static gctUINT32
_FlushPipe(
IN gckCONTEXT Context,
@@ -220,9 +220,6 @@ _FlushPipe(
gctBOOL txCacheFix;
gctBOOL fcFlushStall;
gctBOOL iCacheInvalidate;
- gctBOOL halti5;
- gctBOOL snapPages;
- gctBOOL hwTFB;
txCacheFix
= gckHARDWARE_IsFeatureAvailable(Context->hardware, gcvFEATURE_TEX_CACHE_FLUSH_FIX);
@@ -231,18 +228,7 @@ _FlushPipe(
= gckHARDWARE_IsFeatureAvailable(Context->hardware, gcvFEATURE_FC_FLUSH_STALL);
iCacheInvalidate
- = gckHARDWARE_IsFeatureAvailable(Context->hardware, gcvFEATURE_SHADER_HAS_INSTRUCTION_CACHE);
-
- halti5
- = gckHARDWARE_IsFeatureAvailable(Context->hardware, gcvFEATURE_HALTI5);
-
- snapPages
- = gckHARDWARE_IsFeatureAvailable(Context->hardware, gcvFEATURE_SNAPPAGE_CMD_FIX) &&
- gckHARDWARE_IsFeatureAvailable(Context->hardware, gcvFEATURE_SNAPPAGE_CMD);
-
-
- hwTFB
- = gckHARDWARE_IsFeatureAvailable(Context->hardware, gcvFEATURE_HW_TFB);
+ = ((((gctUINT32) (Context->hardware->identity.chipMinorFeatures3)) >> (0 ? 3:3) & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1)))))));
flushSlots = 6;
@@ -264,22 +250,11 @@ _FlushPipe(
flushSlots += 6;
}
- if (iCacheInvalidate && !halti5)
+ if (iCacheInvalidate)
{
flushSlots += 12;
}
- if (hwTFB)
- {
- flushSlots += 2;
- }
-
- /* Snap pages */
- if (snapPages)
- {
- flushSlots += 2;
- }
-
if (Context->buffer != gcvNULL)
{
gctUINT32_PTR buffer;
@@ -291,433 +266,149 @@ _FlushPipe(
{
/* Semaphore from FE to PE. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
/* Stall from FE to PE. */
*buffer++
- = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
}
/* Flush the current pipe. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
= (Pipe == gcvPIPE_2D)
- ? ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ?
- 3:3))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)))
- : ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ?
- 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ?
- 5:5))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 10:10) - (0 ? 10:10) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 10:10) - (0 ? 10:10) + 1))))))) << (0 ?
- 10:10))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 10:10) - (0 ? 10:10) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 10:10) - (0 ? 10:10) + 1))))))) << (0 ? 10:10)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 11:11) - (0 ? 11:11) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ?
- 11:11))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 11:11) - (0 ? 11:11) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ? 11:11)));
-
- if (hwTFB)
- {
- *buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x7003) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
-
- *buffer++
- = 0x12345678;
- }
+ ? ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)))
+ : ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)));
/* Flush VST in separate cmd. */
if (Pipe == gcvPIPE_3D)
{
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
-
- *buffer++ = ((((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)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
+
+ *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
}
/* Semaphore from FE to PE. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
/* Stall from FE to PE. */
*buffer++
- = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
if (fcFlushStall)
{
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0594) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0594) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)));
/* Semaphore from FE to PE. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
/* Stall from FE to PE. */
*buffer++
- = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
}
- if (iCacheInvalidate && !halti5)
+ if (iCacheInvalidate)
{
/* Invalidate I$ after pipe is stalled */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0218) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0218) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
- = ((((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) (0x0 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x021A) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x021A) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ?
- 4:4))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 4:4) - (0 ?
- 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ?
- 4:4)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0218) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0218) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x021A) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x021A) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ?
- 5:5))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 5:5) - (0 ?
- 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ?
- 5:5)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)));
/* Semaphore from FE to PE. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
/* Stall from FE to PE. */
*buffer++
- = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
-
- *buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
- }
-
- if (snapPages)
- {
- *buffer++
- = ((((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) (0x13 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x02 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x04 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x08 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x10 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)));
+ = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
*buffer++
- = 0;
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
}
}
@@ -742,47 +433,21 @@ _SemaphoreStall(
/* Semaphore from FE to PE. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
/* Stall from FE to PE. */
*buffer++
- = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
*buffer
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
}
/* Semaphore/stall takes 4 slots. */
@@ -798,7 +463,7 @@ _SwitchPipe(
IN gcePIPE_SELECT Pipe
)
{
- gctUINT32 slots = 2;
+ gctUINT32 slots = 6;
if (Context->buffer != gcvNULL)
{
@@ -809,25 +474,32 @@ _SwitchPipe(
/* LoadState(AQPipeSelect, 1), pipe. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
- *buffer
+ *buffer++
= (Pipe == gcvPIPE_2D)
? 0x1
: 0x0;
+
+ /* Semaphore from FE to PE. */
+ *buffer++
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
+
+ *buffer++
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+
+ /* Stall from FE to PE. */
+ *buffer++
+ = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+
+ *buffer++
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
}
Context->pipeSelectBytes = slots * gcmSIZEOF(gctUINT32);
@@ -889,46 +561,18 @@ _State(
if (FixedPoint)
{
buffer[Index]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1))))))) << (0 ?
- 26:26))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1))))))) << (0 ? 26:26)))
- | ((((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) (Size) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)))
- | ((((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) (Address) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1))))))) << (0 ? 26:26))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1))))))) << (0 ? 26:26)))
+ | ((((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) (Size) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)))
+ | ((((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) (Address) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
}
else
{
buffer[Index]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1))))))) << (0 ?
- 26:26))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1))))))) << (0 ? 26:26)))
- | ((((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) (Size) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)))
- | ((((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) (Address) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1))))))) << (0 ? 26:26))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1))))))) << (0 ? 26:26)))
+ | ((((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) (Size) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)))
+ | ((((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) (Address) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
}
/* Walk all the states. */
@@ -965,11 +609,7 @@ _State(
{
/* Update last load state. */
buffer[Context->lastIndex] =
- ((((gctUINT32) (buffer[Context->lastIndex])) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (Context->lastSize + Size) & ((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ ((((gctUINT32) (buffer[Context->lastIndex])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (Context->lastSize + Size) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
/* Walk all the states. */
for (i = 0; i < (gctUINT32)Size; i += 1)
@@ -1017,11 +657,6 @@ _StateMirror(
/* Copy the mapping address. */
Context->map[Address + i].index =
Context->map[AddressMirror + i].index;
-
-#if gcdSECURE_USER
- Context->hint[Address + i] =
- Context->hint[AddressMirror + i];
-#endif
}
}
@@ -1040,29 +675,13 @@ _InitializeContextBuffer(
gctUINT32 index;
#if gcdENABLE_3D
- gctBOOL halti0, halti1, halti2, halti3, halti4, halti5;
+ gctBOOL halti0, halti1, halti2, halti3;
gctUINT i;
gctUINT vertexUniforms, fragmentUniforms, vsConstBase, psConstBase, constMax;
gctBOOL unifiedUniform;
- gctBOOL hasGS, hasTS;
- gctBOOL genericAttrib;
- gctBOOL hasICache;
- gctBOOL hasICachePrefetch;
- gctUINT numRT = 0;
- gctUINT numSamplers = 32;
- gctBOOL hasTXdesc;
- gctBOOL hasSecurity;
- gctBOOL hasRobustness;
+ gctUINT fe2vsCount;
#endif
- gckHARDWARE hardware;
-
- gcmkHEADER();
-
- hardware = Context->hardware;
-
- gcmkVERIFY_OBJECT(hardware, gcvOBJ_HARDWARE);
-
/* Reset the buffer index. */
index = 0;
@@ -1083,74 +702,13 @@ _InitializeContextBuffer(
/**************************************************************************/
/* Build 3D states. *******************************************************/
- halti0 = gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_HALTI0);
- halti1 = gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_HALTI1);
- halti2 = gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_HALTI2);
- halti3 = gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_HALTI3);
- halti4 = gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_HALTI4);
- halti5 = gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_HALTI5);
- hasGS = gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_GEOMETRY_SHADER);
- hasTS = gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_TESSELLATION);
- genericAttrib = gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_GENERIC_ATTRIB);
- hasICache = gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_SHADER_HAS_INSTRUCTION_CACHE);
- hasTXdesc = gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_TX_DESCRIPTOR);
- hasSecurity = gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_SECURITY);
- hasRobustness = gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_ROBUSTNESS);
- hasICachePrefetch = gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_SH_INSTRUCTION_PREFETCH);
-
- /* Multi render target. */
- if (halti2 ||
- (Context->hardware->identity.chipModel == gcv900 && Context->hardware->identity.chipRevision == 0x5250)
- )
- {
- numRT = 8;
- }
- else if (halti0)
- {
- numRT = 4;
- }
- else
- {
- numRT = 1;
- }
-
- if (hasGS && hasTS)
- {
- numSamplers = 80;
- }
-
- /* Query how many uniforms can support. */
- {if (Context->hardware->identity.numConstants > 256){ unifiedUniform = gcvTRUE;
-if (halti5){ vsConstBase = 0xD000;
- psConstBase = 0xD800;
-}else{ vsConstBase = 0xC000;
- psConstBase = 0xC000;
-}if ((Context->hardware->identity.chipModel == gcv880) && ((Context->hardware->identity.chipRevision & 0xfff0) == 0x5120)){ vertexUniforms = 512;
- fragmentUniforms = 64;
- constMax = 576;
-}else{ vertexUniforms = gcmMIN(512, Context->hardware->identity.numConstants - 64);
- fragmentUniforms = gcmMIN(512, Context->hardware->identity.numConstants - 64);
- constMax = Context->hardware->identity.numConstants;
-}}else if (Context->hardware->identity.numConstants == 256){ if (Context->hardware->identity.chipModel == gcv2000 && (Context->hardware->identity.chipRevision == 0x5118 || Context->hardware->identity.chipRevision == 0x5140)) { unifiedUniform = gcvFALSE;
- vsConstBase = 0x1400;
- psConstBase = 0x1C00;
- vertexUniforms = 256;
- fragmentUniforms = 64;
- constMax = 320;
- } else { unifiedUniform = gcvFALSE;
- vsConstBase = 0x1400;
- psConstBase = 0x1C00;
- vertexUniforms = 256;
- fragmentUniforms = 256;
- constMax = 512;
- }}else{ unifiedUniform = gcvFALSE;
- vsConstBase = 0x1400;
- psConstBase = 0x1C00;
- vertexUniforms = 168;
- fragmentUniforms = 64;
- constMax = 232;
-}};
+ halti0 = (((((gctUINT32) (Context->hardware->identity.chipMinorFeatures1)) >> (0 ? 23:23)) & ((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1)))))) );
+ halti1 = (((((gctUINT32) (Context->hardware->identity.chipMinorFeatures2)) >> (0 ? 11:11)) & ((gctUINT32) ((((1 ? 11:11) - (0 ? 11:11) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1)))))) );
+ halti2 = (((((gctUINT32) (Context->hardware->identity.chipMinorFeatures4)) >> (0 ? 16:16)) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) );
+ halti3 = (((((gctUINT32) (Context->hardware->identity.chipMinorFeatures5)) >> (0 ? 9:9)) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))) );
+ /* Query how many uniforms can support for non-unified uniform mode. */
+ {if (Context->hardware->identity.numConstants > 256){ unifiedUniform = gcvTRUE; vsConstBase = 0xC000; psConstBase = 0xC000; vertexUniforms = gcmMIN(512, Context->hardware->identity.numConstants - 64); fragmentUniforms = gcmMIN(512, Context->hardware->identity.numConstants - 64); constMax = Context->hardware->identity.numConstants;}else if (Context->hardware->identity.numConstants == 256){ if (Context->hardware->identity.chipModel == gcv2000 && Context->hardware->identity.chipRevision == 0x5118) { unifiedUniform = gcvFALSE; vsConstBase = 0x1400; psConstBase = 0x1C00; vertexUniforms = 256; fragmentUniforms = 64; constMax = 320; } else { unifiedUniform = gcvFALSE; vsConstBase = 0x1400; psConstBase = 0x1C00; vertexUniforms = 256; fragmentUniforms = 256; constMax = 512; }}else{ unifiedUniform = gcvFALSE; vsConstBase = 0x1400; psConstBase = 0x1C00; vertexUniforms = 168; fragmentUniforms = 64; constMax = 232;}};
#if !gcdENABLE_UNIFIED_CONSTANT
if (Context->hardware->identity.numConstants > 256)
@@ -1177,120 +735,54 @@ if (halti5){ vsConstBase = 0xD000;
index += _FlushPipe(Context, index, gcvPIPE_3D);
/* Global states. */
- if (hasSecurity)
- {
- index += _State(Context, index, 0x03900 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x03904 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- }
-
index += _State(Context, index, 0x03814 >> 2, 0x00000001, 1, gcvFALSE, gcvFALSE);
- index += _CLOSE_RANGE();
index += _State(Context, index, 0x03818 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x0381C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
-
- if (halti5)
- {
- index += _State(Context, index, 0x03888 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x038C0 >> 2, 0x00000000, 16, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x03884 >> 2, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 2:0) - (0 ? 2:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:0) - (0 ? 2:0) + 1))))))) << (0 ?
- 2:0))) | (((gctUINT32) (0x2 & ((gctUINT32) ((((1 ? 2:0) - (0 ? 2:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 2:0) - (0 ? 2:0) + 1))))))) << (0 ? 2:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 20:16) - (0 ? 20:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:16) - (0 ? 20:16) + 1))))))) << (0 ?
- 20:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 20:16) - (0 ?
- 20:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:16) - (0 ? 20:16) + 1))))))) << (0 ?
- 20:16))), 1, gcvFALSE, gcvFALSE);
- }
- else
- {
- index += _State(Context, index, 0x03820 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x03828 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x0382C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x03834 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x03838 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x03854 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- }
-
- if (hasGS)
- {
- index += _State(Context, index, 0x0388C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- }
-
+ index += _State(Context, index, 0x03820 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x03828 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x0382C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x03834 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x03838 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x03854 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x0384C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
/* Front End states. */
- if (halti5)
- {
- index += _State(Context, index, 0x17800 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _CLOSE_RANGE();
- index += _State(Context, index, 0x007C4 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x17880 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x17900 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x17980 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x17A00 >> 2, 0x3F800000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x007D0 >> 2, 0x00000000, 2, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x007D8 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x17A80 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- }
- else
- {
- index += _State(Context, index, 0x00600 >> 2, 0x00000000, (halti0 ? 16 : 12), gcvFALSE, gcvFALSE);
- index += _CLOSE_RANGE();
- if (genericAttrib)
- {
- index += _State(Context, index, 0x006C0 >> 2, 0x00000000, 16, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x00700 >> 2, 0x00000000, 16, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x00740 >> 2, 0x00000000, 16, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x00780 >> 2, 0x3F800000, 16, gcvFALSE, gcvFALSE);
- }
- }
-
- if (halti2 || (Context->hardware->identity.streamCount > 8))
+ fe2vsCount = 12;
+ if (halti0)
{
- index += _State(Context, index, 0x14600 >> 2, 0x00000000, 16, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14640 >> 2, 0x00000000, 16, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14680 >> 2, 0x00000000, 16, gcvFALSE, gcvFALSE);
+ fe2vsCount = 16;
}
- else if (Context->hardware->identity.streamCount > 1)
- {
- index += _State(Context, index, 0x00680 >> 2, 0x00000000, 8, gcvFALSE, gcvTRUE);
- index += _State(Context, index, 0x006A0 >> 2, 0x00000000, 8, gcvFALSE, gcvFALSE);
- }
- else
- {
- index += _State(Context, index, 0x0064C >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
- index += _State(Context, index, 0x00650 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x00600 >> 2, 0x00000000, fe2vsCount, gcvFALSE, gcvFALSE);
+ index += _CLOSE_RANGE();
- }
index += _State(Context, index, 0x00644 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
index += _State(Context, index, 0x00648 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x0064C >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, 0x00650 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x00680 >> 2, 0x00000000, 8, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, 0x006A0 >> 2, 0x00000000, 8, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00674 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x00670 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00678 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x0067C >> 2, 0xFFFFFFFF, 1, gcvFALSE, gcvFALSE);
- index += _CLOSE_RANGE();
+ index += _State(Context, index, 0x006C0 >> 2, 0x00000000, 16, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x00700 >> 2, 0x00000000, 16, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x00740 >> 2, 0x00000000, 16, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x00780 >> 2, 0x3F800000, 16, gcvFALSE, gcvFALSE);
- if (hasRobustness)
+ if (halti2)
{
- index += _State(Context, index, 0x146C0 >> 2, 0x00000000, 16, gcvFALSE, gcvTRUE);
- index += _CLOSE_RANGE();
- index += _State(Context, index, 0x007F8 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
- index += _CLOSE_RANGE();
+ index += _State(Context, index, 0x14600 >> 2, 0x00000000, 16, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14640 >> 2, 0x00000000, 16, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14680 >> 2, 0x00000000, 16, gcvFALSE, gcvFALSE);
}
- if (halti5)
- {
- index += _State(Context, index, 0x008B8 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x15600 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- }
- else
- {
- /* This register is programed by all chips, which program all DECODE_SELECT as VS
- ** except SAMPLER_DECODE_SELECT.
- */
- index += _State(Context, index, 0x00860 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- }
+ /* This register is programed by all chips, which program all DECODE_SELECT as VS
+ ** except SAMPLER_DECODE_SELECT.
+ */
+ index += _State(Context, index, 0x00860 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- if (hasICache)
+ if (((((gctUINT32) (Context->hardware->identity.chipMinorFeatures3)) >> (0 ? 3:3) & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))))
{
/* I-Cache states. */
index += _State(Context, index, 0x00868 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
@@ -1299,122 +791,24 @@ if (halti5){ vsConstBase = 0xD000;
index += _State(Context, index, 0x01028 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _CLOSE_RANGE();
- if (hasICachePrefetch)
+ if (halti3)
{
- if (halti5)
- {
- index += _State(Context, index, 0x15604 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
- index += _State(Context, index, 0x01094 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
- }
- else
- {
- index += _State(Context, index, 0x00890 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
- index += _State(Context, index, 0x0104C >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
- }
+ index += _State(Context, index, 0x00890 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, 0x0104C >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
index += _CLOSE_RANGE();
}
}
/* Vertex Shader states. */
index += _State(Context, index, 0x00804 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x00808 >> 2, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 5:0) - (0 ? 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ?
- 5:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 5:0) - (0 ?
- 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ?
- 5:0))), 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x00808 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x0080C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x00810 >> 2, 0x00000000, 4, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x00820 >> 2, 0x00000000, 4, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00830 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- if (halti5)
- {
- index += _State(Context, index, 0x00898 >> 2, 0x00000000, 2, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x008A0 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x00870 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x008A8 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x008C0 >> 2, 0x00000000, 8, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x008E0 >> 2, 0x00000000, 8, gcvFALSE, gcvFALSE);
- }
- else
- {
- index += _State(Context, index, 0x00810 >> 2, 0x00000000, 4, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x00820 >> 2, 0x00000000, 4, gcvFALSE, gcvFALSE);
- }
-
index += _CLOSE_RANGE();
- /* GS */
- if (hasGS)
- {
- index += _State(Context, index, 0x01100 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x01104 >> 2, 0x00000001, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x01108 >> 2, 0x01000001, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x0110C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x01110 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x01114 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
- index += _State(Context, index, 0x0111C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x01140 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x01144 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x01148 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x0114C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x01154 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x01120 >> 2, 0x00000000, 8, gcvFALSE, gcvFALSE);
- index += _CLOSE_RANGE();
- }
-
- /* TCS & TES */
-
- if (hasTS)
- {
- index += _State(Context, index, 0x007C0 >> 2, 0x00000003, 1, gcvFALSE, gcvFALSE);
-
- index += _State(Context, index, 0x14A14 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14A18 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14A1C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14A40 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14A00 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14A04 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14A08 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
- index += _State(Context, index, 0x14A10 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14A20 >> 2, 0x00000000, 8, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14A44 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14A4C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
-
- index += _CLOSE_RANGE();
-
- index += _State(Context, index, 0x14B18 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14B1C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14B20 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14B04 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14B08 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14B0C >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
- index += _State(Context, index, 0x14B14 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14B40 >> 2, 0x00000000, 8, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14B24 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14B2C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14B34 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
-
- index += _State(Context, index, 0x14B00 >> 2, 0x00040000, 1, gcvFALSE, gcvFALSE);
-
- }
-
- index += _CLOSE_RANGE();
-
- /* TFB */
- if (gckHARDWARE_IsFeatureAvailable(Context->hardware, gcvFEATURE_HW_TFB))
- {
- index += _State(Context, index, 0x1C000 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x1C008 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
- index += _State(Context, index, (0x1C040 >> 2) + (0 << 4), 0x00000000, 4, gcvFALSE, gcvTRUE);
- index += _State(Context, index, 0x1C080 >> 2, 0x00000000, 4, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x1C0C0 >> 2, 0x00000000, 4, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x1C100 >> 2, 0x00000000, 4, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x1C800 >> 2, 0x00000000, 128*4, gcvFALSE, gcvFALSE);
-
- index += _State(Context, index, 0x1C014 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
- index += _CLOSE_RANGE();
-
- }
-
/* Primitive Assembly states. */
index += _State(Context, index, 0x00A00 >> 2, 0x00000000, 1, gcvTRUE, gcvFALSE);
index += _State(Context, index, 0x00A04 >> 2, 0x00000000, 1, gcvTRUE, gcvFALSE);
@@ -1423,10 +817,11 @@ if (halti5){ vsConstBase = 0xD000;
index += _State(Context, index, 0x00A10 >> 2, 0x00000000, 1, gcvTRUE, gcvFALSE);
index += _State(Context, index, 0x00A14 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00A18 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x00A1C >> 2, 0x3F000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x00A1C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00A28 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00A2C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00A30 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x00A40 >> 2, 0x00000000, Context->hardware->identity.varyingsCount, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00A34 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00A38 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00A3C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
@@ -1435,20 +830,11 @@ if (halti5){ vsConstBase = 0xD000;
index += _State(Context, index, 0x00A8C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00A88 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- if (halti5)
- {
- index += _State(Context, index, 0x00AA8 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x00A90 >> 2, 0x00000000, 4, gcvFALSE, gcvFALSE);
- }
- else
- {
- index += _State(Context, index, 0x00A40 >> 2, 0x00000000, Context->hardware->identity.varyingsCount, gcvFALSE, gcvFALSE);
- }
-
+#if gcdMULTI_GPU
index += _State(Context, index, 0x03A00 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x03A04 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x03A08 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
-
+#endif
/* Setup states. */
index += _State(Context, index, 0x00C00 >> 2, 0x00000000, 1, gcvTRUE, gcvFALSE);
index += _State(Context, index, 0x00C04 >> 2, 0x00000000, 1, gcvTRUE, gcvFALSE);
@@ -1462,7 +848,7 @@ if (halti5){ vsConstBase = 0xD000;
index += _State(Context, index, 0x00C24 >> 2, 0x00000000, 1, gcvTRUE, gcvFALSE);
/* Raster states. */
- index += _State(Context, index, 0x00E00 >> 2, 0x000000F1, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x00E00 >> 2, 0x00000001, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00E10 >> 2, 0x00000000, 4, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00E04 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00E40 >> 2, 0x00000000, 16, gcvFALSE, gcvFALSE);
@@ -1475,194 +861,132 @@ if (halti5){ vsConstBase = 0xD000;
index += _State(Context, index, 0x00E0C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
}
- if (halti5)
- {
- index += _State(Context, index, 0x00E34 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- }
-
-
/* Pixel Shader states. */
index += _State(Context, index, 0x01004 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x01008 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x0100C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x01010 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x01030 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x01034 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
if (halti2)
{
- index += _State(Context, index, 0x01040 >> 2, 0x00000000, 2, gcvFALSE, gcvFALSE);
- }
-
- if (numRT == 8)
- {
index += _State(Context, index, 0x0102C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x01034 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x01038 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
}
- if (halti4)
- {
- index += _State(Context, index, 0x01054 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- }
-
- if (halti5)
- {
- index += _State(Context, index, 0x01080 >> 2, 0x00000000, 4, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x01058 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x01098 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- }
-
-
index += _CLOSE_RANGE();
/* Texture states. */
- if (hasTXdesc)
- {
- /* Texture descriptor states */
- index += _State(Context, index, 0x14C40 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
-
- index += _State(Context, index, 0x16C00 >> 2, 0x00000000, numSamplers, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x16E00 >> 2, 0x00000000, numSamplers, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x17000 >> 2, 0x00000000, numSamplers, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x17200 >> 2, 0x00000000, numSamplers, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x17400 >> 2, 0x00000000, numSamplers, gcvFALSE, gcvFALSE);
-
- index += _State(Context, index, (0x15C00 >> 2) + (0 << 0), 0x00000000, numSamplers, gcvFALSE, gcvTRUE);
- index += _State(Context, index, 0x15E00 >> 2, 0x00000000, numSamplers, gcvFALSE, gcvFALSE);
-
- index += _CLOSE_RANGE();
+ index += _State(Context, index, 0x02000 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x02040 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x02080 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x020C0 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x02100 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x02140 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x02180 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x021C0 >> 2, 0x00321000, 12, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x02200 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x02240 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, (0x02400 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, (0x02440 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, (0x02480 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, (0x024C0 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, (0x02500 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, (0x02540 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, (0x02580 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, (0x025C0 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, (0x02600 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, (0x02640 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, (0x02680 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, (0x026C0 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, (0x02700 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, (0x02740 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
+ index += _CLOSE_RANGE();
- _StateMirror(Context, 0x16000 >> 2, numSamplers , 0x16C00 >> 2);
- _StateMirror(Context, 0x16200 >> 2, numSamplers , 0x16E00 >> 2);
- _StateMirror(Context, 0x16400 >> 2, numSamplers , 0x17000 >> 2);
- _StateMirror(Context, 0x16600 >> 2, numSamplers , 0x17200 >> 2);
- _StateMirror(Context, 0x16800 >> 2, numSamplers , 0x17400 >> 2);
- _StateMirror(Context, 0x15800 >> 2, numSamplers , 0x15C00 >> 2);
- _StateMirror(Context, 0x15A00 >> 2, numSamplers , 0x15E00 >> 2);
- }
- else
+ if ((((((gctUINT32) (Context->hardware->identity.chipMinorFeatures1)) >> (0 ? 22:22)) & ((gctUINT32) ((((1 ? 22:22) - (0 ? 22:22) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 22:22) - (0 ? 22:22) + 1)))))) ))
{
- index += _State(Context, index, 0x02000 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x02040 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x02080 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x020C0 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x02100 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x02140 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x02180 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x021C0 >> 2, 0x00321000, 12, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x02200 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x02240 >> 2, 0x00000000, 12, gcvFALSE, gcvFALSE);
- index += _State(Context, index, (0x02400 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
- index += _State(Context, index, (0x02440 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
- index += _State(Context, index, (0x02480 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
- index += _State(Context, index, (0x024C0 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
- index += _State(Context, index, (0x02500 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
- index += _State(Context, index, (0x02540 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
- index += _State(Context, index, (0x02580 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
- index += _State(Context, index, (0x025C0 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
- index += _State(Context, index, (0x02600 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
- index += _State(Context, index, (0x02640 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
- index += _State(Context, index, (0x02680 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
- index += _State(Context, index, (0x026C0 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
- index += _State(Context, index, (0x02700 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
- index += _State(Context, index, (0x02740 >> 2) + (0 << 4), 0x00000000, 12, gcvFALSE, gcvTRUE);
- index += _CLOSE_RANGE();
+ /*
+ * Linear stride LODn will overwrite LOD0 on GC880,GC2000.
+ * And only LOD0 is valid for this register.
+ */
+ gctUINT count = halti1 ? 14 : 1;
- if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_TEXTURE_LINEAR))
+ for (i = 0; i < 12; i += 1)
{
- /*
- * Linear stride LODn will overwrite LOD0 on GC880,GC2000.
- * And only LOD0 is valid for this register.
- */
- gctUINT count = halti1 ? 14 : 1;
-
- for (i = 0; i < 12; i += 1)
- {
- index += _State(Context, index, (0x02C00 >> 2) + i * 16, 0x00000000, count, gcvFALSE, gcvFALSE);
- }
- }
-
- if (halti1)
- {
- gctUINT texBlockCount;
- gctUINT gcregTXLogSizeResetValue;
-
- /* Enable the integer filter pipe for all texture samplers
- so that the floating point filter clock will shut off until
- we start using the floating point filter.
- */
- gcregTXLogSizeResetValue = ((((gctUINT32) (0x00000000)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 29:29) - (0 ? 29:29) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 29:29) - (0 ? 29:29) + 1))))))) << (0 ?
- 29:29))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 29:29) - (0 ? 29:29) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 29:29) - (0 ? 29:29) + 1))))))) << (0 ? 29:29)));
-
- /* New texture block. */
- index += _State(Context, index, 0x10000 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x10080 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x10100 >> 2, gcregTXLogSizeResetValue, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x10180 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x10200 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x10280 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x10300 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x10380 >> 2, 0x00321000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x10400 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x10480 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
-
- if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_TX_FILTER))
- {
- index += _State(Context, index, 0x12000 >> 2, 0x00000000, 256, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x12400 >> 2, 0x00000000, 256, gcvFALSE, gcvFALSE);
- }
-
- texBlockCount = ((512) >> (4));
-
- for (i = 0; i < texBlockCount; i += 1)
- {
- index += _State(Context, index, (0x10800 >> 2) + (i << 4), 0x00000000, 14, gcvFALSE, gcvTRUE);
- }
+ index += _State(Context, index, (0x02C00 >> 2) + i * 16, 0x00000000, count, gcvFALSE, gcvFALSE);
}
+ }
- if (gckHARDWARE_IsFeatureAvailable(Context->hardware, gcvFEATURE_TEX_BASELOD))
- {
- index += _State(Context, index, 0x10700 >> 2, 0x00000F00, 32, gcvFALSE, gcvFALSE);
- }
+ if (halti1)
+ {
+ gctUINT texBlockCount;
+ gctUINT gcregTXLogSizeResetValue;
- if (halti3 ||
- gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_TX_SUPPORT_DEC))
+ /* Enable the integer filter pipe for all texture samplers
+ so that the floating point filter clock will shut off until
+ we start using the floating point filter.
+ */
+ gcregTXLogSizeResetValue = ((((gctUINT32) (0x00000000)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 29:29) - (0 ? 29:29) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 29:29) - (0 ? 29:29) + 1))))))) << (0 ? 29:29))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 29:29) - (0 ? 29:29) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 29:29) - (0 ? 29:29) + 1))))))) << (0 ? 29:29)));
+
+ /* New texture block. */
+ index += _State(Context, index, 0x10000 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x10080 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x10100 >> 2, gcregTXLogSizeResetValue, 32, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x10180 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x10200 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x10280 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x10300 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x10380 >> 2, 0x00321000, 32, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x10400 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x10480 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
+
+ if ((((((gctUINT32) (Context->hardware->identity.chipMinorFeatures2)) >> (0 ? 15:15)) & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1)))))) ))
{
- index += _State(Context, index, 0x10780 >> 2, 0x00030000, 32, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x12000 >> 2, 0x00000000, 256, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x12400 >> 2, 0x00000000, 256, gcvFALSE, gcvFALSE);
}
- if (halti4)
- {
- index += _State(Context, index, 0x11200 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x11280 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- }
+ texBlockCount = ((512) >> (4));
- if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_TX_FRAC_PRECISION_6BIT))
+ for (i = 0; i < texBlockCount; i += 1)
{
- index += _State(Context, index, 0x11000 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x11080 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x11100 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x11180 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x11300 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, (0x10800 >> 2) + (i << 4), 0x00000000, 14, gcvFALSE, gcvTRUE);
}
+ }
- /* ASTC */
- if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_TEXTURE_ASTC))
- {
- index += _State(Context, index, 0x10500 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x10580 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x10600 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x10680 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
- }
+ if (halti2)
+ {
+ index += _State(Context, index, 0x10700 >> 2, 0x00000F00, 32, gcvFALSE, gcvFALSE);
}
if (halti3)
{
- index += _State(Context, index, 0x14C00 >> 2, 0x00000000, 16, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x10780 >> 2, 0x00030000, 32, gcvFALSE, gcvFALSE);
+ }
+
+ /* ASTC */
+ if ((((((gctUINT32) (Context->hardware->identity.chipMinorFeatures4)) >> (0 ? 13:13)) & ((gctUINT32) ((((1 ? 13:13) - (0 ? 13:13) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:13) - (0 ? 13:13) + 1)))))) ))
+ {
+ index += _State(Context, index, 0x10500 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x10580 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x10600 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x10680 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
}
+ /* YUV. */
+ index += _State(Context, index, 0x01678 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x0167C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x01680 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, 0x01684 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x01688 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, 0x0168C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x01690 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, 0x01694 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x01698 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, 0x0169C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _CLOSE_RANGE();
+
/* Thread walker states. */
index += _State(Context, index, 0x00900 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00904 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
@@ -1674,7 +998,7 @@ if (halti5){ vsConstBase = 0xD000;
index += _State(Context, index, 0x0091C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00924 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_SHADER_ENHANCEMENTS2))
+ if (((((gctUINT32) (Context->hardware->identity.chipMinorFeatures3)) >> (0 ? 21:21) & ((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1))))))))
{
index += _State(Context, index, 0x00940 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00944 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
@@ -1684,61 +1008,17 @@ if (halti5){ vsConstBase = 0xD000;
index += _State(Context, index, 0x00954 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
}
- if (halti5)
- {
- index += _State(Context, index, 0x00958 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x0095C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x00960 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- }
-
index += _CLOSE_RANGE();
- /* VS/PS Start/End PC register */
- if (halti5)
- {
- index += _State(Context, index, 0x00874 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x008BC >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x0087C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x01090 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _CLOSE_RANGE();
- }
- else if (hasICache)
+ if (!halti3)
{
- /* New Shader instruction PC registers(20bit). */
- index += _State(Context, index, 0x00874 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x00878 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x0087C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x00880 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _CLOSE_RANGE();
- }
- else
- {
- if (Context->hardware->identity.instructionCount <= 256)
- {
- /* old shader instruction PC registers (12bit)*/
- index += _State(Context, index, 0x00800 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x00838 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _CLOSE_RANGE();
-
- index += _State(Context, index, 0x01000 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x01018 >> 2, 0x01000000, 1, gcvFALSE, gcvFALSE);
- index += _CLOSE_RANGE();
- }
- else
+ if (Context->hardware->identity.instructionCount > 1024)
{
- /* New Shader instruction PC registers (16bit) */
+ /* New Shader instruction PC registers. */
index += _State(Context, index, 0x0085C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x0101C >> 2, 0x00000100, 1, gcvFALSE, gcvFALSE);
index += _CLOSE_RANGE();
- }
- }
-
- if (!hasICachePrefetch)
- {
- /* This unified one need SELECT bit to steer */
- if (Context->hardware->identity.instructionCount > 1024)
- {
for (i = 0;
i < Context->hardware->identity.instructionCount << 2;
i += 256 << 2
@@ -1748,10 +1028,14 @@ if (halti5){ vsConstBase = 0xD000;
index += _CLOSE_RANGE();
}
}
- /* This unified one is steered by base adddress, it's automatical. */
else if (Context->hardware->identity.instructionCount > 256)
{
- /* VS instruction memory. */
+ /* New Shader instruction PC registers. */
+ index += _State(Context, index, 0x0085C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x0101C >> 2, 0x00000100, 1, gcvFALSE, gcvFALSE);
+ index += _CLOSE_RANGE();
+
+ /* VX instruction memory. */
for (i = 0;
i < Context->hardware->identity.instructionCount << 2;
i += 256 << 2
@@ -1763,21 +1047,36 @@ if (halti5){ vsConstBase = 0xD000;
_StateMirror(Context, 0x08000 >> 2, Context->hardware->identity.instructionCount << 2 , 0x0C000 >> 2);
}
- /* if (Context->hardware->identity.instructionCount <= 256). This is non-unified one. */
- else
+ else /* if (Context->hardware->identity.instructionCount <= 256) */
{
+ /* old shader instruction PC registers */
+ index += _State(Context, index, 0x00800 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x00838 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _CLOSE_RANGE();
+
+ index += _State(Context, index, 0x01000 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x01018 >> 2, 0x01000000, 1, gcvFALSE, gcvFALSE);
+ index += _CLOSE_RANGE();
+
index += _State(Context, index, 0x04000 >> 2, 0x00000000, 1024, gcvFALSE, gcvFALSE);
index += _CLOSE_RANGE();
index += _State(Context, index, 0x06000 >> 2, 0x00000000, 1024, gcvFALSE, gcvFALSE);
index += _CLOSE_RANGE();
}
}
+ /* I cache use the new instruction PC registers */
+ else
+ {
+ /* New Shader instruction PC registers. */
+ index += _State(Context, index, 0x0085C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x0101C >> 2, 0x00000100, 1, gcvFALSE, gcvFALSE);
+ index += _CLOSE_RANGE();
+ }
if (unifiedUniform)
{
gctINT numConstants = Context->hardware->identity.numConstants;
- /* Base Offset register */
index += _State(Context, index, 0x01024 >> 2, 0x00000100, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x00864 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _CLOSE_RANGE();
@@ -1788,36 +1087,15 @@ if (halti5){ vsConstBase = 0xD000;
numConstants -= 256
)
{
- if (halti5)
+ if (numConstants >= 256)
{
- if (numConstants >= 256)
- {
- index += _State(Context, index, (0x36000 >> 2) + i, 0x00000000, 256 << 2, gcvFALSE, gcvFALSE);
- }
- else
- {
- index += _State(Context, index, (0x36000 >> 2) + i, 0x00000000, numConstants << 2, gcvFALSE, gcvFALSE);
- }
- index += _CLOSE_RANGE();
+ index += _State(Context, index, (0x30000 >> 2) + i, 0x00000000, 256 << 2, gcvFALSE, gcvFALSE);
}
else
{
- if (numConstants >= 256)
- {
- index += _State(Context, index, (0x30000 >> 2) + i, 0x00000000, 256 << 2, gcvFALSE, gcvFALSE);
- }
- else
- {
- index += _State(Context, index, (0x30000 >> 2) + i, 0x00000000, numConstants << 2, gcvFALSE, gcvFALSE);
- }
-
- index += _CLOSE_RANGE();
+ index += _State(Context, index, (0x30000 >> 2) + i, 0x00000000, numConstants << 2, gcvFALSE, gcvFALSE);
}
- }
-
- if (halti5)
- {
- _StateMirror(Context, 0x34000 >> 2, Context->hardware->identity.numConstants << 2 , 0x36000 >> 2);
+ index += _CLOSE_RANGE();
}
}
#if gcdENABLE_UNIFIED_CONSTANT
@@ -1828,17 +1106,6 @@ if (halti5){ vsConstBase = 0xD000;
index += _State(Context, index, 0x07000 >> 2, 0x00000000, fragmentUniforms * 4, gcvFALSE, gcvFALSE);
}
- if (halti1)
- {
- index += _State(Context, index, 0x00884 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- }
-
- if (halti5)
- {
- /* (todo) should remove out from state map later*/
- index += _State(Context, index, 0x008B0 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- }
-
/* Store the index of the "XD" entry. */
Context->entryOffsetXDFrom3D = (gctUINT)index * gcmSIZEOF(gctUINT32);
@@ -1858,28 +1125,25 @@ if (halti5){ vsConstBase = 0xD000;
index += _State(Context, index, 0x01434 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x01454 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x01458 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, 0x0145C >> 2, 0x00000010, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x014A0 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x014A8 >> 2, 0xFFFFFFFF, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x014AC >> 2, 0xFFFFFFFF, 1, gcvFALSE, gcvFALSE);
- if(gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_HALF_FLOAT_PIPE) )
+ if(((((gctUINT32) (Context->hardware->identity.chipMinorFeatures1)) >> (0 ? 11:11) & ((gctUINT32) ((((1 ? 11:11) - (0 ? 11:11) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 11:11) - (0 ? 11:11) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) )
{
index += _State(Context, index, 0x014B0 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x014B4 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
}
+
index += _State(Context, index, 0x014A4 >> 2, 0x000E400C, 1, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x01580 >> 2, 0x00000000, 3, gcvFALSE, gcvFALSE);
index += _State(Context, index, 0x014B8 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- if (halti3)
- {
- index += _State(Context, index, 0x0103C >> 2, 0x76543210, 1, gcvFALSE, gcvFALSE);
- }
/* Composition states. */
index += _State(Context, index, 0x03008 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
-
- index += _State(Context, index, (0x01460 >> 2) + (0 << 3), 0x00000000, Context->hardware->identity.pixelPipes, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, (0x01460 >> 2) + (0 << 3), 0x00000000, Context->hardware->identity.pixelPipes, gcvFALSE, gcvTRUE);
if (Context->hardware->identity.pixelPipes == 1)
{
@@ -1887,6 +1151,7 @@ if (halti5){ vsConstBase = 0xD000;
index += _State(Context, index, 0x01410 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
}
+
if (Context->hardware->identity.pixelPipes > 1 || halti0)
{
index += _State(Context, index, (0x01480 >> 2) + (0 << 3), 0x00000000, Context->hardware->identity.pixelPipes, gcvFALSE, gcvTRUE);
@@ -1897,7 +1162,7 @@ if (halti5){ vsConstBase = 0xD000;
index += _State(Context, index, (0x01500 >> 2) + (i << 3), 0x00000000, Context->hardware->identity.pixelPipes, gcvFALSE, gcvTRUE);
}
- if (numRT == 8)
+ if (halti2)
{
for (i = 0; i < 7; i++)
{
@@ -1912,32 +1177,73 @@ if (halti5){ vsConstBase = 0xD000;
index += _State(Context, index, 0x014BC >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
}
- if (halti4)
- {
- index += _State(Context, index, 0x014C0 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- }
-
- if (hasGS)
- {
- index += _State(Context, index, 0x038A0 >> 2, 0x00000000, 8, gcvFALSE, gcvFALSE);
- }
-
- if (halti5)
- {
- index += _State(Context, index, 0x14920 >> 2, 0x00000000, 7, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14940 >> 2, 0x00000000, 7, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14960 >> 2, 0x00000000, 7, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x14980 >> 2, 0x00000000, 7, gcvFALSE, gcvFALSE);
- index += _State(Context, index, 0x149A0 >> 2, 0x00000000, 7, gcvFALSE, gcvFALSE);
- }
+ /* Resolve states. */
+ index += _State(Context, index, 0x01604 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x01608 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, 0x0160C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x01610 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, 0x01614 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x01620 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x01630 >> 2, 0x00000000, 2, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x01640 >> 2, 0x00000000, 4, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x0163C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x016A0 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x016B4 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _CLOSE_RANGE();
- if (hasRobustness)
- {
- index += _State(Context, index, 0x149C0 >> 2, 0x00000000, 8, gcvFALSE, gcvTRUE);
- index += _State(Context, index, 0x014C4 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
- }
+ if ((Context->hardware->identity.pixelPipes > 1) || halti1)
+ {
+ index += _State(Context, index, (0x016C0 >> 2) + (0 << 3), 0x00000000, Context->hardware->identity.pixelPipes, gcvFALSE, gcvTRUE);
+
+ index += _State(Context, index, (0x016E0 >> 2) + (0 << 3), 0x00000000, Context->hardware->identity.pixelPipes, gcvFALSE, gcvTRUE);
+
+ index += _State(Context, index, 0x01700 >> 2, 0x00000000, Context->hardware->identity.pixelPipes, gcvFALSE, gcvFALSE);
+ }
+
+#if gcd3DBLIT
+ index += _State(Context, index, (0x14000 >> 2) + (0 << 1), 0x00000000, 2, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, 0x14008 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x1400C >> 2, 0x0001C800, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14010 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, 0x14014 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, (0x14018 >> 2) + (0 << 1), 0x00000000, 2, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, 0x14020 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE);
+ index += _State(Context, index, 0x14024 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14028 >> 2, 0x0001C800, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x1402C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14030 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14034 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14038 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x1403C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14040 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14044 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14048 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x1404C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14050 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14058 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x1405C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14054 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14100 >> 2, 0x00000000, 64, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14200 >> 2, 0x00000000, 64, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14064 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14068 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+
+ index += _State(Context, index, 0x1406C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14070 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14074 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14078 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x1407C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14080 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14084 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14088 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x1408C >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14090 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+
+ index += _State(Context, index, 0x14094 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ index += _State(Context, index, 0x14098 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+#endif
- /* Memory Controller */
+ /* Tile status. */
index += _State(Context, index, 0x01654 >> 2, 0x00200000, 1, gcvFALSE, gcvFALSE);
index += _CLOSE_RANGE();
@@ -1971,7 +1277,7 @@ if (halti5){ vsConstBase = 0xD000;
index += _CLOSE_RANGE();
- if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_BUG_FIXES18))
+ if(((((gctUINT32) (Context->hardware->identity.chipMinorFeatures4)) >> (0 ? 25:25) & ((gctUINT32) ((((1 ? 25:25) - (0 ? 25:25) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:25) - (0 ? 25:25) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 25:25) - (0 ? 25:25) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:25) - (0 ? 25:25) + 1))))))))
{
index += _State(Context, index, 0x03860 >> 2, 0x6, 1, gcvFALSE, gcvFALSE);
index += _CLOSE_RANGE();
@@ -1983,15 +1289,6 @@ if (halti5){ vsConstBase = 0xD000;
index += _CLOSE_RANGE();
}
- if (hasSecurity || hasRobustness)
- {
- index += _State(Context, index, 0x001AC >> 2, ((((gctUINT32) (0)) & ~(((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))), 1,
- gcvFALSE, gcvFALSE);
- }
-
/* Semaphore/stall. */
index += _SemaphoreStall(Context, index);
#endif
@@ -2004,15 +1301,8 @@ if (halti5){ vsConstBase = 0xD000;
if (buffer != gcvNULL)
{
buffer[index + 0]
- = ((((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) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
buffer[index + 1]
= 0;
@@ -2030,6 +1320,9 @@ if (halti5){ vsConstBase = 0xD000;
/* Store the 3D entry index. */
Context->entryOffsetXDFrom2D = (gctUINT)index * gcmSIZEOF(gctUINT32);
+ /* Flush 2D pipe. */
+ index += _FlushPipe(Context, index, gcvPIPE_2D);
+
/* Switch to 3D pipe. */
index += _SwitchPipe(Context, index, gcvPIPE_3D);
@@ -2039,15 +1332,8 @@ if (halti5){ vsConstBase = 0xD000;
if (buffer != gcvNULL)
{
buffer[index + 0]
- = ((((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) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
buffer[index + 1]
= 0;
@@ -2061,14 +1347,8 @@ if (halti5){ vsConstBase = 0xD000;
Context->totalSize = index * gcmSIZEOF(gctUINT32);
-#if gcdENABLE_3D
- psConstBase = psConstBase;
- vsConstBase = vsConstBase;
- constMax = constMax;
-#endif
/* Success. */
- gcmkFOOTER_NO();
return gcvSTATUS_OK;
}
#endif
@@ -2150,6 +1430,31 @@ _DestroyContext(
gcmkONERROR(gcmkOS_SAFE_FREE(Context->os, Context->hint));
}
#endif
+ /* Free record array copy. */
+#if REMOVE_DUPLICATED_COPY_FROM_USER
+ if (Context->recordArrayMap != gcvNULL)
+ {
+ gctUINT i;
+
+ for (i = 0; i < gcdCONTEXT_BUFFER_COUNT; i++)
+ {
+ gcsRECORD_ARRAY_MAP_PTR map = &Context->recordArrayMap[i];
+
+ if (map->kData != gcvNULL)
+ {
+ /* Free record array. */
+ gcmkONERROR(gcmkOS_SAFE_FREE(Context->os, map->kData));
+ }
+ }
+
+ gcmkONERROR(gcmkOS_SAFE_FREE(Context->os, Context->recordArrayMap));
+ }
+#else
+ if (Context->recordArray != gcvNULL)
+ {
+ gcmkONERROR(gcmkOS_SAFE_FREE(Context->os, Context->recordArray));
+ }
+#endif
/* Mark the gckCONTEXT object as unknown. */
Context->object.type = gcvOBJ_UNKNOWN;
@@ -2162,63 +1467,6 @@ OnError:
return status;
}
-#if (gcdENABLE_3D || gcdENABLE_2D)
-static gceSTATUS
-_AllocateContextBuffer(
- IN gckCONTEXT Context,
- IN gcsCONTEXT_PTR Buffer
- )
-{
- gceSTATUS status;
- gctPOINTER pointer;
- gctUINT32 address;
- gctSIZE_T totalSize = Context->totalSize;
-
- if (Context->hardware->kernel->virtualCommandBuffer)
- {
- gcmkONERROR(gckKERNEL_AllocateVirtualCommandBuffer(
- Context->hardware->kernel,
- gcvFALSE,
- &totalSize,
- &Buffer->physical,
- &pointer
- ));
-
- gcmkONERROR(gckKERNEL_GetGPUAddress(
- Context->hardware->kernel,
- pointer,
- gcvFALSE,
- Buffer->physical,
- &address
- ));
- }
- else
- {
- gcmkONERROR(gckOS_AllocateContiguous(
- Context->os,
- gcvFALSE,
- &totalSize,
- &Buffer->physical,
- &pointer
- ));
-
- gcmkONERROR(gckHARDWARE_ConvertLogical(
- Context->hardware,
- pointer,
- gcvFALSE,
- &address
- ));
- }
-
- Buffer->logical = pointer;
- Buffer->address = address;
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-#endif
/******************************************************************************\
**************************** Context Management API ****************************
@@ -2261,6 +1509,7 @@ gckCONTEXT_Construct(
gctUINT32 allocationSize;
gctUINT i;
gctPOINTER pointer = gcvNULL;
+ gctUINT32 address;
gcmkHEADER_ARG("Os=0x%08X Hardware=0x%08X", Os, Hardware);
@@ -2308,17 +1557,43 @@ gckCONTEXT_Construct(
/* Get the command buffer requirements. */
gcmkONERROR(gckHARDWARE_QueryCommandBuffer(
Hardware,
- gcvENGINE_RENDER,
&context->alignment,
&context->reservedHead,
- gcvNULL
+ &context->reservedTail
));
+ /* Mark the context as dirty to force loading of the entire state table
+ the first time. */
+ context->dirty = gcvTRUE;
+
+
/**************************************************************************/
/* Get the size of the context buffer. ************************************/
gcmkONERROR(_InitializeContextBuffer(context));
+
+ /**************************************************************************/
+ /* Compute the size of the record array. **********************************/
+
+ context->recordArraySize
+#ifdef DISABLE_RECORD_ARRAY_SIZE_OPTIMIZATION
+ = gcmSIZEOF(gcsSTATE_DELTA_RECORD) * (gctUINT)context->maxState;
+#else
+ = gcmSIZEOF(gcsSTATE_DELTA_RECORD) * (gctUINT)context->numStates;
+#endif
+
+#ifdef CONFIG_ANDROID
+ if (!((context->hardware->identity.chipModel == gcv3000)
+ && (context->hardware->identity.chipRevision == 0x5450)
+ && (context->hardware->identity.chipFlags & gcvCHIP_FLAG_GC2000_R2))
+ )
+ {
+ context->recordArraySize
+ = gcmSIZEOF(gcsSTATE_DELTA_RECORD) * (gctUINT)context->numStates;
+ }
+#endif
+
if (context->maxState > 0)
{
/**************************************************************************/
@@ -2369,6 +1644,8 @@ gckCONTEXT_Construct(
/* Allocate a context buffer. */
gcsCONTEXT_PTR buffer;
+ gctSIZE_T totalSize = context->totalSize;
+
/* Allocate the context buffer structure. */
gcmkONERROR(gckOS_Allocate(
Os,
@@ -2411,9 +1688,44 @@ gckCONTEXT_Construct(
));
/* Create a new physical context buffer. */
- gcmkONERROR(_AllocateContextBuffer(
- context, buffer
- ));
+ if (context->hardware->kernel->virtualCommandBuffer)
+ {
+ gcmkONERROR(gckKERNEL_AllocateVirtualCommandBuffer(
+ context->hardware->kernel,
+ gcvFALSE,
+ &totalSize,
+ &buffer->physical,
+ &pointer
+ ));
+
+ gcmkONERROR(gckKERNEL_GetGPUAddress(
+ context->hardware->kernel,
+ pointer,
+ gcvFALSE,
+ buffer->physical,
+ &address
+ ));
+ }
+ else
+ {
+ gcmkONERROR(gckOS_AllocateContiguous(
+ Os,
+ gcvFALSE,
+ &totalSize,
+ &buffer->physical,
+ &pointer
+ ));
+
+ gcmkONERROR(gckHARDWARE_ConvertLogical(
+ context->hardware,
+ pointer,
+ gcvFALSE,
+ &address
+ ));
+ }
+
+ buffer->logical = pointer;
+ buffer->address = address;
/* Set gckEVENT object pointer. */
buffer->eventObj = Hardware->kernel->eventObj;
@@ -2595,13 +1907,16 @@ gckCONTEXT_Update(
gcsSTATE_DELTA_PTR kDelta = gcvNULL;
gcsSTATE_DELTA_RECORD_PTR record;
gcsSTATE_DELTA_RECORD_PTR recordArray = gcvNULL;
+#if REMOVE_DUPLICATED_COPY_FROM_USER
+ gcsRECORD_ARRAY_MAP_PTR recordArrayMap = gcvNULL;
+#endif
gctUINT elementCount;
gctUINT address;
gctUINT32 mask;
gctUINT32 data;
gctUINT index;
gctUINT i, j;
- gctUINT32 dirtyRecordArraySize = 0;
+ gctUINT32 dirtyRecordArraySize;
#if gcdSECURE_USER
gcskSECURE_CACHE_PTR cache;
@@ -2621,13 +1936,87 @@ gckCONTEXT_Update(
/* Check wehther we need to copy the structures or not. */
gcmkONERROR(gckOS_QueryNeedCopy(Context->os, ProcessID, &needCopy));
+ /* Allocate the copy buffer for the user record array. */
+#if REMOVE_DUPLICATED_COPY_FROM_USER
+ if (needCopy && (Context->recordArrayMap == gcvNULL))
+ {
+ gctSIZE_T size = gcmSIZEOF(struct _gcsRECORD_ARRAY_MAP)
+ * gcdCONTEXT_BUFFER_COUNT;
+
+ /* Allocate enough maps. */
+ gcmkONERROR(gckOS_Allocate(
+ Context->os,
+ size,
+ (gctPOINTER *) &Context->recordArrayMap
+ ));
+
+ gcmkONERROR(gckOS_ZeroMemory(Context->recordArrayMap, size));
+
+ for (i = 0; i < gcdCONTEXT_BUFFER_COUNT; i++)
+ {
+ /* Next mapping id. */
+ gctUINT n = (i + 1) % gcdCONTEXT_BUFFER_COUNT;
+
+ recordArrayMap = &Context->recordArrayMap[i];
+
+ /* Allocate the buffer. */
+ status = gckOS_Allocate(
+ Context->os,
+ Context->recordArraySize,
+ (gctPOINTER *) &recordArrayMap->kData
+ );
+
+ if (gcmIS_ERROR(status))
+ {
+ break;
+ }
+
+ /* Initialize fields. */
+ recordArrayMap->key = 0;
+ recordArrayMap->next = &Context->recordArrayMap[n];
+ }
+
+ if (gcmIS_ERROR(status))
+ {
+ /* Error roll back. */
+ for (i = 0; i < gcdCONTEXT_BUFFER_COUNT; i++)
+ {
+ recordArrayMap = &Context->recordArrayMap[i];
+
+ if (recordArrayMap->kData)
+ {
+ /* Free allocated recordArray. */
+ gcmkOS_SAFE_FREE(Context->os, recordArrayMap->kData);
+ recordArrayMap->kData = gcvNULL;
+ }
+ }
+
+ /* Free recordArray map. */
+ gcmkOS_SAFE_FREE(Context->os, Context->recordArrayMap);
+ Context->recordArrayMap = gcvNULL;
+
+ gcmkONERROR(status);
+ }
+ }
+#else
+ if (needCopy && (Context->recordArray == gcvNULL))
+ {
+ /* Allocate the buffer. */
+ gcmkONERROR(gckOS_Allocate(
+ Context->os,
+ Context->recordArraySize,
+ (gctPOINTER *) &Context->recordArray
+ ));
+ }
+#endif
+
/* Get the current context buffer. */
buffer = Context->buffer;
/* Wait until the context buffer becomes available; this will
also reset the signal and mark the buffer as busy. */
gcmkONERROR(gckOS_WaitSignal(
- Context->os, buffer->signal, gcvFALSE, gcvINFINITE
+ Context->os, buffer->signal, gcvINFINITE
));
#if gcdSECURE_USER
@@ -2667,16 +2056,76 @@ gckCONTEXT_Update(
dirtyRecordArraySize
= gcmSIZEOF(gcsSTATE_DELTA_RECORD) * kDelta->recordCount;
+#if REMOVE_DUPLICATED_COPY_FROM_USER
+ if (needCopy)
+ {
+ recordArray = gcvNULL;
+ recordArrayMap = Context->recordArrayMap;
+
+ do
+ {
+ /* Check if recordArray is alreay opened. */
+ if (recordArrayMap->key == kDelta->recordArray)
+ {
+ /* Found. */
+ recordArray = recordArrayMap->kData;
+ break;
+ }
+
+ recordArrayMap = recordArrayMap->next;
+ }
+ while (recordArrayMap != Context->recordArrayMap);
+
+ if (recordArray == gcvNULL)
+ {
+ while (recordArrayMap->key != 0)
+ {
+ /* Found an empty slot. */
+ recordArrayMap = recordArrayMap->next;
+ }
+
+ if (dirtyRecordArraySize)
+ {
+ /* Get access to the state records. */
+ gcmkONERROR(gckOS_CopyFromUserData(
+ kernel->os,
+ recordArrayMap->kData,
+ gcmUINT64_TO_PTR(kDelta->recordArray),
+ dirtyRecordArraySize
+ ));
+ }
+
+ /* Save user pointer as key. */
+ recordArrayMap->key = kDelta->recordArray;
+ recordArray = recordArrayMap->kData;
+ }
+ }
+ else
+ {
+ if (dirtyRecordArraySize)
+ {
+ /* Get access to the state records. */
+ gcmkONERROR(gckOS_MapUserPointer(
+ kernel->os,
+ gcmUINT64_TO_PTR(kDelta->recordArray),
+ dirtyRecordArraySize,
+ (gctPOINTER *) &recordArray
+ ));
+ }
+ }
+#else
if (dirtyRecordArraySize)
{
/* Get access to the state records. */
- gcmkONERROR(gckOS_MapUserPointer(
- kernel->os,
+ gcmkONERROR(gckKERNEL_OpenUserData(
+ kernel, needCopy,
+ Context->recordArray,
gcmUINT64_TO_PTR(kDelta->recordArray),
dirtyRecordArraySize,
(gctPOINTER *) &recordArray
));
}
+#endif
/* Merge all pending states. */
for (j = 0; j < kDelta->recordCount; j += 1)
@@ -2690,16 +2139,16 @@ gckCONTEXT_Update(
record = &recordArray[j];
/* Get the state address. */
- gcmkONERROR(gckOS_ReadMappedPointer(kernel->os, &record->address, &address));
+ address = record->address;
/* Make sure the state is a part of the mapping table. */
if (address >= Context->maxState)
{
gcmkTRACE(
gcvLEVEL_ERROR,
- "%s(%d): State 0x%04X (0x%04X) is not mapped.\n",
+ "%s(%d): State 0x%04X is not mapped.\n",
__FUNCTION__, __LINE__,
- address, address << 2
+ address
);
continue;
@@ -2721,24 +2170,15 @@ gckCONTEXT_Update(
if ((mask == 0) || (mask == ~0U))
{
/* Get the new data value. */
- gcmkONERROR(gckOS_ReadMappedPointer(kernel->os, &record->data, &data));
+ data = record->data;
/* Process special states. */
if (address == 0x0595)
{
/* Force auto-disable to be disabled. */
- data = ((((gctUINT32) (data)) & ~(((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)));
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ?
- 4:4))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 13:13) - (0 ? 13:13) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:13) - (0 ? 13:13) + 1))))))) << (0 ?
- 13:13))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 13:13) - (0 ? 13:13) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 13:13) - (0 ? 13:13) + 1))))))) << (0 ? 13:13)));
+ data = ((((gctUINT32) (data)) & ~(((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)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 13:13) - (0 ? 13:13) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:13) - (0 ? 13:13) + 1))))))) << (0 ? 13:13))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 13:13) - (0 ? 13:13) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:13) - (0 ? 13:13) + 1))))))) << (0 ? 13:13)));
}
#if gcdSECURE_USER
@@ -2778,18 +2218,43 @@ gckCONTEXT_Update(
/* Get the next state delta. */
nDelta = gcmUINT64_TO_PTR(kDelta->next);
+#if REMOVE_DUPLICATED_COPY_FROM_USER
+ if (needCopy)
+ {
+ if (kDelta->refCount == 0)
+ {
+ /* No other reference, reset the mapping. */
+ recordArrayMap->key = 0;
+ }
+ }
+ else
+ {
+ if (dirtyRecordArraySize)
+ {
+ /* Close access to the state records. */
+ gcmkONERROR(gckOS_UnmapUserPointer(
+ kernel->os,
+ gcmUINT64_TO_PTR(kDelta->recordArray),
+ dirtyRecordArraySize,
+ (gctPOINTER *) recordArray
+ ));
+ }
+
+ recordArray = gcvNULL;
+ }
+#else
if (dirtyRecordArraySize)
{
/* Get access to the state records. */
- gcmkONERROR(gckOS_UnmapUserPointer(
- kernel->os,
+ gcmkONERROR(gckKERNEL_CloseUserData(
+ kernel, needCopy,
+ gcvFALSE,
gcmUINT64_TO_PTR(kDelta->recordArray),
dirtyRecordArraySize,
- recordArray
+ (gctPOINTER *) &recordArray
));
-
- recordArray = gcvNULL;
}
+#endif
/* Close access to the current state delta. */
gcmkONERROR(gckKERNEL_CloseUserData(
@@ -2803,41 +2268,29 @@ gckCONTEXT_Update(
uDelta = nDelta;
}
- /* Hardware disables all input attribute when the attribute 0 is programmed,
- it then reenables those attributes that were explicitely programmed by
+ /* Hardware disables all input streams when the stream 0 is programmed,
+ it then reenables those streams that were explicitely programmed by
the software. Because of this we cannot program the entire array of
- values, otherwise we'll get all attributes reenabled, but rather program
+ values, otherwise we'll get all streams reenabled, but rather program
only those that are actully needed by the software. */
if (elementCount != 0)
{
gctUINT base;
gctUINT nopCount;
gctUINT32_PTR nop;
- gctUINT fe2vsCount;
+ gctUINT fe2vsCount = 12;
- if (gckHARDWARE_IsFeatureAvailable(Context->hardware, gcvFEATURE_HALTI5))
- {
- fe2vsCount = 32;
- base = map[0x5E00].index;
- }
- else if (gckHARDWARE_IsFeatureAvailable(Context->hardware, gcvFEATURE_HALTI0))
+ if ((((((gctUINT32) (Context->hardware->identity.chipMinorFeatures1)) >> (0 ? 23:23)) & ((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1)))))) ))
{
fe2vsCount = 16;
- base = map[0x0180].index;
- }
- else
- {
- fe2vsCount = 12;
- base = map[0x0180].index;
}
+ /* Determine the base index of the vertex stream array. */
+ base = map[0x0180].index;
+
/* Set the proper state count. */
buffer->logical[base - 1]
- = ((((gctUINT32) (buffer->logical[base - 1])) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (elementCount ) & ((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (buffer->logical[base - 1])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (elementCount ) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
/* Determine the number of NOP commands. */
nopCount
@@ -2856,10 +2309,7 @@ gckCONTEXT_Update(
}
/* Generate a NOP command. */
- *nop = ((((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) (0x03 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+ *nop = ((((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) (0x03 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
/* Advance. */
nop += 2;
@@ -2944,12 +2394,12 @@ gckCONTEXT_Update(
OnError:
/* Get access to the state records. */
- if (kDelta != gcvNULL && recordArray != gcvNULL)
+ if (kDelta != gcvNULL)
{
- gcmkVERIFY_OK(gckOS_UnmapUserPointer(
- kernel->os,
- gcmUINT64_TO_PTR(kDelta->recordArray),
- dirtyRecordArraySize,
+ gcmkVERIFY_OK(gckKERNEL_CloseUserData(
+ kernel, needCopy,
+ gcvFALSE,
+ gcmUINT64_TO_PTR(kDelta->recordArray), Context->recordArraySize,
(gctPOINTER *) &recordArray
));
}
@@ -2999,7 +2449,7 @@ gckCONTEXT_MapBuffer(
if (kernel->virtualCommandBuffer)
{
commandBuffer = (gckVIRTUAL_COMMAND_BUFFER_PTR)buffer->physical;
- physical = commandBuffer->virtualBuffer.physical;
+ physical = commandBuffer->physical;
gcmkONERROR(gckOS_CreateUserVirtualMapping(
kernel->os,
diff --git a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_context.h b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_context.h
index 2accbced43c9..d6b43a8e0090 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_context.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_context.h
@@ -58,6 +58,9 @@
#include "gc_hal_kernel_buffer.h"
+/* Exprimental optimization. */
+#define REMOVE_DUPLICATED_COPY_FROM_USER 1
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -79,7 +82,9 @@ typedef struct _gcsCONTEXT * gcsCONTEXT_PTR;
typedef struct _gcsCONTEXT
{
/* For debugging: the number of context buffer in the order of creation. */
+#if gcmIS_DEBUG(gcdDEBUG_CODE)
gctUINT num;
+#endif
/* Pointer to gckEVENT object. */
gckEVENT eventObj;
@@ -142,6 +147,7 @@ struct _gckCONTEXT
/* Command buffer alignment. */
gctUINT32 alignment;
gctUINT32 reservedHead;
+ gctUINT32 reservedTail;
/* Context buffer metrics. */
gctSIZE_T maxState;
@@ -155,12 +161,26 @@ struct _gckCONTEXT
gctUINT32 entryOffsetXDFrom2D;
gctUINT32 entryOffsetXDFrom3D;
+ /* Dirty flags. */
+ gctBOOL dirty;
+ gctBOOL dirty2D;
+ gctBOOL dirty3D;
+ gcsCONTEXT_PTR dirtyBuffer;
+
/* State mapping. */
gcsSTATE_MAP_PTR map;
/* List of context buffers. */
gcsCONTEXT_PTR buffer;
+ /* A copy of the user record array. */
+ gctUINT recordArraySize;
+#if REMOVE_DUPLICATED_COPY_FROM_USER
+ gcsRECORD_ARRAY_MAP_PTR recordArrayMap;
+#else
+ gcsSTATE_DELTA_RECORD_PTR recordArray;
+#endif
+
/* Requested pipe select for context. */
gcePIPE_SELECT entryPipe;
gcePIPE_SELECT exitPipe;
@@ -181,7 +201,41 @@ struct _gckCONTEXT
#if VIVANTE_PROFILER_CONTEXT
gcsPROFILER_COUNTERS latestProfiler;
gcsPROFILER_COUNTERS histroyProfiler;
- gcsPROFILER_COUNTERS preProfiler;
+
+#if USE_SW_RESET
+ /* RA */
+ gctUINT32 prevRaValidPixelCount;
+ gctUINT32 prevRaTotalQuadCount;
+ gctUINT32 prevRaValidQuadCountAfterEarlyZ;
+ gctUINT32 prevRaTotalPrimitiveCount;
+ gctUINT32 prevRaPipeCacheMissCounter;
+ gctUINT32 prevRaPrefetchCacheMissCounter;
+
+ /* PE */
+ gctUINT32 prevPePixelCountKilledByColorPipe;
+ gctUINT32 prevPePixelCountKilledByDepthPipe;
+ gctUINT32 prevPePixelCountDrawnByColorPipe;
+ gctUINT32 prevPePixelCountDrawnByDepthPipe;
+
+ /* PA */
+ gctUINT32 prevPaInputVtxCounter;
+ gctUINT32 prevPaInputPrimCounter;
+ gctUINT32 prevPaOutputPrimCounter;
+ gctUINT32 prevPaDepthClippedCounter;
+ gctUINT32 prevPaTrivialRejectedCounter;
+ gctUINT32 prevPaCulledCounter;
+
+ /* SH */
+ gctUINT32 prevVSInstCount;
+ gctUINT32 prevVSBranchInstCount;
+ gctUINT32 prevVSTexInstCount;
+ gctUINT32 prevVSVertexCount;
+ gctUINT32 prevPSInstCount;
+ gctUINT32 prevPSBranchInstCount;
+ gctUINT32 prevPSTexInstCount;
+ gctUINT32 prevPSPixelCount;
+#endif
+
#endif
};
diff --git a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.c b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.c
index ba8265885c5b..728006ef2ff0 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.c
+++ b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.c
@@ -59,7 +59,7 @@
#include "gc_hal_kernel_context.h"
#endif
-#include "gc_feature_database.h"
+#define gcdDISABLE_FE_L2 1
#define _GC_OBJ_ZONE gcvZONE_HARDWARE
@@ -93,23 +93,10 @@ typedef struct _gcsiDEBUG_REGISTERS
gctUINT shift;
gctUINT data;
gctUINT count;
- gctUINT32 pipeMask;
- gctUINT32 selectStart;
+ gctUINT32 signature;
}
gcsiDEBUG_REGISTERS;
-typedef struct _gcsFE_STACK
-{
- gctSTRING name;
- gctINT count;
- gctUINT32 highSelect;
- gctUINT32 lowSelect;
- gctUINT32 linkSelect;
- gctUINT32 clear;
- gctUINT32 next;
-}
-gcsFE_STACK;
-
/******************************************************************************\
********************************* Support Code *********************************
\******************************************************************************/
@@ -131,51 +118,34 @@ _ResetGPU(
IN gceCORE Core
);
-static void
-_GetEcoID(
- IN gckHARDWARE Hardware,
- IN OUT gcsHAL_QUERY_CHIP_IDENTITY_PTR Identity
- )
-{
- gcmkVERIFY_OK(gckOS_ReadRegisterEx(
- Hardware->os,
- Hardware->core,
- 0x000E8,
- &Identity->ecoID
- ));
-
- /* VIV: PXA1088. */
- if (_IsHardwareMatch(Hardware, 0x1000, 0x5037) && (Identity->chipDate == 0x20120617))
- {
- Identity->ecoID = 1;
- }
-
- /* VIV: BG2CT*/
- if (_IsHardwareMatch(Hardware, 0x320, 0x5303) && (Identity->chipDate == 0x20140511))
- {
- Identity->ecoID = 1;
- }
-
- /* VIV: Hope this is the end of list. */
-}
-
static gceSTATUS
-_IdentifyHardwareByDatabase(
- IN gckHARDWARE Hardware,
+_IdentifyHardware(
IN gckOS Os,
IN gceCORE Core,
OUT gcsHAL_QUERY_CHIP_IDENTITY_PTR Identity
)
{
gceSTATUS status;
+
gctUINT32 chipIdentity;
- gctUINT32 debugControl0;
- gcsFEATURE_DATABASE *database;
- gcmkHEADER_ARG("Os=0x%x", Os);
+ gctUINT32 streamCount = 0;
+ gctUINT32 registerMax = 0;
+ gctUINT32 threadCount = 0;
+ gctUINT32 shaderCoreCount = 0;
+ gctUINT32 vertexCacheSize = 0;
+ gctUINT32 vertexOutputBufferSize = 0;
+ gctUINT32 pixelPipes = 0;
+ gctUINT32 instructionCount = 0;
+ gctUINT32 numConstants = 0;
+ gctUINT32 bufferSize = 0;
+ gctUINT32 varyingsCount = 0;
+#if gcdMULTI_GPU
+ gctUINT32 gpuCoreCount = 0;
+#endif
+ gctUINT32 debugControl0 = 0;
- /* Get chip date. */
- gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x00028, &Identity->chipDate));
+ gcmkHEADER_ARG("Os=0x%x", Os);
/***************************************************************************
** Get chip ID and revision.
@@ -188,10 +158,7 @@ _IdentifyHardwareByDatabase(
&chipIdentity));
/* Special case for older graphic cores. */
- if (((((gctUINT32) (chipIdentity)) >> (0 ? 31:24) & ((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1)))))) == (0x01 & ((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:
-24) + 1))))))))
+ if (((((gctUINT32) (chipIdentity)) >> (0 ? 31:24) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1)))))) == (0x01 & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))))
{
Identity->chipModel = gcv500;
Identity->chipRevision = (((((gctUINT32) (chipIdentity)) >> (0 ? 15:12)) & ((gctUINT32) ((((1 ? 15:12) - (0 ? 15:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:12) - (0 ? 15:12) + 1)))))) );
@@ -218,6 +185,13 @@ _IdentifyHardwareByDatabase(
0x00024,
&Identity->chipRevision));
+ if ((Identity->chipModel == gcv2000) && (Identity->chipRevision & 0xffff0000) == 0xffff0000)
+ {
+ Identity->chipModel = gcv3000;
+ Identity->chipRevision &= 0xffff;
+ Identity->chipFlags |= gcvCHIP_FLAG_GC2000_R2;
+ }
+
if ((Identity->chipModel == gcv300)
&& (Identity->chipRevision == 0x2201)
)
@@ -257,189 +231,427 @@ _IdentifyHardwareByDatabase(
"Identity: chipRevision=%X",
Identity->chipRevision);
- _GetEcoID(Hardware, Identity);
-
- gcmkONERROR(
- gckOS_ReadRegisterEx(Os, Core,
- 0x00030,
- &Identity->customerID));
/***************************************************************************
** Get chip features.
*/
- database =
- Hardware->featureDatabase =
- gcQueryFeatureDB(
- Hardware->identity.chipModel,
- Hardware->identity.chipRevision,
- Hardware->identity.productID,
- Hardware->identity.ecoID,
- Hardware->identity.customerID);
-
- if (database == gcvNULL)
- {
- gcmkPRINT("[galcore]: Feature database is not found,"
- "chipModel=0x%0x, chipRevision=0x%x, productID=0x%x, ecoID=0x%x",
- Hardware->identity.chipModel,
- Hardware->identity.chipRevision,
- Hardware->identity.productID,
- Hardware->identity.ecoID);
- gcmkONERROR(gcvSTATUS_NOT_FOUND);
- }
-
- Identity->pixelPipes = database->NumPixelPipes;
- Identity->resolvePipes = database->NumResolvePipes;
- Identity->instructionCount = database->InstructionCount;
- Identity->numConstants = database->NumberOfConstants;
- Identity->varyingsCount = database->VaryingCount;
- Identity->gpuCoreCount = database->CoreCount;
- Identity->streamCount = database->Streams;
+ /* Read chip feature register. */
+ gcmkONERROR(
+ gckOS_ReadRegisterEx(Os, Core,
+ 0x0001C,
+ &Identity->chipFeatures));
- if (Identity->chipModel == gcv320)
+#if gcdENABLE_3D
+ /* Disable fast clear on GC700. */
+ if (Identity->chipModel == gcv700)
{
- gctUINT32 data;
+ Identity->chipFeatures
+ = ((((gctUINT32) (Identity->chipFeatures)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
+ }
+#endif
+ if (((Identity->chipModel == gcv500) && (Identity->chipRevision < 2))
+ || ((Identity->chipModel == gcv300) && (Identity->chipRevision < 0x2000))
+ )
+ {
+ /* GC500 rev 1.x and GC300 rev < 2.0 doesn't have these registers. */
+ Identity->chipMinorFeatures = 0;
+ Identity->chipMinorFeatures1 = 0;
+ Identity->chipMinorFeatures2 = 0;
+ Identity->chipMinorFeatures3 = 0;
+ Identity->chipMinorFeatures4 = 0;
+ Identity->chipMinorFeatures5 = 0;
+ Identity->chipMinorFeatures6 = 0;
+ }
+ else
+ {
+ /* Read chip minor feature register #0. */
gcmkONERROR(
- gckOS_ReadRegisterEx(Os,
- Core,
- 0x0002C,
- &data));
+ gckOS_ReadRegisterEx(Os, Core,
+ 0x00034,
+ &Identity->chipMinorFeatures));
- if ((data != 33956864) &&
- ((Identity->chipRevision == 0x5007) ||
- (Identity->chipRevision == 0x5220)))
+ if (((((gctUINT32) (Identity->chipMinorFeatures)) >> (0 ? 21:21) & ((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1)))))))
+ )
{
- Hardware->maxOutstandingReads = 0xFF &
- (Identity->chipRevision == 0x5220 ? 8 :
- (Identity->chipRevision == 0x5007 ? 12 : 0));
+ /* Read chip minor featuress register #1. */
+ gcmkONERROR(
+ gckOS_ReadRegisterEx(Os, Core,
+ 0x00074,
+ &Identity->chipMinorFeatures1));
+
+ /* Read chip minor featuress register #2. */
+ gcmkONERROR(
+ gckOS_ReadRegisterEx(Os, Core,
+ 0x00084,
+ &Identity->chipMinorFeatures2));
+
+ /*Identity->chipMinorFeatures2 &= ~(0x1 << 3);*/
+
+ /* Read chip minor featuress register #1. */
+ gcmkONERROR(
+ gckOS_ReadRegisterEx(Os, Core,
+ 0x00088,
+ &Identity->chipMinorFeatures3));
+
+
+ /* Read chip minor featuress register #4. */
+ gcmkONERROR(
+ gckOS_ReadRegisterEx(Os, Core,
+ 0x00094,
+ &Identity->chipMinorFeatures4));
+
+ /* Read chip minor featuress register #5. */
+ gcmkONERROR(
+ gckOS_ReadRegisterEx(Os, Core,
+ 0x000A0,
+ &Identity->chipMinorFeatures5));
+
+ /* Read chip minor featuress register #6. */
+ gcmkONERROR(
+ gckOS_ReadRegisterEx(Os, Core,
+ 0x000DC,
+ &Identity->chipMinorFeatures6));
+ }
+ else
+ {
+ /* Chip doesn't has minor features register #1 or 2 or 3 or 4. */
+ Identity->chipMinorFeatures1 = 0;
+ Identity->chipMinorFeatures2 = 0;
+ Identity->chipMinorFeatures3 = 0;
+ Identity->chipMinorFeatures4 = 0;
+ Identity->chipMinorFeatures5 = 0;
+ Identity->chipMinorFeatures6 = 0;
}
}
- if (_IsHardwareMatch(Hardware, gcv880, 0x5107))
+ /* Get the Supertile layout in the hardware. */
+ if (((((gctUINT32) (Identity->chipMinorFeatures3)) >> (0 ? 26:26) & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1)))))))
+ || ((((gctUINT32) (Identity->chipMinorFeatures3)) >> (0 ? 8:8) & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1))))))))
{
- Hardware->maxOutstandingReads = 0x00010;
+ Identity->superTileMode = 2;
+ }
+ else if (((((gctUINT32) (Identity->chipMinorFeatures)) >> (0 ? 27:27) & ((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))))
+ {
+ Identity->superTileMode = 1;
+ }
+ else
+ {
+ Identity->superTileMode = 0;
}
- gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x00470, &debugControl0));
-
- if (debugControl0 & (1 << 16))
+ /* Exception for GC1000, revision 5035 & GC800, revision 4612 */
+ if (((Identity->chipModel == gcv1000) && ((Identity->chipRevision == 0x5035)
+ || (Identity->chipRevision == 0x5036)
+ || (Identity->chipRevision == 0x5037)
+ || (Identity->chipRevision == 0x5039)
+ || (Identity->chipRevision >= 0x5040)))
+ || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612))
+ || ((Identity->chipModel == gcv880) && (Identity->chipRevision == 0x5124))
+ || ((Identity->chipModel == gcv600) && (Identity->chipRevision >= 0x4650))
+ || ((Identity->chipModel == gcv860) && (Identity->chipRevision == 0x4647))
+ || ((Identity->chipModel == gcv400) && (Identity->chipRevision >= 0x4633)))
{
- Identity->chipFlags |= gcvCHIP_FLAG_MSAA_COHERENCEY_ECO_FIX;
+ Identity->superTileMode = 1;
}
- /* Success. */
- gcmkFOOTER();
- return gcvSTATUS_OK;
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Identity: chipFeatures=0x%08X",
+ Identity->chipFeatures);
-OnError:
- /* Return the status. */
- gcmkFOOTER();
- return status;
-}
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Identity: chipMinorFeatures=0x%08X",
+ Identity->chipMinorFeatures);
-static gceSTATUS
-_GetHardwareSignature(
- IN gckHARDWARE Hardware,
- IN gckOS Os,
- IN gceCORE Core,
- OUT gcsHARDWARE_SIGNATURE * Signature
- )
-{
- gceSTATUS status;
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Identity: chipMinorFeatures1=0x%08X",
+ Identity->chipMinorFeatures1);
- gctUINT32 chipIdentity;
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Identity: chipMinorFeatures2=0x%08X",
+ Identity->chipMinorFeatures2);
- gcmkHEADER_ARG("Os=0x%x", Os);
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Identity: chipMinorFeatures3=0x%08X",
+ Identity->chipMinorFeatures3);
+
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Identity: chipMinorFeatures4=0x%08X",
+ Identity->chipMinorFeatures4);
+
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Identity: chipMinorFeatures5=0x%08X",
+ Identity->chipMinorFeatures5);
+
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Identity: chipMinorFeatures6=0x%08X",
+ Identity->chipMinorFeatures6);
/***************************************************************************
- ** Get chip ID and revision.
+ ** Get chip specs.
*/
- /* Read chip identity register. */
- gcmkONERROR(
- gckOS_ReadRegisterEx(Os, Core,
- 0x00018,
- &chipIdentity));
-
- /* Special case for older graphic cores. */
- if (((((gctUINT32) (chipIdentity)) >> (0 ? 31:24) & ((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1)))))) == (0x01 & ((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:
-24) + 1))))))))
+ if (((((gctUINT32) (Identity->chipMinorFeatures)) >> (0 ? 21:21) & ((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1))))))))
{
- Signature->chipModel = gcv500;
- Signature->chipRevision = (((((gctUINT32) (chipIdentity)) >> (0 ? 15:12)) & ((gctUINT32) ((((1 ? 15:12) - (0 ? 15:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:12) - (0 ? 15:12) + 1)))))) );
- }
+ gctUINT32 specs, specs2, specs3, specs4;
- else
- {
- /* Read chip identity register. */
+ /* Read gcChipSpecs register. */
gcmkONERROR(
gckOS_ReadRegisterEx(Os, Core,
- 0x00020,
- (gctUINT32_PTR) &Signature->chipModel));
+ 0x00048,
+ &specs));
+
+ /* Extract the fields. */
+ registerMax = (((((gctUINT32) (specs)) >> (0 ? 7:4)) & ((gctUINT32) ((((1 ? 7:4) - (0 ? 7:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:4) - (0 ? 7:4) + 1)))))) );
+ threadCount = (((((gctUINT32) (specs)) >> (0 ? 11:8)) & ((gctUINT32) ((((1 ? 11:8) - (0 ? 11:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:8) - (0 ? 11:8) + 1)))))) );
+ shaderCoreCount = (((((gctUINT32) (specs)) >> (0 ? 24:20)) & ((gctUINT32) ((((1 ? 24:20) - (0 ? 24:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 24:20) - (0 ? 24:20) + 1)))))) );
+ vertexCacheSize = (((((gctUINT32) (specs)) >> (0 ? 16:12)) & ((gctUINT32) ((((1 ? 16:12) - (0 ? 16:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:12) - (0 ? 16:12) + 1)))))) );
+ vertexOutputBufferSize = (((((gctUINT32) (specs)) >> (0 ? 31:28)) & ((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1)))))) );
+ pixelPipes = (((((gctUINT32) (specs)) >> (0 ? 27:25)) & ((gctUINT32) ((((1 ? 27:25) - (0 ? 27:25) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:25) - (0 ? 27:25) + 1)))))) );
+
+ /* Read gcChipSpecs2 register. */
+ gcmkONERROR(
+ gckOS_ReadRegisterEx(Os, Core,
+ 0x00080,
+ &specs2));
- /* Read CHIP_REV register. */
+ instructionCount = (((((gctUINT32) (specs2)) >> (0 ? 15:8)) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1)))))) );
+ numConstants = (((((gctUINT32) (specs2)) >> (0 ? 31:16)) & ((gctUINT32) ((((1 ? 31:16) - (0 ? 31:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:16) - (0 ? 31:16) + 1)))))) );
+ bufferSize = (((((gctUINT32) (specs2)) >> (0 ? 7:0)) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1)))))) );
+
+ /* Read gcChipSpecs3 register. */
gcmkONERROR(
gckOS_ReadRegisterEx(Os, Core,
- 0x00024,
- &Signature->chipRevision));
+ 0x0008C,
+ &specs3));
+
+ varyingsCount = (((((gctUINT32) (specs3)) >> (0 ? 8:4)) & ((gctUINT32) ((((1 ? 8:4) - (0 ? 8:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:4) - (0 ? 8:4) + 1)))))) );
+#if gcdMULTI_GPU
+ gpuCoreCount = (((((gctUINT32) (specs3)) >> (0 ? 2:0)) & ((gctUINT32) ((((1 ? 2:0) - (0 ? 2:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:0) - (0 ? 2:0) + 1)))))) );
+#endif
+
+ /* Read gcChipSpecs4 register. */
+ gcmkONERROR(
+ gckOS_ReadRegisterEx(Os, Core,
+ 0x0009C,
+ &specs4));
+
+
+ streamCount = (((((gctUINT32) (specs4)) >> (0 ? 16:12)) & ((gctUINT32) ((((1 ? 16:12) - (0 ? 16:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:12) - (0 ? 16:12) + 1)))))) );
+ if (streamCount == 0)
+ {
+ /* Extract stream count from older register. */
+ streamCount = (((((gctUINT32) (specs)) >> (0 ? 3:0)) & ((gctUINT32) ((((1 ? 3:0) - (0 ? 3:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:0) - (0 ? 3:0) + 1)))))) );
+ }
+
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Identity: chipSpecs1=0x%08X",
+ specs);
+
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Identity: chipSpecs2=0x%08X",
+ specs2);
+
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Identity: chipSpecs3=0x%08X",
+ specs3);
+
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Identity: chipSpecs4=0x%08X",
+ specs4);
}
- /***************************************************************************
- ** Get chip features.
- */
+ /* Get the number of pixel pipes. */
+ Identity->pixelPipes = gcmMAX(pixelPipes, 1);
- /* Read chip feature register. */
- gcmkONERROR(
- gckOS_ReadRegisterEx(Os, Core,
- 0x0001C,
- &Signature->chipFeatures));
+ /* Get the stream count. */
+ Identity->streamCount = (streamCount != 0)
+ ? streamCount
+ : (Identity->chipModel >= gcv1000) ? 4 : 1;
- if (((Signature->chipModel == gcv500) && (Signature->chipRevision < 2))
- || ((Signature->chipModel == gcv300) && (Signature->chipRevision < 0x2000))
- )
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Specs: streamCount=%u%s",
+ Identity->streamCount,
+ (streamCount == 0) ? " (default)" : "");
+
+ /* Get the vertex output buffer size. */
+ Identity->vertexOutputBufferSize = (vertexOutputBufferSize != 0)
+ ? 1 << vertexOutputBufferSize
+ : (Identity->chipModel == gcv400)
+ ? (Identity->chipRevision < 0x4000) ? 512
+ : (Identity->chipRevision < 0x4200) ? 256
+ : 128
+ : (Identity->chipModel == gcv530)
+ ? (Identity->chipRevision < 0x4200) ? 512
+ : 128
+ : 512;
+
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Specs: vertexOutputBufferSize=%u%s",
+ Identity->vertexOutputBufferSize,
+ (vertexOutputBufferSize == 0) ? " (default)" : "");
+
+ /* Get the maximum number of threads. */
+ Identity->threadCount = (threadCount != 0)
+ ? 1 << threadCount
+ : (Identity->chipModel == gcv400) ? 64
+ : (Identity->chipModel == gcv500) ? 128
+ : (Identity->chipModel == gcv530) ? 128
+ : 256;
+
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Specs: threadCount=%u%s",
+ Identity->threadCount,
+ (threadCount == 0) ? " (default)" : "");
+
+ /* Get the number of shader cores. */
+ Identity->shaderCoreCount = (shaderCoreCount != 0)
+ ? shaderCoreCount
+ : (Identity->chipModel >= gcv1000) ? 2
+ : 1;
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Specs: shaderCoreCount=%u%s",
+ Identity->shaderCoreCount,
+ (shaderCoreCount == 0) ? " (default)" : "");
+
+ /* Get the vertex cache size. */
+ Identity->vertexCacheSize = (vertexCacheSize != 0)
+ ? vertexCacheSize
+ : 8;
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Specs: vertexCacheSize=%u%s",
+ Identity->vertexCacheSize,
+ (vertexCacheSize == 0) ? " (default)" : "");
+
+ /* Get the maximum number of temporary registers. */
+ Identity->registerMax = (registerMax != 0)
+ /* Maximum of registerMax/4 registers are accessible to 1 shader */
+ ? 1 << registerMax
+ : (Identity->chipModel == gcv400) ? 32
+ : 64;
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Specs: registerMax=%u%s",
+ Identity->registerMax,
+ (registerMax == 0) ? " (default)" : "");
+
+ /* Get the instruction count. */
+ Identity->instructionCount = (instructionCount == 0) ? 256
+ : (instructionCount == 1) ? 1024
+ : (instructionCount == 2) ? 2048
+ : (instructionCount == 0xFF) ? 512
+ : 256;
+
+ if (Identity->instructionCount == 256)
{
- /* GC500 rev 1.x and GC300 rev < 2.0 doesn't have these registers. */
- Signature->chipMinorFeatures = 0;
- Signature->chipMinorFeatures1 = 0;
- Signature->chipMinorFeatures2 = 0;
+ if ((Identity->chipModel == gcv2000 && Identity->chipRevision == 0x5108)
+ || Identity->chipModel == gcv880)
+ {
+ Identity->instructionCount = 512;
+ }
+ else if (((((gctUINT32) (Identity->chipMinorFeatures3)) >> (0 ? 3:3) & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))))
+ {
+ Identity->instructionCount = 512;
+ }
}
- else
+
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Specs: instructionCount=%u%s",
+ Identity->instructionCount,
+ (instructionCount == 0) ? " (default)" : "");
+
+ /* Get the number of constants. */
+ Identity->numConstants = (numConstants == 0) ? 168 : numConstants;
+
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Specs: numConstants=%u%s",
+ Identity->numConstants,
+ (numConstants == 0) ? " (default)" : "");
+
+ /* Get the buffer size. */
+ Identity->bufferSize = bufferSize;
+
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "Specs: bufferSize=%u%s",
+ Identity->bufferSize,
+ (bufferSize == 0) ? " (default)" : "");
+
+
+ if (varyingsCount != 0)
+ {
+ Identity->varyingsCount = varyingsCount;
+ }
+ else if (((((gctUINT32) (Identity->chipMinorFeatures1)) >> (0 ? 23:23) & ((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))))
+ {
+ Identity->varyingsCount = 12;
+ }
+ else
+ {
+ Identity->varyingsCount = 8;
+ }
+
+ /* For some cores, it consumes two varying for position, so the max varying vectors should minus one. */
+ if ((Identity->chipModel == gcv5000 && Identity->chipRevision == 0x5434) ||
+ (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5222) ||
+ (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5208) ||
+ (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5245) ||
+ (Identity->chipModel == gcv3000 && Identity->chipRevision == 0x5435) ||
+ (Identity->chipModel == gcv2200 && Identity->chipRevision == 0x5244) ||
+ (Identity->chipModel == gcv1500 && Identity->chipRevision == 0x5246) ||
+ ((Identity->chipModel == gcv2100 || Identity->chipModel == gcv2000) && Identity->chipRevision == 0x5108) ||
+ (Identity->chipModel == gcv880 && (Identity->chipRevision == 0x5107 || Identity->chipRevision == 0x5106)))
+ {
+ Identity->varyingsCount -= 1;
+ }
+
+ Identity->chip2DControl = 0;
+ if (Identity->chipModel == gcv320)
{
- /* Read chip minor feature register #0. */
+ gctUINT32 data;
+
gcmkONERROR(
- gckOS_ReadRegisterEx(Os, Core,
- 0x00034,
- &Signature->chipMinorFeatures));
+ gckOS_ReadRegisterEx(Os,
+ Core,
+ 0x0002C,
+ &data));
- if (((((gctUINT32) (Signature->chipMinorFeatures)) >> (0 ? 21:21) & ((gctUINT32) ((((1 ?
- 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ?
- 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:
-21) + 1)))))))
- )
+ if ((data != 33956864) &&
+ ((Identity->chipRevision == 0x5007) ||
+ (Identity->chipRevision == 0x5220)))
{
- /* Read chip minor features register #1. */
- gcmkONERROR(
- gckOS_ReadRegisterEx(Os, Core,
- 0x00074,
- &Signature->chipMinorFeatures1));
-
- /* Read chip minor features register #2. */
- gcmkONERROR(
- gckOS_ReadRegisterEx(Os, Core,
- 0x00084,
- &Signature->chipMinorFeatures2));
+ Identity->chip2DControl |= 0xFF &
+ (Identity->chipRevision == 0x5220 ? 8 :
+ (Identity->chipRevision == 0x5007 ? 12 : 0));
}
- else
+
+ if (Identity->chipRevision == 0x5007)
{
- /* Chip doesn't has minor features register #1 or 2 or 3 or 4 or 5. */
- Signature->chipMinorFeatures1 = 0;
- Signature->chipMinorFeatures2 = 0;
+ /* Disable splitting rectangle. */
+ Identity->chip2DControl |= 0x100;
+
+ /* Enable 2D Flush. */
+ Identity->chip2DControl |= 0x200;
}
}
+#if gcdMULTI_GPU
+#if gcdMULTI_GPU > 1
+ Identity->gpuCoreCount = gpuCoreCount + 1;
+#else
+ Identity->gpuCoreCount = 1;
+#endif
+#endif
+
+ gcmkONERROR(
+ gckOS_ReadRegisterEx(Os, Core,
+ 0x00470,
+ &debugControl0));
+
+ if (debugControl0 & (1 << 16))
+ {
+ Identity->chipFlags |= gcvCHIP_FLAG_MSAA_COHERENCEY_ECO_FIX;
+ }
+
/* Success. */
gcmkFOOTER();
return gcvSTATUS_OK;
@@ -450,23 +662,17 @@ OnError:
return status;
}
-/* Set to 1 to enable module clock gating debug function.
-* Following options take effect when it is set to 1.
-*/
-#define gcdDEBUG_MODULE_CLOCK_GATING 0
-/* Set to 1 to disable module clock gating of all modules. */
-#define gcdDISABLE_MODULE_CLOCK_GATING 0
-/* Set to 1 to disable module clock gating of each module. */
-#define gcdDISABLE_STARVE_MODULE_CLOCK_GATING 0
-#define gcdDISABLE_FE_CLOCK_GATING 0
-#define gcdDISABLE_PE_CLOCK_GATING 0
-#define gcdDISABLE_SH_CLOCK_GATING 0
-#define gcdDISABLE_PA_CLOCK_GATING 0
-#define gcdDISABLE_SE_CLOCK_GATING 0
-#define gcdDISABLE_RA_CLOCK_GATING 0
-#define gcdDISABLE_RA_EZ_CLOCK_GATING 0
-#define gcdDISABLE_RA_HZ_CLOCK_GATING 0
-#define gcdDISABLE_TX_CLOCK_GATING 0
+#define gcdDEBUG_MODULE_CLOCK_GATING 0
+#define gcdDISABLE_MODULE_CLOCK_GATING 0
+#define gcdDISABLE_FE_CLOCK_GATING 0
+#define gcdDISABLE_PE_CLOCK_GATING 0
+#define gcdDISABLE_SH_CLOCK_GATING 0
+#define gcdDISABLE_PA_CLOCK_GATING 0
+#define gcdDISABLE_SE_CLOCK_GATING 0
+#define gcdDISABLE_RA_CLOCK_GATING 0
+#define gcdDISABLE_RA_EZ_CLOCK_GATING 0
+#define gcdDISABLE_RA_HZ_CLOCK_GATING 0
+#define gcdDISABLE_TX_CLOCK_GATING 0
#if gcdDEBUG_MODULE_CLOCK_GATING
gceSTATUS
@@ -484,75 +690,39 @@ _ConfigureModuleLevelClockGating(
&data));
#if gcdDISABLE_FE_CLOCK_GATING
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
#endif
#if gcdDISABLE_PE_CLOCK_GATING
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ?
- 2:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 2:2) - (0 ?
- 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ?
- 2:2)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)));
#endif
#if gcdDISABLE_SH_CLOCK_GATING
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ?
- 3:3))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 3:3) - (0 ?
- 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ?
- 3:3)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)));
#endif
#if gcdDISABLE_PA_CLOCK_GATING
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ?
- 4:4))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 4:4) - (0 ?
- 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ?
- 4:4)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
#endif
#if gcdDISABLE_SE_CLOCK_GATING
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ?
- 5:5))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 5:5) - (0 ?
- 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ?
- 5:5)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)));
#endif
#if gcdDISABLE_RA_CLOCK_GATING
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ?
- 6:6))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 6:6) - (0 ?
- 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ?
- 6:6)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)));
#endif
#if gcdDISABLE_TX_CLOCK_GATING
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ?
- 7:7))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 7:7) - (0 ?
- 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ?
- 7:7)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7)));
#endif
#if gcdDISABLE_RA_EZ_CLOCK_GATING
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ?
- 16:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 16:16) - (0 ?
- 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ?
- 16:16)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16)));
#endif
#if gcdDISABLE_RA_HZ_CLOCK_GATING
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 17:17) - (0 ? 17:17) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ?
- 17:17))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 17:17) - (0 ?
- 17:17) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ?
- 17:17)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 17:17) - (0 ? 17:17) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ? 17:17))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 17:17) - (0 ? 17:17) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ? 17:17)));
#endif
gcmkVERIFY_OK(
@@ -562,29 +732,6 @@ _ConfigureModuleLevelClockGating(
+ 0x00104,
data));
-#if gcdDISABLE_STARVE_MODULE_CLOCK_GATING
- gcmkVERIFY_OK(
- gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- Hardware->powerBaseAddress +
- 0x00100,
- &data));
-
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ?
- 2:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 2:2) - (0 ?
- 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ?
- 2:2)));
-
- gcmkVERIFY_OK(
- gckOS_WriteRegisterEx(Hardware->os,
- Hardware->core,
- Hardware->powerBaseAddress
- + 0x00100,
- data));
-
-#endif
-
#if gcdDISABLE_MODULE_CLOCK_GATING
gcmkVERIFY_OK(
gckOS_ReadRegisterEx(Hardware->os,
@@ -593,11 +740,7 @@ _ConfigureModuleLevelClockGating(
0x00100,
&data));
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
gcmkVERIFY_OK(
@@ -637,17 +780,13 @@ _VerifyDMA(
gceSTATUS status;
gctUINT32 i;
- gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x00660, State1));
- gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x00660, State1));
- gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x00664, Address1));
- gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x00664, Address1));
+ gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x660, State1));
+ gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x664, Address1));
for (i = 0; i < 500; i += 1)
{
- gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x00660, State2));
- gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x00660, State2));
- gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x00664, Address2));
- gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x00664, Address2));
+ gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x660, State2));
+ gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x664, Address2));
if (*Address1 != *Address2)
{
@@ -671,188 +810,57 @@ _DumpDebugRegisters(
IN gcsiDEBUG_REGISTERS_PTR Descriptor
)
{
-/* If this value is changed, print formats need to be changed too. */
-#define REG_PER_LINE 8
gceSTATUS status = gcvSTATUS_OK;
gctUINT32 select;
- gctUINT i, j, pipe;
- gctUINT32 datas[REG_PER_LINE];
- gctUINT32 oldControl, control;
+ gctUINT32 data = 0;
+ gctUINT i;
gcmkHEADER_ARG("Os=0x%X Descriptor=0x%X", Os, Descriptor);
- /* Record control. */
- gckOS_ReadRegisterEx(Os, Core, 0x0, &oldControl);
-
- for (pipe = 0; pipe < 2; pipe++)
- {
- if (!(Descriptor->pipeMask & (1 << pipe)))
- {
- continue;
- }
-
- gcmkPRINT_N(8, " %s[%d] debug registers:\n", Descriptor->module, pipe);
-
- /* Switch pipe. */
- gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x0, &control));
- control &= ~(0xF << 20);
- control |= (pipe << 20);
- gcmkONERROR(gckOS_WriteRegisterEx(Os, Core, 0x0, control));
-
- gcmkASSERT(Descriptor->count % REG_PER_LINE);
-
- for (i = 0; i < Descriptor->count; i += REG_PER_LINE)
- {
- /* Select of first one in the group. */
- select = i + Descriptor->selectStart;
-
- /* Read a group of registers. */
- for (j = 0; j < REG_PER_LINE; j++)
- {
- /* Shift select to right position. */
- gcmkONERROR(gckOS_WriteRegisterEx(Os, Core, Descriptor->index, (select + j) << Descriptor->shift));
- gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, Descriptor->data, &datas[j]));
- }
-
- gcmkPRINT_N(32, " [%02X] %08X %08X %08X %08X %08X %08X %08X %08X\n",
- select, datas[0], datas[1], datas[2], datas[3], datas[4], datas[5], datas[6], datas[7]);
- }
- }
-
- /* Restore control. */
- gcmkONERROR(gckOS_WriteRegisterEx(Os, Core, 0x0, oldControl));
-
-OnError:
- /* Return the error. */
- gcmkFOOTER();
- return status;
-}
+ gcmkPRINT_N(4, " %s debug registers:\n", Descriptor->module);
-static gceSTATUS
-_DumpLinkStack(
- IN gckOS Os,
- IN gceCORE Core,
- IN gcsiDEBUG_REGISTERS_PTR Descriptor
- )
-{
- /* Get wrptr */
- gctUINT32 shift = Descriptor->shift;
- gctUINT32 pointerSelect = 0xE << shift;
- gctUINT32 pointer, wrPtr, rdPtr, links[16];
- gctUINT32 stackSize = 16;
- gctUINT32 oldestPtr = 0;
- gctUINT32 i;
-
- gcmkVERIFY_OK(gckOS_WriteRegisterEx(Os, Core, Descriptor->index, pointerSelect));
- gcmkVERIFY_OK(gckOS_ReadRegisterEx(Os, Core, Descriptor->data, &pointer));
-
- wrPtr = (pointer & 0xF0) >> 4;
- rdPtr = pointer & 0xF;
-
- /* Move rdptr to the oldest one (next one to the latest one. ) */
- oldestPtr = (wrPtr + 1) % stackSize;
-
- while (rdPtr != oldestPtr)
+ for (i = 0; i < Descriptor->count; i += 1)
{
- gcmkVERIFY_OK(gckOS_WriteRegisterEx(Os, Core, Descriptor->index, 0x0));
- gcmkVERIFY_OK(gckOS_WriteRegisterEx(Os, Core, Descriptor->index, 0xF << shift));
+ select = i << Descriptor->shift;
+ gcmkONERROR(gckOS_WriteRegisterEx(Os, Core, Descriptor->index, select));
+#if gcdFPGA_BUILD
+ gcmkONERROR(gckOS_Delay(Os, 1000));
+#endif
+ gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, Descriptor->data, &data));
- gcmkVERIFY_OK(gckOS_WriteRegisterEx(Os, Core, Descriptor->index, pointerSelect));
- gcmkVERIFY_OK(gckOS_ReadRegisterEx(Os, Core, Descriptor->data, &pointer));
-
- rdPtr = pointer & 0xF;
+ gcmkPRINT_N(12, " [0x%02X] 0x%08X\n", i, data);
}
- gcmkPRINT(" Link stack:");
+ select = 0xF << Descriptor->shift;
- /* Read from stack bottom*/
- for (i = 0; i < stackSize; i++)
+ for (i = 0; i < 500; i += 1)
{
- gcmkVERIFY_OK(gckOS_WriteRegisterEx(Os, Core, Descriptor->index, 0xD << shift));
- gcmkVERIFY_OK(gckOS_ReadRegisterEx(Os, Core, Descriptor->data, &links[i]));
+ gcmkONERROR(gckOS_WriteRegisterEx(Os, Core, Descriptor->index, select));
+#if gcdFPGA_BUILD
+ gcmkONERROR(gckOS_Delay(Os, 1000));
+#endif
+ gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, Descriptor->data, &data));
- /* Advance rdPtr. */
- gcmkVERIFY_OK(gckOS_WriteRegisterEx(Os, Core, Descriptor->index, 0x0));
- gcmkVERIFY_OK(gckOS_WriteRegisterEx(Os, Core, Descriptor->index, 0xF << shift));
+ if (data == Descriptor->signature)
+ {
+ break;
+ }
}
- /* Print. */
- for (i = 0; i < stackSize; i += 4)
+ if (i == 500)
{
- gcmkPRINT_N(32, " [0x%02X] 0x%08X [0x%02X] 0x%08X [0x%02X] 0x%08X [0x%02X] 0x%08X\n",
- i, links[i], i + 1, links[i + 1], i + 2, links[i + 2], i + 3, links[i + 3]);
+ gcmkPRINT_N(4, " failed to obtain the signature (read 0x%08X).\n", data);
}
-
- return gcvSTATUS_OK;
-}
-
-static gceSTATUS
-_DumpFEStack(
- IN gckOS Os,
- IN gceCORE Core,
- IN gcsiDEBUG_REGISTERS_PTR Descriptor
- )
-{
- gctUINT i;
- gctINT j;
- gctUINT32 stack[32][2];
- gctUINT32 link[32];
-
- static gcsFE_STACK _feStacks[] =
- {
- { "PRE_STACK", 32, 0x1A, 0x9A, 0x00, 0x1B, 0x1E },
- { "CMD_STACK", 32, 0x1C, 0x9C, 0x1E, 0x1D, 0x1E },
- };
-
- for (i = 0; i < gcmCOUNTOF(_feStacks); i++)
+ else
{
- gckOS_WriteRegisterEx(Os, Core, Descriptor->index, _feStacks[i].clear);
-
- for (j = 0; j < _feStacks[i].count; j++)
- {
- gckOS_WriteRegisterEx(Os, Core, Descriptor->index, _feStacks[i].highSelect);
-
- gckOS_ReadRegisterEx(Os, Core, Descriptor->data, &stack[j][0]);
-
- gckOS_WriteRegisterEx(Os, Core, Descriptor->index, _feStacks[i].lowSelect);
-
- gckOS_ReadRegisterEx(Os, Core, Descriptor->data, &stack[j][1]);
-
- gckOS_WriteRegisterEx(Os, Core, Descriptor->index, _feStacks[i].next);
-
- if (_feStacks[i].linkSelect)
- {
- gckOS_WriteRegisterEx(Os, Core, Descriptor->index, _feStacks[i].linkSelect);
-
- gckOS_ReadRegisterEx(Os, Core, Descriptor->data, &link[j]);
- }
- }
-
- gcmkPRINT(" %s:", _feStacks[i].name);
-
- for (j = 31; j >= 3; j -= 4)
- {
- gcmkPRINT(" %08X %08X %08X %08X %08X %08X %08X %08X",
- stack[j][0], stack[j][1], stack[j - 1][0], stack[j - 1][1],
- stack[j - 2][0], stack[j - 2][1], stack[j - 3][0], stack[j - 3][1]);
- }
-
- if (_feStacks[i].linkSelect)
- {
- gcmkPRINT(" LINK_STACK:");
-
- for (j = 31; j >= 3; j -= 4)
- {
- gcmkPRINT(" %08X %08X %08X %08X %08X %08X %08X %08X",
- link[j], link[j], link[j - 1], link[j - 1],
- link[j - 2], link[j - 2], link[j - 3], link[j - 3]);
- }
- }
-
+ gcmkPRINT_N(8, " signature = 0x%08X (%d read attempt(s))\n", data, i + 1);
}
- return gcvSTATUS_OK;
+OnError:
+ /* Return the error. */
+ gcmkFOOTER();
+ return status;
}
static gceSTATUS
@@ -861,7 +869,7 @@ _IsGPUPresent(
)
{
gceSTATUS status;
- gcsHARDWARE_SIGNATURE signature;
+ gcsHAL_QUERY_CHIP_IDENTITY identity;
gctUINT32 control;
gcmkHEADER_ARG("Hardware=0x%x", Hardware);
@@ -874,37 +882,26 @@ _IsGPUPresent(
0x00000,
&control));
- control = ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 1:1) - (0 ?
- 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1)));
- control = ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0)));
+ control = ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)));
+ control = ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
Hardware->core,
0x00000,
control));
- gckOS_ZeroMemory((gctPOINTER)&signature, gcmSIZEOF(gcsHARDWARE_SIGNATURE));
-
/* Identify the hardware. */
- gcmkONERROR(_GetHardwareSignature(Hardware,
- Hardware->os,
- Hardware->core,
- &signature));
+ gcmkONERROR(_IdentifyHardware(Hardware->os,
+ Hardware->core,
+ &identity));
/* Check if these are the same values as saved before. */
- if ((Hardware->signature.chipModel != signature.chipModel)
- || (Hardware->signature.chipRevision != signature.chipRevision)
- || (Hardware->signature.chipFeatures != signature.chipFeatures)
- || (Hardware->signature.chipMinorFeatures != signature.chipMinorFeatures)
- || (Hardware->signature.chipMinorFeatures1 != signature.chipMinorFeatures1)
- || (Hardware->signature.chipMinorFeatures2 != signature.chipMinorFeatures2)
+ if ((Hardware->identity.chipModel != identity.chipModel)
+ || (Hardware->identity.chipRevision != identity.chipRevision)
+ || (Hardware->identity.chipFeatures != identity.chipFeatures)
+ || (Hardware->identity.chipMinorFeatures != identity.chipMinorFeatures)
+ || (Hardware->identity.chipMinorFeatures1 != identity.chipMinorFeatures1)
+ || (Hardware->identity.chipMinorFeatures2 != identity.chipMinorFeatures2)
)
{
gcmkPRINT("[galcore]: GPU is not present.");
@@ -957,387 +954,20 @@ OnError:
return status;
}
-static gctBOOL
+gctBOOL
_IsGPUIdle(
IN gctUINT32 Idle
)
{
- return Idle == 0x7FFFFFFF;
-}
-
-gctBOOL
-_QueryFeatureDatabase(
- IN gckHARDWARE Hardware,
- IN gceFEATURE Feature
- )
-{
- gctBOOL available;
-
- gcsFEATURE_DATABASE *database = Hardware->featureDatabase;
-
- gcmkHEADER_ARG("Hardware=0x%x Feature=%d", Hardware, Feature);
-
- /* Only features needed by common kernel logic added here. */
- switch (Feature)
- {
- case gcvFEATURE_END_EVENT:
- available = gcvFALSE;
- break;
-
- case gcvFEATURE_MC20:
- available = database->REG_MC20;
- break;
-
- case gcvFEATURE_EARLY_Z:
- available = database->REG_NoEZ == 0;
- break;
-
- case gcvFEATURE_HZ:
- available = database->REG_HierarchicalZ;
- break;
-
- case gcvFEATURE_NEW_HZ:
- available = database->REG_NewHZ;
- break;
-
- case gcvFEATURE_FAST_MSAA:
- available = database->REG_FastMSAA;
- break;
-
- case gcvFEATURE_SMALL_MSAA:
- available = database->REG_SmallMSAA;
- break;
-
- case gcvFEATURE_DYNAMIC_FREQUENCY_SCALING:
- /* This feature doesn't apply for 2D cores. */
- available = database->REG_DynamicFrequencyScaling && database->REG_Pipe3D;
-
- if (Hardware->identity.chipModel == gcv1000 &&
- (Hardware->identity.chipRevision == 0x5039 ||
- Hardware->identity.chipRevision == 0x5040))
- {
- available = gcvFALSE;
- }
- break;
-
- case gcvFEATURE_ACE:
- available = database->REG_ACE;
- break;
-
- case gcvFEATURE_HALTI2:
- available = database->REG_Halti2;
- break;
-
- case gcvFEATURE_PIPE_2D:
- available = database->REG_Pipe2D;
- break;
-
- case gcvFEATURE_PIPE_3D:
-#if gcdENABLE_3D
- available = database->REG_Pipe3D;
-#else
- available = gcvFALSE;
-#endif
- break;
-
- case gcvFEATURE_FC_FLUSH_STALL:
- available = database->REG_FcFlushStall;
- break;
-
- case gcvFEATURE_BLT_ENGINE:
- available = database->REG_BltEngine;
- break;
-
- case gcvFEATURE_HALTI0:
- available = database->REG_Halti0;
- break;
-
- case gcvFEATURE_FE_ALLOW_STALL_PREFETCH_ENG:
- available = database->REG_FEAllowStallPrefetchEng;
- break;
-
- case gcvFEATURE_MMU:
- available = database->REG_MMU;
- break;
-
- case gcvFEATURE_FENCE:
- available = database->REG_Halti5;
- break;
-
- case gcvFEATURE_TEX_BASELOD:
- available = database->REG_Halti2;
-
- if (_IsHardwareMatch(Hardware, gcv900, 0x5250))
- {
- available = gcvTRUE;
- }
- break;
-
- case gcvFEATURE_TEX_CACHE_FLUSH_FIX:
- available = database->REG_Halti5;
- break;
-
- case gcvFEATURE_BUG_FIXES1:
- available = database->REG_BugFixes1;
- break;
-
- case gcvFEATURE_MULTI_SOURCE_BLT:
- available = database->REG_MultiSourceBlt;
- break;
-
- case gcvFEATURE_HALTI5:
- available = database->REG_Halti5;
- break;
-
- case gcvFEATURE_FAST_CLEAR:
- available = database->REG_FastClear;
-
- if (Hardware->identity.chipModel == gcv700)
- {
- available = gcvFALSE;
- }
- break;
-
- case gcvFEATURE_BUG_FIXES7:
- available = database->REG_BugFixes7;
- break;
-
- case gcvFEATURE_ZCOMPRESSION:
- available = database->REG_ZCompression;
- break;
-
- case gcvFEATURE_SHADER_HAS_INSTRUCTION_CACHE:
- available = database->REG_InstructionCache;
- break;
-
- case gcvFEATURE_YUV420_TILER:
- available = database->REG_YUV420Tiler;
- break;
-
- case gcvFEATURE_2DPE20:
- available = database->REG_2DPE20;
- break;
-
- case gcvFEATURE_DITHER_AND_FILTER_PLUS_ALPHA_2D:
- available = database->REG_DitherAndFilterPlusAlpha2D;
- break;
-
- case gcvFEATURE_ONE_PASS_2D_FILTER:
- available = database->REG_OnePass2DFilter;
- break;
-
- case gcvFEATURE_HALTI1:
- available = database->REG_Halti1;
- break;
-
- case gcvFEATURE_HALTI3:
- available = database->REG_Halti3;
- break;
-
- case gcvFEATURE_HALTI4:
- available = database->REG_Halti4;
- break;
-
- case gcvFEATURE_GEOMETRY_SHADER:
- available = database->REG_GeometryShader;
- break;
-
- case gcvFEATURE_TESSELLATION:
- available = database->REG_TessellationShaders;
- break;
-
- case gcvFEATURE_GENERIC_ATTRIB:
- available = database->REG_Generics;
- break;
-
- case gcvFEATURE_TEXTURE_LINEAR:
- available = database->REG_LinearTextureSupport;
- break;
-
- case gcvFEATURE_TX_FILTER:
- available = database->REG_TXFilter;
- break;
-
- case gcvFEATURE_TX_SUPPORT_DEC:
- available = database->REG_TXSupportDEC;
- break;
-
- case gcvFEATURE_TX_FRAC_PRECISION_6BIT:
- available = database->REG_TX6bitFrac;
- break;
-
- case gcvFEATURE_TEXTURE_ASTC:
- available = database->REG_TXEnhancements4 && !database->NO_ASTC;
- break;
-
- case gcvFEATURE_SHADER_ENHANCEMENTS2:
- available = database->REG_SHEnhancements2;
- break;
-
- case gcvFEATURE_BUG_FIXES18:
- available = database->REG_BugFixes18;
- break;
-
- case gcvFEATURE_64K_L2_CACHE:
- available = gcvFALSE;
- break;
-
- case gcvFEATURE_BUG_FIXES4:
- available = database->REG_BugFixes4;
- break;
-
- case gcvFEATURE_BUG_FIXES12:
- available = database->REG_BugFixes12;
- break;
-
- case gcvFEATURE_HW_TFB:
- available = database->HWTFB;
- break;
-
- case gcvFEATURE_SNAPPAGE_CMD_FIX:
- available = database->SH_SNAP2PAGE_FIX;
- break;
-
- case gcvFEATURE_SECURITY:
- available = database->SECURITY;
- break;
-
- case gcvFEATURE_TX_DESCRIPTOR:
- available = database->REG_Halti5;
- break;
-
- case gcvFEATURE_TX_DESC_CACHE_CLOCKGATE_FIX:
- available = database->TX_DESC_CACHE_CLOCKGATE_FIX;
- break;
-
- case gcvFEATURE_ROBUSTNESS:
- available = database->ROBUSTNESS;
- break;
-
- case gcvFEATURE_SNAPPAGE_CMD:
- available = database->SNAPPAGE_CMD;
- break;
-
- case gcvFEATURE_HALF_FLOAT_PIPE:
- available = database->REG_HalfFloatPipe;
- break;
-
- case gcvFEATURE_SH_INSTRUCTION_PREFETCH:
- available = database->SH_ICACHE_PREFETCH;
- break;
-
- case gcvFEATURE_FE_NEED_DUMMYDRAW:
- available = database->FE_NEED_DUMMYDRAW;
- break;
-
- case gcvFEATURE_DEC_COMPRESSION:
- available = database->REG_DEC;
- break;
-
- case gcvFEATURE_USC_DEFER_FILL_FIX:
- available = database->USC_DEFER_FILL_FIX;
- break;
-
- case gcvFEATURE_USC:
- available = database->REG_Halti5;
- break;
-
- default:
- gcmkFATAL("Invalid feature has been requested.");
- available = gcvFALSE;
- }
-
- gcmkFOOTER_ARG("%d", available ? gcvSTATUS_TRUE : gcvSTATUS_FALSE);
- return available;
-}
-
-static void
-_ConfigurePolicyID(
- IN gckHARDWARE Hardware
- )
-{
- gceSTATUS status;
- gctUINT32 policyID;
- gctUINT32 auxBit = ~0U;
- gctUINT32 axiConfig;
- gckOS os = Hardware->os;
- gceCORE core = Hardware->core;
- gctUINT32 i;
- gctUINT32 offset;
- gctUINT32 shift;
- gctUINT32 currentAxiConfig;
-
- status = gckOS_GetPolicyID(os, gcvSURF_TYPE_UNKNOWN, &policyID, &axiConfig);
-
- if (status == gcvSTATUS_NOT_SUPPORTED)
- {
- /* No customized policyID setting. */
- return;
- }
-
- for (i = 0; i < 16; i++)
- {
- /* Mapping 16 surface type.*/
- status = gckOS_GetPolicyID(os, (gceSURF_TYPE) i, &policyID, &axiConfig);
-
- if (gcmIS_SUCCESS(status))
- {
- if (auxBit == ~0U)
- {
- /* There is a customized policyID setting for this type. */
- auxBit = (policyID >> 4) & 0x1;
- }
- else
- {
- /* Check whether this bit changes. */
- if (auxBit != ((policyID >> 4) & 0x1))
- {
- gcmkPRINT("[galcore]: AUX_BIT changes");
- return;
- }
- }
-
- offset = policyID >> 1;
-
- shift = (policyID & 0x1) * 16;
-
- axiConfig &= 0xFFFF;
-
- gcmkVERIFY_OK(gckOS_ReadRegisterEx(
- os,
- core,
- (0x0070 + offset) << 2,
- &currentAxiConfig
- ));
-
- currentAxiConfig |= (axiConfig << shift);
-
- gcmkVERIFY_OK(gckOS_WriteRegisterEx(
- os,
- core,
- (0x0070 + offset) << 2,
- currentAxiConfig
- ));
- }
- }
-
- if (auxBit != ~0U)
- {
- gcmkVERIFY_OK(gckOS_WriteRegisterEx(
- os,
- core,
- 0x000EC,
- ((((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) (0x01 & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:8) - (0 ?
- 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1))))))) << (0 ?
- 8:8))) | (((gctUINT32) ((gctUINT32) (auxBit) & ((gctUINT32) ((((1 ? 8:8) - (0 ?
- 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1))))))) << (0 ?
- 8:8)))
- ));
- }
+ return (((((gctUINT32) (Idle)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) )
+ && (((((gctUINT32) (Idle)) >> (0 ? 1:1)) & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1)))))) )
+ && (((((gctUINT32) (Idle)) >> (0 ? 3:3)) & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1)))))) )
+ && (((((gctUINT32) (Idle)) >> (0 ? 4:4)) & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1)))))) )
+ && (((((gctUINT32) (Idle)) >> (0 ? 5:5)) & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1)))))) )
+ && (((((gctUINT32) (Idle)) >> (0 ? 6:6)) & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1)))))) )
+ && (((((gctUINT32) (Idle)) >> (0 ? 7:7)) & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1)))))) )
+ && (((((gctUINT32) (Idle)) >> (0 ? 2:2)) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) )
+ ;
}
/*
@@ -1444,6 +1074,9 @@ gckHARDWARE_Construct(
gckHARDWARE hardware = gcvNULL;
gctUINT16 data = 0xff00;
gctPOINTER pointer = gcvNULL;
+#if gcdMULTI_GPU_AFFINITY
+ gctUINT32 control;
+#endif
gcmkHEADER_ARG("Os=0x%x", Os);
@@ -1472,29 +1105,48 @@ gckHARDWARE_Construct(
hardware->os = Os;
hardware->core = Core;
- gcmkONERROR(_GetHardwareSignature(hardware, Os, Core, &hardware->signature));
-
/* Identify the hardware. */
- gcmkONERROR(_IdentifyHardwareByDatabase(hardware, Os, Core, &hardware->identity));
-
- /* Get the system's physical base address. */
- gcmkONERROR(gckOS_GetBaseAddress(Os, &hardware->baseAddress));
+ gcmkONERROR(_IdentifyHardware(Os, Core, &hardware->identity));
/* Determine the hardware type */
- if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_PIPE_3D)
- && gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_PIPE_2D)
- )
- {
- hardware->type = gcvHARDWARE_3D2D;
- }
- else
- if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_PIPE_2D))
+ switch (hardware->identity.chipModel)
{
+ case gcv350:
+ case gcv355:
+ hardware->type = gcvHARDWARE_VG;
+ break;
+
+ case gcv200:
+ case gcv300:
+ case gcv320:
+ case gcv328:
+ case gcv420:
+ case gcv428:
+ case gcv520:
hardware->type = gcvHARDWARE_2D;
- }
- else
- {
+ break;
+
+ default:
+#if gcdMULTI_GPU_AFFINITY
+ hardware->type = (Core == gcvCORE_MAJOR) ? gcvHARDWARE_3D : gcvHARDWARE_OCL;
+#else
hardware->type = gcvHARDWARE_3D;
+#endif
+
+ if(hardware->identity.chipModel == gcv880 && hardware->identity.chipRevision == 0x5107)
+ {
+ /*set outstanding limit*/
+ gctUINT32 axi_ot;
+ gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x00414, &axi_ot));
+ axi_ot = (axi_ot & (~0xFF)) | 0x00010;
+ gcmkONERROR(gckOS_WriteRegisterEx(Os, Core, 0x00414, axi_ot));
+ }
+
+
+ if ((((((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)))))) ))
+ {
+ hardware->type = (gceHARDWARE_TYPE) (hardware->type | gcvHARDWARE_2D);
+ }
}
hardware->powerBaseAddress
@@ -1503,38 +1155,48 @@ gckHARDWARE_Construct(
? 0x0100
: 0x0000;
- /* _ResetGPU need powerBaseAddress. */
- status = _ResetGPU(hardware, Os, Core);
-
- if (status != gcvSTATUS_OK)
+ if (!(_IsHardwareMatch(hardware, gcv3000, 0x5450) && (hardware->identity.chipFlags & gcvCHIP_FLAG_GC2000_R2)))
{
- gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
- "_ResetGPU failed: status=%d\n", status);
+ /* _ResetGPU need powerBaseAddress. */
+ status = _ResetGPU(hardware, Os, Core);
+
+ if (status != gcvSTATUS_OK)
+ {
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "_ResetGPU failed: status=%d\n", status);
+ }
}
-#if gcdDEC_ENABLE_AHB
- gcmkONERROR(gckOS_WriteRegisterEx(Os, gcvCORE_DEC, 0x18180, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 22:22) - (0 ? 22:22) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 22:22) - (0 ? 22:22) + 1))))))) << (0 ?
- 22:22))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 22:22) - (0 ? 22:22) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 22:22) - (0 ? 22:22) + 1))))))) << (0 ? 22:22)))));
+#if gcdENABLE_DEC_COMPRESSION && !gcdDEC_ENABLE_AHB
+ gcmkONERROR(gckOS_WriteRegisterEx(Os, gcvCORE_DEC, 0x18180, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 22:22) - (0 ? 22:22) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 22:22) - (0 ? 22:22) + 1))))))) << (0 ? 22:22))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 22:22) - (0 ? 22:22) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 22:22) - (0 ? 22:22) + 1))))))) << (0 ? 22:22)))));
#endif
- if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_64K_L2_CACHE) == gcvFALSE)
- {
- /* VIV: On all cores without 64k L2, we disable L2, no matter whether L2 exists or not. */
- gcmkONERROR(gckOS_WriteRegisterEx(Os,
- Core,
- 0x0055C,
- 0x00FFFFFF));
- }
+#if gcdMULTI_GPU
+ gcmkONERROR(gckOS_WriteRegisterEx(Os,
+ Core,
+ 0x0055C,
+#if gcdDISABLE_FE_L2
+ 0x00FFFFFF));
+#else
+ 0x00FFFF05));
+#endif
- hardware->powerMutex = gcvNULL;
+#elif gcdMULTI_GPU_AFFINITY
+ control = ((((gctUINT32) (0x00FF0A05)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27)));
- hardware->mmuVersion = gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_MMU);
+ gcmkONERROR(gckOS_WriteRegisterEx(Os,
+ Core,
+ 0x0055C,
+ control));
+#endif
+ hardware->powerMutex = gcvNULL;
+
+ hardware->mmuVersion
+ = (((((gctUINT32) (hardware->identity.chipMinorFeatures1)) >> (0 ? 28:28)) & ((gctUINT32) ((((1 ? 28:28) - (0 ? 28:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 28:28) - (0 ? 28:28) + 1)))))) );
/* Determine whether bug fixes #1 are present. */
- hardware->extraEventStates = (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_BUG_FIXES1) == gcvFALSE);
+ hardware->extraEventStates = ((((gctUINT32) (hardware->identity.chipMinorFeatures1)) >> (0 ? 3:3) & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1)))))) == (0x0 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1)))))));
/* Check if big endian */
hardware->bigEndian = (*(gctUINT8 *)&data == 0xff);
@@ -1544,7 +1206,7 @@ gckHARDWARE_Construct(
#if !gcdENABLE_128B_MERGE
- if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_MULTI_SOURCE_BLT))
+ if (((((gctUINT32) (hardware->identity.chipMinorFeatures2)) >> (0 ? 21:21) & ((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1))))))))
{
/* 128B merge is turned on by default. Disable it. */
gcmkONERROR(gckOS_WriteRegisterEx(Os, Core, 0x00558, 0));
@@ -1552,22 +1214,6 @@ gckHARDWARE_Construct(
#endif
- {
- gctUINT32 value;
- gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x00090, &value));
-#if gcdDEC_ENABLE_AHB
- if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_DEC_COMPRESSION))
- {
- value |= ~0xFFFFFFBF;
- }
- else
-#endif
- {
- value &= 0xFFFFFFBF;
- }
- gcmkONERROR(gckOS_WriteRegisterEx(Os, Core, 0x00090, value));
- }
-
/* Set power state to ON. */
hardware->chipPowerState = gcvPOWER_ON;
hardware->clockState = gcvTRUE;
@@ -1596,77 +1242,35 @@ gckHARDWARE_Construct(
gcmkONERROR(gckOS_AtomConstruct(Os, &hardware->pageTableDirty));
gcmkONERROR(gckOS_AtomConstruct(Os, &hardware->pendingEvent));
- status = gckOS_QueryOption(Os, "powerManagement", (gctUINT32*)&hardware->powerManagement);
+#if gcdLINK_QUEUE_SIZE
+ hardware->linkQueue.front = 0;
+ hardware->linkQueue.rear = 0;
+ hardware->linkQueue.count = 0;
+#endif
- if (status == gcvSTATUS_NOT_SUPPORTED)
- {
- /* Enable power management by default. */
- hardware->powerManagement = gcvTRUE;
- }
+ /* Enable power management by default. */
+ hardware->powerManagement = gcvTRUE;
/* Disable profiler by default */
hardware->gpuProfiler = gcvFALSE;
- status = gckOS_QueryOption(Os, "gpuProfiler", (gctUINT32*)&hardware->gpuProfiler);
- if (status == gcvSTATUS_NOT_SUPPORTED)
- {
- /* Enable power management by default. */
- hardware->gpuProfiler= gcvFALSE;
- }
-#if defined(LINUX) || defined(__QNXNTO__) || defined(UNDER_CE)
+#if defined(LINUX) || defined(__QNXNTO__) || defined(UNDERCE)
if (hardware->mmuVersion)
{
- hardware->stallFEPrefetch
- = gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_FE_ALLOW_STALL_PREFETCH_ENG);
+ hardware->endAfterFlushMmuCache = gcvTRUE;
}
else
#endif
{
- hardware->stallFEPrefetch = gcvTRUE;
+ hardware->endAfterFlushMmuCache = gcvFALSE;
}
gcmkONERROR(gckOS_QueryOption(Os, "mmu", (gctUINT32_PTR)&hardware->enableMMU));
hardware->minFscaleValue = 1;
- hardware->waitCount = 200;
gckSTATETIMER_Reset(&hardware->powerStateTimer, 0);
-#if gcdLINK_QUEUE_SIZE
- gcmkONERROR(gckQUEUE_Allocate(hardware->os, &hardware->linkQueue, gcdLINK_QUEUE_SIZE));
-#endif
-
- if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_SECURITY))
- {
- gctUINT32 ta = 0;
-
- status = gckOS_QueryOption(Os, "TA", &ta);
-
- if (gcmIS_SUCCESS(status))
- {
- hardware->secureMode = ta ? gcvSECURE_IN_TA : gcvSECURE_IN_NORMAL;
- }
- }
-
- if (hardware->secureMode == gcvSECURE_IN_NORMAL)
- {
- hardware->pagetableArray.size = 4096;
-
- gcmkONERROR(gckOS_AllocateNonPagedMemory(
- hardware->os,
- gcvFALSE,
- &hardware->pagetableArray.size,
- &hardware->pagetableArray.physical,
- &hardware->pagetableArray.logical
- ));
-
- gcmkONERROR(gckOS_GetPhysicalAddress(
- hardware->os,
- hardware->pagetableArray.logical,
- &hardware->pagetableArray.address
- ));
- }
-
/* Return pointer to the gckHARDWARE object. */
*Hardware = hardware;
@@ -1712,16 +1316,6 @@ OnError:
gcmkVERIFY_OK(gckOS_AtomDestroy(Os, hardware->pendingEvent));
}
- if (hardware->pagetableArray.logical != gcvNULL)
- {
- gcmkVERIFY_OK(gckOS_FreeNonPagedMemory(
- Os,
- hardware->pagetableArray.size,
- hardware->pagetableArray.physical,
- hardware->pagetableArray.logical
- ));
- }
-
gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Os, hardware));
}
@@ -1773,44 +1367,12 @@ gckHARDWARE_Destroy(
gcmkVERIFY_OK(gckOS_AtomDestroy(Hardware->os, Hardware->pendingEvent));
- if (Hardware->functionBytes)
- {
-#if USE_KERNEL_VIRTUAL_BUFFERS
- if (Hardware->kernel->virtualCommandBuffer)
- {
- gckVIRTUAL_COMMAND_BUFFER_PTR buffer = (gckVIRTUAL_COMMAND_BUFFER_PTR)Hardware->functionPhysical;
-
- gcmkVERIFY_OK(gckKERNEL_FreeVirtualMemory(
- Hardware->functionPhysical,
- Hardware->functionLogical,
- gcvTRUE
- ));
- }
- else
-#endif
- {
- gcmkVERIFY_OK(gckOS_FreeNonPagedMemory(
- Hardware->os,
- Hardware->functionBytes,
- Hardware->functionPhysical,
- Hardware->functionLogical
- ));
- }
- }
-
-#if gcdLINK_QUEUE_SIZE
- gckQUEUE_Free(Hardware->os, &Hardware->linkQueue);
-#endif
-
- if (Hardware->pagetableArray.logical != gcvNULL)
- {
- gcmkVERIFY_OK(gckOS_FreeNonPagedMemory(
- Hardware->os,
- Hardware->pagetableArray.size,
- Hardware->pagetableArray.physical,
- Hardware->pagetableArray.logical
- ));
- }
+ gcmkVERIFY_OK(gckOS_FreeNonPagedMemory(
+ Hardware->os,
+ Hardware->functionBytes,
+ Hardware->functionPhysical,
+ Hardware->functionLogical
+ ));
/* Mark the object as unknown. */
Hardware->object.type = gcvOBJ_UNKNOWN;
@@ -1879,6 +1441,8 @@ gckHARDWARE_InitializeHardware(
)
{
gceSTATUS status;
+ gctUINT32 baseAddress;
+ gctUINT32 chipRev;
gctUINT32 control;
gctUINT32 data;
gctUINT32 regPMC = 0;
@@ -1888,15 +1452,25 @@ gckHARDWARE_InitializeHardware(
/* Verify the arguments. */
gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
+ /* Read the chip revision register. */
+ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
+ Hardware->core,
+ 0x00024,
+ &chipRev));
+
+ chipRev &= 0xffff;
+
+ if (chipRev != Hardware->identity.chipRevision)
+ {
+ /* Chip is not there! */
+ gcmkONERROR(gcvSTATUS_CONTEXT_LOSSED);
+ }
+
/* Disable isolate GPU bit. */
gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
Hardware->core,
0x00000,
- ((((gctUINT32) (0x00000900)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ?
- 19:19))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 19:19) - (0 ?
- 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ?
- 19:19)))));
+ ((((gctUINT32) (0x00000900)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ? 19:19))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ? 19:19)))));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
Hardware->core,
@@ -1907,11 +1481,7 @@ gckHARDWARE_InitializeHardware(
gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
Hardware->core,
0x00000,
- ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 11:11) - (0 ? 11:11) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ?
- 11:11))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 11:11) - (0 ?
- 11:11) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ?
- 11:11)))));
+ ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 11:11) - (0 ? 11:11) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ? 11:11))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 11:11) - (0 ? 11:11) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ? 11:11)))));
/* Reset memory counters. */
gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
@@ -1924,93 +1494,84 @@ gckHARDWARE_InitializeHardware(
0x0003C,
0));
- if (Hardware->mmuVersion == 0)
- {
- /* Program the base addesses. */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
- Hardware->core,
- 0x0041C,
- Hardware->baseAddress));
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
- Hardware->core,
- 0x00418,
- Hardware->baseAddress));
+ /* Get the system's physical base address. */
+ gcmkONERROR(gckOS_GetBaseAddress(Hardware->os, &baseAddress));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
- Hardware->core,
- 0x00428,
- Hardware->baseAddress));
+ /* Program the base addesses. */
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
+ Hardware->core,
+ 0x0041C,
+ baseAddress));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
- Hardware->core,
- 0x00420,
- Hardware->baseAddress));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
+ Hardware->core,
+ 0x00418,
+ baseAddress));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
- Hardware->core,
- 0x00424,
- Hardware->baseAddress));
- }
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
+ Hardware->core,
+ 0x00428,
+ baseAddress));
- gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- Hardware->powerBaseAddress +
- 0x00100,
- &data));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
+ Hardware->core,
+ 0x00420,
+ baseAddress));
- /* Enable clock gating. */
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0)));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
+ Hardware->core,
+ 0x00424,
+ baseAddress));
- if ((Hardware->identity.chipRevision == 0x4301)
- || (Hardware->identity.chipRevision == 0x4302)
- )
{
- /* Disable stall module level clock gating for 4.3.0.1 and 4.3.0.2
- ** revisions. */
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 1:1) - (0 ?
- 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1)));
- }
+ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
+ Hardware->core,
+ Hardware->powerBaseAddress +
+ 0x00100,
+ &data));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
- Hardware->core,
- Hardware->powerBaseAddress
- + 0x00100,
- data));
+ /* Enable clock gating. */
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
+
+ if ((Hardware->identity.chipRevision == 0x4301)
+ || (Hardware->identity.chipRevision == 0x4302)
+ )
+ {
+ /* Disable stall module level clock gating for 4.3.0.1 and 4.3.0.2
+ ** revisions. */
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)));
+ }
+
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
+ Hardware->core,
+ Hardware->powerBaseAddress
+ + 0x00100,
+ data));
#if gcdENABLE_3D
- /* Disable PE clock gating on revs < 5.0 when HZ is present without a
- ** bug fix. */
- if ((Hardware->identity.chipRevision < 0x5000)
- && gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HZ)
- && !gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_BUG_FIXES4)
- )
- {
- if (regPMC == 0)
+ /* Disable PE clock gating on revs < 5.0 when HZ is present without a
+ ** bug fix. */
+ if ((Hardware->identity.chipRevision < 0x5000)
+ && gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HZ)
+ && ((((gctUINT32) (Hardware->identity.chipMinorFeatures1)) >> (0 ? 9:9) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))) == (0x0 & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))))
+ )
{
- gcmkONERROR(
- gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- Hardware->powerBaseAddress
- + 0x00104,
- &regPMC));
+ if (regPMC == 0)
+ {
+ gcmkONERROR(
+ gckOS_ReadRegisterEx(Hardware->os,
+ Hardware->core,
+ Hardware->powerBaseAddress
+ + 0x00104,
+ &regPMC));
+ }
+
+ /* Disable PE clock gating. */
+ regPMC = ((((gctUINT32) (regPMC)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)));
}
- /* Disable PE clock gating. */
- regPMC = ((((gctUINT32) (regPMC)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ?
- 2:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 2:2) - (0 ?
- 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ?
- 2:2)));
- }
#endif
+ }
if (Hardware->identity.chipModel == gcv4000 &&
((Hardware->identity.chipRevision == 0x5208) || (Hardware->identity.chipRevision == 0x5222)))
@@ -2019,38 +1580,22 @@ gckHARDWARE_InitializeHardware(
gckOS_WriteRegisterEx(Hardware->os,
Hardware->core,
0x0010C,
- ((((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)))));
+ ((((gctUINT32) (0x01590880)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23)))));
}
- if ((Hardware->identity.chipModel == gcv1000 &&
- (Hardware->identity.chipRevision == 0x5039 ||
- Hardware->identity.chipRevision == 0x5040))
- ||
- (Hardware->identity.chipModel == gcv2000 &&
- Hardware->identity.chipRevision == 0x5140)
- )
+ if (Hardware->identity.chipModel == gcv1000 &&
+ (Hardware->identity.chipRevision == 0x5039 ||
+ Hardware->identity.chipRevision == 0x5040))
{
gctUINT32 pulseEater;
- pulseEater = ((((gctUINT32) (0x01590880)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ?
- 16:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 16:16) - (0 ?
- 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ?
- 16:16)));
+ pulseEater = ((((gctUINT32) (0x01590880)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16)));
gcmkONERROR(
gckOS_WriteRegisterEx(Hardware->os,
Hardware->core,
0x0010C,
- ((((gctUINT32) (pulseEater)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 17:17) - (0 ? 17:17) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ?
- 17:17))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 17:17) - (0 ?
- 17:17) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ?
- 17:17)))));
+ ((((gctUINT32) (pulseEater)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 17:17) - (0 ? 17:17) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ? 17:17))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 17:17) - (0 ? 17:17) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ? 17:17)))));
}
if ((gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) == gcvSTATUS_FALSE)
@@ -2067,11 +1612,7 @@ gckHARDWARE_InitializeHardware(
&regPMC));
}
- regPMC = ((((gctUINT32) (regPMC)) & ~(((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)));
+ regPMC = ((((gctUINT32) (regPMC)) & ~(((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)));
}
if (_IsHardwareMatch(Hardware, gcv2000, 0x5108))
@@ -2083,16 +1624,8 @@ gckHARDWARE_InitializeHardware(
&data));
/* Set FE bus to one, TX bus to zero */
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ?
- 3:3))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 3:3) - (0 ?
- 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ?
- 3:3)));
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ?
- 7:7))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:7) - (0 ?
- 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ?
- 7:7)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7)));
gcmkONERROR(
gckOS_WriteRegisterEx(Hardware->os,
@@ -2103,11 +1636,12 @@ gckHARDWARE_InitializeHardware(
gcmkONERROR(
gckHARDWARE_SetMMU(Hardware,
- Hardware->kernel->mmu->area[0].pageTableLogical));
+ Hardware->kernel->mmu->pageTableLogical));
if (Hardware->identity.chipModel >= gcv400
&& Hardware->identity.chipModel != gcv420
- && !gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_BUG_FIXES12))
+ && (((((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)
+ )
{
if (regPMC == 0)
{
@@ -2120,15 +1654,19 @@ gckHARDWARE_InitializeHardware(
}
/* Disable PA clock gating. */
- regPMC = ((((gctUINT32) (regPMC)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ?
- 4:4))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 4:4) - (0 ?
- 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ?
- 4:4)));
+ regPMC = ((((gctUINT32) (regPMC)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
}
/* Limit 2D outstanding request. */
- if (Hardware->maxOutstandingReads)
+ if (_IsHardwareMatch(Hardware, gcv880, 0x5107))
+ {
+ gctUINT32 axi_ot;
+ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00414, &axi_ot));
+ axi_ot = (axi_ot & (~0xFF)) | 0x00010;
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00414, axi_ot));
+ }
+
+ if (Hardware->identity.chip2DControl & 0xFF)
{
gctUINT32 data;
@@ -2138,11 +1676,7 @@ gckHARDWARE_InitializeHardware(
0x00414,
&data));
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (Hardware->maxOutstandingReads & 0xFF) & ((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (Hardware->identity.chip2DControl & 0xFF) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)));
gcmkONERROR(
gckOS_WriteRegisterEx(Hardware->os,
@@ -2160,11 +1694,7 @@ gckHARDWARE_InitializeHardware(
&data));
/* Disable HZ-L2. */
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:12) - (0 ? 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ?
- 12:12))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 12:12) - (0 ?
- 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ?
- 12:12)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:12) - (0 ? 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 12:12) - (0 ? 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12)));
gcmkONERROR(
gckOS_WriteRegisterEx(Hardware->os,
@@ -2175,9 +1705,6 @@ gckHARDWARE_InitializeHardware(
if (_IsHardwareMatch(Hardware, gcv4000, 0x5222)
|| _IsHardwareMatch(Hardware, gcv2000, 0x5108)
- || (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_TX_DESCRIPTOR)
- && !gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_TX_DESC_CACHE_CLOCKGATE_FIX)
- )
)
{
if (regPMC == 0)
@@ -2191,11 +1718,7 @@ gckHARDWARE_InitializeHardware(
}
/* Disable TX clock gating. */
- regPMC = ((((gctUINT32) (regPMC)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ?
- 7:7))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 7:7) - (0 ?
- 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ?
- 7:7)));
+ regPMC = ((((gctUINT32) (regPMC)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7)));
}
if (_IsHardwareMatch(Hardware, gcv880, 0x5106))
@@ -2214,18 +1737,10 @@ gckHARDWARE_InitializeHardware(
}
/* Disable RA HZ clock gating. */
- regPMC = ((((gctUINT32) (regPMC)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 17:17) - (0 ? 17:17) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ?
- 17:17))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 17:17) - (0 ?
- 17:17) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ?
- 17:17)));
+ regPMC = ((((gctUINT32) (regPMC)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 17:17) - (0 ? 17:17) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ? 17:17))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 17:17) - (0 ? 17:17) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ? 17:17)));
/* Disable RA EZ clock gating. */
- regPMC = ((((gctUINT32) (regPMC)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ?
- 16:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 16:16) - (0 ?
- 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ?
- 16:16)));
+ regPMC = ((((gctUINT32) (regPMC)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16)));
if (regPMC != 0)
{
@@ -2238,7 +1753,7 @@ gckHARDWARE_InitializeHardware(
}
if (_IsHardwareMatch(Hardware, gcv2000, 0x5108)
- || (_IsHardwareMatch(Hardware, gcv2000, 0xffff5450))
+ || (_IsHardwareMatch(Hardware, gcv3000, 0x5450) && (Hardware->identity.chipFlags & gcvCHIP_FLAG_GC2000_R2))
|| _IsHardwareMatch(Hardware, gcv320, 0x5007)
|| _IsHardwareMatch(Hardware, gcv320, 0x5303)
|| _IsHardwareMatch(Hardware, gcv880, 0x5106)
@@ -2262,11 +1777,7 @@ gckHARDWARE_InitializeHardware(
&data));
/* Disable internal DFS. */
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 18:18) - (0 ? 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 18:18) - (0 ? 18:18) + 1))))))) << (0 ?
- 18:18))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 18:18) - (0 ?
- 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 18:18) - (0 ? 18:18) + 1))))))) << (0 ?
- 18:18)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 18:18) - (0 ? 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 18:18) - (0 ? 18:18) + 1))))))) << (0 ? 18:18))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 18:18) - (0 ? 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 18:18) - (0 ? 18:18) + 1))))))) << (0 ? 18:18)));
gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
Hardware->core,
@@ -2274,25 +1785,6 @@ gckHARDWARE_InitializeHardware(
data));
}
-
- /* VIV: #15495. */
- if (_IsHardwareMatch(Hardware, gcv2500, 0x5422))
- {
- gcmkONERROR(gckOS_ReadRegisterEx(
- Hardware->os, Hardware->core, 0x00090, &data));
-
- /* AXI switch setup to SPLIT_TO64 mode */
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ?
- 1:0))) | (((gctUINT32) (0x2 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0)));
-
- gcmkONERROR(gckOS_WriteRegisterEx(
- Hardware->os, Hardware->core, 0x00090, data));
- }
-
- _ConfigurePolicyID(Hardware);
-
#if gcdDEBUG_MODULE_CLOCK_GATING
_ConfigureModuleLevelClockGating(Hardware);
#endif
@@ -2439,13 +1931,73 @@ gckHARDWARE_QueryChipIdentity(
OUT gcsHAL_QUERY_CHIP_IDENTITY_PTR Identity
)
{
+ gctUINT32 features;
+
gcmkHEADER_ARG("Hardware=0x%x", Hardware);
/* Verify the arguments. */
gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
gcmkVERIFY_ARGUMENT(Identity != gcvNULL);
- *Identity = Hardware->identity;
+ /* Return chip model and revision. */
+ Identity->chipModel = Hardware->identity.chipModel;
+ Identity->chipRevision = Hardware->identity.chipRevision;
+
+ /* Return feature set. */
+ features = Hardware->identity.chipFeatures;
+
+ if ((((((gctUINT32) (features)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ))
+ {
+ /* Override fast clear by command line. */
+ features = ((((gctUINT32) (features)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) ((gctUINT32) (Hardware->allowFastClear) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
+ }
+
+ if ((((((gctUINT32) (features)) >> (0 ? 5:5)) & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1)))))) ))
+ {
+ /* Override compression by command line. */
+ features = ((((gctUINT32) (features)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) ((gctUINT32) (Hardware->allowCompression) & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)));
+ }
+
+ /* Mark 2D pipe as available for GC500.0 through GC500.2 and GC300,
+ ** since they did not have this bit. */
+ if (((Hardware->identity.chipModel == gcv500) && (Hardware->identity.chipRevision <= 2))
+ || (Hardware->identity.chipModel == gcv300)
+ )
+ {
+ features = ((((gctUINT32) (features)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9)));
+ }
+
+ Identity->chipFeatures = features;
+
+ /* Return minor features. */
+ Identity->chipMinorFeatures = Hardware->identity.chipMinorFeatures;
+ Identity->chipMinorFeatures1 = Hardware->identity.chipMinorFeatures1;
+ Identity->chipMinorFeatures2 = Hardware->identity.chipMinorFeatures2;
+ Identity->chipMinorFeatures3 = Hardware->identity.chipMinorFeatures3;
+ Identity->chipMinorFeatures4 = Hardware->identity.chipMinorFeatures4;
+ Identity->chipMinorFeatures5 = Hardware->identity.chipMinorFeatures5;
+ Identity->chipMinorFeatures6 = Hardware->identity.chipMinorFeatures6;
+
+ /* Return chip specs. */
+ Identity->streamCount = Hardware->identity.streamCount;
+ Identity->registerMax = Hardware->identity.registerMax;
+ Identity->threadCount = Hardware->identity.threadCount;
+ Identity->shaderCoreCount = Hardware->identity.shaderCoreCount;
+ Identity->vertexCacheSize = Hardware->identity.vertexCacheSize;
+ Identity->vertexOutputBufferSize = Hardware->identity.vertexOutputBufferSize;
+ Identity->pixelPipes = Hardware->identity.pixelPipes;
+ Identity->instructionCount = Hardware->identity.instructionCount;
+ Identity->numConstants = Hardware->identity.numConstants;
+ Identity->bufferSize = Hardware->identity.bufferSize;
+ Identity->varyingsCount = Hardware->identity.varyingsCount;
+ Identity->superTileMode = Hardware->identity.superTileMode;
+#if gcdMULTI_GPU
+ Identity->gpuCoreCount = Hardware->identity.gpuCoreCount;
+#endif
+ Identity->chip2DControl = Hardware->identity.chip2DControl;
+
+ Identity->productID = Hardware->identity.productID;
+ Identity->chipFlags = Hardware->identity.chipFlags;
/* Success. */
gcmkFOOTER_NO();
@@ -2571,54 +2123,18 @@ gckHARDWARE_Execute(
gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00654, Address));
/* Build control register. */
- control = ((((gctUINT32) (0)) & ~(((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)))
- | ((((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) ((Bytes + 7) >> 3) & ((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ control = ((((gctUINT32) (0)) & ~(((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)))
+ | ((((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) ((Bytes + 7) >> 3) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
/* Set big endian */
if (Hardware->bigEndian)
{
- control |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 21:20) - (0 ? 21:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:20) - (0 ? 21:20) + 1))))))) << (0 ?
- 21:20))) | (((gctUINT32) (0x2 & ((gctUINT32) ((((1 ? 21:20) - (0 ? 21:20) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 21:20) - (0 ? 21:20) + 1))))))) << (0 ? 21:20)));
+ control |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 21:20) - (0 ? 21:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:20) - (0 ? 21:20) + 1))))))) << (0 ? 21:20))) | (((gctUINT32) (0x2 & ((gctUINT32) ((((1 ? 21:20) - (0 ? 21:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:20) - (0 ? 21:20) + 1))))))) << (0 ? 21:20)));
}
- /* Make sure writing to command buffer and previous AHB register is done. */
- gcmkONERROR(gckOS_MemoryBarrier(Hardware->os, gcvNULL));
-
/* Write control register. */
- switch (Hardware->secureMode)
- {
- case gcvSECURE_NONE:
- gcmkONERROR(
- gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00658, control));
- break;
- case gcvSECURE_IN_NORMAL:
-
-#if defined(__KERNEL__)
- gcmkONERROR(
- gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00658, control));
-#endif
- gcmkONERROR(
- gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x003A4, control));
-
- break;
-#if gcdENABLE_TRUST_APPLICATION
- case gcvSECURE_IN_TA:
- /* Send message to TA. */
- gcmkONERROR(gckKERNEL_SecurityStartCommand(Hardware->kernel, Address, (gctUINT32)Bytes));
- break;
-#endif
- default:
- break;
- }
+ gcmkONERROR(
+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00658, control));
/* Increase execute count. */
Hardware->executeCount++;
@@ -2657,9 +2173,6 @@ OnError:
** WAIT/LINK command sequence at or gcvNULL just to query the size of the
** WAIT/LINK command sequence.
**
-** gctUINT32 Address
-** GPU address of current location inside the command queue.
-**
** gctUINT32 Offset
** Offset into command buffer required for alignment.
**
@@ -2687,17 +2200,18 @@ gceSTATUS
gckHARDWARE_WaitLink(
IN gckHARDWARE Hardware,
IN gctPOINTER Logical,
- IN gctUINT32 Address,
IN gctUINT32 Offset,
IN OUT gctUINT32 * Bytes,
OUT gctUINT32 * WaitOffset,
OUT gctUINT32 * WaitSize
)
{
+ static const gctUINT waitCount = 200;
+
gceSTATUS status;
+ gctUINT32 address;
gctUINT32_PTR logical;
gctUINT32 bytes;
- gctBOOL useL2;
gcmkHEADER_ARG("Hardware=0x%x Logical=0x%x Offset=0x%08x *Bytes=%lu",
Hardware, Logical, Offset, gcmOPT_VALUE(Bytes));
@@ -2706,18 +2220,12 @@ gckHARDWARE_WaitLink(
gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
gcmkVERIFY_ARGUMENT((Logical != gcvNULL) || (Bytes != gcvNULL));
- useL2 = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_64K_L2_CACHE);
-
+#if gcdMULTI_GPU && !gcdDISABLE_FE_L2
+ bytes = gcmALIGN(Offset + 40, 8) - Offset;
+#else
/* Compute number of bytes required. */
- if (useL2)
- {
- bytes = gcmALIGN(Offset + 24, 8) - Offset;
- }
- else
- {
- bytes = gcmALIGN(Offset + 16, 8) - Offset;
- }
-
+ bytes = gcmALIGN(Offset + 16, 8) - Offset;
+#endif
/* Cast the input pointer. */
logical = (gctUINT32_PTR) Logical;
@@ -2730,74 +2238,74 @@ gckHARDWARE_WaitLink(
gcmkONERROR(gcvSTATUS_BUFFER_TOO_SMALL);
}
- gcmkASSERT(Address != ~0U);
+ /* Convert logical into hardware specific address. */
+ gcmkONERROR(gckHARDWARE_ConvertLogical(Hardware, logical, gcvFALSE, &address));
/* Store the WAIT/LINK address. */
- Hardware->lastWaitLink = Address;
+ Hardware->lastWaitLink = address;
/* Append WAIT(count). */
- *logical++
- = ((((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) (0x07 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (Hardware->waitCount) & ((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
-
- logical++;
-
- if (useL2)
- {
- /* LoadState(AQFlush, 1), flush. */
- *logical++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
-
- *logical++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ?
- 6:6))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)));
- }
+ logical[0]
+ = ((((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) (0x07 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (waitCount) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
+
+#if gcdMULTI_GPU && !gcdDISABLE_FE_L2
+ 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) (0x0D & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | gcvCORE_3D_0_MASK;
+
+ logical[3] = 0;
+
+ /* LoadState(AQFlush, 1), flush. */
+ logical[4] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
+
+ logical[5] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)));
+
+ logical[6] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x0D & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | gcvCORE_3D_ALL_MASK;
+
+ logical[7] = 0;
/* Append LINK(2, address). */
- *logical++
- = ((((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) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (bytes >> 3) & ((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
-
- *logical++ = Address;
+ logical[8] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (bytes >> 3) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
+
+ logical[9] = address;
gcmkTRACE_ZONE(
gcvLEVEL_INFO, gcvZONE_HARDWARE,
- "0x%08x: WAIT %u", Address, Hardware->waitCount
+ "0x%08x: WAIT %u", address, waitCount
);
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "0x%x: FLUSH 0x%x", address + 8, logical[3]);
+
gcmkTRACE_ZONE(
gcvLEVEL_INFO, gcvZONE_HARDWARE,
"0x%08x: LINK 0x%08x, #%lu",
- Address + 8, Address, bytes
+ address + 16, address, bytes
);
+#else
+
+ /* Append LINK(2, address). */
+ 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) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (bytes >> 3) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
+ logical[3] = address;
+
+ gcmkTRACE_ZONE(
+ gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "0x%08x: WAIT %u", address, waitCount
+ );
+
+ gcmkTRACE_ZONE(
+ gcvLEVEL_INFO, gcvZONE_HARDWARE,
+ "0x%08x: LINK 0x%08x, #%lu",
+ address + 8, address, bytes
+ );
+#endif
if (WaitOffset != gcvNULL)
{
/* Return the offset pointer to WAIT command. */
@@ -2807,14 +2315,11 @@ gckHARDWARE_WaitLink(
if (WaitSize != gcvNULL)
{
/* Return number of bytes used by the WAIT command. */
- if (useL2)
- {
- *WaitSize = 16;
- }
- else
- {
- *WaitSize = 8;
- }
+#if gcdMULTI_GPU && !gcdDISABLE_FE_L2
+ *WaitSize = 32;
+#else
+ *WaitSize = 8;
+#endif
}
}
@@ -2889,11 +2394,8 @@ gckHARDWARE_End(
}
/* Append END. */
- logical[0] =
- ((((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) (0x02 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+ logical[0] =
+ ((((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) (0x02 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
/* Record the count of execution which is finised by this END. */
logical[1] =
@@ -2905,12 +2407,7 @@ gckHARDWARE_End(
gcmkONERROR(
gckOS_MemoryBarrier(Hardware->os, Logical));
-#if USE_KERNEL_VIRTUAL_BUFFERS
- if (!Hardware->kernel->virtualCommandBuffer)
-#endif
- {
- gcmkONERROR(gckHARDWARE_ConvertLogical(Hardware, logical, gcvFALSE, &address));
- }
+ gcmkONERROR(gckHARDWARE_ConvertLogical(Hardware, logical, gcvFALSE, &address));
Hardware->lastEnd = address;
}
@@ -2931,6 +2428,7 @@ OnError:
return status;
}
+#if gcdMULTI_GPU
gceSTATUS
gckHARDWARE_ChipEnable(
IN gckHARDWARE Hardware,
@@ -2939,7 +2437,6 @@ gckHARDWARE_ChipEnable(
IN OUT gctSIZE_T * Bytes
)
{
- gckOS os = Hardware->os;
gctUINT32_PTR logical = (gctUINT32_PTR) Logical;
gceSTATUS status;
@@ -2959,13 +2456,8 @@ gckHARDWARE_ChipEnable(
}
/* Append CHIPENABLE. */
- gcmkWRITE_MEMORY(
- logical,
- ((((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) (0x0D & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | ChipEnable
- );
+ logical[0] = ((((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) (0x0D & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ChipEnable;
gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE, "0x%x: CHIPENABLE 0x%x", Logical, ChipEnable);
}
@@ -2985,6 +2477,7 @@ OnError:
gcmkFOOTER();
return status;
}
+#endif
/*******************************************************************************
**
@@ -3037,10 +2530,7 @@ gckHARDWARE_Nop(
}
/* Append NOP. */
- logical[0] = ((((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) (0x03 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+ logical[0] = ((((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) (0x03 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE, "0x%x: NOP", Logical);
}
@@ -3107,8 +2597,6 @@ gckHARDWARE_Event(
gctUINT32 destination = 0;
gctUINT32_PTR logical = (gctUINT32_PTR) Logical;
gceSTATUS status;
- gctBOOL blt;
- gctBOOL extraEventStates;
gcmkHEADER_ARG("Hardware=0x%x Logical=0x%x Event=%u FromWhere=%d *Bytes=%lu",
Hardware, Logical, Event, FromWhere, gcmOPT_VALUE(Bytes));
@@ -3118,30 +2606,16 @@ gckHARDWARE_Event(
gcmkVERIFY_ARGUMENT((Logical == gcvNULL) || (Bytes != gcvNULL));
gcmkVERIFY_ARGUMENT(Event < 32);
- if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_BLT_ENGINE))
- {
- /* Send all event from blt. */
- if (FromWhere == gcvKERNEL_PIXEL)
- {
- FromWhere = gcvKERNEL_BLT;
- }
- }
-
- blt = FromWhere == gcvKERNEL_BLT ? gcvTRUE : gcvFALSE;
+#if gcdMULTI_GPU
+ if (FromWhere == gcvKERNEL_COMMAND) FromWhere = gcvKERNEL_PIXEL;
+#endif
/* Determine the size of the command. */
- extraEventStates = Hardware->extraEventStates && (FromWhere == gcvKERNEL_PIXEL);
-
- size = extraEventStates
+ size = (Hardware->extraEventStates && (FromWhere == gcvKERNEL_PIXEL))
? gcmALIGN(8 + (1 + 5) * 4, 8) /* EVENT + 5 STATES */
: 8;
- if (blt)
- {
- size += 16;
- }
-
if (Logical != gcvNULL)
{
if (*Bytes < size)
@@ -3154,105 +2628,24 @@ gckHARDWARE_Event(
{
case gcvKERNEL_COMMAND:
/* From command processor. */
- destination = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ?
- 5:5))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)));
+ destination = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)));
break;
case gcvKERNEL_PIXEL:
/* From pixel engine. */
- destination = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ?
- 6:6))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)));
- break;
-
- case gcvKERNEL_BLT:
- destination = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ?
- 7:7))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7)));
+ destination = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)));
break;
default:
gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
}
- if (blt)
- {
- *logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x502E) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
-
- *logical++
- = ((((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)));
- }
-
- /* Append EVENT(Event, destination). */
- *logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E01) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
-
- *logical++
- = ((((gctUINT32) (destination)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) ((gctUINT32) (Event) & ((gctUINT32) ((((1 ? 4:0) - (0 ?
- 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0)));
-
- if (blt)
- {
- *logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x502E) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
-
- *logical++
- = ((((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) (0x0 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
- }
+ /* Append EVENT(Event, destiantion). */
+ logical[0] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E01) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
+ logical[1] = ((((gctUINT32) (destination)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) ((gctUINT32) (Event) & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)));
/* Make sure the event ID gets written out before GPU can access it. */
gcmkONERROR(
@@ -3271,27 +2664,16 @@ gckHARDWARE_Event(
** support back-to-back events due to the async interface. The extra
** states add the necessary delay to ensure that event IDs do not
** collide. */
- if (extraEventStates)
+ if (size > 8)
{
- *logical++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0100) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
- *logical++ = 0;
- *logical++ = 0;
- *logical++ = 0;
- *logical++ = 0;
- *logical++ = 0;
+ logical[2] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0100) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
+ logical[3] = 0;
+ logical[4] = 0;
+ logical[5] = 0;
+ logical[6] = 0;
+ logical[7] = 0;
}
#if gcdINTERRUPT_STATISTIC
@@ -3378,44 +2760,18 @@ gckHARDWARE_PipeSelect(
}
flush = (Pipe == gcvPIPE_2D)
- ? ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
- : ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)));
-
- stall = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ ? ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
+ : ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)));
+
+ stall = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
/* LoadState(AQFlush, 1), flush. */
logical[0]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
logical[1]
= flush;
@@ -3425,20 +2781,9 @@ gckHARDWARE_PipeSelect(
/* LoadState(AQSempahore, 1), stall. */
logical[2]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
logical[3]
= stall;
@@ -3447,10 +2792,7 @@ gckHARDWARE_PipeSelect(
"0x%x: SEMAPHORE 0x%x", logical + 2, stall);
/* Stall, stall. */
- logical[4] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+ logical[4] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
logical[5] = stall;
gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
@@ -3458,20 +2800,9 @@ gckHARDWARE_PipeSelect(
/* LoadState(AQPipeSelect, 1), pipe. */
logical[6]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
logical[7] = (Pipe == gcvPIPE_2D)
? 0x1
@@ -3578,15 +2909,8 @@ gckHARDWARE_Link(
bytes = gcmALIGN(FetchAddress + FetchSize, 64) - FetchAddress;
/* Append LINK(bytes / 8), FetchAddress. */
- link = ((((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) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (bytes >> 3) & ((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ link = ((((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) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (bytes >> 3) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
gcmkONERROR(
gckOS_WriteMemory(Hardware->os, logical, link));
@@ -3617,264 +2941,6 @@ OnError:
return status;
}
-gceSTATUS
-gckHARDWARE_FenceRender(
- IN gckHARDWARE Hardware,
- IN gctPOINTER Logical,
- IN gctUINT32 FenceAddress,
- IN gctUINT64 FenceData,
- IN OUT gctUINT32 * Bytes
- )
-{
- gckOS os = Hardware->os;
- gctUINT32_PTR logical = (gctUINT32_PTR)Logical;
-
- gctUINT32 dataLow = (gctUINT32)FenceData;
- gctUINT32 dataHigh = (gctUINT32)(FenceData >> 32);
-
- if (logical)
- {
- gcmkWRITE_MEMORY(
- logical,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E1A) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)))
- );
-
- gcmkWRITE_MEMORY(
- logical,
- FenceAddress
- );
-
- gcmkWRITE_MEMORY(
- logical,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E26) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)))
- );
-
- gcmkWRITE_MEMORY(
- logical,
- dataHigh
- );
-
- gcmkWRITE_MEMORY(
- logical,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E1B) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)))
- );
-
- *logical++
- = dataLow;
- }
- else
- {
- *Bytes = gcdRENDER_FENCE_LENGTH;
- }
-
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gckHARDWARE_FenceBlt(
- IN gckHARDWARE Hardware,
- IN gctPOINTER Logical,
- IN gctUINT32 FenceAddress,
- IN gctUINT64 FenceData,
- IN OUT gctUINT32 * Bytes
- )
-{
- gckOS os = Hardware->os;
- gctUINT32_PTR logical = (gctUINT32_PTR)Logical;
-
- gctUINT32 dataLow = (gctUINT32)FenceData;
- gctUINT32 dataHigh = (gctUINT32)(FenceData >> 32);
-
- if (logical)
- {
- gcmkWRITE_MEMORY(
- logical,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x502E) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)))
- );
-
- gcmkWRITE_MEMORY(
- logical,
- ((((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)))
- );
-
- gcmkWRITE_MEMORY(
- logical,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x5029) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)))
- );
-
- gcmkWRITE_MEMORY(
- logical,
- FenceAddress
- );
-
- gcmkWRITE_MEMORY(
- logical,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x502D) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)))
- );
-
- gcmkWRITE_MEMORY(
- logical,
- dataHigh
- );
-
- gcmkWRITE_MEMORY(
- logical,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x502A) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)))
- );
-
- gcmkWRITE_MEMORY(
- logical,
- dataLow
- );
-
- gcmkWRITE_MEMORY(
- logical,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x502E) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)))
- );
-
- gcmkWRITE_MEMORY(
- logical,
- ((((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) (0x0 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
- );
- }
- else
- {
- *Bytes = gcdBLT_FENCE_LENGTH;
- }
-
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gckHARDWARE_Fence(
- IN gckHARDWARE Hardware,
- IN gceENGINE Engine,
- IN gctPOINTER Logical,
- IN gctUINT32 FenceAddress,
- IN gctUINT64 FenceData,
- IN OUT gctUINT32 * Bytes
- )
-{
- if (Engine == gcvENGINE_RENDER)
- {
- return gckHARDWARE_FenceRender(Hardware, Logical, FenceAddress, FenceData, Bytes);
- }
- else
- {
- return gckHARDWARE_FenceBlt(Hardware, Logical, FenceAddress, FenceData, Bytes);
- }
-}
-
/*******************************************************************************
**
** gckHARDWARE_UpdateQueueTail
@@ -3916,10 +2982,18 @@ gckHARDWARE_UpdateQueueTail(
gckOS_MemoryBarrier(Hardware->os, Logical));
/* Notify gckKERNEL object of change. */
+#if gcdMULTI_GPU
+ gcmkONERROR(
+ gckKERNEL_Notify(Hardware->kernel,
+ 0,
+ gcvNOTIFY_COMMAND_QUEUE,
+ gcvFALSE));
+#else
gcmkONERROR(
gckKERNEL_Notify(Hardware->kernel,
gcvNOTIFY_COMMAND_QUEUE,
gcvFALSE));
+#endif
if (status == gcvSTATUS_CHIP_NOT_READY)
{
@@ -3970,6 +3044,7 @@ gckHARDWARE_ConvertLogical(
{
gctUINT32 address;
gceSTATUS status;
+ gctUINT32 baseAddress;
gctPHYS_ADDR_T physical;
gcmkHEADER_ARG("Hardware=0x%x Logical=0x%x InUserSpace=%d",
@@ -3995,22 +3070,17 @@ gckHARDWARE_ConvertLogical(
/* For old MMU, get GPU address according to baseAddress. */
if (Hardware->mmuVersion == 0)
{
+ gcmkONERROR(gckOS_GetBaseAddress(Hardware->os, &baseAddress));
+
/* Subtract base address to get a GPU address. */
- gcmkASSERT(address >= Hardware->baseAddress);
- address -= Hardware->baseAddress;
+ gcmkASSERT(address >= baseAddress);
+ address -= baseAddress;
}
/* Return hardware specific address. */
*Address = (Hardware->mmuVersion == 0)
- ? ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ?
- 31:31))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 30:0) - (0 ? 30:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 30:0) - (0 ? 30:0) + 1))))))) << (0 ?
- 30:0))) | (((gctUINT32) ((gctUINT32) (address) & ((gctUINT32) ((((1 ? 30:0) - (0 ?
- 30:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 30:0) - (0 ? 30:0) + 1))))))) << (0 ?
- 30:0)))
+ ? ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 30:0) - (0 ? 30:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 30:0) - (0 ? 30:0) + 1))))))) << (0 ? 30:0))) | (((gctUINT32) ((gctUINT32) (address) & ((gctUINT32) ((((1 ? 30:0) - (0 ? 30:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 30:0) - (0 ? 30:0) + 1))))))) << (0 ? 30:0)))
: address;
/* Success. */
@@ -4048,12 +3118,14 @@ OnError:
gceSTATUS
gckHARDWARE_Interrupt(
IN gckHARDWARE Hardware,
+#if gcdMULTI_GPU
+ IN gctUINT CoreId,
+#endif
IN gctBOOL InterruptValid
)
{
gckEVENT eventObj;
gctUINT32 data = 0;
- gctUINT32 dataEx;
gceSTATUS status;
gcmkHEADER_ARG("Hardware=0x%x InterruptValid=%d", Hardware, InterruptValid);
@@ -4068,11 +3140,31 @@ gckHARDWARE_Interrupt(
if (InterruptValid)
{
/* Read AQIntrAcknowledge register. */
+#if gcdMULTI_GPU
+ if (Hardware->core == gcvCORE_MAJOR)
+ {
+ gcmkONERROR(
+ gckOS_ReadRegisterByCoreId(Hardware->os,
+ Hardware->core,
+ CoreId,
+ 0x00010,
+ &data));
+ }
+ else
+ {
+ gcmkONERROR(
+ gckOS_ReadRegisterEx(Hardware->os,
+ Hardware->core,
+ 0x00010,
+ &data));
+ }
+#else
gcmkONERROR(
gckOS_ReadRegisterEx(Hardware->os,
Hardware->core,
0x00010,
&data));
+#endif
if (data == 0)
{
@@ -4088,45 +3180,16 @@ gckHARDWARE_Interrupt(
/* Inform gckEVENT of the interrupt. */
status = gckEVENT_Interrupt(eventObj,
+#if gcdMULTI_GPU
+ CoreId,
+#endif
data);
}
-
- if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_BLT_ENGINE))
- {
- /* Read BLT interrupt. */
- gcmkONERROR(gckOS_ReadRegisterEx(
- Hardware->os,
- Hardware->core,
- 0x000D4,
- &dataEx
- ));
-
- if (dataEx & 0x80000000)
- {
- /* Descriptor fetched, update counter. */
- gckFE_UpdateAvaiable(Hardware, &Hardware->kernel->asyncCommand->fe);
-
- dataEx &= ~0x80000000;
- }
-
- if (dataEx)
- {
- status = gckEVENT_Interrupt(Hardware->kernel->asyncEvent,
- dataEx
- );
- }
- }
}
else
{
/* Handle events. */
status = gckEVENT_Notify(eventObj, 0);
-
- if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_BLT_ENGINE))
- {
- /* TODO : Move it to a indpendent worker thread. */
- status = gckEVENT_Notify(Hardware->kernel->asyncEvent, 0);
- }
}
OnError:
@@ -4162,7 +3225,6 @@ OnError:
gceSTATUS
gckHARDWARE_QueryCommandBuffer(
IN gckHARDWARE Hardware,
- IN gceENGINE Engine,
OUT gctUINT32 * Alignment,
OUT gctUINT32 * ReservedHead,
OUT gctUINT32 * ReservedTail
@@ -4187,15 +3249,8 @@ gckHARDWARE_QueryCommandBuffer(
if (ReservedTail != gcvNULL)
{
- if (Engine == gcvENGINE_RENDER)
- {
- gcmkFOOTER_NO();
- return gcvSTATUS_NOT_SUPPORTED;
- }
- else
- {
- *ReservedTail = gcdBLT_FENCE_LENGTH;
- }
+ /* Reserve space for Link(). */
+ *ReservedTail = 8;
}
/* Success. */
@@ -4247,10 +3302,7 @@ gckHARDWARE_QuerySystemMemory(
if (SystemBaseAddress != gcvNULL)
{
/* Set system memory base address. */
- *SystemBaseAddress = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ?
- 31:31))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31)));
+ *SystemBaseAddress = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31)));
}
/* Success. */
@@ -4297,46 +3349,13 @@ gckHARDWARE_QueryShaderCaps(
gctUINT32 vsConstBase;
gctUINT32 psConstBase;
gctUINT32 ConstMax;
- gctBOOL halti5;
gcmkHEADER_ARG("Hardware=0x%x VertexUniforms=0x%x "
"FragmentUniforms=0x%x UnifiedUnforms=0x%x",
Hardware, VertexUniforms,
FragmentUniforms, UnifiedUnforms);
- halti5 = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI5);
-
- {if (Hardware->identity.numConstants > 256){ unifiedConst = gcvTRUE;
-if (halti5){ vsConstBase = 0xD000;
- psConstBase = 0xD800;
-}else{ vsConstBase = 0xC000;
- psConstBase = 0xC000;
-}if ((Hardware->identity.chipModel == gcv880) && ((Hardware->identity.chipRevision & 0xfff0) == 0x5120)){ vsConstMax = 512;
- psConstMax = 64;
- ConstMax = 576;
-}else{ vsConstMax = gcmMIN(512, Hardware->identity.numConstants - 64);
- psConstMax = gcmMIN(512, Hardware->identity.numConstants - 64);
- ConstMax = Hardware->identity.numConstants;
-}}else if (Hardware->identity.numConstants == 256){ if (Hardware->identity.chipModel == gcv2000 && (Hardware->identity.chipRevision == 0x5118 || Hardware->identity.chipRevision == 0x5140)) { unifiedConst = gcvFALSE;
- vsConstBase = 0x1400;
- psConstBase = 0x1C00;
- vsConstMax = 256;
- psConstMax = 64;
- ConstMax = 320;
- } else { unifiedConst = gcvFALSE;
- vsConstBase = 0x1400;
- psConstBase = 0x1C00;
- vsConstMax = 256;
- psConstMax = 256;
- ConstMax = 512;
- }}else{ unifiedConst = gcvFALSE;
- vsConstBase = 0x1400;
- psConstBase = 0x1C00;
- vsConstMax = 168;
- psConstMax = 64;
- ConstMax = 232;
-}};
-
+ {if (Hardware->identity.numConstants > 256){ unifiedConst = gcvTRUE; vsConstBase = 0xC000; psConstBase = 0xC000; vsConstMax = gcmMIN(512, Hardware->identity.numConstants - 64); psConstMax = gcmMIN(512, Hardware->identity.numConstants - 64); ConstMax = Hardware->identity.numConstants;}else if (Hardware->identity.numConstants == 256){ if (Hardware->identity.chipModel == gcv2000 && Hardware->identity.chipRevision == 0x5118) { unifiedConst = gcvFALSE; vsConstBase = 0x1400; psConstBase = 0x1C00; vsConstMax = 256; psConstMax = 64; ConstMax = 320; } else { unifiedConst = gcvFALSE; vsConstBase = 0x1400; psConstBase = 0x1C00; vsConstMax = 256; psConstMax = 256; ConstMax = 512; }}else{ unifiedConst = gcvFALSE; vsConstBase = 0x1400; psConstBase = 0x1C00; vsConstMax = 168; psConstMax = 64; ConstMax = 232;}};
if (VertexUniforms != gcvNULL)
{
@@ -4356,10 +3375,6 @@ if (halti5){ vsConstBase = 0xD000;
*UnifiedUnforms = unifiedConst;
}
- psConstBase = psConstBase;
- vsConstBase = vsConstBase;
- ConstMax = ConstMax;
-
/* Success. */
gcmkFOOTER_NO();
return gcvSTATUS_OK;
@@ -4450,7 +3465,7 @@ gckHARDWARE_SetMMU(
0x0040C,
address));
}
- else if (Hardware->enableMMU == gcvTRUE && Hardware->secureMode != gcvSECURE_IN_TA)
+ else if (Hardware->enableMMU == gcvTRUE)
{
/* Prepared command sequence contains an END,
** so update lastEnd and store executeCount to END command.
@@ -4462,31 +3477,6 @@ gckHARDWARE_SetMMU(
*(endLogical + 1) = Hardware->executeCount + 1;
- if (Hardware->secureMode == gcvSECURE_IN_NORMAL)
- {
- /* Set up base address of page table array. */
- gcmkONERROR(gckOS_WriteRegisterEx(
- Hardware->os,
- Hardware->core,
- 0x0038C,
- (gctUINT32)(Hardware->pagetableArray.address & 0xFFFFFFFF)
- ));
-
- gcmkONERROR(gckOS_WriteRegisterEx(
- Hardware->os,
- Hardware->core,
- 0x00390,
- (gctUINT32)((Hardware->pagetableArray.address >> 32) & 0xFFFFFFFF)
- ));
-
- gcmkONERROR(gckOS_WriteRegisterEx(
- Hardware->os,
- Hardware->core,
- 0x00394,
- 1
- ));
- }
-
/* Execute prepared command sequence. */
gcmkONERROR(gckHARDWARE_Execute(
Hardware,
@@ -4495,18 +3485,13 @@ gckHARDWARE_SetMMU(
));
#if gcdLINK_QUEUE_SIZE
- {
- gcuQUEUEDATA data;
-
- gcmkVERIFY_OK(gckOS_GetProcessID(&data.linkData.pid));
-
- data.linkData.start = function->address;
- data.linkData.end = function->address + function->bytes;
- data.linkData.linkLow = 0;
- data.linkData.linkHigh = 0;
-
- gckQUEUE_Enqueue(&Hardware->linkQueue, &data);
- }
+ gckLINKQUEUE_Enqueue(
+ &Hardware->linkQueue,
+ function->address,
+ function->address + function->bytes,
+ 0,
+ 0
+ );
#endif
/* Wait until MMU configure finishes. */
@@ -4540,31 +3525,12 @@ gckHARDWARE_SetMMU(
while (!(((((gctUINT32) (idle)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ));
/* Enable MMU. */
- if (Hardware->secureMode == gcvSECURE_IN_NORMAL)
- {
- gcmkONERROR(gckOS_WriteRegisterEx(
- Hardware->os,
- Hardware->core,
- 0x00388,
- ((((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)))
- ));
- }
- else
- {
- gcmkONERROR(gckOS_WriteRegisterEx(
- Hardware->os,
- Hardware->core,
- 0x0018C,
- ((((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) ((gctUINT32) (gcvTRUE) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0)))
- ));
- }
+ gcmkONERROR(gckOS_WriteRegisterEx(
+ Hardware->os,
+ Hardware->core,
+ 0x0018C,
+ ((((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) ((gctUINT32) (gcvTRUE) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
+ ));
}
/* Return the status. */
@@ -4603,11 +3569,9 @@ gckHARDWARE_FlushMMU(
gctUINT32 bufferSize;
gctPOINTER pointer = gcvNULL;
gctUINT32 flushSize;
- gctUINT32 count, offset;
+ gctUINT32 count;
gctPHYS_ADDR_T physical;
gctUINT32 address;
- gctBOOL bltEngine;
- gctUINT32 semaphore, stall;
gcmkHEADER_ARG("Hardware=0x%x", Hardware);
@@ -4627,56 +3591,25 @@ gckHARDWARE_FlushMMU(
buffer = (gctUINT32_PTR) pointer;
buffer[0]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E04) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E04) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
buffer[1]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ?
- 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ?
- 3:3))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)));
gcmkONERROR(gckCOMMAND_Execute(command, 8));
}
else
{
- flushSize = 10 * 4;
- offset = 2;
+ /* semaphore stall cmd size */
+ gctUINT32 stCmds = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_TEX_CACHE_FLUSH_FIX) ? 0 : 4;
- bltEngine = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_BLT_ENGINE);
-
- if (bltEngine)
- {
- flushSize += 4 * 4;
- }
+ flushSize = (stCmds + 18) * 4;
gcmkONERROR(gckCOMMAND_Reserve(
command, flushSize, &pointer, &bufferSize
@@ -4690,196 +3623,106 @@ gckHARDWARE_FlushMMU(
gcmkSAFECASTPHYSADDRT(address, physical);
- /* LINK to next slot to flush FE FIFO. */
- *buffer++
- = ((((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) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) ((bltEngine ? 6 : 4)) & ((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ if (stCmds)
+ {
+ /* Arm the PE-FE Semaphore. */
+ *buffer++
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
+ *buffer++
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+
+ /* STALL FE until PE is done flushing. */
+ *buffer++
+ = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+
+ *buffer++
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ }
+
+ /* Flush cache. */
*buffer++
- = address + offset * gcmSIZEOF(gctUINT32);
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
- /* Flush MMU cache. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)));
+ /* Flush VTS in separate command */
*buffer++
- = (((((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))) & ((((gctUINT32) (~0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ?
- 7:7))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))));
-
- if (bltEngine)
- {
- /* Blt lock. */
- *buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x502E) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
- *buffer++
- = ((((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)));
- }
+ *buffer++
+ = ((((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)));
/* Arm the PE-FE Semaphore. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
-
- semaphore = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)));
-
- if (Hardware->stallFEPrefetch)
- {
- semaphore |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 29:28) - (0 ? 29:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 29:28) - (0 ? 29:28) + 1))))))) << (0 ?
- 29:28))) | (((gctUINT32) (0x3 & ((gctUINT32) ((((1 ? 29:28) - (0 ? 29:28) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 29:28) - (0 ? 29:28) + 1))))))) << (0 ? 29:28)));
- }
-
- if (bltEngine)
- {
- semaphore |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x10 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
- }
- else
- {
- semaphore |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
- }
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
- = semaphore;
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
/* STALL FE until PE is done flushing. */
*buffer++
- = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
- stall = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)));
+ *buffer++
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
- if (Hardware->stallFEPrefetch)
- {
- stall |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 29:28) - (0 ? 29:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 29:28) - (0 ? 29:28) + 1))))))) << (0 ?
- 29:28))) | (((gctUINT32) (0x3 & ((gctUINT32) ((((1 ? 29:28) - (0 ? 29:28) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 29:28) - (0 ? 29:28) + 1))))))) << (0 ? 29:28)));
- }
+ /* LINK to next slot to flush FE FIFO. */
+ *buffer++
+ = ((((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) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
- if (bltEngine)
- {
- stall |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x10 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
- }
- else
- {
- stall |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
- }
+ *buffer++
+ = address + (stCmds + 10) * gcmSIZEOF(gctUINT32);
+ /* Flush MMU cache. */
*buffer++
- = stall;
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
- if (bltEngine)
- {
- /* Blt unlock. */
- *buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x502E) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ *buffer++
+ = (((((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))) & ((((gctUINT32) (~0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))));
- *buffer++
- = ((((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) (0x0 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
- }
+ /* Arm the PE-FE Semaphore. */
+ *buffer++
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
+
+ *buffer++
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+
+ /* STALL FE until PE is done flushing. */
+ *buffer++
+ = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+
+ *buffer++
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
/* LINK to next slot to flush FE FIFO. */
*buffer++
- = ((((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) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (count) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (count) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
= address + flushSize;
@@ -4915,7 +3758,6 @@ gckHARDWARE_SetMMUStates(
gctUINT32_PTR buffer;
gctBOOL ace;
gctUINT32 reserveBytes = 16 + 4 * 4;
- gcsMMU_TABLE_ARRAY_ENTRY * entry;
gctBOOL config2D;
@@ -4925,8 +3767,6 @@ gckHARDWARE_SetMMUStates(
gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
gcmkVERIFY_ARGUMENT(Hardware->mmuVersion != 0);
- entry = (gcsMMU_TABLE_ARRAY_ENTRY *) Hardware->pagetableArray.logical;
-
ace = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_ACE);
if (ace)
@@ -4971,20 +3811,6 @@ gckHARDWARE_SetMMUStates(
gcmkONERROR(gcvSTATUS_NOT_ALIGNED);
}
- if (ace)
- {
- configEx = ((((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) (extSafeAddrss) & ((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0)))
- | ((((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) (extMtlb) & ((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16)));
- }
-
switch (Mode)
{
case gcvMMU_MODE_1K:
@@ -4993,10 +3819,7 @@ gckHARDWARE_SetMMUStates(
gcmkONERROR(gcvSTATUS_NOT_ALIGNED);
}
- config |= ((((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)));
+ config |= ((((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)));
break;
@@ -5006,10 +3829,7 @@ gckHARDWARE_SetMMUStates(
gcmkONERROR(gcvSTATUS_NOT_ALIGNED);
}
- config |= ((((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) (0x0 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
+ config |= ((((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) (0x0 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
break;
@@ -5017,291 +3837,89 @@ gckHARDWARE_SetMMUStates(
gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
}
+ if (ace)
+ {
+ configEx = ((((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) (extSafeAddrss) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
+ | ((((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) (extMtlb) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)));
+ }
+
if (Logical != gcvNULL)
{
buffer = Logical;
- if (Hardware->secureMode == gcvSECURE_IN_NORMAL)
- {
- /* Setup page table array entry. */
- entry->low = config;
- entry->high = (gctUINT32)(physical >> 32);
-
- /* Setup command buffer to load index 0 of page table array. */
- *buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x006B) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
-
- *buffer++
- = (((((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) (0) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) &((((gctUINT32) (~0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 16:16) - (0 ?
- 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ?
- 16:16))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))));
- }
- else
- {
- *buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ *buffer++
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
- *buffer++ = config;
- }
+ *buffer++ = config;
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
*buffer++ = address;
if (ace)
{
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0068) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0068) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
*buffer++
= configEx;
}
- do{*buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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))) | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); *buffer++ = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));} while(0);
-;
-
+ do{*buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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))) | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); *buffer++ = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));} while(0);;
if (config2D)
{
/* LoadState(AQPipeSelect, 1), pipe. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
*buffer++ = 0x1;
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
*buffer++ = config;
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
*buffer++ = address;
if (ace)
{
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0068) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0068) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
*buffer++
= configEx;
}
- do{*buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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))) | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); *buffer++ = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));} while(0);
-;
-
+ do{*buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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))) | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); *buffer++ = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));} while(0);;
/* LoadState(AQPipeSelect, 1), pipe. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
*buffer++ = 0x0;
- do{*buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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))) | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); *buffer++ = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));} while(0);
-;
-
+ do{*buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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))) | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); *buffer++ = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));} while(0);;
}
}
@@ -5408,8 +4026,7 @@ gckHARDWARE_ConfigMMU(
gctSIZE_T bytes, bytesAligned;
gctUINT32 config;
gctUINT32_PTR buffer = (gctUINT32_PTR) Logical;
- gctPHYS_ADDR_T physical;
- gctUINT32 address;
+ gctUINT32 physical;
gctUINT32 event;
gctSIZE_T stCmds; /* semaphore stall cmd size */;
@@ -5445,411 +4062,167 @@ gckHARDWARE_ConfigMMU(
/* Get physical address of this command buffer segment. */
gcmkONERROR(gckOS_GetPhysicalAddress(Hardware->os, buffer, &physical));
- gcmkSAFECASTPHYSADDRT(address, physical);
-
/* Get physical address of Master TLB. */
- gcmkONERROR(gckOS_GetPhysicalAddress(Hardware->os, MtlbLogical, &physical));
-
- gcmkSAFECASTPHYSADDRT(config, physical);
+ gcmkONERROR(gckOS_GetPhysicalAddress(Hardware->os, MtlbLogical, &config));
- config |= ((((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) (0x0 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)));
+ config |= ((((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) (0x0 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)));
if (stCmds)
{
/* Arm the PE-FE Semaphore. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
/* STALL FE until PE is done flushing. */
*buffer++
- = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
}
/* Flush cache. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ?
- 3:3))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ?
- 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ?
- 5:5))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- AQ_FLUSH_VSHL1_CACHE) - (0 ? AQ_FLUSH_VSHL1_CACHE) + 1) == 32) ? ~0 : (~(~0 << ((1 ?
- AQ_FLUSH_VSHL1_CACHE) - (0 ? AQ_FLUSH_VSHL1_CACHE) + 1))))))) << (0 ? AQ_FLUSH_VSHL1_CACHE))) | (((gctUINT32) (AQ_FLUSH_VSHL1_CACHE_ENABLE & ((gctUINT32) ((((1 ?
- AQ_FLUSH_VSHL1_CACHE) - (0 ? AQ_FLUSH_VSHL1_CACHE) + 1) == 32) ? ~0 : (~(~0 << ((1 ?
- AQ_FLUSH_VSHL1_CACHE) - (0 ? AQ_FLUSH_VSHL1_CACHE) + 1))))))) << (0 ? AQ_FLUSH_VSHL1_CACHE)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- AQ_FLUSH_PSHL1_CACHE) - (0 ? AQ_FLUSH_PSHL1_CACHE) + 1) == 32) ? ~0 : (~(~0 << ((1 ?
- AQ_FLUSH_PSHL1_CACHE) - (0 ? AQ_FLUSH_PSHL1_CACHE) + 1))))))) << (0 ? AQ_FLUSH_PSHL1_CACHE))) | (((gctUINT32) (AQ_FLUSH_PSHL1_CACHE_ENABLE & ((gctUINT32) ((((1 ?
- AQ_FLUSH_PSHL1_CACHE) - (0 ? AQ_FLUSH_PSHL1_CACHE) + 1) == 32) ? ~0 : (~(~0 << ((1 ?
- AQ_FLUSH_PSHL1_CACHE) - (0 ? AQ_FLUSH_PSHL1_CACHE) + 1))))))) << (0 ? AQ_FLUSH_PSHL1_CACHE)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ?
- 6:6))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)));
/* Flush VTS in separate command */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
- = ((((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)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
/* Flush tile status cache. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0594) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)));
/* Arm the PE-FE Semaphore. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
/* STALL FE until PE is done flushing. */
*buffer++
- = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
/* LINK to next slot to flush FE FIFO. */
*buffer++
- = ((((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) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
- = address + (stCmds + 12) * gcmSIZEOF(gctUINT32);
+ = physical + (stCmds + 12) * gcmSIZEOF(gctUINT32);
/* Configure MMU. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
*buffer++
- = (((((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))) & ((((gctUINT32) (~0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ?
- 7:7))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))));
+ = (((((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))) & ((((gctUINT32) (~0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))));
/* Arm the PE-FE Semaphore. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
/* STALL FE until PE is done flushing. */
*buffer++
- = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
/* LINK to next slot to flush FE FIFO. */
*buffer++
- = ((((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) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
= physical + (stCmds + 20) * 4;
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
*buffer++
= config;
/* Arm the PE-FE Semaphore. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
/* STALL FE until PE is done flushing. */
*buffer++
- = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
/* Event 29. */
*buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E01) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
-
- event = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ?
- 6:6))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)));
- event = ((((gctUINT32) (event)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) ((gctUINT32) (29) & ((gctUINT32) ((((1 ? 4:0) - (0 ?
- 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E01) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
+
+ event = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)));
+ event = ((((gctUINT32) (event)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) ((gctUINT32) (29) & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)));
*buffer++
= event;
/* Append END. */
*buffer++
- = ((((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) (0x02 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x02 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
}
if (Bytes != gcvNULL)
@@ -5864,7 +4237,11 @@ gckHARDWARE_ConfigMMU(
if (WaitLinkBytes != gcvNULL)
{
+#if gcdMULTI_GPU
+ *WaitLinkBytes = 40;
+#else
*WaitLinkBytes = 4 * 4;
+#endif
}
gcmkFOOTER_NO();
@@ -5913,15 +4290,8 @@ gckHARDWARE_BuildVirtualAddress(
gcmkVERIFY_ARGUMENT(Address != gcvNULL);
/* Build virtual address. */
- *Address = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ?
- 31:31))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 30:0) - (0 ? 30:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 30:0) - (0 ? 30:0) + 1))))))) << (0 ?
- 30:0))) | (((gctUINT32) ((gctUINT32) (Offset | (Index << 12)) & ((gctUINT32) ((((1 ?
- 30:0) - (0 ? 30:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 30:0) - (0 ? 30:0) + 1))))))) << (0 ?
- 30:0)));
+ *Address = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 30:0) - (0 ? 30:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 30:0) - (0 ? 30:0) + 1))))))) << (0 ? 30:0))) | (((gctUINT32) ((gctUINT32) (Offset | (Index << 12)) & ((gctUINT32) ((((1 ? 30:0) - (0 ? 30:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 30:0) - (0 ? 30:0) + 1))))))) << (0 ? 30:0)));
/* Success. */
gcmkFOOTER_ARG("*Address=0x%08x", *Address);
@@ -5966,10 +4336,6 @@ gckHARDWARE_GetIdle(
0x00664,
&address));
- gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- 0x00664,
- &address));
/* See if we have to wait for FE idle. */
if (_IsGPUIdle(idle)
@@ -6032,11 +4398,6 @@ gckHARDWARE_Flush(
gctBOOL flushTileStatus;
gctUINT32_PTR logical = (gctUINT32_PTR) Logical;
gceSTATUS status;
- gctBOOL halti5;
- gctBOOL flushICache;
- gctBOOL flushTXDescCache;
- gctBOOL flushTFB;
- gctBOOL hwTFB;
gcmkHEADER_ARG("Hardware=0x%x Flush=0x%x Logical=0x%x *Bytes=%lu",
Hardware, Flush, Logical, gcmOPT_VALUE(Bytes));
@@ -6047,100 +4408,44 @@ gckHARDWARE_Flush(
/* Get current pipe. */
pipe = Hardware->kernel->command->pipeSelect;
- halti5 = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI5);
-
- hwTFB = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HW_TFB);
-
/* Flush tile status cache. */
flushTileStatus = Flush & gcvFLUSH_TILE_STATUS;
- /* Flush Icache for halti5 hardware as we dont do it when program or context switches*/
- flushICache = (Flush & gcvFLUSH_ICACHE) && halti5;
-
- /* Flush texture descriptor cache */
- flushTXDescCache = Flush & gcvFLUSH_TXDESC;
-
- /* Flush USC cache for TFB client */
- flushTFB = (Flush & gcvFLUSH_TFBHEADER) && hwTFB;
-
- /* Flush TFB for vertex buffer */
- if (hwTFB && (Flush & gcvFLUSH_VERTEX))
- {
- flushTFB = gcvTRUE;
- }
-
/* Flush 3D color cache. */
if ((Flush & gcvFLUSH_COLOR) && (pipe == 0x0))
{
- flush |= ((((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)));
+ flush |= ((((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)));
}
/* Flush 3D depth cache. */
if ((Flush & gcvFLUSH_DEPTH) && (pipe == 0x0))
{
- flush |= ((((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)));
+ flush |= ((((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)));
}
/* Flush 3D texture cache. */
if ((Flush & gcvFLUSH_TEXTURE) && (pipe == 0x0))
{
- flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ?
- 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)));
- flushVST = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ?
- 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
+ flush |= ((((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)));
+ flushVST = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
}
/* Flush 2D cache. */
if ((Flush & gcvFLUSH_2D) && (pipe == 0x1))
{
- flush |= ((((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)));
+ flush |= ((((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)));
}
+#if gcdMULTI_GPU
/* Flush L2 cache. */
if ((Flush & gcvFLUSH_L2) && (pipe == 0x0))
{
- flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ?
- 6:6))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)));
- }
-
- /* Vertex buffer and texture could be touched by SHL1 for SSBO and image load/store */
- if ((Flush & (gcvFLUSH_VERTEX | gcvFLUSH_TEXTURE)) && (pipe == 0x0))
- {
- flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ?
- 5:5))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 10:10) - (0 ? 10:10) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 10:10) - (0 ? 10:10) + 1))))))) << (0 ?
- 10:10))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 10:10) - (0 ? 10:10) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 10:10) - (0 ? 10:10) + 1))))))) << (0 ? 10:10)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 11:11) - (0 ? 11:11) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ?
- 11:11))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 11:11) - (0 ? 11:11) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ? 11:11)));
+ flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)));
}
+#endif
/* See if there is a valid flush. */
- if ((flush == 0) &&
- (flushTileStatus == gcvFALSE) &&
- (flushICache == gcvFALSE) &&
- (flushTXDescCache == gcvFALSE) &&
- (flushTFB == gcvFALSE))
+ if ((flush == 0) && (flushTileStatus == gcvFALSE))
{
if (Bytes != gcvNULL)
{
@@ -6155,7 +4460,7 @@ gckHARDWARE_Flush(
? gcvTRUE : gcvFALSE;
/* Determine reserve bytes. */
- if (!txCacheFix || flushICache || flushTXDescCache)
+ if (!txCacheFix)
{
/* Semaphore/Stall */
reserveBytes += 4 * gcmSIZEOF(gctUINT32);
@@ -6176,21 +4481,6 @@ gckHARDWARE_Flush(
reserveBytes += 2 * gcmSIZEOF(gctUINT32);
}
- if (flushICache)
- {
- reserveBytes += 2 * gcmSIZEOF(gctUINT32);
- }
-
- if (flushTXDescCache)
- {
- reserveBytes += 2 * gcmSIZEOF(gctUINT32);
- }
-
- if (flushTFB)
- {
- reserveBytes += 2 * gcmSIZEOF(gctUINT32);
- }
-
/* Semaphore/Stall */
reserveBytes += 4 * gcmSIZEOF(gctUINT32);
@@ -6203,71 +4493,34 @@ gckHARDWARE_Flush(
gcmkONERROR(gcvSTATUS_BUFFER_TOO_SMALL);
}
- if (!txCacheFix || flushICache || flushTXDescCache)
+ if (!txCacheFix)
{
/* Semaphore. */
*logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
/* Stall. */
*logical++
- = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
*logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
}
if (flush)
{
/* Append LOAD_STATE to AQFlush. */
*logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
*logical++ = flush;
@@ -6278,20 +4531,9 @@ gckHARDWARE_Flush(
{
/* Append LOAD_STATE to AQFlush. */
*logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
*logical++ = flushVST;
@@ -6301,179 +4543,34 @@ gckHARDWARE_Flush(
if (flushTileStatus)
{
*logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0594) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0594) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
*logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
"0x%x: FLUSH TILE STATUS 0x%x", logical - 1, logical[-1]);
}
- if (flushICache)
- {
- *logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x022C) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
-
- *logical++
- = ((((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) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 1:1) - (0 ?
- 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ?
- 2:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 2:2) - (0 ?
- 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ?
- 2:2)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ?
- 3:3))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 3:3) - (0 ?
- 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ?
- 3:3)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ?
- 4:4))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 4:4) - (0 ?
- 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ?
- 4:4)));
-
- gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
- "0x%x: FLUSH Icache 0x%x", logical - 1, logical[-1]);
-
- }
-
- if (flushTXDescCache)
- {
- *logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x5311) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
-
- *logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ?
- 31:28))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28)));
-
- gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
- "0x%x: FLUSH Icache 0x%x", logical - 1, logical[-1]);
-
- }
-
- if (flushTFB)
- {
- *logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x7003) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
-
- *logical++
- = 0x12345678;
-
- gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
- "0x%x: FLUSH TFB cache 0x%x", logical - 1, logical[-1]);
-
- }
-
/* Semaphore. */
*logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)))
+ | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
*logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
/* Stall. */
*logical++
- = ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
*logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
}
if (Bytes != gcvNULL)
@@ -6508,7 +4605,7 @@ gckHARDWARE_SetFastClear(
Hardware, Enable, Compression);
/* Only process if fast clear is available. */
- if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_FAST_CLEAR))
+ if ((((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ))
{
if (Enable == -1)
{
@@ -6521,7 +4618,8 @@ gckHARDWARE_SetFastClear(
if (Compression == -1)
{
/* Determine automatic value for compression. */
- Compression = Enable & gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_ZCOMPRESSION);
+ Compression = Enable
+ & (((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 5:5)) & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1)))))) );
}
/* Read AQMemoryDebug register. */
@@ -6529,21 +4627,14 @@ gckHARDWARE_SetFastClear(
gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00414, &debug));
/* Set fast clear bypass. */
- debug = ((((gctUINT32) (debug)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 20:20) - (0 ? 20:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:20) - (0 ? 20:20) + 1))))))) << (0 ?
- 20:20))) | (((gctUINT32) ((gctUINT32) (Enable == 0) & ((gctUINT32) ((((1 ?
- 20:20) - (0 ? 20:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:20) - (0 ? 20:20) + 1))))))) << (0 ?
- 20:20)));
+ debug = ((((gctUINT32) (debug)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 20:20) - (0 ? 20:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:20) - (0 ? 20:20) + 1))))))) << (0 ? 20:20))) | (((gctUINT32) ((gctUINT32) (Enable == 0) & ((gctUINT32) ((((1 ? 20:20) - (0 ? 20:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:20) - (0 ? 20:20) + 1))))))) << (0 ? 20:20)));
- if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_BUG_FIXES7) ||
+ if (
+ ((((gctUINT32) (Hardware->identity.chipMinorFeatures2)) >> (0 ? 27:27) & ((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) ||
(Hardware->identity.chipModel >= gcv4000))
{
/* Set compression bypass. */
- debug = ((((gctUINT32) (debug)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1))))))) << (0 ?
- 21:21))) | (((gctUINT32) ((gctUINT32) (Compression == 0) & ((gctUINT32) ((((1 ?
- 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1))))))) << (0 ?
- 21:21)));
+ debug = ((((gctUINT32) (debug)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1))))))) << (0 ? 21:21))) | (((gctUINT32) ((gctUINT32) (Compression == 0) & ((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1))))))) << (0 ? 21:21)));
}
/* Write back AQMemoryDebug register. */
@@ -6644,6 +4735,8 @@ gckHARDWARE_SetPowerManagementState(
gckCOMMAND command = gcvNULL;
gckOS os;
gctUINT flag, clock;
+ gctPOINTER buffer;
+ gctUINT32 bytes, requested;
gctBOOL acquired = gcvFALSE;
gctBOOL mutexAcquired = gcvFALSE;
gctBOOL stall = gcvTRUE;
@@ -6654,6 +4747,7 @@ gckHARDWARE_SetPowerManagementState(
gctUINT32 currentTime;
#endif
gctUINT32 process, thread;
+ gctBOOL commitEntered = gcvFALSE;
gctBOOL commandStarted = gcvFALSE;
gctBOOL isrStarted = gcvFALSE;
@@ -6663,6 +4757,7 @@ gckHARDWARE_SetPowerManagementState(
#endif
gctBOOL global = gcvFALSE;
gctBOOL globalAcquired = gcvFALSE;
+ gctBOOL configMmu = gcvFALSE;
/* State transition flags. */
static const gctUINT flags[4][4] =
@@ -6724,92 +4819,28 @@ gckHARDWARE_SetPowerManagementState(
static const gctUINT clocks[4] =
{
/* gcvPOWER_ON */
- ((((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) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) |
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ?
- 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 1:1) - (0 ?
- 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) |
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:2) - (0 ?
- 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ?
- 8:2))) | (((gctUINT32) ((gctUINT32) (64) & ((gctUINT32) ((((1 ? 8:2) - (0 ?
- 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ?
- 8:2))) |
- ((((gctUINT32) (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) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ?
- 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ?
- 9:9))),
+ ((((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) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) |
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) |
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2))) | (((gctUINT32) ((gctUINT32) (64) & ((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2))) |
+ ((((gctUINT32) (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) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))),
/* gcvPOWER_OFF */
- ((((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) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) |
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ?
- 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 1:1) - (0 ?
- 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) |
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:2) - (0 ?
- 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ?
- 8:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 8:2) - (0 ?
- 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ?
- 8:2))) |
- ((((gctUINT32) (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) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ?
- 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ?
- 9:9))),
+ ((((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) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) |
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) |
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2))) |
+ ((((gctUINT32) (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) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))),
/* gcvPOWER_IDLE */
- ((((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) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) |
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ?
- 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 1:1) - (0 ?
- 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) |
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:2) - (0 ?
- 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ?
- 8:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 8:2) - (0 ?
- 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ?
- 8:2))) |
- ((((gctUINT32) (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) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ?
- 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ?
- 9:9))),
+ ((((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) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) |
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) |
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2))) |
+ ((((gctUINT32) (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) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))),
/* gcvPOWER_SUSPEND */
- ((((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) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) |
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ?
- 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 1:1) - (0 ?
- 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) |
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:2) - (0 ?
- 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ?
- 8:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 8:2) - (0 ?
- 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ?
- 8:2))) |
- ((((gctUINT32) (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) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ?
- 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ?
- 9:9))),
+ ((((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) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) |
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) |
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2))) |
+ ((((gctUINT32) (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) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))),
};
gcmkHEADER_ARG("Hardware=0x%x State=%d", Hardware, State);
@@ -6934,7 +4965,7 @@ gckHARDWARE_SetPowerManagementState(
/* Called from IST,
** so waiting here will cause deadlock,
** if lock holder call gckCOMMAND_Stall() */
- status = gcvSTATUS_OK;
+ status = gcvSTATUS_INVALID_REQUEST;
goto OnError;
}
else
@@ -6966,11 +4997,7 @@ gckHARDWARE_SetPowerManagementState(
#if gcdENABLE_FSCALE_VAL_ADJUST
if (State == gcvPOWER_ON)
{
- clock = ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ?
- 8:2))) | (((gctUINT32) ((gctUINT32) (Hardware->powerOnFscaleVal) & ((gctUINT32) ((((1 ?
- 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ?
- 8:2)));
+ clock = ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2))) | (((gctUINT32) ((gctUINT32) (Hardware->powerOnFscaleVal) & ((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2)));
}
#endif
@@ -6986,26 +5013,10 @@ gckHARDWARE_SetPowerManagementState(
return gcvSTATUS_OK;
#else
/* Clock should be on when switch power from off to suspend */
- clock = ((((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) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) |
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 1:1) - (0 ?
- 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) |
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ?
- 8:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 8:2) - (0 ?
- 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ?
- 8:2))) |
- ((((gctUINT32) (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) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ?
- 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ?
- 9:9))) ;
+ clock = ((((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) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) |
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) |
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2))) |
+ ((((gctUINT32) (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) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) ;
#endif
}
@@ -7060,8 +5071,7 @@ gckHARDWARE_SetPowerManagementState(
if (State == gcvPOWER_IDLE || State == gcvPOWER_SUSPEND)
{
/* Called from thread routine which should NEVER sleep.*/
- status = gcvSTATUS_OK;
- goto OnError;
+ gcmkONERROR(gcvSTATUS_INVALID_REQUEST);
}
/* Release the power mutex. */
@@ -7230,8 +5240,40 @@ gckHARDWARE_SetPowerManagementState(
else
{
+ /* Acquire the command queue. */
+ gcmkONERROR(gckCOMMAND_EnterCommit(command, gcvTRUE));
+ commitEntered = gcvTRUE;
+
+ /* Get the size of the flush command. */
+ gcmkONERROR(gckHARDWARE_Flush(Hardware,
+ gcvFLUSH_ALL,
+ gcvNULL,
+ &requested));
+
+ /* Reserve space in the command queue. */
+ gcmkONERROR(gckCOMMAND_Reserve(command,
+ requested,
+ &buffer,
+ &bytes));
+
+ /* Append a flush. */
+ gcmkONERROR(gckHARDWARE_Flush(
+ Hardware, gcvFLUSH_ALL, buffer, &bytes
+ ));
+
+ /* Execute the command queue. */
+ gcmkONERROR(gckCOMMAND_Execute(command, requested));
+
+ /* Release the command queue. */
+ gcmkONERROR(gckCOMMAND_ExitCommit(command, gcvTRUE));
+ commitEntered = gcvFALSE;
+
/* Wait to finish all commands. */
+#if gcdMULTI_GPU
+ gcmkONERROR(gckCOMMAND_Stall(command, gcvTRUE, gcvCORE_3D_ALL_MASK));
+#else
gcmkONERROR(gckCOMMAND_Stall(command, gcvTRUE));
+#endif
}
}
@@ -7248,7 +5290,7 @@ gckHARDWARE_SetPowerManagementState(
if (flag & gcvPOWER_FLAG_STOP)
{
/* Stop the command parser. */
- gcmkONERROR(gckCOMMAND_Stop(command));
+ gcmkONERROR(gckCOMMAND_Stop(command, gcvFALSE));
/* Stop the Isr. */
if (Hardware->stopIsr)
@@ -7283,11 +5325,7 @@ gckHARDWARE_SetPowerManagementState(
gcmkONERROR(gckOS_WriteRegisterEx(os,
Hardware->core,
0x00000,
- ((((gctUINT32) (clocks[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ?
- 9:9))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 9:9) - (0 ?
- 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ?
- 9:9)))));
+ ((((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)))));
}
}
@@ -7298,7 +5336,7 @@ gckHARDWARE_SetPowerManagementState(
gckOS_Delay(gcvNULL, 1);
/* Stop the command parser. */
- gcmkONERROR(gckCOMMAND_Stop(command));
+ gcmkONERROR(gckCOMMAND_Stop(command, gcvFALSE));
flag |= gcvPOWER_FLAG_CLOCK_OFF;
}
@@ -7331,11 +5369,7 @@ gckHARDWARE_SetPowerManagementState(
gcmkONERROR(gckOS_WriteRegisterEx(os,
Hardware->core,
0x00000,
- ((((gctUINT32) (clock)) & ~(((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)))));
+ ((((gctUINT32) (clock)) & ~(((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)))));
}
if (flag & gcvPOWER_FLAG_DELAY)
@@ -7362,6 +5396,9 @@ gckHARDWARE_SetPowerManagementState(
/* Trigger a possible dummy draw. */
command->dummyDraw = gcvTRUE;
+
+ /* Need to config mmu after command start. */
+ configMmu = gcvTRUE;
}
/* Get time until initialized. */
@@ -7486,7 +5523,7 @@ gckHARDWARE_SetPowerManagementState(
OnError:
if (commandStarted)
{
- gcmkVERIFY_OK(gckCOMMAND_Stop(command));
+ gcmkVERIFY_OK(gckCOMMAND_Stop(command, gcvFALSE));
}
if (isrStarted)
@@ -7494,6 +5531,12 @@ OnError:
gcmkVERIFY_OK(Hardware->stopIsr(Hardware->isrContext));
}
+ if (commitEntered)
+ {
+ /* Release the command queue mutex. */
+ gcmkVERIFY_OK(gckCOMMAND_ExitCommit(command, gcvTRUE));
+ }
+
if (acquired)
{
/* Release semaphore. */
@@ -7557,7 +5600,6 @@ gckHARDWARE_QueryPowerManagementState(
** gckHARDWARE_SetPowerManagement
**
** Configure GPU power management function.
-** Only used in driver initialization stage.
**
** INPUT:
**
@@ -7578,19 +5620,53 @@ gckHARDWARE_SetPowerManagement(
/* Verify the arguments. */
gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
+ if(!Hardware->powerManagementLock)
+ {
+ gcmkVERIFY_OK(
+ gckOS_AcquireMutex(Hardware->os, Hardware->powerMutex, gcvINFINITE));
- gcmkVERIFY_OK(
- gckOS_AcquireMutex(Hardware->os, Hardware->powerMutex, gcvINFINITE));
+ Hardware->powerManagement = PowerManagement;
+
+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Hardware->os, Hardware->powerMutex));
+ }
+ /* Success. */
+ gcmkFOOTER_NO();
+ return gcvSTATUS_OK;
+}
- Hardware->powerManagement = PowerManagement;
+/*******************************************************************************
+**
+** gckHARDWARE_SetPowerManagementLock
+**
+** Disable dynamic GPU power management switch.
+** Only used in driver initialization stage.
+**
+** INPUT:
+**
+** gckHARDWARE Harwdare
+** Pointer to an gckHARDWARE object.
+**
+** gctBOOL Lock
+** Power Mangement Lock State.
+**
+*/
+gceSTATUS
+gckHARDWARE_SetPowerManagementLock(
+ IN gckHARDWARE Hardware,
+ IN gctBOOL Lock
+ )
+{
+ gcmkHEADER_ARG("Hardware=0x%x", Hardware);
+
+ /* Verify the arguments. */
+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
- gcmkVERIFY_OK(gckOS_ReleaseMutex(Hardware->os, Hardware->powerMutex));
+ Hardware->powerManagementLock = Lock;
/* Success. */
gcmkFOOTER_NO();
return gcvSTATUS_OK;
}
-
/*******************************************************************************
**
** gckHARDWARE_SetGpuProfiler
@@ -7630,11 +5706,7 @@ gckHARDWARE_SetGpuProfiler(
0x00100,
&data));
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
gcmkVERIFY_OK(
@@ -7647,11 +5719,6 @@ gckHARDWARE_SetGpuProfiler(
Hardware->gpuProfiler = GpuProfiler;
- if (GpuProfiler == gcvTRUE)
- {
- Hardware->waitCount = 200 * 100;
- }
-
/* Success. */
gcmkFOOTER_NO();
return gcvSTATUS_OK;
@@ -7695,82 +5762,22 @@ gckHARDWARE_SetFscaleValue(
Hardware->core,
Hardware->powerBaseAddress
+ 0x00104,
- ((((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) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 1:1) - (0 ?
- 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ?
- 2:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 2:2) - (0 ?
- 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ?
- 2:2)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ?
- 3:3))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 3:3) - (0 ?
- 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ?
- 3:3)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ?
- 4:4))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 4:4) - (0 ?
- 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ?
- 4:4)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ?
- 5:5))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 5:5) - (0 ?
- 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ?
- 5:5)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ?
- 6:6))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 6:6) - (0 ?
- 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ?
- 6:6)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ?
- 7:7))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 7:7) - (0 ?
- 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ?
- 7:7)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1))))))) << (0 ?
- 8:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 8:8) - (0 ?
- 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1))))))) << (0 ?
- 8:8)))
- | ((((gctUINT32) (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) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ?
- 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ?
- 9:9)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 11:11) - (0 ? 11:11) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ?
- 11:11))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 11:11) - (0 ?
- 11:11) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ?
- 11:11)))));
-
- clock = ((((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) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 1:1) - (0 ?
- 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ?
- 8:2))) | (((gctUINT32) ((gctUINT32) (FscaleValue) & ((gctUINT32) ((((1 ?
- 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ?
- 8:2)))
- | ((((gctUINT32) (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) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ?
- 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ?
- 9:9)));
+ ((((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) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1))))))) << (0 ? 8:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1))))))) << (0 ? 8:8)))
+ | ((((gctUINT32) (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) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 11:11) - (0 ? 11:11) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ? 11:11))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 11:11) - (0 ? 11:11) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ? 11:11)))));
+
+ clock = ((((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) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2))) | (((gctUINT32) ((gctUINT32) (FscaleValue) & ((gctUINT32) ((((1 ? 8:2) - (0 ? 8:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:2) - (0 ? 8:2) + 1))))))) << (0 ? 8:2)))
+ | ((((gctUINT32) (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) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9)));
gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
Hardware->core,
@@ -7781,11 +5788,7 @@ gckHARDWARE_SetFscaleValue(
gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
Hardware->core,
0x00000,
- ((((gctUINT32) (clock)) & ~(((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)))));
+ ((((gctUINT32) (clock)) & ~(((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)))));
/* Restore all clock gating. */
gcmkONERROR(
@@ -7881,6 +5884,11 @@ gckHARDWARE_QueryIdle(
gceSTATUS status;
gctUINT32 idle, address;
gctBOOL isIdle;
+#if gcdMULTI_GPU > 1
+ gctUINT32 idle3D1 = 0;
+ gctUINT32 address3D1;
+ gctBOOL isIdle3D1 = gcvFALSE;
+#endif
#if gcdINTERRUPT_STATISTIC
gctINT32 pendingInterrupt;
@@ -7896,6 +5904,9 @@ gckHARDWARE_QueryIdle(
if (Hardware->chipPowerState != gcvPOWER_ON)
{
isIdle = gcvTRUE;
+#if gcdMULTI_GPU > 1
+ isIdle3D1 = gcvTRUE;
+#endif
}
else
@@ -7904,6 +5915,18 @@ gckHARDWARE_QueryIdle(
gcmkONERROR(
gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00004, &idle));
+#if gcdMULTI_GPU > 1
+ if (Hardware->core == gcvCORE_MAJOR)
+ {
+ gcmkONERROR(
+ gckOS_ReadRegisterByCoreId(Hardware->os,
+ Hardware->core,
+ gcvCORE_3D_1_ID,
+ 0x00004,
+ &idle3D1));
+ }
+#endif
+
/* Pipe must be idle. */
if (((((((gctUINT32) (idle)) >> (0 ? 1:1)) & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1)))))) ) != 1)
|| ((((((gctUINT32) (idle)) >> (0 ? 3:3)) & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1)))))) ) != 1)
@@ -7930,14 +5953,13 @@ gckHARDWARE_QueryIdle(
0x00664,
&address));
- gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- 0x00664,
- &address));
-
/* Test if address is inside the last WAIT/LINK sequence. */
if ((address >= Hardware->lastWaitLink)
+#if gcdMULTI_GPU
+ && (address <= Hardware->lastWaitLink + 40)
+#else
&& (address <= Hardware->lastWaitLink + 16)
+#endif
)
{
/* FE is in last WAIT/LINK and the pipe is idle. */
@@ -7950,6 +5972,50 @@ gckHARDWARE_QueryIdle(
}
#endif
}
+
+#if gcdMULTI_GPU > 1
+ if (Hardware->core == gcvCORE_MAJOR)
+ {
+ /* Pipe must be idle. */
+ if (((((((gctUINT32) (idle3D1)) >> (0 ? 1:1)) & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1)))))) ) != 1)
+ || ((((((gctUINT32) (idle3D1)) >> (0 ? 3:3)) & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1)))))) ) != 1)
+ || ((((((gctUINT32) (idle3D1)) >> (0 ? 4:4)) & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1)))))) ) != 1)
+ || ((((((gctUINT32) (idle3D1)) >> (0 ? 5:5)) & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1)))))) ) != 1)
+ || ((((((gctUINT32) (idle3D1)) >> (0 ? 6:6)) & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1)))))) ) != 1)
+ || ((((((gctUINT32) (idle3D1)) >> (0 ? 7:7)) & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1)))))) ) != 1)
+ || ((((((gctUINT32) (idle3D1)) >> (0 ? 2:2)) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) ) != 1)
+ )
+ {
+ /* Something is busy. */
+ isIdle3D1 = gcvFALSE;
+ }
+
+ else
+ {
+ /* Read the current FE address. */
+ gcmkONERROR(gckOS_ReadRegisterByCoreId(Hardware->os,
+ Hardware->core,
+ gcvCORE_3D_1_ID,
+ 0x00664,
+ &address3D1));
+
+ /* Test if address is inside the last WAIT/LINK sequence. */
+ if ((address3D1 >= Hardware->lastWaitLink)
+ && (address3D1 <= Hardware->lastWaitLink + 40)
+ )
+ {
+ /* FE is in last WAIT/LINK and the pipe is idle. */
+ isIdle3D1 = gcvTRUE;
+ }
+ else
+ {
+ /* FE is not in WAIT/LINK yet. */
+ isIdle3D1 = gcvFALSE;
+ }
+ }
+ }
+#endif
+
}
#if gcdINTERRUPT_STATISTIC
@@ -7965,7 +6031,16 @@ gckHARDWARE_QueryIdle(
}
#endif
- *IsIdle = isIdle;
+#if gcdMULTI_GPU > 1
+ if (Hardware->core == gcvCORE_MAJOR)
+ {
+ *IsIdle = (isIdle & isIdle3D1);
+ }
+ else
+#endif
+ {
+ *IsIdle = isIdle;
+ }
/* Success. */
gcmkFOOTER_NO();
@@ -7996,19 +6071,6 @@ OnError:
GC_DEBUG_SIGNALS_##block##_Address, \
&profiler->data))
-#if USE_SW_RESET
-#define gcmkREAD_DEBUG_REGISTER_Q(control, block, index, data) \
- gcmkREAD_DEBUG_REGISTER(control, block, index, data); \
- tempCounterValue = profiler->data; \
- profiler->data = CalcDelta(profiler->data, profilerHistory.data); \
- profilerHistory.data = tempCounterValue
-
-#else
-#define gcmkREAD_DEBUG_REGISTER_Q(control, block, index, data) \
- gcmkREAD_DEBUG_REGISTER(control, block, index, data)
-
-#endif
-
#define gcmkREAD_DEBUG_REGISTER_N(control, block, index, data) \
gcmkONERROR(\
gckOS_WriteRegisterEx(Hardware->os, \
@@ -8042,7 +6104,6 @@ OnError:
block, \
0)))
-
/*******************************************************************************
**
** gckHARDWARE_ProfileEngine2D
@@ -8086,24 +6147,12 @@ gckHARDWARE_ProfileEngine2D(
&Profile->cycleCount));
/* Read pixels rendered by 2D engine. */
- 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) (11) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (11) & ((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, &profiler->pixelsRendered));
/* Reset counter. */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16)))
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
));
}
@@ -8118,33 +6167,6 @@ OnError:
}
#if VIVANTE_PROFILER
-
-#if !VIVANTE_PROFILER_ALL_COUNTER
-static gctUINT32
-CalcDelta(
- IN gctUINT32 new,
- IN gctUINT32 old
- )
-{
- if (new >= old)
- {
- return new - old;
- }
- else
- {
- return (gctUINT32)((gctUINT64)new + 0x100000000ll - old);
- }
-}
-#endif
-
-#if USE_SW_RESET
-#define gcmkRESET_PROFILE_DATA(counterName, preCounters) \
- temp = profiler->counterName; \
- profiler->counterName = CalcDelta(temp, Context->preCounters.counterName); \
- Context->preCounters.counterName = temp
-
-#endif
-
gceSTATUS
gckHARDWARE_QueryProfileRegisters(
IN gckHARDWARE Hardware,
@@ -8160,32 +6182,17 @@ gckHARDWARE_QueryProfileRegisters(
gceCHIPMODEL chipModel;
gctUINT32 chipRevision;
gctUINT32 resetValue = 0xF;
- gctBOOL hasNewCounters = gcvFALSE;
- gctUINT32 mc_axi_max_min_latency;
- static gcsPROFILER_COUNTERS profilerHistory;
- static gctBOOL isFirstFrame = gcvTRUE;
- gctUINT32 tempCounterValue;
- gctUINT32 totalColorKilled = 0;
- gctUINT32 totalDepthKilled = 0;
- gctUINT32 totalColorDrawn = 0;
- gctUINT32 totalDepthDrawn = 0;
gcmkHEADER_ARG("Hardware=0x%x Counters=0x%x", Hardware, Counters);
/* Verify the arguments. */
gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
- if (isFirstFrame)
- {
- gckOS_ZeroMemory(&profilerHistory, sizeof(gcsPROFILER_COUNTERS));
- isFirstFrame = gcvFALSE;
- }
chipModel = Hardware->identity.chipModel;
chipRevision = Hardware->identity.chipRevision;
if ((chipModel == gcv5000 && chipRevision == 0x5434) || (chipModel == gcv3000 && chipRevision == 0x5435))
{
resetValue = 0xFF;
- hasNewCounters = gcvTRUE;
}
/* Read the counters. */
@@ -8195,29 +6202,18 @@ gckHARDWARE_QueryProfileRegisters(
0x00438,
&profiler->gpuCyclesCounter));
- /* This counter should be equal to 0x00438. Currently it's not displayed in vAnalyzer */
gcmkONERROR(
gckOS_ReadRegisterEx(Hardware->os,
Hardware->core,
0x00078,
&profiler->gpuTotalCyclesCounter));
- if (chipModel == gcv2100 || chipModel == gcv2000 || chipModel == gcv880)
- {
- gcmkONERROR(
- gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- 0x00078,
- &profiler->gpuIdleCyclesCounter));
- }
- else
- {
- gcmkONERROR(
- gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- 0x0007C,
- &profiler->gpuIdleCyclesCounter));
- }
+ gcmkONERROR(
+ gckOS_ReadRegisterEx(Hardware->os,
+ Hardware->core,
+ 0x0007C,
+ &profiler->gpuIdleCyclesCounter));
+
/* Read clock control register. */
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
@@ -8239,11 +6235,7 @@ gckHARDWARE_QueryProfileRegisters(
gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
Hardware->core,
0x00000,
- ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ?
- 23:20))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 23:20) - (0 ?
- 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ?
- 23:20)))));
+ ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20)))));
/* BW */
gcmkONERROR(
@@ -8261,55 +6253,17 @@ gckHARDWARE_QueryProfileRegisters(
profiler->gpuTotalWrite64BytesPerFrame += totalWrite;
/* PE */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454,
- &colorKilled));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454,
- &depthKilled));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454,
- &colorDrawn));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454,
- &depthDrawn));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorKilled));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthKilled));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorDrawn));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthDrawn));
-#if USE_SW_RESET
- totalColorKilled += colorKilled;
- totalDepthKilled += depthKilled;
- totalColorDrawn += colorDrawn;
- totalDepthDrawn += depthDrawn;
-#else
profiler->pe_pixel_count_killed_by_color_pipe += colorKilled;
profiler->pe_pixel_count_killed_by_depth_pipe += depthKilled;
profiler->pe_pixel_count_drawn_by_color_pipe += colorDrawn;
profiler->pe_pixel_count_drawn_by_depth_pipe += depthDrawn;
-#endif
}
-#if USE_SW_RESET
- profiler->pe_pixel_count_killed_by_color_pipe = CalcDelta(totalColorKilled, profilerHistory.pe_pixel_count_killed_by_color_pipe);
- profiler->pe_pixel_count_killed_by_depth_pipe = CalcDelta(totalDepthKilled, profilerHistory.pe_pixel_count_killed_by_depth_pipe);
- profiler->pe_pixel_count_drawn_by_color_pipe = CalcDelta(totalColorDrawn, profilerHistory.pe_pixel_count_drawn_by_color_pipe);
- profiler->pe_pixel_count_drawn_by_depth_pipe = CalcDelta(totalDepthDrawn, profilerHistory.pe_pixel_count_drawn_by_depth_pipe);
- profilerHistory.pe_pixel_count_killed_by_color_pipe = totalColorKilled;
- profilerHistory.pe_pixel_count_killed_by_depth_pipe = totalDepthKilled;
- profilerHistory.pe_pixel_count_drawn_by_color_pipe = totalColorDrawn;
- profilerHistory.pe_pixel_count_drawn_by_depth_pipe = totalDepthDrawn;
-#endif
-
/* Reset clock control register. */
gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
Hardware->core,
@@ -8325,719 +6279,119 @@ gckHARDWARE_QueryProfileRegisters(
gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00438, 0));
gcmkONERROR(
gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00078, 0));
-#if !USE_SW_RESET
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16)))
+ 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) (resetValue) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
));
-#endif
/* SH */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->ps_inst_counter)); tempCounterValue = profiler->ps_inst_counter;
- profiler->ps_inst_counter = CalcDelta(profiler->ps_inst_counter, profilerHistory.ps_inst_counter);
- profilerHistory.ps_inst_counter = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->rendered_pixel_counter)); tempCounterValue = profiler->rendered_pixel_counter;
- profiler->rendered_pixel_counter = CalcDelta(profiler->rendered_pixel_counter,
- profilerHistory.rendered_pixel_counter); profilerHistory.rendered_pixel_counter = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->vs_inst_counter)); tempCounterValue = profiler->vs_inst_counter;
- profiler->vs_inst_counter = CalcDelta(profiler->vs_inst_counter, profilerHistory.vs_inst_counter);
- profilerHistory.vs_inst_counter = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->rendered_vertice_counter)); tempCounterValue = profiler->rendered_vertice_counter;
- profiler->rendered_vertice_counter = CalcDelta(profiler->rendered_vertice_counter,
- profilerHistory.rendered_vertice_counter); profilerHistory.rendered_vertice_counter = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (11) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->vtx_branch_inst_counter)); tempCounterValue = profiler->vtx_branch_inst_counter;
- profiler->vtx_branch_inst_counter = CalcDelta(profiler->vtx_branch_inst_counter,
- profilerHistory.vtx_branch_inst_counter); profilerHistory.vtx_branch_inst_counter = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (12) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->vtx_texld_inst_counter)); tempCounterValue = profiler->vtx_texld_inst_counter;
- profiler->vtx_texld_inst_counter = CalcDelta(profiler->vtx_texld_inst_counter,
- profilerHistory.vtx_texld_inst_counter); profilerHistory.vtx_texld_inst_counter = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (13) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->pxl_branch_inst_counter)); tempCounterValue = profiler->pxl_branch_inst_counter;
- profiler->pxl_branch_inst_counter = CalcDelta(profiler->pxl_branch_inst_counter,
- profilerHistory.pxl_branch_inst_counter); profilerHistory.pxl_branch_inst_counter = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (14) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->pxl_texld_inst_counter)); tempCounterValue = profiler->pxl_texld_inst_counter;
- profiler->pxl_texld_inst_counter = CalcDelta(profiler->pxl_texld_inst_counter,
- profilerHistory.pxl_texld_inst_counter); profilerHistory.pxl_texld_inst_counter = tempCounterValue;
-
- if (hasNewCounters)
- {
- 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) (19) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->vs_non_idle_starve_count)); tempCounterValue = profiler->vs_non_idle_starve_count;
- profiler->vs_non_idle_starve_count = CalcDelta(profiler->vs_non_idle_starve_count,
- profilerHistory.vs_non_idle_starve_count); profilerHistory.vs_non_idle_starve_count = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->vs_starve_count)); tempCounterValue = profiler->vs_starve_count;
- profiler->vs_starve_count = CalcDelta(profiler->vs_starve_count, profilerHistory.vs_starve_count);
- profilerHistory.vs_starve_count = tempCounterValue;
-
- 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) (16) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->vs_stall_count)); tempCounterValue = profiler->vs_stall_count;
- profiler->vs_stall_count = CalcDelta(profiler->vs_stall_count, profilerHistory.vs_stall_count);
- profilerHistory.vs_stall_count = tempCounterValue;
-
- 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) (21) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->vs_process_count)); tempCounterValue = profiler->vs_process_count;
- profiler->vs_process_count = CalcDelta(profiler->vs_process_count, profilerHistory.vs_process_count);
- profilerHistory.vs_process_count = tempCounterValue;
-
- 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) (20) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->ps_non_idle_starve_count)); tempCounterValue = profiler->ps_non_idle_starve_count;
- profiler->ps_non_idle_starve_count = CalcDelta(profiler->ps_non_idle_starve_count,
- profilerHistory.ps_non_idle_starve_count); profilerHistory.ps_non_idle_starve_count = tempCounterValue;
-
- 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) (17) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->ps_starve_count)); tempCounterValue = profiler->ps_starve_count;
- profiler->ps_starve_count = CalcDelta(profiler->ps_starve_count, profilerHistory.ps_starve_count);
- profilerHistory.ps_starve_count = tempCounterValue;
-
- 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) (18) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->ps_stall_count)); tempCounterValue = profiler->ps_stall_count;
- profiler->ps_stall_count = CalcDelta(profiler->ps_stall_count, profilerHistory.ps_stall_count);
- profilerHistory.ps_stall_count = tempCounterValue;
-
- 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) (22) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->ps_process_count)); tempCounterValue = profiler->ps_process_count;
- profiler->ps_process_count = CalcDelta(profiler->ps_process_count, profilerHistory.ps_process_count);
- profilerHistory.ps_process_count = tempCounterValue;
-
- 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) (4) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->shader_cycle_count)); tempCounterValue = profiler->shader_cycle_count;
- profiler->shader_cycle_count = CalcDelta(profiler->shader_cycle_count,
- profilerHistory.shader_cycle_count); profilerHistory.shader_cycle_count = tempCounterValue;
-
- 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) (23) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->tx_non_idle_starve_count)); tempCounterValue = profiler->tx_non_idle_starve_count;
- profiler->tx_non_idle_starve_count = CalcDelta(profiler->tx_non_idle_starve_count,
- profilerHistory.tx_non_idle_starve_count); profilerHistory.tx_non_idle_starve_count = tempCounterValue;
-
- 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) (24) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->tx_starve_count)); tempCounterValue = profiler->tx_starve_count;
- profiler->tx_starve_count = CalcDelta(profiler->tx_starve_count, profilerHistory.tx_starve_count);
- profilerHistory.tx_starve_count = tempCounterValue;
-
- 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) (25) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->tx_stall_count)); tempCounterValue = profiler->tx_stall_count;
- profiler->tx_stall_count = CalcDelta(profiler->tx_stall_count, profilerHistory.tx_stall_count);
- profilerHistory.tx_stall_count = tempCounterValue;
-
- 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) (26) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C,
- &profiler->tx_process_count)); tempCounterValue = profiler->tx_process_count;
- profiler->tx_process_count = CalcDelta(profiler->tx_process_count, profilerHistory.tx_process_count);
- profilerHistory.tx_process_count = tempCounterValue;
-
- }
-#if !USE_SW_RESET
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24)))
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->ps_inst_counter));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_pixel_counter));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vs_inst_counter));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_vertice_counter));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (11) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_branch_inst_counter));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (12) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_texld_inst_counter));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (13) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_branch_inst_counter));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (14) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_texld_inst_counter));
+ 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) (resetValue) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
));
-#endif
/* PA */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460,
- &profiler->pa_input_vtx_counter)); tempCounterValue = profiler->pa_input_vtx_counter;
- profiler->pa_input_vtx_counter = CalcDelta(profiler->pa_input_vtx_counter,
- profilerHistory.pa_input_vtx_counter); profilerHistory.pa_input_vtx_counter = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460,
- &profiler->pa_input_prim_counter)); tempCounterValue = profiler->pa_input_prim_counter;
- profiler->pa_input_prim_counter = CalcDelta(profiler->pa_input_prim_counter,
- profilerHistory.pa_input_prim_counter); profilerHistory.pa_input_prim_counter = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460,
- &profiler->pa_output_prim_counter)); tempCounterValue = profiler->pa_output_prim_counter;
- profiler->pa_output_prim_counter = CalcDelta(profiler->pa_output_prim_counter,
- profilerHistory.pa_output_prim_counter); profilerHistory.pa_output_prim_counter = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460,
- &profiler->pa_depth_clipped_counter)); tempCounterValue = profiler->pa_depth_clipped_counter;
- profiler->pa_depth_clipped_counter = CalcDelta(profiler->pa_depth_clipped_counter,
- profilerHistory.pa_depth_clipped_counter); profilerHistory.pa_depth_clipped_counter = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460,
- &profiler->pa_trivial_rejected_counter)); tempCounterValue = profiler->pa_trivial_rejected_counter;
- profiler->pa_trivial_rejected_counter = CalcDelta(profiler->pa_trivial_rejected_counter,
- profilerHistory.pa_trivial_rejected_counter); profilerHistory.pa_trivial_rejected_counter = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460,
- &profiler->pa_culled_counter)); tempCounterValue = profiler->pa_culled_counter;
- profiler->pa_culled_counter = CalcDelta(profiler->pa_culled_counter, profilerHistory.pa_culled_counter);
- profilerHistory.pa_culled_counter = tempCounterValue;
-
- if (hasNewCounters)
- {
- 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) (13) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460,
- &profiler->pa_starve_count)); tempCounterValue = profiler->pa_starve_count;
- profiler->pa_starve_count = CalcDelta(profiler->pa_starve_count, profilerHistory.pa_starve_count);
- profilerHistory.pa_starve_count = tempCounterValue;
-
- 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) (14) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460,
- &profiler->pa_stall_count)); tempCounterValue = profiler->pa_stall_count;
- profiler->pa_stall_count = CalcDelta(profiler->pa_stall_count, profilerHistory.pa_stall_count);
- profilerHistory.pa_stall_count = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460,
- &profiler->pa_process_count)); tempCounterValue = profiler->pa_process_count;
- profiler->pa_process_count = CalcDelta(profiler->pa_process_count, profilerHistory.pa_process_count);
- profilerHistory.pa_process_count = tempCounterValue;
-
- 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) (12) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460,
- &profiler->pa_non_idle_starve_count)); tempCounterValue = profiler->pa_non_idle_starve_count;
- profiler->pa_non_idle_starve_count = CalcDelta(profiler->pa_non_idle_starve_count,
- profilerHistory.pa_non_idle_starve_count); profilerHistory.pa_non_idle_starve_count = tempCounterValue;
-
- }
-#if !USE_SW_RESET
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0)))
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_vtx_counter));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_prim_counter));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_output_prim_counter));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_depth_clipped_counter));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_trivial_rejected_counter));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_culled_counter));
+ 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) (resetValue) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
));
-#endif
/* SE */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_triangle_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_lines_count));
- if (hasNewCounters)
- {
- 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) (8) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_starve_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_stall_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_receive_triangle_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (11) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_send_triangle_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (12) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_receive_lines_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (13) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_send_lines_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (19) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_process_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (20) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_non_idle_starve_count));
- }
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (resetValue) & ((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8)))
+ 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) (resetValue) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
));
/* RA */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448,
- &profiler->ra_valid_pixel_count)); tempCounterValue = profiler->ra_valid_pixel_count;
- profiler->ra_valid_pixel_count = CalcDelta(profiler->ra_valid_pixel_count,
- profilerHistory.ra_valid_pixel_count); profilerHistory.ra_valid_pixel_count = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448,
- &profiler->ra_total_quad_count)); tempCounterValue = profiler->ra_total_quad_count;
- profiler->ra_total_quad_count = CalcDelta(profiler->ra_total_quad_count,
- profilerHistory.ra_total_quad_count); profilerHistory.ra_total_quad_count = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448,
- &profiler->ra_valid_quad_count_after_early_z)); tempCounterValue = profiler->ra_valid_quad_count_after_early_z;
- profiler->ra_valid_quad_count_after_early_z = CalcDelta(profiler->ra_valid_quad_count_after_early_z,
- profilerHistory.ra_valid_quad_count_after_early_z); profilerHistory.ra_valid_quad_count_after_early_z = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448,
- &profiler->ra_total_primitive_count)); tempCounterValue = profiler->ra_total_primitive_count;
- profiler->ra_total_primitive_count = CalcDelta(profiler->ra_total_primitive_count,
- profilerHistory.ra_total_primitive_count); profilerHistory.ra_total_primitive_count = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448,
- &profiler->ra_pipe_cache_miss_counter)); tempCounterValue = profiler->ra_pipe_cache_miss_counter;
- profiler->ra_pipe_cache_miss_counter = CalcDelta(profiler->ra_pipe_cache_miss_counter,
- profilerHistory.ra_pipe_cache_miss_counter); profilerHistory.ra_pipe_cache_miss_counter = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448,
- &profiler->ra_prefetch_cache_miss_counter)); tempCounterValue = profiler->ra_prefetch_cache_miss_counter;
- profiler->ra_prefetch_cache_miss_counter = CalcDelta(profiler->ra_prefetch_cache_miss_counter,
- profilerHistory.ra_prefetch_cache_miss_counter); profilerHistory.ra_prefetch_cache_miss_counter = tempCounterValue;
-
- if (hasNewCounters)
- {
- 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) (13) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448,
- &profiler->ra_non_idle_starve_count)); tempCounterValue = profiler->ra_non_idle_starve_count;
- profiler->ra_non_idle_starve_count = CalcDelta(profiler->ra_non_idle_starve_count,
- profilerHistory.ra_non_idle_starve_count); profilerHistory.ra_non_idle_starve_count = tempCounterValue;
-
- 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) (14) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448,
- &profiler->ra_starve_count)); tempCounterValue = profiler->ra_starve_count;
- profiler->ra_starve_count = CalcDelta(profiler->ra_starve_count, profilerHistory.ra_starve_count);
- profilerHistory.ra_starve_count = tempCounterValue;
-
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448,
- &profiler->ra_stall_count)); tempCounterValue = profiler->ra_stall_count;
- profiler->ra_stall_count = CalcDelta(profiler->ra_stall_count, profilerHistory.ra_stall_count);
- profilerHistory.ra_stall_count = tempCounterValue;
-
- 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) (16) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448,
- &profiler->ra_process_count)); tempCounterValue = profiler->ra_process_count;
- profiler->ra_process_count = CalcDelta(profiler->ra_process_count, profilerHistory.ra_process_count);
- profilerHistory.ra_process_count = tempCounterValue;
-
- }
-#if !USE_SW_RESET
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16)))
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_pixel_count));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_quad_count));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_quad_count_after_early_z));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_primitive_count));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_pipe_cache_miss_counter));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_prefetch_cache_miss_counter));
+ 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) (resetValue) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
));
-#endif
/* TX */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_bilinear_requests));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_trilinear_requests));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_discarded_texture_requests));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_texture_requests));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_in_8B_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_hit_texel_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_texel_count));
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24)))
+ 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) (resetValue) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
));
/* MC */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_pipeline));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_IP));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_write_req_8B_from_pipeline));
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0)))
+ 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) (resetValue) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
));
/* HI */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_read_request_stalled));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_request_stalled));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_data_stalled));
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8)))
+ 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) (resetValue) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
));
- if (hasNewCounters)
- {
- /* latency */
- gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- 0x0056C,
- &mc_axi_max_min_latency));
-
- gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- 0x00570,
- &profiler->mc_axi_total_latency));
-
- gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- 0x00574,
- &profiler->mc_axi_sample_count));
-
- /* Reset Latency counters */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
- Hardware->core,
- 0x00568,
- 0x10a));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
- Hardware->core,
- 0x00568,
- 0xa));
-
- profiler->mc_axi_min_latency = (mc_axi_max_min_latency & 0x0fff0000) >> 16;
- profiler->mc_axi_max_latency = (mc_axi_max_min_latency & 0x00000fff);
- if (profiler->mc_axi_min_latency == 4095)
- profiler->mc_axi_min_latency = 0;
-
- /* FE */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((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) (10) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00450, &profiler->fe_draw_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((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) (11) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00450, &profiler->fe_out_vertex_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((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) (14) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00450, &profiler->fe_stall_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00450, &profiler->fe_starve_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((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) (resetValue) & ((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((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)))
-));
- }
-
/* Success. */
gcmkFOOTER_NO();
return gcvSTATUS_OK;
@@ -9081,75 +6435,10 @@ gckHARDWARE_QueryContextProfile(
profiler, &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
));
-#if VIVANTE_PROFILER_ALL_COUNTER
- {
- gctUINT32 tid, i;
- static gctUINT32 frameNum = 0;
- gcmkONERROR(gckOS_GetThreadID(&tid));
- gcmkPRINT("TID: %d: Frame #%d\n", tid, frameNum);
-
- gcmkPRINT("TID: %d; GPU cycles: cycle: %u, total: %u, idle: %u\n", tid,
- profiler->gpuCyclesCounter,
- profiler->gpuTotalCyclesCounter,
- profiler->gpuIdleCyclesCounter);
-
- gcmkPRINT("TID: %d; BW: read: %u, write: %u\n", tid,
- profiler->gpuTotalRead64BytesPerFrame,
- profiler->gpuTotalWrite64BytesPerFrame);
-
- gcmkPRINT("TID: %d; Latency: min: %u, max: %u, total: %u, sample count: %u\n", tid,
- profiler->mc_axi_min_latency,
- profiler->mc_axi_max_latency,
- profiler->mc_axi_total_latency,
- profiler->mc_axi_sample_count);
-
- for (i = 0; i < MODULE_FRONT_END_COUNTER_NUM; i++)
- {
- gcmkPRINT("TID: %d; FE counter #%d: %u\n", tid,i,profiler->feCounters[i]);
- }
- for (i = 0; i < MODULE_PRIMITIVE_ASSEMBLY_COUNTER_NUM; i++)
- {
- gcmkPRINT("TID: %d; PA counter #%d: %u\n", tid,i,profiler->paCounters[i]);
- }
- for (i = 0; i < MODULE_SHADER_COUNTER_NUM; i++)
- {
- gcmkPRINT("TID: %d; SH counter #%d: %u\n", tid,i,profiler->shCounters[i]);
- }
- for (i = 0; i < MODULE_SETUP_COUNTER_NUM; i++)
- {
- gcmkPRINT("TID: %d; SE counter #%d: %u\n", tid,i,profiler->seCounters[i]);
- }
- for (i = 0; i < MODULE_FRONT_END_COUNTER_NUM; i++)
- {
- gcmkPRINT("TID: %d; RA counter #%d: %u\n", tid,i,profiler->raCounters[i]);
- }
- for (i = 0; i < MODULE_PRIMITIVE_ASSEMBLY_COUNTER_NUM; i++)
- {
- gcmkPRINT("TID: %d; PE counter #%d: %u\n", tid,i,profiler->peCounters[i]);
- }
- for (i = 0; i < MODULE_TEXTURE_COUNTER_NUM; i++)
- {
- gcmkPRINT("TID: %d; TX counter #%d: %u\n", tid,i,profiler->txCounters[i]);
- }
- for (i = 0; i < MODULE_SHADER_COUNTER_NUM; i++)
- {
- gcmkPRINT("TID: %d; MC counter #%d: %u\n", tid,i,profiler->mcCounters[i]);
- }
- for (i = 0; i < MODULE_SETUP_COUNTER_NUM; i++)
- {
- gcmkPRINT("TID: %d; HI counter #%d: %u\n", tid,i,profiler->hiCounters[i]);
- }
- frameNum++;
- }
-#endif
-
/* Reset counters. */
- if (Reset)
- {
- gcmkVERIFY_OK(gckOS_ZeroMemory(
- &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
- ));
- }
+ gcmkVERIFY_OK(gckOS_ZeroMemory(
+ &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
+ ));
gcmkVERIFY_OK(gckOS_ReleaseMutex(
command->os, command->mutexContextSeq
@@ -9165,6 +6454,30 @@ OnError:
return status;
}
+static gctUINT32
+CalcDelta(
+ IN gctUINT32 new,
+ IN gctUINT32 old
+ )
+{
+ if (new >= old)
+ {
+ return new - old;
+ }
+ else
+ {
+ return (gctUINT32)((gctUINT64)new + 0x100000000ll - old);
+ }
+}
+
+#if USE_SW_RESET
+#define gcmkRESET_PROFILE_DATA(counterName, prevCounterName) \
+ temp = profiler->counterName; \
+ profiler->counterName = CalcDelta(temp, Context->prevCounterName); \
+ Context->prevCounterName = temp
+
+#endif
+
gceSTATUS
gckHARDWARE_UpdateContextProfile(
IN gckHARDWARE Hardware,
@@ -9174,11 +6487,13 @@ gckHARDWARE_UpdateContextProfile(
gceSTATUS status;
gcsPROFILER_COUNTERS * profiler = &Context->latestProfiler;
gcsPROFILER_COUNTERS * profilerHistroy = &Context->histroyProfiler;
+ gctUINT i, clock;
+ gctUINT32 colorKilled = 0, colorDrawn = 0, depthKilled = 0, depthDrawn = 0;
+ gctUINT32 totalRead, totalWrite;
gceCHIPMODEL chipModel;
gctUINT32 chipRevision;
- gctUINT32 i;
+ gctUINT32 temp;
gctUINT32 resetValue = 0xF;
- gctBOOL hasNewCounters = gcvFALSE;
gcmkHEADER_ARG("Hardware=0x%x Context=0x%x", Hardware, Context);
@@ -9191,7 +6506,6 @@ gckHARDWARE_UpdateContextProfile(
if ((chipModel == gcv5000 && chipRevision == 0x5434) || (chipModel == gcv3000 && chipRevision == 0x5435))
{
resetValue = 0xFF;
- hasNewCounters = gcvTRUE;
}
/* Read the counters. */
@@ -9202,7 +6516,6 @@ gckHARDWARE_UpdateContextProfile(
&profiler->gpuCyclesCounter));
gcmkUPDATE_PROFILE_DATA(gpuCyclesCounter);
- /* This counter should be equal to 0x00438. Currently it's not displayed in vAnalyzer */
gcmkONERROR(
gckOS_ReadRegisterEx(Hardware->os,
Hardware->core,
@@ -9228,15 +6541,6 @@ gckHARDWARE_UpdateContextProfile(
}
gcmkUPDATE_PROFILE_DATA(gpuIdleCyclesCounter);
-#if !VIVANTE_PROFILER_ALL_COUNTER
- {
- gctUINT clock;
- gctUINT32 colorKilled = 0, colorDrawn = 0, depthKilled = 0, depthDrawn = 0;
- gctUINT32 totalRead, totalWrite;
- gctUINT32 mc_axi_max_min_latency;
-
- gctUINT32 temp;
-
/* Read clock control register. */
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
Hardware->core,
@@ -9257,11 +6561,7 @@ gckHARDWARE_UpdateContextProfile(
gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
Hardware->core,
0x00000,
- ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ?
- 23:20))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 23:20) - (0 ?
- 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ?
- 23:20)))));
+ ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20)))));
/* BW */
gcmkONERROR(
@@ -9279,30 +6579,10 @@ gckHARDWARE_UpdateContextProfile(
profiler->gpuTotalWrite64BytesPerFrame += totalWrite;
/* PE */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454,
- &colorKilled));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454,
- &depthKilled));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454,
- &colorDrawn));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454,
- &depthDrawn));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorKilled));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthKilled));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorDrawn));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthDrawn));
profiler->pe_pixel_count_killed_by_color_pipe += colorKilled;
profiler->pe_pixel_count_killed_by_depth_pipe += depthKilled;
@@ -9313,10 +6593,10 @@ gckHARDWARE_UpdateContextProfile(
gcmkUPDATE_PROFILE_DATA(gpuTotalRead64BytesPerFrame);
gcmkUPDATE_PROFILE_DATA(gpuTotalWrite64BytesPerFrame);
#if USE_SW_RESET
- gcmkRESET_PROFILE_DATA(pe_pixel_count_killed_by_color_pipe, preProfiler);
- gcmkRESET_PROFILE_DATA(pe_pixel_count_killed_by_depth_pipe, preProfiler);
- gcmkRESET_PROFILE_DATA(pe_pixel_count_drawn_by_color_pipe, preProfiler);
- gcmkRESET_PROFILE_DATA(pe_pixel_count_drawn_by_depth_pipe, preProfiler);
+ gcmkRESET_PROFILE_DATA(pe_pixel_count_killed_by_color_pipe, prevPePixelCountKilledByColorPipe);
+ gcmkRESET_PROFILE_DATA(pe_pixel_count_killed_by_depth_pipe, prevPePixelCountKilledByDepthPipe);
+ gcmkRESET_PROFILE_DATA(pe_pixel_count_drawn_by_color_pipe, prevPePixelCountDrawnByColorPipe);
+ gcmkRESET_PROFILE_DATA(pe_pixel_count_drawn_by_depth_pipe, prevPePixelCountDrawnByDepthPipe);
#endif
gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_color_pipe);
gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_depth_pipe);
@@ -9339,175 +6619,39 @@ gckHARDWARE_UpdateContextProfile(
gcmkONERROR(
gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00078, 0));
#if !USE_SW_RESET
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16)))
+ 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) (resetValue) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
));
#endif
-
/* SH */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->ps_inst_counter));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_pixel_counter));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vs_inst_counter));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_vertice_counter));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (11) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (11) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_branch_inst_counter));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (12) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (12) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_texld_inst_counter));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (13) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (13) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_branch_inst_counter));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (14) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (14) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_texld_inst_counter));
- if (hasNewCounters)
- {
- 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) (19) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vs_non_idle_starve_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vs_starve_count));
- 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) (16) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vs_stall_count));
- 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) (21) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vs_process_count));
- 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) (20) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->ps_non_idle_starve_count));
- 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) (17) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->ps_starve_count));
- 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) (18) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->ps_stall_count));
- 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) (22) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->ps_process_count));
- 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) (4) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->shader_cycle_count));
- 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) (23) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->tx_non_idle_starve_count));
- 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) (24) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->tx_starve_count));
- 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) (25) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->tx_stall_count));
- 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) (26) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->tx_process_count));
- }
+
#if USE_SW_RESET
- gcmkRESET_PROFILE_DATA(ps_inst_counter, preProfiler);
- gcmkRESET_PROFILE_DATA(rendered_pixel_counter, preProfiler);
- gcmkRESET_PROFILE_DATA(vs_inst_counter, preProfiler);
- gcmkRESET_PROFILE_DATA(rendered_vertice_counter, preProfiler);
- gcmkRESET_PROFILE_DATA(vtx_branch_inst_counter, preProfiler);
- gcmkRESET_PROFILE_DATA(vtx_texld_inst_counter, preProfiler);
- gcmkRESET_PROFILE_DATA(pxl_branch_inst_counter, preProfiler);
- gcmkRESET_PROFILE_DATA(pxl_texld_inst_counter, preProfiler);
- if (hasNewCounters)
- {
- gcmkRESET_PROFILE_DATA(vs_non_idle_starve_count, preProfiler);
- gcmkRESET_PROFILE_DATA(vs_starve_count, preProfiler);
- gcmkRESET_PROFILE_DATA(vs_stall_count, preProfiler);
- gcmkRESET_PROFILE_DATA(vs_process_count, preProfiler);
- gcmkRESET_PROFILE_DATA(ps_non_idle_starve_count, preProfiler);
- gcmkRESET_PROFILE_DATA(ps_starve_count, preProfiler);
- gcmkRESET_PROFILE_DATA(ps_stall_count, preProfiler);
- gcmkRESET_PROFILE_DATA(ps_process_count, preProfiler);
- gcmkRESET_PROFILE_DATA(shader_cycle_count, preProfiler);
- gcmkRESET_PROFILE_DATA(tx_non_idle_starve_count, preProfiler);
- gcmkRESET_PROFILE_DATA(tx_starve_count, preProfiler);
- gcmkRESET_PROFILE_DATA(tx_stall_count, preProfiler);
- gcmkRESET_PROFILE_DATA(tx_process_count, preProfiler);
- }
+ gcmkRESET_PROFILE_DATA(ps_inst_counter, prevPSInstCount);
+ gcmkRESET_PROFILE_DATA(rendered_pixel_counter, prevPSPixelCount);
+ gcmkRESET_PROFILE_DATA(vs_inst_counter, prevVSInstCount);
+ gcmkRESET_PROFILE_DATA(rendered_vertice_counter, prevVSVertexCount);
+ gcmkRESET_PROFILE_DATA(vtx_branch_inst_counter, prevVSBranchInstCount);
+ gcmkRESET_PROFILE_DATA(vtx_texld_inst_counter, prevVSTexInstCount);
+ gcmkRESET_PROFILE_DATA(pxl_branch_inst_counter, prevPSBranchInstCount);
+ gcmkRESET_PROFILE_DATA(pxl_texld_inst_counter, prevPSTexInstCount);
#endif
+
gcmkUPDATE_PROFILE_DATA(ps_inst_counter);
gcmkUPDATE_PROFILE_DATA(rendered_pixel_counter);
gcmkUPDATE_PROFILE_DATA(vs_inst_counter);
@@ -9516,114 +6660,33 @@ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profile
gcmkUPDATE_PROFILE_DATA(vtx_texld_inst_counter);
gcmkUPDATE_PROFILE_DATA(pxl_branch_inst_counter);
gcmkUPDATE_PROFILE_DATA(pxl_texld_inst_counter);
- if (hasNewCounters)
- {
- gcmkUPDATE_PROFILE_DATA(vs_non_idle_starve_count);
- gcmkUPDATE_PROFILE_DATA(vs_starve_count);
- gcmkUPDATE_PROFILE_DATA(vs_stall_count);
- gcmkUPDATE_PROFILE_DATA(vs_process_count);
- gcmkUPDATE_PROFILE_DATA(ps_non_idle_starve_count);
- gcmkUPDATE_PROFILE_DATA(ps_starve_count);
- gcmkUPDATE_PROFILE_DATA(ps_stall_count);
- gcmkUPDATE_PROFILE_DATA(ps_process_count);
- gcmkUPDATE_PROFILE_DATA(shader_cycle_count);
- gcmkUPDATE_PROFILE_DATA(tx_non_idle_starve_count);
- gcmkUPDATE_PROFILE_DATA(tx_starve_count);
- gcmkUPDATE_PROFILE_DATA(tx_stall_count);
- gcmkUPDATE_PROFILE_DATA(tx_process_count);
- }
+
#if !USE_SW_RESET
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24)))
+ 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) (resetValue) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
));
#endif
/* PA */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_vtx_counter));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_prim_counter));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_output_prim_counter));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_depth_clipped_counter));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_trivial_rejected_counter));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_culled_counter));
- if (hasNewCounters)
- {
- 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) (12) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_non_idle_starve_count));
- 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) (13) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_starve_count));
- 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) (14) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_stall_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_process_count));
- }
#if USE_SW_RESET
- gcmkRESET_PROFILE_DATA(pa_input_vtx_counter, preProfiler);
- gcmkRESET_PROFILE_DATA(pa_input_prim_counter, preProfiler);
- gcmkRESET_PROFILE_DATA(pa_output_prim_counter, preProfiler);
- gcmkRESET_PROFILE_DATA(pa_depth_clipped_counter, preProfiler);
- gcmkRESET_PROFILE_DATA(pa_trivial_rejected_counter, preProfiler);
- gcmkRESET_PROFILE_DATA(pa_culled_counter, preProfiler);
- if (hasNewCounters)
- {
- gcmkRESET_PROFILE_DATA(pa_non_idle_starve_count, preProfiler);
- gcmkRESET_PROFILE_DATA(pa_starve_count, preProfiler);
- gcmkRESET_PROFILE_DATA(pa_stall_count, preProfiler);
- gcmkRESET_PROFILE_DATA(pa_process_count, preProfiler);
- }
+ gcmkRESET_PROFILE_DATA(pa_input_vtx_counter, prevPaInputVtxCounter);
+ gcmkRESET_PROFILE_DATA(pa_input_prim_counter, prevPaInputPrimCounter);
+ gcmkRESET_PROFILE_DATA(pa_output_prim_counter, prevPaOutputPrimCounter);
+ gcmkRESET_PROFILE_DATA(pa_depth_clipped_counter, prevPaDepthClippedCounter);
+ gcmkRESET_PROFILE_DATA(pa_trivial_rejected_counter, prevPaTrivialRejectedCounter);
+ gcmkRESET_PROFILE_DATA(pa_culled_counter, prevPaCulledCounter);
#endif
gcmkUPDATE_PROFILE_DATA(pa_input_vtx_counter);
gcmkUPDATE_PROFILE_DATA(pa_input_prim_counter);
@@ -9631,191 +6694,43 @@ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profile
gcmkUPDATE_PROFILE_DATA(pa_depth_clipped_counter);
gcmkUPDATE_PROFILE_DATA(pa_trivial_rejected_counter);
gcmkUPDATE_PROFILE_DATA(pa_culled_counter);
- if (hasNewCounters)
- {
- gcmkUPDATE_PROFILE_DATA(pa_non_idle_starve_count);
- gcmkUPDATE_PROFILE_DATA(pa_starve_count);
- gcmkUPDATE_PROFILE_DATA(pa_stall_count);
- gcmkUPDATE_PROFILE_DATA(pa_process_count);
- }
#if !USE_SW_RESET
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0)))
+ 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) (resetValue) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
));
#endif
/* SE */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_triangle_count));
gcmkUPDATE_PROFILE_DATA(se_culled_triangle_count);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_lines_count));
gcmkUPDATE_PROFILE_DATA(se_culled_lines_count);
- if (hasNewCounters)
- {
- 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) (8) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_starve_count));
- gcmkUPDATE_PROFILE_DATA(se_starve_count);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_stall_count));
- gcmkUPDATE_PROFILE_DATA(se_stall_count);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_receive_triangle_count));
- gcmkUPDATE_PROFILE_DATA(se_receive_triangle_count);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (11) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_send_triangle_count));
- gcmkUPDATE_PROFILE_DATA(se_send_triangle_count);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (12) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_receive_lines_count));
- gcmkUPDATE_PROFILE_DATA(se_receive_lines_count);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (13) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_send_lines_count));
- gcmkUPDATE_PROFILE_DATA(se_send_lines_count);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (19) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_process_count));
- gcmkUPDATE_PROFILE_DATA(se_process_count);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (20) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_non_idle_starve_count));
- gcmkUPDATE_PROFILE_DATA(se_non_idle_starve_count);
- }
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (resetValue) & ((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8)))
+ 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) (resetValue) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
));
/* RA */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_pixel_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_quad_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_quad_count_after_early_z));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_primitive_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_pipe_cache_miss_counter));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_prefetch_cache_miss_counter));
- if (hasNewCounters)
- {
- 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) (13) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_non_idle_starve_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (14) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_starve_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_stall_count));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (16) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_process_count));
- }
#if USE_SW_RESET
- gcmkRESET_PROFILE_DATA(ra_valid_pixel_count, preProfiler);
- gcmkRESET_PROFILE_DATA(ra_total_quad_count, preProfiler);
- gcmkRESET_PROFILE_DATA(ra_valid_quad_count_after_early_z, preProfiler);
- gcmkRESET_PROFILE_DATA(ra_total_primitive_count, preProfiler);
- gcmkRESET_PROFILE_DATA(ra_pipe_cache_miss_counter, preProfiler);
- gcmkRESET_PROFILE_DATA(ra_prefetch_cache_miss_counter, preProfiler);
- if (hasNewCounters)
- {
- gcmkRESET_PROFILE_DATA(ra_non_idle_starve_count, preProfiler);
- gcmkRESET_PROFILE_DATA(ra_starve_count, preProfiler);
- gcmkRESET_PROFILE_DATA(ra_stall_count, preProfiler);
- gcmkRESET_PROFILE_DATA(ra_process_count, preProfiler);
- }
+ gcmkRESET_PROFILE_DATA(ra_valid_pixel_count, prevRaValidPixelCount);
+ gcmkRESET_PROFILE_DATA(ra_total_quad_count, prevRaTotalQuadCount);
+ gcmkRESET_PROFILE_DATA(ra_valid_quad_count_after_early_z, prevRaValidQuadCountAfterEarlyZ);
+ gcmkRESET_PROFILE_DATA(ra_total_primitive_count, prevRaTotalPrimitiveCount);
+ gcmkRESET_PROFILE_DATA(ra_pipe_cache_miss_counter, prevRaPipeCacheMissCounter);
+ gcmkRESET_PROFILE_DATA(ra_prefetch_cache_miss_counter, prevRaPrefetchCacheMissCounter);
#endif
gcmkUPDATE_PROFILE_DATA(ra_valid_pixel_count);
gcmkUPDATE_PROFILE_DATA(ra_total_quad_count);
@@ -9823,562 +6738,72 @@ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profile
gcmkUPDATE_PROFILE_DATA(ra_total_primitive_count);
gcmkUPDATE_PROFILE_DATA(ra_pipe_cache_miss_counter);
gcmkUPDATE_PROFILE_DATA(ra_prefetch_cache_miss_counter);
- if (hasNewCounters)
- {
- gcmkUPDATE_PROFILE_DATA(ra_non_idle_starve_count);
- gcmkUPDATE_PROFILE_DATA(ra_starve_count);
- gcmkUPDATE_PROFILE_DATA(ra_stall_count);
- gcmkUPDATE_PROFILE_DATA(ra_process_count);
- }
#if !USE_SW_RESET
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16)))
+ 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) (resetValue) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
));
#endif
/* TX */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_bilinear_requests));
gcmkUPDATE_PROFILE_DATA(tx_total_bilinear_requests);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_trilinear_requests));
gcmkUPDATE_PROFILE_DATA(tx_total_trilinear_requests);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_discarded_texture_requests));
gcmkUPDATE_PROFILE_DATA(tx_total_discarded_texture_requests);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_texture_requests));
gcmkUPDATE_PROFILE_DATA(tx_total_texture_requests);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_count));
gcmkUPDATE_PROFILE_DATA(tx_mem_read_count);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_in_8B_count));
gcmkUPDATE_PROFILE_DATA(tx_mem_read_in_8B_count);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_count));
gcmkUPDATE_PROFILE_DATA(tx_cache_miss_count);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_hit_texel_count));
gcmkUPDATE_PROFILE_DATA(tx_cache_hit_texel_count);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_texel_count));
gcmkUPDATE_PROFILE_DATA(tx_cache_miss_texel_count);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (resetValue) & ((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24)))
+ 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) (resetValue) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
));
/* MC */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_pipeline));
gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_pipeline);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_IP));
gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_IP);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_write_req_8B_from_pipeline));
gcmkUPDATE_PROFILE_DATA(mc_total_write_req_8B_from_pipeline);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (resetValue) & ((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0)))
-));
-
- /* read latency counters */
- if (hasNewCounters)
- {
- /* latency */
- gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- 0x0056C,
- &mc_axi_max_min_latency));
-
- gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- 0x00570,
- &profiler->mc_axi_total_latency));
-
- gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- 0x00574,
- &profiler->mc_axi_sample_count));
-
- /* Reset Latency counters */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
- Hardware->core,
- 0x00568,
- 0x10a));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
- Hardware->core,
- 0x00568,
- 0xa));
-
- profiler->mc_axi_min_latency = (mc_axi_max_min_latency & 0x0fff0000) >> 16;
- profiler->mc_axi_max_latency = (mc_axi_max_min_latency & 0x00000fff);
- if (profiler->mc_axi_min_latency == 4095)
- profiler->mc_axi_min_latency = 0;
-
- gcmkUPDATE_PROFILE_DATA(mc_axi_min_latency);
- gcmkUPDATE_PROFILE_DATA(mc_axi_max_latency);
- gcmkUPDATE_PROFILE_DATA(mc_axi_total_latency);
- gcmkUPDATE_PROFILE_DATA(mc_axi_sample_count);
-
- /* FE */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((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) (10) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00450, &profiler->fe_draw_count));
- gcmkUPDATE_PROFILE_DATA(fe_draw_count);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((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) (11) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00450, &profiler->fe_out_vertex_count));
- gcmkUPDATE_PROFILE_DATA(fe_draw_count);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((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) (14) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00450, &profiler->fe_stall_count));
- gcmkUPDATE_PROFILE_DATA(fe_draw_count);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00450, &profiler->fe_starve_count));
- gcmkUPDATE_PROFILE_DATA(fe_draw_count);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((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) (resetValue) & ((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((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)))
+ 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) (resetValue) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
));
- }
/* HI */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_read_request_stalled));
gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_read_request_stalled);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_request_stalled));
gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_request_stalled);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_data_stalled));
gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_data_stalled);
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (resetValue) & ((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8)))
-));
- }
-
-#else
- {
- gctUINT32 mc_axi_max_min_latency;
- gctUINT clock;
- gctUINT32 totalRead, totalWrite;
-
- /* Read clock control register. */
- gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- 0x00000,
- &clock));
-
- profiler->gpuTotalRead64BytesPerFrame = 0;
- profiler->gpuTotalWrite64BytesPerFrame = 0;
-
- /* Walk through all avaiable pixel pipes. */
- for (i = 0; i < Hardware->identity.pixelPipes; ++i)
- {
- /* Select proper pipe. */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
- Hardware->core,
- 0x00000,
- ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ?
- 23:20))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 23:20) - (0 ?
- 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ?
- 23:20)))));
-
- /* BW */
- gcmkONERROR(
- gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- 0x00040,
- &totalRead));
- gcmkONERROR(
- gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- 0x00044,
- &totalWrite));
-
- profiler->gpuTotalRead64BytesPerFrame += totalRead;
- profiler->gpuTotalWrite64BytesPerFrame += totalWrite;
- }
-
- gcmkUPDATE_PROFILE_DATA(gpuTotalRead64BytesPerFrame);
- gcmkUPDATE_PROFILE_DATA(gpuTotalWrite64BytesPerFrame);
-
- /* Reset clock control register. */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
- Hardware->core,
- 0x00000,
- clock));
-
- /* Reset counters. */
- gcmkONERROR(
- gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 1));
- gcmkONERROR(
- gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 0));
- gcmkONERROR(
- gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00438, 0));
- gcmkONERROR(
- gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00078, 0));
-
- /* read latency counters */
- gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- 0x0056C,
- &mc_axi_max_min_latency));
-
- gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- 0x00570,
- &profiler->mc_axi_total_latency));
-
- gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
- Hardware->core,
- 0x00574,
- &profiler->mc_axi_sample_count));
-
- /* Reset Latency counters */
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
- Hardware->core,
- 0x00568,
- 0x10a));
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
- Hardware->core,
- 0x00568,
- 0xa));
-
- profiler->mc_axi_min_latency = (mc_axi_max_min_latency & 0x0fff0000) >> 16;
- profiler->mc_axi_max_latency = (mc_axi_max_min_latency & 0x00000fff);
- if (profiler->mc_axi_min_latency == 4095)
- profiler->mc_axi_min_latency = 0;
-
- gcmkUPDATE_PROFILE_DATA(mc_axi_min_latency);
- gcmkUPDATE_PROFILE_DATA(mc_axi_max_latency);
- gcmkUPDATE_PROFILE_DATA(mc_axi_total_latency);
- gcmkUPDATE_PROFILE_DATA(mc_axi_sample_count);
-
- /* FE */
- for (i = 0; i < MODULE_FRONT_END_COUNTER_NUM; i++)
- {
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((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) (i) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00450, &profiler->feCounters[i]));
- gcmkUPDATE_PROFILE_DATA(feCounters[i]);
- }
- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((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) (resetValue) & ((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((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)))
-));
-
- /* PA */
- for (i = 0; i < MODULE_FRONT_END_COUNTER_NUM; i++)
- {
- 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) (i) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->paCounters[i]));
- gcmkUPDATE_PROFILE_DATA(paCounters[i]);
- }
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0)))
-));
-
- /* SH */
- for (i = 0; i < MODULE_SHADER_COUNTER_NUM; i++)
- {
- 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) (i) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->shCounters[i]));
- gcmkUPDATE_PROFILE_DATA(shCounters[i]);
- }
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24)))
-));
-
- /* SE */
- for (i = 0; i < MODULE_SETUP_COUNTER_NUM; i++)
- {
- 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) (i) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->seCounters[i]));
- gcmkUPDATE_PROFILE_DATA(seCounters[i]);
- }
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8)))
-));
-
- /* RA */
- for (i = 0; i < MODULE_RASTERIZER_COUNTER_NUM; i++)
- {
- 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) (i) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->raCounters[i]));
- gcmkUPDATE_PROFILE_DATA(raCounters[i]);
- }
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16)))
-));
-
- /* TX */
- for (i = 0; i < MODULE_TEXTURE_COUNTER_NUM; i++)
- {
- 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) (i) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->txCounters[i]));
- gcmkUPDATE_PROFILE_DATA(txCounters[i]);
- }
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ?
- 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24)))
-));
-
- /* PE */
- for (i = 0; i < MODULE_PIXEL_ENGINE_COUNTER_NUM; i++)
- {
- 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) (i) & ((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, &profiler->peCounters[i]));
- gcmkUPDATE_PROFILE_DATA(peCounters[i]);
- }
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ?
- 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16)))
-));
-
- /* MC */
- for (i = 0; i < MODULE_MEMORY_CONTROLLER_COUNTER_NUM; i++)
- {
- 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) (i) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mcCounters[i]));
- gcmkUPDATE_PROFILE_DATA(mcCounters[i]);
- }
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ?
- 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0)))
-));
-
- /* HI */
- for (i = 0; i < MODULE_HOST_INTERFACE_COUNTER_NUM; i++)
- {
- 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) (i) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hiCounters[i]));
- gcmkUPDATE_PROFILE_DATA(hiCounters[i]);
- }
- 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) (resetValue) & ((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) ));
-gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8)))
+ 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) (resetValue) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
));
- }
-#endif
-
/* Success. */
gcmkFOOTER_NO();
return gcvSTATUS_OK;
@@ -10408,11 +6833,7 @@ gckHARDWARE_InitProfiler(
gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
Hardware->core,
0x00000,
- ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 11:11) - (0 ? 11:11) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ?
- 11:11))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 11:11) - (0 ?
- 11:11) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ?
- 11:11)))));
+ ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 11:11) - (0 ? 11:11) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ? 11:11))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 11:11) - (0 ? 11:11) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ? 11:11)))));
OnError:
/* Return the status. */
@@ -10439,11 +6860,7 @@ _ResetGPU(
0x00104,
0x00000000));
- control = ((((gctUINT32) (0x01590880)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 17:17) - (0 ? 17:17) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ?
- 17:17))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 17:17) - (0 ?
- 17:17) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ?
- 17:17)));
+ control = ((((gctUINT32) (0x01590880)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 17:17) - (0 ? 17:17) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ? 17:17))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 17:17) - (0 ? 17:17) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ? 17:17)));
/* Disable pulse-eater. */
gcmkONERROR(gckOS_WriteRegisterEx(Os,
@@ -10454,11 +6871,7 @@ _ResetGPU(
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
0x0010C,
- ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0)))));
+ ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))));
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
@@ -10468,11 +6881,7 @@ _ResetGPU(
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
0x00000,
- ((((gctUINT32) (0x00000900)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ?
- 9:9))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ?
- 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ?
- 9:9)))));
+ ((((gctUINT32) (0x00000900)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9)))));
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
@@ -10483,11 +6892,7 @@ _ResetGPU(
gcmkONERROR(gckOS_Delay(Os, 1));
/* Isolate the GPU. */
- control = ((((gctUINT32) (0x00000900)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ?
- 19:19))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 19:19) - (0 ?
- 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ?
- 19:19)));
+ control = ((((gctUINT32) (0x00000900)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ? 19:19))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ? 19:19)));
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
@@ -10498,11 +6903,7 @@ _ResetGPU(
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
0x00000,
- ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:12) - (0 ? 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ?
- 12:12))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 12:12) - (0 ?
- 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ?
- 12:12)))));
+ ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:12) - (0 ? 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 12:12) - (0 ? 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12)))));
/* Wait for reset. */
gcmkONERROR(gckOS_Delay(Os, 1));
@@ -10511,18 +6912,10 @@ _ResetGPU(
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
0x00000,
- ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:12) - (0 ? 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ?
- 12:12))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 12:12) - (0 ?
- 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ?
- 12:12)))));
+ ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:12) - (0 ? 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 12:12) - (0 ? 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12)))));
/* Reset GPU isolation. */
- control = ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ?
- 19:19))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 19:19) - (0 ?
- 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ?
- 19:19)));
+ control = ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ? 19:19))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ? 19:19)));
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
@@ -10540,6 +6933,22 @@ _ResetGPU(
continue;
}
+#if gcdMULTI_GPU > 1
+ if (Core == gcvCORE_MAJOR)
+ {
+ /* Read idle register. */
+ gcmkONERROR(gckOS_ReadRegisterByCoreId(Os,
+ Core,
+ gcvCORE_3D_1_ID,
+ 0x00004,
+ &idle));
+
+ if ((((((gctUINT32) (idle)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ) == 0)
+ {
+ continue;
+ }
+ }
+#endif
/* Read reset register. */
gcmkONERROR(gckOS_ReadRegisterEx(Os,
Core,
@@ -10553,6 +6962,24 @@ _ResetGPU(
continue;
}
+#if gcdMULTI_GPU > 1
+ if (Core == gcvCORE_MAJOR)
+ {
+ /* Read reset register. */
+ gcmkONERROR(gckOS_ReadRegisterByCoreId(Os,
+ Core,
+ gcvCORE_3D_1_ID,
+ 0x00000,
+ &control));
+
+ if (((((((gctUINT32) (control)) >> (0 ? 16:16)) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) ) == 0)
+ || ((((((gctUINT32) (control)) >> (0 ? 17:17)) & ((gctUINT32) ((((1 ? 17:17) - (0 ? 17:17) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:17) - (0 ? 17:17) + 1)))))) ) == 0)
+ )
+ {
+ continue;
+ }
+ }
+#endif
/* GPU is idle. */
break;
}
@@ -10579,9 +7006,6 @@ gckHARDWARE_Reset(
gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
gcmkVERIFY_OBJECT(Hardware->kernel, gcvOBJ_KERNEL);
- /* Record context ID in debug register before reset. */
- gcmkONERROR(gckHARDWARE_UpdateContextID(Hardware));
-
/* Hardware reset. */
status = gckOS_ResetGPU(Hardware->os, Hardware->core);
@@ -10626,6 +7050,8 @@ gckHARDWARE_GetBaseAddress(
OUT gctUINT32_PTR BaseAddress
)
{
+ gceSTATUS status;
+
gcmkHEADER_ARG("Hardware=0x%x", Hardware);
/* Verify the arguments. */
@@ -10633,7 +7059,7 @@ gckHARDWARE_GetBaseAddress(
gcmkVERIFY_ARGUMENT(BaseAddress != gcvNULL);
/* Test if we have a new Memory Controller. */
- if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_MC20))
+ if (((((gctUINT32) (Hardware->identity.chipMinorFeatures)) >> (0 ? 22:22) & ((gctUINT32) ((((1 ? 22:22) - (0 ? 22:22) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 22:22) - (0 ? 22:22) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 22:22) - (0 ? 22:22) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 22:22) - (0 ? 22:22) + 1))))))))
{
/* No base address required. */
*BaseAddress = 0;
@@ -10641,12 +7067,17 @@ gckHARDWARE_GetBaseAddress(
else
{
/* Get the base address from the OS. */
- *BaseAddress = Hardware->baseAddress;
+ gcmkONERROR(gckOS_GetBaseAddress(Hardware->os, BaseAddress));
}
/* Success. */
gcmkFOOTER_ARG("*BaseAddress=0x%08x", *BaseAddress);
return gcvSTATUS_OK;
+
+OnError:
+ /* Return the status. */
+ gcmkFOOTER();
+ return status;
}
gceSTATUS
@@ -10665,10 +7096,7 @@ gckHARDWARE_NeedBaseAddress(
gcmkVERIFY_ARGUMENT(NeedBase != gcvNULL);
/* Make sure this is a load state. */
- if (((((gctUINT32) (State)) >> (0 ? 31:27) & ((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1)))))) == (0x01 & ((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:
-27) + 1))))))))
+ if (((((gctUINT32) (State)) >> (0 ? 31:27) & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1)))))) == (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))))
{
#if gcdENABLE_3D
/* Get the state address. */
@@ -10713,7 +7141,8 @@ gckHARDWARE_SetIsrManager(
gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
if (StartIsr == gcvNULL ||
- StopIsr == gcvNULL)
+ StopIsr == gcvNULL ||
+ Context == gcvNULL)
{
status = gcvSTATUS_INVALID_ARGUMENT;
@@ -10774,34 +7203,12 @@ gckHARDWARE_Compose(
triggerState = (gctUINT32_PTR) ((gctUINT8_PTR) Logical + Offset + Size);
triggerState[0] = 0x0C03;
triggerState[1]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:0) - (0 ?
- 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ?
- 1:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:4) - (0 ?
- 5:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:4) - (0 ? 5:4) + 1))))))) << (0 ?
- 5:4))) | (((gctUINT32) (0x3 & ((gctUINT32) ((((1 ? 5:4) - (0 ? 5:4) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 5:4) - (0 ? 5:4) + 1))))))) << (0 ? 5:4)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:8) - (0 ?
- 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1))))))) << (0 ?
- 8:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 8:8) - (0 ?
- 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1))))))) << (0 ?
- 8:8)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 24:24) - (0 ?
- 24:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 24:24) - (0 ? 24:24) + 1))))))) << (0 ?
- 24:24))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 24:24) - (0 ?
- 24:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 24:24) - (0 ? 24:24) + 1))))))) << (0 ?
- 24:24)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:12) - (0 ?
- 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ?
- 12:12))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 12:12) - (0 ?
- 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ?
- 12:12)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 20:16) - (0 ?
- 20:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:16) - (0 ? 20:16) + 1))))))) << (0 ?
- 20:16))) | (((gctUINT32) ((gctUINT32) (EventID) & ((gctUINT32) ((((1 ?
- 20:16) - (0 ? 20:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:16) - (0 ? 20:16) + 1))))))) << (0 ?
- 20:16)))
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:4) - (0 ? 5:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:4) - (0 ? 5:4) + 1))))))) << (0 ? 5:4))) | (((gctUINT32) (0x3 & ((gctUINT32) ((((1 ? 5:4) - (0 ? 5:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:4) - (0 ? 5:4) + 1))))))) << (0 ? 5:4)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1))))))) << (0 ? 8:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1))))))) << (0 ? 8:8)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 24:24) - (0 ? 24:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 24:24) - (0 ? 24:24) + 1))))))) << (0 ? 24:24))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 24:24) - (0 ? 24:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 24:24) - (0 ? 24:24) + 1))))))) << (0 ? 24:24)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:12) - (0 ? 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 12:12) - (0 ? 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 20:16) - (0 ? 20:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:16) - (0 ? 20:16) + 1))))))) << (0 ? 20:16))) | (((gctUINT32) ((gctUINT32) (EventID) & ((gctUINT32) ((((1 ? 20:16) - (0 ? 20:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:16) - (0 ? 20:16) + 1))))))) << (0 ? 20:16)))
;
#if gcdNONPAGED_MEMORY_CACHEABLE
@@ -10815,10 +7222,7 @@ gckHARDWARE_Compose(
/* Start composition. */
gcmkONERROR(gckOS_WriteRegisterEx(
Hardware->os, Hardware->core, 0x00554,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:0) - (0 ?
- 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ?
- 1:0))) | (((gctUINT32) (0x3 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0)))
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))) | (((gctUINT32) (0x3 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0)))
));
/* Success. */
@@ -10862,7 +7266,110 @@ gckHARDWARE_IsFeatureAvailable(
/* Verify the arguments. */
gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
- available = _QueryFeatureDatabase(Hardware, Feature);
+ /* Only features needed by common kernel logic added here. */
+ switch (Feature)
+ {
+ case gcvFEATURE_END_EVENT:
+ /*available = gcmVERIFYFIELDVALUE(Hardware->identity.chipMinorFeatures2,
+ GC_MINOR_FEATURES2, END_EVENT, AVAILABLE
+ );*/
+ available = gcvFALSE;
+ break;
+
+ case gcvFEATURE_MC20:
+ available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures)) >> (0 ? 22:22) & ((gctUINT32) ((((1 ? 22:22) - (0 ? 22:22) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 22:22) - (0 ? 22:22) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 22:22) - (0 ? 22:22) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 22:22) - (0 ? 22:22) + 1)))))));
+ break;
+
+ case gcvFEATURE_EARLY_Z:
+ available = ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x0 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))));
+ break;
+
+ case gcvFEATURE_HZ:
+ available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures)) >> (0 ? 27:27) & ((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1)))))));
+ break;
+
+ case gcvFEATURE_NEW_HZ:
+ available = ((((gctUINT32) (Hardware->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)))))));
+ break;
+
+ case gcvFEATURE_FAST_MSAA:
+ available = ((((gctUINT32) (Hardware->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)))))));
+ break;
+
+ case gcvFEATURE_SMALL_MSAA:
+ available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures4)) >> (0 ? 18:18) & ((gctUINT32) ((((1 ? 18:18) - (0 ? 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 18:18) - (0 ? 18:18) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 18:18) - (0 ? 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 18:18) - (0 ? 18:18) + 1)))))));
+ break;
+
+ case gcvFEATURE_DYNAMIC_FREQUENCY_SCALING:
+ /* This feature doesn't apply for 2D cores. */
+ available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures2)) >> (0 ? 14:14) & ((gctUINT32) ((((1 ? 14:14) - (0 ? 14:14) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 14:14) - (0 ? 14:14) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 14:14) - (0 ? 14:14) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 14:14) - (0 ? 14:14) + 1)))))))
+ && ((((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)))))));
+
+ if (Hardware->identity.chipModel == gcv1000 &&
+ (Hardware->identity.chipRevision == 0x5039 ||
+ Hardware->identity.chipRevision == 0x5040))
+ {
+ available = gcvFALSE;
+ }
+ break;
+
+ case gcvFEATURE_ACE:
+ available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures3)) >> (0 ? 18:18) & ((gctUINT32) ((((1 ? 18:18) - (0 ? 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 18:18) - (0 ? 18:18) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 18:18) - (0 ? 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 18:18) - (0 ? 18:18) + 1)))))));
+ break;
+
+ case gcvFEATURE_HALTI2:
+ available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures4)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))));
+ break;
+
+ case gcvFEATURE_PIPE_2D:
+ available = ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 9:9) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))));
+ break;
+
+ case gcvFEATURE_PIPE_3D:
+#if gcdENABLE_3D
+ available = ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 2:2) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))));
+#else
+ available = gcvFALSE;
+#endif
+ break;
+
+ case gcvFEATURE_FC_FLUSH_STALL:
+ available = ((((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)))))));
+ break;
+
+ case gcvFEATURE_TEX_CACHE_FLUSH_FIX:
+ available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures5)) >> (0 ? 14:14) & ((gctUINT32) ((((1 ? 14:14) - (0 ? 14:14) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 14:14) - (0 ? 14:14) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 14:14) - (0 ? 14:14) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 14:14) - (0 ? 14:14) + 1)))))));
+ break;
+
+ case gcvFEATURE_MMU:
+ available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures1)) >> (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)))))));
+ break;
+
+ case gcvFEATURE_FE_NEED_DUMMYDRAW:
+ if ((Hardware->identity.chipModel == gcv400) &&
+ (Hardware->identity.chipRevision == 0x4645))
+ {
+ available = gcvTRUE;
+ }
+ else
+ {
+ available = gcvFALSE;
+ }
+ break;
+
+ /* Only available for v60.*/
+ case gcvFEATURE_USC_DEFER_FILL_FIX:
+ available = gcvFALSE;
+ break;
+
+ case gcvFEATURE_USC:
+ available = gcvFALSE;
+ break;
+
+ default:
+ gcmkFATAL("Invalid feature has been requested.");
+ available = gcvFALSE;
+ }
/* Return result. */
gcmkFOOTER_ARG("%d", available ? gcvSTATUS_TRUE : gcvSTATUS_FALSE);
@@ -10899,34 +7406,9 @@ gckHARDWARE_DumpMMUException(
#if gcdPROCESS_ADDRESS_SPACE
gcsDATABASE_PTR database;
#endif
- gctUINT32 mmuStatusRegAddress;
- gctUINT32 mmuExceptionAddress;
gcmkHEADER_ARG("Hardware=0x%x", Hardware);
-#if gcdENABLE_TRUST_APPLICATION
- if (Hardware->secureMode == gcvSECURE_IN_TA)
- {
- gcmkVERIFY_OK(gckKERNEL_SecurityDumpMMUException(Hardware->kernel));
-
- gckMMU_DumpRecentFreedAddress(Hardware->kernel->mmu);
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
- }
- else
-#endif
- if (Hardware->secureMode == gcvSECURE_NONE)
- {
- mmuStatusRegAddress = 0x00188;
- mmuExceptionAddress = 0x00190;
- }
- else
- {
- mmuStatusRegAddress = 0x00384;
- mmuExceptionAddress = 0x00380;
- }
-
/* Verify the arguments. */
gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
@@ -10939,11 +7421,10 @@ gckHARDWARE_DumpMMUException(
gcmkPRINT("*** MMU ERROR DUMP ***\n");
gcmkPRINT("**************************\n");
-
gcmkVERIFY_OK(
gckOS_ReadRegisterEx(Hardware->os,
Hardware->core,
- mmuStatusRegAddress,
+ 0x00188,
&mmuStatus));
gcmkPRINT(" MMU status = 0x%08X\n", mmuStatus);
@@ -10972,18 +7453,6 @@ gckHARDWARE_DumpMMUException(
gcmkPRINT(" MMU%d: write violation\n", i);
break;
- case 4:
- gcmkPRINT(" MMU%d: out of bound", i);
- break;
-
- case 5:
- gcmkPRINT(" MMU%d: read security violation", i);
- break;
-
- case 6:
- gcmkPRINT(" MMU%d: write security violation", i);
- break;
-
default:
gcmkPRINT(" MMU%d: unknown state\n", i);
}
@@ -10991,7 +7460,7 @@ gckHARDWARE_DumpMMUException(
gcmkVERIFY_OK(
gckOS_ReadRegisterEx(Hardware->os,
Hardware->core,
- mmuExceptionAddress + i * 4,
+ 0x00190 + i * 4,
&address));
mtlb = (address & gcdMMU_MTLB_MASK) >> gcdMMU_MTLB_SHIFT;
@@ -11020,8 +7489,6 @@ gckHARDWARE_DumpMMUException(
}
}
#endif
-
- gckMMU_DumpRecentFreedAddress(Hardware->kernel->mmu);
}
gcmkFOOTER_NO();
@@ -11085,27 +7552,22 @@ gckHARDWARE_DumpGPUState(
static gcsiDEBUG_REGISTERS _dbgRegs[] =
{
- { "RA", 0x474, 16, 0x448, 256, 0x1, 0x00 },
- { "TX", 0x474, 24, 0x44C, 128, 0x1, 0x00 },
- { "FE", 0x470, 0, 0x450, 256, 0x1, 0x00 },
- { "PE", 0x470, 16, 0x454, 256, 0x3, 0x00 },
- { "DE", 0x470, 8, 0x458, 256, 0x1, 0x00 },
- { "SH", 0x470, 24, 0x45C, 256, 0x1, 0x00 },
- { "PA", 0x474, 0, 0x460, 256, 0x1, 0x00 },
- { "SE", 0x474, 8, 0x464, 256, 0x1, 0x00 },
- { "MC", 0x478, 0, 0x468, 256, 0x3, 0x00 },
- { "HI", 0x478, 8, 0x46C, 256, 0x1, 0x00 },
- { "TPG", 0x474, 24, 0x44C, 32, 0x2, 0x80 },
- { "TFB", 0x474, 24, 0x44C, 32, 0x2, 0xA0 },
- { "USC", 0x474, 24, 0x44C, 64, 0x2, 0xC0 },
- { "L2", 0x478, 0, 0x564, 256, 0x1, 0x00 },
- { "BLT", 0x478, 24, 0x1A4, 256, 0x1, 0x00 }
+ { "RA", 0x474, 16, 0x448, 32, 0x12344321 },
+ { "TX", 0x474, 24, 0x44C, 32, 0x12211221 },
+ { "FE", 0x470, 0, 0x450, 32, 0xBABEF00D },
+ { "PE", 0x470, 16, 0x454, 48, 0xBABEF00D },
+ { "DE", 0x470, 8, 0x458, 32, 0xBABEF00D },
+ { "SH", 0x470, 24, 0x45C, 32, 0xDEADBEEF },
+ { "PA", 0x474, 0, 0x460, 32, 0x0000AAAA },
+ { "SE", 0x474, 8, 0x464, 32, 0x5E5E5E5E },
+ { "MC", 0x478, 0, 0x468, 32, 0x12345678 },
+ { "HI", 0x478, 8, 0x46C, 32, 0xAAAAAAAA }
};
static gctUINT32 _otherRegs[] =
{
0x040, 0x044, 0x04C, 0x050, 0x054, 0x058, 0x05C, 0x060,
- 0x43c, 0x440, 0x444, 0x414, 0x100
+ 0x43c, 0x440, 0x444, 0x414,
};
gceSTATUS status;
@@ -11153,12 +7615,10 @@ gckHARDWARE_DumpGPUState(
calState = (dmaState2 >> 14) & 0x03;
veReqState = (dmaState2 >> 16) & 0x03;
- gcmkONERROR(gckOS_ReadRegisterEx(os, core, 0x00004, &idle));
- gcmkONERROR(gckOS_ReadRegisterEx(os, core, 0x0000C, &axi));
- gcmkONERROR(gckOS_ReadRegisterEx(os, core, 0x00668, &dmaLow));
- gcmkONERROR(gckOS_ReadRegisterEx(os, core, 0x00668, &dmaLow));
- gcmkONERROR(gckOS_ReadRegisterEx(os, core, 0x0066C, &dmaHigh));
- gcmkONERROR(gckOS_ReadRegisterEx(os, core, 0x0066C, &dmaHigh));
+ gcmkONERROR(gckOS_ReadRegisterEx(os, core, 0x004, &idle));
+ gcmkONERROR(gckOS_ReadRegisterEx(os, core, 0x00C, &axi));
+ gcmkONERROR(gckOS_ReadRegisterEx(os, core, 0x668, &dmaLow));
+ gcmkONERROR(gckOS_ReadRegisterEx(os, core, 0x66C, &dmaHigh));
gcmkPRINT_N(0, "**************************\n");
gcmkPRINT_N(0, "*** GPU STATE DUMP ***\n");
@@ -11179,9 +7639,6 @@ gckHARDWARE_DumpGPUState(
if ((idle & 0x00000200) == 0) gcmkPRINT_N(0, " IM not idle\n");
if ((idle & 0x00000400) == 0) gcmkPRINT_N(0, " FP not idle\n");
if ((idle & 0x00000800) == 0) gcmkPRINT_N(0, " TS not idle\n");
- if ((idle & 0x00001000) == 0) gcmkPRINT_N(0, " BL not idle\n");
- if ((idle & 0x00002000) == 0) gcmkPRINT_N(0, " BP not idle\n");
- if ((idle & 0x00004000) == 0) gcmkPRINT_N(0, " MC not idle\n");
if ((idle & 0x80000000) != 0) gcmkPRINT_N(0, " AXI low power mode\n");
if (
@@ -11218,19 +7675,12 @@ gckHARDWARE_DumpGPUState(
gcmkPRINT_N(8, " cal state = %d (%s)\n", calState, _calState [calState]);
gcmkPRINT_N(8, " VE request state = %d (%s)\n", veReqState, _veReqState [veReqState]);
- gcmkPRINT_N(0, " Debug registers:\n");
-
- for (i = 0; i < gcmCOUNTOF(_dbgRegs); i += 1)
- {
- gcmkONERROR(_DumpDebugRegisters(os, core, &_dbgRegs[i]));
- }
-
/* Record control. */
gckOS_ReadRegisterEx(os, core, 0x0, &oldControl);
for (pipe = 0; pipe < pixelPipes; pipe++)
{
- gcmkPRINT_N(4, " Other Registers[%d]:\n", pipe);
+ gcmkPRINT_N(4, " Debug registers of pipe[%d]:\n", pipe);
/* Switch pipe. */
gcmkONERROR(gckOS_ReadRegisterEx(os, core, 0x0, &control));
@@ -11238,6 +7688,12 @@ gckHARDWARE_DumpGPUState(
control |= (pipe << 20);
gcmkONERROR(gckOS_WriteRegisterEx(os, core, 0x0, control));
+ for (i = 0; i < gcmCOUNTOF(_dbgRegs); i += 1)
+ {
+ gcmkONERROR(_DumpDebugRegisters(os, core, &_dbgRegs[i]));
+ }
+
+ gcmkPRINT_N(0, " Other Registers:\n");
for (i = 0; i < gcmCOUNTOF(_otherRegs); i += 1)
{
gctUINT32 read;
@@ -11253,16 +7709,23 @@ gckHARDWARE_DumpGPUState(
}
}
- /* Restore control. */
- gcmkONERROR(gckOS_WriteRegisterEx(os, core, 0x0, oldControl));
-
- if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI0))
+ if (kernel->hardware->identity.chipFeatures & (1 << 4))
{
- /* FE debug register. */
- gcmkVERIFY_OK(_DumpLinkStack(os, core, &_dbgRegs[2]));
+ gctUINT32 read0, read1, write;
+
+ read0 = read1 = write = 0;
+
+ gcmkONERROR(gckOS_ReadRegisterEx(os, core, 0x43C, &read0));
+ gcmkONERROR(gckOS_ReadRegisterEx(os, core, 0x440, &read1));
+ gcmkONERROR(gckOS_ReadRegisterEx(os, core, 0x444, &write));
+
+ gcmkPRINT_N(4, " read0 = 0x%08X\n", read0);
+ gcmkPRINT_N(4, " read1 = 0x%08X\n", read1);
+ gcmkPRINT_N(4, " write = 0x%08X\n", write);
}
- _DumpFEStack(os, core, &_dbgRegs[2]);
+ /* Restore control. */
+ gcmkONERROR(gckOS_WriteRegisterEx(os, core, 0x0, oldControl));
gcmkPRINT_N(0, "**************************\n");
gcmkPRINT_N(0, "***** SW COUNTERS *****\n");
@@ -11549,11 +8012,7 @@ gckHARDWARE_GetFrameInfo(
gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
Hardware->core,
0x00000,
- ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ?
- 23:20))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 23:20) - (0 ?
- 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ?
- 23:20)))));
+ ((((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)))));
/* Read cycle registers. */
gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
@@ -11802,11 +8261,7 @@ gckHARDWARE_SetDVFSPeroid(
gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
Hardware->core,
0x0010C,
- ((((gctUINT32) (eater)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8))) | (((gctUINT32) ((gctUINT32) (period) & ((gctUINT32) ((((1 ? 15:8) - (0 ?
- 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ?
- 15:8)))));
+ ((((gctUINT32) (eater)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (period) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))));
#if READ_FROM_EATER1
/* Config eater1. */
@@ -11818,11 +8273,7 @@ gckHARDWARE_SetDVFSPeroid(
gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
Hardware->core,
0x00130,
- ((((gctUINT32) (eater1)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:16) - (0 ? 31:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:16) - (0 ? 31:16) + 1))))))) << (0 ?
- 31:16))) | (((gctUINT32) ((gctUINT32) (period1) & ((gctUINT32) ((((1 ?
- 31:16) - (0 ? 31:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:16) - (0 ? 31:16) + 1))))))) << (0 ?
- 31:16)))));
+ ((((gctUINT32) (eater1)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:16) - (0 ? 31:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:16) - (0 ? 31:16) + 1))))))) << (0 ? 31:16))) | (((gctUINT32) ((gctUINT32) (period1) & ((gctUINT32) ((((1 ? 31:16) - (0 ? 31:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:16) - (0 ? 31:16) + 1))))))) << (0 ? 31:16)))));
#endif
}
else
@@ -11854,36 +8305,12 @@ gckHARDWARE_InitDVFS(
0x0010C,
&data));
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ?
- 16:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 16:16) - (0 ?
- 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ?
- 16:16)));
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 18:18) - (0 ? 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 18:18) - (0 ? 18:18) + 1))))))) << (0 ?
- 18:18))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 18:18) - (0 ?
- 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 18:18) - (0 ? 18:18) + 1))))))) << (0 ?
- 18:18)));
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ?
- 19:19))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 19:19) - (0 ?
- 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ?
- 19:19)));
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 20:20) - (0 ? 20:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:20) - (0 ? 20:20) + 1))))))) << (0 ?
- 20:20))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 20:20) - (0 ?
- 20:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:20) - (0 ? 20:20) + 1))))))) << (0 ?
- 20:20)));
- data = ((((gctUINT32) (data)) & ~(((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)));
- data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 22:22) - (0 ? 22:22) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 22:22) - (0 ? 22:22) + 1))))))) << (0 ?
- 22:22))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 22:22) - (0 ?
- 22:22) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 22:22) - (0 ? 22:22) + 1))))))) << (0 ?
- 22:22)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 18:18) - (0 ? 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 18:18) - (0 ? 18:18) + 1))))))) << (0 ? 18:18))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 18:18) - (0 ? 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 18:18) - (0 ? 18:18) + 1))))))) << (0 ? 18:18)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ? 19:19))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ? 19:19)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 20:20) - (0 ? 20:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:20) - (0 ? 20:20) + 1))))))) << (0 ? 20:20))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 20:20) - (0 ? 20:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:20) - (0 ? 20:20) + 1))))))) << (0 ? 20:20)));
+ data = ((((gctUINT32) (data)) & ~(((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)));
+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 22:22) - (0 ? 22:22) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 22:22) - (0 ? 22:22) + 1))))))) << (0 ? 22:22))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 22:22) - (0 ? 22:22) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 22:22) - (0 ? 22:22) + 1))))))) << (0 ? 22:22)));
gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
"DVFS Configure=0x%X",
@@ -11932,12 +8359,8 @@ gckHARDWARE_PrepareFunctions(
gctUINT32 offset = 0;
gctUINT32 mmuBytes;
gctUINT32 endBytes;
- gctUINT32 flushBytes;
- gctUINT32 eventBytes;
gctUINT8_PTR logical;
gctPHYS_ADDR_T physical;
- gcsHARDWARE_FUNCTION *function;
- gctUINT8 i;
gcmkHEADER_ARG("%x", Hardware);
@@ -11945,72 +8368,36 @@ gckHARDWARE_PrepareFunctions(
gcmkVERIFY_OK(gckOS_GetPageSize(os, &Hardware->functionBytes));
-#if USE_KERNEL_VIRTUAL_BUFFERS
- if (Hardware->kernel->virtualCommandBuffer)
- {
- gcmkONERROR(gckKERNEL_AllocateVirtualCommandBuffer(
- Hardware->kernel,
- gcvFALSE,
- &Hardware->functionBytes,
- &Hardware->functionPhysical,
- &Hardware->functionLogical
- ));
-
- gcmkONERROR(gckKERNEL_GetGPUAddress(
- Hardware->kernel,
- Hardware->functionLogical,
- gcvFALSE,
- Hardware->functionPhysical,
- &Hardware->functionAddress
- ));
- }
- else
-#endif
- {
- /* Allocate a command buffer. */
- gcmkONERROR(gckOS_AllocateNonPagedMemory(
- os,
- gcvFALSE,
- &Hardware->functionBytes,
- &Hardware->functionPhysical,
- &Hardware->functionLogical
- ));
-
- gcmkONERROR(gckOS_GetPhysicalAddress(
- os,
- Hardware->functionLogical,
- &physical
- ));
-
- gcmkSAFECASTPHYSADDRT(Hardware->functionAddress, physical);
-
- gcmkONERROR(gckMMU_FillFlatMapping(
- Hardware->kernel->mmu,
- Hardware->functionAddress,
- Hardware->functionBytes
- ));
- }
+ /* Allocate a command buffer. */
+ gcmkONERROR(gckOS_AllocateNonPagedMemory(
+ os,
+ gcvFALSE,
+ &Hardware->functionBytes,
+ &Hardware->functionPhysical,
+ &Hardware->functionLogical
+ ));
- gcmkONERROR(gckHARDWARE_End(
- Hardware,
- gcvNULL,
- &endBytes
+ gcmkONERROR(gckOS_GetPhysicalAddress(
+ os,
+ Hardware->functionLogical,
+ &physical
));
+ gcmkSAFECASTPHYSADDRT(Hardware->functionAddress, physical);
+
if (Hardware->mmuVersion > 0)
{
- function = &Hardware->functions[gcvHARDWARE_FUNCTION_MMU];
-
/* MMU configure command sequence. */
- function->logical = logical = (gctUINT8_PTR)Hardware->functionLogical + offset;
+ logical = (gctUINT8_PTR)Hardware->functionLogical + offset;
- function->address = Hardware->functionAddress + offset;
+ Hardware->functions[gcvHARDWARE_FUNCTION_MMU].address
+ = Hardware->functionAddress + offset;
gcmkONERROR(gckHARDWARE_SetMMUStates(
Hardware,
Hardware->kernel->mmu->mtlbLogical,
gcvMMU_MODE_4K,
- Hardware->kernel->mmu->safePageLogical,
+ (gctUINT8_PTR)Hardware->kernel->mmu->mtlbLogical + gcdMMU_MTLB_SIZE,
logical,
&mmuBytes
));
@@ -12021,98 +8408,25 @@ gckHARDWARE_PrepareFunctions(
gcmkONERROR(gckHARDWARE_End(
Hardware,
- logical,
+ gcvNULL,
&endBytes
));
-#if USE_KERNEL_VIRTUAL_BUFFERS
- if (Hardware->kernel->virtualCommandBuffer)
- {
- gcmkONERROR(gckKERNEL_GetGPUAddress(
- Hardware->kernel,
- logical,
- gcvFALSE,
- Hardware->functionPhysical,
- &Hardware->lastEnd
- ));
- }
-#endif
-
- offset += endBytes;
-
- function->bytes = mmuBytes + endBytes;
-
- function->endAddress = function->address + mmuBytes;
- function->endLogical = function->logical + mmuBytes;
- }
-
- /*
- ** All cache flush command sequence.
- */
- function = &Hardware->functions[gcvHARDWARE_FUNCTION_FLUSH];
-
- function->logical = logical = (gctUINT8_PTR)Hardware->functionLogical + offset;
-
- function->address = Hardware->functionAddress + offset;
-
- /* Get the size of the flush command. */
- gcmkONERROR(gckHARDWARE_Flush(Hardware, gcvFLUSH_ALL, gcvNULL, &flushBytes));
-
- /* Append a flush. */
- gcmkONERROR(gckHARDWARE_Flush(Hardware, gcvFLUSH_ALL, logical, &flushBytes));
-
- offset += flushBytes;
-
- logical = (gctUINT8_PTR)Hardware->functionLogical + offset;
-
- gcmkONERROR(gckHARDWARE_End(Hardware, logical, &endBytes));
-
-#if USE_KERNEL_VIRTUAL_BUFFERS
- if (Hardware->kernel->virtualCommandBuffer)
- {
- gcmkONERROR(gckKERNEL_GetGPUAddress(
- Hardware->kernel,
+ gcmkONERROR(gckHARDWARE_End(
+ Hardware,
logical,
- gcvFALSE,
- Hardware->functionPhysical,
- &Hardware->lastEnd
+ &endBytes
));
- }
-#endif
-
- offset += endBytes;
-
- function->bytes = flushBytes + endBytes;
-
- function->endAddress = function->address + flushBytes;
- function->endLogical = function->logical + flushBytes;
- /*
- ** BLT Engine event command
- */
- if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_BLT_ENGINE))
- {
- function = &Hardware->functions[gcvHARDWARE_FUNCTION_BLT_EVENT];
-
- function->logical = logical = (gctUINT8_PTR)Hardware->functionLogical + offset;
- function->address = Hardware->functionAddress + offset;
-
- gcmkONERROR(gckHARDWARE_Event(Hardware, gcvNULL, 0, gcvKERNEL_BLT, &eventBytes));
+ offset += endBytes;
- for (i = 0; i < 29; i++)
- {
- gcmkONERROR(gckHARDWARE_Event(
- Hardware,
- logical + i * eventBytes,
- i,
- gcvKERNEL_BLT,
- &eventBytes
- ));
+ Hardware->functions[gcvHARDWARE_FUNCTION_MMU].bytes = mmuBytes + endBytes;
- offset += eventBytes;
- }
+ Hardware->functions[gcvHARDWARE_FUNCTION_MMU].endAddress =
+ Hardware->functions[gcvHARDWARE_FUNCTION_MMU].address + mmuBytes;
- function->bytes = eventBytes * 29;
+ Hardware->functions[gcvHARDWARE_FUNCTION_MMU].endLogical =
+ logical + mmuBytes;
}
gcmkASSERT(offset < Hardware->functionBytes);
@@ -12166,228 +8480,6 @@ gckHARDWARE_QueryStateTimer(
}
gceSTATUS
-gckHARDWARE_WaitFence(
- IN gckHARDWARE Hardware,
- IN gctPOINTER Logical,
- IN gctUINT64 FenceData,
- IN gctUINT32 FenceAddress,
- OUT gctUINT32 *Bytes
- )
-{
- gctUINT32_PTR logical = (gctUINT32_PTR)Logical;
-
- gctUINT32 dataLow = (gctUINT32)FenceData;
- gctUINT32 dataHigh = (gctUINT32)(FenceData >> 32);
-
- if (logical)
- {
- *logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E26) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
-
- *logical++
- = dataHigh;
-
- *logical++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x01FA) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
-
- *logical++
- = dataLow;
-
- *logical++
- = ((((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) (0x0F & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (Hardware->waitCount) & ((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 17:16) - (0 ? 17:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:16) - (0 ? 17:16) + 1))))))) << (0 ?
- 17:16))) | (((gctUINT32) (0x2 & ((gctUINT32) ((((1 ? 17:16) - (0 ? 17:16) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 17:16) - (0 ? 17:16) + 1))))))) << (0 ? 17:16)));
-
- *logical++
- = FenceAddress;
- }
- else
- {
- *Bytes = 6 * gcmSIZEOF(gctUINT32);
- }
-
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gckHARDWARE_UpdateContextID(
- IN gckHARDWARE Hardware
- )
-{
- static gcsiDEBUG_REGISTERS fe = { "FE", 0x470, 0, 0x450, 256, 0x1, 0x00 };
- gckOS os = Hardware->os;
- gceCORE core = Hardware->core;
- gctUINT32 contextIDLow, contextIDHigh;
- gceSTATUS status;
-
- gcmkONERROR(gckOS_WriteRegisterEx(os, core, fe.index, 0x53 << fe.shift));
- gcmkONERROR(gckOS_ReadRegisterEx(os, core, fe.data, &contextIDLow));
-
- gcmkONERROR(gckOS_WriteRegisterEx(os, core, fe.index, 0x54 << fe.shift));
- gcmkONERROR(gckOS_ReadRegisterEx(os, core, fe.data, &contextIDHigh));
-
- Hardware->contextID = ((gctUINT64)contextIDHigh << 32) + contextIDLow;
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-
-gceSTATUS
-gckFE_Initialize(
- IN gckHARDWARE Hardware,
- OUT gckFE FE
- )
-{
- gceSTATUS status;
- gctUINT32 data;
-
- gcmkHEADER();
-
- gckOS_ZeroMemory(FE, gcmSIZEOF(gcsFE));
-
- gcmkVERIFY_OK(gckOS_ReadRegisterEx(
- Hardware->os,
- Hardware->core,
- 0x007E4,
- &data
- ));
-
- gcmkONERROR(gckOS_AtomConstruct(Hardware->os, &FE->freeDscriptors));
-
- data = (((((gctUINT32) (data)) >> (0 ? 6:0)) & ((gctUINT32) ((((1 ? 6:0) - (0 ? 6:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:0) - (0 ? 6:0) + 1)))))) );
-
- gcmkTRACE_ZONE(gcvLEVEL_INFO, _GC_OBJ_ZONE, "free descriptor=%d", data);
-
- gcmkONERROR(gckOS_AtomSet(Hardware->os, FE->freeDscriptors, data));
-
- /* Enable interrupts. */
- gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x000D8, ~0U);
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
-
- if (FE->freeDscriptors)
- {
- gckOS_AtomDestroy(Hardware->os, FE->freeDscriptors);
- }
-
- gcmkFOOTER();
- return status;
-}
-
-void
-gckFE_UpdateAvaiable(
- IN gckHARDWARE Hardware,
- OUT gckFE FE
- )
-{
- gctUINT32 data;
- gctINT32 oldValue;
-
- gcmkVERIFY_OK(gckOS_ReadRegisterEx(
- Hardware->os,
- Hardware->core,
- 0x007E4,
- &data
- ));
-
- data = (((((gctUINT32) (data)) >> (0 ? 6:0)) & ((gctUINT32) ((((1 ? 6:0) - (0 ? 6:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:0) - (0 ? 6:0) + 1)))))) );
-
- while (data--)
- {
- gckOS_AtomIncrement(Hardware->os, FE->freeDscriptors, &oldValue);
- }
-}
-
-gceSTATUS
-gckFE_ReserveSlot(
- IN gckHARDWARE Hardware,
- IN gckFE FE,
- OUT gctBOOL * Available
- )
-{
- gctINT32 oldValue;
-
- gckOS_AtomDecrement(Hardware->os, FE->freeDscriptors, &oldValue);
-
- if (oldValue > 0)
- {
- /* Get one slot. */
- *Available = gcvTRUE;
- }
- else
- {
- /* No available slot, restore decreased one.*/
- gckOS_AtomIncrement(Hardware->os, FE->freeDscriptors, &oldValue);
- *Available = gcvFALSE;
- }
-
- return gcvSTATUS_OK;
-}
-
-void
-gckFE_Execute(
- IN gckHARDWARE Hardware,
- IN gckFE FE,
- IN gcsFEDescriptor * Desc
- )
-{
- gckOS_WriteRegisterEx(
- Hardware->os,
- Hardware->core,
- 0x007DC,
- Desc->start
- );
-
- gckOS_WriteRegisterEx(
- Hardware->os,
- Hardware->core,
- 0x007E0,
- Desc->end
- );
-}
-
-gceSTATUS
gckHARDWARE_DummyDraw(
IN gckHARDWARE Hardware,
IN gctPOINTER Logical,
@@ -12398,929 +8490,132 @@ gckHARDWARE_DummyDraw(
{
gctUINT32 dummyDraw_gc400[] = {
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0193) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0193) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
0x000000,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0194) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0194) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
0,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0180) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:0) - (0 ?
- 3:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:0) - (0 ? 3:0) + 1))))))) << (0 ?
- 3:0))) | (((gctUINT32) (0x8 & ((gctUINT32) ((((1 ? 3:0) - (0 ? 3:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 3:0) - (0 ? 3:0) + 1))))))) << (0 ? 3:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 13:12) - (0 ?
- 13:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:12) - (0 ? 13:12) + 1))))))) << (0 ?
- 13:12))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 13:12) - (0 ?
- 13:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:12) - (0 ? 13:12) + 1))))))) << (0 ?
- 13:12)))
- | ((((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)))
- | ((((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) (4 * gcmSIZEOF(float)) & ((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ?
- 31:24)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:7) - (0 ?
- 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ?
- 7:7))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E05) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:0) - (0 ?
- 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ?
- 1:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0202) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:0) - (0 ?
- 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ?
- 5:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 5:0) - (0 ?
- 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ?
- 5:0))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0208) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:0) - (0 ?
- 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ?
- 5:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 5:0) - (0 ?
- 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ?
- 5:0))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0201) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:0) - (0 ?
- 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ?
- 5:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 5:0) - (0 ?
- 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ?
- 5:0))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0204) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:0) - (0 ?
- 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ?
- 5:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 5:0) - (0 ?
- 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ?
- 5:0))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x1000) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0180) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
+
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:0) - (0 ? 3:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:0) - (0 ? 3:0) + 1))))))) << (0 ? 3:0))) | (((gctUINT32) (0x8 & ((gctUINT32) ((((1 ? 3:0) - (0 ? 3:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:0) - (0 ? 3:0) + 1))))))) << (0 ? 3:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 13:12) - (0 ? 13:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:12) - (0 ? 13:12) + 1))))))) << (0 ? 13:12))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 13:12) - (0 ? 13:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:12) - (0 ? 13:12) + 1))))))) << (0 ? 13:12)))
+ | ((((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)))
+ | ((((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) (4 * gcmSIZEOF(float)) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))),
+
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E05) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))),
+
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0202) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:0) - (0 ? 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ? 5:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 5:0) - (0 ? 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ? 5:0))),
+
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0208) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:0) - (0 ? 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ? 5:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 5:0) - (0 ? 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ? 5:0))),
+
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0201) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:0) - (0 ? 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ? 5:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 5:0) - (0 ? 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ? 5:0))),
+
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0204) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:0) - (0 ? 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ? 5:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 5:0) - (0 ? 5:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ? 5:0))),
+
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x1000) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
0x0, 0x0, 0x0, 0x0,
0xDEADDEAD,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0203) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 6:0) - (0 ?
- 6:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:0) - (0 ? 6:0) + 1))))))) << (0 ?
- 6:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 6:0) - (0 ?
- 6:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:0) - (0 ? 6:0) + 1))))))) << (0 ?
- 6:0))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x020E) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0203) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 6:0) - (0 ? 6:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:0) - (0 ? 6:0) + 1))))))) << (0 ? 6:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 6:0) - (0 ? 6:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:0) - (0 ? 6:0) + 1))))))) << (0 ? 6:0))),
+
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x020E) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
0,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0200) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0200) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
1,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x020C) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x020C) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
0x000F003F,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x028C) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 11:8) - (0 ?
- 11:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:8) - (0 ? 11:8) + 1))))))) << (0 ?
- 11:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 11:8) - (0 ?
- 11:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:8) - (0 ? 11:8) + 1))))))) << (0 ?
- 11:8))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0500) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:0) - (0 ?
- 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ?
- 1:0))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x028D) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 13:12) - (0 ?
- 13:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:12) - (0 ? 13:12) + 1))))))) << (0 ?
- 13:12))) | (((gctUINT32) (0x2 & ((gctUINT32) ((((1 ? 13:12) - (0 ? 13:12) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 13:12) - (0 ? 13:12) + 1))))))) << (0 ? 13:12)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:8) - (0 ?
- 9:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:8) - (0 ? 9:8) + 1))))))) << (0 ?
- 9:8))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 9:8) - (0 ? 9:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 9:8) - (0 ? 9:8) + 1))))))) << (0 ? 9:8)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 17:16) - (0 ?
- 17:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:16) - (0 ? 17:16) + 1))))))) << (0 ?
- 17:16))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 17:16) - (0 ? 17:16) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 17:16) - (0 ? 17:16) + 1))))))) << (0 ? 17:16))),
-
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0300) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x028C) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 11:8) - (0 ? 11:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:8) - (0 ? 11:8) + 1))))))) << (0 ? 11:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 11:8) - (0 ? 11:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:8) - (0 ? 11:8) + 1))))))) << (0 ? 11:8))),
+
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0500) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))),
+
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x028D) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 13:12) - (0 ? 13:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:12) - (0 ? 13:12) + 1))))))) << (0 ? 13:12))) | (((gctUINT32) (0x2 & ((gctUINT32) ((((1 ? 13:12) - (0 ? 13:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:12) - (0 ? 13:12) + 1))))))) << (0 ? 13:12)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:8) - (0 ? 9:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:8) - (0 ? 9:8) + 1))))))) << (0 ? 9:8))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 9:8) - (0 ? 9:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:8) - (0 ? 9:8) + 1))))))) << (0 ? 9:8)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 17:16) - (0 ? 17:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:16) - (0 ? 17:16) + 1))))))) << (0 ? 17:16))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 17:16) - (0 ? 17:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:16) - (0 ? 17:16) + 1))))))) << (0 ? 17:16))),
+
+
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0300) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
0,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0301) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0301) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
0,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0302) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0302) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
0,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0303) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0303) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
0,
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0289) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:0) - (0 ?
- 3:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:0) - (0 ? 3:0) + 1))))))) << (0 ?
- 3:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:0) - (0 ? 3:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 3:0) - (0 ? 3:0) + 1))))))) << (0 ? 3:0))),
-
- ((((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) (0x05 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:0) - (0 ?
- 3:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:0) - (0 ? 3:0) + 1))))))) << (0 ?
- 3:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:0) - (0 ? 3:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 3:0) - (0 ? 3:0) + 1))))))) << (0 ? 3:0))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:0) - (0 ?
- 23:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:0) - (0 ? 23:0) + 1))))))) << (0 ?
- 23:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:0) - (0 ?
- 23:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:0) - (0 ? 23:0) + 1))))))) << (0 ?
- 23:0))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:0) - (0 ?
- 23:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:0) - (0 ? 23:0) + 1))))))) << (0 ?
- 23:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:0) - (0 ?
- 23:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:0) - (0 ? 23:0) + 1))))))) << (0 ?
- 23:0))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0289) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:0) - (0 ? 3:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:0) - (0 ? 3:0) + 1))))))) << (0 ? 3:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:0) - (0 ? 3:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:0) - (0 ? 3:0) + 1))))))) << (0 ? 3:0))),
+
+ ((((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) (0x05 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:0) - (0 ? 3:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:0) - (0 ? 3:0) + 1))))))) << (0 ? 3:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:0) - (0 ? 3:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:0) - (0 ? 3:0) + 1))))))) << (0 ? 3:0))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:0) - (0 ? 23:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:0) - (0 ? 23:0) + 1))))))) << (0 ? 23:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:0) - (0 ? 23:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:0) - (0 ? 23:0) + 1))))))) << (0 ? 23:0))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:0) - (0 ? 23:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:0) - (0 ? 23:0) + 1))))))) << (0 ? 23:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:0) - (0 ? 23:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:0) - (0 ? 23:0) + 1))))))) << (0 ? 23:0))),
};
gctUINT32 dummyDraw_v60[] = {
- /* Semaphore from FE to PE. */
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ?
- 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))),
-
- /* Stall from FE to PE. */
- ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ?
- 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x021A) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((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) ((gctUINT32) (0x0) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E06) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:0) - (0 ?
- 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ?
- 1:0))) | (((gctUINT32) ((gctUINT32) (0x0) & ((gctUINT32) ((((1 ? 1:0) - (0 ?
- 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ?
- 1:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 14:12) - (0 ? 14:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 14:12) - (0 ? 14:12) + 1))))))) << (0 ?
- 14:12))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 14:12) - (0 ? 14:12) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 14:12) - (0 ? 14:12) + 1))))))) << (0 ? 14:12)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 17:16) - (0 ? 17:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 17:16) - (0 ? 17:16) + 1))))))) << (0 ?
- 17:16))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 17:16) - (0 ? 17:16) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 17:16) - (0 ? 17:16) + 1))))))) << (0 ? 17:16)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 7:4) - (0 ? 7:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:4) - (0 ? 7:4) + 1))))))) << (0 ?
- 7:4))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:4) - (0 ?
- 7:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:4) - (0 ? 7:4) + 1))))))) << (0 ?
- 7:4))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0401) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- (gctUINT32)~0x0,
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x020C) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- 0xffffffff,
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E07) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- 2,
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E08) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- 2,
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0420) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:0) - (0 ?
- 2:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:0) - (0 ? 2:0) + 1))))))) << (0 ?
- 2:0))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 2:0) - (0 ?
- 2:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:0) - (0 ? 2:0) + 1))))))) << (0 ?
- 2:0))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0424) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- 1,
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0403) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- 3,
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E21) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:0) - (0 ?
- 2:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:0) - (0 ? 2:0) + 1))))))) << (0 ?
- 2:0))) | (((gctUINT32) (0x2 & ((gctUINT32) ((((1 ? 2:0) - (0 ? 2:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 2:0) - (0 ? 2:0) + 1))))))) << (0 ? 2:0))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x040A) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- 0,
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x2000) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1 << 2) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- 0x07801033,0x3fc00900,0x00000040,0x00390008,
- (gctUINT32)~0,
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x021F) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- 0x0,
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0240) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:0) - (0 ?
- 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ?
- 1:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 6:4) - (0 ? 6:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:4) - (0 ? 6:4) + 1))))))) << (0 ?
- 6:4))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 6:4) - (0 ? 6:4) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 6:4) - (0 ? 6:4) + 1))))))) << (0 ? 6:4)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1))))))) << (0 ?
- 8:8))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1))))))) << (0 ? 8:8)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 26:24) - (0 ? 26:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:24) - (0 ? 26:24) + 1))))))) << (0 ?
- 26:24))) | (((gctUINT32) (0x3 & ((gctUINT32) ((((1 ? 26:24) - (0 ? 26:24) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 26:24) - (0 ? 26:24) + 1))))))) << (0 ? 26:24))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0241) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((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) (31) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:16) - (0 ? 31:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:16) - (0 ? 31:16) + 1))))))) << (0 ?
- 31:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:16) - (0 ?
- 31:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:16) - (0 ? 31:16) + 1))))))) << (0 ?
- 31:16))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0244) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:0) - (0 ?
- 9:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:0) - (0 ? 9:0) + 1))))))) << (0 ?
- 9:0))) | (((gctUINT32) ((gctUINT32) (31) & ((gctUINT32) ((((1 ? 9:0) - (0 ?
- 9:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:0) - (0 ? 9:0) + 1))))))) << (0 ?
- 9:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:16) - (0 ? 31:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:16) - (0 ? 31:16) + 1))))))) << (0 ?
- 31:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:16) - (0 ?
- 31:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:16) - (0 ? 31:16) + 1))))))) << (0 ?
- 31:16))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0247) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
-
- (32+(4*(((gcsFEATURE_DATABASE *)Hardware->featureDatabase)->NumShaderCores)-1))/(4*(((gcsFEATURE_DATABASE *)Hardware->featureDatabase)->NumShaderCores)),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0248) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- 1,
+ /* disbale first.*/
+ ((((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) (0x03 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))),
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x03 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ?
- 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ?
- 5:5))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))),
-
- /* Semaphore from FE to PE. */
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)))
- | ((((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) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ?
- 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))),
-
- /* Stall from FE to PE. */
- ((((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) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))),
-
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ?
- 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))),
-
- /* Invalidate I cache.*/
- ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ?
- 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x022C) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))),
- ((((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) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 1:1) - (0 ?
- 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ?
- 2:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 2:2) - (0 ?
- 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ?
- 2:2)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ?
- 3:3))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 3:3) - (0 ?
- 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ?
- 3:3)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ?
- 4:4))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 4:4) - (0 ?
- 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ?
- 4:4))),
};
gctUINT32 bytes = 0;
diff --git a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.h b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.h
index 0cf12da75ed2..317cb8ea7927 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.h
@@ -68,8 +68,7 @@ typedef enum {
gcvHARDWARE_FUNCTION_MMU,
gcvHARDWARE_FUNCTION_FLUSH,
- /* BLT engine command sequence. */
- gcvHARDWARE_FUNCTION_BLT_EVENT,
+ gcvHARDWARE_FUNCTION_DUMMY_DRAW,
gcvHARDWARE_FUNCTION_NUM,
}
gceHARDWARE_FUNCTION;
@@ -80,9 +79,6 @@ typedef struct _gcsHARWARE_FUNCTION
/* Entry of the function. */
gctUINT32 address;
- /* CPU address of the function. */
- gctUINT8_PTR logical;
-
/* Bytes of the function. */
gctUINT32 bytes;
@@ -104,54 +100,6 @@ typedef struct _gcsSTATETIMER
}
gcsSTATETIMER;
-typedef struct _gcsHARDWARE_SIGNATURE
-{
- /* Chip model. */
- gceCHIPMODEL chipModel;
-
- /* Revision value.*/
- gctUINT32 chipRevision;
-
- /* Supported feature fields. */
- gctUINT32 chipFeatures;
-
- /* Supported minor feature fields. */
- gctUINT32 chipMinorFeatures;
-
- /* Supported minor feature 1 fields. */
- gctUINT32 chipMinorFeatures1;
-
- /* Supported minor feature 2 fields. */
- gctUINT32 chipMinorFeatures2;
-}
-gcsHARDWARE_SIGNATURE;
-
-typedef struct _gcsMMU_TABLE_ARRAY_ENTRY
-{
- gctUINT32 low;
- gctUINT32 high;
-}
-gcsMMU_TABLE_ARRAY_ENTRY;
-
-typedef struct _gcsHARDWARE_PAGETABLE_ARRAY
-{
- /* Number of entries in page table array. */
- gctUINT num;
-
- /* Size in bytes of array. */
- gctSIZE_T size;
-
- /* Physical address of array. */
- gctPHYS_ADDR_T address;
-
- /* Memory descriptor. */
- gctPHYS_ADDR physical;
-
- /* Logical address of array. */
- gctPOINTER logical;
-}
-gcsHARDWARE_PAGETABLE_ARRAY;
-
/* gckHARDWARE object. */
struct _gckHARDWARE
{
@@ -177,9 +125,6 @@ struct _gckHARDWARE
/* Big endian */
gctBOOL bigEndian;
- /* Base address. */
- gctUINT32 baseAddress;
-
/* Chip status */
gctPOINTER powerMutex;
gctUINT32 powerProcess;
@@ -217,16 +162,16 @@ struct _gckHARDWARE
gctPOINTER pageTableDirty;
#if gcdLINK_QUEUE_SIZE
- struct _gckQUEUE linkQueue;
+ struct _gckLINKQUEUE linkQueue;
#endif
gctBOOL powerManagement;
+ gctBOOL powerManagementLock;
gctBOOL gpuProfiler;
- gctBOOL stallFEPrefetch;
+ gctBOOL endAfterFlushMmuCache;
gctUINT32 minFscaleValue;
- gctUINT waitCount;
gctPOINTER pendingEvent;
@@ -241,66 +186,8 @@ struct _gckHARDWARE
gcsSTATETIMER powerStateTimer;
gctUINT32 executeCount;
gctUINT32 lastExecuteAddress;
-
- /* Head for hardware list in gckMMU. */
- gcsLISTHEAD mmuHead;
-
- gctPOINTER featureDatabase;
-
- gcsHARDWARE_SIGNATURE signature;
-
- gctUINT32 maxOutstandingReads;
-
- gcsHARDWARE_PAGETABLE_ARRAY pagetableArray;
-
- gceSECURE_MODE secureMode;
-
- gctUINT64 contextID;
};
-typedef struct _gcsFEDescriptor
-{
- gctUINT32 start;
- gctUINT32 end;
-}
-gcsFEDescriptor;
-
-typedef struct _gcsFE * gckFE;
-typedef struct _gcsFE
-{
- gckOS os;
-
- /* Number of free descriptors. */
- gctPOINTER freeDscriptors;
-}
-gcsFE;
-
-gceSTATUS
-gckFE_Initialize(
- IN gckHARDWARE Hardware,
- OUT gckFE FE
- );
-
-gceSTATUS
-gckFE_ReserveSlot(
- IN gckHARDWARE Hardware,
- IN gckFE FE,
- OUT gctBOOL * Available
- );
-
-void
-gckFE_UpdateAvaiable(
- IN gckHARDWARE Hardware,
- OUT gckFE FE
- );
-
-void
-gckFE_Execute(
- IN gckHARDWARE Hardware,
- IN gckFE FE,
- IN gcsFEDescriptor * Desc
- );
-
gceSTATUS
gckHARDWARE_GetBaseAddress(
IN gckHARDWARE Hardware,
@@ -320,13 +207,6 @@ gckHARDWARE_GetFrameInfo(
OUT gcsHAL_FRAME_INFO * FrameInfo
);
-#define gcmkWRITE_MEMORY(logical, data) \
- do { \
- gcmkVERIFY_OK(gckOS_WriteMemory(os, logical, data)); \
- logical++; \
- }\
- while (0) ; \
-
gceSTATUS
gckHARDWARE_DummyDraw(
IN gckHARDWARE Hardware,
diff --git a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_recorder.c b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_recorder.c
index 07b8ba070bb1..092bbccfd3d1 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_recorder.c
+++ b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_recorder.c
@@ -145,7 +145,6 @@ typedef struct _gcsPARSER
gctUINT32 skipCount;
gctBOOL allow;
- gctBOOL stop;
/* Callback used by parser to handle a command. */
gckPARSER_HANDLER commandHandler;
@@ -157,7 +156,7 @@ typedef struct _gcsMIRROR
gctUINT32_PTR logical[gcdNUM_RECORDS];
gctUINT32 bytes;
gcsSTATE_MAP_PTR map;
- gctSIZE_T maxState;
+ gctUINT32 maxState;
}
gcsMIRROR;
@@ -309,16 +308,6 @@ _GetCommand(
Parser->skipCount = 0;
break;
- case 0x07:
- Parser->currentCmdBufferAddr = Parser->currentCmdBufferAddr + 8;
- Parser->skipCount = 0;
- break;
-
- case 0x08:
- /* Commands after LINK isn't executed, skip them. */
- Parser->stop = gcvTRUE;
- break;
-
default:
/* Unknown command is a risk. */
Parser->allow = gcvFALSE;
@@ -365,7 +354,6 @@ gckPARSER_Parse(
parser->currentCmdBufferAddr = (gctUINT8_PTR)Buffer;
parser->skip = 0;
parser->allow = gcvTRUE;
- parser->stop = gcvFALSE;
/* Go through command buffer until reaching the end
** or meeting an error. */
@@ -375,10 +363,7 @@ gckPARSER_Parse(
_ParseCommand(parser);
}
- while ((parser->currentCmdBufferAddr < end)
- && (parser->allow == gcvTRUE)
- && (parser->stop == gcvFALSE)
- );
+ while ((parser->currentCmdBufferAddr < end) && (parser->allow == gcvTRUE));
if (parser->allow == gcvFALSE)
{
@@ -484,7 +469,7 @@ gckRECORDER_Construct(
gceSTATUS status;
gckCONTEXT context = gcvNULL;
gckRECORDER recorder = gcvNULL;
- gctSIZE_T mapSize;
+ gctUINT32 mapSize;
gctUINT i;
gctBOOL virtualCommandBuffer = Hardware->kernel->virtualCommandBuffer;
diff --git a/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_command_vg.c b/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_command_vg.c
index ee1d294bfcf3..7d525120b027 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_command_vg.c
+++ b/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_command_vg.c
@@ -103,11 +103,7 @@ gckVGCOMMAND_InitializeInfo(
Command->info.commandAlignment = 8;
/* Determine command alignment address mask. */
- Command->info.addressMask = ((((gctUINT32) (Command->info.addressAlignment - 1)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ?
- 1:0))) | (((gctUINT32) ((gctUINT32) (0 ) & ((gctUINT32) ((((1 ? 1:0) - (0 ?
- 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ?
- 1:0)));
+ Command->info.addressMask = ((((gctUINT32) (Command->info.addressAlignment - 1)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))) | (((gctUINT32) ((gctUINT32) (0 ) & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0)));
/* Query the number of bytes needed by the STATE command. */
gcmkERR_BREAK(gckVGCOMMAND_StateCommand(
@@ -235,25 +231,10 @@ gckVGCOMMAND_StateCommand(
/* Append STATE. */
buffer[0]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ?
- 31:28))) | (((gctUINT32) (0x3 & ((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 11:0) - (0 ? 11:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:0) - (0 ? 11:0) + 1))))))) << (0 ?
- 11:0))) | (((gctUINT32) ((gctUINT32) (Address) & ((gctUINT32) ((((1 ? 11:0) - (0 ?
- 11:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:0) - (0 ? 11:0) + 1))))))) << (0 ?
- 11:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 27:16) - (0 ? 27:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:16) - (0 ? 27:16) + 1))))))) << (0 ?
- 27:16))) | (((gctUINT32) ((gctUINT32) (Count) & ((gctUINT32) ((((1 ? 27:16) - (0 ?
- 27:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:16) - (0 ? 27:16) + 1))))))) << (0 ?
- 27:16)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 13:12) - (0 ? 13:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:12) - (0 ? 13:12) + 1))))))) << (0 ?
- 13:12))) | (((gctUINT32) ((gctUINT32) (Pipe) & ((gctUINT32) ((((1 ? 13:12) - (0 ?
- 13:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:12) - (0 ? 13:12) + 1))))))) << (0 ?
- 13:12)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28))) | (((gctUINT32) (0x3 & ((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 11:0) - (0 ? 11:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:0) - (0 ? 11:0) + 1))))))) << (0 ? 11:0))) | (((gctUINT32) ((gctUINT32) (Address) & ((gctUINT32) ((((1 ? 11:0) - (0 ? 11:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:0) - (0 ? 11:0) + 1))))))) << (0 ? 11:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 27:16) - (0 ? 27:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:16) - (0 ? 27:16) + 1))))))) << (0 ? 27:16))) | (((gctUINT32) ((gctUINT32) (Count) & ((gctUINT32) ((((1 ? 27:16) - (0 ? 27:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:16) - (0 ? 27:16) + 1))))))) << (0 ? 27:16)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 13:12) - (0 ? 13:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:12) - (0 ? 13:12) + 1))))))) << (0 ? 13:12))) | (((gctUINT32) ((gctUINT32) (Pipe) & ((gctUINT32) ((((1 ? 13:12) - (0 ? 13:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:12) - (0 ? 13:12) + 1))))))) << (0 ? 13:12)));
}
if (Bytes != gcvNULL)
@@ -273,20 +254,9 @@ gckVGCOMMAND_StateCommand(
/* Append LOAD_STATE. */
buffer[0]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (Count) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)))
- | ((((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) (Address) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (Count) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)))
+ | ((((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) (Address) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
}
if (Bytes != gcvNULL)
@@ -361,26 +331,13 @@ gckVGCOMMAND_RestartCommand(
/* Determine Begin/End flag. */
beginEndMark = (FetchCount > 0)
- ? ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 24:24) - (0 ? 24:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 24:24) - (0 ? 24:24) + 1))))))) << (0 ?
- 24:24))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 24:24) - (0 ? 24:24) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 24:24) - (0 ? 24:24) + 1))))))) << (0 ? 24:24)))
- : ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 24:24) - (0 ? 24:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 24:24) - (0 ? 24:24) + 1))))))) << (0 ?
- 24:24))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 24:24) - (0 ? 24:24) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 24:24) - (0 ? 24:24) + 1))))))) << (0 ? 24:24)));
+ ? ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 24:24) - (0 ? 24:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 24:24) - (0 ? 24:24) + 1))))))) << (0 ? 24:24))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 24:24) - (0 ? 24:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 24:24) - (0 ? 24:24) + 1))))))) << (0 ? 24:24)))
+ : ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 24:24) - (0 ? 24:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 24:24) - (0 ? 24:24) + 1))))))) << (0 ? 24:24))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 24:24) - (0 ? 24:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 24:24) - (0 ? 24:24) + 1))))))) << (0 ? 24:24)));
/* Append RESTART. */
buffer[0]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ?
- 31:28))) | (((gctUINT32) (0x9 & ((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 20:0) - (0 ? 20:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:0) - (0 ? 20:0) + 1))))))) << (0 ?
- 20:0))) | (((gctUINT32) ((gctUINT32) (FetchCount) & ((gctUINT32) ((((1 ?
- 20:0) - (0 ? 20:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:0) - (0 ? 20:0) + 1))))))) << (0 ?
- 20:0)))
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28))) | (((gctUINT32) (0x9 & ((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 20:0) - (0 ? 20:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:0) - (0 ? 20:0) + 1))))))) << (0 ? 20:0))) | (((gctUINT32) ((gctUINT32) (FetchCount) & ((gctUINT32) ((((1 ? 20:0) - (0 ? 20:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:0) - (0 ? 20:0) + 1))))))) << (0 ? 20:0)))
| beginEndMark;
buffer[1]
@@ -464,15 +421,8 @@ gckVGCOMMAND_FetchCommand(
/* Append FETCH. */
buffer[0]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ?
- 31:28))) | (((gctUINT32) (0x5 & ((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 20:0) - (0 ? 20:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:0) - (0 ? 20:0) + 1))))))) << (0 ?
- 20:0))) | (((gctUINT32) ((gctUINT32) (FetchCount) & ((gctUINT32) ((((1 ?
- 20:0) - (0 ? 20:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:0) - (0 ? 20:0) + 1))))))) << (0 ?
- 20:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28))) | (((gctUINT32) (0x5 & ((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 20:0) - (0 ? 20:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:0) - (0 ? 20:0) + 1))))))) << (0 ? 20:0))) | (((gctUINT32) ((gctUINT32) (FetchCount) & ((gctUINT32) ((((1 ? 20:0) - (0 ? 20:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:0) - (0 ? 20:0) + 1))))))) << (0 ? 20:0)));
buffer[1]
= gcmkFIXADDRESS(FetchAddress);
@@ -495,15 +445,8 @@ gckVGCOMMAND_FetchCommand(
/* Append LINK. */
buffer[0]
- = ((((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) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (FetchCount) & ((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x08 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (FetchCount) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)));
buffer[1]
= gcmkFIXADDRESS(FetchAddress);
@@ -580,15 +523,8 @@ gckVGCOMMAND_CallCommand(
/* Append CALL. */
buffer[0]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ?
- 31:28))) | (((gctUINT32) (0x6 & ((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 20:0) - (0 ? 20:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:0) - (0 ? 20:0) + 1))))))) << (0 ?
- 20:0))) | (((gctUINT32) ((gctUINT32) (FetchCount) & ((gctUINT32) ((((1 ?
- 20:0) - (0 ? 20:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:0) - (0 ? 20:0) + 1))))))) << (0 ?
- 20:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28))) | (((gctUINT32) (0x6 & ((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 20:0) - (0 ? 20:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:0) - (0 ? 20:0) + 1))))))) << (0 ? 20:0))) | (((gctUINT32) ((gctUINT32) (FetchCount) & ((gctUINT32) ((((1 ? 20:0) - (0 ? 20:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:0) - (0 ? 20:0) + 1))))))) << (0 ? 20:0)));
buffer[1]
= gcmkFIXADDRESS(FetchAddress);
@@ -659,10 +595,7 @@ gckVGCOMMAND_ReturnCommand(
/* Append RETURN. */
buffer[0]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ?
- 31:28))) | (((gctUINT32) (0x7 & ((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28))) | (((gctUINT32) (0x7 & ((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28)));
}
if (Bytes != gcvNULL)
@@ -823,24 +756,10 @@ gckVGCOMMAND_EventCommand(
/* Append EVENT. */
buffer[0]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ?
- 31:28))) | (((gctUINT32) (0x3 & ((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 11:0) - (0 ? 11:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:0) - (0 ? 11:0) + 1))))))) << (0 ?
- 11:0))) | (((gctUINT32) ((gctUINT32) (0x0E01) & ((gctUINT32) ((((1 ? 11:0) - (0 ?
- 11:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:0) - (0 ? 11:0) + 1))))))) << (0 ?
- 11:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 27:16) - (0 ? 27:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:16) - (0 ? 27:16) + 1))))))) << (0 ?
- 27:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 27:16) - (0 ?
- 27:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:16) - (0 ? 27:16) + 1))))))) << (0 ?
- 27:16)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 13:12) - (0 ? 13:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:12) - (0 ? 13:12) + 1))))))) << (0 ?
- 13:12))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 13:12) - (0 ? 13:12) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 13:12) - (0 ? 13:12) + 1))))))) << (0 ? 13:12)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28))) | (((gctUINT32) (0x3 & ((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 11:0) - (0 ? 11:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:0) - (0 ? 11:0) + 1))))))) << (0 ? 11:0))) | (((gctUINT32) ((gctUINT32) (0x0E01) & ((gctUINT32) ((((1 ? 11:0) - (0 ? 11:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 11:0) - (0 ? 11:0) + 1))))))) << (0 ? 11:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 27:16) - (0 ? 27:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:16) - (0 ? 27:16) + 1))))))) << (0 ? 27:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 27:16) - (0 ? 27:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:16) - (0 ? 27:16) + 1))))))) << (0 ? 27:16)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 13:12) - (0 ? 13:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:12) - (0 ? 13:12) + 1))))))) << (0 ? 13:12))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 13:12) - (0 ? 13:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:12) - (0 ? 13:12) + 1))))))) << (0 ? 13:12)));
/* Determine chip version. */
if (Command->vg21)
@@ -856,16 +775,8 @@ gckVGCOMMAND_EventCommand(
}
buffer[1]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) ((gctUINT32) (InterruptId) & ((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8))) | (((gctUINT32) ((gctUINT32) (eventSource) & ((gctUINT32) ((((1 ?
- 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ?
- 12:8)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) ((gctUINT32) (InterruptId) & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))) | (((gctUINT32) ((gctUINT32) (eventSource) & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));
}
else
{
@@ -881,21 +792,9 @@ gckVGCOMMAND_EventCommand(
}
buffer[1]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) ((gctUINT32) (InterruptId) & ((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ?
- 5:5))) | (((gctUINT32) ((gctUINT32) (eventFromFE) & ((gctUINT32) ((((1 ?
- 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ?
- 5:5)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ?
- 6:6))) | (((gctUINT32) ((gctUINT32) (eventFromPE) & ((gctUINT32) ((((1 ?
- 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ?
- 6:6)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) ((gctUINT32) (InterruptId) & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) ((gctUINT32) (eventFromFE) & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6))) | (((gctUINT32) ((gctUINT32) (eventFromPE) & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)));
}
}
@@ -927,47 +826,22 @@ gckVGCOMMAND_EventCommand(
/* Append EVENT. */
buffer[0]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E01) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E01) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
/* Determine event source. */
if (Block == gcvBLOCK_COMMAND)
{
buffer[1]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) ((gctUINT32) (InterruptId) & ((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ?
- 5:5))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) ((gctUINT32) (InterruptId) & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)));
}
else
{
buffer[1]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) ((gctUINT32) (InterruptId) & ((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ?
- 6:6))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) ((gctUINT32) (InterruptId) & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)));
}
}
@@ -1039,15 +913,8 @@ gckVGCOMMAND_EndCommand(
/* Append END. */
buffer[0]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ?
- 31:28))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) ((gctUINT32) (InterruptId) & ((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 31:28) - (0 ? 31:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:28) - (0 ? 31:28) + 1))))))) << (0 ? 31:28)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) ((gctUINT32) (InterruptId) & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)));
}
if (Bytes != gcvNULL)
@@ -1070,38 +937,17 @@ gckVGCOMMAND_EndCommand(
/* Append EVENT. */
memory[0]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E01) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E01) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
memory[1]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0))) | (((gctUINT32) ((gctUINT32) (InterruptId) & ((gctUINT32) ((((1 ?
- 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ?
- 4:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ?
- 6:6))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) | (((gctUINT32) ((gctUINT32) (InterruptId) & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 6:6) - (0 ? 6:6) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6)));
/* Append END. */
memory[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) (0x02 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x02 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
}
if (Bytes != gcvNULL)
diff --git a/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.c b/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.c
index 874b55c2e285..7515dde5ba0d 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.c
+++ b/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.c
@@ -57,8 +57,6 @@
#include "gc_hal_kernel.h"
#include "gc_hal_kernel_hardware_command_vg.h"
-#include "gc_feature_database.h"
-
#if gcdENABLE_VG
#define _GC_OBJ_ZONE gcvZONE_HARDWARE
@@ -109,11 +107,7 @@ _ResetGPU(
gcmkONERROR(gckOS_Delay(Os, 1));
/* Isolate the GPU. */
- control = ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ?
- 19:19))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 19:19) - (0 ?
- 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ?
- 19:19)));
+ control = ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ? 19:19))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ? 19:19)));
gcmkONERROR(gckOS_WriteRegisterEx(Os,
gcvCORE_VG,
@@ -124,11 +118,7 @@ _ResetGPU(
gcmkONERROR(gckOS_WriteRegisterEx(Os,
gcvCORE_VG,
0x00000,
- ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:12) - (0 ? 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ?
- 12:12))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 12:12) - (0 ?
- 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ?
- 12:12)))));
+ ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:12) - (0 ? 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 12:12) - (0 ? 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12)))));
/* Wait for reset. */
gcmkONERROR(gckOS_Delay(Os, 1));
@@ -137,18 +127,10 @@ _ResetGPU(
gcmkONERROR(gckOS_WriteRegisterEx(Os,
gcvCORE_VG,
0x00000,
- ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 12:12) - (0 ? 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ?
- 12:12))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 12:12) - (0 ?
- 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ?
- 12:12)))));
+ ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:12) - (0 ? 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 12:12) - (0 ? 12:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12)))));
/* Reset GPU isolation. */
- control = ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ?
- 19:19))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 19:19) - (0 ?
- 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ?
- 19:19)));
+ control = ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ? 19:19))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ? 19:19)));
gcmkONERROR(gckOS_WriteRegisterEx(Os,
gcvCORE_VG,
@@ -196,7 +178,6 @@ OnError:
static gceSTATUS
_IdentifyHardware(
IN gckOS Os,
- IN gckVGHARDWARE Hardware,
OUT gceCHIPMODEL * ChipModel,
OUT gctUINT32 * ChipRevision,
OUT gctUINT32 * ChipFeatures,
@@ -213,10 +194,7 @@ _IdentifyHardware(
gcmkERR_BREAK(gckOS_ReadRegisterEx(Os, gcvCORE_VG, 0x00018, &chipIdentity));
/* Special case for older graphic cores. */
- if (((((gctUINT32) (chipIdentity)) >> (0 ? 31:24) & ((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1)))))) == (0x01 & ((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:
-24) + 1))))))))
+ if (((((gctUINT32) (chipIdentity)) >> (0 ? 31:24) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1)))))) == (0x01 & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))))
{
*ChipModel = gcv500;
*ChipRevision = (((((gctUINT32) (chipIdentity)) >> (0 ? 15:12)) & ((gctUINT32) ((((1 ? 15:12) - (0 ? 15:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:12) - (0 ? 15:12) + 1)))))) );
@@ -250,18 +228,6 @@ _IdentifyHardware(
Os, gcvCORE_VG, 0x00074, ChipMinorFeatures2
));
- gcmkERR_BREAK(gckOS_ReadRegisterEx(
- Os, gcvCORE_VG, 0x000A8, &Hardware->productID
- ));
-
- gcmkERR_BREAK(gckOS_ReadRegisterEx(
- Os, gcvCORE_VG, 0x000E8, &Hardware->ecoID
- ));
-
- gcmkERR_BREAK(gckOS_ReadRegisterEx(
- Os, gcvCORE_VG, 0x00030, &Hardware->customerID
- ));
-
gcmkTRACE(
gcvLEVEL_VERBOSE,
"ChipModel=0x%08X\n"
@@ -331,7 +297,6 @@ gckVGHARDWARE_Construct(
gctUINT32 chipFeatures;
gctUINT32 chipMinorFeatures;
gctUINT32 chipMinorFeatures2;
- gcsFEATURE_DATABASE * database;
gcmkHEADER_ARG("Os=0x%x Hardware=0x%x ", Os, Hardware);
@@ -351,17 +316,17 @@ gckVGHARDWARE_Construct(
"_ResetGPU failed: status=%d\n", status);
}
- /* Allocate the gckVGHARDWARE object. */
- gcmkERR_BREAK(gckOS_Allocate(Os,
- gcmSIZEOF(struct _gckVGHARDWARE), (gctPOINTER *) &hardware
- ));
-
/* Identify the hardware. */
- gcmkERR_BREAK(_IdentifyHardware(Os, hardware,
+ gcmkERR_BREAK(_IdentifyHardware(Os,
&chipModel, &chipRevision,
&chipFeatures, &chipMinorFeatures, &chipMinorFeatures2
));
+ /* Allocate the gckVGHARDWARE object. */
+ gcmkERR_BREAK(gckOS_Allocate(Os,
+ gcmSIZEOF(struct _gckVGHARDWARE), (gctPOINTER *) &hardware
+ ));
+
/* Initialize the gckVGHARDWARE object. */
hardware->object.type = gcvOBJ_HARDWARE;
hardware->os = Os;
@@ -389,46 +354,14 @@ gckVGHARDWARE_Construct(
&hardware->powerOffTimer));
#endif
- database = hardware->featureDatabase = gcQueryFeatureDB(
- hardware->chipModel,
- hardware->chipRevision,
- hardware->productID,
- hardware->ecoID,
- hardware->customerID
- );
-
- if (database == gcvNULL)
- {
- gcmkPRINT("[galcore]: Feature database is not found,"
- "chipModel=0x%0x, chipRevision=0x%x, productID=0x%x, ecoID=0x%x",
- hardware->chipModel,
- hardware->chipRevision,
- hardware->productID,
- hardware->ecoID);
- /* gcmkERR_BREAK(gcvSTATUS_NOT_FOUND); */
- }
-
/* Determine whether FE 2.0 is present. */
- hardware->fe20 = ((((gctUINT32) (hardware->chipFeatures)) >> (0 ?
- 28:28) & ((gctUINT32) ((((1 ? 28:28) - (0 ? 28:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ?
- 28:28) - (0 ? 28:28) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 28:28) - (0 ?
- 28:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 28:28) - (0 ? 28:28) + 1)))))));
+ 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)))))));
/* Determine whether VG 2.0 is present. */
- hardware->vg20 = ((((gctUINT32) (hardware->chipMinorFeatures)) >> (0 ?
- 13:13) & ((gctUINT32) ((((1 ? 13:13) - (0 ? 13:13) + 1) == 32) ? ~0 : (~(~0 << ((1 ?
- 13:13) - (0 ? 13:13) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 13:13) - (0 ?
- 13:13) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:13) - (0 ? 13:13) + 1)))))));
+ hardware->vg20 = ((((gctUINT32) (hardware->chipMinorFeatures)) >> (0 ? 13:13) & ((gctUINT32) ((((1 ? 13:13) - (0 ? 13:13) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:13) - (0 ? 13:13) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 13:13) - (0 ? 13:13) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 13:13) - (0 ? 13:13) + 1)))))));
/* Determine whether VG 2.1 is present. */
- hardware->vg21 = ((((gctUINT32) (hardware->chipMinorFeatures)) >> (0 ?
- 18:18) & ((gctUINT32) ((((1 ? 18:18) - (0 ? 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ?
- 18:18) - (0 ? 18:18) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 18:18) - (0 ?
- 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 18:18) - (0 ? 18:18) + 1)))))));
-
- /* Determine whether fc is present. */
- hardware->fc = (((((gctUINT32) (hardware->chipFeatures)) >> (0 ? 0:0 )) & ((gctUINT32) ((((1 ? 0:0 ) - (0 ? 0:0 ) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0 ) - (0 ? 0:0 ) + 1)))))) );
-
+ hardware->vg21 = ((((gctUINT32) (hardware->chipMinorFeatures)) >> (0 ? 18:18) & ((gctUINT32) ((((1 ? 18:18) - (0 ? 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 18:18) - (0 ? 18:18) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 18:18) - (0 ? 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 18:18) - (0 ? 18:18) + 1)))))));
/* Set default event mask. */
hardware->eventMask = 0xFFFFFFFF;
@@ -453,7 +386,7 @@ gckVGHARDWARE_Construct(
while (gcvFALSE);
#if gcdPOWEROFF_TIMEOUT
- if (hardware != gcvNULL && hardware->powerOffTimer != gcvNULL)
+ if (hardware->powerOffTimer != gcvNULL)
{
gcmkVERIFY_OK(gckOS_StopTimer(Os, hardware->powerOffTimer));
gcmkVERIFY_OK(gckOS_DestroyTimer(Os, hardware->powerOffTimer));
@@ -667,8 +600,6 @@ gckVGHARDWARE_QueryChipIdentity(
IN gckVGHARDWARE Hardware,
OUT gceCHIPMODEL * ChipModel,
OUT gctUINT32 * ChipRevision,
- OUT gctUINT32 * ProductID,
- OUT gctUINT32 * EcoID,
OUT gctUINT32* ChipFeatures,
OUT gctUINT32* ChipMinorFeatures,
OUT gctUINT32* ChipMinorFeatures2
@@ -697,13 +628,9 @@ gckVGHARDWARE_QueryChipIdentity(
{
gctUINT32 features = Hardware->chipFeatures;
- if (Hardware->fc)
+ if ((((((gctUINT32) (features)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ))
{
- features = ((((gctUINT32) (features)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) ((gctUINT32) (Hardware->allowFastClear) & ((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0)));
+ features = ((((gctUINT32) (features)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) ((gctUINT32) (Hardware->allowFastClear) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
}
/* Mark 2D pipe as available for GC500.0 since it did not have this *\
@@ -712,20 +639,14 @@ gckVGHARDWARE_QueryChipIdentity(
&& (Hardware->chipRevision == 0)
)
{
- features = ((((gctUINT32) (features)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ?
- 9:9))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9)));
+ features = ((((gctUINT32) (features)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9)));
}
/* Mark 2D pipe as available for GC300 since it did not have this *\
\* bit. */
if (Hardware->chipModel == gcv300)
{
- features = ((((gctUINT32) (features)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ?
- 9:9))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9)));
+ features = ((((gctUINT32) (features)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9)));
}
*ChipFeatures = features;
@@ -743,9 +664,6 @@ gckVGHARDWARE_QueryChipIdentity(
*ChipMinorFeatures2 = Hardware->chipMinorFeatures2;
}
- *ProductID = Hardware->productID;
- *EcoID = Hardware->ecoID;
-
gcmkFOOTER_NO();
/* Success. */
return gcvSTATUS_OK;
@@ -972,11 +890,7 @@ gckVGHARDWARE_SplitMemory(
}
/* Return offset of address. */
- *Offset = ((((gctUINT32) (Address)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ?
- 1:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 1:0) - (0 ?
- 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ?
- 1:0)));
+ *Offset = ((((gctUINT32) (Address)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0)));
gcmkFOOTER_NO();
/* Success. */
@@ -1063,15 +977,8 @@ gckVGHARDWARE_Execute(
Hardware->os,
gcvCORE_VG,
0x00658,
- ((((gctUINT32) (0)) & ~(((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))) |
- ((((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) (Count) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
+ ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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))) |
+ ((((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) (Count) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
));
}
@@ -1218,10 +1125,7 @@ gckVGHARDWARE_ConvertLogical(
gcmkSAFECASTPHYSADDRT(address, physical);
/* Return hardware specific address. */
- *Address = ((((gctUINT32) (address)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ?
- 1:0))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0)));
+ *Address = ((((gctUINT32) (address)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0)));
/* Success. */
gcmkFOOTER();
@@ -1276,10 +1180,7 @@ gceSTATUS gckVGHARDWARE_QuerySystemMemory(
if (SystemBaseAddress != gcvNULL)
{
/* Set system memory base address. */
- *SystemBaseAddress = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ?
- 1:0))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0)));
+ *SystemBaseAddress = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0)));
}
gcmkFOOTER_NO();
@@ -1398,42 +1299,16 @@ gceSTATUS gckVGHARDWARE_FlushMMU(
));
buffer[0]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E04) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E04) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
buffer[1]
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ?
- 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ?
- 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ?
- 3:3))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 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)));
+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)))
+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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)));
gcmkERR_BREAK(gckVGCOMMAND_Execute(
command,
@@ -1489,10 +1364,7 @@ gceSTATUS gckVGHARDWARE_BuildVirtualAddress(
address = (Index << 12) | Offset;
/* Set virtual type. */
- address = ((((gctUINT32) (address)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ?
- 1:0))) | (((gctUINT32) (0x2 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0)));
+ address = ((((gctUINT32) (address)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))) | (((gctUINT32) (0x2 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0)));
/* Set the result. */
*Address = address;
@@ -1529,7 +1401,7 @@ gckVGHARDWARE_SetFastClear(
gctUINT32 debug;
gceSTATUS status;
- if (!Hardware->fc)
+ if (!(((((gctUINT32) (Hardware->chipFeatures)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ))
{
return gcvSTATUS_OK;
}
@@ -1546,20 +1418,10 @@ gckVGHARDWARE_SetFastClear(
0x00414,
&debug));
- debug = ((((gctUINT32) (debug)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 20:20) - (0 ? 20:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:20) - (0 ? 20:20) + 1))))))) << (0 ?
- 20:20))) | (((gctUINT32) ((gctUINT32) (Enable == 0) & ((gctUINT32) ((((1 ?
- 20:20) - (0 ? 20:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:20) - (0 ? 20:20) + 1))))))) << (0 ?
- 20:20)));
+ debug = ((((gctUINT32) (debug)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 20:20) - (0 ? 20:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:20) - (0 ? 20:20) + 1))))))) << (0 ? 20:20))) | (((gctUINT32) ((gctUINT32) (Enable == 0) & ((gctUINT32) ((((1 ? 20:20) - (0 ? 20:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:20) - (0 ? 20:20) + 1))))))) << (0 ? 20:20)));
#ifdef AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION
- debug = ((((gctUINT32) (debug)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION) - (0 ? AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION) - (0 ? AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION) + 1))))))) << (0 ?
- AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION))) | (((gctUINT32) ((gctUINT32) (Enable == 0) & ((gctUINT32) ((((1 ?
- AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION) - (0 ? AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION) - (0 ? AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION) + 1))))))) << (0 ?
- AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION)));
+ debug = ((((gctUINT32) (debug)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION) - (0 ? AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION) + 1) == 32) ? ~0 : (~(~0 << ((1 ? AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION) - (0 ? AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION) + 1))))))) << (0 ? AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION))) | (((gctUINT32) ((gctUINT32) (Enable == 0) & ((gctUINT32) ((((1 ? AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION) - (0 ? AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION) + 1) == 32) ? ~0 : (~(~0 << ((1 ? AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION) - (0 ? AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION) + 1))))))) << (0 ? AQ_MEMORY_DEBUG_DISABLE_Z_COMPRESSION)));
#endif
gcmkERR_BREAK(gckOS_WriteRegisterEx(Hardware->os, gcvCORE_VG,
@@ -1630,7 +1492,6 @@ static gceSTATUS _CommandStall(
gcmkERR_BREAK(gckOS_WaitSignal(
command->os,
command->powerStallSignal,
- gcvTRUE,
command->kernel->kernel->timeOut));
@@ -1642,6 +1503,63 @@ static gceSTATUS _CommandStall(
return status;
}
+static gceSTATUS
+_IsGPUPresent(
+ IN gckVGHARDWARE Hardware
+ )
+{
+ gceSTATUS status;
+ gceCHIPMODEL chipModel;
+ gctUINT32 chipRev, chipFeatures, chipMinorFeatures, chipMinorFeatures2;
+ /*gcsHAL_QUERY_CHIP_IDENTITY identity;*/
+ gctUINT32 control;
+
+ gcmkHEADER_ARG("Hardware=0x%x", Hardware);
+
+ /* Verify the arguments. */
+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
+
+ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
+ gcvCORE_VG,
+ 0x00000,
+ &control));
+
+ control = ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)));
+
+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
+ gcvCORE_VG,
+ 0x00000,
+ control));
+
+ /* Identify the hardware. */
+ gcmkONERROR(_IdentifyHardware(Hardware->os,
+ &chipModel, &chipRev,
+ &chipFeatures,
+ &chipMinorFeatures,
+ &chipMinorFeatures2
+ ));
+ /* Check if these are the same values as saved before. */
+ if ((Hardware->chipModel != chipModel)
+ || (Hardware->chipRevision != chipRev)
+ || (Hardware->chipFeatures != chipFeatures)
+ || (Hardware->chipMinorFeatures != chipMinorFeatures)
+ || (Hardware->chipMinorFeatures2 != chipMinorFeatures2)
+ )
+ {
+ gcmkPRINT("[galcore]: GPU is not present.");
+ gcmkONERROR(gcvSTATUS_GPU_NOT_RESPONDING);
+ }
+
+ /* Success. */
+ gcmkFOOTER_NO();
+ return gcvSTATUS_OK;
+
+OnError:
+ /* Return the error. */
+ gcmkFOOTER();
+ return status;
+}
+
/*******************************************************************************
**
** gckHARDWARE_SetPowerManagementState
@@ -1967,6 +1885,44 @@ gckVGHARDWARE_SetPowerManagementState(
Hardware->powerState = gcvTRUE;
}
+ for (;;)
+ {
+ /* Check if GPU is present and awake. */
+ status = _IsGPUPresent(Hardware);
+
+ /* Check if the GPU is not responding. */
+ if (status == gcvSTATUS_GPU_NOT_RESPONDING)
+ {
+ /* Turn off the power and clock. */
+ gcmkONERROR(gckOS_SetGPUPower(os, gcvCORE_VG, gcvFALSE, gcvFALSE));
+
+ Hardware->clockState = gcvFALSE;
+ Hardware->powerState = gcvFALSE;
+
+ /* Wait a little. */
+ gckOS_Delay(os, 1);
+
+ /* Turn on the power and clock. */
+ gcmkONERROR(gckOS_SetGPUPower(os, gcvCORE_VG, gcvTRUE, gcvTRUE));
+
+ Hardware->clockState = gcvTRUE;
+ Hardware->powerState = gcvTRUE;
+
+ /* We need to initialize the hardware and start the command
+ * processor. */
+ flag |= gcvPOWER_FLAG_INITIALIZE | gcvPOWER_FLAG_START;
+ }
+ else
+ {
+ /* Test for error. */
+ gcmkONERROR(status);
+
+ /* Break out of loop. */
+ break;
+ }
+ }
+
+
/* Get time until powered on. */
gcmkPROFILE_QUERY(time, onTime);
diff --git a/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.h b/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.h
index 310bc29078ca..53d7a2eebdce 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.h
@@ -71,9 +71,6 @@ struct _gckVGHARDWARE
/* Chip characteristics. */
gceCHIPMODEL chipModel;
gctUINT32 chipRevision;
- gctUINT32 productID;
- gctUINT32 ecoID;
- gctUINT32 customerID;
gctUINT32 chipFeatures;
gctUINT32 chipMinorFeatures;
gctUINT32 chipMinorFeatures2;
@@ -83,7 +80,6 @@ struct _gckVGHARDWARE
gctBOOL fe20;
gctBOOL vg20;
gctBOOL vg21;
- gctBOOL fc;
/* Event mask. */
gctUINT32 eventMask;
@@ -106,8 +102,6 @@ struct _gckVGHARDWARE
#endif
gctBOOL powerManagement;
-
- gctPOINTER featureDatabase;
};
#endif /* __gc_hal_kernel_hardware_h_ */
diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
index bbd8e5829a06..7bd3b647b280 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
@@ -55,7 +55,7 @@
#include "gc_hal_kernel_precomp.h"
-#if gcdDEC_ENABLE_AHB
+#if gcdENABLE_DEC_COMPRESSION && gcdDEC_ENABLE_AHB
#include "viv_dec300_main.h"
#endif
@@ -108,7 +108,7 @@ gctCONST_STRING _DispatchText[] =
gcmDEFINE2TEXT(gcvHAL_READ_ALL_PROFILE_REGISTERS),
gcmDEFINE2TEXT(gcvHAL_PROFILE_REGISTERS_2D),
#if VIVANTE_PROFILER_PERDRAW
- gcmDEFINE2TEXT(gcvHAL_READ_PROFILER_REGISTER_SETTING),
+ gcvHAL_READ_PROFILER_REGISTER_SETTING,
#endif
gcmDEFINE2TEXT(gcvHAL_SET_POWER_MANAGEMENT_STATE),
gcmDEFINE2TEXT(gcvHAL_QUERY_POWER_MANAGEMENT_STATE),
@@ -145,14 +145,6 @@ gctCONST_STRING _DispatchText[] =
gcmDEFINE2TEXT(gcvHAL_CREATE_NATIVE_FENCE),
gcmDEFINE2TEXT(gcvHAL_DESTROY_MMU),
gcmDEFINE2TEXT(gcvHAL_SHBUF),
- gcmDEFINE2TEXT(gcvHAL_GET_VIDEO_MEMORY_FD),
- gcmDEFINE2TEXT(gcvHAL_CONFIG_POWER_MANAGEMENT),
- gcmDEFINE2TEXT(gcvHAL_WRAP_USER_MEMORY),
- gcmDEFINE2TEXT(gcvHAL_WAIT_FENCE),
- gcmDEFINE2TEXT(gcvHAL_GET_VIDEO_MEMORY_FD),
-#if gcdENABLE_VG
- gcmDEFINE2TEXT(gcvHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY)
-#endif
};
#endif
@@ -163,9 +155,9 @@ _MonitorTimerFunction(
)
{
gckKERNEL kernel = (gckKERNEL)Data;
- gctINT32 pendingInterrupt;
+ gctUINT32 pendingInterrupt;
gctBOOL reset = gcvFALSE;
- gctINT32 mask;
+ gctUINT32 mask;
gctUINT32 advance = kernel->timeOut/2;
#if gcdENABLE_VG
@@ -183,29 +175,6 @@ _MonitorTimerFunction(
gckOS_AtomGet(kernel->os, kernel->eventObj->interruptCount, &pendingInterrupt);
- if (pendingInterrupt < 0)
- {
- gctINT i = 0 - pendingInterrupt;
- gctINT pendingMask;
-
- gcmkVERIFY_OK(gckOS_AtomGet(
- kernel->os,
- kernel->hardware->pendingEvent,
- &pendingMask
- ));
-
- gcmkPRINT("[galcore]: Number of pending interrupt is %d mask is %x",
- pendingInterrupt, pendingMask);
-
- while (i--)
- {
- /* Ignore counting which should not exist. */
- gckOS_AtomIncrement(kernel->os, kernel->eventObj->interruptCount, &pendingInterrupt);
- }
-
- gckOS_AtomGet(kernel->os, kernel->eventObj->interruptCount, &pendingInterrupt);
- }
-
if (kernel->monitoring == gcvFALSE)
{
if (pendingInterrupt)
@@ -239,6 +208,7 @@ _MonitorTimerFunction(
if (kernel->eventObj->lastCommitStamp == kernel->lastCommitStamp
&& kernel->hardware->lastWaitLink == kernel->restoreAddress
&& mask == kernel->restoreMask
+ && kernel->hardware->chipPowerState == gcvPOWER_ON
)
{
/* GPU state is not changed, accumlate timeout. */
@@ -283,8 +253,7 @@ _MapCommandBuffer(
{
gceSTATUS status;
gctUINT32 i;
- gctPHYS_ADDR_T physical;
- gctUINT32 address;
+ gctUINT32 physical;
gckMMU mmu;
gcmkONERROR(gckKERNEL_GetProcessMMU(Kernel, &mmu));
@@ -297,9 +266,7 @@ _MapCommandBuffer(
&physical
));
- gcmkSAFECASTPHYSADDRT(address, physical);
-
- gcmkONERROR(gckMMU_FlatMapping(mmu, address, 1));
+ gcmkONERROR(gckMMU_FlatMapping(mmu, physical));
}
return gcvSTATUS_OK;
@@ -346,48 +313,6 @@ _DumpState(
#endif
}
-static gceHARDWARE_TYPE
-_GetHardwareType(
- IN gckKERNEL Kernel
- )
-{
- gceHARDWARE_TYPE type;
- gcmkHEADER();
- gcmkVERIFY_OBJECT(Kernel, gcvOBJ_KERNEL);
-
-#if gcdENABLE_VG
- if (Kernel->vg)
- {
- type = gcvHARDWARE_VG;
- }
- else
-#endif
- {
- type = Kernel->hardware->type;
- }
-
- gcmkFOOTER_ARG("type=%d", type);
- return type;
-}
-
-gceSTATUS
-_SetRecovery(
- IN gckKERNEL Kernel,
- IN gctBOOL Recovery,
- IN gctUINT32 StuckDump
- )
-{
- Kernel->recovery = Recovery;
-
- if (Recovery == gcvFALSE)
- {
- /* Dump stuck information if Recovery is disabled. */
- Kernel->stuckDump = gcmMAX(StuckDump, gcvSTUCK_DUMP_USER_COMMAND);
- }
-
- return gcvSTATUS_OK;
-}
-
/*******************************************************************************
**
** gckKERNEL_Construct
@@ -419,9 +344,7 @@ gceSTATUS
gckKERNEL_Construct(
IN gckOS Os,
IN gceCORE Core,
- IN gctUINT ChipID,
IN gctPOINTER Context,
- IN gckDEVICE Device,
IN gckDB SharedDB,
OUT gckKERNEL * Kernel
)
@@ -430,8 +353,6 @@ gckKERNEL_Construct(
gceSTATUS status;
gctSIZE_T i;
gctPOINTER pointer = gcvNULL;
- gctUINT32 recovery;
- gctUINT32 stuckDump;
gcmkHEADER_ARG("Os=0x%x Context=0x%x", Os, Context);
@@ -444,22 +365,22 @@ gckKERNEL_Construct(
gcmSIZEOF(struct _gckKERNEL),
&pointer));
- /* Zero the object. */
- gckOS_ZeroMemory(pointer, gcmSIZEOF(struct _gckKERNEL));
-
kernel = pointer;
+ /* Zero the object pointers. */
+ kernel->hardware = gcvNULL;
+ kernel->command = gcvNULL;
+ kernel->eventObj = gcvNULL;
+ kernel->mmu = gcvNULL;
+#if gcdDVFS
+ kernel->dvfs = gcvNULL;
+#endif
+ kernel->monitorTimer = gcvNULL;
+
/* Initialize the gckKERNEL object. */
kernel->object.type = gcvOBJ_KERNEL;
kernel->os = Os;
kernel->core = Core;
- kernel->device = Device;
- kernel->chipID = ChipID;
-
-#if gcdENABLE_TRUST_APPLICATION
- /* Connect to security service for this GPU. */
- gcmkONERROR(gckKERNEL_SecurityOpen(kernel, kernel->core, &kernel->securityChannel));
-#endif
if (SharedDB == gcvNULL)
{
@@ -516,31 +437,6 @@ gckKERNEL_Construct(
kernel->atomClients = gcvNULL;
gcmkONERROR(gckOS_AtomConstruct(Os, &kernel->atomClients));
- kernel->recovery = gcvTRUE;
- kernel->stuckDump = gcvSTUCK_DUMP_NONE;
-
- /* Override default recovery and stuckDump setting. */
- status = gckOS_QueryOption(Os, "recovery", &recovery);
-
- if (gcmIS_SUCCESS(status))
- {
- status = gckOS_QueryOption(Os, "stuckDump", &stuckDump);
-
- gcmkASSERT(status == gcvSTATUS_OK);
-
- _SetRecovery(kernel, recovery, stuckDump);
- }
-
- /* Need the kernel reference before gckKERNEL_Construct() completes.
- gckOS_MapPagesEx() is called to map kernel virtual command buffers. */
- *Kernel = kernel;
-
- kernel->virtualBufferHead =
- kernel->virtualBufferTail = gcvNULL;
-
- gcmkONERROR(
- gckOS_CreateMutex(Os, (gctPOINTER)&kernel->virtualBufferLock));
-
#if gcdENABLE_VG
kernel->vg = gcvNULL;
@@ -569,70 +465,28 @@ gckKERNEL_Construct(
/* Initialize virtual command buffer. */
/* TODO: Remove platform limitation after porting. */
-#if (defined(LINUX) || defined(__QNXNTO__)) && !defined(EMULATOR) && !gcdALLOC_CMD_FROM_RESERVE
+#if (defined(LINUX) || defined(__QNXNTO__)) && !gcdALLOC_CMD_FROM_RESERVE
kernel->virtualCommandBuffer = gcvTRUE;
#else
kernel->virtualCommandBuffer = gcvFALSE;
#endif
-#if defined(UNDER_CE) && USE_KERNEL_VIRTUAL_BUFFERS
- kernel->virtualCommandBuffer = gcvTRUE;
-#endif
-
-#if gcdSECURITY || gcdDISABLE_GPU_VIRTUAL_ADDRESS
+#if gcdSECURITY
kernel->virtualCommandBuffer = gcvFALSE;
#endif
-#if gcdSHARED_PAGETABLE
- /* Construct the gckMMU object. */
- gcmkONERROR(
- gckMMU_Construct(kernel, gcdMMU_SIZE, &kernel->mmu));
-#else
- if (Device == gcvNULL)
- {
- /* Construct the gckMMU object. */
- gcmkONERROR(
- gckMMU_Construct(kernel, gcdMMU_SIZE, &kernel->mmu));
- }
- else
- {
- gcmkONERROR(gckDEVICE_GetMMU(Device, kernel->hardware->type, &kernel->mmu));
-
- if (kernel->mmu == gcvNULL)
- {
- gcmkONERROR(
- gckMMU_Construct(kernel, gcdMMU_SIZE, &kernel->mmu));
-
- gcmkONERROR(
- gckDEVICE_SetMMU(Device, kernel->hardware->type, kernel->mmu));
- }
- }
-
- gcmkVERIFY_OK(gckMMU_AttachHardware(kernel->mmu, kernel->hardware));
-#endif
-
/* Construct the gckCOMMAND object. */
gcmkONERROR(
gckCOMMAND_Construct(kernel, &kernel->command));
- if (gckHARDWARE_IsFeatureAvailable(kernel->hardware, gcvFEATURE_BLT_ENGINE))
- {
- /* Construct the gckASYNC_COMMAND object for BLT engine. */
- gcmkONERROR(gckASYNC_COMMAND_Construct(kernel, &kernel->asyncCommand));
-
- /* Construct gckEVENT for BLT. */
- gcmkONERROR(gckEVENT_Construct(kernel, &kernel->asyncEvent));
-
- /* TODO: Need a decent interface to connect event and command object. */
- kernel->asyncEvent->asyncCommand = kernel->asyncCommand;
-
- kernel->command->asyncCommand = kernel->asyncCommand;
- }
-
/* Construct the gckEVENT object. */
gcmkONERROR(
gckEVENT_Construct(kernel, &kernel->eventObj));
+ /* Construct the gckMMU object. */
+ gcmkONERROR(
+ gckMMU_Construct(kernel, gcdMMU_SIZE, &kernel->mmu));
+
gcmkVERIFY_OK(gckOS_GetTime(&kernel->resetTimeStamp));
gcmkONERROR(gckHARDWARE_PrepareFunctions(kernel->hardware));
@@ -649,24 +503,27 @@ gckKERNEL_Construct(
gcmkONERROR(gckDVFS_Start(kernel->dvfs));
}
#endif
-
-#if COMMAND_PROCESSOR_VERSION == 1
- /* Start the command queue. */
- gcmkONERROR(gckCOMMAND_Start(kernel->command));
-#endif
}
#if VIVANTE_PROFILER
/* Initialize profile setting */
kernel->profileEnable = gcvFALSE;
kernel->profileCleanRegister = gcvTRUE;
- kernel->profileSyncMode = gcvTRUE;
#endif
#if gcdANDROID_NATIVE_FENCE_SYNC
- gcmkONERROR(gckOS_CreateSyncTimeline(Os, Core, &kernel->timeline));
+ gcmkONERROR(gckOS_CreateSyncTimeline(Os, &kernel->timeline));
#endif
+ kernel->recovery = gcvTRUE;
+ kernel->stuckDump = gcvSTUCK_DUMP_NONE;
+
+ kernel->virtualBufferHead =
+ kernel->virtualBufferTail = gcvNULL;
+
+ gcmkONERROR(
+ gckOS_CreateMutex(Os, (gctPOINTER)&kernel->virtualBufferLock));
+
#if gcdSECURITY
/* Connect to security service for this GPU. */
gcmkONERROR(gckKERNEL_SecurityOpen(kernel, kernel->core, &kernel->securityChannel));
@@ -702,11 +559,77 @@ gckKERNEL_Construct(
return gcvSTATUS_OK;
OnError:
- *Kernel = gcvNULL;
-
if (kernel != gcvNULL)
{
- gckKERNEL_Destroy(kernel);
+#if gcdENABLE_VG
+ if (Core != gcvCORE_VG)
+#endif
+ {
+ if (kernel->eventObj != gcvNULL)
+ {
+ gcmkVERIFY_OK(gckEVENT_Destroy(kernel->eventObj));
+ }
+
+ if (kernel->command != gcvNULL)
+ {
+ gcmkVERIFY_OK(gckCOMMAND_Destroy(kernel->command));
+ }
+
+ if (kernel->hardware != gcvNULL)
+ {
+ /* Turn off the power. */
+ gcmkVERIFY_OK(gckOS_SetGPUPower(kernel->hardware->os,
+ kernel->hardware->core,
+ gcvFALSE,
+ gcvFALSE));
+ gcmkVERIFY_OK(gckHARDWARE_Destroy(kernel->hardware));
+ }
+ }
+
+ if (kernel->atomClients != gcvNULL)
+ {
+ gcmkVERIFY_OK(gckOS_AtomDestroy(Os, kernel->atomClients));
+ }
+
+ if (kernel->dbCreated && kernel->db != gcvNULL)
+ {
+ if (kernel->db->dbMutex != gcvNULL)
+ {
+ /* Destroy the database mutex. */
+ gcmkVERIFY_OK(gckOS_DeleteMutex(Os, kernel->db->dbMutex));
+ }
+
+ gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Os, kernel->db));
+ }
+
+ if (kernel->virtualBufferLock != gcvNULL)
+ {
+ /* Destroy the virtual command buffer mutex. */
+ gcmkVERIFY_OK(gckOS_DeleteMutex(Os, kernel->virtualBufferLock));
+ }
+
+#if gcdDVFS
+ if (kernel->dvfs)
+ {
+ gcmkVERIFY_OK(gckDVFS_Stop(kernel->dvfs));
+ gcmkVERIFY_OK(gckDVFS_Destroy(kernel->dvfs));
+ }
+#endif
+
+#if gcdANDROID_NATIVE_FENCE_SYNC
+ if (kernel->timeline)
+ {
+ gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Os, kernel->timeline));
+ }
+#endif
+
+ if (kernel->monitorTimer)
+ {
+ gcmkVERIFY_OK(gckOS_StopTimer(Os, kernel->monitorTimer));
+ gcmkVERIFY_OK(gckOS_DestroyTimer(Os, kernel->monitorTimer));
+ }
+
+ gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Os, kernel));
}
/* Return the error. */
@@ -765,21 +688,13 @@ gckKERNEL_Destroy(
{
databaseNext = database->next;
- if (database->counterMutex)
- {
- gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, database->counterMutex));
- }
-
+ gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, database->counterMutex));
gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Kernel->os, database));
}
if (Kernel->db->lastDatabase != gcvNULL)
{
- if (Kernel->db->lastDatabase->counterMutex)
- {
- gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Kernel->db->lastDatabase->counterMutex));
- }
-
+ gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Kernel->db->lastDatabase->counterMutex));
gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Kernel->os, Kernel->db->lastDatabase));
}
@@ -790,41 +705,24 @@ gckKERNEL_Destroy(
gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Kernel->os, record));
}
- if (Kernel->db->dbMutex)
- {
- /* Destroy the database mutex. */
- gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Kernel->db->dbMutex));
- }
+ /* Destroy the database mutex. */
+ gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Kernel->db->dbMutex));
- if (Kernel->db->nameDatabase)
- {
- /* Destroy video memory name database. */
- gcmkVERIFY_OK(gckKERNEL_DestroyIntegerDatabase(Kernel, Kernel->db->nameDatabase));
- }
+ /* Destroy video memory name database. */
+ gcmkVERIFY_OK(gckKERNEL_DestroyIntegerDatabase(Kernel, Kernel->db->nameDatabase));
- if (Kernel->db->nameDatabaseMutex)
- {
- /* Destroy video memory name database mutex. */
- gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Kernel->db->nameDatabaseMutex));
- }
+ /* Destroy video memory name database mutex. */
+ gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Kernel->db->nameDatabaseMutex));
- if (Kernel->db->pointerDatabase)
- {
- /* Destroy id-pointer database. */
- gcmkVERIFY_OK(gckKERNEL_DestroyIntegerDatabase(Kernel, Kernel->db->pointerDatabase));
- }
- if (Kernel->db->pointerDatabaseMutex)
- {
- /* Destroy id-pointer database mutex. */
- gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Kernel->db->pointerDatabaseMutex));
- }
+ /* Destroy id-pointer database. */
+ gcmkVERIFY_OK(gckKERNEL_DestroyIntegerDatabase(Kernel, Kernel->db->pointerDatabase));
- if (Kernel->db)
- {
- /* Destroy the database. */
- gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Kernel->os, Kernel->db));
- }
+ /* Destroy id-pointer database mutex. */
+ gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Kernel->db->pointerDatabaseMutex));
+
+ /* Destroy the database. */
+ gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Kernel->os, Kernel->db));
/* Notify stuck timer to quit. */
Kernel->monitorTimerStop = gcvTRUE;
@@ -838,49 +736,23 @@ gckKERNEL_Destroy(
else
#endif
{
- if (Kernel->mmu)
- {
-#if gcdSHARED_PAGETABLE
- /* Destroy the gckMMU object. */
- gcmkVERIFY_OK(gckMMU_Destroy(Kernel->mmu));
-#else
- if (Kernel->mmu->hardware == Kernel->hardware)
- {
- /* Destroy the gckMMU object. */
- gcmkVERIFY_OK(gckMMU_Destroy(Kernel->mmu));
- }
-#endif
- }
+ /* Destroy the gckMMU object. */
+ gcmkVERIFY_OK(gckMMU_Destroy(Kernel->mmu));
- if (Kernel->command)
- {
- /* Destroy the gckCOMMNAND object. */
- gcmkVERIFY_OK(gckCOMMAND_Destroy(Kernel->command));
- }
+ /* Destroy the gckCOMMNAND object. */
+ gcmkVERIFY_OK(gckCOMMAND_Destroy(Kernel->command));
- if (Kernel->eventObj)
- {
- /* Destroy the gckEVENT object. */
- gcmkVERIFY_OK(gckEVENT_Destroy(Kernel->eventObj));
- }
+ /* Destroy the gckEVENT object. */
+ gcmkVERIFY_OK(gckEVENT_Destroy(Kernel->eventObj));
- if (Kernel->hardware)
- {
- /* Destroy the gckHARDWARE object. */
- gcmkVERIFY_OK(gckHARDWARE_Destroy(Kernel->hardware));
- }
+ /* Destroy the gckHARDWARE object. */
+ gcmkVERIFY_OK(gckHARDWARE_Destroy(Kernel->hardware));
}
- if (Kernel->atomClients)
- {
- /* Detsroy the client atom. */
- gcmkVERIFY_OK(gckOS_AtomDestroy(Kernel->os, Kernel->atomClients));
- }
+ /* Detsroy the client atom. */
+ gcmkVERIFY_OK(gckOS_AtomDestroy(Kernel->os, Kernel->atomClients));
- if (Kernel->virtualBufferLock)
- {
- gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Kernel->virtualBufferLock));
- }
+ gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Kernel->virtualBufferLock));
#if gcdDVFS
if (Kernel->dvfs)
@@ -891,17 +763,11 @@ gckKERNEL_Destroy(
#endif
#if gcdANDROID_NATIVE_FENCE_SYNC
- if (Kernel->timeline)
- {
- gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Kernel->os, Kernel->timeline));
- }
+ gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Kernel->os, Kernel->timeline));
#endif
#if gcdSECURITY
- if (Kernel->securityChannel)
- {
- gcmkVERIFY_OK(gckKERNEL_SecurityClose(Kernel->securityChannel));
- }
+ gcmkVERIFY_OK(gckKERNEL_SecurityClose(Kernel->securityChannel));
#endif
if (Kernel->monitorTimer)
@@ -963,7 +829,6 @@ gckKERNEL_AllocateLinearMemory(
gctBOOL tileStatusInVirtual;
gctBOOL contiguous = gcvFALSE;
gctBOOL cacheable = gcvFALSE;
- gctBOOL secure = gcvFALSE;
gctSIZE_T bytes = Bytes;
gctUINT32 handle = 0;
gceDATABASE_TYPE type;
@@ -974,13 +839,12 @@ gckKERNEL_AllocateLinearMemory(
gcmkVERIFY_ARGUMENT(Pool != gcvNULL);
gcmkVERIFY_ARGUMENT(Bytes != 0);
- /* Get basic type. */
- Type &= 0xFF;
+ /* Get basic type. */
+ Type &= 0xFF;
/* Check flags. */
contiguous = Flag & gcvALLOC_FLAG_CONTIGUOUS;
cacheable = Flag & gcvALLOC_FLAG_CACHEABLE;
- secure = Flag & gcvALLOC_FLAG_SECURITY;
AllocateMemory:
@@ -1053,7 +917,7 @@ AllocateMemory:
else
/* gcvPOOL_SYSTEM can't be cacheable. */
- if (cacheable == gcvFALSE && secure == gcvFALSE)
+ if (cacheable == gcvFALSE)
{
/* Get pointer to gckVIDMEM object for pool. */
status = gckKERNEL_GetVideoMemoryPool(Kernel, pool, &videoMemory);
@@ -1465,9 +1329,7 @@ gckKERNEL_UnlockVideoMemory(
{
gceSTATUS status;
gckVIDMEM_NODE nodeObject;
-#if gcdSECURE_USER
gcuVIDMEM_NODE_PTR node;
-#endif
gcmkHEADER_ARG("Kernel=0x%08X ProcessID=%d",
Kernel, ProcessID);
@@ -1478,10 +1340,10 @@ gckKERNEL_UnlockVideoMemory(
(gctUINT32)Interface->u.UnlockVideoMemory.node,
&nodeObject));
-#if gcdSECURE_USER
node = nodeObject->node;
/* Unlock video memory. */
+#if gcdSECURE_USER
/* Save node information before it disappears. */
if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
{
@@ -1530,6 +1392,7 @@ gckKERNEL_QueryDatabase(
{
gceSTATUS status;
gctINT i;
+ gcuDATABASE_INFO tmp;
gceDATABASE_TYPE type[3] = {
gcvDB_VIDEO_MEMORY | (gcvPOOL_SYSTEM << gcdDB_VIDEO_MEMORY_POOL_SHIFT),
@@ -1581,6 +1444,22 @@ gckKERNEL_QueryDatabase(
&Interface->u.Database.vidMemPool[i]));
}
+ /* Query virtual command buffer pool. */
+ gcmkONERROR(
+ gckKERNEL_QueryProcessDB(Kernel,
+ Interface->u.Database.processID,
+ !Interface->u.Database.validProcessID,
+ gcvDB_COMMAND_BUFFER,
+ &tmp));
+
+ Interface->u.Database.vidMemPool[2].counters.bytes += tmp.counters.bytes;
+ Interface->u.Database.vidMemPool[2].counters.maxBytes += tmp.counters.maxBytes;
+ Interface->u.Database.vidMemPool[2].counters.totalBytes += tmp.counters.totalBytes;
+
+ Interface->u.Database.vidMem.counters.bytes += tmp.counters.bytes;
+ Interface->u.Database.vidMem.counters.maxBytes += tmp.counters.maxBytes;
+ Interface->u.Database.vidMem.counters.totalBytes += tmp.counters.totalBytes;
+
#if gcmIS_DEBUG(gcdDEBUG_TRACE)
gckKERNEL_DumpVidMemUsage(Kernel, Interface->u.Database.processID);
#endif
@@ -1680,79 +1559,6 @@ OnError:
return status;
}
-gceSTATUS
-gckKERNEL_WaitFence(
- IN gckKERNEL Kernel,
- IN gctUINT32 Handle,
- IN gctUINT32 TimeOut
- )
-{
- gceSTATUS status;
- gckVIDMEM_NODE node;
- gctUINT32 processID;
- gckCOMMAND command = Kernel->command;
- gckASYNC_COMMAND asyncCommand = Kernel->asyncCommand;
- gckFENCE fence = gcvNULL;
- gctUINT i;
-
- gckOS_GetProcessID(&processID);
-
- gcmkONERROR(gckVIDMEM_HANDLE_LookupAndReference(Kernel, Handle, &node));
-
- /* Wait for fence of all engines. */
- for (i = 0; i < gcvENGINE_COUNT; i++)
- {
- gckFENCE_SYNC sync = &node->sync[i];
-
- if (i == gcvENGINE_RENDER)
- {
- fence = command->fence;
- }
- else
- {
- fence = asyncCommand->fence;
- }
-
- if (sync->commitStamp <= *(gctUINT64_PTR)fence->logical)
- {
- continue;
- }
- else
- {
- gckOS_Signal(Kernel->os, sync->signal, gcvFALSE);
-
- gcmkVERIFY_OK(gckOS_AcquireMutex(Kernel->os, &fence->mutex, gcvINFINITE));
-
- /* Add to waiting list. */
- gcsLIST_AddTail(&sync->head, &fence->waitingList);
-
- gcmkASSERT(sync->inList == gcvFALSE);
-
- sync->inList = gcvTRUE;
-
- gcmkVERIFY_OK(gckOS_ReleaseMutex(Kernel->os, &fence->mutex));
-
- /* Wait. */
- status = gckOS_WaitSignal(Kernel->os, sync->signal, gcvTRUE, TimeOut);
-
- gcmkVERIFY_OK(gckOS_AcquireMutex(Kernel->os, &fence->mutex, gcvINFINITE));
-
- if (sync->inList)
- {
- gcsLIST_Del(&sync->head);
- sync->inList = gcvFALSE;
- }
-
- gcmkVERIFY_OK(gckOS_ReleaseMutex(Kernel->os, &fence->mutex));
- }
- }
-
- gckVIDMEM_NODE_Dereference(Kernel, node);
-
-OnError:
- return status;
-}
-
/*******************************************************************************
**
** gckKERNEL_Dispatch
@@ -1780,7 +1586,6 @@ OnError:
gceSTATUS
gckKERNEL_Dispatch(
IN gckKERNEL Kernel,
- IN gckDEVICE Device,
IN gctBOOL FromUser,
IN OUT gcsHAL_INTERFACE * Interface
)
@@ -1789,10 +1594,12 @@ gckKERNEL_Dispatch(
gctPHYS_ADDR physical = gcvNULL;
gctSIZE_T bytes;
gctPOINTER logical = gcvNULL;
+ gctPOINTER info = gcvNULL;
#if (gcdENABLE_3D || gcdENABLE_2D)
gckCONTEXT context = gcvNULL;
#endif
gckKERNEL kernel = Kernel;
+ gctUINT32 address;
gctUINT32 processID;
#if gcdSECURE_USER
gcskSECURE_CACHE_PTR cache;
@@ -1834,11 +1641,9 @@ gckKERNEL_Dispatch(
{
case gcvHAL_GET_BASE_ADDRESS:
/* Get base address. */
- Interface->u.GetBaseAddress.baseAddress = Kernel->hardware->baseAddress;
-
- Interface->u.GetBaseAddress.flatMappingStart = Kernel->mmu->flatMappingStart;
-
- Interface->u.GetBaseAddress.flatMappingEnd = Kernel->mmu->flatMappingEnd;
+ gcmkONERROR(
+ gckOS_GetBaseAddress(Kernel->os,
+ &Interface->u.GetBaseAddress.baseAddress));
break;
case gcvHAL_QUERY_VIDEO_MEMORY:
@@ -2068,134 +1873,124 @@ gckKERNEL_Dispatch(
case gcvHAL_EVENT_COMMIT:
/* Commit an event queue. */
- if (Interface->u.Event.engine == gcvENGINE_BLT)
+#if gcdMULTI_GPU
+ if (Interface->u.Event.gpuMode == gcvMULTI_GPU_MODE_INDEPENDENT)
{
- if (!gckHARDWARE_IsFeatureAvailable(Kernel->hardware, gcvFEATURE_BLT_ENGINE))
- {
- gcmkONERROR(gcvSTATUS_NOT_SUPPORTED);
- }
-
- gcmkONERROR(gckEVENT_Commit(
- Kernel->asyncEvent, gcmUINT64_TO_PTR(Interface->u.Event.queue)));
+ gcmkONERROR(
+ gckEVENT_Commit(Kernel->eventObj,
+ gcmUINT64_TO_PTR(Interface->u.Event.queue),
+ Interface->u.Event.chipEnable));
}
else
{
- gcmkONERROR(gckEVENT_Commit(
- Kernel->eventObj, gcmUINT64_TO_PTR(Interface->u.Event.queue)));
+ gcmkONERROR(
+ gckEVENT_Commit(Kernel->eventObj,
+ gcmUINT64_TO_PTR(Interface->u.Event.queue),
+ gcvCORE_3D_ALL_MASK));
}
-
+#else
+ gcmkONERROR(
+ gckEVENT_Commit(Kernel->eventObj,
+ gcmUINT64_TO_PTR(Interface->u.Event.queue)));
+#endif
break;
case gcvHAL_COMMIT:
/* Commit a command and context buffer. */
- if (Interface->u.Commit.engine == gcvENGINE_BLT)
+#if gcdMULTI_GPU
+ if (Interface->u.Commit.gpuMode == gcvMULTI_GPU_MODE_INDEPENDENT)
{
- gctUINT64 *commandBuffers = gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffers);
-
- if (!gckHARDWARE_IsFeatureAvailable(Kernel->hardware, gcvFEATURE_BLT_ENGINE))
- {
- gcmkONERROR(gcvSTATUS_NOT_SUPPORTED);
- }
-
- gcmkONERROR(gckASYNC_COMMAND_Commit(
- Kernel->asyncCommand,
- gcmUINT64_TO_PTR(commandBuffers[0]),
- gcmUINT64_TO_PTR(Interface->u.Commit.queue)
- ));
-
- gcmkONERROR(gckEVENT_Commit(
- Kernel->asyncEvent,
- gcmUINT64_TO_PTR(Interface->u.Commit.queue)
- ));
+ gcmkONERROR(
+ gckCOMMAND_Commit(Kernel->command,
+ Interface->u.Commit.context ?
+ gcmNAME_TO_PTR(Interface->u.Commit.context) : gcvNULL,
+ gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffer),
+ gcmUINT64_TO_PTR(Interface->u.Commit.delta),
+ gcmUINT64_TO_PTR(Interface->u.Commit.queue),
+ processID,
+ Interface->u.Commit.chipEnable));
}
else
{
- gctUINT64 deltas[gcvCORE_COUNT];
- gctUINT64 contexts[gcvCORE_COUNT];
- gctUINT64 commandBuffers[gcvCORE_COUNT];;
-
- gcmkONERROR(gckOS_CopyFromUserData(Kernel->os,
- deltas,
- gcmUINT64_TO_PTR(Interface->u.Commit.deltas),
- Interface->u.Commit.count * sizeof(deltas[0])
- ));
-
- gcmkONERROR(gckOS_CopyFromUserData(Kernel->os,
- contexts,
- gcmUINT64_TO_PTR(Interface->u.Commit.contexts),
- Interface->u.Commit.count * sizeof(contexts[0])
- ));
-
- gcmkONERROR(gckOS_CopyFromUserData(Kernel->os,
- commandBuffers,
- gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffers),
- Interface->u.Commit.count * sizeof(commandBuffers[0])
- ));
-
- status = gckCOMMAND_Commit(Kernel->command,
- contexts[0] ?
- gcmNAME_TO_PTR(contexts[0]) : gcvNULL,
- gcmUINT64_TO_PTR(commandBuffers[0]),
- gcmUINT64_TO_PTR(deltas[0]),
- gcmUINT64_TO_PTR(Interface->u.Commit.queue),
- processID,
- Interface->u.Commit.shared,
- Interface->u.Commit.index
- );
-
- if (status != gcvSTATUS_INTERRUPTED)
- {
- gcmkONERROR(status);
- }
-
- if (Interface->u.Commit.count > 1 && Interface->u.Commit.engine == gcvENGINE_RENDER)
- {
- gctUINT32 i;
-
- for (i = 1; i < Interface->u.Commit.count; i++)
- {
- gceHARDWARE_TYPE type = Interface->hardwareType;
- gckKERNEL kernel = Device->map[type].kernels[i];
-
- status = gckCOMMAND_Commit(kernel->command,
- contexts[i] ?
- gcmNAME_TO_PTR(contexts[i]) : gcvNULL,
- commandBuffers[i] ?
- gcmUINT64_TO_PTR(commandBuffers[i]) : gcmUINT64_TO_PTR(commandBuffers[0]),
- gcmUINT64_TO_PTR(deltas[i]),
- gcvNULL,
- processID,
- Interface->u.Commit.shared,
- commandBuffers[i] ?
- Interface->u.Commit.index : i
- );
-
- if (status != gcvSTATUS_INTERRUPTED)
- {
- gcmkONERROR(status);
- }
- }
- }
+ gcmkONERROR(
+ gckCOMMAND_Commit(Kernel->command,
+ Interface->u.Commit.context ?
+ gcmNAME_TO_PTR(Interface->u.Commit.context) : gcvNULL,
+ gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffer),
+ gcmUINT64_TO_PTR(Interface->u.Commit.delta),
+ gcmUINT64_TO_PTR(Interface->u.Commit.queue),
+ processID,
+ gcvCORE_3D_ALL_MASK));
}
+#else
+ gcmkONERROR(
+ gckCOMMAND_Commit(Kernel->command,
+ Interface->u.Commit.context ?
+ gcmNAME_TO_PTR(Interface->u.Commit.context) : gcvNULL,
+ gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffer),
+ gcmUINT64_TO_PTR(Interface->u.Commit.delta),
+ gcmUINT64_TO_PTR(Interface->u.Commit.queue),
+ processID));
+#endif
break;
case gcvHAL_STALL:
/* Stall the command queue. */
+#if gcdMULTI_GPU
+ gcmkONERROR(gckCOMMAND_Stall(Kernel->command, gcvFALSE, gcvCORE_3D_ALL_MASK));
+#else
gcmkONERROR(gckCOMMAND_Stall(Kernel->command, gcvFALSE));
-
+#endif
break;
case gcvHAL_MAP_USER_MEMORY:
+ /* Map user memory to DMA. */
+ gcmkONERROR(
+ gckOS_MapUserMemory(Kernel->os,
+ Kernel->core,
+ gcmUINT64_TO_PTR(Interface->u.MapUserMemory.memory),
+ Interface->u.MapUserMemory.physical,
+ (gctSIZE_T) Interface->u.MapUserMemory.size,
+ &info,
+ &Interface->u.MapUserMemory.address));
- gcmkONERROR(gcvSTATUS_NOT_SUPPORTED);
+ Interface->u.MapUserMemory.info = gcmPTR_TO_NAME(info);
+ gcmkVERIFY_OK(
+ gckKERNEL_AddProcessDB(Kernel,
+ processID, gcvDB_MAP_USER_MEMORY,
+ gcmINT2PTR(Interface->u.MapUserMemory.info),
+ gcmUINT64_TO_PTR(Interface->u.MapUserMemory.memory),
+ (gctSIZE_T) Interface->u.MapUserMemory.size));
break;
case gcvHAL_UNMAP_USER_MEMORY:
+ address = Interface->u.UnmapUserMemory.address;
+ info = gcmNAME_TO_PTR(Interface->u.UnmapUserMemory.info);
- gcmkONERROR(gcvSTATUS_NOT_SUPPORTED);
+ gcmkVERIFY_OK(
+ gckKERNEL_RemoveProcessDB(Kernel,
+ processID, gcvDB_MAP_USER_MEMORY,
+ gcmINT2PTR(Interface->u.UnmapUserMemory.info)));
+ /* Unmap user memory. */
+ gcmkONERROR(
+ gckOS_UnmapUserMemory(Kernel->os,
+ Kernel->core,
+ gcmUINT64_TO_PTR(Interface->u.UnmapUserMemory.memory),
+ (gctSIZE_T) Interface->u.UnmapUserMemory.size,
+ info,
+ address));
+
+#if gcdSECURE_USER
+ gcmkVERIFY_OK(gckKERNEL_FlushTranslationCache(
+ Kernel,
+ cache,
+ gcmUINT64_TO_PTR(Interface->u.UnmapUserMemory.memory),
+ (gctSIZE_T) Interface->u.UnmapUserMemory.size));
+#endif
+ gcmRELEASE_NAME(Interface->u.UnmapUserMemory.info);
break;
#if !USE_NEW_LINUX_SIGNAL
@@ -2243,6 +2038,7 @@ gckKERNEL_Dispatch(
status = gckOS_WaitUserSignal(Kernel->os,
Interface->u.UserSignal.id,
Interface->u.UserSignal.wait);
+
break;
case gcvUSER_SIGNAL_MAP:
@@ -2336,6 +2132,106 @@ gckKERNEL_Dispatch(
#endif
break;
+#if gcdMULTI_GPU
+ case gcvHAL_READ_REGISTER_EX:
+#if gcdREGISTER_ACCESS_FROM_USER
+ {
+ gceCHIPPOWERSTATE power;
+ gctUINT32 coreId = 0;
+ gctUINT32 coreSelect = Interface->u.ReadRegisterDataEx.coreSelect;
+
+ gckOS_AcquireMutex(Kernel->os, Kernel->hardware->powerMutex, gcvINFINITE);
+ powerMutexAcquired = gcvTRUE;
+ gcmkONERROR(gckHARDWARE_QueryPowerManagementState(Kernel->hardware,
+ &power));
+ if (power == gcvPOWER_ON)
+ {
+ for (; coreSelect != 0; coreSelect >>= 1, coreId++)
+ {
+ if (coreSelect & 1UL)
+ {
+ /* Read a register. */
+ gcmkONERROR(
+ gckOS_ReadRegisterByCoreId(
+ Kernel->os,
+ Kernel->core,
+ coreId,
+ Interface->u.ReadRegisterDataEx.address,
+ &Interface->u.ReadRegisterDataEx.data[coreId]));
+ }
+ }
+ }
+ else
+ {
+ for (coreId = 0; coreId < gcdMULTI_GPU; coreId++)
+ {
+ /* Chip is in power-state. */
+ Interface->u.ReadRegisterDataEx.data[coreId] = 0;
+ }
+ status = gcvSTATUS_CHIP_NOT_READY;
+ }
+ gcmkONERROR(gckOS_ReleaseMutex(Kernel->os, Kernel->hardware->powerMutex));
+ powerMutexAcquired = gcvFALSE;
+ }
+#else
+ gctUINT32 coreId;
+
+ /* No access from user land to read registers. */
+ for (coreId = 0; coreId < gcdMULTI_GPU; coreId++)
+ {
+ Interface->u.ReadRegisterDataEx.data[coreId] = 0;
+ }
+
+ status = gcvSTATUS_NOT_SUPPORTED;
+#endif
+ break;
+
+ case gcvHAL_WRITE_REGISTER_EX:
+#if gcdREGISTER_ACCESS_FROM_USER
+ {
+ gceCHIPPOWERSTATE power;
+ gctUINT32 coreId = 0;
+ gctUINT32 coreSelect = Interface->u.WriteRegisterDataEx.coreSelect;
+
+ gcmkONERROR(gckOS_AcquireMutex(Kernel->os, Kernel->hardware->powerMutex, gcvINFINITE));
+ powerMutexAcquired = gcvTRUE;
+ gcmkONERROR(gckHARDWARE_QueryPowerManagementState(Kernel->hardware,
+ &power));
+ if (power == gcvPOWER_ON)
+ {
+ for (; coreSelect != 0; coreSelect >>= 1, coreId++)
+ {
+ if (coreSelect & 1UL)
+ {
+ /* Write a register. */
+ gcmkONERROR(
+ gckOS_WriteRegisterByCoreId(
+ Kernel->os,
+ Kernel->core,
+ coreId,
+ Interface->u.WriteRegisterDataEx.address,
+ Interface->u.WriteRegisterDataEx.data[coreId]));
+ }
+ }
+ }
+ else
+ {
+ /* Chip is in power-state. */
+ for (coreId = 0; coreId < gcdMULTI_GPU; coreId++)
+ {
+ Interface->u.WriteRegisterDataEx.data[coreId] = 0;
+ }
+ status = gcvSTATUS_CHIP_NOT_READY;
+ }
+ gcmkONERROR(gckOS_ReleaseMutex(Kernel->os, Kernel->hardware->powerMutex));
+ powerMutexAcquired = gcvFALSE;
+ }
+#else
+ status = gcvSTATUS_NOT_SUPPORTED;
+#endif
+ break;
+#endif
+
case gcvHAL_WRITE_REGISTER:
#if gcdREGISTER_ACCESS_FROM_USER
{
@@ -2371,25 +2267,13 @@ gckKERNEL_Dispatch(
case gcvHAL_READ_ALL_PROFILE_REGISTERS:
#if VIVANTE_PROFILER && VIVANTE_PROFILER_CONTEXT
- if (Kernel->profileSyncMode)
- {
- /* Read profile data according to the context. */
- gcmkONERROR(
- gckHARDWARE_QueryContextProfile(
- Kernel->hardware,
- Kernel->profileCleanRegister,
- gcmNAME_TO_PTR(Interface->u.RegisterProfileData.context),
- &Interface->u.RegisterProfileData.counters));
- }
- else
- {
- /* Read all 3D profile registers. */
- gcmkONERROR(
- gckHARDWARE_QueryProfileRegisters(
- Kernel->hardware,
- Kernel->profileCleanRegister,
- &Interface->u.RegisterProfileData.counters));
- }
+ /* Read profile data according to the context. */
+ gcmkONERROR(
+ gckHARDWARE_QueryContextProfile(
+ Kernel->hardware,
+ Kernel->profileCleanRegister,
+ gcmNAME_TO_PTR(Interface->u.RegisterProfileData.context),
+ &Interface->u.RegisterProfileData.counters));
#elif VIVANTE_PROFILER
/* Read all 3D profile registers. */
gcmkONERROR(
@@ -2418,7 +2302,6 @@ gckKERNEL_Dispatch(
#if VIVANTE_PROFILER
/* Get profile setting */
Interface->u.GetProfileSetting.enable = Kernel->profileEnable;
- Interface->u.GetProfileSetting.syncMode = Kernel->profileSyncMode;
#endif
status = gcvSTATUS_OK;
@@ -2430,15 +2313,14 @@ gckKERNEL_Dispatch(
if(Kernel->hardware->gpuProfiler)
{
Kernel->profileEnable = Interface->u.SetProfileSetting.enable;
- Kernel->profileSyncMode = Interface->u.SetProfileSetting.syncMode;
-/*
- if ((Kernel->hardware->identity.chipModel == gcv1500 && Kernel->hardware->identity.chipRevision == 0x5246) ||
+
+ if ((Kernel->hardware->identity.chipModel == gcv1500 && Kernel->hardware->identity.chipRevision == 0x5246) ||
(Kernel->hardware->identity.chipModel == gcv3000 && Kernel->hardware->identity.chipRevision == 0x5450))
-*/
gcmkONERROR(gckHARDWARE_InitProfiler(Kernel->hardware));
-#if VIVANTE_PROFILER_PROBE
- gckHARDWARE_InitProfiler(Kernel->hardware);
+#if VIVANTE_PROFILER_NEW
+ if (Kernel->profileEnable)
+ gckHARDWARE_InitProfiler(Kernel->hardware);
#endif
}
else
@@ -2487,11 +2369,7 @@ gckKERNEL_Dispatch(
/* Print a message to the debugger. */
if (Interface->u.Debug.type == gcvMESSAGE_TEXT)
{
- gckOS_DumpBuffer(Kernel->os,
- Interface->u.Debug.message,
- gcmSIZEOF(Interface->u.Debug.message),
- gceDUMP_BUFFER_FROM_USER,
- gcvTRUE);
+ gckOS_CopyPrint(Interface->u.Debug.message);
}
else
{
@@ -2538,7 +2416,6 @@ gckKERNEL_Dispatch(
case gcvHAL_CACHE:
logical = gcmUINT64_TO_PTR(Interface->u.Cache.logical);
-
bytes = (gctSIZE_T) Interface->u.Cache.bytes;
switch(Interface->u.Cache.operation)
{
@@ -2754,7 +2631,6 @@ gckKERNEL_Dispatch(
case gcvHAL_QUERY_RESET_TIME_STAMP:
Interface->u.QueryResetTimeStamp.timeStamp = Kernel->resetTimeStamp;
- Interface->u.QueryResetTimeStamp.contextID = Kernel->hardware->contextID;
break;
case gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER:
@@ -2768,7 +2644,7 @@ gckKERNEL_Dispatch(
gcmkONERROR(gckOS_DestroyUserVirtualMapping(
Kernel->os,
- buffer->virtualBuffer.physical,
+ buffer->physical,
(gctSIZE_T)Interface->u.FreeVirtualCommandBuffer.bytes,
gcmUINT64_TO_PTR(Interface->u.FreeVirtualCommandBuffer.logical)));
@@ -2945,7 +2821,6 @@ gckKERNEL_Dispatch(
}
break;
-
case gcvHAL_CONFIG_POWER_MANAGEMENT:
gcmkONERROR(gckKERNEL_ConfigPowerManagement(Kernel, Interface));
break;
@@ -2959,15 +2834,7 @@ gckKERNEL_Dispatch(
));
break;
- case gcvHAL_WAIT_FENCE:
- gcmkONERROR(gckKERNEL_WaitFence(
- Kernel,
- Interface->u.WaitFence.handle,
- Interface->u.WaitFence.timeOut
- ));
- break;
-
-#if gcdDEC_ENABLE_AHB
+#if gcdENABLE_DEC_COMPRESSION && gcdDEC_ENABLE_AHB
case gcvHAL_DEC300_READ:
gcmkONERROR(viv_dec300_read(
Interface->u.DEC300Read.enable,
@@ -3155,7 +3022,11 @@ gckKERNEL_AttachProcessEx(
if (Kernel->vg == gcvNULL)
#endif
{
+#if gcdMULTI_GPU
+ status = gckEVENT_Submit(Kernel->eventObj, gcvTRUE, gcvFALSE, gcvCORE_3D_ALL_MASK);
+#else
status = gckEVENT_Submit(Kernel->eventObj, gcvTRUE, gcvFALSE);
+#endif
if (status == gcvSTATUS_INTERRUPTED && Kernel->eventObj->submitTimer)
{
@@ -3723,6 +3594,8 @@ gckKERNEL_Recovery(
gcskSECURE_CACHE_PTR cache;
#endif
gctUINT32 mask = 0;
+ gckCOMMAND command;
+ gckENTRYDATA data;
gctUINT32 i = 0, count = 0;
#if gcdINTERRUPT_STATISTIC
gctINT32 oldValue;
@@ -3741,6 +3614,10 @@ gckKERNEL_Recovery(
hardware = Kernel->hardware;
gcmkVERIFY_OBJECT(hardware, gcvOBJ_HARDWARE);
+ /* Grab gckCOMMAND object. */
+ command = Kernel->command;
+ gcmkVERIFY_OBJECT(command, gcvOBJ_COMMAND);
+
#if gcdSECURE_USER
/* Flush the secure mapping cache. */
gcmkONERROR(gckOS_GetProcessID(&processID));
@@ -3754,25 +3631,26 @@ gckKERNEL_Recovery(
}
else
{
- gcmkVERIFY_OK(gckOS_AcquireMutex(Kernel->os, Kernel->device->stuckDumpMutex, gcvINFINITE));
-
_DumpDriverConfigure(Kernel);
_DumpState(Kernel);
-
- gcmkVERIFY_OK(gckOS_ReleaseMutex(Kernel->os, Kernel->device->stuckDumpMutex));
}
if (Kernel->recovery == gcvFALSE)
{
gcmkPRINT("[galcore]: Stop driver to keep scene.");
- /* Stop monitor timer. */
- Kernel->monitorTimerStop = gcvTRUE;
+ for (;;)
+ {
+ gckOS_Delay(Kernel->os, 10000);
+ }
+ }
- /* Success. */
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
+ /* Clear queue. */
+ do
+ {
+ status = gckENTRYQUEUE_Dequeue(&command->queue, &data);
}
+ while (status == gcvSTATUS_OK);
/* Issuing a soft reset for the GPU. */
gcmkONERROR(gckHARDWARE_Reset(hardware));
@@ -3788,7 +3666,39 @@ gckKERNEL_Recovery(
}
/* Handle all outstanding events now. */
+#if gcdSMP
+#if gcdMULTI_GPU
+ if (Kernel->core == gcvCORE_MAJOR)
+ {
+ for (i = 0; i < gcdMULTI_GPU; i++)
+ {
+ gcmkONERROR(gckOS_AtomSet(Kernel->os, eventObj->pending3D[i], mask));
+ }
+ }
+ else
+ {
+ gcmkONERROR(gckOS_AtomSet(Kernel->os, eventObj->pending, mask));
+ }
+#else
gcmkONERROR(gckOS_AtomSet(Kernel->os, eventObj->pending, mask));
+#endif
+#else
+#if gcdMULTI_GPU
+ if (Kernel->core == gcvCORE_MAJOR)
+ {
+ for (i = 0; i < gcdMULTI_GPU; i++)
+ {
+ eventObj->pending3D[i] = mask;
+ }
+ }
+ else
+ {
+ eventObj->pending = mask;
+ }
+#else
+ eventObj->pending = mask;
+#endif
+#endif
#if gcdINTERRUPT_STATISTIC
while (count--)
@@ -4011,143 +3921,17 @@ gckKERNEL_AllocateVirtualCommandBuffer(
OUT gctPOINTER * Logical
)
{
- gceSTATUS status;
- gckOS os = Kernel->os;
- gckVIRTUAL_COMMAND_BUFFER_PTR buffer;
-
- gcmkHEADER_ARG("Os=0x%X InUserSpace=%d *Bytes=%lu",
- os, InUserSpace, gcmOPT_VALUE(Bytes));
-
- /* Verify the arguments. */
- gcmkVERIFY_OBJECT(os, gcvOBJ_OS);
- gcmkVERIFY_ARGUMENT(Bytes != gcvNULL);
- gcmkVERIFY_ARGUMENT(*Bytes > 0);
- gcmkVERIFY_ARGUMENT(Physical != gcvNULL);
- gcmkVERIFY_ARGUMENT(Logical != gcvNULL);
-
- gcmkONERROR(
- gckOS_Allocate(
- os,
- sizeof(gckVIRTUAL_COMMAND_BUFFER),
- (gctPOINTER)&buffer
- ));
-
- gcmkONERROR(gckOS_ZeroMemory(buffer, sizeof(gckVIRTUAL_COMMAND_BUFFER)));
-
- gcmkONERROR(
- gckKERNEL_AllocateVirtualMemory(
- Kernel,
- gcvFALSE,
- InUserSpace,
- Bytes,
- (gctPHYS_ADDR *)&buffer,
- Logical
- ));
-
- gcmkVERIFY_OK(gckOS_AcquireMutex(os, Kernel->virtualBufferLock, gcvINFINITE));
-
- if (Kernel->virtualBufferHead == gcvNULL)
- {
- Kernel->virtualBufferHead =
- Kernel->virtualBufferTail = buffer;
- }
- else
- {
- buffer->prev = Kernel->virtualBufferTail;
- Kernel->virtualBufferTail->next = buffer;
- Kernel->virtualBufferTail = buffer;
- }
-
- gcmkVERIFY_OK(gckOS_ReleaseMutex(os, Kernel->virtualBufferLock));
-
- *Physical = buffer;
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- gcmkVERIFY_OK(gckOS_Free(os, buffer));
-
- /* Return the status. */
- gcmkFOOTER();
- return status;
-}
-
-gceSTATUS
-gckKERNEL_DestroyVirtualCommandBuffer(
- IN gckKERNEL Kernel,
- IN gctSIZE_T Bytes,
- IN gctPHYS_ADDR Physical,
- IN gctPOINTER Logical
- )
-{
- gckOS os;
- gckKERNEL kernel;
- gckVIRTUAL_COMMAND_BUFFER_PTR buffer = (gckVIRTUAL_COMMAND_BUFFER_PTR)Physical;
-
- gcmkHEADER();
- gcmkVERIFY_ARGUMENT(buffer != gcvNULL);
-
- kernel = buffer->virtualBuffer.kernel;
- os = kernel->os;
-
- gcmkVERIFY_OK(gckOS_AcquireMutex(os, kernel->virtualBufferLock, gcvINFINITE));
-
- if (buffer == kernel->virtualBufferHead)
- {
- if ((kernel->virtualBufferHead = buffer->next) == gcvNULL)
- {
- kernel->virtualBufferTail = gcvNULL;
- }
- }
- else
- {
- buffer->prev->next = buffer->next;
-
- if (buffer == kernel->virtualBufferTail)
- {
- kernel->virtualBufferTail = buffer->prev;
- }
- else
- {
- buffer->next->prev = buffer->prev;
- }
- }
-
- gcmkVERIFY_OK(gckOS_ReleaseMutex(os, kernel->virtualBufferLock));
-
- gcmkVERIFY_OK(
- gckKERNEL_FreeVirtualMemory(
- Physical,
- Logical,
- gcvFALSE
- ));
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gckKERNEL_AllocateVirtualMemory(
- IN gckKERNEL Kernel,
- IN gctBOOL NonPaged,
- IN gctBOOL InUserSpace,
- IN OUT gctSIZE_T * Bytes,
- OUT gctPHYS_ADDR * Physical,
- OUT gctPOINTER * Logical
- )
-{
gckOS os = Kernel->os;
gceSTATUS status;
gctPOINTER logical = gcvNULL;
gctSIZE_T pageCount;
gctSIZE_T bytes = *Bytes;
- gckVIRTUAL_BUFFER_PTR buffer = gcvNULL;
+ gckVIRTUAL_COMMAND_BUFFER_PTR buffer = gcvNULL;
gckMMU mmu;
gctUINT32 flag = gcvALLOC_FLAG_NON_CONTIGUOUS;
gcmkHEADER_ARG("Os=0x%X InUserSpace=%d *Bytes=%lu",
- os, InUserSpace, gcmOPT_VALUE(Bytes));
+ os, InUserSpace, gcmOPT_VALUE(Bytes));
/* Verify the arguments. */
gcmkVERIFY_OBJECT(os, gcvOBJ_OS);
@@ -4156,83 +3940,41 @@ gckKERNEL_AllocateVirtualMemory(
gcmkVERIFY_ARGUMENT(Physical != gcvNULL);
gcmkVERIFY_ARGUMENT(Logical != gcvNULL);
- if (*Physical == gcvNULL)
- {
- gcmkONERROR(gckOS_Allocate(os,
- sizeof(gckVIRTUAL_BUFFER),
- (gctPOINTER)&buffer));
+ gcmkONERROR(gckOS_Allocate(os,
+ sizeof(gckVIRTUAL_COMMAND_BUFFER),
+ (gctPOINTER)&buffer));
- gcmkONERROR(gckOS_ZeroMemory(buffer, sizeof(gckVIRTUAL_BUFFER)));
- }
- else
- {
- buffer = *Physical;
- }
+ gcmkONERROR(gckOS_ZeroMemory(buffer, sizeof(gckVIRTUAL_COMMAND_BUFFER)));
buffer->bytes = bytes;
- if (NonPaged)
- {
- gcmkONERROR(gckOS_AllocateNonPagedMemory(
- os,
- InUserSpace,
- &bytes,
- &buffer->physical,
- &logical
- ));
- }
- else
- {
- gcmkONERROR(gckOS_AllocatePagedMemoryEx(os,
- flag,
- bytes,
- gcvNULL,
- &buffer->physical));
- }
+ gcmkONERROR(gckOS_AllocatePagedMemoryEx(os,
+ flag,
+ bytes,
+ gcvNULL,
+ &buffer->physical));
- if (NonPaged)
+ if (InUserSpace)
{
- gctSIZE_T pageSize;
- gcmkONERROR(gckOS_GetPageSize(os, &pageSize));
-
- pageCount = (bytes + pageSize - 1) / pageSize;
+ gcmkONERROR(gckOS_CreateUserVirtualMapping(os,
+ buffer->physical,
+ bytes,
+ &logical,
+ &pageCount));
- if (InUserSpace)
- {
- *Logical =
- buffer->userLogical = logical;
- }
- else
- {
- *Logical =
- buffer->kernelLogical = logical;
- }
+ *Logical =
+ buffer->userLogical = logical;
}
else
{
- if (InUserSpace)
- {
- gcmkONERROR(gckOS_CreateUserVirtualMapping(os,
- buffer->physical,
- bytes,
- &logical,
- &pageCount));
-
- *Logical =
- buffer->userLogical = logical;
- }
- else
- {
- gcmkONERROR(gckOS_CreateKernelVirtualMapping(os,
- buffer->physical,
- bytes,
- &logical,
- &pageCount));
-
- *Logical =
- buffer->kernelLogical = logical;
- }
+ gcmkONERROR(gckOS_CreateKernelVirtualMapping(os,
+ buffer->physical,
+ bytes,
+ &logical,
+ &pageCount));
+ *Logical =
+ buffer->kernelLogical = logical;
}
buffer->pageCount = pageCount;
@@ -4248,115 +3990,99 @@ gckKERNEL_AllocateVirtualMemory(
#endif
gcmkONERROR(gckMMU_AllocatePages(mmu,
- pageCount,
- &buffer->pageTable,
- &buffer->gpuAddress));
+ pageCount,
+ &buffer->pageTable,
+ &buffer->gpuAddress));
+
+
+ gcmkONERROR(gckOS_MapPagesEx(os,
+ Kernel->core,
+ buffer->physical,
+ pageCount,
+ buffer->gpuAddress,
+ buffer->pageTable));
+
+ gcmkONERROR(gckMMU_Flush(mmu, gcvSURF_INDEX));
+
+ *Physical = buffer;
-#if gcdENABLE_TRUST_APPLICATION
- if (Kernel->hardware->secureMode == gcvSECURE_IN_TA)
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_KERNEL,
+ "gpuAddress = %x pageCount = %d kernelLogical = %x userLogical=%x",
+ buffer->gpuAddress, buffer->pageCount,
+ buffer->kernelLogical, buffer->userLogical);
+
+ gcmkVERIFY_OK(gckOS_AcquireMutex(os, Kernel->virtualBufferLock, gcvINFINITE));
+
+ if (Kernel->virtualBufferHead == gcvNULL)
{
- gcmkONERROR(gckKERNEL_MapInTrustApplicaiton(
- Kernel,
- logical,
- buffer->physical,
- buffer->gpuAddress,
- pageCount
- ));
+ Kernel->virtualBufferHead =
+ Kernel->virtualBufferTail = buffer;
}
else
-#endif
{
- gcmkONERROR(gckOS_MapPagesEx(os,
- Kernel->core,
- buffer->physical,
- pageCount,
- buffer->gpuAddress,
- buffer->pageTable,
- gcvFALSE,
- gcvSURF_TYPE_UNKNOWN
- ));
+ buffer->prev = Kernel->virtualBufferTail;
+ Kernel->virtualBufferTail->next = buffer;
+ Kernel->virtualBufferTail = buffer;
}
- gcmkONERROR(gckMMU_Flush(mmu, gcvSURF_INDEX));
-
- if (*Physical == gcvNULL)
- *Physical = buffer;
-
- gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_KERNEL,
- "gpuAddress = %x pageCount = %d kernelLogical = %x userLogical=%x",
- buffer->gpuAddress, buffer->pageCount,
- buffer->kernelLogical, buffer->userLogical);
+ gcmkVERIFY_OK(gckOS_ReleaseMutex(os, Kernel->virtualBufferLock));
gcmkFOOTER_NO();
return gcvSTATUS_OK;
OnError:
- if (buffer && buffer->gpuAddress)
+ if (buffer->gpuAddress)
{
#if gcdPROCESS_ADDRESS_SPACE
gcmkVERIFY_OK(
- gckMMU_FreePages(mmu, gcvFALSE, buffer->gpuAddress, buffer->pageTable, buffer->pageCount));
+ gckMMU_FreePages(mmu, buffer->pageTable, buffer->pageCount));
#else
gcmkVERIFY_OK(
- gckMMU_FreePages(Kernel->mmu, gcvFALSE, buffer->gpuAddress, buffer->pageTable, buffer->pageCount));
+ gckMMU_FreePages(Kernel->mmu, buffer->pageTable, buffer->pageCount));
#endif
}
- if (NonPaged && buffer->physical)
+ if (buffer->userLogical)
{
- gcmkVERIFY_OK(gckOS_FreeNonPagedMemory(
- os,
- bytes,
- buffer->physical,
- logical
- ));
+ gcmkVERIFY_OK(
+ gckOS_DestroyUserVirtualMapping(os,
+ buffer->physical,
+ bytes,
+ buffer->userLogical));
}
- else
- {
- if (buffer && buffer->userLogical)
- {
- gcmkVERIFY_OK(
- gckOS_DestroyUserVirtualMapping(os,
- buffer->physical,
- bytes,
- (NonPaged ? 0 : buffer->userLogical)));
- }
- if (buffer && buffer->kernelLogical)
- {
- gcmkVERIFY_OK(
- gckOS_DestroyKernelVirtualMapping(os,
- buffer->physical,
- bytes,
- (NonPaged ? 0 : buffer->kernelLogical)));
- }
+ if (buffer->kernelLogical)
+ {
+ gcmkVERIFY_OK(
+ gckOS_DestroyKernelVirtualMapping(os,
+ buffer->physical,
+ bytes,
+ buffer->kernelLogical));
+ }
- if (buffer && buffer->physical)
- {
- gcmkVERIFY_OK(gckOS_FreePagedMemory(os, buffer->physical, bytes));
- }
+ if (buffer->physical)
+ {
+ gcmkVERIFY_OK(gckOS_FreePagedMemory(os, buffer->physical, bytes));
}
- if (*Physical == gcvNULL)
- gcmkVERIFY_OK(gckOS_Free(os, buffer));
+ gcmkVERIFY_OK(gckOS_Free(os, buffer));
/* Return the status. */
gcmkFOOTER();
return status;
-
}
gceSTATUS
-gckKERNEL_FreeVirtualMemory(
+gckKERNEL_DestroyVirtualCommandBuffer(
+ IN gckKERNEL Kernel,
+ IN gctSIZE_T Bytes,
IN gctPHYS_ADDR Physical,
- IN gctPOINTER Logical,
- IN gctBOOL NonPaged
+ IN gctPOINTER Logical
)
{
gckOS os;
gckKERNEL kernel;
- gckMMU mmu;
- gckVIRTUAL_BUFFER_PTR buffer = (gckVIRTUAL_BUFFER_PTR)Physical;
+ gckVIRTUAL_COMMAND_BUFFER_PTR buffer = (gckVIRTUAL_COMMAND_BUFFER_PTR)Physical;
gcmkHEADER();
gcmkVERIFY_ARGUMENT(buffer != gcvNULL);
@@ -4364,39 +4090,48 @@ gckKERNEL_FreeVirtualMemory(
kernel = buffer->kernel;
os = kernel->os;
-#if gcdPROCESS_ADDRESS_SPACE
- gcmkONERROR(gckKERNEL_GetProcessMMU(Kernel, &mmu));
-#else
- mmu = kernel->mmu;
-#endif
-
- if (!buffer->userLogical && !NonPaged)
+ if (!buffer->userLogical)
{
gcmkVERIFY_OK(gckOS_DestroyKernelVirtualMapping(os,
- buffer->physical,
- buffer->bytes,
- Logical));
+ buffer->physical,
+ Bytes,
+ Logical));
}
+#if !gcdPROCESS_ADDRESS_SPACE
gcmkVERIFY_OK(
- gckMMU_FreePages(mmu, gcvFALSE, buffer->gpuAddress, buffer->pageTable, buffer->pageCount));
+ gckMMU_FreePages(kernel->mmu, buffer->pageTable, buffer->pageCount));
+#endif
gcmkVERIFY_OK(gckOS_UnmapPages(os, buffer->pageCount, buffer->gpuAddress));
- if (NonPaged)
+ gcmkVERIFY_OK(gckOS_FreePagedMemory(os, buffer->physical, Bytes));
+
+ gcmkVERIFY_OK(gckOS_AcquireMutex(os, kernel->virtualBufferLock, gcvINFINITE));
+
+ if (buffer == kernel->virtualBufferHead)
{
- gcmkVERIFY_OK(gckOS_FreeNonPagedMemory(
- os,
- buffer->bytes,
- buffer->physical,
- Logical
- ));
+ if ((kernel->virtualBufferHead = buffer->next) == gcvNULL)
+ {
+ kernel->virtualBufferTail = gcvNULL;
+ }
}
else
{
- gcmkVERIFY_OK(gckOS_FreePagedMemory(os, buffer->physical, buffer->bytes));
+ buffer->prev->next = buffer->next;
+
+ if (buffer == kernel->virtualBufferTail)
+ {
+ kernel->virtualBufferTail = buffer->prev;
+ }
+ else
+ {
+ buffer->next->prev = buffer->prev;
+ }
}
+ gcmkVERIFY_OK(gckOS_ReleaseMutex(os, kernel->virtualBufferLock));
+
gcmkVERIFY_OK(gckOS_Free(os, buffer));
gcmkFOOTER_NO();
@@ -4408,11 +4143,11 @@ gckKERNEL_GetGPUAddress(
IN gckKERNEL Kernel,
IN gctPOINTER Logical,
IN gctBOOL InUserSpace,
- IN gctPHYS_ADDR Physical,
+ IN gckVIRTUAL_COMMAND_BUFFER_PTR Buffer,
OUT gctUINT32 * Address
)
{
- gckVIRTUAL_BUFFER_PTR buffer = Physical;
+ gckVIRTUAL_COMMAND_BUFFER_PTR buffer = Buffer;
gctPOINTER start;
gcmkHEADER_ARG("Logical = %x InUserSpace=%d.", Logical, InUserSpace);
@@ -4427,7 +4162,7 @@ gckKERNEL_GetGPUAddress(
}
gcmkASSERT(Logical >= start
- && (Logical < (gctPOINTER)((gctUINT8_PTR)start + buffer->bytes)));
+ && (Logical < (gctPOINTER)((gctUINT8_PTR)start + buffer->pageCount * 4096)));
* Address = buffer->gpuAddress + (gctUINT32)((gctUINT8_PTR)Logical - (gctUINT8_PTR)start);
@@ -4451,9 +4186,9 @@ gckKERNEL_QueryGPUAddress(
/* Walk all command buffers. */
for (buffer = Kernel->virtualBufferHead; buffer != gcvNULL; buffer = buffer->next)
{
- start = (gctUINT32)buffer->virtualBuffer.gpuAddress;
+ start = (gctUINT32)buffer->gpuAddress;
- if (GpuAddress >= start && GpuAddress <= (start - 1 + buffer->virtualBuffer.pageCount * 4096))
+ if (GpuAddress >= start && GpuAddress < (start + buffer->pageCount * 4096))
{
/* Find a range matched. */
*Buffer = buffer;
@@ -4467,87 +4202,110 @@ gckKERNEL_QueryGPUAddress(
return status;
}
+#if gcdLINK_QUEUE_SIZE
static void
-gckQUEUE_Dequeue(
- IN gckQUEUE LinkQueue
+gckLINKQUEUE_Dequeue(
+ IN gckLINKQUEUE LinkQueue
)
{
- gcmkASSERT(LinkQueue->count == LinkQueue->size);
+ gcmkASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
LinkQueue->count--;
LinkQueue->front = (LinkQueue->front + 1) % gcdLINK_QUEUE_SIZE;
}
void
-gckQUEUE_Enqueue(
- IN gckQUEUE LinkQueue,
- IN gcuQUEUEDATA *Data
+gckLINKQUEUE_Enqueue(
+ IN gckLINKQUEUE LinkQueue,
+ IN gctUINT32 start,
+ IN gctUINT32 end,
+ IN gctUINT32 LinkLow,
+ IN gctUINT32 LinkHigh
)
{
- gcuQUEUEDATA * datas = LinkQueue->datas;
-
- if (LinkQueue->count == LinkQueue->size)
+ if (LinkQueue->count == gcdLINK_QUEUE_SIZE)
{
- gckQUEUE_Dequeue(LinkQueue);
+ gckLINKQUEUE_Dequeue(LinkQueue);
}
- gcmkASSERT(LinkQueue->count < LinkQueue->size);
+ gcmkASSERT(LinkQueue->count < gcdLINK_QUEUE_SIZE);
LinkQueue->count++;
- datas[LinkQueue->rear] = *Data;
+ LinkQueue->data[LinkQueue->rear].start = start;
+ LinkQueue->data[LinkQueue->rear].end = end;
+ LinkQueue->data[LinkQueue->rear].linkLow = LinkLow;
+ LinkQueue->data[LinkQueue->rear].linkHigh = LinkHigh;
+
+
+ gcmkVERIFY_OK(
+ gckOS_GetProcessID(&LinkQueue->data[LinkQueue->rear].pid));
- LinkQueue->rear = (LinkQueue->rear + 1) % LinkQueue->size;
+ LinkQueue->rear = (LinkQueue->rear + 1) % gcdLINK_QUEUE_SIZE;
}
void
-gckQUEUE_GetData(
- IN gckQUEUE LinkQueue,
+gckLINKQUEUE_GetData(
+ IN gckLINKQUEUE LinkQueue,
IN gctUINT32 Index,
- OUT gcuQUEUEDATA ** Data
+ OUT gckLINKDATA * Data
)
{
- gcuQUEUEDATA * datas = LinkQueue->datas;
+ gcmkASSERT(Index >= 0 && Index < gcdLINK_QUEUE_SIZE);
- gcmkASSERT(Index >= 0 && Index < LinkQueue->size);
-
- *Data = &datas[(Index + LinkQueue->front) % LinkQueue->size];
+ *Data = &LinkQueue->data[(Index + LinkQueue->front) % gcdLINK_QUEUE_SIZE];
}
+#endif
+/*
+* gckENTRYQUEUE_Enqueue is called with Command->mutexQueue acquired.
+*/
gceSTATUS
-gckQUEUE_Allocate(
- IN gckOS Os,
- IN gckQUEUE Queue,
- IN gctUINT32 Size
+gckENTRYQUEUE_Enqueue(
+ IN gckKERNEL Kernel,
+ IN gckENTRYQUEUE Queue,
+ IN gctUINT32 physical,
+ IN gctUINT32 bytes
)
{
- gceSTATUS status;
+ gctUINT32 next = (Queue->rear + 1) % gcdENTRY_QUEUE_SIZE;
- gcmkONERROR(gckOS_Allocate(
- Os,
- gcmSIZEOF(struct _gckLINKDATA) * Size,
- (gctPOINTER *)&Queue->datas
- ));
+ if (next == Queue->front)
+ {
+ /* Queue is full. */
+ return gcvSTATUS_INVALID_REQUEST;
+ }
- Queue->size = Size;
+ /* Copy data. */
+ Queue->data[Queue->rear].physical = physical;
+ Queue->data[Queue->rear].bytes = bytes;
- return gcvSTATUS_OK;
+ gcmkVERIFY_OK(gckOS_MemoryBarrier(Kernel->os, &Queue->rear));
-OnError:
- return status;
+ /* Update rear. */
+ Queue->rear = next;
+
+ return gcvSTATUS_OK;
}
gceSTATUS
-gckQUEUE_Free(
- IN gckOS Os,
- IN gckQUEUE Queue
+gckENTRYQUEUE_Dequeue(
+ IN gckENTRYQUEUE Queue,
+ OUT gckENTRYDATA * Data
)
{
- if (Queue->datas)
+ if (Queue->front == Queue->rear)
{
- gcmkVERIFY_OK(gckOS_Free(Os, (gctPOINTER)Queue->datas));
+ /* Queue is empty. */
+ return gcvSTATUS_INVALID_REQUEST;
}
+ /* Copy data. */
+ *Data = &Queue->data[Queue->front];
+
+ /* Update front. */
+ Queue->front = (Queue->front + 1) % gcdENTRY_QUEUE_SIZE;
+
return gcvSTATUS_OK;
}
@@ -4907,6 +4665,24 @@ gckKERNEL_DeleteName(
return gcvSTATUS_OK;
}
+gceSTATUS
+gckKERNEL_SetRecovery(
+ IN gckKERNEL Kernel,
+ IN gctBOOL Recovery,
+ IN gctUINT32 StuckDump
+ )
+{
+ Kernel->recovery = Recovery;
+
+ if (Recovery == gcvFALSE)
+ {
+ /* Dump stuck information if Recovery is disabled. */
+ Kernel->stuckDump = gcmMAX(StuckDump, gcvSTUCK_DUMP_USER_COMMAND);
+ }
+
+ return gcvSTATUS_OK;
+}
+
/*******************************************************************************
***** Shared Buffer ************************************************************
*******************************************************************************/
@@ -5389,76 +5165,6 @@ OnError:
}
/*******************************************************************************\
-*************************** List Helper *****************************************
-\*******************************************************************************/
-
-static void
-_ListAdd(
- gcsLISTHEAD_PTR New,
- gcsLISTHEAD_PTR Prev,
- gcsLISTHEAD_PTR Next
- )
-{
- Next->prev = New;
- New->next = Next;
- New->prev = Prev;
- Prev->next = New;
-}
-
-void
-_ListDel(
- gcsLISTHEAD_PTR Prev,
- gcsLISTHEAD_PTR Next
- )
-{
- Next->prev = Prev;
- Prev->next = Next;
-}
-
-void
-gcsLIST_Init(
- gcsLISTHEAD_PTR Node
- )
-{
- Node->prev = Node;
- Node->next = Node;
-}
-
-void
-gcsLIST_Add(
- gcsLISTHEAD_PTR New,
- gcsLISTHEAD_PTR Head
- )
-{
- _ListAdd(New, Head, Head->next);
-}
-
-void
-gcsLIST_AddTail(
- gcsLISTHEAD_PTR New,
- gcsLISTHEAD_PTR Head
- )
-{
- _ListAdd(New, Head->prev, Head);
-}
-
-void
-gcsLIST_Del(
- gcsLISTHEAD_PTR Node
- )
-{
- _ListDel(Node->prev, Node->next);
-}
-
-gctBOOL
-gcsLIST_Empty(
- gcsLISTHEAD_PTR Head
- )
-{
- return Head->next == Head;
-}
-
-/*******************************************************************************\
********************************* Fence *****************************************
\*******************************************************************************/
@@ -5477,52 +5183,20 @@ gckFENCE_Create(
gcmkONERROR(gckOS_CreateMutex(Os, (gctPOINTER *)&fence->mutex));
- fence->kernel = Kernel;
-
-#if USE_KERNEL_VIRTUAL_BUFFERS
- if (Kernel->virtualCommandBuffer)
- {
- gcmkONERROR(gckKERNEL_AllocateVirtualMemory(
- Kernel,
- gcvFALSE,
- gcvFALSE,
- &pageSize,
- &fence->physical,
- &fence->logical
- ));
-
- gcmkONERROR(gckKERNEL_GetGPUAddress(
- Kernel,
- fence->logical,
- gcvFALSE,
- fence->physical,
- &fence->address
- ));
- }
- else
-#endif
- {
- gcmkONERROR(gckOS_AllocateNonPagedMemory(
- Os,
- gcvFALSE,
- &pageSize,
- &fence->physical,
- &fence->logical
- ));
-
- gcmkONERROR(gckHARDWARE_ConvertLogical(
- Kernel->hardware,
- fence->logical,
- gcvFALSE,
- &fence->address
- ));
-
- gcmkONERROR(gckMMU_FillFlatMapping(
- Kernel->mmu, fence->address, pageSize
- ));
- }
+ gcmkONERROR(gckOS_AllocateNonPagedMemory(
+ Os,
+ gcvFALSE,
+ &pageSize,
+ &fence->physical,
+ &fence->logical
+ ));
- gcsLIST_Init(&fence->waitingList);
+ gcmkONERROR(gckHARDWARE_ConvertLogical(
+ Kernel->hardware,
+ fence->logical,
+ gcvFALSE,
+ &fence->address
+ ));
*Fence = fence;
@@ -5549,27 +5223,12 @@ gckFENCE_Destory(
if (Fence->logical)
{
-#if USE_KERNEL_VIRTUAL_BUFFERS
- if (Fence->kernel->virtualCommandBuffer)
- {
- gckVIRTUAL_COMMAND_BUFFER_PTR buffer = (gckVIRTUAL_COMMAND_BUFFER_PTR)Fence->physical;
-
- gcmkVERIFY_OK(gckKERNEL_FreeVirtualMemory(
- Fence->physical,
- Fence->logical,
- gcvTRUE
- ));
- }
- else
-#endif
- {
- gcmkVERIFY_OK(gckOS_FreeNonPagedMemory(
- Os,
- 4096,
- Fence->physical,
- Fence->logical
- ));
- }
+ gcmkVERIFY_OK(gckOS_FreeNonPagedMemory(
+ Os,
+ 4096,
+ Fence->physical,
+ Fence->logical
+ ));
}
gcmkOS_SAFE_FREE(Os, Fence);
@@ -5578,467 +5237,6 @@ gckFENCE_Destory(
}
/*******************************************************************************
-**
-** gckFENCE_Signal
-**
-** Signal all completed nodes.
-**
-**
-*/
-gceSTATUS
-gckFENCE_Signal(
- IN gckOS Os,
- IN gckFENCE Fence
- )
-{
- gcsLISTHEAD_PTR list = &Fence->waitingList;
- gcsLISTHEAD_PTR nodeHead, nodeTemp;
- gckFENCE_SYNC sync;
- gckOS os = Os;
- gctUINT64 stamp = *(gctUINT64 *)Fence->logical;
-
- gcmkVERIFY_OK(gckOS_AcquireMutex(os, Fence->mutex, gcvINFINITE));
-
- gcmkLIST_FOR_EACH_SAFE(nodeHead, nodeTemp, list)
- {
- sync = gcmCONTAINEROF(nodeHead, _gcsFENCE_SYNC, head);
-
- /* Signal all nodes which are complete. */
- if (sync->commitStamp <= stamp && sync->inList)
- {
- /* Signal. */
- gckOS_Signal(os, sync->signal, gcvTRUE);
-
- /* Remove from wait list. */
- gcsLIST_Del(nodeHead);
-
- /* Mark node not in waiting list. */
- sync->inList = gcvFALSE;
- }
- }
-
- gcmkVERIFY_OK(gckOS_ReleaseMutex(os, Fence->mutex));
-
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gckDEVICE_Construct(
- IN gckOS Os,
- OUT gckDEVICE * Device
- )
-{
- gceSTATUS status;
- gckDEVICE device;
- gctUINT i;
-
- gcmkHEADER();
-
- gcmkONERROR(gckOS_Allocate(Os, gcmSIZEOF(gcsDEVICE), (gctPOINTER *)&device));
-
- for (i = 0; i < gcvCORE_COUNT; i++)
- {
- device->coreInfoArray[i].type = gcvHARDWARE_INVALID;
- }
-
- gckOS_ZeroMemory(device, gcmSIZEOF(gcsDEVICE));
-
- gcmkONERROR(gckOS_CreateMutex(Os, &device->stuckDumpMutex));
-
- device->os = Os;
-
- *Device = device;
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
-
- if (device != gcvNULL)
- {
- gckDEVICE_Destroy(Os, device);
- }
-
- gcmkFOOTER();
- return status;
-}
-
-gceSTATUS
-gckDEVICE_AddCore(
- IN gckDEVICE Device,
- IN gceCORE Core,
- IN gctUINT ChipID,
- IN gctPOINTER Context,
- IN gckKERNEL * Kernel
- )
-{
- gceSTATUS status;
- gcsCORE_INFO * info = Device->coreInfoArray;
- gceHARDWARE_TYPE type = (gceHARDWARE_TYPE)((gctUINT)gcvHARDWARE_INVALID);
- gctUINT32 index = Device->coreNum;
- gctUINT32 i;
- gcsCORE_LIST *coreList;
- gceHARDWARE_TYPE kernelType;
- gckKERNEL kernel;
-
- gcmkASSERT(Device->coreNum < gcvCORE_COUNT);
-
- if (Core >= gcvCORE_MAJOR && Core <= gcvCORE_3D3)
- {
- /* Chip ID is only used for 3D cores. */
- if (ChipID == gcvCHIP_ID_DEFAULT)
- {
- /* Apply default chipID if it is not set. */
- ChipID = Core;
- }
- }
-
- /* Construct gckKERNEL for this core. */
- gcmkONERROR(gckKERNEL_Construct(
- Device->os, Core, ChipID, Context, Device, Device->database, Kernel));
-
- kernel = *Kernel;
-
- if (Device->database == gcvNULL)
- {
- Device->database = kernel->db;
- }
-
- kernelType = _GetHardwareType(kernel);
-
- if (kernelType >= gcvHARDWARE_NUM_TYPES)
- {
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- info[index].type = kernelType;
- info[index].core = Core;
- info[index].kernel = kernel;
- info[index].chipID = ChipID;
-
- if (index == 0)
- {
- /* First core, map all type/core to it. */
- for (; type != gcvHARDWARE_NUM_TYPES; type = (gceHARDWARE_TYPE)((gctUINT)type + 1))
- {
- Device->map[type].num = 0;
-
- for (i = 0 ; i < 4; i++)
- {
- Device->map[type].kernels[i] = kernel;
- }
- }
- }
-
- /* Get core list of this type. */
- coreList = &Device->map[kernelType];
-
- /* Setup gceHARDWARE_TYPE to gceCORE mapping. */
- coreList->kernels[coreList->num++] = kernel;
-
- if (kernelType == gcvHARDWARE_3D2D)
- {
- coreList = &Device->map[gcvHARDWARE_3D];
- coreList->kernels[coreList->num++] = kernel;
- }
-
- /* Advance total core number. */
- Device->coreNum++;
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-
-gceSTATUS
-gckDEVICE_ChipInfo(
- IN gckDEVICE Device,
- IN gcsHAL_INTERFACE_PTR Interface
- )
-{
- gctUINT i;
- gcsCORE_INFO * info = Device->coreInfoArray;
-
- for (i = 0; i < Device->coreNum; i++)
- {
- Interface->u.ChipInfo.types[i] = info[i].type;
- Interface->u.ChipInfo.ids[i] = info[i].chipID;
- }
-
- Interface->u.ChipInfo.count = Device->coreNum;
-
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gckDEVICE_Version(
- IN gckDEVICE Device,
- IN gcsHAL_INTERFACE_PTR Interface
- )
-{
- Interface->u.Version.major = gcvVERSION_MAJOR;
- Interface->u.Version.minor = gcvVERSION_MINOR;
- Interface->u.Version.patch = gcvVERSION_PATCH;
- Interface->u.Version.build = gcvVERSION_BUILD;
-#if gcmIS_DEBUG(gcdDEBUG_TRACE)
- gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_KERNEL,
- "KERNEL version %d.%d.%d build %u",
- gcvVERSION_MAJOR, gcvVERSION_MINOR,
- gcvVERSION_PATCH, gcvVERSION_BUILD);
-#endif
-
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gckDEVICE_Destroy(
- IN gckOS Os,
- IN gckDEVICE Device
- )
-{
- gctUINT i;
- gcsCORE_INFO * info = Device->coreInfoArray;
-
- for (i = 0; i < Device->coreNum; i++)
- {
- if (info[i].kernel != gcvNULL)
- {
- gckKERNEL_Destroy(info[i].kernel);
- }
- }
-
- if (Device->stuckDumpMutex)
- {
- gcmkVERIFY_OK(gckOS_DeleteMutex(Os, Device->stuckDumpMutex));
- }
-
- gcmkOS_SAFE_FREE(Os, Device);
-
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gckDEVICE_Dispatch(
- IN gckDEVICE Device,
- IN gcsHAL_INTERFACE_PTR Interface
- )
-{
- gceSTATUS status = gcvSTATUS_NOT_SUPPORTED;
- gckKERNEL kernel;
- gceHARDWARE_TYPE type = Interface->hardwareType;
- gctUINT32 coreIndex = Interface->coreIndex;
-
- switch (Interface->command)
- {
- case gcvHAL_CHIP_INFO:
- status = gckDEVICE_ChipInfo(Device, Interface);
- break;
-
- case gcvHAL_VERSION:
- status = gckDEVICE_Version(Device, Interface);
- break;
-
- default:
- status = gcvSTATUS_NOT_SUPPORTED;
- break;
- }
-
- if (gcmIS_SUCCESS(status))
- {
- /* Dispatch handled in this layer. */
- Interface->status = status;
- }
- else
- {
- /* Need go through gckKERNEL dispatch. */
- kernel = Device->map[type].kernels[coreIndex];
-
-
-#if gcdENABLE_VG
- if (kernel->vg)
- {
- status = gckVGKERNEL_Dispatch(kernel, gcvTRUE, Interface);
- }
- else
-#endif
- {
- status = gckKERNEL_Dispatch(kernel, Device, gcvTRUE, Interface);
- }
-
- /* Interface->status is handled in gckKERNEL_Dispatch(). */
- }
-
- return status;
-}
-
-gceSTATUS
-gckDEVICE_GetMMU(
- IN gckDEVICE Device,
- IN gceHARDWARE_TYPE Type,
- IN gckMMU *Mmu
- )
-{
- gcmkHEADER();
- gcmkVERIFY_ARGUMENT(Type < gcvHARDWARE_NUM_TYPES);
-
- *Mmu = Device->mmus[Type];
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gckDEVICE_SetMMU(
- IN gckDEVICE Device,
- IN gceHARDWARE_TYPE Type,
- IN gckMMU Mmu
- )
-{
- gcmkHEADER();
- gcmkVERIFY_ARGUMENT(Type < gcvHARDWARE_NUM_TYPES);
-
- Device->mmus[Type] = Mmu;
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-}
-
-/*******************************************************************************
-**
-** gckDEVICE_QueryGPUAddress
-**
-** Search GPUAddress in other core's address space, whose type is same as current
-** core. It is used to find correct command buffer which is shared by mulitple
-** core.
-**
-*/
-gceSTATUS
-gckDEVICE_QueryGPUAddress(
- IN gckDEVICE Device,
- IN gckKERNEL Kernel,
- IN gctUINT32 GPUAddress,
- OUT gckVIRTUAL_COMMAND_BUFFER_PTR * Buffer
- )
-{
- gceSTATUS status = gcvSTATUS_NOT_FOUND;
- gctUINT i;
- gceHARDWARE_TYPE kernelType;
-
- kernelType = _GetHardwareType(Kernel);
-
- if (Device != gcvNULL)
- {
- for (i = 0; i < Device->coreNum; i++)
- {
- if (Device->coreInfoArray[i].type == kernelType)
- {
- /* Search other core's command buffer list whose type is same. */
- status = gckKERNEL_QueryGPUAddress(
- Device->coreInfoArray[i].kernel, GPUAddress, Buffer);
-
- if (gcmIS_SUCCESS(status))
- {
- break;
- }
- }
- }
- }
- else
- {
- status = gckKERNEL_QueryGPUAddress(Kernel, GPUAddress, Buffer);
- }
-
- return status;
-}
-
-#if gcdENABLE_TRUST_APPLICATION
-gceSTATUS
-gckKERNEL_MapInTrustApplicaiton(
- IN gckKERNEL Kernel,
- IN gctPOINTER Logical,
- IN gctPHYS_ADDR Physical,
- IN gctUINT32 GPUAddress,
- IN gctSIZE_T PageCount
- )
-{
- gceSTATUS status;
- gctUINT32 * physicalArrayLogical = gcvNULL;
- gctSIZE_T bytes;
- gctPOINTER logical = Logical;
- gctUINT32 i;
- gctSIZE_T pageSize;
- gctUINT32 pageMask;
-
- gcmkHEADER();
-
- gcmkVERIFY_OK(gckOS_GetPageSize(Kernel->os, &pageSize));
-
- pageMask = (gctUINT32)pageSize - 1;
-
- bytes = PageCount * gcmSIZEOF(gctUINT32);
-
- gcmkONERROR(gckOS_Allocate(
- Kernel->os,
- bytes,
- (gctPOINTER *)&physicalArrayLogical
- ));
-
- /* Fill in physical array. */
- for (i = 0; i < PageCount; i++)
- {
- gctPHYS_ADDR_T phys;
- status = gckOS_PhysicalToPhysicalAddress(
- Kernel->os,
- Physical,
- i * 4096,
- &phys
- );
-
- if (status == gcvSTATUS_NOT_SUPPORTED)
- {
- gcmkONERROR(gckOS_GetPhysicalAddress(
- Kernel->os,
- logical,
- &phys
- ));
- }
-
- phys &= ~pageMask;
-
- gcmkSAFECASTPHYSADDRT(physicalArrayLogical[i], phys);
-
- logical = (gctUINT8_PTR)logical + 4096;
- }
-
- gcmkONERROR(gckKERNEL_SecurityMapMemory(
- Kernel,
- physicalArrayLogical,
- 0,
- (gctUINT32)PageCount,
- &GPUAddress
- ));
-
- gcmkVERIFY_OK(gckOS_Free(
- Kernel->os,
- physicalArrayLogical
- ))
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- if(physicalArrayLogical != gcvNULL)
- gcmkVERIFY_OK(gckOS_Free(
- Kernel->os,
- (gctPOINTER)physicalArrayLogical
- ));
- gcmkFOOTER();
- return status;
-}
-#endif
-
-/*******************************************************************************
***** Test Code ****************************************************************
*******************************************************************************/
diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
index d528c8da863d..0700ee05f934 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
@@ -66,7 +66,7 @@
#include "gc_hal_kernel_vg.h"
#endif
-#if gcdSECURITY || gcdENABLE_TRUST_APPLICATION
+#if gcdSECURITY
#include "gc_hal_security_interface.h"
#endif
@@ -107,9 +107,6 @@ extern "C" {
#define gcdMMU_OFFSET_16K_BITS (32 - gcdMMU_MTLB_BITS - gcdMMU_STLB_16K_BITS)
#define gcdMMU_OFFSET_16K_MASK ((1U << gcdMMU_OFFSET_16K_BITS) - 1)
-#define gcdMMU_MTLB_ENTRY_HINTS_BITS 6
-#define gcdMMU_MTLB_ENTRY_STLB_MASK (~((1U << gcdMMU_MTLB_ENTRY_HINTS_BITS) - 1))
-
#define gcdMMU_MTLB_PRESENT 0x00000001
#define gcdMMU_MTLB_EXCEPTION 0x00000002
#define gcdMMU_MTLB_4K_PAGE 0x00000000
@@ -260,6 +257,7 @@ typedef struct _gcsDATABASE
gcsDATABASE_COUNTERS contiguous;
gcsDATABASE_COUNTERS mapUserMemory;
gcsDATABASE_COUNTERS mapMemory;
+ gcsDATABASE_COUNTERS virtualCommandBuffer;
gcsDATABASE_COUNTERS vidMemType[gcvSURF_NUM_TYPES];
/* Counter for each video memory pool. */
@@ -287,6 +285,8 @@ typedef struct _gcsDATABASE
}
gcsDATABASE;
+typedef struct _gcsRECORDER * gckRECORDER;
+
typedef struct _gcsFDPRIVATE * gcsFDPRIVATE_PTR;
typedef struct _gcsFDPRIVATE
{
@@ -294,9 +294,6 @@ typedef struct _gcsFDPRIVATE
}
gcsFDPRIVATE;
-typedef struct _gcsRECORDER * gckRECORDER;
-
-
/* Create a process database that will contain all its allocations. */
gceSTATUS
gckKERNEL_CreateProcessDB(
@@ -388,10 +385,16 @@ gckKERNEL_GetProcessMMU(
);
gceSTATUS
+gckKERNEL_SetRecovery(
+ IN gckKERNEL Kernel,
+ IN gctBOOL Recovery,
+ IN gctUINT32 StuckDump
+ );
+
+gceSTATUS
gckMMU_FlatMapping(
IN gckMMU Mmu,
- IN gctUINT32 Physical,
- IN gctUINT32 NumPages
+ IN gctUINT32 Physical
);
gceSTATUS
@@ -409,17 +412,6 @@ gckMMU_FreePagesEx(
);
gceSTATUS
-gckMMU_AttachHardware(
- IN gckMMU Mmu,
- IN gckHARDWARE Hardware
- );
-
-void
-gckMMU_DumpRecentFreedAddress(
- IN gckMMU Mmu
- );
-
-gceSTATUS
gckKERNEL_CreateIntegerDatabase(
IN gckKERNEL Kernel,
OUT gctPOINTER * Database
@@ -516,8 +508,8 @@ struct _gckDB
gctPOINTER pointerDatabaseMutex;
};
-typedef struct _gckVIRTUAL_BUFFER * gckVIRTUAL_BUFFER_PTR;
-typedef struct _gckVIRTUAL_BUFFER
+typedef struct _gckVIRTUAL_COMMAND_BUFFER * gckVIRTUAL_COMMAND_BUFFER_PTR;
+typedef struct _gckVIRTUAL_COMMAND_BUFFER
{
gctPHYS_ADDR physical;
gctPOINTER userLogical;
@@ -527,20 +519,13 @@ typedef struct _gckVIRTUAL_BUFFER
gctPOINTER pageTable;
gctUINT32 gpuAddress;
gctUINT pid;
+ gckVIRTUAL_COMMAND_BUFFER_PTR next;
+ gckVIRTUAL_COMMAND_BUFFER_PTR prev;
gckKERNEL kernel;
#if gcdPROCESS_ADDRESS_SPACE
gckMMU mmu;
#endif
}
-gckVIRTUAL_BUFFER;
-
-typedef struct _gckVIRTUAL_COMMAND_BUFFER * gckVIRTUAL_COMMAND_BUFFER_PTR;
-typedef struct _gckVIRTUAL_COMMAND_BUFFER
-{
- gckVIRTUAL_BUFFER virtualBuffer;
- gckVIRTUAL_COMMAND_BUFFER_PTR next;
- gckVIRTUAL_COMMAND_BUFFER_PTR prev;
-}
gckVIRTUAL_COMMAND_BUFFER;
/* gckKERNEL object. */
@@ -576,8 +561,6 @@ struct _gckKERNEL
#if VIVANTE_PROFILER
/* Enable profiling */
gctBOOL profileEnable;
- /* profiling sync mode*/
- gctBOOL profileSyncMode;
/* Clear profile register or not*/
gctBOOL profileCleanRegister;
#endif
@@ -622,7 +605,7 @@ struct _gckKERNEL
/* Level of dump information after stuck. */
gctUINT stuckDump;
-#if gcdSECURITY || gcdENABLE_TRUST_APPLICATION
+#if gcdSECURITY
gctUINT32 securityChannel;
#endif
@@ -637,16 +620,7 @@ struct _gckKERNEL
gctUINT32 lastCommitStamp;
gctUINT32 timer;
gctUINT32 restoreAddress;
- gctINT32 restoreMask;
-
- /* 3DBLIT */
- gckASYNC_COMMAND asyncCommand;
- gckEVENT asyncEvent;
-
- /* Pointer to gckDEVICE object. */
- gckDEVICE device;
-
- gctUINT chipID;
+ gctUINT32 restoreMask;
};
struct _FrequencyHistory
@@ -672,35 +646,15 @@ struct _gckDVFS
typedef struct _gcsFENCE * gckFENCE;
typedef struct _gcsFENCE
{
- /* Pointer to required object. */
- gckKERNEL kernel;
-
/* Fence location. */
gctPHYS_ADDR physical;
gctPOINTER logical;
gctUINT32 address;
- gcsLISTHEAD waitingList;
gctPOINTER mutex;
}
gcsFENCE;
-/* A sync point attached to fence. */
-typedef struct _gcsFENCE_SYNC * gckFENCE_SYNC;
-typedef struct _gcsFENCE_SYNC
-{
- /* Stamp of commit access this node. */
- gctUINT64 commitStamp;
-
- /* Attach to waiting list. */
- gcsLISTHEAD head;
-
- gctPOINTER signal;
-
- gctBOOL inList;
-}
-gcsFENCE_SYNC;
-
/* gckCOMMAND object. */
struct _gckCOMMAND
{
@@ -748,7 +702,6 @@ struct _gckCOMMAND
}
queues[gcdCOMMAND_QUEUES];
- gctPHYS_ADDR virtualMemory;
gctUINT32 physical;
gctPOINTER logical;
gctUINT32 address;
@@ -773,6 +726,7 @@ struct _gckCOMMAND
/* Command buffer alignment. */
gctUINT32 alignment;
gctUINT32 reservedHead;
+ gctUINT32 reservedTail;
/* Commit counter. */
gctPOINTER atomCommit;
@@ -793,18 +747,10 @@ struct _gckCOMMAND
#if gcdPROCESS_ADDRESS_SPACE
gckMMU currentMmu;
#endif
-
-#if gcdRECORD_COMMAND
- gckRECORDER recorder;
-#endif
-
- gctPOINTER kList;
+ struct _gckENTRYQUEUE queue;
gckFENCE fence;
- /* For getting state from async command buffer. */
- gckASYNC_COMMAND asyncCommand;
-
gctBOOL dummyDraw;
};
@@ -841,6 +787,11 @@ typedef struct _gcsEVENT_QUEUE
/* Source of the event. */
gceKERNEL_WHERE source;
+#if gcdMULTI_GPU
+ /* Which chip(s) of the event */
+ gceCORE_3D_MASK chipEnable;
+#endif
+
/* Pointer to head of event queue. */
gcsEVENT_PTR head;
@@ -879,9 +830,6 @@ struct _gckEVENT
gckOS os;
gckKERNEL kernel;
- /* Pointer to gckASYNC_COMMAND object. */
- gckASYNC_COMMAND asyncCommand;
-
/* Time stamp. */
gctUINT64 stamp;
gctUINT32 lastCommitStamp;
@@ -891,11 +839,28 @@ struct _gckEVENT
/* Array of event queues. */
gcsEVENT_QUEUE queues[29];
- gctINT32 freeQueueCount;
gctUINT8 lastID;
+ gctPOINTER freeAtom;
/* Pending events. */
+#if gcdSMP
+#if gcdMULTI_GPU
+ gctPOINTER pending3D[gcdMULTI_GPU];
+ gctPOINTER pending3DMask[gcdMULTI_GPU];
+ gctPOINTER pendingMask;
+#endif
gctPOINTER pending;
+#else
+#if gcdMULTI_GPU
+ volatile gctUINT pending3D[gcdMULTI_GPU];
+ volatile gctUINT pending3DMask[gcdMULTI_GPU];
+ volatile gctUINT pendingMask;
+#endif
+ volatile gctUINT pending;
+#endif
+#if gcdMULTI_GPU
+ gctUINT32 busy;
+#endif
/* List of free event structures and its mutex. */
gcsEVENT_PTR freeEventList;
@@ -914,6 +879,10 @@ struct _gckEVENT
#if gcdINTERRUPT_STATISTIC
gctPOINTER interruptCount;
#endif
+
+#if gcdRECORD_COMMAND
+ gckRECORDER recorder;
+#endif
};
/* Free all events belonging to a process. */
@@ -1029,17 +998,19 @@ typedef union _gcuVIDMEM_NODE
/* Used only when node is not contiguous */
gctPOINTER pageTables[gcdMAX_GPU_COUNT];
+ /* Pointer to gckKERNEL object who lock this. */
+ gckKERNEL lockKernels[gcdMAX_GPU_COUNT];
/* Actual physical address */
gctUINT32 addresses[gcdMAX_GPU_COUNT];
/* Locked counter. */
gctINT32 lockeds[gcdMAX_GPU_COUNT];
+ /* Process ID owning this memory. */
+ gctUINT32 processID;
+
/* Surface type. */
gceSURF_TYPE type;
-
- /* Secure GPU virtual address. */
- gctBOOL secure;
}
Virtual;
}
@@ -1101,8 +1072,6 @@ typedef struct _gcsVIDMEM_NODE
/* Pool from which node is allocated. */
gcePOOL pool;
-
- gcsFENCE_SYNC sync[gcvENGINE_COUNT];
}
gcsVIDMEM_NODE;
@@ -1137,42 +1106,6 @@ typedef struct _gcsSHBUF
}
gcsSHBUF;
-typedef struct _gcsCORE_INFO
-{
- gceHARDWARE_TYPE type;
- gceCORE core;
- gckKERNEL kernel;
- gctUINT chipID;
-}
-gcsCORE_INFO;
-
-typedef struct _gcsCORE_LIST
-{
- gckKERNEL kernels[gcvCORE_COUNT];
- gctUINT32 num;
-}
-gcsCORE_LIST;
-
-/* A gckDEVICE is a group of cores (gckKERNEL in software). */
-typedef struct _gcsDEVICE
-{
- gcsCORE_INFO coreInfoArray[gcvCORE_COUNT];
- gctUINT32 coreNum;
- gcsCORE_LIST map[gcvHARDWARE_NUM_TYPES];
-
- gckOS os;
-
- /* Process resource database. */
- gckDB database;
-
- /* Same hardware type shares one MMU. */
- gckMMU mmus[gcvHARDWARE_NUM_TYPES];
-
- /* Mutex to make sure stuck dump for multiple cores doesn't interleave. */
- gctPOINTER stuckDumpMutex;
-}
-gcsDEVICE;
-
gceSTATUS
gckVIDMEM_HANDLE_Reference(
IN gckKERNEL Kernel,
@@ -1231,25 +1164,25 @@ gckVIDMEM_NODE_Import(
);
gceSTATUS
-gckVIDMEM_NODE_GetFd(
+gckVIDMEM_HANDLE_LookupAndReference(
IN gckKERNEL Kernel,
IN gctUINT32 Handle,
- OUT gctINT * Fd
+ OUT gckVIDMEM_NODE * Node
);
gceSTATUS
-gckVIDMEM_HANDLE_LookupAndReference(
+gckVIDMEM_HANDLE_Lookup(
IN gckKERNEL Kernel,
+ IN gctUINT32 ProcessID,
IN gctUINT32 Handle,
OUT gckVIDMEM_NODE * Node
);
gceSTATUS
-gckVIDMEM_HANDLE_Lookup(
+gckVIDMEM_NODE_GetFd(
IN gckKERNEL Kernel,
- IN gctUINT32 ProcessID,
IN gctUINT32 Handle,
- OUT gckVIDMEM_NODE * Node
+ OUT gctINT * Fd
);
gceSTATUS
@@ -1268,26 +1201,6 @@ gckEVENT_DestroyMmu(
);
#endif
-typedef struct _gcsADDRESS_AREA * gcsADDRESS_AREA_PTR;
-typedef struct _gcsADDRESS_AREA
-{
- /* Page table information. */
- gctSIZE_T pageTableSize;
- gctPHYS_ADDR pageTablePhysical;
- gctUINT32_PTR pageTableLogical;
- gctUINT32 pageTableEntries;
-
- /* Free entries. */
- gctUINT32 heapList;
- gctBOOL freeNodes;
-
- gctUINT32 dynamicMappingStart;
- gctUINT32 dynamicMappingEnd;
-
- gctUINT32_PTR mapLogical;
-}
-gcsADDRESS_AREA;
-
/* gckMMU object. */
struct _gckMMU
{
@@ -1303,55 +1216,34 @@ struct _gckMMU
/* The page table mutex. */
gctPOINTER pageTableMutex;
+ /* Page table information. */
+ gctSIZE_T pageTableSize;
+ gctPHYS_ADDR pageTablePhysical;
+ gctUINT32_PTR pageTableLogical;
+ gctUINT32 pageTableEntries;
+
/* Master TLB information. */
gctSIZE_T mtlbSize;
gctPHYS_ADDR mtlbPhysical;
gctUINT32_PTR mtlbLogical;
gctUINT32 mtlbEntries;
+ /* Free entries. */
+ gctUINT32 heapList;
+ gctBOOL freeNodes;
+
gctPOINTER staticSTLB;
gctBOOL enabled;
+ gctUINT32 dynamicMappingStart;
+
+ gctUINT32_PTR mapLogical;
#if gcdPROCESS_ADDRESS_SPACE
gctPOINTER pageTableDirty[gcdMAX_GPU_COUNT];
gctPOINTER stlbs;
#endif
-
- gctPOINTER safePageLogical;
- gctPHYS_ADDR safePagePhysical;
- gctUINT32 safeAddress;
- gctSIZE_T safePageSize;
-
- gctUINT32 flatMappingStart;
- gctUINT32 flatMappingEnd;
-
- /* List of hardware which uses this MMU. */
- gcsLISTHEAD hardwareList;
-
- struct _gckQUEUE recentFreedAddresses;
-
- gcsADDRESS_AREA area[gcvADDRESS_AREA_COUNT];
};
-typedef struct _gcsASYNC_COMMAND
-{
- gckOS os;
- gckHARDWARE hardware;
- gckKERNEL kernel;
-
- gctPOINTER mutex;
- gcsFE fe;
-
- gctUINT32 reservedTail;
- gctUINT64 commitStamp;
-
- gckFENCE fence;
-
- gctPOINTER kList;
-}
-gcsASYNC_COMMAND;
-
-
gceSTATUS
gckOS_CreateKernelVirtualMapping(
IN gckOS Os,
@@ -1393,34 +1285,6 @@ gckOS_GetFd(
OUT gctINT *Fd
);
-/*******************************************************************************
-**
-** gckOS_ReadMappedPointer
-**
-** Read pointer mapped from user pointer which returned by gckOS_MapUserPointer.
-**
-** INPUT:
-**
-** gckOS Os
-** Pointer to an gckOS object.
-**
-** gctPOINTER Address
-** Pointer returned by gckOS_MapUserPointer.
-**
-** gctUINT32_PTR Data
-** Pointer to hold 32 bits data.
-**
-** OUTPUT:
-**
-** Nothing.
-*/
-gceSTATUS
-gckOS_ReadMappedPointer(
- IN gckOS Os,
- IN gctPOINTER Address,
- IN gctUINT32_PTR Data
- );
-
gceSTATUS
gckKERNEL_AllocateVirtualCommandBuffer(
IN gckKERNEL Kernel,
@@ -1439,28 +1303,11 @@ gckKERNEL_DestroyVirtualCommandBuffer(
);
gceSTATUS
-gckKERNEL_AllocateVirtualMemory(
- IN gckKERNEL Kernel,
- IN gctBOOL NonPaged,
- IN gctBOOL InUserSpace,
- IN OUT gctSIZE_T * Bytes,
- OUT gctPHYS_ADDR * Physical,
- OUT gctPOINTER * Logical
- );
-
-gceSTATUS
-gckKERNEL_FreeVirtualMemory(
- IN gctPHYS_ADDR Physical,
- IN gctPOINTER Logical,
- IN gctBOOL NonPaged
- );
-
-gceSTATUS
gckKERNEL_GetGPUAddress(
IN gckKERNEL Kernel,
IN gctPOINTER Logical,
IN gctBOOL InUserSpace,
- IN gctPHYS_ADDR Physical,
+ IN gckVIRTUAL_COMMAND_BUFFER_PTR Buffer,
OUT gctUINT32 * Address
);
@@ -1508,26 +1355,12 @@ gckHARDWARE_QueryIdle(
);
gceSTATUS
-gckHARDWARE_WaitFence(
- IN gckHARDWARE Hardware,
- IN gctPOINTER Logical,
- IN gctUINT64 FenceData,
- IN gctUINT32 FenceAddress,
- OUT gctUINT32 *Bytes
- );
-
-gceSTATUS
gckHARDWARE_AddressInHardwareFuncions(
IN gckHARDWARE Hardware,
IN gctUINT32 Address,
OUT gctPOINTER *Pointer
);
-gceSTATUS
-gckHARDWARE_UpdateContextID(
- IN gckHARDWARE Hardware
- );
-
#if gcdSECURITY
gceSTATUS
gckKERNEL_SecurityOpen(
@@ -1589,61 +1422,6 @@ gckKERNEL_SecurityUnmapMemory(
#endif
-#if gcdENABLE_TRUST_APPLICATION
-gceSTATUS
-gckKERNEL_SecurityOpen(
- IN gckKERNEL Kernel,
- IN gctUINT32 GPU,
- OUT gctUINT32 *Channel
- );
-
-/*
-** Close a security service channel
-*/
-gceSTATUS
-gckKERNEL_SecurityClose(
- IN gctUINT32 Channel
- );
-
-/*
-** Security service interface.
-*/
-gceSTATUS
-gckKERNEL_SecurityCallService(
- IN gctUINT32 Channel,
- IN OUT gcsTA_INTERFACE * Interface
- );
-
-gceSTATUS
-gckKERNEL_SecurityStartCommand(
- IN gckKERNEL Kernel,
- IN gctUINT32 Address,
- IN gctUINT32 Bytes
- );
-
-gceSTATUS
-gckKERNEL_SecurityMapMemory(
- IN gckKERNEL Kernel,
- IN gctUINT32 *PhysicalArray,
- IN gctPHYS_ADDR_T Physical,
- IN gctUINT32 PageCount,
- OUT gctUINT32 * GPUAddress
- );
-
-gceSTATUS
-gckKERNEL_SecurityUnmapMemory(
- IN gckKERNEL Kernel,
- IN gctUINT32 GPUAddress,
- IN gctUINT32 PageCount
- );
-
-gceSTATUS
-gckKERNEL_SecurityDumpMMUException(
- IN gckKERNEL Kernel
- );
-
-#endif
-
gceSTATUS
gckKERNEL_CreateShBuffer(
IN gckKERNEL Kernel,
@@ -1713,30 +1491,36 @@ gckCONTEXT_MapBuffer(
OUT gctUINT32 *Bytes
);
+#if gcdLINK_QUEUE_SIZE
void
-gckQUEUE_Enqueue(
- IN gckQUEUE LinkQueue,
- IN gcuQUEUEDATA *Data
+gckLINKQUEUE_Enqueue(
+ IN gckLINKQUEUE LinkQueue,
+ IN gctUINT32 start,
+ IN gctUINT32 end,
+ IN gctUINT32 LinkLow,
+ IN gctUINT32 LinkHigh
);
void
-gckQUEUE_GetData(
- IN gckQUEUE LinkQueue,
+gckLINKQUEUE_GetData(
+ IN gckLINKQUEUE LinkQueue,
IN gctUINT32 Index,
- OUT gcuQUEUEDATA ** Data
+ OUT gckLINKDATA * Data
);
+#endif
gceSTATUS
-gckQUEUE_Allocate(
- IN gckOS Os,
- IN gckQUEUE Queue,
- IN gctUINT32 Size
+gckENTRYQUEUE_Enqueue(
+ IN gckKERNEL Kernel,
+ IN gckENTRYQUEUE Queue,
+ IN gctUINT32 physical,
+ IN gctUINT32 bytes
);
gceSTATUS
-gckQUEUE_Free(
- IN gckOS Os,
- IN gckQUEUE Queue
+gckENTRYQUEUE_Dequeue(
+ IN gckENTRYQUEUE Queue,
+ OUT gckENTRYDATA * Data
);
/******************************************************************************\
@@ -1782,78 +1566,6 @@ gckRECORDER_UpdateMirror(
gctUINT32 Data
);
-/******************************************************************************\
-*************************** gckASYNC_COMMAND Object ****************************
-\******************************************************************************/
-gceSTATUS
-gckASYNC_COMMAND_Construct(
- IN gckKERNEL Kernel,
- OUT gckASYNC_COMMAND * Command
- );
-
-gceSTATUS
-gckASYNC_COMMAND_Destroy(
- IN gckASYNC_COMMAND Command
- );
-
-gceSTATUS
-gckASYNC_COMMAND_Commit(
- IN gckASYNC_COMMAND Command,
- IN gcoCMDBUF CommandBuffer,
- IN gcsQUEUE_PTR EventQueue
- );
-
-gceSTATUS
-gckASYNC_COMMAND_EnterCommit(
- IN gckASYNC_COMMAND Command
- );
-
-gceSTATUS
-gckASYNC_COMMAND_ExitCommit(
- IN gckASYNC_COMMAND Command
- );
-
-gceSTATUS
-gckASYNC_COMMAND_Execute(
- IN gckASYNC_COMMAND Command,
- IN gctUINT32 Start,
- IN gctUINT32 End
- );
-
-void
-gcsLIST_Init(
- gcsLISTHEAD_PTR Node
- );
-
-void
-gcsLIST_Add(
- gcsLISTHEAD_PTR New,
- gcsLISTHEAD_PTR Head
- );
-
-void
-gcsLIST_AddTail(
- gcsLISTHEAD_PTR New,
- gcsLISTHEAD_PTR Head
- );
-
-void
-gcsLIST_Del(
- gcsLISTHEAD_PTR Node
- );
-
-gctBOOL
-gcsLIST_Empty(
- gcsLISTHEAD_PTR Head
- );
-
-#define gcmkLIST_FOR_EACH(pos, head) \
- for (pos = (head)->next; pos != (head); pos = pos->next)
-
-#define gcmkLIST_FOR_EACH_SAFE(pos, n, head) \
- for (pos = (head)->next, n = pos->next; pos != (head); \
- pos = n, n = pos->next)
-
gceSTATUS
gckFENCE_Create(
IN gckOS Os,
@@ -1867,106 +1579,6 @@ gckFENCE_Destory(
OUT gckFENCE Fence
);
-gceSTATUS
-gckFENCE_Signal(
- IN gckOS Os,
- IN gckFENCE Fence
- );
-
-gceSTATUS
-gckDEVICE_Construct(
- IN gckOS Os,
- OUT gckDEVICE * Device
- );
-
-gceSTATUS
-gckDEVICE_AddCore(
- IN gckDEVICE Device,
- IN gceCORE Core,
- IN gctUINT chipID,
- IN gctPOINTER Context,
- IN gckKERNEL * Kernel
- );
-
-gceSTATUS
-gckDEVICE_Destroy(
- IN gckOS Os,
- IN gckDEVICE Device
- );
-
-gceSTATUS
-gckDEVICE_Dispatch(
- IN gckDEVICE Device,
- IN gcsHAL_INTERFACE_PTR Interface
- );
-
-gceSTATUS
-gckDEVICE_GetMMU(
- IN gckDEVICE Device,
- IN gceHARDWARE_TYPE Type,
- IN gckMMU *Mmu
- );
-
-gceSTATUS
-gckDEVICE_SetMMU(
- IN gckDEVICE Device,
- IN gceHARDWARE_TYPE Type,
- IN gckMMU Mmu
- );
-
-gceSTATUS
-gckDEVICE_QueryGPUAddress(
- IN gckDEVICE Device,
- IN gckKERNEL Kernel,
- IN gctUINT32 GPUAddress,
- OUT gckVIRTUAL_COMMAND_BUFFER_PTR * Buffer
- );
-
-#if gcdENABLE_TRUST_APPLICATION
-gceSTATUS
-gckKERNEL_MapInTrustApplicaiton(
- IN gckKERNEL Kernel,
- IN gctPOINTER Logical,
- IN gctPHYS_ADDR Physical,
- IN gctUINT32 GPUAddress,
- IN gctSIZE_T PageCount
- );
-#endif
-
-#if gcdSECURITY || gcdENABLE_TRUST_APPLICATION
-gceSTATUS
-gckOS_OpenSecurityChannel(
- IN gckOS Os,
- IN gceCORE Core,
- OUT gctUINT32 *Channel
- );
-
-gceSTATUS
-gckOS_CloseSecurityChannel(
- IN gctUINT32 Channel
- );
-
-gceSTATUS
-gckOS_CallSecurityService(
- IN gctUINT32 Channel,
- IN gcsTA_INTERFACE * Interface
- );
-
-gceSTATUS
-gckOS_InitSecurityChannel(
- OUT gctUINT32 Channel
- );
-
-gceSTATUS
-gckOS_AllocatePageArray(
- IN gckOS Os,
- IN gctPHYS_ADDR Physical,
- IN gctSIZE_T PageCount,
- OUT gctPOINTER * PageArrayLogical,
- OUT gctPHYS_ADDR * PageArrayPhysical
- );
-#endif
-
#ifdef __cplusplus
}
#endif
diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_async_command.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_async_command.c
deleted file mode 100644
index fff757f2763b..000000000000
--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_async_command.c
+++ /dev/null
@@ -1,449 +0,0 @@
-/****************************************************************************
-*
-* The MIT License (MIT)
-*
-* Copyright (c) 2014 - 2016 Vivante Corporation
-*
-* Permission is hereby granted, free of charge, to any person obtaining a
-* copy of this software and associated documentation files (the "Software"),
-* to deal in the Software without restriction, including without limitation
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,
-* and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-* DEALINGS IN THE SOFTWARE.
-*
-*****************************************************************************
-*
-* The GPL License (GPL)
-*
-* Copyright (C) 2014 - 2016 Vivante Corporation
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software Foundation,
-* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*
-*****************************************************************************
-*
-* Note: This software is released under dual MIT and GPL licenses. A
-* recipient may use this file under the terms of either the MIT license or
-* GPL License. If you wish to use only one license not the other, you can
-* indicate your decision by deleting one of the above license notices in your
-* version of this file.
-*
-*****************************************************************************/
-
-
-#include "gc_hal_kernel_precomp.h"
-#include "gc_hal_kernel_context.h"
-
-#define _GC_OBJ_ZONE gcvZONE_ASYNC_COMMAND
-
-static gceSTATUS
-_HandlePatchList(
- IN gckASYNC_COMMAND Command,
- IN gcoCMDBUF CommandBuffer,
- IN gctBOOL NeedCopy
- )
-{
- gceSTATUS status;
- gcsPATCH_LIST * uList;
- gcsPATCH_LIST * previous;
- gcsPATCH_LIST * kList;
-
- gcmkHEADER_ARG(
- "Command=0x%x CommandBuffer=0x%x NeedCopy=%d",
- Command, CommandBuffer, NeedCopy
- );
-
- uList = gcmUINT64_TO_PTR(CommandBuffer->patchHead);
-
- while (uList)
- {
- gctUINT i;
-
- kList = gcvNULL;
- previous = uList;
-
- gcmkONERROR(gckKERNEL_OpenUserData(
- Command->kernel,
- NeedCopy,
- Command->kList,
- uList,
- gcmSIZEOF(gcsPATCH_LIST),
- (gctPOINTER *)&kList
- ));
-
- for (i = 0; i < kList->count; i++)
- {
- gcsPATCH * patch = &kList->patch[i];
-
- /* Touch video memory node. */
- gcmkVERIFY_OK(gckVIDMEM_SetCommitStamp(Command->kernel, gcvENGINE_BLT, patch->handle, Command->commitStamp));
- }
-
- uList = kList->next;
-
- gcmkVERIFY_OK(gckKERNEL_CloseUserData(
- Command->kernel,
- NeedCopy,
- gcvFALSE,
- previous,
- gcmSIZEOF(gcsPATCH_LIST),
- (gctPOINTER *)&kList
- ));
- }
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- if (kList)
- {
- gcmkVERIFY_OK(gckKERNEL_CloseUserData(
- Command->kernel,
- NeedCopy,
- gcvFALSE,
- previous,
- gcmSIZEOF(gcsPATCH_LIST),
- (gctPOINTER *)&kList
- ));
- }
-
- gcmkFOOTER();
- return status;
-}
-
-
-gceSTATUS
-gckASYNC_COMMAND_Construct(
- IN gckKERNEL Kernel,
- OUT gckASYNC_COMMAND * Command
- )
-{
- gceSTATUS status;
- gckASYNC_COMMAND command;
- gckOS os = Kernel->os;
-
- gcmkHEADER();
-
- /* Allocate gckASYNC_COMMAND object. */
- gcmkONERROR(gckOS_Allocate(os, gcmSIZEOF(gcsASYNC_COMMAND), (gctPOINTER *)&command));
-
- gckOS_ZeroMemory(command, gcmSIZEOF(gcsASYNC_COMMAND));
-
- /* Mutex to protect gckFE. */
- gcmkONERROR(gckOS_CreateMutex(os, &command->mutex));
-
- /* Initialize gckFE. */
- gckFE_Initialize(Kernel->hardware, &command->fe);
-
- /* Initialize gckASYNC_COMMAND object. */
- command->os = os;
- command->kernel = Kernel;
- command->hardware = Kernel->hardware;
-
- gcmkVERIFY_OK(gckHARDWARE_QueryCommandBuffer(
- Kernel->hardware,
- gcvENGINE_BLT,
- gcvNULL,
- gcvNULL,
- &command->reservedTail
- ));
-
- gcmkONERROR(gckFENCE_Create(
- os, Kernel, &command->fence
- ));
-
- gcmkONERROR(gckOS_Allocate(os, gcmSIZEOF(gcsPATCH_LIST), &command->kList));
-
- /* Commit stamp start from 1. */
- command->commitStamp = 1;
-
- *Command = command;
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- /* Rollback. */
- gckASYNC_COMMAND_Destroy(command);
-
- gcmkFOOTER();
- return status;
-}
-
-gceSTATUS
-gckASYNC_COMMAND_Destroy(
- IN gckASYNC_COMMAND Command
- )
-{
- gcmkHEADER();
-
- if (Command)
- {
- if (Command->mutex)
- {
- gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutex));
- }
-
- if (Command->fence)
- {
- gcmkVERIFY_OK(gckFENCE_Destory(Command->os, Command->fence));
- }
-
- if (Command->kList)
- {
- gcmkOS_SAFE_FREE(Command->os, Command->kList);
- }
-
- gcmkOS_SAFE_FREE(Command->os, Command);
- }
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gckASYNC_COMMAND_Commit(
- IN gckASYNC_COMMAND Command,
- IN gcoCMDBUF CommandBuffer,
- IN gcsQUEUE_PTR EventQueue
- )
-{
- gceSTATUS status;
- gctBOOL available = gcvFALSE;
- gctBOOL acquired = gcvFALSE;
- gcoCMDBUF commandBufferObject = gcvNULL;
- struct _gcoCMDBUF _commandBufferObject;
- gctUINT8_PTR commandBufferLogical;
- gctUINT8_PTR commandBufferTail;
- gctUINT commandBufferSize;
- gctUINT32 commandBufferAddress;
- gcsFEDescriptor descriptor;
- gctUINT32 pipeBytes;
- gctUINT32 fenceBytes;
- gctBOOL needCopy;
- gcmkHEADER();
-
- gckHARDWARE_PipeSelect(Command->hardware, gcvNULL, gcvPIPE_3D, &pipeBytes);
-
- gckOS_QueryNeedCopy(Command->os, 0, &needCopy);
-
- gcmkVERIFY_OK(_HandlePatchList(Command, CommandBuffer, needCopy));
-
- /* Open user passed gcoCMDBUF object. */
- gcmkONERROR(gckKERNEL_OpenUserData(
- Command->kernel,
- needCopy,
- &_commandBufferObject,
- CommandBuffer,
- gcmSIZEOF(struct _gcoCMDBUF),
- (gctPOINTER *)&commandBufferObject
- ));
-
- gcmkVERIFY_OBJECT(commandBufferObject, gcvOBJ_COMMANDBUFFER);
-
- /* Compute the command buffer entry and the size. */
- commandBufferLogical
- = (gctUINT8_PTR) gcmUINT64_TO_PTR(commandBufferObject->logical)
- + commandBufferObject->startOffset
- + pipeBytes;
-
- commandBufferSize
- = commandBufferObject->offset
- + Command->reservedTail
- - commandBufferObject->startOffset
- - pipeBytes;
-
- commandBufferTail
- = commandBufferLogical
- + commandBufferSize
- - Command->reservedTail;
-
- /* Get the hardware address. */
- if (Command->kernel && Command->kernel->virtualCommandBuffer)
- {
- gckKERNEL kernel = Command->kernel;
- gckVIRTUAL_COMMAND_BUFFER_PTR virtualCommandBuffer
- = gcmNAME_TO_PTR(commandBufferObject->physical);
-
- if (virtualCommandBuffer == gcvNULL)
- {
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- gcmkONERROR(gckKERNEL_GetGPUAddress(
- Command->kernel,
- commandBufferLogical,
- gcvTRUE,
- virtualCommandBuffer,
- &commandBufferAddress
- ));
- }
- else
- {
- gcmkONERROR(gckHARDWARE_ConvertLogical(
- Command->hardware,
- commandBufferLogical,
- gcvTRUE,
- &commandBufferAddress
- ));
- }
-
- gcmkONERROR(gckHARDWARE_Fence(
- Command->hardware,
- gcvENGINE_BLT,
- commandBufferTail,
- Command->fence->address,
- Command->commitStamp,
- &fenceBytes
- ));
-
- descriptor.start = commandBufferAddress;
- descriptor.end = commandBufferAddress + commandBufferSize;
-
- gcmkDUMPCOMMAND(
- Command->os,
- commandBufferLogical,
- commandBufferSize,
- gceDUMP_BUFFER_USER,
- gcvFALSE
- );
-
- gckOS_AcquireMutex(Command->os, Command->mutex, gcvINFINITE);
- acquired = gcvTRUE;
-
- /* Acquire a slot. */
- for(;;)
- {
- gcmkONERROR(gckFE_ReserveSlot(Command->hardware, &Command->fe, &available));
-
- if (available)
- {
- break;
- }
- else
- {
- gcmkTRACE_ZONE(gcvLEVEL_INFO, _GC_OBJ_ZONE, "No available slot, have to wait");
-
- gckOS_Delay(Command->os, 1);
- }
- }
-
- /* Send descriptor. */
- gckFE_Execute(Command->hardware, &Command->fe, &descriptor);
-
- Command->commitStamp++;
-
- gckOS_ReleaseMutex(Command->os, Command->mutex);
- acquired = gcvFALSE;
-
- gcmkVERIFY_OK(gckKERNEL_CloseUserData(
- Command->kernel,
- needCopy,
- gcvFALSE,
- CommandBuffer,
- gcmSIZEOF(struct _gcoCMDBUF),
- (gctPOINTER *)&commandBufferObject
- ));
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- if (acquired)
- {
- gckOS_ReleaseMutex(Command->os, Command->mutex);
- }
-
- if (commandBufferObject)
- {
- gcmkVERIFY_OK(gckKERNEL_CloseUserData(
- Command->kernel,
- needCopy,
- gcvFALSE,
- CommandBuffer,
- gcmSIZEOF(struct _gcoCMDBUF),
- (gctPOINTER *)&commandBufferObject
- ));
- }
-
- gcmkFOOTER();
- return status;
-}
-
-gceSTATUS
-gckASYNC_COMMAND_EnterCommit(
- IN gckASYNC_COMMAND Command
- )
-{
- return gckOS_AcquireMutex(Command->os, Command->mutex, gcvINFINITE);
-}
-
-
-gceSTATUS
-gckASYNC_COMMAND_ExitCommit(
- IN gckASYNC_COMMAND Command
- )
-{
- return gckOS_ReleaseMutex(Command->os, Command->mutex);
-}
-
-gceSTATUS
-gckASYNC_COMMAND_Execute(
- IN gckASYNC_COMMAND Command,
- IN gctUINT32 Start,
- IN gctUINT32 End
- )
-{
- gceSTATUS status;
- gcsFEDescriptor descriptor;
- gctBOOL available;
-
- descriptor.start = Start;
- descriptor.end = End;
-
- /* Acquire a slot. */
- for(;;)
- {
- gcmkONERROR(gckFE_ReserveSlot(Command->hardware, &Command->fe, &available));
-
- if (available)
- {
- break;
- }
- else
- {
- gckOS_Delay(Command->os, 1);
- }
- }
-
- /* Send descriptor. */
- gckFE_Execute(Command->hardware, &Command->fe, &descriptor);
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-
diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
index d64948d84a24..7aaedd0decd7 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
@@ -101,7 +101,6 @@ _NewQueue(
gcmkONERROR(gckOS_WaitSignal(
Command->os,
Command->queues[newIndex].signal,
- gcvFALSE,
gcvINFINITE
));
@@ -134,12 +133,11 @@ _NewQueue(
#endif
/* Update gckCOMMAND object with new command queue. */
- Command->index = newIndex;
- Command->newQueue = gcvTRUE;
- Command->virtualMemory = Command->queues[newIndex].physical;
- Command->logical = Command->queues[newIndex].logical;
- Command->address = Command->queues[newIndex].address;
- Command->offset = 0;
+ Command->index = newIndex;
+ Command->newQueue = gcvTRUE;
+ Command->logical = Command->queues[newIndex].logical;
+ Command->address = Command->queues[newIndex].address;
+ Command->offset = 0;
gcmkONERROR(gckOS_GetPhysicalAddress(
Command->os,
@@ -356,7 +354,6 @@ OnError:
}
#endif
-#if !gcdNULL_DRIVER
static gceSTATUS
_FlushMMU(
IN gckCOMMAND Command
@@ -388,7 +385,7 @@ _FlushMMU(
gcmkONERROR(gckHARDWARE_FlushMMU(hardware));
if ((oldValue & gcvPAGE_TABLE_DIRTY_BIT_FE)
- && (!hardware->stallFEPrefetch)
+ && (hardware->endAfterFlushMmuCache)
)
{
pause = gcvTRUE;
@@ -406,7 +403,6 @@ _FlushMMU(
gcmkONERROR(gckHARDWARE_WaitLink(
hardware,
gcvNULL,
- ~0U,
Command->offset + executeBytes,
&waitLinkBytes,
gcvNULL,
@@ -434,18 +430,13 @@ _FlushMMU(
pointer += eventBytes;
gcmkONERROR(gckHARDWARE_End(hardware, pointer, &endBytes));
-#if USE_KERNEL_VIRTUAL_BUFFERS
- if (hardware->kernel->virtualCommandBuffer)
- {
- gcmkONERROR(gckKERNEL_GetGPUAddress(
- hardware->kernel,
- pointer,
- gcvFALSE,
- Command->virtualMemory,
- &hardware->lastEnd
- ));
- }
-#endif
+ /* Store address to queue. */
+ gcmkONERROR(gckENTRYQUEUE_Enqueue(
+ Command->kernel,
+ &Command->queue,
+ Command->address + Command->offset + executeBytes,
+ waitLinkBytes
+ ));
gcmkONERROR(gckCOMMAND_Execute(Command, executeBytes));
}
@@ -455,7 +446,6 @@ OnError:
return status;
#endif
}
-#endif
static gceSTATUS
_DummyDraw(
@@ -472,6 +462,7 @@ _DummyDraw(
gctUINT32 bufferSize;
gctUINT32 dummyDrawBytes;
+
gceDUMMY_DRAW_TYPE dummyDrawType = gcvDUMMY_DRAW_INVALID;
if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_FE_NEED_DUMMYDRAW))
@@ -479,27 +470,23 @@ _DummyDraw(
dummyDrawType = gcvDUMMY_DRAW_GC400;
}
- if (!gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_USC_DEFER_FILL_FIX) &&
- gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_USC))
- {
- dummyDrawType = gcvDUMMY_DRAW_V60;
- }
+ /* 5.0.11 not support v60.*/
if (dummyDrawType != gcvDUMMY_DRAW_INVALID)
{
gckHARDWARE_DummyDraw(hardware, gcvNULL, Command->queues[0].address, dummyDrawType, &dummyDrawBytes);
- /* Reserve space. */
- gcmkONERROR(gckCOMMAND_Reserve(
- Command,
- dummyDrawBytes,
- (gctPOINTER *)&pointer,
- &bufferSize
- ));
+ /* Reserve space. */
+ gcmkONERROR(gckCOMMAND_Reserve(
+ Command,
+ dummyDrawBytes,
+ (gctPOINTER *)&pointer,
+ &bufferSize
+ ));
gckHARDWARE_DummyDraw(hardware, pointer, Command->queues[0].address, dummyDrawType, &dummyDrawBytes);
- gcmkONERROR(gckCOMMAND_Execute(Command, dummyDrawBytes));
+ gcmkONERROR(gckCOMMAND_Execute(Command, dummyDrawBytes));
}
return gcvSTATUS_OK;
@@ -588,152 +575,6 @@ _DumpKernelCommandBuffer(
}
}
-#if !gcdNULL_DRIVER
-static gceSTATUS
-_HandlePatchList(
- IN gckCOMMAND Command,
- IN gcoCMDBUF CommandBuffer,
- IN gctBOOL NeedCopy,
- OUT gctUINT64 *AsyncCommandStamp
- )
-{
- gceSTATUS status;
- gcsPATCH_LIST * uList;
- gcsPATCH_LIST * previous;
- gcsPATCH_LIST * kList;
- gctUINT64 asyncStamp = 0;
-
- gcmkHEADER_ARG(
- "Command=0x%x CommandBuffer=0x%x NeedCopy=%d",
- Command, CommandBuffer, NeedCopy
- );
-
- uList = gcmUINT64_TO_PTR(CommandBuffer->patchHead);
-
- while (uList)
- {
- gctUINT i;
-
- kList = gcvNULL;
- previous = uList;
-
- gcmkONERROR(gckKERNEL_OpenUserData(
- Command->kernel,
- NeedCopy,
- Command->kList,
- uList,
- gcmSIZEOF(gcsPATCH_LIST),
- (gctPOINTER *)&kList
- ));
-
- for (i = 0; i < kList->count; i++)
- {
- gctUINT64 stamp = 0;
- gcsPATCH * patch = &kList->patch[i];
-
- /* Touch video memory node. */
- gcmkVERIFY_OK(gckVIDMEM_SetCommitStamp(Command->kernel, gcvENGINE_RENDER, patch->handle, Command->commitStamp));
-
- /* Get stamp touched async command buffer. */
- gcmkVERIFY_OK(gckVIDMEM_GetCommitStamp(Command->kernel, gcvENGINE_BLT, patch->handle, &stamp));
-
- /* Find latest one. */
- asyncStamp = gcmMAX(asyncStamp, stamp);
- }
-
- uList = kList->next;
-
- gcmkVERIFY_OK(gckKERNEL_CloseUserData(
- Command->kernel,
- NeedCopy,
- gcvFALSE,
- previous,
- gcmSIZEOF(gcsPATCH_LIST),
- (gctPOINTER *)&kList
- ));
- }
-
- if ((Command->asyncCommand != gcvNULL)
- && (*(gctUINT64 *)Command->asyncCommand->fence->logical > asyncStamp)
- )
- {
- /* No need to wait for async command buffer. */
- *AsyncCommandStamp = 0;
- }
- else
- {
- /* Need to add a fence wait. */
- *AsyncCommandStamp = asyncStamp;
- }
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- if (kList)
- {
- gcmkVERIFY_OK(gckKERNEL_CloseUserData(
- Command->kernel,
- NeedCopy,
- gcvFALSE,
- previous,
- gcmSIZEOF(gcsPATCH_LIST),
- (gctPOINTER *)&kList
- ));
- }
-
- gcmkFOOTER();
- return status;
-}
-
-static gceSTATUS
-_WaitForAsyncCommandStamp(
- IN gckCOMMAND Command,
- IN gctUINT64 Stamp
- )
-{
- gctUINT32 bytes;
- gceSTATUS status;
- gctUINT32 fenceAddress;
- gctUINT32 bufferSize;
- gctPOINTER pointer;
- gcmkHEADER_ARG("Stamp = 0x%llx", Stamp);
-
- fenceAddress = Command->asyncCommand->fence->address;
-
- gcmkONERROR(gckHARDWARE_WaitFence(Command->kernel->hardware,
- gcvNULL,
- Stamp,
- fenceAddress,
- &bytes
- ));
-
- gcmkONERROR(gckCOMMAND_Reserve(
- Command,
- bytes,
- &pointer,
- &bufferSize
- ));
-
- gcmkONERROR(gckHARDWARE_WaitFence(
- Command->kernel->hardware,
- pointer,
- Stamp,
- fenceAddress,
- &bytes
- ));
-
- gcmkONERROR(gckCOMMAND_Execute(Command, bytes));
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- gcmkFOOTER();
- return status;
-}
-#endif
-
/******************************************************************************\
****************************** gckCOMMAND API Code ******************************
\******************************************************************************/
@@ -792,10 +633,9 @@ gckCOMMAND_Construct(
/* Get the command buffer requirements. */
gcmkONERROR(gckHARDWARE_QueryCommandBuffer(
Kernel->hardware,
- gcvENGINE_RENDER,
&command->alignment,
&command->reservedHead,
- gcvNULL
+ &command->reservedTail
));
/* Create the command queue mutex. */
@@ -829,47 +669,20 @@ gckCOMMAND_Construct(
/* Pre-allocate the command queues. */
for (i = 0; i < gcdCOMMAND_QUEUES; ++i)
{
-#if USE_KERNEL_VIRTUAL_BUFFERS
- if (Kernel->virtualCommandBuffer)
- {
- gcmkONERROR(gckKERNEL_AllocateVirtualCommandBuffer(
- Kernel,
- gcvFALSE,
- &pageSize,
- &command->queues[i].physical,
- &command->queues[i].logical
- ));
-
- gcmkONERROR(gckKERNEL_GetGPUAddress(
- Kernel,
- command->queues[i].logical,
- gcvFALSE,
- command->queues[i].physical,
- &command->queues[i].address
- ));
- }
- else
-#endif
- {
- gcmkONERROR(gckOS_AllocateNonPagedMemory(
- os,
- gcvFALSE,
- &pageSize,
- &command->queues[i].physical,
- &command->queues[i].logical
- ));
-
- gcmkONERROR(gckHARDWARE_ConvertLogical(
- Kernel->hardware,
- command->queues[i].logical,
- gcvFALSE,
- &command->queues[i].address
- ));
+ gcmkONERROR(gckOS_AllocateNonPagedMemory(
+ os,
+ gcvFALSE,
+ &pageSize,
+ &command->queues[i].physical,
+ &command->queues[i].logical
+ ));
- gcmkONERROR(gckMMU_FillFlatMapping(
- Kernel->mmu, command->queues[i].address, pageSize
- ));
- }
+ gcmkONERROR(gckHARDWARE_ConvertLogical(
+ Kernel->hardware,
+ command->queues[i].logical,
+ gcvFALSE,
+ &command->queues[i].address
+ ));
gcmkONERROR(gckOS_CreateSignal(
os, gcvFALSE, &command->queues[i].signal
@@ -884,8 +697,6 @@ gckCOMMAND_Construct(
gcmkONERROR(gckRECORDER_Construct(os, Kernel->hardware, &command->recorder));
#endif
- gcmkONERROR(gckOS_Allocate(os, gcmSIZEOF(gcsPATCH_LIST), &command->kList));
-
gcmkONERROR(gckFENCE_Create(
os, Kernel, &command->fence
));
@@ -901,12 +712,16 @@ gckCOMMAND_Construct(
/* Command queue is idle. */
command->idle = gcvTRUE;
- /* Commit stamp start from 1. */
- command->commitStamp = 1;
+ /* Commit stamp is zero. */
+ command->commitStamp = 0;
/* END event signal not created. */
command->endEventSignal = gcvNULL;
+ command->queue.front = 0;
+ command->queue.rear = 0;
+ command->queue.count = 0;
+
command->dummyDraw = gcvTRUE;
/* Return pointer to the gckCOMMAND object. */
@@ -956,7 +771,7 @@ gckCOMMAND_Destroy(
gcmkVERIFY_OBJECT(Command, gcvOBJ_COMMAND);
/* Stop the command queue. */
- gcmkVERIFY_OK(gckCOMMAND_Stop(Command));
+ gcmkVERIFY_OK(gckCOMMAND_Stop(Command, gcvFALSE));
for (i = 0; i < gcdCOMMAND_QUEUES; ++i)
{
@@ -969,26 +784,12 @@ gckCOMMAND_Destroy(
if (Command->queues[i].logical)
{
-#if USE_KERNEL_VIRTUAL_BUFFERS
- if (Command->kernel->virtualCommandBuffer)
- {
- gcmkVERIFY_OK(gckKERNEL_DestroyVirtualCommandBuffer(
- Command->kernel,
- Command->pageSize,
- Command->queues[i].physical,
- Command->queues[i].logical
- ));
- }
- else
-#endif
- {
- gcmkVERIFY_OK(gckOS_FreeNonPagedMemory(
- Command->os,
- Command->pageSize,
- Command->queues[i].physical,
- Command->queues[i].logical
- ));
- }
+ gcmkVERIFY_OK(gckOS_FreeNonPagedMemory(
+ Command->os,
+ Command->pageSize,
+ Command->queues[i].physical,
+ Command->queues[i].logical
+ ));
}
}
@@ -1047,11 +848,6 @@ gckCOMMAND_Destroy(
gcmkOS_SAFE_FREE(Command->os, Command->stateMap);
}
- if (Command->kList)
- {
- gcmkOS_SAFE_FREE(Command->os, Command->kList);
- }
-
if (Command->fence)
{
gcmkVERIFY_OK(gckFENCE_Destory(Command->os, Command->fence));
@@ -1229,9 +1025,6 @@ gckCOMMAND_Start(
gckHARDWARE hardware;
gctUINT32 waitOffset = 0;
gctUINT32 waitLinkBytes;
- gctPOINTER logical;
- gctUINT32 physical;
- gctUINT32 address;
gcmkHEADER_ARG("Command=0x%x", Command);
@@ -1249,42 +1042,30 @@ gckCOMMAND_Start(
hardware = Command->kernel->hardware;
gcmkVERIFY_OBJECT(hardware, gcvOBJ_HARDWARE);
- /* Query the size of WAIT/LINK command sequence. */
- gcmkONERROR(gckHARDWARE_WaitLink(
- hardware,
- gcvNULL,
- ~0U,
- Command->offset,
- &waitLinkBytes,
- gcvNULL,
- gcvNULL
- ));
-
- if ((Command->pageSize - Command->offset < waitLinkBytes)
- || (Command->logical == gcvNULL)
- )
+ if (Command->logical == gcvNULL)
{
/* Start at beginning of a new queue. */
gcmkONERROR(_NewQueue(Command));
}
- logical = (gctUINT8_PTR) Command->logical + Command->offset;
- physical = Command->physical + Command->offset;
- address = Command->address + Command->offset;
+ /* Start at beginning of page. */
+ Command->offset = 0;
+
+ /* Set abvailable number of bytes for WAIT/LINK command sequence. */
+ waitLinkBytes = Command->pageSize;
/* Append WAIT/LINK. */
gcmkONERROR(gckHARDWARE_WaitLink(
hardware,
- logical,
- address,
+ Command->logical,
0,
&waitLinkBytes,
&waitOffset,
&Command->waitSize
));
- Command->waitLogical = (gctUINT8_PTR) logical + waitOffset;
- Command->waitPhysical = physical + waitOffset;
+ Command->waitLogical = (gctUINT8_PTR) Command->logical + waitOffset;
+ Command->waitPhysical = Command->physical + waitOffset;
#if gcdNONPAGED_MEMORY_CACHEABLE
/* Flush the cache for the wait/link. */
@@ -1292,14 +1073,14 @@ gckCOMMAND_Start(
Command->os,
Command->kernelProcessID,
gcvNULL,
- physical,
- logical,
+ (gctUINT32)Command->physical,
+ Command->logical,
waitLinkBytes
));
#endif
/* Adjust offset. */
- Command->offset += waitLinkBytes;
+ Command->offset = waitLinkBytes;
Command->newQueue = gcvFALSE;
#if gcdSECURITY
@@ -1311,7 +1092,7 @@ gckCOMMAND_Start(
/* Enable command processor. */
gcmkONERROR(gckHARDWARE_Execute(
hardware,
- address,
+ Command->address,
waitLinkBytes
));
#endif
@@ -1346,7 +1127,8 @@ OnError:
*/
gceSTATUS
gckCOMMAND_Stop(
- IN gckCOMMAND Command
+ IN gckCOMMAND Command,
+ IN gctBOOL FromRecovery
)
{
gckHARDWARE hardware;
@@ -1395,19 +1177,6 @@ gckCOMMAND_Stop(
hardware, Command->waitLogical, &Command->waitSize
));
-#if USE_KERNEL_VIRTUAL_BUFFERS
- if (hardware->kernel->virtualCommandBuffer)
- {
- gcmkONERROR(gckKERNEL_GetGPUAddress(
- hardware->kernel,
- Command->waitLogical,
- gcvFALSE,
- Command->virtualMemory,
- &hardware->lastEnd
- ));
- }
-#endif
-
#if gcdSECURITY
gcmkONERROR(gckKERNEL_SecurityExecute(
Command->kernel, Command->waitLogical, 8
@@ -1432,7 +1201,7 @@ gckCOMMAND_Stop(
#endif
/* Wait for idle. */
- gcmkONERROR(gckHARDWARE_GetIdle(hardware, gcvTRUE, &idle));
+ gcmkONERROR(gckHARDWARE_GetIdle(hardware, !FromRecovery, &idle));
}
/* Command queue is no longer running. */
@@ -1475,6 +1244,7 @@ OnError:
**
** Nothing.
*/
+#if gcdMULTI_GPU
gceSTATUS
gckCOMMAND_Commit(
IN gckCOMMAND Command,
@@ -1483,9 +1253,19 @@ gckCOMMAND_Commit(
IN gcsSTATE_DELTA_PTR StateDelta,
IN gcsQUEUE_PTR EventQueue,
IN gctUINT32 ProcessID,
- IN gctBOOL Shared,
- IN gctUINT32 Index
+ IN gceCORE_3D_MASK ChipEnable
)
+#else
+gceSTATUS
+gckCOMMAND_Commit(
+ IN gckCOMMAND Command,
+ IN gckCONTEXT Context,
+ IN gcoCMDBUF CommandBuffer,
+ IN gcsSTATE_DELTA_PTR StateDelta,
+ IN gcsQUEUE_PTR EventQueue,
+ IN gctUINT32 ProcessID
+ )
+#endif
{
gceSTATUS status;
gctBOOL commitEntered = gcvFALSE;
@@ -1506,8 +1286,6 @@ gckCOMMAND_Commit(
gctUINT8_PTR commandBufferLogical = gcvNULL;
gctUINT32 commandBufferAddress = 0;
gctUINT8_PTR commandBufferLink = gcvNULL;
- gctUINT8_PTR commandBufferTail = gcvNULL;
- gctUINT8_PTR commandBufferFence = gcvNULL;
gctUINT commandBufferSize;
gctSIZE_T nopBytes;
gctUINT32 pipeBytes;
@@ -1522,8 +1300,8 @@ gckCOMMAND_Commit(
gctUINT32 entryBytes;
#if gcdNONPAGED_MEMORY_CACHEABLE
gctPHYS_ADDR exitPhysical;
- gctPOINTER exitLogical;
#endif
+ gctPOINTER exitLogical;
gctUINT32 exitAddress;
gctUINT32 exitBytes;
gctUINT32 waitLinkPhysical;
@@ -1538,10 +1316,18 @@ gckCOMMAND_Commit(
#ifdef __QNXNTO__
gctPOINTER userCommandBufferLogical = gcvNULL;
gctBOOL userCommandBufferLogicalMapped = gcvFALSE;
+ gctPOINTER userCommandBufferLink = gcvNULL;
+ gctBOOL userCommandBufferLinkMapped = gcvFALSE;
#endif
#if gcdPROCESS_ADDRESS_SPACE
+ gctSIZE_T mmuConfigureBytes;
+ gctPOINTER mmuConfigureLogical = gcvNULL;
+ gctUINT32 mmuConfigureAddress;
+ gctPOINTER mmuConfigurePhysical = 0;
+ gctSIZE_T mmuConfigureWaitLinkOffset;
gckMMU mmu;
+ gctSIZE_T reservedBytes;
gctUINT32 oldValue;
#endif
@@ -1551,15 +1337,23 @@ gckCOMMAND_Commit(
gctPOINTER bufferDumpLogical = gcvNULL;
gctSIZE_T bufferDumpBytes = 0;
# endif
+#endif
+
+#if VIVANTE_PROFILER_CONTEXT
+ gctBOOL sequenceAcquired = gcvFALSE;
+#endif
+
+ gctPOINTER pointer = gcvNULL;
+
+#if gcdMULTI_GPU
+ gctSIZE_T chipEnableBytes;
+#endif
+
gctUINT32 exitLinkLow = 0, exitLinkHigh = 0;
gctUINT32 entryLinkLow = 0, entryLinkHigh = 0;
gctUINT32 commandLinkLow = 0, commandLinkHigh = 0;
gckVIRTUAL_COMMAND_BUFFER_PTR virtualCommandBuffer = gcvNULL;
- gctUINT64 asyncCommandStamp = 0;
-#endif
-
- gctPOINTER pointer = gcvNULL;
gcmkHEADER_ARG(
"Command=0x%x CommandBuffer=0x%x ProcessID=%d",
@@ -1569,6 +1363,12 @@ gckCOMMAND_Commit(
/* Verify the arguments. */
gcmkVERIFY_OBJECT(Command, gcvOBJ_COMMAND);
+ if (Command->kernel->hardware->type== gcvHARDWARE_2D)
+ {
+ /* There is no context for 2D. */
+ Context = gcvNULL;
+ }
+
#if gcdPROCESS_ADDRESS_SPACE
gcmkONERROR(gckKERNEL_GetProcessMMU(Command->kernel, &mmu));
@@ -1579,6 +1379,17 @@ gckCOMMAND_Commit(
#else
#endif
+#if VIVANTE_PROFILER_CONTEXT
+ if((Command->kernel->hardware->gpuProfiler) && (Command->kernel->profileEnable))
+ {
+ /* Acquire the context sequnence mutex. */
+ gcmkONERROR(gckOS_AcquireMutex(
+ Command->os, Command->mutexContextSeq, gcvINFINITE
+ ));
+ sequenceAcquired = gcvTRUE;
+ }
+#endif
+
/* Acquire the command queue. */
gcmkONERROR(gckCOMMAND_EnterCommit(Command, gcvFALSE));
commitEntered = gcvTRUE;
@@ -1634,8 +1445,6 @@ gckCOMMAND_Commit(
commandBufferMapped = gcvTRUE;
}
- gcmkONERROR(_HandlePatchList(Command, commandBufferObject, needCopy, &asyncCommandStamp));
-
/* Query the size of NOP command. */
gcmkONERROR(gckHARDWARE_Nop(
hardware, gcvNULL, &nopBytes
@@ -1651,6 +1460,13 @@ gckCOMMAND_Commit(
hardware, gcvNULL, 0, 0, &linkBytes, gcvNULL, gcvNULL
));
+#if gcdMULTI_GPU
+ /* Query the size of chip enable command sequence. */
+ gcmkONERROR(gckHARDWARE_ChipEnable(
+ hardware, gcvNULL, 0, &chipEnableBytes
+ ));
+#endif
+
/* Compute the command buffer entry and the size. */
commandBufferLogical
= (gctUINT8_PTR) gcmUINT64_TO_PTR(commandBufferObject->logical)
@@ -1709,16 +1525,11 @@ gckCOMMAND_Commit(
commandBufferSize
= commandBufferObject->offset
- + commandBufferObject->reservedTail
+ + Command->reservedTail
- commandBufferObject->startOffset;
gcmkONERROR(_FlushMMU(Command));
- if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_FENCE) && asyncCommandStamp != 0)
- {
- gcmkONERROR(_WaitForAsyncCommandStamp(Command, asyncCommandStamp));
- }
-
if (Command->dummyDraw == gcvTRUE &&
Context != gcvNULL)
{
@@ -1732,11 +1543,47 @@ gckCOMMAND_Commit(
/* Compute number of bytes left in current kernel command queue. */
bytes = Command->pageSize - offset;
+#if gcdMULTI_GPU
+ if (Command->kernel->core == gcvCORE_MAJOR)
+ {
+ commandBufferSize += chipEnableBytes;
+
+ gcmkONERROR(gckHARDWARE_ChipEnable(
+ hardware,
+ commandBufferLogical + pipeBytes,
+ ChipEnable,
+ &chipEnableBytes
+ ));
+
+ gcmkONERROR(gckHARDWARE_ChipEnable(
+ hardware,
+ commandBufferLogical + commandBufferSize - linkBytes - chipEnableBytes,
+ gcvCORE_3D_ALL_MASK,
+ &chipEnableBytes
+ ));
+ }
+ else
+ {
+ commandBufferSize += nopBytes;
+
+ gcmkONERROR(gckHARDWARE_Nop(
+ hardware,
+ commandBufferLogical + pipeBytes,
+ &nopBytes
+ ));
+
+ gcmkONERROR(gckHARDWARE_Nop(
+ hardware,
+ commandBufferLogical + commandBufferSize - linkBytes - nopBytes,
+ &nopBytes
+ ));
+ }
+#endif
+
/* Query the size of WAIT/LINK command sequence. */
gcmkONERROR(gckHARDWARE_WaitLink(
hardware,
gcvNULL,
- ~0U,
offset,
&waitLinkBytes,
gcvNULL,
@@ -1796,72 +1643,316 @@ gckCOMMAND_Commit(
Command->currContext = gcvNULL;
}
-#if gcdDEBUG_OPTION && gcdDEBUG_FORCE_CONTEXT_UPDATE
- else if (1)
-#else
else if (Command->currContext != Context)
-#endif
{
+ /* Temporary disable context length oprimization. */
+ Context->dirty = gcvTRUE;
+
/* Get the current context buffer. */
contextBuffer = Context->buffer;
/* Yes, merge in the deltas. */
gcmkONERROR(gckCONTEXT_Update(Context, ProcessID, StateDelta));
- /***************************************************************
- ** SWITCHING CONTEXT.
- */
+ /* Determine context entry and exit points. */
+ if (0)
+ {
+ /* Reset 2D dirty flag. */
+ Context->dirty2D = gcvFALSE;
- /* Determine context buffer entry offset. */
- offset = (Command->pipeSelect == gcvPIPE_3D)
+ if (Context->dirty || commandBufferObject->using3D)
+ {
+ /***************************************************************
+ ** SWITCHING CONTEXT: 2D and 3D are used.
+ */
- /* Skip pipe switching sequence. */
- ? Context->entryOffset3D + Context->pipeSelectBytes
+ /* Reset 3D dirty flag. */
+ Context->dirty3D = gcvFALSE;
- /* Do not skip pipe switching sequence. */
- : Context->entryOffset3D;
+ /* Compute the entry. */
+ if (Command->pipeSelect == gcvPIPE_2D)
+ {
+#if gcdNONPAGED_MEMORY_CACHEABLE
+ entryPhysical = (gctUINT8_PTR) contextBuffer->physical + pipeBytes;
+#endif
+ entryLogical = (gctUINT8_PTR) contextBuffer->logical + pipeBytes;
+ entryAddress = contextBuffer->address + pipeBytes;
+ entryBytes = Context->bufferSize - pipeBytes;
+ }
+ else
+ {
+#if gcdNONPAGED_MEMORY_CACHEABLE
+ entryPhysical = (gctUINT8_PTR) contextBuffer->physical;
+#endif
+ entryLogical = (gctUINT8_PTR) contextBuffer->logical;
+ entryAddress = contextBuffer->address;
+ entryBytes = Context->bufferSize;
+ }
- /* Compute the entry. */
+ /* See if we have to switch pipes between the context
+ and command buffers. */
+ if (commandBufferObject->entryPipe == gcvPIPE_3D)
+ {
+ /* Skip pipe switching sequence. */
+ offset = pipeBytes;
+ }
+ else
+ {
+ /* The current hardware and the initial context pipes are
+ different, switch to the correct pipe. */
+ gcmkONERROR(gckHARDWARE_PipeSelect(
+ Command->kernel->hardware,
+ commandBufferLogical,
+ commandBufferObject->entryPipe,
+ &pipeBytes
+ ));
+
+ /* Do not skip pipe switching sequence. */
+ offset = 0;
+ }
+
+ /* Ensure the NOP between 2D and 3D is in place so that the
+ execution falls through from 2D to 3D. */
+ gcmkONERROR(gckHARDWARE_Nop(
+ hardware,
+ contextBuffer->link2D,
+ &nopBytes
+ ));
+
+ /* Generate a LINK from the context buffer to
+ the command buffer. */
+ gcmkONERROR(gckHARDWARE_Link(
+ hardware,
+ contextBuffer->link3D,
+ commandBufferAddress + offset,
+ commandBufferSize - offset,
+ &linkBytes,
+ &commandLinkLow,
+ &commandLinkHigh
+ ));
+
+ /* Mark context as not dirty. */
+ Context->dirty = gcvFALSE;
+ }
+ else
+ {
+ /***************************************************************
+ ** SWITCHING CONTEXT: 2D only command buffer.
+ */
+
+ /* Mark 3D as dirty. */
+ Context->dirty3D = gcvTRUE;
+
+ /* Compute the entry. */
+ if (Command->pipeSelect == gcvPIPE_2D)
+ {
#if gcdNONPAGED_MEMORY_CACHEABLE
- entryPhysical = (gctUINT8_PTR) contextBuffer->physical + offset;
+ entryPhysical = (gctUINT8_PTR) contextBuffer->physical + pipeBytes;
#endif
- entryLogical = (gctUINT8_PTR) contextBuffer->logical + offset;
- entryAddress = contextBuffer->address + offset;
- entryBytes = Context->bufferSize - offset;
+ entryLogical = (gctUINT8_PTR) contextBuffer->logical + pipeBytes;
+ entryAddress = contextBuffer->address + pipeBytes;
+ entryBytes = Context->entryOffset3D - pipeBytes;
+ }
+ else
+ {
+#if gcdNONPAGED_MEMORY_CACHEABLE
+ entryPhysical = (gctUINT8_PTR) contextBuffer->physical;
+#endif
+ entryLogical = (gctUINT8_PTR) contextBuffer->logical;
+ entryAddress = contextBuffer->address;
+ entryBytes = Context->entryOffset3D;
+ }
- /* See if we have to switch pipes between the context
- and command buffers. */
- if (commandBufferObject->entryPipe == gcvPIPE_3D)
- {
- /* Skip pipe switching sequence. */
- offset = pipeBytes;
+ /* Store the current context buffer. */
+ Context->dirtyBuffer = contextBuffer;
+
+ /* See if we have to switch pipes between the context
+ and command buffers. */
+ if (commandBufferObject->entryPipe == gcvPIPE_2D)
+ {
+ /* Skip pipe switching sequence. */
+ offset = pipeBytes;
+ }
+ else
+ {
+ /* The current hardware and the initial context pipes are
+ different, switch to the correct pipe. */
+ gcmkONERROR(gckHARDWARE_PipeSelect(
+ Command->kernel->hardware,
+ commandBufferLogical,
+ commandBufferObject->entryPipe,
+ &pipeBytes
+ ));
+
+ /* Do not skip pipe switching sequence. */
+ offset = 0;
+ }
+
+ /* 3D is not used, generate a LINK from the end of 2D part of
+ the context buffer to the command buffer. */
+ gcmkONERROR(gckHARDWARE_Link(
+ hardware,
+ contextBuffer->link2D,
+ commandBufferAddress + offset,
+ commandBufferSize - offset,
+ &linkBytes,
+ &commandLinkLow,
+ &commandLinkHigh
+ ));
+ }
}
+
+ /* Not using 2D. */
else
{
- /* The current hardware and the initial context pipes are
- different, switch to the correct pipe. */
- gcmkONERROR(gckHARDWARE_PipeSelect(
- Command->kernel->hardware,
- commandBufferLogical,
- commandBufferObject->entryPipe,
- &pipeBytes
- ));
- /* Do not skip pipe switching sequence. */
- offset = 0;
- }
+ /* Store the current context buffer. */
+ Context->dirtyBuffer = contextBuffer;
- /* Generate a LINK from the context buffer to
- the command buffer. */
- gcmkONERROR(gckHARDWARE_Link(
- hardware,
- contextBuffer->link3D,
- commandBufferAddress + offset,
- commandBufferSize - offset,
- &linkBytes,
- &commandLinkLow,
- &commandLinkHigh
- ));
+ if (Context->dirty || commandBufferObject->using3D)
+ {
+ /***************************************************************
+ ** SWITCHING CONTEXT: 3D only command buffer.
+ */
+
+ /* Reset 3D dirty flag. */
+ Context->dirty3D = gcvFALSE;
+
+ /* Determine context buffer entry offset. */
+ offset = (Command->pipeSelect == gcvPIPE_3D)
+
+ /* Skip pipe switching sequence. */
+ ? Context->entryOffset3D + Context->pipeSelectBytes
+
+ /* Do not skip pipe switching sequence. */
+ : Context->entryOffset3D;
+
+ /* Compute the entry. */
+#if gcdNONPAGED_MEMORY_CACHEABLE
+ entryPhysical = (gctUINT8_PTR) contextBuffer->physical + offset;
+#endif
+ entryLogical = (gctUINT8_PTR) contextBuffer->logical + offset;
+ entryAddress = contextBuffer->address + offset;
+ entryBytes = Context->bufferSize - offset;
+
+ /* See if we have to switch pipes between the context
+ and command buffers. */
+ if (commandBufferObject->entryPipe == gcvPIPE_3D)
+ {
+ /* Skip pipe switching sequence. */
+ offset = pipeBytes;
+ }
+ else
+ {
+ /* The current hardware and the initial context pipes are
+ different, switch to the correct pipe. */
+ gcmkONERROR(gckHARDWARE_PipeSelect(
+ Command->kernel->hardware,
+ commandBufferLogical,
+ commandBufferObject->entryPipe,
+ &pipeBytes
+ ));
+
+ /* Do not skip pipe switching sequence. */
+ offset = 0;
+ }
+
+ /* Generate a LINK from the context buffer to
+ the command buffer. */
+ gcmkONERROR(gckHARDWARE_Link(
+ hardware,
+ contextBuffer->link3D,
+ commandBufferAddress + offset,
+ commandBufferSize - offset,
+ &linkBytes,
+ &commandLinkLow,
+ &commandLinkHigh
+ ));
+ }
+ else
+ {
+ /***************************************************************
+ ** SWITCHING CONTEXT: "XD" command buffer - neither 2D nor 3D.
+ */
+
+ /* Mark 3D as dirty. */
+ Context->dirty3D = gcvTRUE;
+
+ /* Compute the entry. */
+ if (Command->pipeSelect == gcvPIPE_3D)
+ {
+#if gcdNONPAGED_MEMORY_CACHEABLE
+ entryPhysical
+ = (gctUINT8_PTR) contextBuffer->physical
+ + Context->entryOffsetXDFrom3D;
+#endif
+ entryLogical
+ = (gctUINT8_PTR) contextBuffer->logical
+ + Context->entryOffsetXDFrom3D;
+
+ entryAddress
+ = contextBuffer->address
+ + Context->entryOffsetXDFrom3D;
+
+ entryBytes
+ = Context->bufferSize
+ - Context->entryOffsetXDFrom3D;
+ }
+ else
+ {
+#if gcdNONPAGED_MEMORY_CACHEABLE
+ entryPhysical
+ = (gctUINT8_PTR) contextBuffer->physical
+ + Context->entryOffsetXDFrom2D;
+#endif
+ entryLogical
+ = (gctUINT8_PTR) contextBuffer->logical
+ + Context->entryOffsetXDFrom2D;
+
+ entryAddress
+ = contextBuffer->address
+ + Context->entryOffsetXDFrom2D;
+
+ entryBytes
+ = Context->totalSize
+ - Context->entryOffsetXDFrom2D;
+ }
+
+ /* See if we have to switch pipes between the context
+ and command buffers. */
+ if (commandBufferObject->entryPipe == gcvPIPE_3D)
+ {
+ /* Skip pipe switching sequence. */
+ offset = pipeBytes;
+ }
+ else
+ {
+ /* The current hardware and the initial context pipes are
+ different, switch to the correct pipe. */
+ gcmkONERROR(gckHARDWARE_PipeSelect(
+ Command->kernel->hardware,
+ commandBufferLogical,
+ commandBufferObject->entryPipe,
+ &pipeBytes
+ ));
+
+ /* Do not skip pipe switching sequence. */
+ offset = 0;
+ }
+
+ /* Generate a LINK from the context buffer to
+ the command buffer. */
+ gcmkONERROR(gckHARDWARE_Link(
+ hardware,
+ contextBuffer->link3D,
+ commandBufferAddress + offset,
+ commandBufferSize - offset,
+ &linkBytes,
+ &commandLinkLow,
+ &commandLinkHigh
+ ));
+ }
+ }
#if gcdNONPAGED_MEMORY_CACHEABLE
/* Flush the context buffer cache. */
@@ -1898,7 +1989,7 @@ gckCOMMAND_Commit(
gcvNULL,
0xFFFFFFFF,
entryLogical,
- entryBytes
+ entryBytes - 8
);
#endif
}
@@ -1906,34 +1997,232 @@ gckCOMMAND_Commit(
/* Same context. */
else
{
- /* See if we have to switch pipes for the command buffer. */
- if (commandBufferObject->entryPipe == Command->pipeSelect)
+ /* Determine context entry and exit points. */
+ if (commandBufferObject->using2D && Context->dirty2D)
{
- /* Skip pipe switching sequence. */
- offset = pipeBytes;
+ /* Reset 2D dirty flag. */
+ Context->dirty2D = gcvFALSE;
+
+ /* Get the "dirty" context buffer. */
+ contextBuffer = Context->dirtyBuffer;
+
+ if (commandBufferObject->using3D && Context->dirty3D)
+ {
+ /* Reset 3D dirty flag. */
+ Context->dirty3D = gcvFALSE;
+
+ /* Compute the entry. */
+ if (Command->pipeSelect == gcvPIPE_2D)
+ {
+#if gcdNONPAGED_MEMORY_CACHEABLE
+ entryPhysical = (gctUINT8_PTR) contextBuffer->physical + pipeBytes;
+#endif
+ entryLogical = (gctUINT8_PTR) contextBuffer->logical + pipeBytes;
+ entryAddress = contextBuffer->address + pipeBytes;
+ entryBytes = Context->bufferSize - pipeBytes;
+ }
+ else
+ {
+#if gcdNONPAGED_MEMORY_CACHEABLE
+ entryPhysical = (gctUINT8_PTR) contextBuffer->physical;
+#endif
+ entryLogical = (gctUINT8_PTR) contextBuffer->logical;
+ entryAddress = contextBuffer->address;
+ entryBytes = Context->bufferSize;
+ }
+
+ /* See if we have to switch pipes between the context
+ and command buffers. */
+ if (commandBufferObject->entryPipe == gcvPIPE_3D)
+ {
+ /* Skip pipe switching sequence. */
+ offset = pipeBytes;
+ }
+ else
+ {
+ /* The current hardware and the initial context pipes are
+ different, switch to the correct pipe. */
+ gcmkONERROR(gckHARDWARE_PipeSelect(
+ Command->kernel->hardware,
+ commandBufferLogical,
+ commandBufferObject->entryPipe,
+ &pipeBytes
+ ));
+
+ /* Do not skip pipe switching sequence. */
+ offset = 0;
+ }
+
+ /* Ensure the NOP between 2D and 3D is in place so that the
+ execution falls through from 2D to 3D. */
+ gcmkONERROR(gckHARDWARE_Nop(
+ hardware,
+ contextBuffer->link2D,
+ &nopBytes
+ ));
+
+ /* Generate a LINK from the context buffer to
+ the command buffer. */
+ gcmkONERROR(gckHARDWARE_Link(
+ hardware,
+ contextBuffer->link3D,
+ commandBufferAddress + offset,
+ commandBufferSize - offset,
+ &linkBytes,
+ &commandLinkLow,
+ &commandLinkHigh
+ ));
+ }
+ else
+ {
+ /* Compute the entry. */
+ if (Command->pipeSelect == gcvPIPE_2D)
+ {
+#if gcdNONPAGED_MEMORY_CACHEABLE
+ entryPhysical = (gctUINT8_PTR) contextBuffer->physical + pipeBytes;
+#endif
+ entryLogical = (gctUINT8_PTR) contextBuffer->logical + pipeBytes;
+ entryAddress = contextBuffer->address + pipeBytes;
+ entryBytes = Context->entryOffset3D - pipeBytes;
+ }
+ else
+ {
+#if gcdNONPAGED_MEMORY_CACHEABLE
+ entryPhysical = (gctUINT8_PTR) contextBuffer->physical;
+#endif
+ entryLogical = (gctUINT8_PTR) contextBuffer->logical;
+ entryAddress = contextBuffer->address;
+ entryBytes = Context->entryOffset3D;
+ }
+
+ /* See if we have to switch pipes between the context
+ and command buffers. */
+ if (commandBufferObject->entryPipe == gcvPIPE_2D)
+ {
+ /* Skip pipe switching sequence. */
+ offset = pipeBytes;
+ }
+ else
+ {
+ /* The current hardware and the initial context pipes are
+ different, switch to the correct pipe. */
+ gcmkONERROR(gckHARDWARE_PipeSelect(
+ Command->kernel->hardware,
+ commandBufferLogical,
+ commandBufferObject->entryPipe,
+ &pipeBytes
+ ));
+
+ /* Do not skip pipe switching sequence. */
+ offset = 0;
+ }
+
+ /* 3D is not used, generate a LINK from the end of 2D part of
+ the context buffer to the command buffer. */
+ gcmkONERROR(gckHARDWARE_Link(
+ hardware,
+ contextBuffer->link2D,
+ commandBufferAddress + offset,
+ commandBufferSize - offset,
+ &linkBytes,
+ &commandLinkLow,
+ &commandLinkHigh
+ ));
+ }
}
else
{
- /* The current hardware and the entry command buffer pipes
- ** are different, switch to the correct pipe. */
- gcmkONERROR(gckHARDWARE_PipeSelect(
- Command->kernel->hardware,
- commandBufferLogical,
- commandBufferObject->entryPipe,
- &pipeBytes
- ));
+ if (commandBufferObject->using3D && Context->dirty3D)
+ {
+ /* Reset 3D dirty flag. */
+ Context->dirty3D = gcvFALSE;
- /* Do not skip pipe switching sequence. */
- offset = 0;
- }
+ /* Get the "dirty" context buffer. */
+ contextBuffer = Context->dirtyBuffer;
- /* Compute the entry. */
+ /* Determine context buffer entry offset. */
+ offset = (Command->pipeSelect == gcvPIPE_3D)
+
+ /* Skip pipe switching sequence. */
+ ? Context->entryOffset3D + pipeBytes
+
+ /* Do not skip pipe switching sequence. */
+ : Context->entryOffset3D;
+
+ /* Compute the entry. */
#if gcdNONPAGED_MEMORY_CACHEABLE
- entryPhysical = (gctUINT8_PTR) commandBufferPhysical + offset;
+ entryPhysical = (gctUINT8_PTR) contextBuffer->physical + offset;
#endif
- entryLogical = commandBufferLogical + offset;
- entryAddress = commandBufferAddress + offset;
- entryBytes = commandBufferSize - offset;
+ entryLogical = (gctUINT8_PTR) contextBuffer->logical + offset;
+ entryAddress = contextBuffer->address + offset;
+ entryBytes = Context->bufferSize - offset;
+
+ /* See if we have to switch pipes between the context
+ and command buffers. */
+ if (commandBufferObject->entryPipe == gcvPIPE_3D)
+ {
+ /* Skip pipe switching sequence. */
+ offset = pipeBytes;
+ }
+ else
+ {
+ /* The current hardware and the initial context pipes are
+ different, switch to the correct pipe. */
+ gcmkONERROR(gckHARDWARE_PipeSelect(
+ Command->kernel->hardware,
+ commandBufferLogical,
+ commandBufferObject->entryPipe,
+ &pipeBytes
+ ));
+
+ /* Do not skip pipe switching sequence. */
+ offset = 0;
+ }
+
+ /* Generate a LINK from the context buffer to
+ the command buffer. */
+ gcmkONERROR(gckHARDWARE_Link(
+ hardware,
+ contextBuffer->link3D,
+ commandBufferAddress + offset,
+ commandBufferSize - offset,
+ &linkBytes,
+ &commandLinkLow,
+ &commandLinkHigh
+ ));
+ }
+ else
+ {
+ /* See if we have to switch pipes for the command buffer. */
+ if (commandBufferObject->entryPipe == Command->pipeSelect)
+ {
+ /* Skip pipe switching sequence. */
+ offset = pipeBytes;
+ }
+ else
+ {
+ /* The current hardware and the entry command buffer pipes
+ ** are different, switch to the correct pipe. */
+ gcmkONERROR(gckHARDWARE_PipeSelect(
+ Command->kernel->hardware,
+ commandBufferLogical,
+ commandBufferObject->entryPipe,
+ &pipeBytes
+ ));
+
+ /* Do not skip pipe switching sequence. */
+ offset = 0;
+ }
+
+ /* Compute the entry. */
+#if gcdNONPAGED_MEMORY_CACHEABLE
+ entryPhysical = (gctUINT8_PTR) commandBufferPhysical + offset;
+#endif
+ entryLogical = commandBufferLogical + offset;
+ entryAddress = commandBufferAddress + offset;
+ entryBytes = commandBufferSize - offset;
+ }
+ }
}
#if gcdDUMP_COMMAND
@@ -1953,8 +2242,9 @@ gckCOMMAND_Commit(
/* New command queue, jump to the beginning of it. */
#if gcdNONPAGED_MEMORY_CACHEABLE
exitPhysical = Command->physical;
- exitLogical = Command->logical;
#endif
+
+ exitLogical = Command->logical;
exitAddress = Command->address;
exitBytes = Command->offset + waitLinkBytes;
}
@@ -1964,8 +2254,8 @@ gckCOMMAND_Commit(
WAIT/LINK command sequence. */
#if gcdNONPAGED_MEMORY_CACHEABLE
exitPhysical = waitLinkPhysical;
- exitLogical = waitLinkLogical;
#endif
+ exitLogical = waitLinkLogical;
exitAddress = waitLinkAddress;
exitBytes = waitLinkBytes;
}
@@ -1976,7 +2266,6 @@ gckCOMMAND_Commit(
gcmkONERROR(gckHARDWARE_WaitLink(
hardware,
waitLinkLogical,
- waitLinkAddress,
offset,
&waitLinkBytes,
&waitOffset,
@@ -1999,82 +2288,58 @@ gckCOMMAND_Commit(
));
#endif
- /* Determine the location of the TAIL in the command buffer. */
- commandBufferTail
- = commandBufferLogical
- + commandBufferSize
- - commandBufferObject->reservedTail;
+ /* Determine the location of the LINK command in the command buffer. */
+ commandBufferLink
+ = (gctUINT8_PTR) gcmUINT64_TO_PTR(commandBufferObject->logical)
+ + commandBufferObject->offset;
- if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_FENCE))
- {
- /* Determine the location of the FENCE command in the command buffer. */
- commandBufferFence = commandBufferTail;
+#ifdef __QNXNTO__
+ userCommandBufferLink = (gctPOINTER) commandBufferLink;
- /* Determine the location of the LINK command in the command buffer. */
- commandBufferLink = commandBufferTail + gcdRENDER_FENCE_LENGTH;
- }
- else
- {
- /* Determine the location of the LINK command in the command buffer. */
- commandBufferLink = commandBufferTail;
- }
+ gcmkONERROR(gckOS_MapUserPointer(
+ Command->os,
+ userCommandBufferLink,
+ 0,
+ &pointer));
- /* Generate command which writes out commit stamp. */
- if (commandBufferFence)
- {
- gctUINT32 bytes;
+ commandBufferLink = pointer;
- gcmkONERROR(gckHARDWARE_Fence(
- hardware,
- gcvENGINE_RENDER,
- commandBufferFence,
- Command->fence->address,
- Command->commitStamp,
- &bytes
- ));
- }
+ userCommandBufferLinkMapped = gcvTRUE;
+#endif
- /* Generate a LINK from the end of the command buffer being scheduled
- back to the kernel command queue. */
-#if !gcdSECURITY
- if (Shared == gcvFALSE)
+#if gcdMULTI_GPU
+ if (Command->kernel->core == gcvCORE_MAJOR)
{
- gcmkONERROR(gckHARDWARE_Link(
- hardware,
- commandBufferLink,
- exitAddress,
- exitBytes,
- &linkBytes,
- &exitLinkLow,
- &exitLinkHigh
- ));
+ commandBufferLink += chipEnableBytes;
}
else
{
- gctUINT8_PTR link = commandBufferLink + Index * 16;
- gctSIZE_T bytes = 8;
-
- gcmkONERROR(gckHARDWARE_ChipEnable(
- hardware,
- link,
- (gceCORE_3D_MASK)(1 << hardware->kernel->chipID),
- &bytes
- ));
+ commandBufferLink += nopBytes;
+ }
+#endif
- link += bytes;
+ /* Generate a LINK from the end of the command buffer being scheduled
+ back to the kernel command queue. */
+#if !gcdSECURITY
+ gcmkONERROR(gckHARDWARE_Link(
+ hardware,
+ commandBufferLink,
+ exitAddress,
+ exitBytes,
+ &linkBytes,
+ &exitLinkLow,
+ &exitLinkHigh
+ ));
+#endif
- gcmkONERROR(gckHARDWARE_Link(
- hardware,
- link,
- exitAddress,
- exitBytes,
- &linkBytes,
- &exitLinkLow,
- &exitLinkHigh
- ));
+#ifdef __QNXNTO__
+ gcmkONERROR(gckOS_UnmapUserPointer(
+ Command->os,
+ userCommandBufferLink,
+ 0,
+ commandBufferLink));
- link += linkBytes;
- }
+ userCommandBufferLinkMapped = gcvFALSE;
#endif
#if gcdNONPAGED_MEMORY_CACHEABLE
@@ -2093,7 +2358,7 @@ gckCOMMAND_Commit(
gckRECORDER_Record(
Command->recorder,
commandBufferLogical + offset,
- commandBufferSize - offset,
+ commandBufferSize - offset - 8,
gcvNULL,
0xFFFFFFFF
);
@@ -2128,36 +2393,35 @@ gckCOMMAND_Commit(
#if gcdLINK_QUEUE_SIZE
if (Command->kernel->stuckDump >= gcvSTUCK_DUMP_USER_COMMAND)
{
- gcuQUEUEDATA data;
-
- gcmkVERIFY_OK(gckOS_GetProcessID(&data.linkData.pid));
-
- data.linkData.start = entryAddress;
- data.linkData.end = entryAddress + entryBytes;
- data.linkData.linkLow = entryLinkLow;
- data.linkData.linkHigh = entryLinkHigh;
-
- gckQUEUE_Enqueue(&hardware->linkQueue, &data);
+ gckLINKQUEUE_Enqueue(
+ &hardware->linkQueue,
+ entryAddress,
+ entryAddress + entryBytes,
+ entryLinkLow,
+ entryLinkHigh
+ );
if (commandBufferAddress + offset != entryAddress)
{
- data.linkData.start = commandBufferAddress + offset;
- data.linkData.end = commandBufferAddress + commandBufferSize;
- data.linkData.linkLow = commandLinkLow;
- data.linkData.linkHigh = commandLinkHigh;
-
- gckQUEUE_Enqueue(&hardware->linkQueue, &data);
+ gckLINKQUEUE_Enqueue(
+ &hardware->linkQueue,
+ commandBufferAddress + offset,
+ commandBufferAddress + commandBufferSize,
+ commandLinkLow,
+ commandLinkHigh
+ );
}
if (Command->kernel->stuckDump >= gcvSTUCK_DUMP_ALL_COMMAND)
{
- data.linkData.start = exitAddress;
- data.linkData.end = exitAddress + exitBytes;
- data.linkData.linkLow = exitLinkLow;
- data.linkData.linkHigh = exitLinkHigh;
-
/* Dump kernel command.*/
- gckQUEUE_Enqueue(&hardware->linkQueue, &data);
+ gckLINKQUEUE_Enqueue(
+ &hardware->linkQueue,
+ exitAddress,
+ exitAddress + exitBytes,
+ exitLinkLow,
+ exitLinkHigh
+ );
}
}
#endif
@@ -2255,6 +2519,35 @@ gckCOMMAND_Commit(
gcmkONERROR(gckCOMMAND_ExitCommit(Command, gcvFALSE));
commitEntered = gcvFALSE;
+ if (stall)
+ {
+#if gcdMULTI_GPU
+ gcmkONERROR(gckCOMMAND_Stall(Command, gcvFALSE, ChipEnable));
+#else
+ gcmkONERROR(gckCOMMAND_Stall(Command, gcvFALSE));
+#endif
+ }
+
+#if VIVANTE_PROFILER_CONTEXT
+ if(sequenceAcquired)
+ {
+#if gcdMULTI_GPU
+ gcmkONERROR(gckCOMMAND_Stall(Command, gcvTRUE, ChipEnable));
+#else
+ gcmkONERROR(gckCOMMAND_Stall(Command, gcvTRUE));
+#endif
+ if (Command->currContext)
+ {
+ gcmkONERROR(gckHARDWARE_UpdateContextProfile(
+ hardware,
+ Command->currContext));
+ }
+
+ /* Release the context switching mutex. */
+ gcmkONERROR(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
+ sequenceAcquired = gcvFALSE;
+ }
+#endif
/* Loop while there are records in the queue. */
while (EventQueue != gcvNULL)
@@ -2301,19 +2594,21 @@ gckCOMMAND_Commit(
EventQueue = nextEventRecord;
}
- if ((Command->kernel->eventObj->queueHead == gcvNULL
- && Command->kernel->hardware->powerManagement == gcvTRUE)
- || (Command->kernel->hardware->gpuProfiler == gcvTRUE
- && Command->kernel->profileEnable == gcvTRUE)
+ if (Command->kernel->eventObj->queueHead == gcvNULL
+ && Command->kernel->hardware->powerManagement == gcvTRUE
)
{
/* Commit done event by which work thread knows all jobs done. */
gcmkVERIFY_OK(
- gckEVENT_CommitDone(Command->kernel->eventObj, gcvKERNEL_PIXEL, Command->currContext));
+ gckEVENT_CommitDone(Command->kernel->eventObj, gcvKERNEL_PIXEL));
}
/* Submit events. */
+#if gcdMULTI_GPU
+ status = gckEVENT_Submit(Command->kernel->eventObj, gcvTRUE, gcvFALSE, ChipEnable);
+#else
status = gckEVENT_Submit(Command->kernel->eventObj, gcvTRUE, gcvFALSE);
+#endif
if (status == gcvSTATUS_INTERRUPTED)
{
gcmkTRACE(
@@ -2382,7 +2677,24 @@ OnError:
gcmkVERIFY_OK(gckCOMMAND_ExitCommit(Command, gcvFALSE));
}
+#if VIVANTE_PROFILER_CONTEXT
+ if (sequenceAcquired)
+ {
+ /* Release the context sequence mutex. */
+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
+ }
+#endif
+
#ifdef __QNXNTO__
+ if (userCommandBufferLinkMapped)
+ {
+ gcmkONERROR(gckOS_UnmapUserPointer(
+ Command->os,
+ userCommandBufferLink,
+ 0,
+ commandBufferLink));
+ }
+
if (userCommandBufferLogicalMapped)
{
gcmkVERIFY_OK(gckOS_UnmapUserPointer(
@@ -2460,7 +2772,6 @@ gckCOMMAND_Reserve(
gcmkONERROR(gckHARDWARE_WaitLink(
Command->kernel->hardware,
gcvNULL,
- ~0U,
Command->offset + requestedAligned,
&requiredBytes,
gcvNULL,
@@ -2536,7 +2847,6 @@ gckCOMMAND_Execute(
gctUINT32 waitLinkPhysical;
gctUINT8_PTR waitLinkLogical;
- gctUINT32 waitLinkAddress;
gctUINT32 waitLinkOffset;
gctUINT32 waitLinkBytes;
@@ -2568,13 +2878,11 @@ gckCOMMAND_Execute(
/* Compute the location if WAIT/LINK command sequence. */
waitLinkPhysical = Command->physical + waitLinkOffset;
waitLinkLogical = (gctUINT8_PTR) Command->logical + waitLinkOffset;
- waitLinkAddress = Command->address + waitLinkOffset;
/* Append WAIT/LINK in command queue. */
gcmkONERROR(gckHARDWARE_WaitLink(
Command->kernel->hardware,
waitLinkLogical,
- waitLinkAddress,
waitLinkOffset,
&waitLinkBytes,
&waitOffset,
@@ -2632,6 +2940,19 @@ gckCOMMAND_Execute(
&linkHigh
));
+#if gcdLINK_QUEUE_SIZE
+ if (Command->kernel->stuckDump >= gcvSTUCK_DUMP_ALL_COMMAND)
+ {
+ gckLINKQUEUE_Enqueue(
+ &Command->kernel->hardware->linkQueue,
+ execAddress,
+ execAddress + execBytes,
+ linkLow,
+ linkHigh
+ );
+ }
+#endif
+
#if gcdNONPAGED_MEMORY_CACHEABLE
/* Flush the cache. */
gcmkONERROR(gckOS_CacheClean(
@@ -2644,22 +2965,6 @@ gckCOMMAND_Execute(
));
#endif
-#if gcdLINK_QUEUE_SIZE
- if (Command->kernel->stuckDump >= gcvSTUCK_DUMP_ALL_COMMAND)
- {
- gcuQUEUEDATA data;
-
- gcmkVERIFY_OK(gckOS_GetProcessID(&data.linkData.pid));
-
- data.linkData.start = execAddress;
- data.linkData.end = execAddress + execBytes;
- data.linkData.linkLow = linkLow;
- data.linkData.linkHigh = linkHigh;
-
- gckQUEUE_Enqueue(&Command->kernel->hardware->linkQueue, &data);
- }
-#endif
-
gcmkDUMPCOMMAND(
Command->os,
Command->waitLogical,
@@ -2724,11 +3029,20 @@ OnError:
**
** Nothing.
*/
+#if gcdMULTI_GPU
+gceSTATUS
+gckCOMMAND_Stall(
+ IN gckCOMMAND Command,
+ IN gctBOOL FromPower,
+ IN gceCORE_3D_MASK ChipEnable
+ )
+#else
gceSTATUS
gckCOMMAND_Stall(
IN gckCOMMAND Command,
IN gctBOOL FromPower
)
+#endif
{
#if gcdNULL_DRIVER
/* Do nothing with infinite hardware. */
@@ -2765,7 +3079,11 @@ gckCOMMAND_Stall(
gcmkONERROR(gckEVENT_Signal(eventObject, signal, gcvKERNEL_PIXEL));
/* Submit the event queue. */
+#if gcdMULTI_GPU
+ gcmkONERROR(gckEVENT_Submit(eventObject, gcvTRUE, FromPower, ChipEnable));
+#else
gcmkONERROR(gckEVENT_Submit(eventObject, gcvTRUE, FromPower));
+#endif
#if gcdDUMP_COMMAND
gcmkPRINT("@[kernel.stall]");
@@ -2780,7 +3098,7 @@ gckCOMMAND_Stall(
do
{
/* Wait for the signal. */
- status = gckOS_WaitSignal(os, signal, gcvTRUE, gcdGPU_ADVANCETIMER);
+ status = gckOS_WaitSignal(os, signal, gcdGPU_ADVANCETIMER);
if (status == gcvSTATUS_TIMEOUT)
{
@@ -3022,15 +3340,13 @@ gckCOMMAND_DumpExecutingBuffer(
gckKERNEL kernel = Command->kernel;
gctUINT32 i;
gctUINT32 dumpRear;
- gckQUEUE queue = &kernel->hardware->linkQueue;
+ gckLINKQUEUE queue = &kernel->hardware->linkQueue;
gctSIZE_T bytes;
gckLINKDATA linkData;
- gcuQUEUEDATA * queueData;
gctUINT32 offset;
gctPOINTER entryDump;
gctUINT32 pid;
gctUINT8 processName[24] = {0};
- gctPHYS_ADDR_T cpuPhysical;
gcmkPRINT("**************************\n");
gcmkPRINT("**** COMMAND BUF DUMP ****\n");
@@ -3040,14 +3356,13 @@ gckCOMMAND_DumpExecutingBuffer(
gcmkPRINT(" Executed commit stamp = %lld", *(gctUINT64_PTR)Command->fence->logical);
gcmkVERIFY_OK(gckOS_ReadRegisterEx(os, kernel->core, 0x664, &gpuAddress));
- gcmkVERIFY_OK(gckOS_ReadRegisterEx(os, kernel->core, 0x664, &gpuAddress));
gcmkPRINT("DMA Address 0x%08X, memory around:", gpuAddress);
/* Search and dump memory around DMA address. */
if (kernel->virtualCommandBuffer)
{
- status = gckDEVICE_QueryGPUAddress(kernel->device, kernel, gpuAddress, &buffer);
+ status = gckKERNEL_QueryGPUAddress(kernel, gpuAddress, &buffer);
}
else
{
@@ -3059,9 +3374,9 @@ gckCOMMAND_DumpExecutingBuffer(
if (kernel->virtualCommandBuffer)
{
gcmkVERIFY_OK(gckOS_CreateKernelVirtualMapping(
- os, buffer->virtualBuffer.physical, buffer->virtualBuffer.bytes, &entry, &pageCount));
+ os, buffer->physical, buffer->bytes, &entry, &pageCount));
- offset = gpuAddress - buffer->virtualBuffer.gpuAddress;
+ offset = gpuAddress - buffer->gpuAddress;
entryDump = entry;
@@ -3079,9 +3394,7 @@ gckCOMMAND_DumpExecutingBuffer(
}
else
{
- gcmkVERIFY_OK(gckOS_GPUPhysicalToCPUPhysical(os, gpuAddress, &cpuPhysical));
-
- gcmkVERIFY_OK(gckOS_MapPhysical(os, (gctUINT32) cpuPhysical, 4096, &entry));
+ gcmkVERIFY_OK(gckOS_MapPhysical(os, gpuAddress, 4096, &entry));
/* Align to page start. */
entryDump = (gctPOINTER)((gctUINTPTR_T)entry & ~0xFFF);
@@ -3095,7 +3408,7 @@ gckCOMMAND_DumpExecutingBuffer(
if (kernel->virtualCommandBuffer)
{
gcmkVERIFY_OK(gckOS_DestroyKernelVirtualMapping(
- os, buffer->virtualBuffer.physical, buffer->virtualBuffer.bytes, entry));
+ os, buffer->physical, buffer->bytes, entry));
}
else
{
@@ -3117,9 +3430,7 @@ gckCOMMAND_DumpExecutingBuffer(
for (i = 0; i < dumpRear; i++)
{
- gckQUEUE_GetData(queue, i, &queueData);
-
- linkData = &queueData->linkData;
+ gckLINKQUEUE_GetData(queue, i, &linkData);
/* Get gpu address of this command buffer. */
gpuAddress = linkData->start;
@@ -3134,7 +3445,7 @@ gckCOMMAND_DumpExecutingBuffer(
buffer = gcvNULL;
/* Get the whole buffer. */
- status = gckDEVICE_QueryGPUAddress(kernel->device, kernel, gpuAddress, &buffer);
+ status = gckKERNEL_QueryGPUAddress(kernel, gpuAddress, &buffer);
if (gcmIS_ERROR(status))
{
@@ -3162,10 +3473,10 @@ gckCOMMAND_DumpExecutingBuffer(
else
{
/* Get kernel logical for dump. */
- if (buffer->virtualBuffer.kernelLogical)
+ if (buffer->kernelLogical)
{
/* Get kernel logical directly if it is a context buffer. */
- entry = buffer->virtualBuffer.kernelLogical;
+ entry = buffer->kernelLogical;
gcmkPRINT("Context Buffer: %08X, %08X PID:%d %s",
linkData->linkLow, linkData->linkHigh, linkData->pid, processName);
}
@@ -3174,35 +3485,33 @@ gckCOMMAND_DumpExecutingBuffer(
/* Make it accessiable by kernel if it is a user command buffer. */
gcmkVERIFY_OK(
gckOS_CreateKernelVirtualMapping(os,
- buffer->virtualBuffer.physical,
- buffer->virtualBuffer.bytes,
+ buffer->physical,
+ buffer->bytes,
&entry,
&pageCount));
gcmkPRINT("User Command Buffer: %08X, %08X PID:%d %s",
linkData->linkLow, linkData->linkHigh, linkData->pid, processName);
}
- offset = gpuAddress - buffer->virtualBuffer.gpuAddress;
+ offset = gpuAddress - buffer->gpuAddress;
}
/* Dump from the entry. */
_DumpBuffer((gctUINT8_PTR)entry + offset, gpuAddress, bytes);
/* Release kernel logical address if neccessary. */
- if (buffer && !buffer->virtualBuffer.kernelLogical)
+ if (buffer && !buffer->kernelLogical)
{
gcmkVERIFY_OK(
gckOS_DestroyKernelVirtualMapping(os,
- buffer->virtualBuffer.physical,
- buffer->virtualBuffer.bytes,
+ buffer->physical,
+ buffer->bytes,
entry));
}
}
else
{
- gcmkVERIFY_OK(gckOS_GPUPhysicalToCPUPhysical(os, gpuAddress, &cpuPhysical));
-
- gcmkVERIFY_OK(gckOS_MapPhysical(os, (gctUINT32) cpuPhysical, bytes, &entry));
+ gcmkVERIFY_OK(gckOS_MapPhysical(os, gpuAddress, bytes, &entry));
gcmkPRINT("Command Buffer: %08X, %08X PID:%d %s",
linkData->linkLow, linkData->linkHigh, linkData->pid, processName);
@@ -3242,4 +3551,3 @@ gckCOMMAND_AddressInKernelCommandBuffer(
return gcvSTATUS_NOT_FOUND;
}
-
diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
index 2bf6893c24ea..1c3eaa63a7e5 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
@@ -737,6 +737,9 @@ gckKERNEL_CreateProcessDB(
database->mapUserMemory.bytes = 0;
database->mapUserMemory.maxBytes = 0;
database->mapUserMemory.totalBytes = 0;
+ database->virtualCommandBuffer.bytes = 0;
+ database->virtualCommandBuffer.maxBytes = 0;
+ database->virtualCommandBuffer.totalBytes = 0;
for (i = 0; i < gcmCOUNTOF(database->list); i++)
{
@@ -989,6 +992,10 @@ gckKERNEL_AddProcessDB(
count = &database->mapUserMemory;
break;
+ case gcvDB_COMMAND_BUFFER:
+ count = &database->virtualCommandBuffer;
+ break;
+
default:
count = gcvNULL;
break;
@@ -1139,6 +1146,11 @@ gckKERNEL_RemoveProcessDB(
database->mapUserMemory.freeCount++;
break;
+ case gcvDB_COMMAND_BUFFER:
+ database->virtualCommandBuffer.bytes -= bytes;
+ database->virtualCommandBuffer.freeCount++;
+ break;
+
default:
break;
}
@@ -1644,6 +1656,12 @@ gckKERNEL_QueryProcessDB(
gcmSIZEOF(database->mapUserMemory));
break;
+ case gcvDB_COMMAND_BUFFER:
+ gckOS_MemCopy(&Info->counters,
+ &database->virtualCommandBuffer,
+ gcmSIZEOF(database->virtualCommandBuffer));
+ break;
+
default:
break;
}
@@ -1850,10 +1868,6 @@ gckKERNEL_DumpVidMemUsage(
"MASK",
"SCISSOR",
"HIERARCHICAL_DEPTH",
- "ICACHE",
- "TXDESC",
- "FENCE",
- "TFBHEADER",
};
gcmkHEADER_ARG("Kernel=0x%x ProcessID=%d",
diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c
index 341d72f2085c..971ee9240906 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c
+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c
@@ -524,7 +524,7 @@ static gcfGETITEMSIZE _itemSize[] =
******************************* Printing Functions *****************************
\******************************************************************************/
-#if gcmIS_DEBUG(gcdDEBUG_TRACE) || gcdBUFFERED_OUTPUT
+#if gcdDEBUG || gcdBUFFERED_OUTPUT
static void
_DirectPrint(
gctCONST_STRING Message,
@@ -629,7 +629,7 @@ _PrintBuffer(
IN gctPOINTER PrefixData,
IN gctPOINTER Data,
IN gctUINT Address,
- IN gctSIZE_T DataSize,
+ IN gctUINT DataSize,
IN gceDUMP_BUFFER Type,
IN gctUINT32 DmaAddress
)
@@ -646,8 +646,7 @@ _PrintBuffer(
static const gctINT COLUMN_COUNT = 8;
- gctUINT i, column, address;
- gctSIZE_T count;
+ gctUINT i, count, column, address;
gctUINT32_PTR data;
gctCHAR buffer[768];
gctUINT indent, len;
@@ -715,7 +714,7 @@ _PrintBuffer(
{
gcmkSPRINTF2(
buffer + indent, gcmSIZEOF(buffer) - indent,
- "@[kernel.command %08X %08X\n", Address, (gctUINT32)DataSize
+ "@[kernel.command %08X %08X\n", Address, DataSize
);
gcmkOUTPUT_STRING(buffer);
@@ -1970,7 +1969,7 @@ void
gckOS_DumpBuffer(
IN gckOS Os,
IN gctPOINTER Buffer,
- IN gctSIZE_T Size,
+ IN gctUINT Size,
IN gceDUMP_BUFFER Type,
IN gctBOOL CopyMessage
)
@@ -1989,33 +1988,14 @@ gckOS_DumpBuffer(
if (Type == gceDUMP_BUFFER_FROM_USER)
{
if ((Size > 2)
- && (!strncmp(buffer, "@[", 2) || !strncmp(buffer, "#[", 2))
- )
+ && (buffer[0] == '@')
+ && (buffer[1] == '['))
{
/* Beginning of a user dump. */
gcmkLOCKSECTION(lockHandle);
userLocked = gcvTRUE;
}
/* Else, let it pass through. */
-
- /* Some format check. */
- if ((Size > 2)
- && (buffer[0] == '@' || buffer[0] == '#')
- && (buffer[1] != '[')
- )
- {
- /* No error tolerence in parser, so we stop on error to make noise. */
- for (;;)
- {
- gcmkPRINT(
- "[galcore]: %s(%d): Illegal dump message %s\n",
- __FUNCTION__, __LINE__,
- buffer
- );
-
- gckOS_Delay(Os, 10 * 1000);
- }
- }
}
else
{
@@ -2069,7 +2049,10 @@ gckOS_DumpBuffer(
/* Print/schedule the buffer. */
if (Type == gceDUMP_BUFFER_FROM_USER)
{
- gckOS_CopyPrint(Buffer);
+ gcdOUTPUTSTRING(
+ outputBuffer, outputBuffer->indent,
+ Buffer, 0, gcvNULL
+ );
}
else
{
@@ -2085,20 +2068,15 @@ gckOS_DumpBuffer(
or coming from user and not yet locked. */
if (userLocked)
{
- gctUINT i = 0;
-
- while (i < Size && buffer[i])
+ if ((Size > 4)
+ && (buffer[0] == ']')
+ && (buffer[1] == ' ')
+ && (buffer[2] == '-')
+ && (buffer[3] == '-'))
{
- if (buffer[i] == ']')
- {
- /* End of a user dump. */
- userLocked = gcvFALSE;
- gcmkUNLOCKSECTION(lockHandle);
-
- break;
- }
-
- i++;
+ /* End of a user dump. */
+ gcmkUNLOCKSECTION(lockHandle);
+ userLocked = gcvFALSE;
}
/* Else, let it pass through, don't unlock. */
}
@@ -2605,6 +2583,8 @@ gckOS_DebugStatus2Name(
return "gcvSTATUS_TOO_MANY_ATTRIBUTES";
case gcvSTATUS_TOO_MANY_UNIFORMS:
return "gcvSTATUS_TOO_MANY_UNIFORMS";
+ case gcvSTATUS_TOO_MANY_SAMPLER:
+ return "gcvSTATUS_TOO_MANY_SAMPLER";
case gcvSTATUS_TOO_MANY_VARYINGS:
return "gcvSTATUS_TOO_MANY_VARYINGS";
case gcvSTATUS_UNDECLARED_VARYING:
@@ -2643,24 +2623,13 @@ gckOS_DebugStatus2Name(
return "gcvSTATUS_NOT_SUPPORT_CL";
case gcvSTATUS_NOT_SUPPORT_INTEGER:
return "gcvSTATUS_NOT_SUPPORT_INTEGER";
- case gcvSTATUS_UNIFORM_TYPE_MISMATCH:
- return "gcvSTATUS_UNIFORM_TYPE_MISMATCH";
- case gcvSTATUS_MISSING_PRIMITIVE_TYPE:
- return "gcvSTATUS_MISSING_PRIMITIVE_TYPE";
- case gcvSTATUS_MISSING_OUTPUT_VERTEX_COUNT:
- return "gcvSTATUS_MISSING_OUTPUT_VERTEX_COUNT";
- case gcvSTATUS_NON_INVOCATION_ID_AS_INDEX:
- return "gcvSTATUS_NON_INVOCATION_ID_AS_INDEX";
- case gcvSTATUS_INPUT_ARRAY_SIZE_MISMATCH:
- return "gcvSTATUS_INPUT_ARRAY_SIZE_MISMATCH";
- case gcvSTATUS_OUTPUT_ARRAY_SIZE_MISMATCH:
- return "gcvSTATUS_OUTPUT_ARRAY_SIZE_MISMATCH";
/* Compiler errors. */
case gcvSTATUS_COMPILER_FE_PREPROCESSOR_ERROR:
return "gcvSTATUS_COMPILER_FE_PREPROCESSOR_ERROR";
case gcvSTATUS_COMPILER_FE_PARSER_ERROR:
return "gcvSTATUS_COMPILER_FE_PARSER_ERROR";
+
default:
return "nil";
}
diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
index 03e9cc004c4e..7d28d2be910b 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
@@ -57,6 +57,7 @@
#include "gc_hal_kernel_buffer.h"
#ifdef __QNXNTO__
+#include <atomic.h>
#include "gc_hal_kernel_qnx.h"
#endif
@@ -69,7 +70,7 @@
********************************* Support Code *********************************
\******************************************************************************/
-static gcmINLINE gceSTATUS
+static gceSTATUS
gckEVENT_AllocateQueue(
IN gckEVENT Event,
OUT gcsEVENT_QUEUE_PTR * Queue
@@ -297,57 +298,76 @@ __RemoveRecordFromProcessDB(
gcmkHEADER_ARG("Event=0x%x Record=0x%x", Event, Record);
gcmkVERIFY_ARGUMENT(Record != gcvNULL);
- switch (Record->info.command)
+ while (Record != gcvNULL)
{
- case gcvHAL_FREE_NON_PAGED_MEMORY:
- gcmkVERIFY_OK(gckKERNEL_RemoveProcessDB(
- Event->kernel,
- Record->processID,
- gcvDB_NON_PAGED,
- gcmUINT64_TO_PTR(Record->info.u.FreeNonPagedMemory.logical)));
- break;
+ if (Record->info.command == gcvHAL_SIGNAL)
+ {
+ /* TODO: Find a better place to bind signal to hardware.*/
+ gcmkVERIFY_OK(gckOS_SignalSetHardware(Event->os,
+ gcmUINT64_TO_PTR(Record->info.u.Signal.signal),
+ Event->kernel->hardware));
+ }
- case gcvHAL_FREE_CONTIGUOUS_MEMORY:
- gcmkVERIFY_OK(gckKERNEL_RemoveProcessDB(
- Event->kernel,
- Record->processID,
- gcvDB_CONTIGUOUS,
- gcmUINT64_TO_PTR(Record->info.u.FreeContiguousMemory.logical)));
- break;
+ if (Record->fromKernel)
+ {
+ /* No need to check db if event is from kernel. */
+ Record = Record->next;
+ continue;
+ }
- case gcvHAL_UNLOCK_VIDEO_MEMORY:
- gcmkVERIFY_OK(gckKERNEL_RemoveProcessDB(
- Event->kernel,
- Record->processID,
- gcvDB_VIDEO_MEMORY_LOCKED,
- gcmUINT64_TO_PTR(Record->info.u.UnlockVideoMemory.node)));
- break;
+ switch (Record->info.command)
+ {
+ case gcvHAL_FREE_NON_PAGED_MEMORY:
+ gcmkVERIFY_OK(gckKERNEL_RemoveProcessDB(
+ Event->kernel,
+ Record->processID,
+ gcvDB_NON_PAGED,
+ gcmUINT64_TO_PTR(Record->info.u.FreeNonPagedMemory.logical)));
+ break;
- case gcvHAL_UNMAP_USER_MEMORY:
- gcmkVERIFY_OK(gckKERNEL_RemoveProcessDB(
- Event->kernel,
- Record->processID,
- gcvDB_MAP_USER_MEMORY,
- gcmINT2PTR(Record->info.u.UnmapUserMemory.info)));
- break;
+ case gcvHAL_FREE_CONTIGUOUS_MEMORY:
+ gcmkVERIFY_OK(gckKERNEL_RemoveProcessDB(
+ Event->kernel,
+ Record->processID,
+ gcvDB_CONTIGUOUS,
+ gcmUINT64_TO_PTR(Record->info.u.FreeContiguousMemory.logical)));
+ break;
- case gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER:
- gcmkVERIFY_OK(gckKERNEL_RemoveProcessDB(
- Event->kernel,
- Record->processID,
- gcvDB_COMMAND_BUFFER,
- gcmUINT64_TO_PTR(Record->info.u.FreeVirtualCommandBuffer.logical)));
- break;
+ case gcvHAL_UNLOCK_VIDEO_MEMORY:
+ gcmkVERIFY_OK(gckKERNEL_RemoveProcessDB(
+ Event->kernel,
+ Record->processID,
+ gcvDB_VIDEO_MEMORY_LOCKED,
+ gcmUINT64_TO_PTR(Record->info.u.UnlockVideoMemory.node)));
+ break;
- default:
- break;
- }
+ case gcvHAL_UNMAP_USER_MEMORY:
+ gcmkVERIFY_OK(gckKERNEL_RemoveProcessDB(
+ Event->kernel,
+ Record->processID,
+ gcvDB_MAP_USER_MEMORY,
+ gcmINT2PTR(Record->info.u.UnmapUserMemory.info)));
+ break;
+
+ case gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER:
+ gcmkVERIFY_OK(gckKERNEL_RemoveProcessDB(
+ Event->kernel,
+ Record->processID,
+ gcvDB_COMMAND_BUFFER,
+ gcmUINT64_TO_PTR(Record->info.u.FreeVirtualCommandBuffer.logical)));
+ break;
+
+ default:
+ break;
+ }
+ Record = Record->next;
+ }
gcmkFOOTER_NO();
return gcvSTATUS_OK;
}
-static gceSTATUS
+gceSTATUS
_ReleaseVideoMemoryHandle(
IN gckKERNEL Kernel,
IN OUT gcsEVENT_PTR Record,
@@ -418,21 +438,6 @@ _QueryFlush(
case gcvSURF_TEXTURE:
flush |= gcvFLUSH_TEXTURE;
break;
- case gcvSURF_ICACHE:
- flush |= gcvFLUSH_ICACHE;
- break;
- case gcvSURF_TXDESC:
- flush |= gcvFLUSH_TXDESC;
- break;
- case gcvSURF_FENCE:
- flush |= gcvFLUSH_FENCE;
- break;
- case gcvSURF_VERTEX:
- flush |= gcvFLUSH_VERTEX;
- break;
- case gcvSURF_TFBHEADER:
- flush |= gcvFLUSH_TFBHEADER;
- break;
case gcvSURF_TYPE_UNKNOWN:
gcmkASSERT(0);
break;
@@ -463,7 +468,11 @@ _SubmitTimerFunction(
)
{
gckEVENT event = (gckEVENT)Data;
+#if gcdMULTI_GPU
+ gcmkVERIFY_OK(gckEVENT_Submit(event, gcvTRUE, gcvFALSE, gcvCORE_3D_ALL_MASK));
+#else
gcmkVERIFY_OK(gckEVENT_Submit(event, gcvTRUE, gcvFALSE));
+#endif
}
/******************************************************************************\
@@ -548,10 +557,27 @@ gckEVENT_Construct(
eventObj->freeList = &eventObj->repoList[i];
}
- eventObj->freeQueueCount = gcmCOUNTOF(eventObj->queues);
+ /* Construct the atom. */
+ gcmkONERROR(gckOS_AtomConstruct(os, &eventObj->freeAtom));
+ gcmkONERROR(gckOS_AtomSet(os,
+ eventObj->freeAtom,
+ gcmCOUNTOF(eventObj->queues)));
+#if gcdSMP
gcmkONERROR(gckOS_AtomConstruct(os, &eventObj->pending));
+#if gcdMULTI_GPU
+ for (i = 0; i < gcdMULTI_GPU; i++)
+ {
+ gcmkONERROR(gckOS_AtomConstruct(os, &eventObj->pending3D[i]));
+ gcmkONERROR(gckOS_AtomConstruct(os, &eventObj->pending3DMask[i]));
+ }
+
+ gcmkONERROR(gckOS_AtomConstruct(os, &eventObj->pendingMask));
+#endif
+
+#endif
+
gcmkVERIFY_OK(gckOS_CreateTimer(os,
_SubmitTimerFunction,
(gctPOINTER)eventObj,
@@ -596,11 +622,33 @@ OnError:
gcmkVERIFY_OK(gcmkOS_SAFE_FREE(os, record));
}
+ if (eventObj->freeAtom != gcvNULL)
+ {
+ gcmkVERIFY_OK(gckOS_AtomDestroy(os, eventObj->freeAtom));
+ }
+
+#if gcdSMP
if (eventObj->pending != gcvNULL)
{
gcmkVERIFY_OK(gckOS_AtomDestroy(os, eventObj->pending));
}
+#if gcdMULTI_GPU
+ for (i = 0; i < gcdMULTI_GPU; i++)
+ {
+ if (eventObj->pending3D[i] != gcvNULL)
+ {
+ gcmkVERIFY_OK(gckOS_AtomDestroy(os, eventObj->pending3D[i]));
+ }
+
+ if (eventObj->pending3DMask[i] != gcvNULL)
+ {
+ gcmkVERIFY_OK(gckOS_AtomDestroy(os, eventObj->pending3DMask[i]));
+ }
+ }
+#endif
+#endif
+
#if gcdINTERRUPT_STATISTIC
if (eventObj->interruptCount)
{
@@ -704,8 +752,24 @@ gckEVENT_Destroy(
/* Delete the list mutex. */
gcmkVERIFY_OK(gckOS_DeleteMutex(Event->os, Event->eventListMutex));
+ /* Delete the atom. */
+ gcmkVERIFY_OK(gckOS_AtomDestroy(Event->os, Event->freeAtom));
+
+#if gcdSMP
gcmkVERIFY_OK(gckOS_AtomDestroy(Event->os, Event->pending));
+#if gcdMULTI_GPU
+ {
+ gctINT i;
+ for (i = 0; i < gcdMULTI_GPU; i++)
+ {
+ gcmkVERIFY_OK(gckOS_AtomDestroy(Event->os, Event->pending3D[i]));
+ gcmkVERIFY_OK(gckOS_AtomDestroy(Event->os, Event->pending3DMask[i]));
+ }
+ }
+#endif
+#endif
+
#if gcdINTERRUPT_STATISTIC
gcmkVERIFY_OK(gckOS_AtomDestroy(Event->os, Event->interruptCount));
#endif
@@ -746,6 +810,16 @@ gckEVENT_Destroy(
*/
#define gcdINVALID_EVENT_PTR ((gcsEVENT_PTR)gcvMAXUINTPTR_T)
+#if gcdMULTI_GPU
+gceSTATUS
+gckEVENT_GetEvent(
+ IN gckEVENT Event,
+ IN gctBOOL Wait,
+ OUT gctUINT8 * EventID,
+ IN gceKERNEL_WHERE Source,
+ IN gceCORE_3D_MASK ChipEnable
+ )
+#else
gceSTATUS
gckEVENT_GetEvent(
IN gckEVENT Event,
@@ -753,11 +827,15 @@ gckEVENT_GetEvent(
OUT gctUINT8 * EventID,
IN gceKERNEL_WHERE Source
)
+#endif
{
gctINT i, id;
gceSTATUS status;
gctBOOL acquired = gcvFALSE;
gctINT32 free;
+#if gcdMULTI_GPU
+ gctINT j;
+#endif
gcmkHEADER_ARG("Event=0x%x Source=%d", Event, Source);
@@ -773,12 +851,8 @@ gckEVENT_GetEvent(
id = Event->lastID;
for (i = 0; i < gcmCOUNTOF(Event->queues); ++i)
{
- gctINT nextID = id + 1;
-
- if (nextID == gcmCOUNTOF(Event->queues))
- {
- nextID = 0;
- }
+ gctINT nextID = gckMATH_ModuloInt((id + 1),
+ gcmCOUNTOF(Event->queues));
if (Event->queues[id].head == gcvNULL)
{
@@ -791,12 +865,33 @@ gckEVENT_GetEvent(
Event->queues[id].stamp = ++(Event->stamp);
Event->queues[id].source = Source;
- /* Decrease the number of free events. */
- free = --Event->freeQueueCount;
+#if gcdMULTI_GPU
+ Event->queues[id].chipEnable = ChipEnable;
- /* Make compiler happy. */
- free = free;
+ if (ChipEnable == gcvCORE_3D_ALL_MASK)
+ {
+ gckOS_AtomSetMask(Event->pendingMask, (1 << id));
+ for (j = 0; j < gcdMULTI_GPU; j++)
+ {
+ gckOS_AtomSetMask(Event->pending3DMask[j], (1 << id));
+ }
+ }
+ else
+ {
+ for (j = 0; j < gcdMULTI_GPU; j++)
+ {
+ if (ChipEnable & (1 << j))
+ {
+ gckOS_AtomSetMask(Event->pending3DMask[j], (1 << id));
+ }
+ }
+ }
+#endif
+
+ gcmkONERROR(gckOS_AtomDecrement(Event->os,
+ Event->freeAtom,
+ &free));
#if gcdDYNAMIC_SPEED
if (free <= gcdDYNAMIC_EVENT_THRESHOLD)
{
@@ -879,7 +974,7 @@ OnError:
** gcsEVENT_PTR * Record
** Allocated event record.
*/
-static gcmINLINE gceSTATUS
+gceSTATUS
gckEVENT_AllocateRecord(
IN gckEVENT Event,
IN gctBOOL AllocateAllowed,
@@ -1034,11 +1129,11 @@ gckEVENT_AddList(
/* Get process ID. */
gcmkONERROR(gckOS_GetProcessID(&record->processID));
+ gcmkONERROR(__RemoveRecordFromProcessDB(Event, record));
+
+ /* Handle is belonged to current process, it must be released now. */
if (FromKernel == gcvFALSE)
{
- gcmkONERROR(__RemoveRecordFromProcessDB(Event, record));
-
- /* Handle is belonged to current process, it must be released now. */
status = _ReleaseVideoMemoryHandle(Event->kernel, record, Interface);
if (gcmIS_ERROR(status))
@@ -1053,43 +1148,6 @@ gckEVENT_AddList(
record->kernel = Event->kernel;
#endif
- /* Unmap user space logical address.
- * Linux kernel does not support unmap the memory of other process any more since 3.5.
- * Let's unmap memory of self process before submit the event to gpu.
- * */
- switch(Interface->command)
- {
- case gcvHAL_FREE_NON_PAGED_MEMORY:
- gcmkONERROR(gckOS_UnmapUserLogical(
- Event->os,
- gcmNAME_TO_PTR(Interface->u.FreeNonPagedMemory.physical),
- (gctSIZE_T) Interface->u.FreeNonPagedMemory.bytes,
- gcmUINT64_TO_PTR(Interface->u.FreeNonPagedMemory.logical)));
- break;
- case gcvHAL_FREE_CONTIGUOUS_MEMORY:
- gcmkONERROR(gckOS_UnmapUserLogical(
- Event->os,
- gcmNAME_TO_PTR(Interface->u.FreeContiguousMemory.physical),
- (gctSIZE_T) Interface->u.FreeContiguousMemory.bytes,
- gcmUINT64_TO_PTR(Interface->u.FreeContiguousMemory.logical)));
- break;
-
- case gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER:
- buffer = (gckVIRTUAL_COMMAND_BUFFER_PTR)gcmNAME_TO_PTR(Interface->u.FreeVirtualCommandBuffer.physical);
- if (buffer != gcvNULL && buffer->virtualBuffer.userLogical)
- {
- gcmkONERROR(gckOS_DestroyUserVirtualMapping(
- Event->os,
- buffer->virtualBuffer.physical,
- (gctSIZE_T) Interface->u.FreeVirtualCommandBuffer.bytes,
- gcmUINT64_TO_PTR(Interface->u.FreeVirtualCommandBuffer.logical)));
- }
- break;
-
- default:
- break;
- }
-
/* Acquire the mutex. */
gcmkONERROR(gckOS_AcquireMutex(Event->os, Event->eventListMutex, gcvINFINITE));
acquired = gcvTRUE;
@@ -1134,6 +1192,43 @@ gckEVENT_AddList(
queue->tail = record;
}
+ /* Unmap user space logical address.
+ * Linux kernel does not support unmap the memory of other process any more since 3.5.
+ * Let's unmap memory of self process before submit the event to gpu.
+ * */
+ switch(Interface->command)
+ {
+ case gcvHAL_FREE_NON_PAGED_MEMORY:
+ gcmkONERROR(gckOS_UnmapUserLogical(
+ Event->os,
+ gcmNAME_TO_PTR(Interface->u.FreeNonPagedMemory.physical),
+ (gctSIZE_T) Interface->u.FreeNonPagedMemory.bytes,
+ gcmUINT64_TO_PTR(Interface->u.FreeNonPagedMemory.logical)));
+ break;
+ case gcvHAL_FREE_CONTIGUOUS_MEMORY:
+ gcmkONERROR(gckOS_UnmapUserLogical(
+ Event->os,
+ gcmNAME_TO_PTR(Interface->u.FreeContiguousMemory.physical),
+ (gctSIZE_T) Interface->u.FreeContiguousMemory.bytes,
+ gcmUINT64_TO_PTR(Interface->u.FreeContiguousMemory.logical)));
+ break;
+
+ case gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER:
+ buffer = (gckVIRTUAL_COMMAND_BUFFER_PTR)gcmNAME_TO_PTR(Interface->u.FreeVirtualCommandBuffer.physical);
+ if (buffer->userLogical)
+ {
+ gcmkONERROR(gckOS_DestroyUserVirtualMapping(
+ Event->os,
+ buffer->physical,
+ (gctSIZE_T) Interface->u.FreeVirtualCommandBuffer.bytes,
+ gcmUINT64_TO_PTR(Interface->u.FreeVirtualCommandBuffer.logical)));
+ }
+ break;
+
+ default:
+ break;
+ }
+
/* Release the mutex. */
gcmkONERROR(gckOS_ReleaseMutex(Event->os, Event->eventListMutex));
@@ -1477,8 +1572,7 @@ OnError:
gceSTATUS
gckEVENT_CommitDone(
IN gckEVENT Event,
- IN gceKERNEL_WHERE FromWhere,
- IN gckCONTEXT Context
+ IN gceKERNEL_WHERE FromWhere
)
{
gceSTATUS status;
@@ -1491,8 +1585,6 @@ gckEVENT_CommitDone(
iface.command = gcvHAL_COMMIT_DONE;
- iface.u.CommitDone.context = gcmPTR_TO_UINT64(Context);
-
/* Append it to the queue. */
gcmkONERROR(gckEVENT_AddList(Event, &iface, FromWhere, gcvFALSE, gcvTRUE));
@@ -1539,135 +1631,6 @@ OnError:
}
#endif
-gceSTATUS
-gckEVENT_SubmitAsync(
- IN gckEVENT Event,
- IN gctBOOL Wait,
- IN gctBOOL FromPower
- )
-{
- gceSTATUS status;
- gctUINT8 id = 0xFF;
- gcsEVENT_QUEUE_PTR queue;
- gctBOOL acquired = gcvFALSE;
- gctBOOL commitEntered = gcvFALSE;
- gctUINT32 start, end;
- gctUINT8_PTR startLogical;
- gctUINT32 eventBytes;
-
- gckHARDWARE hardware;
- gckASYNC_COMMAND asyncCommand;
-
- gcmkHEADER_ARG("Event=0x%x Wait=%d", Event, Wait);
-
- /* Get gckCOMMAND object. */
- hardware = Event->kernel->hardware;
- asyncCommand = Event->asyncCommand;
-
- gcmkVERIFY_OBJECT(hardware, gcvOBJ_HARDWARE);
-
- /* Are there event queues? */
- if (Event->queueHead != gcvNULL)
- {
- /* Acquire the command queue. */
- gcmkONERROR(gckASYNC_COMMAND_EnterCommit(asyncCommand));
- commitEntered = gcvTRUE;
-
- /* Process all queues. */
- while (Event->queueHead != gcvNULL)
- {
- /* Acquire the list mutex. */
- gcmkONERROR(gckOS_AcquireMutex(Event->os,
- Event->eventListMutex,
- gcvINFINITE));
- acquired = gcvTRUE;
-
- /* Get the current queue. */
- queue = Event->queueHead;
-
- /* Allocate an event ID. */
- gcmkONERROR(gckEVENT_GetEvent(Event, Wait, &id, queue->source));
-
- /* Copy event list to event ID queue. */
- Event->queues[id].head = queue->head;
-
- /* Remove the top queue from the list. */
- if (Event->queueHead == Event->queueTail)
- {
- Event->queueHead = gcvNULL;
- Event->queueTail = gcvNULL;
- }
- else
- {
- Event->queueHead = Event->queueHead->next;
- }
-
- /* Free the queue. */
- gcmkONERROR(gckEVENT_FreeQueue(Event, queue));
-
- /* Release the list mutex. */
- gcmkONERROR(gckOS_ReleaseMutex(Event->os, Event->eventListMutex));
- acquired = gcvFALSE;
-
- gcmkONERROR(gckHARDWARE_Event(Event->kernel->hardware, gcvNULL, id, gcvKERNEL_BLT, &eventBytes));
-
- /* Get command sequence. */
- start = hardware->functions[gcvHARDWARE_FUNCTION_BLT_EVENT].address + id * eventBytes;
- end = start + 24;
-
- startLogical = hardware->functions[gcvHARDWARE_FUNCTION_BLT_EVENT].logical + id * eventBytes;
-
- gcmkDUMPCOMMAND(
- Event->os,
- startLogical,
- end - start,
- gceDUMP_BUFFER_KERNEL,
- gcvFALSE
- );
-
- gcmkONERROR(gckASYNC_COMMAND_Execute(asyncCommand, start, end));
- }
-
- /* Release the command queue. */
- gcmkONERROR(gckASYNC_COMMAND_ExitCommit(asyncCommand));
- }
-
- /* Success. */
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- if (acquired)
- {
- /* Need to unroll the mutex acquire. */
- gcmkVERIFY_OK(gckOS_ReleaseMutex(Event->os, Event->eventListMutex));
- }
-
- if (commitEntered)
- {
- /* Release the command queue mutex. */
- gcmkVERIFY_OK(gckASYNC_COMMAND_ExitCommit(asyncCommand));
- }
-
- if (id != 0xFF)
- {
- /* Need to unroll the event allocation. */
- Event->queues[id].head = gcvNULL;
- }
-
- if (status == gcvSTATUS_GPU_NOT_RESPONDING)
- {
- /* Broadcast GPU stuck. */
- status = gckOS_Broadcast(Event->os,
- Event->kernel->hardware,
- gcvBROADCAST_GPU_STUCK);
- }
-
- /* Return the status. */
- gcmkFOOTER();
- return status;
-}
-
/*******************************************************************************
**
** gckEVENT_Submit
@@ -1693,12 +1656,22 @@ OnError:
**
** Nothing.
*/
+#if gcdMULTI_GPU
+gceSTATUS
+gckEVENT_Submit(
+ IN gckEVENT Event,
+ IN gctBOOL Wait,
+ IN gctBOOL FromPower,
+ IN gceCORE_3D_MASK ChipEnable
+ )
+#else
gceSTATUS
gckEVENT_Submit(
IN gckEVENT Event,
IN gctBOOL Wait,
IN gctBOOL FromPower
)
+#endif
{
gceSTATUS status;
gctUINT8 id = 0xFF;
@@ -1709,8 +1682,10 @@ gckEVENT_Submit(
#if !gcdNULL_DRIVER
gctUINT32 bytes;
gctPOINTER buffer;
- gctUINT32 executeBytes;
- gctUINT32 flushBytes;
+#endif
+
+#if gcdMULTI_GPU
+ gctSIZE_T chipEnableBytes;
#endif
#if gcdINTERRUPT_STATISTIC
@@ -1721,6 +1696,8 @@ gckEVENT_Submit(
gctPOINTER reservedBuffer;
#endif
+ gctUINT32 flushBytes;
+ gctUINT32 executeBytes;
gckHARDWARE hardware;
gceKERNEL_FLUSH flush = gcvFALSE;
@@ -1734,15 +1711,6 @@ gckEVENT_Submit(
gcmkVERIFY_OBJECT(hardware, gcvOBJ_HARDWARE);
- if (Event->asyncCommand)
- {
- /* Call async submit path. */
- gcmkONERROR(gckEVENT_SubmitAsync(Event, Wait, FromPower));
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
- }
-
gckOS_GetTicks(&Event->lastCommitStamp);
/* Are there event queues? */
@@ -1773,7 +1741,11 @@ gckEVENT_Submit(
queue = Event->queueHead;
/* Allocate an event ID. */
+#if gcdMULTI_GPU
+ gcmkONERROR(gckEVENT_GetEvent(Event, Wait, &id, queue->source, ChipEnable));
+#else
gcmkONERROR(gckEVENT_GetEvent(Event, Wait, &id, queue->source));
+#endif
/* Copy event list to event ID queue. */
Event->queues[id].head = queue->head;
@@ -1835,6 +1807,17 @@ gckEVENT_Submit(
bytes += flushBytes;
+#if gcdMULTI_GPU
+ gcmkONERROR(gckHARDWARE_ChipEnable(
+ hardware,
+ gcvNULL,
+ 0,
+ &chipEnableBytes
+ ));
+
+ bytes += chipEnableBytes * 2;
+#endif
+
/* Total bytes need to execute. */
executeBytes = bytes;
@@ -1844,6 +1827,17 @@ gckEVENT_Submit(
reservedBuffer = buffer;
#endif
+#if gcdMULTI_GPU
+ gcmkONERROR(gckHARDWARE_ChipEnable(
+ hardware,
+ buffer,
+ ChipEnable,
+ &chipEnableBytes
+ ));
+
+ buffer = (gctUINT8_PTR)buffer + chipEnableBytes;
+#endif
+
/* Set the flush in the command queue. */
gcmkONERROR(gckHARDWARE_Flush(
hardware,
@@ -1867,6 +1861,15 @@ gckEVENT_Submit(
/* Advance to next command. */
buffer = (gctUINT8_PTR)buffer + bytes;
+#if gcdMULTI_GPU
+ gcmkONERROR(gckHARDWARE_ChipEnable(
+ hardware,
+ buffer,
+ gcvCORE_3D_ALL_MASK,
+ &chipEnableBytes
+ ));
+#endif
+
#if gcdINTERRUPT_STATISTIC
gcmkVERIFY_OK(gckOS_AtomIncrement(
Event->os,
@@ -1950,11 +1953,20 @@ OnError:
**
** Nothing.
*/
+#if gcdMULTI_GPU
+gceSTATUS
+gckEVENT_Commit(
+ IN gckEVENT Event,
+ IN gcsQUEUE_PTR Queue,
+ IN gceCORE_3D_MASK ChipEnable
+ )
+#else
gceSTATUS
gckEVENT_Commit(
IN gckEVENT Event,
IN gcsQUEUE_PTR Queue
)
+#endif
{
gceSTATUS status;
gcsQUEUE_PTR record = gcvNULL, next;
@@ -2023,7 +2035,11 @@ gckEVENT_Commit(
}
/* Submit the event list. */
+#if gcdMULTI_GPU
+ gcmkONERROR(gckEVENT_Submit(Event, gcvTRUE, gcvFALSE, ChipEnable));
+#else
gcmkONERROR(gckEVENT_Submit(Event, gcvTRUE, gcvFALSE));
+#endif
/* Success */
gcmkFOOTER_NO();
@@ -2071,7 +2087,7 @@ gckEVENT_Compose(
gceSTATUS status;
gcsEVENT_PTR headRecord;
gcsEVENT_PTR tailRecord;
- gcsEVENT_PTR tempRecord = gcvNULL;
+ gcsEVENT_PTR tempRecord;
gctUINT8 id = 0xFF;
gctUINT32 processID;
@@ -2082,7 +2098,11 @@ gckEVENT_Compose(
gcmkVERIFY_ARGUMENT(Info != gcvNULL);
/* Allocate an event ID. */
+#if gcdMULTI_GPU
+ gcmkONERROR(gckEVENT_GetEvent(Event, gcvTRUE, &id, gcvKERNEL_PIXEL, gcvCORE_3D_ALL_MASK));
+#else
gcmkONERROR(gckEVENT_GetEvent(Event, gcvTRUE, &id, gcvKERNEL_PIXEL));
+#endif
/* Get process ID. */
gcmkONERROR(gckOS_GetProcessID(&processID));
@@ -2185,9 +2205,17 @@ OnError:
gceSTATUS
gckEVENT_Interrupt(
IN gckEVENT Event,
+#if gcdMULTI_GPU
+ IN gctUINT CoreId,
+#endif
IN gctUINT32 Data
)
{
+#if gcdMULTI_GPU
+#if defined(WIN32)
+ gctUINT32 i;
+#endif
+#endif
gcmkHEADER_ARG("Event=0x%x Data=0x%x", Event, Data);
/* Verify the arguments. */
@@ -2195,13 +2223,18 @@ gckEVENT_Interrupt(
if (Data & 0x20000000)
{
- gctUINT32 resume;
- gctUINT32 bytes;
+ gckENTRYDATA data;
gctUINT32 idle;
- gctUINT32 pageSize = Event->kernel->command->pageSize;
Data &= ~0x20000000;
+#if gcdMULTI_GPU
+ if (CoreId == gcvCORE_3D_0_ID)
+#endif
{
+ /* Get first entry information. */
+ gcmkVERIFY_OK(
+ gckENTRYQUEUE_Dequeue(&Event->kernel->command->queue, &data));
+
/* Make sure FE is idle. */
do
{
@@ -2213,41 +2246,80 @@ gckEVENT_Interrupt(
}
while (idle != 0x7FFFFFFF);
- gcmkVERIFY_OK(gckOS_ReadRegisterEx(
- Event->os,
- Event->kernel->core,
- 0x664,
- &resume));
-
- gcmkVERIFY_OK(gckOS_ReadRegisterEx(
+#if gcdMULTI_GPU
+ /* Make sure FE of another GPU is idle. */
+ do
+ {
+ gcmkVERIFY_OK(gckOS_ReadRegisterByCoreId(
Event->os,
Event->kernel->core,
- 0x664,
- &resume));
-
- gcmkVERIFY_OK(gckHARDWARE_WaitLink(
- Event->kernel->hardware,
- gcvNULL,
- ~0U,
- resume & (pageSize - 1),
- &bytes,
- gcvNULL,
- gcvNULL
- ));
+ gcvCORE_3D_1_ID,
+ 0x4,
+ &idle));
+ }
+ while (idle != 0x7FFFFFFF);
+#endif
/* Start Command Parser. */
gcmkVERIFY_OK(gckHARDWARE_Execute(
Event->kernel->hardware,
- resume,
- bytes
+ data->physical,
+ data->bytes
));
}
}
/* Combine current interrupt status with pending flags. */
- gckOS_AtomSetMask(Event->pending, Data);
+#if gcdSMP
+#if gcdMULTI_GPU
+ if (Event->kernel->core == gcvCORE_MAJOR)
+ {
+ gckOS_AtomSetMask(Event->pending3D[CoreId], Data);
+ }
+ else
+#endif
+ {
+ gckOS_AtomSetMask(Event->pending, Data);
+ }
+#elif defined(__QNXNTO__)
+#if gcdMULTI_GPU
+ if (Event->kernel->core == gcvCORE_MAJOR)
+ {
+ atomic_set(&Event->pending3D[CoreId], Data);
+ }
+ else
+#endif
+ {
+ atomic_set(&Event->pending, Data);
+ }
+#else
+#if gcdMULTI_GPU
+#if defined(WIN32)
+ if (Event->kernel->core == gcvCORE_MAJOR)
+ {
+ for (i = 0; i < gcdMULTI_GPU; i++)
+ {
+ Event->pending3D[i] |= Data;
+ }
+ }
+ else
+#else
+ if (Event->kernel->core == gcvCORE_MAJOR)
+ {
+ Event->pending3D[CoreId] |= Data;
+ }
+ else
+#endif
+#endif
+ {
+ Event->pending |= Data;
+ }
+#endif
#if gcdINTERRUPT_STATISTIC
+#if gcdMULTI_GPU
+ if (CoreId == gcvCORE_3D_0_ID)
+#endif
{
gctINT j = 0;
gctINT32 oldValue;
@@ -2295,18 +2367,28 @@ gckEVENT_Notify(
gcsEVENT_QUEUE * queue;
gctUINT mask = 0;
gctBOOL acquired = gcvFALSE;
+ gctPOINTER info;
gctSIGNAL signal;
gctUINT pending = 0;
gckKERNEL kernel = Event->kernel;
-
+#if gcdMULTI_GPU
+ gceCORE core = Event->kernel->core;
+ gctUINT32 busy;
+ gctUINT32 oldValue;
+ gctUINT pendingMask;
+#endif
+#if !gcdSMP
+ gctBOOL suspended = gcvFALSE;
+#endif
#if gcmIS_DEBUG(gcdDEBUG_TRACE)
gctINT eventNumber = 0;
#endif
+ gctINT32 free;
#if gcdSECURE_USER
gcskSECURE_CACHE_PTR cache;
- gcuVIDMEM_NODE_PTR node;
#endif
gckVIDMEM_NODE nodeObject;
+ gcuVIDMEM_NODE_PTR node;
gcmkHEADER_ARG("Event=0x%x IDs=0x%x", Event, IDs);
@@ -2330,10 +2412,23 @@ gckEVENT_Notify(
}
);
+#if gcdMULTI_GPU
+ /* Set busy flag. */
+ gckOS_AtomicExchange(Event->os, &Event->busy, 1, &busy);
+ if (busy)
+ {
+ /* Another thread is already busy - abort. */
+ goto OnSuccess;
+ }
+#endif
for (;;)
{
gcsEVENT_PTR record;
+#if gcdMULTI_GPU
+ gctUINT32 pend[gcdMULTI_GPU];
+ gctUINT32 pendMask[gcdMULTI_GPU];
+#endif
/* Grab the mutex queue. */
gcmkONERROR(gckOS_AcquireMutex(Event->os,
@@ -2341,7 +2436,79 @@ gckEVENT_Notify(
gcvINFINITE));
acquired = gcvTRUE;
- gckOS_AtomGet(Event->os, Event->pending, (gctINT32_PTR)&pending);
+#if gcdSMP
+#if gcdMULTI_GPU
+ if (core == gcvCORE_MAJOR)
+ {
+ /* Get current interrupts. */
+ for (i = 0; i < gcdMULTI_GPU; i++)
+ {
+ gckOS_AtomGet(Event->os, Event->pending3D[i], (gctINT32_PTR)&pend[i]);
+ gckOS_AtomGet(Event->os, Event->pending3DMask[i], (gctINT32_PTR)&pendMask[i]);
+ }
+
+ gckOS_AtomGet(Event->os, Event->pendingMask, (gctINT32_PTR)&pendingMask);
+ }
+ else
+#endif
+ {
+ gckOS_AtomGet(Event->os, Event->pending, (gctINT32_PTR)&pending);
+ }
+#else
+ /* Suspend interrupts. */
+ gcmkONERROR(gckOS_SuspendInterruptEx(Event->os, Event->kernel->core));
+ suspended = gcvTRUE;
+
+#if gcdMULTI_GPU
+ if (core == gcvCORE_MAJOR)
+ {
+ for (i = 0; i < gcdMULTI_GPU; i++)
+ {
+ /* Get current interrupts. */
+ pend[i] = Event->pending3D[i];
+ pendMask[i] = Event->pending3DMask[i];
+ }
+
+ pendingMask = Event->pendingMask;
+ }
+ else
+#endif
+ {
+ pending = Event->pending;
+ }
+
+ /* Resume interrupts. */
+ gcmkONERROR(gckOS_ResumeInterruptEx(Event->os, Event->kernel->core));
+ suspended = gcvFALSE;
+#endif
+
+#if gcdMULTI_GPU
+ if (core == gcvCORE_MAJOR)
+ {
+ for (i = 0; i < gcdMULTI_GPU; i++)
+ {
+ gctUINT32 bad_pend = (pend[i] & ~pendMask[i]);
+
+ if (bad_pend != 0)
+ {
+ gcmkTRACE_ZONE_N(
+ gcvLEVEL_ERROR, gcvZONE_EVENT,
+ gcmSIZEOF(bad_pend) + gcmSIZEOF(i),
+ "Interrupts 0x%x are not unexpected for Core%d.",
+ bad_pend, i
+ );
+
+ gckOS_AtomClearMask(Event->pending3D[i], bad_pend);
+
+ pend[i] &= pendMask[i];
+ }
+ }
+
+ pending = (pend[0] & pend[1] & pendingMask) /* Check combined events on both GPUs */
+ | (pend[0] & ~pendingMask) /* Check individual events on GPU 0 */
+ | (pend[1] & ~pendingMask); /* Check individual events on GPU 1 */
+ }
+#endif
if (pending == 0)
{
@@ -2355,18 +2522,16 @@ gckEVENT_Notify(
if (pending & 0x80000000)
{
- gcmkPRINT("AXI BUS ERROR");
+ gcmkPRINT("[galcore]: AXI BUS ERROR");
gckHARDWARE_DumpGPUState(Event->kernel->hardware);
pending &= 0x7FFFFFFF;
}
- if ((pending & 0x40000000) && Event->kernel->hardware->mmuVersion)
+ if (pending & 0x40000000)
{
-#if gcdUSE_MMU_EXCEPTION
gckHARDWARE_DumpMMUException(Event->kernel->hardware);
gckHARDWARE_DumpGPUState(Event->kernel->hardware);
-#endif
pending &= 0xBFFFFFFF;
}
@@ -2426,7 +2591,67 @@ gckEVENT_Notify(
pending
);
- gckOS_AtomClearMask(Event->pending, pending);
+#if gcdSMP
+#if gcdMULTI_GPU
+ if (core == gcvCORE_MAJOR)
+ {
+ /* Mark pending interrupts as handled. */
+ for (i = 0; i < gcdMULTI_GPU; i++)
+ {
+ gckOS_AtomClearMask(Event->pending3D[i], pending);
+ gckOS_AtomClearMask(Event->pending3DMask[i], pending);
+ }
+
+ gckOS_AtomClearMask(Event->pendingMask, pending);
+ }
+ else
+#endif
+ {
+ gckOS_AtomClearMask(Event->pending, pending);
+ }
+
+#elif defined(__QNXNTO__)
+#if gcdMULTI_GPU
+ if (core == gcvCORE_MAJOR)
+ {
+ for (i = 0; i < gcdMULTI_GPU; i++)
+ {
+ atomic_clr((gctUINT32_PTR)&Event->pending3D[i], pending);
+ atomic_clr((gctUINT32_PTR)&Event->pending3DMask[i], pending);
+ }
+
+ atomic_clr((gctUINT32_PTR)&Event->pendingMask, pending);
+ }
+ else
+#endif
+ {
+ atomic_clr((gctUINT32_PTR)&Event->pending, pending);
+ }
+#else
+ /* Suspend interrupts. */
+ gcmkONERROR(gckOS_SuspendInterruptEx(Event->os, Event->kernel->core));
+ suspended = gcvTRUE;
+
+#if gcdMULTI_GPU
+ if (core == gcvCORE_MAJOR)
+ {
+ for (i = 0; i < gcdMULTI_GPU; i++)
+ {
+ /* Mark pending interrupts as handled. */
+ Event->pending3D[i] &= ~pending;
+ Event->pending3DMask[i] &= ~pending;
+ }
+ }
+ else
+#endif
+ {
+ Event->pending &= ~pending;
+ }
+
+ /* Resume interrupts. */
+ gcmkONERROR(gckOS_ResumeInterruptEx(Event->os, Event->kernel->core));
+ suspended = gcvFALSE;
+#endif
/* Release the mutex queue. */
gcmkONERROR(gckOS_ReleaseMutex(Event->os, Event->eventQueueMutex));
@@ -2440,6 +2665,9 @@ gckEVENT_Notify(
if ((Event->queues[i].head != gcvNULL)
&& (Event->queues[i].stamp < queue->stamp)
&& (Event->queues[i].source <= queue->source)
+#if gcdMULTI_GPU
+ && (Event->queues[i].chipEnable == queue->chipEnable)
+#endif
)
{
gcmkTRACE_N(
@@ -2467,19 +2695,71 @@ gckEVENT_Notify(
#endif
}
- gckOS_AtomClearMask(Event->pending, mask);
+#if gcdSMP
+#if gcdMULTI_GPU
+ if (core == gcvCORE_MAJOR)
+ {
+ for (i = 0; i < gcdMULTI_GPU; i++)
+ {
+ /* Mark pending interrupt as handled. */
+ gckOS_AtomClearMask(Event->pending3D[i], mask);
+ gckOS_AtomClearMask(Event->pending3DMask[i], mask);
+ }
- if (!gckHARDWARE_IsFeatureAvailable(Event->kernel->hardware, gcvFEATURE_FENCE))
+ gckOS_AtomClearMask(Event->pendingMask, mask);
+ }
+ else
+#endif
{
- /* Write out commit stamp.*/
- *(gctUINT64 *)(Event->kernel->command->fence->logical) = queue->commitStamp;
+ gckOS_AtomClearMask(Event->pending, mask);
}
- /* Signal clients waiting for fence. */
- gcmkVERIFY_OK(gckFENCE_Signal(
- Event->os,
- Event->kernel->command->fence
- ));
+#elif defined(__QNXNTO__)
+#if gcdMULTI_GPU
+ if (core == gcvCORE_MAJOR)
+ {
+ for (i = 0; i < gcdMULTI_GPU; i++)
+ {
+ atomic_clr(&Event->pending3D[i], mask);
+ atomic_clr(&Event->pending3DMask[i], mask);
+ }
+
+ atomic_clr(&Event->pendingMask, mask);
+ }
+ else
+#endif
+ {
+ atomic_clr(&Event->pending, mask);
+ }
+#else
+ /* Suspend interrupts. */
+ gcmkONERROR(gckOS_SuspendInterruptEx(Event->os, Event->kernel->core));
+ suspended = gcvTRUE;
+
+#if gcdMULTI_GPU
+ if (core == gcvCORE_MAJOR)
+ {
+ for (i = 0; i < gcdMULTI_GPU; i++)
+ {
+ /* Mark pending interrupt as handled. */
+ Event->pending3D[i] &= ~mask;
+ Event->pending3DMask[i] &= ~mask;
+ }
+
+ Event->pendingMask &= ~mask;
+ }
+ else
+#endif
+ {
+ Event->pending &= ~mask;
+ }
+
+ /* Resume interrupts. */
+ gcmkONERROR(gckOS_ResumeInterruptEx(Event->os, Event->kernel->core));
+ suspended = gcvFALSE;
+#endif
+ /* Write out commit stamp.*/
+ *(gctUINT64 *)(Event->kernel->command->fence->logical) = queue->commitStamp;
/* Grab the event head. */
record = queue->head;
@@ -2487,13 +2767,13 @@ gckEVENT_Notify(
/* Now quickly clear its event list. */
queue->head = gcvNULL;
- /* Increase the number of free events. */
- Event->freeQueueCount++;
-
/* Release the mutex queue. */
gcmkONERROR(gckOS_ReleaseMutex(Event->os, Event->eventQueueMutex));
acquired = gcvFALSE;
+ /* Increase the number of free events. */
+ gcmkONERROR(gckOS_AtomIncrement(Event->os, Event->freeAtom, &free));
+
/* Walk all events for this interrupt. */
while (record != gcvNULL)
{
@@ -2509,11 +2789,10 @@ gckEVENT_Notify(
recordNext = record->next;
#ifdef __QNXNTO__
- /*
- * Assign record->processID as the pid for this galcore thread.
- * Used in the OS calls which do not take a pid.
+ /* Assign record->processID as the pid for this galcore thread.
+ * Used in OS calls like gckOS_UnlockMemory() which do not take a pid.
*/
- drv_thread_specific_key_assign(record->processID, 0);
+ drv_thread_specific_key_assign(record->processID, 0, Event->kernel->core);
#endif
#if gcdSECURE_USER
@@ -2620,10 +2899,10 @@ gckEVENT_Notify(
nodeObject = gcmUINT64_TO_PTR(record->info.u.UnlockVideoMemory.node);
-#if gcdSECURE_USER
node = nodeObject->node;
/* Save node information before it disappears. */
+#if gcdSECURE_USER
node = event->event.u.UnlockVideoMemory.node;
if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
{
@@ -2714,6 +2993,34 @@ gckEVENT_Notify(
#endif
break;
+ case gcvHAL_UNMAP_USER_MEMORY:
+ info = gcmNAME_TO_PTR(record->info.u.UnmapUserMemory.info);
+ gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_EVENT,
+ "gcvHAL_UNMAP_USER_MEMORY: 0x%x",
+ info);
+
+ /* Unmap the user memory. */
+ status = gckOS_UnmapUserMemory(
+ Event->os,
+ Event->kernel->core,
+ gcmUINT64_TO_PTR(record->info.u.UnmapUserMemory.memory),
+ (gctSIZE_T) record->info.u.UnmapUserMemory.size,
+ info,
+ record->info.u.UnmapUserMemory.address);
+
+#if gcdSECURE_USER
+ if (gcmIS_SUCCESS(status))
+ {
+ gcmkVERIFY_OK(gckKERNEL_FlushTranslationCache(
+ Event->kernel,
+ cache,
+ gcmUINT64_TO_PTR(record->info.u.UnmapUserMemory.memory),
+ (gctSIZE_T) record->info.u.UnmapUserMemory.size));
+ }
+#endif
+ gcmRELEASE_NAME(record->info.u.UnmapUserMemory.info);
+ break;
+
case gcvHAL_TIMESTAMP:
gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_EVENT,
"gcvHAL_TIMESTAMP: %d %d",
@@ -2776,15 +3083,6 @@ gckEVENT_Notify(
#endif
case gcvHAL_COMMIT_DONE:
- if (kernel->hardware->gpuProfiler == gcvTRUE
- && kernel->profileEnable == gcvTRUE
- )
- {
- gckHARDWARE_UpdateContextProfile(
- kernel->hardware,
- gcmUINT64_TO_PTR(record->info.u.CommitDone.context)
- );
- }
break;
default:
@@ -2821,11 +3119,19 @@ gckEVENT_Notify(
"Handled interrupt 0x%x", mask);
}
+#if gcdMULTI_GPU
+ /* Clear busy flag. */
+ gckOS_AtomicExchange(Event->os, &Event->busy, 0, &oldValue);
+#endif
+
if (IDs == 0)
{
gcmkONERROR(_TryToIdleGPU(Event));
}
+#if gcdMULTI_GPU
+OnSuccess:
+#endif
/* Success. */
gcmkFOOTER_NO();
return gcvSTATUS_OK;
@@ -2837,6 +3143,14 @@ OnError:
gcmkVERIFY_OK(gckOS_ReleaseMutex(Event->os, Event->eventQueueMutex));
}
+#if !gcdSMP
+ if (suspended)
+ {
+ /* Resume interrupts. */
+ gcmkVERIFY_OK(gckOS_ResumeInterruptEx(Event->os, Event->kernel->core));
+ }
+#endif
+
/* Return the status. */
gcmkFOOTER();
return status;
@@ -3000,7 +3314,7 @@ gckEVENT_Stop(
{
gceSTATUS status;
/* gctSIZE_T waitSize;*/
- gcsEVENT_PTR record = gcvNULL;
+ gcsEVENT_PTR record;
gctUINT8 id = 0xFF;
gcmkHEADER_ARG("Event=0x%x ProcessID=%u Handle=0x%x Logical=0x%x "
@@ -3011,8 +3325,16 @@ gckEVENT_Stop(
gcmkVERIFY_OBJECT(Event, gcvOBJ_EVENT);
/* Submit the current event queue. */
+#if gcdMULTI_GPU
+ gcmkONERROR(gckEVENT_Submit(Event, gcvTRUE, gcvFALSE, gcvCORE_3D_ALL_MASK));
+#else
gcmkONERROR(gckEVENT_Submit(Event, gcvTRUE, gcvFALSE));
+#endif
+#if gcdMULTI_GPU
+ gcmkONERROR(gckEVENT_GetEvent(Event, gcvTRUE, &id, gcvKERNEL_PIXEL, gcvCORE_3D_ALL_MASK));
+#else
gcmkONERROR(gckEVENT_GetEvent(Event, gcvTRUE, &id, gcvKERNEL_PIXEL));
+#endif
/* Allocate a record. */
gcmkONERROR(gckEVENT_AllocateRecord(Event, gcvTRUE, &record));
@@ -3037,19 +3359,6 @@ gckEVENT_Stop(
Event->kernel->hardware, Logical, waitSize
));
-#if USE_KERNEL_VIRTUAL_BUFFERS
- if (Event->kernel->virtualCommandBuffer)
- {
- gcmkONERROR(gckKERNEL_GetGPUAddress(
- Event->kernel,
- Logical,
- gcvFALSE,
- Event->kernel->command->virtualMemory,
- &Event->kernel->hardware->lastEnd
- ));
- }
-#endif
-
#if gcdNONPAGED_MEMORY_CACHEABLE
/* Flush the cache for the END. */
gcmkONERROR(gckOS_CacheClean(
@@ -3063,7 +3372,7 @@ gckEVENT_Stop(
#endif
/* Wait for the signal. */
- gcmkONERROR(gckOS_WaitSignal(Event->os, Signal, gcvFALSE, gcvINFINITE));
+ gcmkONERROR(gckOS_WaitSignal(Event->os, Signal, gcvINFINITE));
/* Success. */
gcmkFOOTER_NO();
@@ -3222,3 +3531,4 @@ gckEVENT_Dump(
gcmkFOOTER_NO();
return gcvSTATUS_OK;
}
+
diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
index 784d7f0f229d..b93923a8b674 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
@@ -67,10 +67,19 @@ gceMMU_TYPE;
#define gcmENTRY_TYPE(x) (x & 0xF0)
-#define gcmENTRY_COUNT(x) ((x & 0xFFFFFF00) >> 8)
-
#define gcdMMU_TABLE_DUMP 0
+#define gcdUSE_MMU_EXCEPTION 0
+
+/*
+ gcdMMU_CLEAR_VALUE
+
+ The clear value for the entry of the old MMU.
+*/
+#ifndef gcdMMU_CLEAR_VALUE
+# define gcdMMU_CLEAR_VALUE 0x00000ABC
+#endif
+
#define gcdVERTEX_START (128 << 10)
typedef struct _gcsMMU_STLB *gcsMMU_STLB_PTR;
@@ -80,7 +89,7 @@ typedef struct _gcsMMU_STLB
gctPHYS_ADDR physical;
gctUINT32_PTR logical;
gctSIZE_T size;
- gctPHYS_ADDR_T physBase;
+ gctUINT32 physBase;
gctSIZE_T pageCount;
gctUINT32 mtlbIndex;
gctUINT32 mtlbEntryNum;
@@ -105,6 +114,27 @@ gcsSharedPageTable;
static gcsSharedPageTable_PTR sharedPageTable = gcvNULL;
#endif
+#if gcdMIRROR_PAGETABLE
+typedef struct _gcsMirrorPageTable * gcsMirrorPageTable_PTR;
+typedef struct _gcsMirrorPageTable
+{
+ /* gckMMU objects. */
+ gckMMU mmus[gcdMAX_GPU_COUNT];
+
+ /* Hardwares which use this shared pagetable. */
+ gckHARDWARE hardwares[gcdMAX_GPU_COUNT];
+
+ /* Number of cores use this shared pagetable. */
+ gctUINT32 reference;
+
+ /* Mutex. */
+ gctPOINTER mutex;
+}
+gcsMirrorPageTable;
+
+static gcsMirrorPageTable_PTR mirrorPageTable = gcvNULL;
+#endif
+
typedef struct _gcsDynamicSpaceNode * gcsDynamicSpaceNode_PTR;
typedef struct _gcsDynamicSpaceNode
{
@@ -168,50 +198,33 @@ _FillPageTable(
}
static gceSTATUS
-_FillMap(
- IN gctUINT32_PTR Map,
- IN gctUINT32 PageCount,
- IN gctUINT32 EntryValue
-)
-{
- gctUINT i;
-
- for (i = 0; i < PageCount; i++)
- {
- Map[i] = EntryValue;
- }
-
- return gcvSTATUS_OK;
-}
-
-static gceSTATUS
_Link(
- IN gcsADDRESS_AREA_PTR Area,
+ IN gckMMU Mmu,
IN gctUINT32 Index,
IN gctUINT32 Next
)
{
- if (Index >= Area->pageTableEntries)
+ if (Index >= Mmu->pageTableEntries)
{
/* Just move heap pointer. */
- Area->heapList = Next;
+ Mmu->heapList = Next;
}
else
{
/* Address page table. */
- gctUINT32_PTR map = Area->mapLogical;
+ gctUINT32_PTR map = Mmu->mapLogical;
/* Dispatch on node type. */
- switch (gcmENTRY_TYPE(map[Index]))
+ switch (gcmENTRY_TYPE(_ReadPageEntry(&map[Index])))
{
case gcvMMU_SINGLE:
/* Set single index. */
- map[Index] = (Next << 8) | gcvMMU_SINGLE;
+ _WritePageEntry(&map[Index], (Next << 8) | gcvMMU_SINGLE);
break;
case gcvMMU_FREE:
/* Set index. */
- map[Index + 1] = Next;
+ _WritePageEntry(&map[Index + 1], Next);
break;
default:
@@ -226,54 +239,54 @@ _Link(
static gceSTATUS
_AddFree(
- IN gcsADDRESS_AREA_PTR Area,
+ IN gckMMU Mmu,
IN gctUINT32 Index,
IN gctUINT32 Node,
IN gctUINT32 Count
)
{
- gctUINT32_PTR map = Area->mapLogical;
+ gctUINT32_PTR map = Mmu->mapLogical;
if (Count == 1)
{
/* Initialize a single page node. */
- map[Node] = (~((1U<<8)-1)) | gcvMMU_SINGLE;
+ _WritePageEntry(map + Node, (~((1U<<8)-1)) | gcvMMU_SINGLE);
}
else
{
/* Initialize the node. */
- map[Node + 0] = (Count << 8) | gcvMMU_FREE;
- map[Node + 1] = ~0U;
+ _WritePageEntry(map + Node + 0, (Count << 8) | gcvMMU_FREE);
+ _WritePageEntry(map + Node + 1, ~0U);
}
/* Append the node. */
- return _Link(Area, Index, Node);
+ return _Link(Mmu, Index, Node);
}
static gceSTATUS
_Collect(
- IN gcsADDRESS_AREA_PTR Area
+ IN gckMMU Mmu
)
{
- gctUINT32_PTR map = Area->mapLogical;
+ gctUINT32_PTR map = Mmu->mapLogical;
gceSTATUS status;
gctUINT32 i, previous, start = 0, count = 0;
- previous = Area->heapList = ~0U;
- Area->freeNodes = gcvFALSE;
+ previous = Mmu->heapList = ~0U;
+ Mmu->freeNodes = gcvFALSE;
/* Walk the entire page table. */
- for (i = 0; i < Area->pageTableEntries; ++i)
+ for (i = 0; i < Mmu->pageTableEntries; ++i)
{
/* Dispatch based on type of page. */
- switch (gcmENTRY_TYPE(map[i]))
+ switch (gcmENTRY_TYPE(_ReadPageEntry(&map[i])))
{
case gcvMMU_USED:
/* Used page, so close any open node. */
if (count > 0)
{
/* Add the node. */
- gcmkONERROR(_AddFree(Area, previous, start, count));
+ gcmkONERROR(_AddFree(Mmu, previous, start, count));
/* Reset the node. */
previous = start;
@@ -299,10 +312,10 @@ _Collect(
}
/* Advance the count. */
- count += map[i] >> 8;
+ count += _ReadPageEntry(&map[i]) >> 8;
/* Advance the index into the page table. */
- i += (map[i] >> 8) - 1;
+ i += (_ReadPageEntry(&map[i]) >> 8) - 1;
break;
default:
@@ -315,7 +328,7 @@ _Collect(
if (count > 0)
{
/* Add the node to the list. */
- gcmkONERROR(_AddFree(Area, previous, start, count));
+ gcmkONERROR(_AddFree(Mmu, previous, start, count));
}
gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_MMU,
@@ -330,164 +343,40 @@ OnError:
}
static gctUINT32
-_SetPage(gctUINT32 PageAddress, gctUINT32 PageAddressExt, gctBOOL Writable)
-{
- gctUINT32 entry = PageAddress
- /* AddressExt */
- | (PageAddressExt << 4)
- /* Ignore exception */
- | (0 << 1)
- /* Present */
- | (1 << 0);
-
- if (Writable)
- {
- /* writable */
- entry |= (1 << 2);
- }
-#if gcdUSE_MMU_EXCEPTION
- else
- {
- /* If this page is read only, set exception bit to make exception happens
- ** when writing to it. */
- entry |= gcdMMU_STLB_EXCEPTION;
- }
-#endif
-
- return entry;
-}
-
-static gctUINT32
-_MtlbOffset(
- gctUINT32 Address
- )
+_SetPage(gctUINT32 PageAddress, gctUINT32 PageAddressExt)
{
- return (Address & gcdMMU_MTLB_MASK) >> gcdMMU_MTLB_SHIFT;
+ return PageAddress
+ /* AddressExt */
+ | (PageAddressExt << 4)
+ /* writable */
+ | (1 << 2)
+ /* Ignore exception */
+ | (0 << 1)
+ /* Present */
+ | (1 << 0);
}
+#if gcdPROCESS_ADDRESS_SPACE
gctUINT32
_AddressToIndex(
- IN gcsADDRESS_AREA_PTR Area,
+ IN gckMMU Mmu,
IN gctUINT32 Address
)
{
gctUINT32 mtlbOffset = (Address & gcdMMU_MTLB_MASK) >> gcdMMU_MTLB_SHIFT;
gctUINT32 stlbOffset = (Address & gcdMMU_STLB_4K_MASK) >> gcdMMU_STLB_4K_SHIFT;
- return (mtlbOffset - Area->dynamicMappingStart) * gcdMMU_STLB_4K_ENTRY_NUM + stlbOffset;
+ return (mtlbOffset - Mmu->dynamicMappingStart) * gcdMMU_STLB_4K_ENTRY_NUM + stlbOffset;
}
-static gctUINT32_PTR
-_StlbEntry(
- gcsADDRESS_AREA_PTR Area,
+gctUINT32
+_MtlbOffset(
gctUINT32 Address
)
{
- gctUINT32 index = _AddressToIndex(Area, Address);
-
- return &Area->pageTableLogical[index];
-}
-
-static gceSTATUS
-_FillFlatMappingInMap(
- gcsADDRESS_AREA_PTR Area,
- gctUINT32 Index,
- gctUINT32 NumPages
- )
-{
- gceSTATUS status;
- gctUINT32 i;
- gctBOOL gotIt = gcvFALSE;
- gctUINT32 index = Index;
- gctUINT32_PTR map = Area->mapLogical;
- gctUINT32 previous = ~0U;
-
- /* Find node which contains index. */
- for (i = 0; !gotIt && (i < Area->pageTableEntries);)
- {
- gctUINT32 numPages;
-
- switch (gcmENTRY_TYPE(map[i]))
- {
- case gcvMMU_SINGLE:
- if (i == index)
- {
- gotIt = gcvTRUE;
- }
- else
- {
- previous = i;
- i = map[i] >> 8;
- }
- break;
-
- case gcvMMU_FREE:
- numPages = map[i] >> 8;
- if (index >= i && index + NumPages - 1 < i + numPages)
- {
- gotIt = gcvTRUE;
- }
- else
- {
- previous = i;
- i = map[i + 1];
- }
- break;
-
- case gcvMMU_USED:
- i++;
- break;
-
- default:
- gcmkFATAL("MMU table correcupted at index %u!", index);
- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
- }
- }
-
- switch (gcmENTRY_TYPE(map[i]))
- {
- case gcvMMU_SINGLE:
- /* Unlink single node from free list. */
- gcmkONERROR(
- _Link(Area, previous, map[i] >> 8));
- break;
-
- case gcvMMU_FREE:
- /* Split the node. */
- {
- gctUINT32 start;
- gctUINT32 next = map[i+1];
- gctUINT32 total = map[i] >> 8;
- gctUINT32 countLeft = index - i;
- gctUINT32 countRight = total - countLeft - NumPages;
-
- if (countLeft)
- {
- start = i;
- _AddFree(Area, previous, start, countLeft);
- previous = start;
- }
-
- if (countRight)
- {
- start = index + NumPages;
- _AddFree(Area, previous, start, countRight);
- previous = start;
- }
-
- _Link(Area, previous, next);
- }
- break;
- }
-
- _FillMap(&map[index], NumPages, gcvMMU_USED);
-
- return gcvSTATUS_OK;
-OnError:
- return status;
+ return (Address & gcdMMU_MTLB_MASK) >> gcdMMU_MTLB_SHIFT;
}
-#if gcdPROCESS_ADDRESS_SPACE
gctUINT32
_StlbOffset(
gctUINT32 Address
@@ -550,22 +439,22 @@ _SetupProcessAddressSpace(
/* Address space mapped by one MTLB entry. */
/ (1 << gcdMMU_MTLB_SHIFT);
- area->dynamicMappingStart = 0;
+ Mmu->dynamicMappingStart = 0;
- area->pageTableSize = numEntries * 4096;
+ Mmu->pageTableSize = numEntries * 4096;
- area->pageTableEntries = area->pageTableSize / gcmSIZEOF(gctUINT32);
+ Mmu->pageTableEntries = Mmu->pageTableSize / gcmSIZEOF(gctUINT32);
gcmkONERROR(gckOS_Allocate(Mmu->os,
- area->pageTableSize,
- (void **)&area->mapLogical));
+ Mmu->pageTableSize,
+ (void **)&Mmu->mapLogical));
- /* Initialization. */
- map = area->mapLogical;
- map[0] = (area->pageTableEntries << 8) | gcvMMU_FREE;
- map[1] = ~0U;
- area->heapList = 0;
- area->freeNodes = gcvFALSE;
+ /* Initilization. */
+ map = Mmu->mapLogical;
+ _WritePageEntry(map, (Mmu->pageTableEntries << 8) | gcvMMU_FREE);
+ _WritePageEntry(map + 1, ~0U);
+ Mmu->heapList = 0;
+ Mmu->freeNodes = gcvFALSE;
return gcvSTATUS_OK;
@@ -583,46 +472,14 @@ _FillFlatMapping(
gceSTATUS status;
gctBOOL mutex = gcvFALSE;
gcsMMU_STLB_PTR head = gcvNULL, pre = gcvNULL;
- gctUINT32 start = PhysBase & ~gcdMMU_PAGE_64K_MASK;
- gctUINT32 end = (gctUINT32) (PhysBase + Size - 1) & ~gcdMMU_PAGE_64K_MASK;
+ gctUINT32 start = PhysBase & (~gcdMMU_PAGE_64K_MASK);
+ gctUINT32 end = (PhysBase + Size - 1) & (~gcdMMU_PAGE_64K_MASK);
gctUINT32 mStart = start >> gcdMMU_MTLB_SHIFT;
gctUINT32 mEnd = end >> gcdMMU_MTLB_SHIFT;
gctUINT32 sStart = (start & gcdMMU_STLB_64K_MASK) >> gcdMMU_STLB_64K_SHIFT;
gctUINT32 sEnd = (end & gcdMMU_STLB_64K_MASK) >> gcdMMU_STLB_64K_SHIFT;
+ gctBOOL ace = gckHARDWARE_IsFeatureAvailable(Mmu->hardware, gcvFEATURE_ACE);
gctPHYS_ADDR_T physical;
- gctUINT32 size;
-
- gctUINT32 mtlb = _MtlbOffset(PhysBase);
- gcsADDRESS_AREA_PTR area = &Mmu->area[0];
-
- /************************ Setup flat mapping in dynamic range. ****************/
-
- if (area->dynamicMappingStart != gcvINVALID_ADDRESS && mtlb >= area->dynamicMappingStart &&
- _MtlbOffset(PhysBase + Size - 1) < area->dynamicMappingEnd)
- {
- gctUINT32_PTR stlbEntry;
- gctUINT i;
-
- stlbEntry = _StlbEntry(area, PhysBase);
-
- /* Must be aligned to page. */
- gcmkASSERT((Size & 0xFFF) == 0);
-
- for (i = 0; i < (Size / 4096); i++)
- {
- /* Flat mapping in page table. */
- _WritePageEntry(stlbEntry, _SetPage(PhysBase + i * 4096, 0, gcvTRUE));
- }
-
- gcmkSAFECASTSIZET(size, Size);
-
- /* Flat mapping in map. */
- _FillFlatMappingInMap(area, _AddressToIndex(area, PhysBase), size / 4096);
-
- return gcvSTATUS_OK;
- }
-
- /************************ Setup flat mapping in non dynamic range. **************/
/* Grab the mutex. */
gcmkONERROR(gckOS_AcquireMutex(Mmu->os, Mmu->pageTableMutex, gcvINFINITE));
@@ -630,14 +487,12 @@ _FillFlatMapping(
while (mStart <= mEnd)
{
- gcsMMU_STLB_PTR stlb = gcvNULL;
- gctUINT32 last = (mStart == mEnd) ? sEnd : (gcdMMU_STLB_64K_ENTRY_NUM - 1);
-
gcmkASSERT(mStart < gcdMMU_MTLB_ENTRY_NUM);
if (*(Mmu->mtlbLogical + mStart) == 0)
{
+ gcsMMU_STLB_PTR stlb;
gctPOINTER pointer = gcvNULL;
-
+ gctUINT32 last = (mStart == mEnd) ? sEnd : (gcdMMU_STLB_64K_ENTRY_NUM - 1);
gctUINT32 mtlbEntry;
gcmkONERROR(gckOS_Allocate(Mmu->os, sizeof(struct _gcsMMU_STLB), &pointer));
@@ -682,7 +537,7 @@ _FillFlatMapping(
gcmkONERROR(gcvSTATUS_NOT_ALIGNED);
}
- physical = stlb->physBase
+ mtlbEntry = stlb->physBase
/* 64KB page size */
| (1 << 2)
/* Ignore exception */
@@ -690,7 +545,12 @@ _FillFlatMapping(
/* Present */
| (1 << 0);
- gcmkSAFECASTPHYSADDRT(mtlbEntry, physical);
+ if (ace)
+ {
+ mtlbEntry = mtlbEntry
+ /* Secure */
+ | (1 << 4);
+ }
_WritePageEntry(Mmu->mtlbLogical + mStart, mtlbEntry);
@@ -710,72 +570,46 @@ _FillFlatMapping(
stlb->physBase);
#endif
-
- }
- else
- {
- stlb = Mmu->staticSTLB;
-
- while (stlb)
+ while (sStart <= last)
{
- gctUINT32 mtlbEntry = _ReadPageEntry(Mmu->mtlbLogical + mStart);
-
- if (stlb->physBase == (mtlbEntry & gcdMMU_MTLB_ENTRY_STLB_MASK))
- {
- break;
- }
-
- stlb = stlb->next;
- }
- }
-
- /* Fill STLB. */
- sStart = (start & gcdMMU_STLB_64K_MASK) >> gcdMMU_STLB_64K_SHIFT;
-
- while (sStart <= last)
- {
- gcmkASSERT(!(start & gcdMMU_PAGE_64K_MASK));
- _WritePageEntry(stlb->logical + sStart, _SetPage(start, 0, gcvTRUE));
+ gcmkASSERT(!(start & gcdMMU_PAGE_64K_MASK));
+ _WritePageEntry(stlb->logical + sStart, _SetPage(start, 0));
#if gcdMMU_TABLE_DUMP
- gckOS_Print("%s(%d): insert STLB[%d]: %08x\n",
- __FUNCTION__, __LINE__,
- sStart,
- _ReadPageEntry(stlb->logical + sStart));
+ gckOS_Print("%s(%d): insert STLB[%d]: %08x\n",
+ __FUNCTION__, __LINE__,
+ sStart,
+ _ReadPageEntry(stlb->logical + sStart));
#endif
- /* next page. */
- start += gcdMMU_PAGE_64K_SIZE;
- sStart++;
- stlb->pageCount++;
- }
-
- ++mStart;
- }
+ /* next page. */
+ start += gcdMMU_PAGE_64K_SIZE;
+ sStart++;
+ stlb->pageCount++;
+ }
- if (pre)
- {
- /* Insert the stlb into staticSTLB. */
- if (Mmu->staticSTLB == gcvNULL)
- {
- Mmu->staticSTLB = head;
+ sStart = 0;
+ ++mStart;
}
else
{
- gcmkASSERT(pre != gcvNULL);
- gcmkASSERT(pre->next == gcvNULL);
- pre->next = Mmu->staticSTLB;
- Mmu->staticSTLB = head;
+ gcmkONERROR(gcvSTATUS_INVALID_REQUEST);
}
}
- /* Release the mutex. */
- gcmkVERIFY_OK(gckOS_ReleaseMutex(Mmu->os, Mmu->pageTableMutex));
-
-#if gcdENABLE_TRUST_APPLICATION
- if (Mmu->hardware->secureMode == gcvSECURE_IN_TA)
+ /* Insert the stlb into staticSTLB. */
+ if (Mmu->staticSTLB == gcvNULL)
{
- gckKERNEL_SecurityMapMemory(Mmu->hardware->kernel, gcvNULL, PhysBase, (gctUINT32)Size/4096, &PhysBase);
+ Mmu->staticSTLB = head;
+ }
+ else
+ {
+ gcmkASSERT(pre == gcvNULL);
+ gcmkASSERT(pre->next == gcvNULL);
+ pre->next = Mmu->staticSTLB;
+ Mmu->staticSTLB = head;
}
-#endif
+
+ /* Release the mutex. */
+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Mmu->os, Mmu->pageTableMutex));
return gcvSTATUS_OK;
@@ -900,38 +734,6 @@ OnError:
}
static gceSTATUS
-_SetupAddressArea(
- IN gckOS Os,
- IN gcsADDRESS_AREA_PTR Area,
- IN gctUINT32 NumMTLBEntries
- )
-{
- gceSTATUS status;
- gctUINT32_PTR map;
-
- gcmkHEADER();
- Area->pageTableSize = NumMTLBEntries * 4096;
-
- gcmkSAFECASTSIZET(Area->pageTableEntries, Area->pageTableSize / gcmSIZEOF(gctUINT32));
-
- gcmkONERROR(gckOS_Allocate(Os, Area->pageTableSize, (void **)&Area->mapLogical));
-
- /* Initialization. */
- map = Area->mapLogical;
- map[0] = (Area->pageTableEntries << 8) | gcvMMU_FREE;
- map[1] = ~0U;
- Area->heapList = 0;
- Area->freeNodes = gcvFALSE;
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- gcmkFOOTER();
- return status;
-}
-
-static gceSTATUS
_SetupDynamicSpace(
IN gckMMU Mmu
)
@@ -942,11 +744,10 @@ _SetupDynamicSpace(
gctPHYS_ADDR_T physical;
gctUINT32 address;
gctINT numEntries = 0;
+ gctUINT32_PTR map;
gctBOOL acquired = gcvFALSE;
gctUINT32 mtlbEntry;
- gcsADDRESS_AREA_PTR area = &Mmu->area[0];
- gcsADDRESS_AREA_PTR areaSecure = &Mmu->area[gcvADDRESS_AREA_SECURE];
- gctUINT32 secureAreaSize = 0;
+ gctBOOL ace = gckHARDWARE_IsFeatureAvailable(Mmu->hardware, gcvFEATURE_ACE);
/* Find all the dynamic address space. */
gcmkONERROR(_FindDynamicSpace(Mmu, &nodeArray, &nodeArraySize));
@@ -956,57 +757,48 @@ _SetupDynamicSpace(
{
if (nodeArray[i].entries > numEntries)
{
- area->dynamicMappingStart = nodeArray[i].start;
- numEntries = nodeArray[i].entries;
- area->dynamicMappingEnd = area->dynamicMappingStart + numEntries;
+ Mmu->dynamicMappingStart = nodeArray[i].start;
+ numEntries = nodeArray[i].entries;
}
}
gckOS_Free(Mmu->os, (gctPOINTER)nodeArray);
-#if gcdENABLE_TRUST_APPLICATION
- if (gckHARDWARE_IsFeatureAvailable(Mmu->hardware, gcvFEATURE_SECURITY) == gcvSTATUS_TRUE)
- {
- secureAreaSize = gcdMMU_SECURE_AREA_SIZE;
- }
-#endif
-
- /* Setup secure address area if need. */
- if (secureAreaSize > 0)
- {
- gcmkASSERT(numEntries > (gctINT)secureAreaSize);
-
- areaSecure->dynamicMappingStart = area->dynamicMappingStart
- + (numEntries - secureAreaSize);
+ Mmu->pageTableSize = numEntries * 4096;
- gcmkONERROR(_SetupAddressArea(Mmu->os, areaSecure, secureAreaSize));
+ gcmkSAFECASTSIZET(Mmu->pageTableEntries, Mmu->pageTableSize / gcmSIZEOF(gctUINT32));
- numEntries -= secureAreaSize;
- }
-
- /* Setup normal address area. */
- gcmkONERROR(_SetupAddressArea(Mmu->os, area, numEntries));
+ gcmkONERROR(gckOS_Allocate(Mmu->os,
+ Mmu->pageTableSize,
+ (void **)&Mmu->mapLogical));
/* Construct Slave TLB. */
gcmkONERROR(gckOS_AllocateContiguous(Mmu->os,
gcvFALSE,
- &area->pageTableSize,
- &area->pageTablePhysical,
- (gctPOINTER)&area->pageTableLogical));
+ &Mmu->pageTableSize,
+ &Mmu->pageTablePhysical,
+ (gctPOINTER)&Mmu->pageTableLogical));
#if gcdUSE_MMU_EXCEPTION
- gcmkONERROR(_FillPageTable(area->pageTableLogical,
- area->pageTableEntries,
+ gcmkONERROR(_FillPageTable(Mmu->pageTableLogical,
+ Mmu->pageTableEntries,
/* Enable exception */
1 << 1));
#else
/* Invalidate all entries. */
- gcmkONERROR(gckOS_ZeroMemory(area->pageTableLogical,
- area->pageTableSize));
+ gcmkONERROR(gckOS_ZeroMemory(Mmu->pageTableLogical,
+ Mmu->pageTableSize));
#endif
+ /* Initilization. */
+ map = Mmu->mapLogical;
+ _WritePageEntry(map, (Mmu->pageTableEntries << 8) | gcvMMU_FREE);
+ _WritePageEntry(map + 1, ~0U);
+ Mmu->heapList = 0;
+ Mmu->freeNodes = gcvFALSE;
+
gcmkONERROR(gckOS_GetPhysicalAddress(Mmu->os,
- area->pageTableLogical,
+ Mmu->pageTableLogical,
&physical));
gcmkSAFECASTPHYSADDRT(address, physical);
@@ -1016,8 +808,8 @@ _SetupDynamicSpace(
acquired = gcvTRUE;
/* Map to Master TLB. */
- for (i = (gctINT)area->dynamicMappingStart;
- i < (gctINT)area->dynamicMappingStart + numEntries;
+ for (i = (gctINT)Mmu->dynamicMappingStart;
+ i < (gctINT)Mmu->dynamicMappingStart + numEntries;
i++)
{
mtlbEntry = address
@@ -1028,6 +820,13 @@ _SetupDynamicSpace(
/* Present */
| (1 << 0);
+ if (ace)
+ {
+ mtlbEntry = mtlbEntry
+ /* Secure */
+ | (1 << 4);
+ }
+
_WritePageEntry(Mmu->mtlbLogical + i, mtlbEntry);
#if gcdMMU_TABLE_DUMP
@@ -1045,17 +844,17 @@ _SetupDynamicSpace(
return gcvSTATUS_OK;
OnError:
- if (area->mapLogical)
+ if (Mmu->mapLogical)
{
gcmkVERIFY_OK(
- gckOS_Free(Mmu->os, (gctPOINTER) area->mapLogical));
+ gckOS_Free(Mmu->os, (gctPOINTER) Mmu->mapLogical));
gcmkVERIFY_OK(
gckOS_FreeContiguous(Mmu->os,
- area->pageTablePhysical,
- (gctPOINTER) area->pageTableLogical,
- area->pageTableSize));
+ Mmu->pageTablePhysical,
+ (gctPOINTER) Mmu->pageTableLogical,
+ Mmu->pageTableSize));
}
if (acquired)
@@ -1068,41 +867,6 @@ OnError:
}
#endif
-gctUINT32
-_GetPageCountOfUsedNode(
- gctUINT32_PTR Node
- )
-{
- gctUINT32 count;
-
- count = gcmENTRY_COUNT(*Node);
-
- if ((count << 8) == (~((1U<<8)-1)))
- {
- count = 1;
- }
-
- return count;
-}
-
-static gcsADDRESS_AREA_PTR
-_GetProcessArea(
- IN gckMMU Mmu,
- IN gctBOOL Secure
- )
-{
- gceADDRESS_AREA area = gcvADDRESS_AREA_NORMAL;
-
-#if gcdENABLE_TRUST_APPLICATION
- if (Secure == gcvTRUE)
- {
- area = gcvADDRESS_AREA_SECURE;
- }
-#endif
-
- return &Mmu->area[area];
-}
-
/*******************************************************************************
**
** _Construct
@@ -1135,13 +899,14 @@ _Construct(
gckMMU mmu = gcvNULL;
gctUINT32_PTR map;
gctPOINTER pointer = gcvNULL;
+#if gcdPROCESS_ADDRESS_SPACE
+ gctUINT32 i;
+ gctUINT32 physical;
+#endif
gctUINT32 physBase;
gctUINT32 physSize;
- gctUINT32 contiguousBase;
- gctUINT32 contiguousSize;
gctUINT32 gpuAddress;
gctPHYS_ADDR_T gpuPhysical;
- gcsADDRESS_AREA_PTR area = gcvNULL;
gcmkHEADER_ARG("Kernel=0x%x MmuSize=%lu", Kernel, MmuSize);
@@ -1161,8 +926,6 @@ _Construct(
/* Allocate memory for the gckMMU object. */
gcmkONERROR(gckOS_Allocate(os, sizeof(struct _gckMMU), &pointer));
- gckOS_ZeroMemory(pointer, sizeof(struct _gckMMU));
-
mmu = pointer;
/* Initialize the gckMMU object. */
@@ -1170,56 +933,53 @@ _Construct(
mmu->os = os;
mmu->hardware = hardware;
mmu->pageTableMutex = gcvNULL;
+ mmu->pageTableLogical = gcvNULL;
mmu->mtlbLogical = gcvNULL;
mmu->staticSTLB = gcvNULL;
mmu->enabled = gcvFALSE;
- gcsLIST_Init(&mmu->hardwareList);
-
-
- area = &mmu->area[0];
- area->mapLogical = gcvNULL;
- area->pageTableLogical = gcvNULL;
+ mmu->mapLogical = gcvNULL;
/* Create the page table mutex. */
gcmkONERROR(gckOS_CreateMutex(os, &mmu->pageTableMutex));
-
if (hardware->mmuVersion == 0)
{
- area->pageTableSize = MmuSize;
+ mmu->pageTableSize = MmuSize;
/* Construct address space management table. */
gcmkONERROR(gckOS_Allocate(mmu->os,
- area->pageTableSize,
+ mmu->pageTableSize,
&pointer));
- area->mapLogical = pointer;
+ mmu->mapLogical = pointer;
/* Construct page table read by GPU. */
gcmkONERROR(gckOS_AllocateContiguous(mmu->os,
gcvFALSE,
- &area->pageTableSize,
- &area->pageTablePhysical,
- (gctPOINTER)&area->pageTableLogical));
+ &mmu->pageTableSize,
+ &mmu->pageTablePhysical,
+ (gctPOINTER)&mmu->pageTableLogical));
/* Compute number of entries in page table. */
- gcmkSAFECASTSIZET(area->pageTableEntries, area->pageTableSize / sizeof(gctUINT32));
+ gcmkSAFECASTSIZET(mmu->pageTableEntries, mmu->pageTableSize / sizeof(gctUINT32));
/* Mark all pages as free. */
- map = area->mapLogical;
+ map = mmu->mapLogical;
- _FillPageTable(area->pageTableLogical, area->pageTableEntries, mmu->safeAddress);
+#if gcdMMU_CLEAR_VALUE
+ _FillPageTable(mmu->pageTableLogical, mmu->pageTableEntries, gcdMMU_CLEAR_VALUE);
+#endif
- map[0] = (area->pageTableEntries << 8) | gcvMMU_FREE;
- map[1] = ~0U;
- area->heapList = 0;
- area->freeNodes = gcvFALSE;
+ _WritePageEntry(map, (mmu->pageTableEntries << 8) | gcvMMU_FREE);
+ _WritePageEntry(map + 1, ~0U);
+ mmu->heapList = 0;
+ mmu->freeNodes = gcvFALSE;
}
else
{
/* Allocate the 4K mode MTLB table. */
- mmu->mtlbSize = gcdMMU_MTLB_SIZE;
+ mmu->mtlbSize = gcdMMU_MTLB_SIZE + 64;
gcmkONERROR(
gckOS_AllocateContiguous(os,
@@ -1230,8 +990,6 @@ _Construct(
mmu->mtlbLogical = pointer;
- area->dynamicMappingStart = gcvINVALID_ADDRESS;
-
#if gcdPROCESS_ADDRESS_SPACE
_FillPageTable(pointer, mmu->mtlbSize / 4, gcdMMU_MTLB_EXCEPTION);
@@ -1253,12 +1011,10 @@ _Construct(
gcmkONERROR(gckOS_GetPhysicalAddress(
mmu->os,
Kernel->command->queues[i].logical,
- &gpuPhysical
+ &physical
));
- gcmkSAFECASTPHYSADDRT(gpuAddress, gpuPhysical);
-
- gcmkONERROR(gckMMU_FlatMapping(mmu, gpuAddress, 1));
+ gcmkONERROR(gckMMU_FlatMapping(mmu, physical));
}
#else
/* Invalid all the entries. */
@@ -1276,56 +1032,17 @@ _Construct(
gcmkSAFECASTPHYSADDRT(gpuAddress, gpuPhysical);
- mmu->flatMappingStart = gpuAddress;
- mmu->flatMappingEnd = gpuAddress + physSize;
-
- if (physSize)
- {
- /* Setup user specified flat mapping. */
- gcmkONERROR(_FillFlatMapping(mmu, gpuAddress, physSize));
- }
-
- status = gckOS_QueryOption(mmu->os, "contiguousBase", &contiguousBase);
-
- if (gcmIS_SUCCESS(status))
- {
- status = gckOS_QueryOption(mmu->os, "contiguousSize", &contiguousSize);
-
- if (gcmIS_SUCCESS(status))
- {
- if (contiguousSize)
- {
- /* Setup flat mapping for reserved memory (VIDMEM). */
- gcmkONERROR(_FillFlatMapping(mmu, contiguousBase, contiguousSize));
- }
- }
- }
+ /* Setup [physBase - physSize) flat mapping. */
+ gcmkONERROR(_FillFlatMapping(
+ mmu,
+ gpuAddress,
+ physSize
+ ));
gcmkONERROR(_SetupDynamicSpace(mmu));
#endif
}
- mmu->safePageSize = 4096;
-
- gcmkONERROR(gckOS_AllocateContiguous(
- os,
- gcvFALSE,
- &mmu->safePageSize,
- &mmu->safePagePhysical,
- &mmu->safePageLogical
- ));
-
- gcmkONERROR(gckOS_GetPhysicalAddress(os,
- mmu->safePageLogical,
- &gpuPhysical
- ));
-
- gcmkSAFECASTPHYSADDRT(mmu->safeAddress, gpuPhysical);
-
- gckOS_ZeroMemory(mmu->safePageLogical, mmu->safePageSize);
-
- gcmkONERROR(gckQUEUE_Allocate(os, &mmu->recentFreedAddresses, 16));
-
/* Return the gckMMU object pointer. */
*Mmu = mmu;
@@ -1337,17 +1054,17 @@ OnError:
/* Roll back. */
if (mmu != gcvNULL)
{
- if (area != gcvNULL && area->mapLogical != gcvNULL)
+ if (mmu->mapLogical != gcvNULL)
{
gcmkVERIFY_OK(
- gckOS_Free(os, (gctPOINTER) area->mapLogical));
+ gckOS_Free(os, (gctPOINTER) mmu->mapLogical));
gcmkVERIFY_OK(
gckOS_FreeContiguous(os,
- area->pageTablePhysical,
- (gctPOINTER) area->pageTableLogical,
- area->pageTableSize));
+ mmu->pageTablePhysical,
+ (gctPOINTER) mmu->pageTableLogical,
+ mmu->pageTableSize));
}
if (mmu->mtlbLogical != gcvNULL)
@@ -1366,8 +1083,6 @@ OnError:
gckOS_DeleteMutex(os, mmu->pageTableMutex));
}
- gcmkVERIFY_OK(gckQUEUE_Free(os, &mmu->recentFreedAddresses));
-
/* Mark the gckMMU object as unknown. */
mmu->object.type = gcvOBJ_UNKNOWN;
@@ -1400,7 +1115,9 @@ _Destroy(
IN gckMMU Mmu
)
{
+#if gcdPROCESS_ADDRESS_SPACE
gctUINT32 i;
+#endif
gcmkHEADER_ARG("Mmu=0x%x", Mmu);
/* Verify the arguments. */
@@ -1443,26 +1160,21 @@ _Destroy(
Mmu->mtlbSize));
}
- for (i = 0; i < gcvADDRESS_AREA_COUNT; i++)
+ /* Free address space management table. */
+ if (Mmu->mapLogical != gcvNULL)
{
- gcsADDRESS_AREA_PTR area = &Mmu->area[i];
-
- /* Free address space management table. */
- if (area->mapLogical != gcvNULL)
- {
- gcmkVERIFY_OK(
- gckOS_Free(Mmu->os, (gctPOINTER) area->mapLogical));
- }
+ gcmkVERIFY_OK(
+ gckOS_Free(Mmu->os, (gctPOINTER) Mmu->mapLogical));
+ }
- if (area->pageTableLogical != gcvNULL)
- {
- /* Free page table. */
- gcmkVERIFY_OK(
- gckOS_FreeContiguous(Mmu->os,
- area->pageTablePhysical,
- (gctPOINTER) area->pageTableLogical,
- area->pageTableSize));
- }
+ if (Mmu->pageTableLogical != gcvNULL)
+ {
+ /* Free page table. */
+ gcmkVERIFY_OK(
+ gckOS_FreeContiguous(Mmu->os,
+ Mmu->pageTablePhysical,
+ (gctPOINTER) Mmu->pageTableLogical,
+ Mmu->pageTableSize));
}
/* Delete the page table mutex. */
@@ -1488,18 +1200,6 @@ _Destroy(
gcmkOS_SAFE_FREE(Mmu->os, Mmu->stlbs);
#endif
- if (Mmu->safePageLogical != gcvNULL)
- {
- gcmkVERIFY_OK(gckOS_FreeContiguous(
- Mmu->os,
- Mmu->safePagePhysical,
- Mmu->safePageLogical,
- Mmu->safePageSize
- ));
- }
-
- gcmkVERIFY_OK(gckQUEUE_Free(Mmu->os, &Mmu->recentFreedAddresses));
-
/* Mark the gckMMU object as unknown. */
Mmu->object.type = gcvOBJ_UNKNOWN;
@@ -1528,12 +1228,11 @@ _AdjustIndex(
{
gceSTATUS status;
gctUINT32 index = Index;
- gcsADDRESS_AREA_PTR area = &Mmu->area[0];
- gctUINT32_PTR map = area->mapLogical;
+ gctUINT32_PTR map = Mmu->mapLogical;
gcmkHEADER();
- for (; index < area->pageTableEntries;)
+ for (; index < Mmu->pageTableEntries;)
{
gctUINT32 result = 0;
gctUINT32 nodeSize = 0;
@@ -1644,6 +1343,47 @@ OnError:
gcmkFOOTER();
return status;
+#elif gcdMIRROR_PAGETABLE
+ gceSTATUS status;
+ gctPOINTER pointer;
+
+ gcmkHEADER_ARG("Kernel=0x%08x", Kernel);
+
+ if (mirrorPageTable == gcvNULL)
+ {
+ gcmkONERROR(
+ gckOS_Allocate(Kernel->os,
+ sizeof(struct _gcsMirrorPageTable),
+ &pointer));
+ mirrorPageTable = pointer;
+
+ gcmkONERROR(
+ gckOS_ZeroMemory(mirrorPageTable,
+ sizeof(struct _gcsMirrorPageTable)));
+
+ gcmkONERROR(
+ gckOS_CreateMutex(Kernel->os, &mirrorPageTable->mutex));
+ }
+
+ gcmkONERROR(_Construct(Kernel, MmuSize, Mmu));
+
+ mirrorPageTable->mmus[mirrorPageTable->reference] = *Mmu;
+
+ mirrorPageTable->hardwares[mirrorPageTable->reference] = Kernel->hardware;
+
+ mirrorPageTable->reference++;
+
+ gcmkFOOTER_ARG("mirrorPageTable->reference=%lu", mirrorPageTable->reference);
+ return gcvSTATUS_OK;
+
+OnError:
+ if (mirrorPageTable && mirrorPageTable->reference == 0)
+ {
+ gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Kernel->os, mirrorPageTable));
+ }
+
+ gcmkFOOTER();
+ return status;
#else
return _Construct(Kernel, MmuSize, Mmu);
#endif
@@ -1670,6 +1410,16 @@ gckMMU_Destroy(
}
return gcvSTATUS_OK;
+#elif gcdMIRROR_PAGETABLE
+ mirrorPageTable->reference--;
+
+ if (mirrorPageTable->reference == 0)
+ {
+ gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Mmu->os, mirrorPageTable->mutex));
+ gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Mmu->os, mirrorPageTable));
+ }
+
+ return _Destroy(Mmu);
#else
return _Destroy(Mmu);
#endif
@@ -1703,7 +1453,6 @@ _AllocatePages(
IN gckMMU Mmu,
IN gctSIZE_T PageCount,
IN gceSURF_TYPE Type,
- IN gctBOOL Secure,
OUT gctPOINTER * PageTable,
OUT gctUINT32 * Address
)
@@ -1715,7 +1464,6 @@ _AllocatePages(
gctBOOL gotIt;
gctUINT32 address;
gctUINT32 pageCount;
- gcsADDRESS_AREA_PTR area = _GetProcessArea(Mmu, Secure);
gcmkHEADER_ARG("Mmu=0x%x PageCount=%lu", Mmu, PageCount);
@@ -1724,7 +1472,7 @@ _AllocatePages(
gcmkVERIFY_ARGUMENT(PageCount > 0);
gcmkVERIFY_ARGUMENT(PageTable != gcvNULL);
- if (PageCount > area->pageTableEntries)
+ if (PageCount > Mmu->pageTableEntries)
{
/* Not enough pages avaiable. */
gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
@@ -1732,19 +1480,14 @@ _AllocatePages(
gcmkSAFECASTSIZET(pageCount, PageCount);
-#if gcdBOUNDARY_CHECK
- /* Extra pages as bounary. */
- pageCount += gcdBOUNDARY_CHECK * 2;
-#endif
-
/* Grab the mutex. */
gcmkONERROR(gckOS_AcquireMutex(Mmu->os, Mmu->pageTableMutex, gcvINFINITE));
mutex = gcvTRUE;
/* Cast pointer to page table. */
- for (map = area->mapLogical, gotIt = gcvFALSE; !gotIt;)
+ for (map = Mmu->mapLogical, gotIt = gcvFALSE; !gotIt;)
{
- index = area->heapList;
+ index = Mmu->heapList;
if ((Mmu->hardware->mmuVersion == 0) && (Type == gcvSURF_VERTEX))
{
@@ -1758,10 +1501,10 @@ _AllocatePages(
}
/* Walk the heap list. */
- for (; !gotIt && (index < area->pageTableEntries);)
+ for (; !gotIt && (index < Mmu->pageTableEntries);)
{
/* Check the node type. */
- switch (gcmENTRY_TYPE(map[index]))
+ switch (gcmENTRY_TYPE(_ReadPageEntry(&map[index])))
{
case gcvMMU_SINGLE:
/* Single odes are valid if we only need 1 page. */
@@ -1773,13 +1516,13 @@ _AllocatePages(
{
/* Move to next node. */
previous = index;
- index = map[index] >> 8;
+ index = _ReadPageEntry(&map[index]) >> 8;
}
break;
case gcvMMU_FREE:
/* Test if the node has enough space. */
- if (pageCount <= (map[index] >> 8))
+ if (pageCount <= (_ReadPageEntry(&map[index]) >> 8))
{
gotIt = gcvTRUE;
}
@@ -1787,7 +1530,7 @@ _AllocatePages(
{
/* Move to next node. */
previous = index;
- index = map[index + 1];
+ index = _ReadPageEntry(&map[index + 1]);
}
break;
@@ -1798,12 +1541,12 @@ _AllocatePages(
}
/* Test if we are out of memory. */
- if (index >= area->pageTableEntries)
+ if (index >= Mmu->pageTableEntries)
{
- if (area->freeNodes)
+ if (Mmu->freeNodes)
{
/* Time to move out the trash! */
- gcmkONERROR(_Collect(area));
+ gcmkONERROR(_Collect(Mmu));
/* We are going to search from start, so reset previous to start. */
previous = ~0U;
@@ -1816,36 +1559,36 @@ _AllocatePages(
}
}
- switch (gcmENTRY_TYPE(map[index]))
+ switch (gcmENTRY_TYPE(_ReadPageEntry(&map[index])))
{
case gcvMMU_SINGLE:
/* Unlink single node from free list. */
gcmkONERROR(
- _Link(area, previous, map[index] >> 8));
+ _Link(Mmu, previous, _ReadPageEntry(&map[index]) >> 8));
break;
case gcvMMU_FREE:
/* Check how many pages will be left. */
- left = (map[index] >> 8) - pageCount;
+ left = (_ReadPageEntry(&map[index]) >> 8) - pageCount;
switch (left)
{
case 0:
/* The entire node is consumed, just unlink it. */
gcmkONERROR(
- _Link(area, previous, map[index + 1]));
+ _Link(Mmu, previous, _ReadPageEntry(&map[index + 1])));
break;
case 1:
/* One page will remain. Convert the node to a single node and
** advance the index. */
- map[index] = (map[index + 1] << 8) | gcvMMU_SINGLE;
+ _WritePageEntry(&map[index], (_ReadPageEntry(&map[index + 1]) << 8) | gcvMMU_SINGLE);
index ++;
break;
default:
/* Enough pages remain for a new node. However, we will just adjust
** the size of the current node and advance the index. */
- map[index] = (left << 8) | gcvMMU_FREE;
+ _WritePageEntry(&map[index], (left << 8) | gcvMMU_FREE);
index += left;
break;
}
@@ -1853,32 +1596,10 @@ _AllocatePages(
}
/* Mark node as used. */
- gcmkONERROR(_FillMap(&map[index], pageCount, gcvMMU_USED));
-
-#if gcdBOUNDARY_CHECK
- index += gcdBOUNDARY_CHECK;
-#endif
-
- /* Record pageCount of allocated node at the beginning of node. */
- if (pageCount == 1)
- {
- map[index] = (~((1U<<8)-1)) | gcvMMU_USED;
- }
- else
- {
- map[index] = (pageCount << 8) | gcvMMU_USED;
- }
+ gcmkONERROR(_FillPageTable(&map[index], pageCount, gcvMMU_USED));
- if (area->pageTableLogical != gcvNULL)
- {
/* Return pointer to page table. */
- *PageTable = &area->pageTableLogical[index];
- }
- else
- {
- /* Page table for secure area is handled in trust application. */
- *PageTable = gcvNULL;
- }
+ *PageTable = &Mmu->pageTableLogical[index];
/* Build virtual address. */
if (Mmu->hardware->mmuVersion == 0)
@@ -1889,7 +1610,7 @@ _AllocatePages(
else
{
gctUINT32 masterOffset = index / gcdMMU_STLB_4K_ENTRY_NUM
- + area->dynamicMappingStart;
+ + Mmu->dynamicMappingStart;
gctUINT32 slaveOffset = index % gcdMMU_STLB_4K_ENTRY_NUM;
address = (masterOffset << gcdMMU_MTLB_SHIFT)
@@ -1946,8 +1667,6 @@ OnError:
gceSTATUS
_FreePages(
IN gckMMU Mmu,
- IN gctBOOL Secure,
- IN gctUINT32 Address,
IN gctPOINTER PageTable,
IN gctSIZE_T PageCount
)
@@ -1956,92 +1675,57 @@ _FreePages(
gceSTATUS status;
gctBOOL acquired = gcvFALSE;
gctUINT32 pageCount;
- gcuQUEUEDATA data;
- gcsADDRESS_AREA_PTR area = _GetProcessArea(Mmu, Secure);
gcmkHEADER_ARG("Mmu=0x%x PageTable=0x%x PageCount=%lu",
Mmu, PageTable, PageCount);
/* Verify the arguments. */
gcmkVERIFY_OBJECT(Mmu, gcvOBJ_MMU);
+ gcmkVERIFY_ARGUMENT(PageTable != gcvNULL);
gcmkVERIFY_ARGUMENT(PageCount > 0);
gcmkSAFECASTSIZET(pageCount, PageCount);
-#if gcdBOUNDARY_CHECK
- pageCount += gcdBOUNDARY_CHECK * 2;
-#endif
-
/* Get the node by index. */
- node = area->mapLogical + ((gctUINT32_PTR)PageTable - area->pageTableLogical);
-
-#if gcdBOUNDARY_CHECK
- node -= gcdBOUNDARY_CHECK;
-#endif
+ node = Mmu->mapLogical + ((gctUINT32_PTR)PageTable - Mmu->pageTableLogical);
gcmkONERROR(gckOS_AcquireMutex(Mmu->os, Mmu->pageTableMutex, gcvINFINITE));
acquired = gcvTRUE;
+#if gcdMMU_CLEAR_VALUE
if (Mmu->hardware->mmuVersion == 0)
{
- _FillPageTable(PageTable, pageCount, Mmu->safeAddress);
- }
-
- if (PageCount != _GetPageCountOfUsedNode(node))
- {
- gcmkONERROR(gcvSTATUS_INVALID_REQUEST);
+ _FillPageTable(PageTable, pageCount, gcdMMU_CLEAR_VALUE);
}
+#endif
if (PageCount == 1)
{
/* Single page node. */
- node[0] = (~((1U<<8)-1)) | gcvMMU_SINGLE;
-
- if (PageTable != gcvNULL)
- {
+ _WritePageEntry(node, (~((1U<<8)-1)) | gcvMMU_SINGLE);
#if gcdUSE_MMU_EXCEPTION
/* Enable exception */
_WritePageEntry(PageTable, (1 << 1));
-#else
- _WritePageEntry(PageTable, 0);
#endif
}
- }
else
{
/* Mark the node as free. */
- node[0] = (pageCount << 8) | gcvMMU_FREE;
- node[1] = ~0U;
+ _WritePageEntry(node, (pageCount << 8) | gcvMMU_FREE);
+ _WritePageEntry(node + 1, ~0U);
- if (PageTable != gcvNULL)
- {
#if gcdUSE_MMU_EXCEPTION
/* Enable exception */
gcmkVERIFY_OK(_FillPageTable(PageTable, pageCount, 1 << 1));
-#else
- gcmkVERIFY_OK(_FillPageTable(PageTable, pageCount, 0));
#endif
}
- }
/* We have free nodes. */
- area->freeNodes = gcvTRUE;
-
- /* Record freed address range. */
- data.addressData.start = Address;
- data.addressData.end = Address + (gctUINT32)PageCount * 4096;
- gckQUEUE_Enqueue(&Mmu->recentFreedAddresses, &data);
+ Mmu->freeNodes = gcvTRUE;
gcmkVERIFY_OK(gckOS_ReleaseMutex(Mmu->os, Mmu->pageTableMutex));
acquired = gcvFALSE;
-#if gcdENABLE_TRUST_APPLICATION
- if (Mmu->hardware->secureMode == gcvSECURE_IN_TA)
- {
- gckKERNEL_SecurityUnmapMemory(Mmu->hardware->kernel, Address, (gctUINT32)PageCount);
- }
-#endif
-
/* Success. */
gcmkFOOTER_NO();
return gcvSTATUS_OK;
@@ -2065,7 +1749,7 @@ gckMMU_AllocatePages(
)
{
return gckMMU_AllocatePagesEx(
- Mmu, PageCount, gcvSURF_TYPE_UNKNOWN, gcvFALSE, PageTable, Address);
+ Mmu, PageCount, gcvSURF_TYPE_UNKNOWN, PageTable, Address);
}
gceSTATUS
@@ -2073,39 +1757,93 @@ gckMMU_AllocatePagesEx(
IN gckMMU Mmu,
IN gctSIZE_T PageCount,
IN gceSURF_TYPE Type,
- IN gctBOOL Secure,
OUT gctPOINTER * PageTable,
OUT gctUINT32 * Address
)
{
-#if gcdDISABLE_GPU_VIRTUAL_ADDRESS
- gcmkPRINT("GPU virtual address is disabled.");
- return gcvSTATUS_NOT_SUPPORTED;
+#if gcdMIRROR_PAGETABLE
+ gceSTATUS status;
+ gckMMU mmu;
+ gctBOOL acquired = gcvFALSE;
+
+ gcmkHEADER();
+
+ gckOS_AcquireMutex(Mmu->os, mirrorPageTable->mutex, gcvINFINITE);
+ acquired = gcvTRUE;
+
+ /* Get first mmu. */
+ mmu = mirrorPageTable->mmus[0];
+
+ gcmkVERIFY_OBJECT(mmu, gcvOBJ_MMU);
+
+ /* Allocate page table from first mmu. */
+ gcmkONERROR(_AllocatePages(mmu, PageCount, Type, PageTable, Address));
+
+ gckOS_ReleaseMutex(Mmu->os, mirrorPageTable->mutex);
+ acquired = gcvFALSE;
+
+ gcmkFOOTER_NO();
+ return gcvSTATUS_OK;
+
+OnError:
+ if (acquired)
+ {
+ gckOS_ReleaseMutex(Mmu->os, mirrorPageTable->mutex);
+ }
+
+ gcmkFOOTER();
+ return status;
#else
- return _AllocatePages(Mmu, PageCount, Type, Secure, PageTable, Address);
+ return _AllocatePages(Mmu, PageCount, Type, PageTable, Address);
#endif
}
gceSTATUS
gckMMU_FreePages(
IN gckMMU Mmu,
- IN gctBOOL Secure,
- IN gctUINT32 Address,
IN gctPOINTER PageTable,
IN gctSIZE_T PageCount
)
{
- return _FreePages(Mmu, Secure, Address, PageTable, PageCount);
+#if gcdMIRROR_PAGETABLE
+ gctINT i;
+ gctUINT32 offset;
+ gckMMU mmu = mirrorPageTable->mmus[0];
+
+ gckOS_AcquireMutex(Mmu->os, mirrorPageTable->mutex, gcvINFINITE);
+
+ gcmkVERIFY_OK(_FreePages(mmu, PageTable, PageCount));
+
+ offset = (gctUINT32)PageTable - (gctUINT32)mmu->pageTableLogical;
+
+ for (i = 1; i < (gctINT)mirrorPageTable->reference; i++)
+ {
+ mmu = mirrorPageTable->mmus[i];
+
+ gcmkVERIFY_OK(_FreePages(mmu, mmu->pageTableLogical + offset/4, PageCount));
+ }
+
+ gckOS_ReleaseMutex(Mmu->os, mirrorPageTable->mutex);
+
+ return gcvSTATUS_OK;
+#else
+ return _FreePages(Mmu, PageTable, PageCount);
+#endif
}
gceSTATUS
gckMMU_SetPage(
IN gckMMU Mmu,
IN gctPHYS_ADDR_T PageAddress,
- IN gctBOOL Writable,
IN gctUINT32 *PageEntry
)
{
+#if gcdMIRROR_PAGETABLE
+ gctUINT32_PTR pageEntry;
+ gctINT i;
+ gckMMU mmu = mirrorPageTable->mmus[0];
+ gctUINT32 offset = (gctUINT32)PageEntry - (gctUINT32)mmu->pageTableLogical;
+#endif
gctUINT32 addressExt;
gctUINT32 address;
@@ -2121,14 +1859,37 @@ gckMMU_SetPage(
/* [39:32]. */
addressExt = (gctUINT32)((PageAddress >> 32) & 0xFF);
+#if gcdMIRROR_PAGETABLE
+ /* Set first mmu. */
+ Mmu = mmu;
+#endif
+
if (Mmu->hardware->mmuVersion == 0)
{
_WritePageEntry(PageEntry, address);
}
else
{
- _WritePageEntry(PageEntry, _SetPage(address, addressExt, gcvTRUE));
+ _WritePageEntry(PageEntry, _SetPage(address, addressExt));
+ }
+
+#if gcdMIRROR_PAGETABLE
+ for (i = 1; i < (gctINT)mirrorPageTable->reference; i++)
+ {
+ mmu = mirrorPageTable->mmus[i];
+
+ pageEntry = mmu->pageTableLogical + offset / 4;
+
+ if (mmu->hardware->mmuVersion == 0)
+ {
+ _WritePageEntry(pageEntry, address);
+ }
+ else
+ {
+ _WritePageEntry(pageEntry, _SetPage(address, addressExt));
+ }
}
+#endif
/* Success. */
gcmkFOOTER_NO();
@@ -2167,6 +1928,13 @@ gckMMU_GetPageEntry(
| gcdMMU_MTLB_PRESENT
;
+ if (ace)
+ {
+ mtlbEntry = mtlbEntry
+ /* Secure */
+ | (1 << 4);
+ }
+
/* Insert Slave TLB address to Master TLB entry.*/
_WritePageEntry(Mmu->mtlbLogical + offset, mtlbEntry);
@@ -2191,22 +1959,22 @@ _CheckMap(
)
{
gceSTATUS status;
- gctUINT32_PTR map = area->mapLogical;
+ gctUINT32_PTR map = Mmu->mapLogical;
gctUINT32 index;
- for (index = area->heapList; index < area->pageTableEntries;)
+ for (index = Mmu->heapList; index < Mmu->pageTableEntries;)
{
/* Check the node type. */
- switch (gcmENTRY_TYPE(map[index]))
+ switch (gcmENTRY_TYPE(_ReadPageEntry(&map[index])))
{
case gcvMMU_SINGLE:
/* Move to next node. */
- index = map[index] >> 8;
+ index = _ReadPageEntry(&map[index]) >> 8;
break;
case gcvMMU_FREE:
/* Move to next node. */
- index = map[index + 1];
+ index = _ReadPageEntry(&map[index + 1]);
break;
default:
@@ -2224,23 +1992,97 @@ OnError:
gceSTATUS
gckMMU_FlatMapping(
IN gckMMU Mmu,
- IN gctUINT32 Physical,
- IN gctUINT32 NumPages
+ IN gctUINT32 Physical
)
{
gceSTATUS status;
gctUINT32 index = _AddressToIndex(Mmu, Physical);
gctUINT32 i;
+ gctBOOL gotIt = gcvFALSE;
+ gctUINT32_PTR map = Mmu->mapLogical;
+ gctUINT32 previous = ~0U;
gctUINT32_PTR pageTable;
- for (i = 0; i < NumPages; i++)
+ gckMMU_GetPageEntry(Mmu, Physical, &pageTable);
+
+ _WritePageEntry(pageTable, _SetPage(Physical));
+
+ if (map)
{
- gckMMU_GetPageEntry(Mmu, Physical + i * 4096, &pageTable);
+ /* Find node which contains index. */
+ for (i = 0; !gotIt && (i < Mmu->pageTableEntries);)
+ {
+ gctUINT32 numPages;
- _WritePageEntry(pageTable, _SetPage(Physical + i * 4096, 0));
- }
+ switch (gcmENTRY_TYPE(_ReadPageEntry(&map[i])))
+ {
+ case gcvMMU_SINGLE:
+ if (i == index)
+ {
+ gotIt = gcvTRUE;
+ }
+ else
+ {
+ previous = i;
+ i = _ReadPageEntry(&map[i]) >> 8;
+ }
+ break;
- gcmkONERROR(_FillFlatMappingInMap(Mmu, index, NumPages));
+ case gcvMMU_FREE:
+ numPages = _ReadPageEntry(&map[i]) >> 8;
+ if (index >= i && index < i + numPages)
+ {
+ gotIt = gcvTRUE;
+ }
+ else
+ {
+ previous = i;
+ i = _ReadPageEntry(&map[i + 1]);
+ }
+ break;
+
+ default:
+ gcmkFATAL("MMU table correcupted at index %u!", index);
+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
+ }
+ }
+
+ switch (gcmENTRY_TYPE(_ReadPageEntry(&map[i])))
+ {
+ case gcvMMU_SINGLE:
+ /* Unlink single node from free list. */
+ gcmkONERROR(
+ _Link(Mmu, previous, _ReadPageEntry(&map[i]) >> 8));
+ break;
+
+ case gcvMMU_FREE:
+ /* Split the node. */
+ {
+ gctUINT32 start;
+ gctUINT32 next = _ReadPageEntry(&map[i+1]);
+ gctUINT32 total = _ReadPageEntry(&map[i]) >> 8;
+ gctUINT32 countLeft = index - i;
+ gctUINT32 countRight = total - countLeft - 1;
+
+ if (countLeft)
+ {
+ start = i;
+ _AddFree(Mmu, previous, start, countLeft);
+ previous = start;
+ }
+
+ if (countRight)
+ {
+ start = index + 1;
+ _AddFree(Mmu, previous, start, countRight);
+ previous = start;
+ }
+
+ _Link(Mmu, previous, next);
+ }
+ break;
+ }
+ }
return gcvSTATUS_OK;
@@ -2250,6 +2092,8 @@ OnError:
return status;
}
+
+
gceSTATUS
gckMMU_FreePagesEx(
IN gckMMU Mmu,
@@ -2274,24 +2118,24 @@ gckMMU_FreePagesEx(
gcmkVERIFY_ARGUMENT(PageCount > 0);
/* Get the node by index. */
- node = area->mapLogical + _AddressToIndex(Mmu, Address);
+ node = Mmu->mapLogical + _AddressToIndex(Mmu, Address);
gcmkONERROR(gckOS_AcquireMutex(Mmu->os, Mmu->pageTableMutex, gcvINFINITE));
if (PageCount == 1)
{
/* Single page node. */
- node[0] = (~((1U<<8)-1)) | gcvMMU_SINGLE;
+ _WritePageEntry(node, (~((1U<<8)-1)) | gcvMMU_SINGLE);
}
else
{
/* Mark the node as free. */
- node[0] = (PageCount << 8) | gcvMMU_FREE;
- node[1] = ~0U;
+ _WritePageEntry(node, (PageCount << 8) | gcvMMU_FREE);
+ _WritePageEntry(node + 1, ~0U);
}
/* We have free nodes. */
- area->freeNodes = gcvTRUE;
+ Mmu->freeNodes = gcvTRUE;
#if gcdUSE_MMU_EXCEPTION
for (i = 0; i < PageCount; i++)
@@ -2323,9 +2167,7 @@ gckMMU_Flush(
IN gceSURF_TYPE Type
)
{
-#if !gcdPROCESS_ADDRESS_SPACE
gckHARDWARE hardware;
-#endif
gctUINT32 mask;
gctINT i;
@@ -2338,8 +2180,6 @@ gckMMU_Flush(
mask = gcvPAGE_TABLE_DIRTY_BIT_OTHER;
}
- i = 0;
-
#if gcdPROCESS_ADDRESS_SPACE
for (i = 0; i < gcdMAX_GPU_COUNT; i++)
{
@@ -2356,24 +2196,19 @@ gckMMU_Flush(
gcmkVERIFY_OK(gckOS_AtomSetMask(hardware->pageTableDirty, mask));
}
}
+#elif gcdMIRROR_PAGETABLE
+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
+ {
+ hardware = mirrorPageTable->hardwares[i];
+
+ /* Notify cores who use this page table. */
+ gcmkVERIFY_OK(
+ gckOS_AtomSetMask(hardware->pageTableDirty, mask));
+ }
#else
hardware = Mmu->hardware;
gcmkVERIFY_OK(
gckOS_AtomSetMask(hardware->pageTableDirty, mask));
-
- {
- gcsLISTHEAD_PTR hardwareHead;
- gcmkLIST_FOR_EACH(hardwareHead, &Mmu->hardwareList)
- {
- hardware = gcmCONTAINEROF(hardwareHead, _gckHARDWARE, mmuHead);
-
- if (hardware != Mmu->hardware)
- {
- gcmkVERIFY_OK(
- gckOS_AtomSetMask(hardware->pageTableDirty, mask));
- }
- }
- }
#endif
#endif
@@ -2394,7 +2229,6 @@ gckMMU_DumpPageTableEntry(
gctUINT32 index;
gctUINT32 mtlb, stlb;
#endif
- gcsADDRESS_AREA_PTR area = &Mmu->area[0];
gcmkHEADER_ARG("Mmu=0x%08X Address=0x%08X", Mmu, Address);
gcmkVERIFY_OBJECT(Mmu, gcvOBJ_MMU);
@@ -2414,13 +2248,13 @@ gckMMU_DumpPageTableEntry(
#else
mtlb = (Address & gcdMMU_MTLB_MASK) >> gcdMMU_MTLB_SHIFT;
- if (mtlb >= area->dynamicMappingStart)
+ if (mtlb >= Mmu->dynamicMappingStart)
{
stlb = (Address & gcdMMU_STLB_4K_MASK) >> gcdMMU_STLB_4K_SHIFT;
- pageTable = area->pageTableLogical;
+ pageTable = Mmu->pageTableLogical;
- index = (mtlb - area->dynamicMappingStart)
+ index = (mtlb - Mmu->dynamicMappingStart)
* gcdMMU_STLB_4K_ENTRY_NUM
+ stlb;
@@ -2453,178 +2287,6 @@ gckMMU_DumpPageTableEntry(
return gcvSTATUS_OK;
}
-void
-gckMMU_CheckSaftPage(
- IN gckMMU Mmu
- )
-{
- gctUINT8_PTR safeLogical = Mmu->safePageLogical;
- gctUINT32 offsets[] = {
- 0,
- 64,
- 128,
- 256,
- 2560,
- 4000
- };
-
- gctUINT32 i = 0;
-
- while (i < gcmCOUNTOF(offsets))
- {
- if (safeLogical[offsets[i]] != 0)
- {
- gcmkPRINT("%s(%d) safe page is over written [%d] = %x",
- __FUNCTION__, __LINE__, i, safeLogical[offsets[i]]);
- }
- }
-}
-
-void
-gckMMU_DumpAddressSpace(
- IN gckMMU Mmu
- )
-{
- gctUINT i;
- gctUINT next;
- gcsADDRESS_AREA_PTR area = &Mmu->area[0];
- gctUINT32_PTR map = area->mapLogical;
- gctBOOL used = gcvFALSE;
- gctUINT32 numPages;
-
- /* Grab the mutex. */
- gcmkVERIFY_OK(gckOS_AcquireMutex(Mmu->os, Mmu->pageTableMutex, gcvINFINITE));
-
- /* Find node which contains index. */
- for (i = 0; i < area->pageTableEntries; i = next)
- {
- switch (gcmENTRY_TYPE(map[i]))
- {
- case gcvMMU_SINGLE:
- numPages = 1;
- next = i + numPages;
- used = gcvFALSE;
- break;
-
- case gcvMMU_FREE:
- numPages = map[i] >> 8;
- next = i + numPages;
- used = gcvFALSE;
- break;
-
- case gcvMMU_USED:
- numPages = 1;
- next = i + numPages;
- used = gcvTRUE;
- break;
-
- default:
- gcmkFATAL("MMU table correcupted at index %u!", i);
- return;
- }
-
- if (!used)
- {
- gcmkPRINT("Available Range [%d - %d)", i, i + numPages);
- }
- }
-
- /* Release the mutex. */
- gcmkVERIFY_OK(gckOS_ReleaseMutex(Mmu->os, Mmu->pageTableMutex));
-
-}
-
-void
-gckMMU_DumpRecentFreedAddress(
- IN gckMMU Mmu
- )
-{
- gckQUEUE queue = &Mmu->recentFreedAddresses;
- gctUINT32 i;
- gcuQUEUEDATA *data;
-
- if (queue->count)
- {
- gcmkPRINT(" Recent %d freed GPU address ranges:", queue->count);
-
- for (i = 0; i < queue->count; i++)
- {
- gckQUEUE_GetData(queue, i, &data);
-
- gcmkPRINT(" [%08X - %08X]", data->addressData.start, data->addressData.end);
- }
- }
-}
-
-gceSTATUS
-gckMMU_FillFlatMapping(
- IN gckMMU Mmu,
- IN gctUINT32 PhysBase,
- IN gctSIZE_T Size
- )
-{
- gceSTATUS status;
- gckHARDWARE hardware = Mmu->hardware;
-
- if (hardware->mmuVersion)
- {
- gcmkONERROR(_FillFlatMapping(Mmu, PhysBase, Size));
- }
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-
-gceSTATUS
-gckMMU_IsFlatMapped(
- IN gckMMU Mmu,
- OUT gctUINT32 Physical,
- OUT gctBOOL *In
- )
-{
- gceSTATUS status;
-
- gcmkHEADER();
-
- gcmkVERIFY_ARGUMENT(In != gcvNULL);
-
- if (gckHARDWARE_IsFeatureAvailable(Mmu->hardware, gcvFEATURE_MMU) == gcvFALSE)
- {
- gcmkONERROR(gcvSTATUS_NOT_SUPPORTED);
- }
-
- *In = (Physical >= Mmu->flatMappingStart) && (Physical < Mmu->flatMappingEnd)
- ? gcvTRUE
- : gcvFALSE;
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- gcmkFOOTER();
- return status;
-}
-
-gceSTATUS
-gckMMU_AttachHardware(
- IN gckMMU Mmu,
- IN gckHARDWARE Hardware
- )
-{
- gcmkHEADER();
-
- gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
-
- gcmkTRACE_ZONE(gcvLEVEL_INFO, _GC_OBJ_ZONE, "Attach core %d", Hardware->core);
-
- gcsLIST_Add(&Hardware->mmuHead, &Mmu->hardwareList);
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-}
-
/******************************************************************************
****************************** T E S T C O D E ******************************
******************************************************************************/
diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_security_v1.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_security_v1.c
deleted file mode 100644
index 3567ffa1348f..000000000000
--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_security_v1.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/****************************************************************************
-*
-* The MIT License (MIT)
-*
-* Copyright (c) 2014 - 2016 Vivante Corporation
-*
-* Permission is hereby granted, free of charge, to any person obtaining a
-* copy of this software and associated documentation files (the "Software"),
-* to deal in the Software without restriction, including without limitation
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,
-* and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-* DEALINGS IN THE SOFTWARE.
-*
-*****************************************************************************
-*
-* The GPL License (GPL)
-*
-* Copyright (C) 2014 - 2016 Vivante Corporation
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software Foundation,
-* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*
-*****************************************************************************
-*
-* Note: This software is released under dual MIT and GPL licenses. A
-* recipient may use this file under the terms of either the MIT license or
-* GPL License. If you wish to use only one license not the other, you can
-* indicate your decision by deleting one of the above license notices in your
-* version of this file.
-*
-*****************************************************************************/
-
-
-#include "gc_hal_kernel_precomp.h"
-
-
-
-
-#define _GC_OBJ_ZONE gcvZONE_KERNEL
-
-#if gcdENABLE_TRUST_APPLICATION
-
-/*
-** Open a security service channel.
-*/
-gceSTATUS
-gckKERNEL_SecurityOpen(
- IN gckKERNEL Kernel,
- IN gctUINT32 GPU,
- OUT gctUINT32 *Channel
- )
-{
- gceSTATUS status;
-
- gcmkONERROR(gckOS_OpenSecurityChannel(Kernel->os, Kernel->core, Channel));
- gcmkONERROR(gckOS_InitSecurityChannel(*Channel));
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-
-/*
-** Close a security service channel
-*/
-gceSTATUS
-gckKERNEL_SecurityClose(
- IN gctUINT32 Channel
- )
-{
- return gcvSTATUS_OK;
-}
-
-/*
-** Security service interface.
-*/
-gceSTATUS
-gckKERNEL_SecurityCallService(
- IN gctUINT32 Channel,
- IN OUT gcsTA_INTERFACE * Interface
-)
-{
- gceSTATUS status;
- gcmkHEADER();
-
- gcmkVERIFY_ARGUMENT(Interface != gcvNULL);
-
- gckOS_CallSecurityService(Channel, Interface);
-
- status = Interface->result;
-
- gcmkONERROR(status);
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- gcmkFOOTER();
- return status;
-}
-
-gceSTATUS
-gckKERNEL_SecurityStartCommand(
- IN gckKERNEL Kernel,
- IN gctUINT32 Address,
- IN gctUINT32 Bytes
- )
-{
- gceSTATUS status;
- gcsTA_INTERFACE iface;
-
- gcmkHEADER();
-
- iface.command = KERNEL_START_COMMAND;
- iface.u.StartCommand.gpu = Kernel->core;
- iface.u.StartCommand.address = Address;
- iface.u.StartCommand.bytes = Bytes;
-
- gcmkONERROR(gckKERNEL_SecurityCallService(Kernel->securityChannel, &iface));
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- gcmkFOOTER();
- return status;
-}
-
-gceSTATUS
-gckKERNEL_SecurityAllocateSecurityMemory(
- IN gckKERNEL Kernel,
- IN gctUINT32 Bytes,
- OUT gctUINT32 * Handle
- )
-{
- gceSTATUS status;
- gcsTA_INTERFACE iface;
-
- gcmkHEADER();
-
- iface.command = KERNEL_ALLOCATE_SECRUE_MEMORY;
- iface.u.AllocateSecurityMemory.bytes = Bytes;
-
- gcmkONERROR(gckKERNEL_SecurityCallService(Kernel->securityChannel, &iface));
-
- *Handle = iface.u.AllocateSecurityMemory.memory_handle;
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- gcmkFOOTER();
- return status;
-}
-
-gceSTATUS
-gckKERNEL_SecurityMapMemory(
- IN gckKERNEL Kernel,
- IN gctUINT32 *PhysicalArray,
- IN gctPHYS_ADDR_T Physical,
- IN gctUINT32 PageCount,
- OUT gctUINT32 * GPUAddress
- )
-{
- gceSTATUS status;
- gcsTA_INTERFACE iface;
-
- gcmkHEADER();
-
- iface.command = KERNEL_MAP_MEMORY;
-
- iface.u.MapMemory.physicals = PhysicalArray;
- iface.u.MapMemory.physical = Physical;
- iface.u.MapMemory.pageCount = PageCount;
- iface.u.MapMemory.gpuAddress = *GPUAddress;
-
- gcmkONERROR(gckKERNEL_SecurityCallService(Kernel->securityChannel, &iface));
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- gcmkFOOTER();
- return status;
-}
-
-gceSTATUS
-gckKERNEL_SecurityDumpMMUException(
- IN gckKERNEL Kernel
- )
-{
- gceSTATUS status;
- gcsTA_INTERFACE iface;
-
- gcmkHEADER();
-
- iface.command = KERNEL_DUMP_MMU_EXCEPTION;
-
- gcmkONERROR(gckKERNEL_SecurityCallService(Kernel->securityChannel, &iface));
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- gcmkFOOTER();
- return status;
-}
-
-
-
-gceSTATUS
-gckKERNEL_SecurityUnmapMemory(
- IN gckKERNEL Kernel,
- IN gctUINT32 GPUAddress,
- IN gctUINT32 PageCount
- )
-{
- gceSTATUS status;
- gcsTA_INTERFACE iface;
-
- gcmkHEADER();
-
- iface.command = KERNEL_UNMAP_MEMORY;
-
- iface.u.UnmapMemory.gpuAddress = GPUAddress;
- iface.u.UnmapMemory.pageCount = PageCount;
-
- gcmkONERROR(gckKERNEL_SecurityCallService(Kernel->securityChannel, &iface));
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- gcmkFOOTER();
- return status;
-}
-
-#endif
diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c
index 5df1a13f3b7a..1443fcc1846d 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c
+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c
@@ -252,63 +252,143 @@ gceSTATUS gckVGKERNEL_Destroy(
/*******************************************************************************
**
-** gckVGKERNEL_BottomHalfUnlockVideoMemory
+** gckKERNEL_AllocateLinearMemory
**
-** Unlock video memory from gpu.
+** Function walks all required memory pools and allocates the requested
+** amount of video memory.
**
** INPUT:
**
** gckKERNEL Kernel
** Pointer to an gckKERNEL object.
**
-** gctUINT32 ProcessID
-** Process ID owning this memory.
+** gcePOOL * Pool
+** Pointer the desired memory pool.
**
-** gctPOINTER Pointer
-** Video memory to be unlock.
+** gctSIZE_T Bytes
+** Number of bytes to allocate.
+**
+** gctSIZE_T Alignment
+** Required buffer alignment.
+**
+** gceSURF_TYPE Type
+** Surface type.
+**
+** OUTPUT:
+**
+** gcePOOL * Pool
+** Pointer to the actual pool where the memory was allocated.
+**
+** gcuVIDMEM_NODE_PTR * Node
+** Allocated node.
*/
gceSTATUS
-gckVGKERNEL_BottomHalfUnlockVideoMemory(
+gckVGKERNEL_AllocateLinearMemory(
IN gckKERNEL Kernel,
- IN gctUINT32 ProcessID,
- IN gctUINT32 Node
+ IN OUT gcePOOL * Pool,
+ IN gctSIZE_T Bytes,
+ IN gctUINT32 Alignment,
+ IN gceSURF_TYPE Type,
+ OUT gcuVIDMEM_NODE_PTR * Node
)
{
+ gcePOOL pool;
gceSTATUS status;
- gckVIDMEM_NODE BottomHalfUnlockVideoMemory = gcvNULL;
+ gckVIDMEM videoMemory;
+
+ /* Get initial pool. */
+ switch (pool = *Pool)
+ {
+ case gcvPOOL_DEFAULT:
+ case gcvPOOL_LOCAL:
+ pool = gcvPOOL_LOCAL_INTERNAL;
+ break;
+
+ case gcvPOOL_UNIFIED:
+ pool = gcvPOOL_SYSTEM;
+ break;
+
+ default:
+ break;
+ }
do
{
- /* Remove record from process db. */
- gcmkVERIFY_OK(gckKERNEL_RemoveProcessDB(
- Kernel,
- ProcessID,
- gcvDB_VIDEO_MEMORY_LOCKED,
- gcmINT2PTR(Node)));
+ /* Verify the number of bytes to allocate. */
+ if (Bytes == 0)
+ {
+ status = gcvSTATUS_INVALID_ARGUMENT;
+ break;
+ }
- gcmkERR_BREAK(gckVIDMEM_HANDLE_Lookup(
- Kernel,
- ProcessID,
- Node,
- &BottomHalfUnlockVideoMemory));
+ if (pool == gcvPOOL_VIRTUAL)
+ {
+ /* Create a gcuVIDMEM_NODE for virtual memory. */
+ gcmkERR_BREAK(gckVIDMEM_ConstructVirtual(Kernel, gcvFALSE, Bytes, Node));
+ /* Success. */
+ break;
+ }
- gckVIDMEM_HANDLE_Dereference(Kernel, ProcessID, Node);
+ else
+ {
+ /* Get pointer to gckVIDMEM object for pool. */
+ status = gckKERNEL_GetVideoMemoryPool(Kernel, pool, &videoMemory);
+
+ if (status == gcvSTATUS_OK)
+ {
+ /* Allocate memory. */
+ status = gckVIDMEM_AllocateLinear(Kernel,
+ videoMemory,
+ Bytes,
+ Alignment,
+ Type,
+ (*Pool == gcvPOOL_SYSTEM),
+ Node);
+
+ if (status == gcvSTATUS_OK)
+ {
+ /* Memory allocated. */
+ break;
+ }
+ }
+ }
- /* Unlock video memory. */
- gcmkERR_BREAK(gckVIDMEM_Unlock(
- Kernel,
- BottomHalfUnlockVideoMemory,
- gcvSURF_TYPE_UNKNOWN,
- gcvNULL));
+ if (pool == gcvPOOL_LOCAL_INTERNAL)
+ {
+ /* Advance to external memory. */
+ pool = gcvPOOL_LOCAL_EXTERNAL;
+ }
+ else if (pool == gcvPOOL_LOCAL_EXTERNAL)
+ {
+ /* Advance to contiguous system memory. */
+ pool = gcvPOOL_SYSTEM;
+ }
+ else if (pool == gcvPOOL_SYSTEM)
+ {
+ /* Advance to virtual memory. */
+ pool = gcvPOOL_VIRTUAL;
+ }
+ else
+ {
+ /* Out of pools. */
+ break;
+ }
+ }
+ /* Loop only for multiple selection pools. */
+ while ((*Pool == gcvPOOL_DEFAULT)
+ || (*Pool == gcvPOOL_LOCAL)
+ || (*Pool == gcvPOOL_UNIFIED)
+ );
- gcmkERR_BREAK(gckVIDMEM_NODE_Dereference(
- Kernel,
- BottomHalfUnlockVideoMemory));
+ if (gcmIS_SUCCESS(status))
+ {
+ /* Return pool used for allocation. */
+ *Pool = pool;
}
- while (gcvFALSE);
- return gcvSTATUS_OK;
+ /* Return status. */
+ return status;
}
/*******************************************************************************
@@ -342,6 +422,7 @@ gceSTATUS gckVGKERNEL_Dispatch(
gcsHAL_INTERFACE * kernelInterface = Interface;
gctUINT32 processID;
gckKERNEL kernel = Kernel;
+ gctPOINTER info = gcvNULL;
gctPHYS_ADDR physical = gcvNULL;
gctPOINTER logical = gcvNULL;
gctSIZE_T bytes = 0;
@@ -357,14 +438,19 @@ gceSTATUS gckVGKERNEL_Dispatch(
/* Dispatch on command. */
switch (Interface->command)
{
+ case gcvHAL_QUERY_VIDEO_MEMORY:
+ /* Query video memory size. */
+ gcmkERR_BREAK(gckKERNEL_QueryVideoMemory(
+ Kernel, kernelInterface
+ ));
+ break;
+
case gcvHAL_QUERY_CHIP_IDENTITY:
/* Query chip identity. */
gcmkERR_BREAK(gckVGHARDWARE_QueryChipIdentity(
Kernel->vg->hardware,
&kernelInterface->u.QueryChipIdentity.chipModel,
&kernelInterface->u.QueryChipIdentity.chipRevision,
- &kernelInterface->u.QueryChipIdentity.productID,
- &kernelInterface->u.QueryChipIdentity.ecoID,
&kernelInterface->u.QueryChipIdentity.chipFeatures,
&kernelInterface->u.QueryChipIdentity.chipMinorFeatures,
&kernelInterface->u.QueryChipIdentity.chipMinorFeatures2
@@ -378,7 +464,6 @@ gceSTATUS gckVGKERNEL_Dispatch(
&kernelInterface->u.QueryCommandBuffer.information
));
break;
-
case gcvHAL_ALLOCATE_NON_PAGED_MEMORY:
bytes = (gctSIZE_T) kernelInterface->u.AllocateNonPagedMemory.bytes;
/* Allocate non-paged memory. */
@@ -396,29 +481,29 @@ gceSTATUS gckVGKERNEL_Dispatch(
break;
case gcvHAL_FREE_NON_PAGED_MEMORY:
- physical = gcmNAME_TO_PTR(kernelInterface->u.AllocateNonPagedMemory.physical);
+ physical = gcmNAME_TO_PTR(kernelInterface->u.FreeNonPagedMemory.physical);
/* Unmap user logical out of physical memory first. */
gcmkERR_BREAK(gckOS_UnmapUserLogical(
Kernel->os,
physical,
- (gctSIZE_T) kernelInterface->u.AllocateNonPagedMemory.bytes,
- gcmUINT64_TO_PTR(kernelInterface->u.AllocateNonPagedMemory.logical)
+ (gctSIZE_T) kernelInterface->u.FreeNonPagedMemory.bytes,
+ gcmUINT64_TO_PTR(kernelInterface->u.FreeNonPagedMemory.logical)
));
/* Free non-paged memory. */
gcmkERR_BREAK(gckOS_FreeNonPagedMemory(
Kernel->os,
- (gctSIZE_T) kernelInterface->u.AllocateNonPagedMemory.bytes,
+ (gctSIZE_T) kernelInterface->u.FreeNonPagedMemory.bytes,
physical,
- gcmUINT64_TO_PTR(kernelInterface->u.AllocateNonPagedMemory.logical)
+ gcmUINT64_TO_PTR(kernelInterface->u.FreeNonPagedMemory.logical)
));
- gcmRELEASE_NAME(kernelInterface->u.AllocateNonPagedMemory.physical);
+ gcmRELEASE_NAME(kernelInterface->u.FreeNonPagedMemory.physical);
break;
case gcvHAL_ALLOCATE_CONTIGUOUS_MEMORY:
- bytes = (gctSIZE_T) kernelInterface->u.AllocateNonPagedMemory.bytes;
+ bytes = (gctSIZE_T) kernelInterface->u.AllocateContiguousMemory.bytes;
/* Allocate contiguous memory. */
gcmkERR_BREAK(gckOS_AllocateContiguous(
Kernel->os,
@@ -428,40 +513,76 @@ gceSTATUS gckVGKERNEL_Dispatch(
&logical
));
- kernelInterface->u.AllocateNonPagedMemory.bytes = bytes;
- kernelInterface->u.AllocateNonPagedMemory.logical = gcmPTR_TO_UINT64(logical);
- kernelInterface->u.AllocateNonPagedMemory.physical = gcmPTR_TO_NAME(physical);
+ kernelInterface->u.AllocateContiguousMemory.bytes = bytes;
+ kernelInterface->u.AllocateContiguousMemory.logical = gcmPTR_TO_UINT64(logical);
+ kernelInterface->u.AllocateContiguousMemory.physical = gcmPTR_TO_NAME(physical);
break;
case gcvHAL_FREE_CONTIGUOUS_MEMORY:
- physical = gcmNAME_TO_PTR(kernelInterface->u.AllocateNonPagedMemory.physical);
+ physical = gcmNAME_TO_PTR(kernelInterface->u.FreeContiguousMemory.physical);
/* Unmap user logical out of physical memory first. */
gcmkERR_BREAK(gckOS_UnmapUserLogical(
Kernel->os,
physical,
- (gctSIZE_T) kernelInterface->u.AllocateNonPagedMemory.bytes,
- gcmUINT64_TO_PTR(kernelInterface->u.AllocateNonPagedMemory.logical)
+ (gctSIZE_T) kernelInterface->u.FreeContiguousMemory.bytes,
+ gcmUINT64_TO_PTR(kernelInterface->u.FreeContiguousMemory.logical)
));
/* Free contiguous memory. */
gcmkERR_BREAK(gckOS_FreeContiguous(
Kernel->os,
physical,
- gcmUINT64_TO_PTR(kernelInterface->u.AllocateNonPagedMemory.logical),
- (gctSIZE_T) kernelInterface->u.AllocateNonPagedMemory.bytes
+ gcmUINT64_TO_PTR(kernelInterface->u.FreeContiguousMemory.logical),
+ (gctSIZE_T) kernelInterface->u.FreeContiguousMemory.bytes
));
- gcmRELEASE_NAME(kernelInterface->u.AllocateNonPagedMemory.physical);
+ gcmRELEASE_NAME(kernelInterface->u.FreeContiguousMemory.physical);
break;
case gcvHAL_ALLOCATE_VIDEO_MEMORY:
gcmkERR_BREAK(gcvSTATUS_NOT_SUPPORTED);
break;
- case gcvHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY:
- gcmkERR_BREAK(gckVGKERNEL_BottomHalfUnlockVideoMemory(Kernel, processID,
- kernelInterface->u.BottomHalfUnlockVideoMemory.node));
- break;
+ case gcvHAL_ALLOCATE_LINEAR_VIDEO_MEMORY:
+ /* Allocate memory. */
+ gcmkERR_BREAK(gckKERNEL_AllocateLinearMemory(
+ Kernel, processID,
+ &kernelInterface->u.AllocateLinearVideoMemory.pool,
+ kernelInterface->u.AllocateLinearVideoMemory.bytes,
+ kernelInterface->u.AllocateLinearVideoMemory.alignment,
+ kernelInterface->u.AllocateLinearVideoMemory.type,
+ kernelInterface->u.AllocateLinearVideoMemory.flag,
+ &kernelInterface->u.AllocateLinearVideoMemory.node
+ ));
+
+ break;
+
+ case gcvHAL_RELEASE_VIDEO_MEMORY:
+ /* Free video memory. */
+ gcmkERR_BREAK(gckKERNEL_ReleaseVideoMemory(
+ Kernel, processID,
+ (gctUINT32)kernelInterface->u.ReleaseVideoMemory.node
+ ));
+ {
+ gckVIDMEM_NODE nodeObject;
+
+ /* Remove record from process db. */
+ gcmkERR_BREAK(
+ gckKERNEL_RemoveProcessDB(Kernel, processID,
+ gcvDB_VIDEO_MEMORY_LOCKED,
+ (gctPOINTER)kernelInterface->u.ReleaseVideoMemory.node));
+
+ gcmkERR_BREAK(
+ gckVIDMEM_HANDLE_Lookup(Kernel, processID,
+ (gctUINT32)kernelInterface->u.ReleaseVideoMemory.node, &nodeObject));
+
+ gckVIDMEM_HANDLE_Dereference(Kernel, processID,(gctUINT32)Interface->u.ReleaseVideoMemory.node);
+
+ gckVIDMEM_NODE_Dereference(Kernel, nodeObject);
+ }
+
+
+ break;
case gcvHAL_MAP_MEMORY:
/* Map memory. */
@@ -485,21 +606,45 @@ gceSTATUS gckVGKERNEL_Dispatch(
break;
case gcvHAL_MAP_USER_MEMORY:
+ /* Map user memory to DMA. */
+ gcmkERR_BREAK(gckOS_MapUserMemory(
+ Kernel->os,
+ gcvCORE_VG,
+ gcmUINT64_TO_PTR(kernelInterface->u.MapUserMemory.memory),
+ kernelInterface->u.MapUserMemory.physical,
+ (gctSIZE_T) kernelInterface->u.MapUserMemory.size,
+ &info,
+ &kernelInterface->u.MapUserMemory.address
+ ));
- gcmkONERROR(gcvSTATUS_NOT_SUPPORTED);
+ kernelInterface->u.MapUserMemory.info = gcmPTR_TO_NAME(info);
+ /* Clear temp storage. */
+ info = gcvNULL;
break;
case gcvHAL_UNMAP_USER_MEMORY:
+ /* Unmap user memory. */
+ gcmkERR_BREAK(gckOS_UnmapUserMemory(
+ Kernel->os,
+ gcvCORE_VG,
+ gcmUINT64_TO_PTR(kernelInterface->u.UnmapUserMemory.memory),
+ (gctSIZE_T) kernelInterface->u.UnmapUserMemory.size,
+ gcmNAME_TO_PTR(kernelInterface->u.UnmapUserMemory.info),
+ kernelInterface->u.UnmapUserMemory.address
+ ));
- gcmkONERROR(gcvSTATUS_NOT_SUPPORTED);
-
+ gcmRELEASE_NAME(kernelInterface->u.UnmapUserMemory.info);
break;
case gcvHAL_LOCK_VIDEO_MEMORY:
gcmkONERROR(gckKERNEL_LockVideoMemory(Kernel, gcvCORE_VG, processID, FromUser, Interface));
break;
+ case gcvHAL_UNLOCK_VIDEO_MEMORY:
+ gcmkONERROR(gckKERNEL_UnlockVideoMemory(Kernel, processID, Interface));
+ break;
+
case gcvHAL_USER_SIGNAL:
#if !USE_NEW_LINUX_SIGNAL
/* Dispatch depends on the user signal subcommands. */
@@ -565,12 +710,153 @@ gceSTATUS gckVGKERNEL_Dispatch(
gcmUINT64_TO_PTR(kernelInterface->u.VGCommit.taskTable)
));
break;
+ case gcvHAL_VERSION:
+ kernelInterface->u.Version.major = gcvVERSION_MAJOR;
+ kernelInterface->u.Version.minor = gcvVERSION_MINOR;
+ kernelInterface->u.Version.patch = gcvVERSION_PATCH;
+ kernelInterface->u.Version.build = gcvVERSION_BUILD;
+ status = gcvSTATUS_OK;
+ break;
case gcvHAL_GET_BASE_ADDRESS:
- /* Get base address. */
- gcmkONERROR(
+ /* Get base address. */
+ gcmkERR_BREAK(
gckOS_GetBaseAddress(Kernel->os,
- &Interface->u.GetBaseAddress.baseAddress));
+ &kernelInterface->u.GetBaseAddress.baseAddress));
+ break;
+ case gcvHAL_IMPORT_VIDEO_MEMORY:
+ gcmkONERROR(gckVIDMEM_NODE_Import(Kernel,
+ Interface->u.ImportVideoMemory.name,
+ &Interface->u.ImportVideoMemory.handle));
+ gcmkONERROR(gckKERNEL_AddProcessDB(Kernel,
+ processID, gcvDB_VIDEO_MEMORY,
+ gcmINT2PTR(Interface->u.ImportVideoMemory.handle),
+ gcvNULL,
+ 0));
+ break;
+
+ case gcvHAL_NAME_VIDEO_MEMORY:
+ gcmkONERROR(gckVIDMEM_NODE_Name(Kernel,
+ Interface->u.NameVideoMemory.handle,
+ &Interface->u.NameVideoMemory.name));
+ break;
+
+ case gcvHAL_DATABASE:
+ gcmkONERROR(gckKERNEL_QueryDatabase(Kernel, processID, Interface));
+ break;
+ case gcvHAL_SHBUF:
+ {
+ gctSHBUF shBuf;
+ gctPOINTER uData;
+ gctUINT32 bytes;
+
+ switch (Interface->u.ShBuf.command)
+ {
+ case gcvSHBUF_CREATE:
+ bytes = Interface->u.ShBuf.bytes;
+
+ /* Create. */
+ gcmkONERROR(gckKERNEL_CreateShBuffer(Kernel, bytes, &shBuf));
+
+ Interface->u.ShBuf.id = gcmPTR_TO_UINT64(shBuf);
+
+ gcmkVERIFY_OK(
+ gckKERNEL_AddProcessDB(Kernel,
+ processID,
+ gcvDB_SHBUF,
+ shBuf,
+ gcvNULL,
+ 0));
+ break;
+
+ case gcvSHBUF_DESTROY:
+ shBuf = gcmUINT64_TO_PTR(Interface->u.ShBuf.id);
+
+ /* Check db first to avoid illegal destroy in the process. */
+ gcmkONERROR(
+ gckKERNEL_RemoveProcessDB(Kernel,
+ processID,
+ gcvDB_SHBUF,
+ shBuf));
+
+ gcmkONERROR(gckKERNEL_DestroyShBuffer(Kernel, shBuf));
+ break;
+
+ case gcvSHBUF_MAP:
+ shBuf = gcmUINT64_TO_PTR(Interface->u.ShBuf.id);
+
+ /* Map for current process access. */
+ gcmkONERROR(gckKERNEL_MapShBuffer(Kernel, shBuf));
+
+ gcmkVERIFY_OK(
+ gckKERNEL_AddProcessDB(Kernel,
+ processID,
+ gcvDB_SHBUF,
+ shBuf,
+ gcvNULL,
+ 0));
+ break;
+
+ case gcvSHBUF_WRITE:
+ shBuf = gcmUINT64_TO_PTR(Interface->u.ShBuf.id);
+ uData = gcmUINT64_TO_PTR(Interface->u.ShBuf.data);
+ bytes = Interface->u.ShBuf.bytes;
+
+ /* Write. */
+ gcmkONERROR(
+ gckKERNEL_WriteShBuffer(Kernel, shBuf, uData, bytes));
+ break;
+
+ case gcvSHBUF_READ:
+ shBuf = gcmUINT64_TO_PTR(Interface->u.ShBuf.id);
+ uData = gcmUINT64_TO_PTR(Interface->u.ShBuf.data);
+ bytes = Interface->u.ShBuf.bytes;
+
+ /* Read. */
+ gcmkONERROR(
+ gckKERNEL_ReadShBuffer(Kernel,
+ shBuf,
+ uData,
+ bytes,
+ &bytes));
+
+ /* Return copied size. */
+ Interface->u.ShBuf.bytes = bytes;
+ break;
+
+ default:
+ gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
+ break;
+ }
+ }
+ break;
+ case gcvHAL_READ_REGISTER:
+#if gcdREGISTER_ACCESS_FROM_USER
+ /* Read a register. */
+ gcmkONERROR(gckOS_ReadRegisterEx(
+ Kernel->os,
+ Kernel->core,
+ Interface->u.ReadRegisterData.address,
+ &Interface->u.ReadRegisterData.data));
+#else
+ /* No access from user land to read registers. */
+ Interface->u.ReadRegisterData.data = 0;
+ status = gcvSTATUS_NOT_SUPPORTED;
+#endif
+ break;
+
+ case gcvHAL_WRITE_REGISTER:
+#if gcdREGISTER_ACCESS_FROM_USER
+ /* Write a register. */
+ gcmkONERROR(
+ gckOS_WriteRegisterEx(Kernel->os,
+ Kernel->core,
+ Interface->u.WriteRegisterData.address,
+ Interface->u.WriteRegisterData.data));
+#else
+ /* No access from user land to write registers. */
+ status = gcvSTATUS_NOT_SUPPORTED;
+#endif
break;
case gcvHAL_EVENT_COMMIT:
@@ -578,8 +864,8 @@ gceSTATUS gckVGKERNEL_Dispatch(
break;
default:
- /* Invalid command, try gckKERNEL_Dispatch */
- status = gckKERNEL_Dispatch(Kernel, gcvNULL, gcvTRUE, Interface);
+ /* Invalid command. */
+ status = gcvSTATUS_INVALID_ARGUMENT;
}
OnError:
diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
index 9a1b5afdd7e8..0b60a0aec3db 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
@@ -269,14 +269,16 @@ gckVIDMEM_ConstructVirtual(
#if gcdENABLE_VG
node->Virtual.kernelVirtual = gcvNULL;
#endif
- node->Virtual.secure = (Flag & gcvALLOC_FLAG_SECURITY) != 0;
for (i = 0; i < gcdMAX_GPU_COUNT; i++)
{
node->Virtual.lockeds[i] = 0;
node->Virtual.pageTables[i] = gcvNULL;
+ node->Virtual.lockKernels[i] = gcvNULL;
}
+ gcmkONERROR(gckOS_GetProcessID(&node->Virtual.processID));
+
/* Allocate the virtual memory. */
gcmkONERROR(
gckOS_AllocatePagedMemoryEx(os,
@@ -526,10 +528,6 @@ gckVIDMEM_Construct(
memory->mapping[gcvSURF_MASK] = 0;
memory->mapping[gcvSURF_SCISSOR] = 0;
#endif
- memory->mapping[gcvSURF_ICACHE] = 0;
- memory->mapping[gcvSURF_TXDESC] = 0;
- memory->mapping[gcvSURF_FENCE] = 0;
- memory->mapping[gcvSURF_TFBHEADER] = 0;
gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_VIDMEM,
"[GALCORE] INDEX: bank %d",
@@ -1301,6 +1299,7 @@ _NeedVirtualMapping(
gctUINT32 end;
gcePOOL pool;
gctUINT32 offset;
+ gctUINT32 baseAddress;
gctUINT32 bytes;
gcmkHEADER_ARG("Node=0x%X", Node);
@@ -1320,49 +1319,44 @@ _NeedVirtualMapping(
}
else
#endif
- if (Node->Virtual.secure)
- {
- *NeedMapping = gcvTRUE;
- }
- else
{
/* Convert logical address into a physical address. */
gcmkONERROR(gckOS_UserLogicalToPhysical(
Kernel->os, Node->Virtual.logical, &phys
- ));
+ ));
gcmkSAFECASTPHYSADDRT(address, phys);
- if (!gckHARDWARE_IsFeatureAvailable(Kernel->hardware, gcvFEATURE_MMU))
- {
- gcmkASSERT(address >= Kernel->hardware->baseAddress);
+ gcmkONERROR(gckOS_GetBaseAddress(Kernel->os, &baseAddress));
- /* Subtract baseAddress to get a GPU address used for programming. */
- address -= Kernel->hardware->baseAddress;
+ gcmkASSERT(phys >= baseAddress);
- /* If part of region is belong to gcvPOOL_VIRTUAL,
- ** whole region has to be mapped. */
- gcmkSAFECASTSIZET(bytes, Node->Virtual.bytes);
- end = address + bytes - 1;
+ /* Subtract baseAddress to get a GPU address used for programming. */
+ address -= baseAddress;
+ /* If part of region is belong to gcvPOOL_VIRTUAL,
+ ** whole region has to be mapped. */
+
+ gcmkSAFECASTSIZET(bytes, Node->Virtual.bytes);
+
+ end = address + bytes - 1;
+
+ if (!gckHARDWARE_IsFeatureAvailable(Kernel->hardware, gcvFEATURE_MMU))
+ {
gcmkONERROR(gckHARDWARE_SplitMemory(
Kernel->hardware, end, &pool, &offset
));
*NeedMapping = (pool == gcvPOOL_VIRTUAL);
}
- /* no flat mapping for 4G above address */
- else if (phys >> 32)
- {
- *NeedMapping = gcvTRUE;
- }
else
{
- gctBOOL flatMapped;
-
- gcmkONERROR(gckMMU_IsFlatMapped(Kernel->mmu, address, &flatMapped));
-
- *NeedMapping = !flatMapped;
+ /* TODO: Check whether physical address in flat mapping. */
+ gctUINT32 dynamicMappingStart = Kernel->mmu->dynamicMappingStart;
+ if( end < (dynamicMappingStart << gcdMMU_MTLB_SHIFT))
+ *NeedMapping = gcvFALSE;
+ else
+ *NeedMapping = gcvTRUE;
}
}
}
@@ -1513,11 +1507,10 @@ gckVIDMEM_Lock(
#if !gcdPROCESS_ADDRESS_SPACE
gctBOOL needMapping = gcvFALSE;
#endif
+ gctUINT32 baseAddress;
gctUINT64 physicalAddress;
gcuVIDMEM_NODE_PTR node = Node->node;
gctPHYS_ADDR_T physical;
- gctSIZE_T pageSize;
- gctUINT32 pageMask;
gcmkHEADER_ARG("Node=0x%x", Node);
@@ -1572,8 +1565,9 @@ gckVIDMEM_Lock(
if (Kernel->hardware->mmuVersion == 0)
{
/* Convert physical to GPU address for old mmu. */
- gcmkASSERT(*Address > Kernel->hardware->baseAddress);
- *Address -= Kernel->hardware->baseAddress;
+ gcmkONERROR(gckOS_GetBaseAddress(Kernel->os, &baseAddress));
+ gcmkASSERT(*Address > baseAddress);
+ *Address -= baseAddress;
}
}
@@ -1698,29 +1692,12 @@ gckVIDMEM_Lock(
gckMMU_AllocatePagesEx(Kernel->mmu,
node->Virtual.pageCount,
node->Virtual.type,
- node->Virtual.secure,
&node->Virtual.pageTables[Kernel->core],
&node->Virtual.addresses[Kernel->core]));
}
-#if gcdENABLE_TRUST_APPLICATION
-#if gcdENABLE_VG
- if (Kernel->core != gcvCORE_VG && Kernel->hardware->secureMode == gcvSECURE_IN_TA)
-#else
- if (Kernel->hardware->secureMode == gcvSECURE_IN_TA)
-#endif
- {
- gcmkONERROR(gckKERNEL_MapInTrustApplicaiton(
- Kernel,
- node->Virtual.logical,
- node->Virtual.physical,
- node->Virtual.addresses[Kernel->core],
- node->Virtual.pageCount
- ));
- }
- else
-#endif
- {
+ node->Virtual.lockKernels[Kernel->core] = Kernel;
+
/* Map the pages. */
gcmkONERROR(
gckOS_MapPagesEx(os,
@@ -1728,10 +1705,7 @@ gckVIDMEM_Lock(
node->Virtual.physical,
node->Virtual.pageCount,
node->Virtual.addresses[Kernel->core],
- node->Virtual.pageTables[Kernel->core],
- gcvTRUE,
- node->Virtual.type));
- }
+ node->Virtual.pageTables[Kernel->core]));
#if gcdENABLE_VG
if (Kernel->core == gcvCORE_VG)
@@ -1753,25 +1727,6 @@ gckVIDMEM_Lock(
/* Return hardware address. */
*Address = node->Virtual.addresses[Kernel->core];
-
- if (needMapping == gcvTRUE)
- {
-
-#if gcdENABLE_VG
- if (Kernel->core == gcvCORE_VG)
- {
- gcmkVERIFY_OK(gckOS_GetPageSize(os, &pageSize));
- }
- else
-#endif
- {
- pageSize = Kernel->command->pageSize;
- }
-
- pageMask = (gctUINT32)pageSize - 1;
-
- *Address += (gctUINT32)physicalAddress & pageMask;
- }
#endif
}
@@ -1804,12 +1759,11 @@ OnError:
/* Free the pages from the MMU. */
gcmkVERIFY_OK(
gckMMU_FreePages(Kernel->mmu,
- node->Virtual.secure,
- node->Virtual.addresses[Kernel->core],
node->Virtual.pageTables[Kernel->core],
node->Virtual.pageCount));
}
node->Virtual.pageTables[Kernel->core] = gcvNULL;
+ node->Virtual.lockKernels[Kernel->core] = gcvNULL;
}
/* Unlock the pages. */
@@ -1972,8 +1926,6 @@ gckVIDMEM_Unlock(
{
gcmkONERROR(
gckMMU_FreePages(Kernel->mmu,
- node->Virtual.secure,
- node->Virtual.addresses[Kernel->core],
node->Virtual.pageTables[Kernel->core],
node->Virtual.pageCount));
}
@@ -1986,6 +1938,7 @@ gckVIDMEM_Unlock(
/* Mark page table as freed. */
node->Virtual.pageTables[Kernel->core] = gcvNULL;
+ node->Virtual.lockKernels[Kernel->core] = gcvNULL;
}
#endif
}
@@ -2146,7 +2099,7 @@ gckVIDMEM_Node_Lock(
pageTableEntry));
}
- gcmkONERROR(gckMMU_Flush(mmu, Node->type));
+ gcmkONERROR(gckMMU_Flush(mmu));
}
*Address = lockInfo->GPUAddresses[Kernel->core] + offset;
@@ -2594,7 +2547,6 @@ gckVIDMEM_NODE_Allocate(
gctPOINTER pointer = gcvNULL;
gctUINT32 handle = 0;
gckOS os = Kernel->os;
- gctUINT i;
gcmkHEADER_ARG("Kernel=0x%X VideoNode=0x%X", Kernel, VideoNode);
@@ -2617,11 +2569,6 @@ gckVIDMEM_NODE_Allocate(
gcmkONERROR(gckOS_CreateMutex(os, &node->mutex));
- for (i = 0; i < gcvENGINE_COUNT; i++)
- {
- gcmkONERROR(gckOS_CreateSignal(os, gcvFALSE, &node->sync[i].signal));
- }
-
/* Reference is 1 by default . */
gckVIDMEM_NODE_Reference(Kernel, node);
@@ -2653,14 +2600,6 @@ OnError:
gcmkVERIFY_OK(gckOS_AtomDestroy(os, node->reference));
}
- for (i = 0; i < gcvENGINE_COUNT; i++)
- {
- if (node->sync[i].signal != gcvNULL)
- {
- gcmkVERIFY_OK(gckOS_DestroySignal(os, node->sync[i].signal));
- }
- }
-
gcmkVERIFY_OK(gcmkOS_SAFE_FREE(os, node));
}
@@ -2677,7 +2616,6 @@ gckVIDMEM_NODE_Dereference(
gctINT32 oldValue = 0;
gctPOINTER database = Kernel->db->nameDatabase;
gctPOINTER mutex = Kernel->db->nameDatabaseMutex;
- gctUINT i;
gcmkHEADER_ARG("Kernel=0x%X Node=0x%X", Kernel, Node);
@@ -2702,15 +2640,6 @@ gckVIDMEM_NODE_Dereference(
gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Node->mapMutex));
#endif
gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Node->mutex));
-
- for (i = 0; i < gcvENGINE_COUNT; i++)
- {
- if (Node->sync[i].signal != gcvNULL)
- {
- gcmkVERIFY_OK(gckOS_DestroySignal(Kernel->os, Node->sync[i].signal));
- }
- }
-
gcmkOS_SAFE_FREE(Kernel->os, Node);
}
@@ -2755,8 +2684,6 @@ gckVIDMEM_NODE_Name(
gctBOOL referenced = gcvFALSE;
gcmkHEADER_ARG("Kernel=0x%X Handle=%d", Kernel, Handle);
- gcmkVERIFY_ARGUMENT(Name != gcvNULL);
-
gcmkONERROR(gckOS_GetProcessID(&processID));
gcmkONERROR(gckOS_AcquireMutex(Kernel->os, mutex, gcvINFINITE));
@@ -2777,7 +2704,10 @@ gckVIDMEM_NODE_Name(
gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference(Kernel, node));
- *Name = node->name;
+ if(node)
+ {
+ *Name = node->name;
+ }
gcmkFOOTER_ARG("*Name=%d", *Name);
return gcvSTATUS_OK;
@@ -2891,7 +2821,6 @@ _ReleaseFdPrivate(
return 0;
}
-
/*******************************************************************************
**
** gckVIDMEM_NODE_GetFd
@@ -2928,7 +2857,7 @@ gckVIDMEM_NODE_GetFd(
gcmkONERROR(gckVIDMEM_HANDLE_LookupAndReference(Kernel, Handle, &node));
referenced = gcvTRUE;
- /* Allocated fd owns a reference. */
+ /* Allocate memory for private info. */
gcmkONERROR(gckOS_Allocate(
Kernel->os,
gcmSIZEOF(gcsVIDMEM_NODE_FDPRIVATE),
@@ -2937,7 +2866,7 @@ gckVIDMEM_NODE_GetFd(
fdPrivate->base.release = _ReleaseFdPrivate;
fdPrivate->kernel = Kernel;
- fdPrivate->node = node;
+ fdPrivate->node = node;
/* Allocated fd owns a reference. */
gcmkONERROR(gckOS_GetFd("vidmem", &fdPrivate->base, Fd));
@@ -2991,10 +2920,11 @@ gckVIDMEM_ConstructVirtualFromUserMemory(
/* Initialize gcuVIDMEM_NODE union for virtual memory. */
node->Virtual.kernel = Kernel;
+ node->Virtual.contiguous = gcvFALSE;
/* Wrap Memory. */
gcmkONERROR(gckOS_WrapMemory(
- os, Desc, &node->Virtual.bytes, &node->Virtual.physical, &node->Virtual.contiguous));
+ os, Desc, &node->Virtual.bytes, &node->Virtual.physical));
/* Return pointer to the gcuVIDMEM_NODE union. */
*Node = node;
@@ -3015,56 +2945,3 @@ OnError:
gcmkFOOTER();
return status;
}
-
-gceSTATUS
-gckVIDMEM_SetCommitStamp(
- IN gckKERNEL Kernel,
- IN gceENGINE Engine,
- IN gctUINT32 Handle,
- IN gctUINT64 CommitStamp
- )
-{
- gceSTATUS status;
- gckVIDMEM_NODE node;
- gctUINT32 processID;
-
- gckOS_GetProcessID(&processID);
-
- gcmkONERROR(gckVIDMEM_HANDLE_LookupAndReference(Kernel, Handle, &node));
-
- node->sync[Engine].commitStamp = CommitStamp;
-
- gckVIDMEM_NODE_Dereference(Kernel, node);
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-
-gceSTATUS
-gckVIDMEM_GetCommitStamp(
- IN gckKERNEL Kernel,
- IN gceENGINE Engine,
- IN gctUINT32 Handle,
- OUT gctUINT64_PTR CommitStamp
- )
-{
- gceSTATUS status;
- gckVIDMEM_NODE node;
- gctUINT32 processID;
-
- gckOS_GetProcessID(&processID);
-
- gcmkONERROR(gckVIDMEM_HANDLE_LookupAndReference(Kernel, Handle, &node));
-
- *CommitStamp = node->sync[Engine].commitStamp;
-
- gckVIDMEM_NODE_Dereference(Kernel, node);
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-
diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_feature_database.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_feature_database.h
deleted file mode 100644
index 47bc3ef6190c..000000000000
--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_feature_database.h
+++ /dev/null
@@ -1,35549 +0,0 @@
-/****************************************************************************
-*
-* The MIT License (MIT)
-*
-* Copyright (c) 2014 - 2016 Vivante Corporation
-*
-* Permission is hereby granted, free of charge, to any person obtaining a
-* copy of this software and associated documentation files (the "Software"),
-* to deal in the Software without restriction, including without limitation
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,
-* and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-* DEALINGS IN THE SOFTWARE.
-*
-*****************************************************************************
-*
-* The GPL License (GPL)
-*
-* Copyright (C) 2014 - 2016 Vivante Corporation
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software Foundation,
-* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*
-*****************************************************************************
-*
-* Note: This software is released under dual MIT and GPL licenses. A
-* recipient may use this file under the terms of either the MIT license or
-* GPL License. If you wish to use only one license not the other, you can
-* indicate your decision by deleting one of the above license notices in your
-* version of this file.
-*
-*****************************************************************************/
-
-
-/*Auto created on 2016-07-06 09:15*/
-#ifndef _gc_feature_database_h_
-#define _gc_feature_database_h_
-
-typedef struct
-{
- /* Chip ID. */
- gctUINT32 chipID;
- gctUINT32 chipVersion;
- gctUINT32 productID;
- gctUINT32 ecoID;
- gctUINT32 customerID;
- gctUINT32 patchVersion;
- gctUINT32 formalRelease;
- gctUINT32 Streams;
- gctUINT32 TempRegisters;
- gctUINT32 ThreadCount;
- gctUINT32 VertexCacheSize;
- gctUINT32 NumShaderCores;
- gctUINT32 NumPixelPipes;
- gctUINT32 VertexOutputBufferSize;
- gctUINT32 BufferSize;
- gctUINT32 InstructionCount;
- gctUINT32 NumberOfConstants;
- gctUINT32 CoreCount;
- gctUINT32 VaryingCount;
- gctUINT32 LocalStorageSize;
- gctUINT32 L1CacheSize;
- gctUINT32 InstructionMemorySize;
- gctUINT32 ShaderPCLength;
- gctUINT32 NumResolvePipes;
- gctUINT32 USC_MAX_PAGES;
- gctUINT32 RESULT_WINDOW_MAX_SIZE;
- gctUINT32 REG_FastClear:1;
- gctUINT32 REG_SpecialAntiAliasing:1;
- gctUINT32 REG_Pipe3D:1;
- gctUINT32 REG_DXTTextureCompression:1;
- gctUINT32 REG_DebugMode:1;
- gctUINT32 REG_ZCompression:1;
- gctUINT32 REG_YUV420Filter:1;
- gctUINT32 REG_MSAA:1;
- gctUINT32 REG_DC:1;
- gctUINT32 REG_Pipe2D:1;
- gctUINT32 REG_ETC1TextureCompression:1;
- gctUINT32 REG_FastScaler:1;
- gctUINT32 REG_HighDynamicRange:1;
- gctUINT32 REG_YUV420Tiler:1;
- gctUINT32 REG_ModuleCG:1;
- gctUINT32 REG_MinArea:1;
- gctUINT32 REG_NoEZ:1;
- gctUINT32 REG_No422Texture:1;
- gctUINT32 REG_BufferInterleaving:1;
- gctUINT32 REG_ByteWrite2D:1;
- gctUINT32 REG_NoScaler:1;
- gctUINT32 REG_YUY2Averaging:1;
- gctUINT32 REG_HalfPECache:1;
- gctUINT32 REG_HalfTXCache:1;
- gctUINT32 REG_YUY2RenderTarget:1;
- gctUINT32 REG_Mem32BitSupport:1;
- gctUINT32 REG_PipeVG:1;
- gctUINT32 REG_VGTS:1;
- gctUINT32 REG_FE20:1;
- gctUINT32 REG_ByteWrite3D:1;
- gctUINT32 REG_RsYuvTarget:1;
- gctUINT32 REG_FE20BitIndex:1;
- gctUINT32 REG_FlipY:1;
- gctUINT32 REG_DualReturnBus:1;
- gctUINT32 REG_EndiannessConfig:1;
- gctUINT32 REG_Texture8K:1;
- gctUINT32 REG_CorrectTextureConverter:1;
- gctUINT32 REG_SpecialMsaaLod:1;
- gctUINT32 REG_FastClearFlush:1;
- gctUINT32 REG_2DPE20:1;
- gctUINT32 REG_CorrectAutoDisable:1;
- gctUINT32 REG_Render8K:1;
- gctUINT32 REG_TileStatus2Bits:1;
- gctUINT32 REG_SeparateTileStatusWhenInterleaved:1;
- gctUINT32 REG_SuperTiled32x32:1;
- gctUINT32 REG_VG20:1;
- gctUINT32 REG_TSExtendedCommands:1;
- gctUINT32 REG_CompressionFifoFixed:1;
- gctUINT32 REG_ExtraShaderInstructions0:1;
- gctUINT32 REG_VGFilter:1;
- gctUINT32 REG_VG21:1;
- gctUINT32 REG_ShaderGetsW:1;
- gctUINT32 REG_ExtraShaderInstructions1:1;
- gctUINT32 REG_DefaultReg0:1;
- gctUINT32 REG_MC20:1;
- gctUINT32 REG_ShaderMSAASideband:1;
- gctUINT32 REG_BugFixes0:1;
- gctUINT32 REG_VAA:1;
- gctUINT32 REG_BypassInMSAA:1;
- gctUINT32 REG_HierarchicalZ:1;
- gctUINT32 REG_NewTexture:1;
- gctUINT32 REG_A8TargetSupport:1;
- gctUINT32 REG_CorrectStencil:1;
- gctUINT32 REG_EnhanceVR:1;
- gctUINT32 REG_RSUVSwizzle:1;
- gctUINT32 REG_V2Compression:1;
- gctUINT32 REG_VGDoubleBuffer:1;
- gctUINT32 REG_BugFixes1:1;
- gctUINT32 REG_BugFixes2:1;
- gctUINT32 REG_TextureStride:1;
- gctUINT32 REG_BugFixes3:1;
- gctUINT32 REG_CorrectAutoDisable1:1;
- gctUINT32 REG_AutoRestartTS:1;
- gctUINT32 REG_BugFixes4:1;
- gctUINT32 REG_L2Windowing:1;
- gctUINT32 REG_HalfFloatPipe:1;
- gctUINT32 REG_PixelDither:1;
- gctUINT32 REG_TwoStencilReference:1;
- gctUINT32 REG_ExtendedPixelFormat:1;
- gctUINT32 REG_CorrectMinMaxDepth:1;
- gctUINT32 REG_DitherAndFilterPlusAlpha2D:1;
- gctUINT32 REG_BugFixes5:1;
- gctUINT32 REG_New2D:1;
- gctUINT32 REG_NewFloatingPointArithmetic:1;
- gctUINT32 REG_TextureHorizontalAlignmentSelect:1;
- gctUINT32 REG_NonPowerOfTwo:1;
- gctUINT32 REG_LinearTextureSupport:1;
- gctUINT32 REG_Halti0:1;
- gctUINT32 REG_CorrectOverflowVG:1;
- gctUINT32 REG_NegativeLogFix:1;
- gctUINT32 REG_ResolveOffset:1;
- gctUINT32 REG_OkToGateAxiClock:1;
- gctUINT32 REG_MMU:1;
- gctUINT32 REG_WideLine:1;
- gctUINT32 REG_BugFixes6:1;
- gctUINT32 REG_FcFlushStall:1;
- gctUINT32 REG_LineLoop:1;
- gctUINT32 REG_LogicOp:1;
- gctUINT32 REG_SeamlessCubeMap:1;
- gctUINT32 REG_SuperTiledTexture:1;
- gctUINT32 REG_LinearPE:1;
- gctUINT32 REG_RectPrimitive:1;
- gctUINT32 REG_Composition:1;
- gctUINT32 REG_CorrectAutoDisableCountWidth:1;
- gctUINT32 REG_PESwizzle:1;
- gctUINT32 REG_EndEvent:1;
- gctUINT32 REG_S1S8:1;
- gctUINT32 REG_Halti1:1;
- gctUINT32 REG_RGB888:1;
- gctUINT32 REG_TX_YUVAssembler:1;
- gctUINT32 REG_DynamicFrequencyScaling:1;
- gctUINT32 REG_TXFilter:1;
- gctUINT32 REG_FullDirectFB:1;
- gctUINT32 REG_OnePass2DFilter:1;
- gctUINT32 REG_ThreadWalkerInPS:1;
- gctUINT32 REG_TileFiller:1;
- gctUINT32 REG_YUVStandard:1;
- gctUINT32 REG_MultiSourceBlt:1;
- gctUINT32 REG_YUVConversion:1;
- gctUINT32 REG_FlushFixed2D:1;
- gctUINT32 REG_Interleaver:1;
- gctUINT32 REG_MixedStreams:1;
- gctUINT32 REG_L2CacheFor2D420:1;
- gctUINT32 REG_BugFixes7:1;
- gctUINT32 REG_NoIndexPattern:1;
- gctUINT32 REG_TextureTileStatus:1;
- gctUINT32 REG_DecompressZ16:1;
- gctUINT32 REG_BugFixes8:1;
- gctUINT32 REG_DERotationStallFix:1;
- gctUINT32 REG_OclOnly:1;
- gctUINT32 REG_NewFeatures0:1;
- gctUINT32 REG_InstructionCache:1;
- gctUINT32 REG_GeometryShader:1;
- gctUINT32 REG_TexCompressionSupertiled:1;
- gctUINT32 REG_Generics:1;
- gctUINT32 REG_BugFixes9:1;
- gctUINT32 REG_FastMSAA:1;
- gctUINT32 REG_WClip:1;
- gctUINT32 REG_BugFixes10:1;
- gctUINT32 REG_UnifiedSamplers:1;
- gctUINT32 REG_BugFixes11:1;
- gctUINT32 REG_PerformanceCounters:1;
- gctUINT32 REG_ExtraShaderInstructions2:1;
- gctUINT32 REG_BugFixes12:1;
- gctUINT32 REG_BugFixes13:1;
- gctUINT32 REG_DEEnhancements1:1;
- gctUINT32 REG_ACE:1;
- gctUINT32 REG_TXEnhancements1:1;
- gctUINT32 REG_SHEnhancements1:1;
- gctUINT32 REG_SHEnhancements2:1;
- gctUINT32 REG_PEEnhancements1:1;
- gctUINT32 REG_DEEnhancements2:1;
- gctUINT32 REG_BugFixes14:1;
- gctUINT32 REG_PowerOptimizations0:1;
- gctUINT32 REG_NewHZ:1;
- gctUINT32 REG_BugFixes15:1;
- gctUINT32 REG_DEEnhancements3:1;
- gctUINT32 REG_SHEnhancements3:1;
- gctUINT32 REG_SHEnhancements4:1;
- gctUINT32 REG_TXEnhancements2:1;
- gctUINT32 REG_FEEnhancements1:1;
- gctUINT32 REG_PEEnhancements2:1;
- gctUINT32 REG_PAEnhancements1:1;
- gctUINT32 REG_DENoGamma:1;
- gctUINT32 REG_PAEnhancements2:1;
- gctUINT32 REG_DEEnhancements4:1;
- gctUINT32 REG_PEEnhancements3:1;
- gctUINT32 REG_HIEnhancements1:1;
- gctUINT32 REG_TXEnhancements3:1;
- gctUINT32 REG_SHEnhancements5:1;
- gctUINT32 REG_FEEnhancements2:1;
- gctUINT32 REG_BugFixes16:1;
- gctUINT32 REG_DEEnhancements5:1;
- gctUINT32 REG_TXEnhancements4:1;
- gctUINT32 REG_PEEnhancements4:1;
- gctUINT32 REG_MCEnhancements1:1;
- gctUINT32 REG_Halti2:1;
- gctUINT32 REG_DEMirrorRotate:1;
- gctUINT32 REG_SmallMSAA:1;
- gctUINT32 REG_BugFixes17:1;
- gctUINT32 REG_Rasterizer2:1;
- gctUINT32 REG_DualPipeOPF:1;
- gctUINT32 REG_MultiSrcV2:1;
- gctUINT32 REG_CSCV2:1;
- gctUINT32 REG_PAEnhancements3:1;
- gctUINT32 REG_BugFixes18:1;
- gctUINT32 REG_Compression2D:1;
- gctUINT32 REG_Probe:1;
- gctUINT32 REG_MediumPrecision:1;
- gctUINT32 REG_DESupertile:1;
- gctUINT32 REG_BugFixes19:1;
- gctUINT32 REG_SHEnhancements6:1;
- gctUINT32 REG_SHEnhancements7:1;
- gctUINT32 REG_BugFixes20:1;
- gctUINT32 REG_DEAddress40:1;
- gctUINT32 REG_MiniMMUFix:1;
- gctUINT32 REG_EEZ:1;
- gctUINT32 REG_BugFixes21:1;
- gctUINT32 REG_ExtraVgCaps:1;
- gctUINT32 REG_MultiSrcV15:1;
- gctUINT32 REG_BugFixes22:1;
- gctUINT32 REG_Halti3:1;
- gctUINT32 REG_TessellationShaders:1;
- gctUINT32 REG_OPF9Tap:1;
- gctUINT32 REG_MultiSrcV2StrQuad:1;
- gctUINT32 REG_SeperateSRCAndDstCache:1;
- gctUINT32 REG_Halti4:1;
- gctUINT32 REG_RAWriteDepth:1;
- gctUINT32 REG_AndroidOnly:1;
- gctUINT32 REG_HasChipProductReg:1;
- gctUINT32 REG_TXSupportDEC:1;
- gctUINT32 REG_S8MSAACompression:1;
- gctUINT32 REG_BugFixesIn544:1;
- gctUINT32 REG_L2CacheRemove:1;
- gctUINT32 REG_FEAllowRndVtxCnt:1;
- gctUINT32 REG_CubeMapFL28:1;
- gctUINT32 REG_TX6bitFrac:1;
- gctUINT32 REG_FEAllowStallPrefetchEng:1;
- gctUINT32 REG_ThirdPartyCompression:1;
- gctUINT32 REG_RSS8:1;
- gctUINT32 REG_MSAACoherencyCheck:1;
- gctUINT32 REG_Halti5:1;
- gctUINT32 REG_Evis:1;
- gctUINT32 REG_BltEngine:1;
- gctUINT32 REG_BugFixes23:1;
- gctUINT32 REG_BugFixes24:1;
- gctUINT32 REG_DEC:1;
- gctUINT32 REG_VSTileNV12:1;
- gctUINT32 REG_VSTileNV12_10BIT:1;
- gctUINT32 RenderTarget8:1;
- gctUINT32 TxLodFlowCorrection:1;
- gctUINT32 FaceLod:1;
- gctUINT32 MultiCoreSemaphoreStallV2:1;
- gctUINT32 MultiCoreBlockSetConfig:1;
- gctUINT32 VMSAA:1;
- gctUINT32 ChipEnableLink:1;
- gctUINT32 MULTI_SRC_BLT_1_5_ENHANCEMENT:1;
- gctUINT32 MULTI_SRC_BLT_BILINEAR_FILTER:1;
- gctUINT32 RA_HZEZ_CLOCK_CONTROL:1;
- gctUINT32 CACHE128B256BPERLINE:1;
- gctUINT32 V4Compression:1;
- gctUINT32 PE2D_MAJOR_SUPER_TILE:1;
- gctUINT32 PE_32BPC_COLORMASK_FIX:1;
- gctUINT32 ALPHA_BLENDING_OPT:1;
- gctUINT32 NEW_GPIPE:1;
- gctUINT32 PIPELINE_32_ATTRIBUTES:1;
- gctUINT32 MSAA_SHADING:1;
- gctUINT32 NO_ANISTRO_FILTER:1;
- gctUINT32 NO_ASTC:1;
- gctUINT32 NO_DXT:1;
- gctUINT32 HWTFB:1;
- gctUINT32 RA_DEPTH_WRITE_MSAA1X_FIX:1;
- gctUINT32 EZHZ_CLOCKGATE_FIX:1;
- gctUINT32 SH_SNAP2PAGE_FIX:1;
- gctUINT32 SH_HALFDEPENDENCY_FIX:1;
- gctUINT32 USC_MCFILL_FIX:1;
- gctUINT32 TPG_TCPERF_FIX:1;
- gctUINT32 USC_MDFIFO_OVERFLOW_FIX:1;
- gctUINT32 SH_TEXLD_BARRIER_IN_CS_FIX:1;
- gctUINT32 RS_NEW_BASEADDR:1;
- gctUINT32 PE_8bpp_DUALPIPE_FIX:1;
- gctUINT32 SH_ADVANCED_INSTR:1;
- gctUINT32 SH_FLAT_INTERPOLATION_DUAL16_FIX:1;
- gctUINT32 USC_CONTINUOUS_FLUS_FIX:1;
- gctUINT32 SH_SUPPORT_V4:1;
- gctUINT32 SH_SUPPORT_ALPHA_KILL:1;
- gctUINT32 PE_NO_ALPHA_TEST:1;
- gctUINT32 TX_LOD_NEAREST_SELECT:1;
- gctUINT32 SH_FIX_LDEXP:1;
- gctUINT32 SUPPORT_MOVAI:1;
- gctUINT32 SH_SNAP2PAGE_MAXPAGES_FIX:1;
- gctUINT32 PE_RGBA16I_FIX:1;
- gctUINT32 BLT_8bpp_256TILE_FC_FIX:1;
- gctUINT32 PE_64bit_FENCE_FIX:1;
- gctUINT32 USC_FULL_CACHE_FIX:1;
- gctUINT32 TX_YUV_ASSEMBLER_10BIT:1;
- gctUINT32 FE_32bit_INDEX_FIX:1;
- gctUINT32 BLT_64bpp_MASKED_CLEAR_FIX:1;
- gctUINT32 SECURITY:1;
- gctUINT32 ROBUSTNESS:1;
- gctUINT32 USC_ATOMIC_FIX:1;
- gctUINT32 SH_PSO_MSAA1x_FIX:1;
- gctUINT32 USC_VX_PERF_FIX:1;
- gctUINT32 EVIS_NO_ABSDIFF:1;
- gctUINT32 EVIS_NO_BITREPLACE:1;
- gctUINT32 EVIS_NO_BOXFILTER:1;
- gctUINT32 EVIS_NO_CORDIAC:1;
- gctUINT32 EVIS_NO_DP32:1;
- gctUINT32 EVIS_NO_FILTER:1;
- gctUINT32 EVIS_NO_IADD:1;
- gctUINT32 EVIS_NO_SELECTADD:1;
- gctUINT32 EVIS_LERP_7OUTPUT:1;
- gctUINT32 EVIS_ACCSQ_8OUTPUT:1;
- gctUINT32 USC_GOS_ADDR_FIX:1;
- gctUINT32 TX_8bit_UVFrac:1;
- gctUINT32 TX_DESC_CACHE_CLOCKGATE_FIX:1;
- gctUINT32 RSBLT_MSAA_DECOMPRESSION:1;
- gctUINT32 TX_INTEGER_COORDINATE:1;
- gctUINT32 DRAWID:1;
- gctUINT32 PSIO_SAMPLEMASK_IN_R0ZW_FIX:1;
- gctUINT32 TX_INTEGER_COORDINATE_V2:1;
- gctUINT32 MULTI_CORE_BLOCK_SET_CONFIG:1;
- gctUINT32 VG_RESOLVE_ENGINE:1;
- gctUINT32 VG_PE_COLOR_KEY:1;
- gctUINT32 VG_IM_INDEX_FORMAT:1;
- gctUINT32 SNAPPAGE_CMD:1;
- gctUINT32 SH_NO_INDEX_CONST_ON_A0:1;
- gctUINT32 SH_NO_ONECONST_LIMIT:1;
- gctUINT32 SH_IMG_LDST_ON_TEMP:1;
- gctUINT32 COMPUTE_ONLY:1;
- gctUINT32 SH_IMG_LDST_CLAMP:1;
- gctUINT32 SH_ICACHE_ALLOC_COUNT_FIX:1;
- gctUINT32 SH_ICACHE_PREFETCH:1;
- gctUINT32 PE2D_SEPARATE_CACHE:1;
- gctUINT32 VG_AYUV_INPUT_OUTPUT:1;
- gctUINT32 VG_DOUBLE_IMAGE:1;
- gctUINT32 VG_RECTANGLE_STRIPE_MODE:1;
- gctUINT32 VG_MMU:1;
- gctUINT32 VG_IM_FILTER:1;
- gctUINT32 VG_IM_YUV_PACKET:1;
- gctUINT32 VG_IM_YUV_PLANAR:1;
- gctUINT32 VG_PE_YUV_PACKET:1;
- gctUINT32 VG_COLOR_PRECISION_8_BIT:1;
- gctUINT32 PE_MSAA_OQ_FIX:1;
- gctUINT32 PSIO_MSAA_CL_FIX:1;
- gctUINT32 USC_DEFER_FILL_FIX:1;
- gctUINT32 FE_NEED_DUMMYDRAW:1;
- gctUINT32 PE2D_LINEAR_YUV420_OUTPUT:1;
- gctUINT32 PE2D_LINEAR_YUV420_10BIT:1;
- gctUINT32 MULTI_CLUSTER:1;
- gctUINT32 VG_TS_CULLING:1;
- gctUINT32 VG_FP25:1;
- gctUINT32 SH_MULTI_WG_PACK:1;
- gctUINT32 SH_DUAL16_SAMPLEMASK_ZW:1;
- gctUINT32 TPG_TRIVIAL_MODE_FIX:1;
- gctUINT32 TX_ASTC_MULTISLICE_FIX:1;
- gctUINT32 FE_ROBUST_FIX:1;
- gctUINT32 SH_GPIPE_ACCESS_FULLTEMPS:1;
- gctUINT32 PSIO_INTERLOCK:1;
- gctUINT32 PA_WIDELINE_FIX:1;
- gctUINT32 WIDELINE_HELPER_FIX:1;
- gctUINT32 G2D_3rd_PARTY_COMPRESSION_1_1:1;
- gctUINT32 TX_FLUSH_L1CACHE:1;
- gctUINT32 PE_DITHER_FIX2:1;
- gctUINT32 G2D_DEC400:1;
- gctUINT32 SH_TEXLD_U_FIX:1;
- gctUINT32 MC_FCCACHE_BYTEMASK:1;
- gctUINT32 SH_MULTI_WG_PACK_FIX:1;
-} gcsFEATURE_DATABASE;
-
-static gcsFEATURE_DATABASE gChipInfo[] = {
- /* gc200_4650 */
- {
- 0x200, /* ChipID */
- 0x4650, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x0, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x1, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc255_v132x */
- {
- 0x255, /* ChipID */
- 0x1323, /* ChipRevision */
- 0x3000006, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x1, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x1, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x1, /* gcFEATURE_BIT_REG_PipeVG */
- 0x1, /* gcFEATURE_BIT_REG_VGTS */
- 0x1, /* gcFEATURE_BIT_REG_FE20 */
- 0x0, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x0, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x0, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x0, /* gcFEATURE_BIT_REG_Render8K */
- 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x1, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x1, /* gcFEATURE_BIT_REG_VG21 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x0, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x1, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x0, /* gcFEATURE_BIT_REG_PixelDither */
- 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x0, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x0, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x0, /* gcFEATURE_BIT_REG_MMU */
- 0x0, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x0, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x1, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x1, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x1, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x1, /* gcFEATURE_BIT_VG_MMU */
- 0x1, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x1, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x1, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x1, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x1, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc255_v133x */
- {
- 0x255, /* ChipID */
- 0x1330, /* ChipRevision */
- 0x3000006, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x1, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x1, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x1, /* gcFEATURE_BIT_REG_PipeVG */
- 0x1, /* gcFEATURE_BIT_REG_VGTS */
- 0x1, /* gcFEATURE_BIT_REG_FE20 */
- 0x0, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x0, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x0, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x0, /* gcFEATURE_BIT_REG_Render8K */
- 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x1, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x1, /* gcFEATURE_BIT_REG_VG21 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x0, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x1, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x0, /* gcFEATURE_BIT_REG_PixelDither */
- 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x0, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x0, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x0, /* gcFEATURE_BIT_REG_MMU */
- 0x0, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x0, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x1, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x1, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x1, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x1, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc255_2001_reneas */
- {
- 0x255, /* ChipID */
- 0x2001, /* ChipRevision */
- 0x3000006, /* ProductID */
- 0x0, /* EcoID */
- 0x400, /* CustomerID */
- 0x1, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x1, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x1, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x1, /* gcFEATURE_BIT_REG_PipeVG */
- 0x1, /* gcFEATURE_BIT_REG_VGTS */
- 0x1, /* gcFEATURE_BIT_REG_FE20 */
- 0x0, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x0, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x0, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x0, /* gcFEATURE_BIT_REG_Render8K */
- 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x1, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x1, /* gcFEATURE_BIT_REG_VG21 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x0, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x1, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x0, /* gcFEATURE_BIT_REG_PixelDither */
- 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x0, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x0, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x0, /* gcFEATURE_BIT_REG_MMU */
- 0x0, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x0, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x1, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc255_2001_geosemi */
- {
- 0x255, /* ChipID */
- 0x2001, /* ChipRevision */
- 0x3000006, /* ProductID */
- 0x0, /* EcoID */
- 0x401, /* CustomerID */
- 0x1, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x1, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x1, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x1, /* gcFEATURE_BIT_REG_PipeVG */
- 0x1, /* gcFEATURE_BIT_REG_VGTS */
- 0x1, /* gcFEATURE_BIT_REG_FE20 */
- 0x0, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x0, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x0, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x0, /* gcFEATURE_BIT_REG_Render8K */
- 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x1, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x1, /* gcFEATURE_BIT_REG_VG21 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x0, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x1, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x0, /* gcFEATURE_BIT_REG_PixelDither */
- 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x0, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x0, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x0, /* gcFEATURE_BIT_REG_MMU */
- 0x0, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x0, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x1, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc300_4650 */
- {
- 0x300, /* ChipID */
- 0x4650, /* ChipRevision */
- 0x5203, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x5, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x4, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x1, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc300_4650_guoke */
- {
- 0x300, /* ChipID */
- 0x4650, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x4, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x4, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x1, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc300_4_6_6_rc0 */
- {
- 0x300, /* ChipID */
- 0x4660, /* ChipRevision */
- 0x5203, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x4, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x1, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x1, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc320_5007 */
- {
- 0x320, /* ChipID */
- 0x5007, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x400, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x4, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x8, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x100, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x0, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x0, /* gcFEATURE_BIT_REG_MMU */
- 0x0, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x0, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x0, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc320_5220 */
- {
- 0x320, /* ChipID */
- 0x5220, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc320_5303 */
- {
- 0x320, /* ChipID */
- 0x5303, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc320_5303_1 */
- {
- 0x320, /* ChipID */
- 0x5303, /* ChipRevision */
- 0x5202, /* ProductID */
- 0x1, /* EcoID */
- 0x0, /* CustomerID */
- 0x4, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc320_5340 */
- {
- 0x320, /* ChipID */
- 0x5340, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x4, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x1, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc320c_5341 */
- {
- 0x320, /* ChipID */
- 0x5341, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0xc, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x1, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x1, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x0, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x0, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x1, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x1, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x1, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc320_5341 */
- {
- 0x320, /* ChipID */
- 0x5341, /* ChipRevision */
- 0x3202, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc355_v121_rc5 */
- {
- 0x355, /* ChipID */
- 0x1215, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x1, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x1, /* gcFEATURE_BIT_REG_PipeVG */
- 0x1, /* gcFEATURE_BIT_REG_VGTS */
- 0x1, /* gcFEATURE_BIT_REG_FE20 */
- 0x0, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x0, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x0, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x0, /* gcFEATURE_BIT_REG_Render8K */
- 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x1, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x1, /* gcFEATURE_BIT_REG_VG21 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x0, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x1, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x1, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x0, /* gcFEATURE_BIT_REG_PixelDither */
- 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x0, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x0, /* gcFEATURE_BIT_REG_MMU */
- 0x0, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x0, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x0, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc355_v121x */
- {
- 0x355, /* ChipID */
- 0x1217, /* ChipRevision */
- 0x3003550, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x1, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x1, /* gcFEATURE_BIT_REG_PipeVG */
- 0x1, /* gcFEATURE_BIT_REG_VGTS */
- 0x1, /* gcFEATURE_BIT_REG_FE20 */
- 0x0, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x0, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x0, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x0, /* gcFEATURE_BIT_REG_Render8K */
- 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x1, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x1, /* gcFEATURE_BIT_REG_VG21 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x0, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x1, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x1, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x0, /* gcFEATURE_BIT_REG_PixelDither */
- 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x0, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x0, /* gcFEATURE_BIT_REG_MMU */
- 0x0, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x0, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x1, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x1, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x1, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x1, /* gcFEATURE_BIT_VG_MMU */
- 0x1, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x1, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x1, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x1, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc400_4633 */
- {
- 0x400, /* ChipID */
- 0x4633, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x4, /* gcFEATURE_VALUE_Streams */
- 0x20, /* gcFEATURE_VALUE_TempRegisters */
- 0x40, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x80, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x0, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x1, /* gcFEATURE_BIT_REG_MinArea */
- 0x1, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x1, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x0, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x0, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x0, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc400_4645 */
- {
- 0x400, /* ChipID */
- 0x4645, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x4, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x4, /* gcFEATURE_VALUE_Streams */
- 0x20, /* gcFEATURE_VALUE_TempRegisters */
- 0x40, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x80, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x240, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x1, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x1, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x0, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x1, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc400L_0x465x */
- {
- 0x400, /* ChipID */
- 0x4652, /* ChipRevision */
- 0x70001, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x7, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x4, /* gcFEATURE_VALUE_Streams */
- 0x20, /* gcFEATURE_VALUE_TempRegisters */
- 0x40, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x80, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x0, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x1, /* gcFEATURE_BIT_REG_MinArea */
- 0x1, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x1, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x1, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000nano_0x4652 */
- {
- 0x400, /* ChipID */
- 0x4652, /* ChipRevision */
- 0x70001, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x7, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x4, /* gcFEATURE_VALUE_Streams */
- 0x20, /* gcFEATURE_VALUE_TempRegisters */
- 0x40, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x80, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x0, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x1, /* gcFEATURE_BIT_REG_MinArea */
- 0x1, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x1, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x1, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000nano_0x4652 */
- {
- 0x400, /* ChipID */
- 0x4652, /* ChipRevision */
- 0x70001, /* ProductID */
- 0x0, /* EcoID */
- 0x100, /* CustomerID */
- 0x9, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x4, /* gcFEATURE_VALUE_Streams */
- 0x20, /* gcFEATURE_VALUE_TempRegisters */
- 0x40, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x80, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x0, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x1, /* gcFEATURE_BIT_REG_MinArea */
- 0x1, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x1, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x1, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc420_5325 */
- {
- 0x420, /* ChipID */
- 0x5325, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x2, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x1, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc420_5336 */
- {
- 0x420, /* ChipID */
- 0x5336, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x3, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x1, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x1, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x1, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x1, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc420cpd_533rc7a */
- {
- 0x420, /* ChipID */
- 0x5337, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x1, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x1, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x1, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x1, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x1, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x1, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc428_5421 */
- {
- 0x428, /* ChipID */
- 0x5421, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x1, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x0, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x1, /* gcFEATURE_BIT_REG_NoEZ */
- 0x1, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x0, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x0, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x0, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x0, /* gcFEATURE_BIT_REG_FlipY */
- 0x0, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x0, /* gcFEATURE_BIT_REG_Texture8K */
- 0x0, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x0, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x0, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x0, /* gcFEATURE_BIT_REG_Render8K */
- 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x0, /* gcFEATURE_BIT_REG_PixelDither */
- 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x0, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x0, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x1, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc428c_5_4_2_rc3a */
- {
- 0x428, /* ChipID */
- 0x5423, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x1, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x0, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x1, /* gcFEATURE_BIT_REG_NoEZ */
- 0x1, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x0, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x0, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x0, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x0, /* gcFEATURE_BIT_REG_FlipY */
- 0x0, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x0, /* gcFEATURE_BIT_REG_Texture8K */
- 0x0, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x0, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x0, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x0, /* gcFEATURE_BIT_REG_Render8K */
- 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x0, /* gcFEATURE_BIT_REG_PixelDither */
- 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x0, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x0, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x1, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x1, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x1, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x1, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x1, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x1, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc520_5341 */
- {
- 0x520, /* ChipID */
- 0x5341, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc520l_5_3_4_rc2b */
- {
- 0x520, /* ChipID */
- 0x5342, /* ChipRevision */
- 0x5202, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x2, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x1, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x1, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x1, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc520c_5_5_0 */
- {
- 0x520, /* ChipID */
- 0x5501, /* ChipRevision */
- 0x5200, /* ProductID */
- 0x0, /* EcoID */
- 0x3, /* CustomerID */
- 0x2, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x0, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x1, /* gcFEATURE_BIT_REG_NoEZ */
- 0x1, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x1, /* gcFEATURE_BIT_REG_NoScaler */
- 0x0, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x0, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x0, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x0, /* gcFEATURE_BIT_REG_FlipY */
- 0x0, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x0, /* gcFEATURE_BIT_REG_Texture8K */
- 0x0, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x0, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x0, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x0, /* gcFEATURE_BIT_REG_Render8K */
- 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x0, /* gcFEATURE_BIT_REG_PixelDither */
- 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x0, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x0, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x1, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x1, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x1, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x1, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x1, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x1, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x1, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x1, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x1, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x1, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc520sp_5_5_2_rc0a */
- {
- 0x520, /* ChipID */
- 0x5520, /* ChipRevision */
- 0x5200, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x1, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x0, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x1, /* gcFEATURE_BIT_REG_NoEZ */
- 0x1, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x0, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x0, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x0, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x0, /* gcFEATURE_BIT_REG_FlipY */
- 0x0, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x0, /* gcFEATURE_BIT_REG_Texture8K */
- 0x0, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x0, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x0, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x0, /* gcFEATURE_BIT_REG_Render8K */
- 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x0, /* gcFEATURE_BIT_REG_PixelDither */
- 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x0, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x0, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x1, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x1, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x1, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x1, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x1, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x1, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x1, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc520_5_5_3_rc2a */
- {
- 0x520, /* ChipID */
- 0x5532, /* ChipRevision */
- 0x5200, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x1, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x0, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x1, /* gcFEATURE_BIT_REG_NoEZ */
- 0x1, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x0, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x0, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x0, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x0, /* gcFEATURE_BIT_REG_FlipY */
- 0x0, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x0, /* gcFEATURE_BIT_REG_Texture8K */
- 0x0, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x0, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x0, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x0, /* gcFEATURE_BIT_REG_Render8K */
- 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x0, /* gcFEATURE_BIT_REG_PixelDither */
- 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x0, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x0, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x1, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x1, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x1, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x1, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x1, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x1, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x1, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x1, /* gcFEATURE_BIT_REG_DEC */
- 0x1, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc600L_0x465x */
- {
- 0x600, /* ChipID */
- 0x4652, /* ChipRevision */
- 0x70005, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x7, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x4, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x0, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x1, /* gcFEATURE_BIT_REG_MinArea */
- 0x1, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x1, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x1, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000nanoultra_4_6_5_rc3a */
- {
- 0x600, /* ChipID */
- 0x4653, /* ChipRevision */
- 0x70005, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x1, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x4, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x1, /* gcFEATURE_BIT_REG_MinArea */
- 0x1, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x1, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x1, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000nanoultra_4_6_5_rc3b */
- {
- 0x600, /* ChipID */
- 0x4653, /* ChipRevision */
- 0x70005, /* ProductID */
- 0x0, /* EcoID */
- 0x101, /* CustomerID */
- 0x2, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x4, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x1, /* gcFEATURE_BIT_REG_MinArea */
- 0x1, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x1, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x1, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x0, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc620_5_5_3_rc0 */
- {
- 0x620, /* ChipID */
- 0x5530, /* ChipRevision */
- 0x6200, /* ProductID */
- 0x0, /* EcoID */
- 0x200, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x0, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x1, /* gcFEATURE_BIT_REG_NoEZ */
- 0x1, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x0, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x0, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x0, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x0, /* gcFEATURE_BIT_REG_FlipY */
- 0x0, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x0, /* gcFEATURE_BIT_REG_Texture8K */
- 0x0, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x0, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x0, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x0, /* gcFEATURE_BIT_REG_Render8K */
- 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x0, /* gcFEATURE_BIT_REG_PixelDither */
- 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x0, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x0, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x1, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x1, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x1, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x1, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x1, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x1, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x1, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x1, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc620_5_5_5_rc0d */
- {
- 0x620, /* ChipID */
- 0x5550, /* ChipRevision */
- 0x6200, /* ProductID */
- 0x0, /* EcoID */
- 0x201, /* CustomerID */
- 0x4, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x0, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x1, /* gcFEATURE_BIT_REG_NoEZ */
- 0x1, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x0, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x0, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x0, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x0, /* gcFEATURE_BIT_REG_FlipY */
- 0x0, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x0, /* gcFEATURE_BIT_REG_Texture8K */
- 0x0, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x0, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x0, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x0, /* gcFEATURE_BIT_REG_Render8K */
- 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x0, /* gcFEATURE_BIT_REG_PixelDither */
- 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x0, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x0, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x1, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x1, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x1, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x1, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x1, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x1, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x1, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x1, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x1, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc620tpc_5_5_6_rc0a */
- {
- 0x620, /* ChipID */
- 0x5560, /* ChipRevision */
- 0x6200, /* ProductID */
- 0x0, /* EcoID */
- 0x200, /* CustomerID */
- 0x1, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x1, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x0, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x0, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x0, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x1, /* gcFEATURE_BIT_REG_NoEZ */
- 0x1, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x1, /* gcFEATURE_BIT_REG_NoScaler */
- 0x0, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x0, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x0, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x0, /* gcFEATURE_BIT_REG_FlipY */
- 0x0, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x0, /* gcFEATURE_BIT_REG_Texture8K */
- 0x0, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x0, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x0, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x0, /* gcFEATURE_BIT_REG_Render8K */
- 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x0, /* gcFEATURE_BIT_REG_PixelDither */
- 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x1, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x0, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x0, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x1, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x1, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x1, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x1, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x1, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x1, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x1, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x1, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x1, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc860L_0x464x */
- {
- 0x860, /* ChipID */
- 0x4647, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x4, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x4, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x0, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc880_5106 */
- {
- 0x880, /* ChipID */
- 0x5106, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x8, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x100, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0xb, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x0, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc880_5122 */
- {
- 0x880, /* ChipID */
- 0x5122, /* ChipRevision */
- 0x70007, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x240, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0xc, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x1, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc880TM_0x512x */
- {
- 0x880, /* ChipID */
- 0x5124, /* ChipRevision */
- 0x70007, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x2, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x8, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x240, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0xc, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x1, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x0, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc900_5250 */
- {
- 0x900, /* ChipID */
- 0x5250, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x8, /* gcFEATURE_VALUE_Streams */
- 0x200, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x1, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x2, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc1000_5036 */
- {
- 0x1000, /* ChipID */
- 0x5036, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x4, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x200, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x2, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x240, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x1, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc1000_5037 */
- {
- 0x1000, /* ChipID */
- 0x5037, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x4, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x200, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x2, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x240, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x1, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc1000_5037_1 */
- {
- 0x1000, /* ChipID */
- 0x5037, /* ChipRevision */
- 0x0, /* ProductID */
- 0x1, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x4, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x200, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x2, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x240, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x1, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc1000_5039 */
- {
- 0x1000, /* ChipID */
- 0x5039, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x11, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x4, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x200, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x2, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x240, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x1, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc1500_5246 */
- {
- 0x1500, /* ChipID */
- 0x5246, /* ChipRevision */
- 0x70003, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x6, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x8, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x200, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x2, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x400, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0xf, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x2, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc2000_5108 */
- {
- 0x2000, /* ChipID */
- 0x5108, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x8, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x400, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x4, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0xb, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x1, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x0, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x0, /* gcFEATURE_BIT_REG_LineLoop */
- 0x0, /* gcFEATURE_BIT_REG_LogicOp */
- 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x0, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x0, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x0, /* gcFEATURE_BIT_REG_TileFiller */
- 0x0, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x0, /* gcFEATURE_BIT_REG_Interleaver */
- 0x0, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc2000_5140 */
- {
- 0x2000, /* ChipID */
- 0x5140, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x5, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x8, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x400, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x4, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x100, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x1, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc2000w_5_1_4_rc0e */
- {
- 0x2000, /* ChipID */
- 0x5140, /* ChipRevision */
- 0x20000, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x5, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x8, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x400, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x4, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x100, /* gcFEATURE_VALUE_InstructionCount */
- 0x100, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x8, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x1, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x0, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x0, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x0, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc2500_5422 */
- {
- 0x2500, /* ChipID */
- 0x5422, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x12, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x400, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x4, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0xf, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x4, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc3000_5435 */
- {
- 0x3000, /* ChipID */
- 0x5435, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x400, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x4, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0xf, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x4, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc2000_ffff5450 */
- {
- 0x2000, /* ChipID */
- 0xffff5450, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x8, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x400, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x4, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x4, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc3000_5450 */
- {
- 0x3000, /* ChipID */
- 0x5450, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x8, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x400, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x4, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x4, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc3000_5451 */
- {
- 0x3000, /* ChipID */
- 0x5451, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x4, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x400, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x4, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x4, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x1, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000L_551x */
- {
- 0x3000, /* ChipID */
- 0x5512, /* ChipRevision */
- 0x70002, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x3, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x400, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x4, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x4, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000L_5512 */
- {
- 0x3000, /* ChipID */
- 0x5512, /* ChipRevision */
- 0x70002, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x3, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x400, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x4, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x4, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc4000_5222 */
- {
- 0x4000, /* ChipID */
- 0x5222, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x8, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x800, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x800, /* gcFEATURE_VALUE_InstructionCount */
- 0x200, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0xb, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x1, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x0, /* gcFEATURE_BIT_REG_NewHZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc4000_5245 */
- {
- 0x4000, /* ChipID */
- 0x5245, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x8, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x400, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0xf, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x8, /* gcFEATURE_VALUE_L1CacheSize */
- 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x0, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x0, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x0, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc5000_5434 */
- {
- 0x5000, /* ChipID */
- 0x5434, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0xf, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x8, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x0, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x0, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x0, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x0, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x0, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000_551x */
- {
- 0x5000, /* ChipID */
- 0x5513, /* ChipRevision */
- 0x70000, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x1, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x8, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000_5513 */
- {
- 0x5000, /* ChipID */
- 0x5513, /* ChipRevision */
- 0x70000, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x1, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x8, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x1, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gcXAQ2_CMODEL */
- {
- 0x7000, /* ChipID */
- 0x0, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x200, /* gcFEATURE_VALUE_TempRegisters */
- 0x100, /* gcFEATURE_VALUE_ThreadCount */
- 0x8, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x1f, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x0, /* gcFEATURE_VALUE_L1CacheSize */
- 0x100, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x1, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x1, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x1, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x1, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x1, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x1, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x0, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x1, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x1, /* gcFEATURE_BIT_REG_Evis */
- 0x1, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x1, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x0, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000XS_600x */
- {
- 0x7000, /* ChipID */
- 0x6008, /* ChipRevision */
- 0x70004, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0xb, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x1f, /* gcFEATURE_VALUE_VaryingCount */
- 0x40, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x40, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x1, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x1, /* gcFEATURE_BIT_REG_BltEngine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x1, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x1, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x1, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000XS_6008 */
- {
- 0x7000, /* ChipID */
- 0x6008, /* ChipRevision */
- 0x70004, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0xb, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x1f, /* gcFEATURE_VALUE_VaryingCount */
- 0x40, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x40, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x1, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x1, /* gcFEATURE_BIT_REG_BltEngine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x1, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x1, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x1, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000XSVX_600x */
- {
- 0x7000, /* ChipID */
- 0x6008, /* ChipRevision */
- 0x70008, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x1f, /* gcFEATURE_VALUE_VaryingCount */
- 0x40, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x40, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x1, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x1, /* gcFEATURE_BIT_REG_Evis */
- 0x1, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x1, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x1, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x1, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000XSVX_6008 */
- {
- 0x7000, /* ChipID */
- 0x6008, /* ChipRevision */
- 0x70008, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x7, /* PatchVersion */
- 0x1, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x1f, /* gcFEATURE_VALUE_VaryingCount */
- 0x40, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x40, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x1, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x1, /* gcFEATURE_BIT_REG_Evis */
- 0x1, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x1, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x1, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x1, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000XSVX_6009 */
- {
- 0x7000, /* ChipID */
- 0x6009, /* ChipRevision */
- 0x70008, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x1f, /* gcFEATURE_VALUE_VaryingCount */
- 0x40, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x40, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x1, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x1, /* gcFEATURE_BIT_REG_Evis */
- 0x1, /* gcFEATURE_BIT_REG_BltEngine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x1, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x1, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x1, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000_6100 */
- {
- 0x7000, /* ChipID */
- 0x6100, /* ChipRevision */
- 0x70000, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x20, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x20, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x20, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x1, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000L_6100 */
- {
- 0x7000, /* ChipID */
- 0x6100, /* ChipRevision */
- 0x70002, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x400, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x4, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x10, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x10, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x1, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000XS_6100 */
- {
- 0x7000, /* ChipID */
- 0x6100, /* ChipRevision */
- 0x70004, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x1f, /* gcFEATURE_VALUE_VaryingCount */
- 0x40, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x40, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x1, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x1, /* gcFEATURE_BIT_REG_BltEngine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x1, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x1, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x1, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* vip7000UL_6100 */
- {
- 0x7000, /* ChipID */
- 0x6100, /* ChipRevision */
- 0x5070003, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x8, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x200, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x2, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x10, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x10, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x1, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x1, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x1, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x1, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x1, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x1, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000_6200 */
- {
- 0x7000, /* ChipID */
- 0x6200, /* ChipRevision */
- 0x70000, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x28, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x20, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x28, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x1, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000UL_6200 */
- {
- 0x7000, /* ChipID */
- 0x6200, /* ChipRevision */
- 0x70003, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x8, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x200, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x2, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x10, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x10, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x10, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x1, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x1, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000ULVX_6200 */
- {
- 0x7000, /* ChipID */
- 0x6200, /* ChipRevision */
- 0x7000f, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x8, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x200, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x2, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x10, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x8, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x10, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x1, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x1, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x1, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x1, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x1, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x1, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x1, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x1, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x1, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x1, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x1, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x1, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x1, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x1, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* vip7000L_6200 */
- {
- 0x7000, /* ChipID */
- 0x6200, /* ChipRevision */
- 0x5070002, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x8, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x400, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x4, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x20, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x20, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x20, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x1, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x1, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x1, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x1, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x1, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x1, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* vip7000UL_6200 */
- {
- 0x7000, /* ChipID */
- 0x6200, /* ChipRevision */
- 0x5070003, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x8, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x200, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x2, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x10, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x10, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x1, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x1, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x1, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x1, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x1, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x1, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7400_551x */
- {
- 0x7400, /* ChipID */
- 0x5515, /* ChipRevision */
- 0x74000, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x6, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x2, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x0, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x8, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x2, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x0, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x1, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x1, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x1, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x1, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x0, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x0, /* gcFEATURE_BIT_SECURITY */
- 0x0, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x1, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc8000UL_6200 */
- {
- 0x8000, /* ChipID */
- 0x6200, /* ChipRevision */
- 0x80003, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x8, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x200, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x2, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x8, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x8, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x8, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x10, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x1, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x1, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* v630 */
- {
- 0x7000, /* ChipID */
- 0x6300, /* ChipRevision */
- 0x0, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x1f, /* gcFEATURE_VALUE_VaryingCount */
- 0x40, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x20, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x1, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x1, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x1, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x1, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x1, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x1, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000XS_6200 */
- {
- 0x7000, /* ChipID */
- 0x6200, /* ChipRevision */
- 0x70004, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x1f, /* gcFEATURE_VALUE_VaryingCount */
- 0x40, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x20, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x1, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x1, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x1, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x1, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x1, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x1, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000L_6200 */
- {
- 0x7000, /* ChipID */
- 0x6200, /* ChipRevision */
- 0x70002, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x400, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x4, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x10, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x10, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x1, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000LXS_6200 */
- {
- 0x7000, /* ChipID */
- 0x6200, /* ChipRevision */
- 0x7000a, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x400, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x4, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x1f, /* gcFEATURE_VALUE_VaryingCount */
- 0x40, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x20, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x1, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x1, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x1, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x1, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x1, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* vip7000_6200 */
- {
- 0x7000, /* ChipID */
- 0x6200, /* ChipRevision */
- 0x5070000, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x1f, /* gcFEATURE_VALUE_VaryingCount */
- 0x40, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x40, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x1, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x1, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x1, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x1, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x1, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x1, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x1, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000ULVX_V11_6200 */
- {
- 0x7000, /* ChipID */
- 0x6200, /* ChipRevision */
- 0x7000f, /* ProductID */
- 0x0, /* EcoID */
- 0x1, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x8, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x200, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x2, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x10, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x8, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x10, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x1, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x1, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x1, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x1, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x1, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x1, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x1, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x1, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x1, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x1, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x1, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x1, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x1, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x1, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000ULVX_V12_6200 */
- {
- 0x7000, /* ChipID */
- 0x6200, /* ChipRevision */
- 0x7000f, /* ProductID */
- 0x0, /* EcoID */
- 0x2, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x8, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x200, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x2, /* gcFEATURE_VALUE_NumShaderCores */
- 0x1, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x10, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x8, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x10, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x0, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x1, /* gcFEATURE_BIT_REG_Evis */
- 0x0, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x0, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x0, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x1, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x1, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x1, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000XS_6FFF */
- {
- 0x7000, /* ChipID */
- 0x6fff, /* ChipRevision */
- 0x70004, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x1f, /* gcFEATURE_VALUE_VaryingCount */
- 0x40, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x20, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x1, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x1, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x1, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x1, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x1, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000_6210 */
- {
- 0x7000, /* ChipID */
- 0x6210, /* ChipRevision */
- 0x70000, /* ProductID */
- 0x0, /* EcoID */
- 0x6, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x10, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x10, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x1, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x1, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x1, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x1, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x1, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x1, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x1, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x1, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000XS_6210 */
- {
- 0x7000, /* ChipID */
- 0x6210, /* ChipRevision */
- 0x70004, /* ProductID */
- 0x0, /* EcoID */
- 0x8, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x30, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x10, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x30, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x1, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x1, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x1, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x1, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x1, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x1, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x1, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x1, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x1, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x1, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x1, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x1, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x1, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000L_6210 */
- {
- 0x7000, /* ChipID */
- 0x6210, /* ChipRevision */
- 0x70002, /* ProductID */
- 0x0, /* EcoID */
- 0x5, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x400, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x4, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x10, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x8, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x0, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x1, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x0, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x1, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x0, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x1, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x1, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x1, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x1, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x1, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x1, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x1, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000LXS_6210 */
- {
- 0x7000, /* ChipID */
- 0x6210, /* ChipRevision */
- 0x7000a, /* ProductID */
- 0x0, /* EcoID */
- 0x0, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x400, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x4, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x30, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x8, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x30, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x1, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x0, /* gcFEATURE_BIT_REG_Evis */
- 0x1, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x1, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x1, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x1, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x1, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x1, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x1, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x1, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x1, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x1, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x1, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x1, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
- /* gc7000XSVX_6210 */
- {
- 0x7000, /* ChipID */
- 0x6210, /* ChipRevision */
- 0x70008, /* ProductID */
- 0x0, /* EcoID */
- 0x7, /* CustomerID */
- 0x0, /* PatchVersion */
- 0x0, /* FormalRelease */
- 0x10, /* gcFEATURE_VALUE_Streams */
- 0x40, /* gcFEATURE_VALUE_TempRegisters */
- 0x800, /* gcFEATURE_VALUE_ThreadCount */
- 0x10, /* gcFEATURE_VALUE_VertexCacheSize */
- 0x8, /* gcFEATURE_VALUE_NumShaderCores */
- 0x2, /* gcFEATURE_VALUE_NumPixelPipes */
- 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */
- 0x0, /* gcFEATURE_VALUE_BufferSize */
- 0x200, /* gcFEATURE_VALUE_InstructionCount */
- 0x140, /* gcFEATURE_VALUE_NumberOfConstants */
- 0x1, /* gcFEATURE_VALUE_CoreCount */
- 0x10, /* gcFEATURE_VALUE_VaryingCount */
- 0x40, /* gcFEATURE_VALUE_LocalStorageSize */
- 0x20, /* gcFEATURE_VALUE_L1CacheSize */
- 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */
- 0x14, /* gcFEATURE_VALUE_ShaderPCLength */
- 0x1, /* gcFEATURE_VALUE_NumResolvePipes */
- 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */
- 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */
- 0x1, /* gcFEATURE_BIT_REG_FastClear */
- 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */
- 0x1, /* gcFEATURE_BIT_REG_Pipe3D */
- 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */
- 0x0, /* gcFEATURE_BIT_REG_DebugMode */
- 0x1, /* gcFEATURE_BIT_REG_ZCompression */
- 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */
- 0x1, /* gcFEATURE_BIT_REG_MSAA */
- 0x0, /* gcFEATURE_BIT_REG_DC */
- 0x0, /* gcFEATURE_BIT_REG_Pipe2D */
- 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */
- 0x1, /* gcFEATURE_BIT_REG_FastScaler */
- 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */
- 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */
- 0x1, /* gcFEATURE_BIT_REG_ModuleCG */
- 0x0, /* gcFEATURE_BIT_REG_MinArea */
- 0x0, /* gcFEATURE_BIT_REG_NoEZ */
- 0x0, /* gcFEATURE_BIT_REG_No422Texture */
- 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */
- 0x0, /* gcFEATURE_BIT_REG_NoScaler */
- 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */
- 0x0, /* gcFEATURE_BIT_REG_HalfPECache */
- 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */
- 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */
- 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */
- 0x0, /* gcFEATURE_BIT_REG_PipeVG */
- 0x0, /* gcFEATURE_BIT_REG_VGTS */
- 0x0, /* gcFEATURE_BIT_REG_FE20 */
- 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */
- 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */
- 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */
- 0x1, /* gcFEATURE_BIT_REG_FlipY */
- 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */
- 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */
- 0x1, /* gcFEATURE_BIT_REG_Texture8K */
- 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */
- 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */
- 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */
- 0x1, /* gcFEATURE_BIT_REG_2DPE20 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */
- 0x1, /* gcFEATURE_BIT_REG_Render8K */
- 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */
- 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */
- 0x0, /* gcFEATURE_BIT_REG_VG20 */
- 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */
- 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */
- 0x0, /* gcFEATURE_BIT_REG_VGFilter */
- 0x0, /* gcFEATURE_BIT_REG_VG21 */
- 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */
- 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */
- 0x1, /* gcFEATURE_BIT_REG_MC20 */
- 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */
- 0x0, /* gcFEATURE_BIT_REG_VAA */
- 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */
- 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */
- 0x0, /* gcFEATURE_BIT_REG_NewTexture */
- 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */
- 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */
- 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */
- 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */
- 0x0, /* gcFEATURE_BIT_REG_V2Compression */
- 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */
- 0x0, /* gcFEATURE_BIT_REG_TextureStride */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */
- 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */
- 0x0, /* gcFEATURE_BIT_REG_L2Windowing */
- 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */
- 0x1, /* gcFEATURE_BIT_REG_PixelDither */
- 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */
- 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */
- 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */
- 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */
- 0x0, /* gcFEATURE_BIT_REG_New2D */
- 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */
- 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */
- 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */
- 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */
- 0x1, /* gcFEATURE_BIT_REG_Halti0 */
- 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */
- 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */
- 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */
- 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */
- 0x1, /* gcFEATURE_BIT_REG_MMU */
- 0x1, /* gcFEATURE_BIT_REG_WideLine */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */
- 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */
- 0x1, /* gcFEATURE_BIT_REG_LineLoop */
- 0x1, /* gcFEATURE_BIT_REG_LogicOp */
- 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */
- 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */
- 0x1, /* gcFEATURE_BIT_REG_LinearPE */
- 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */
- 0x0, /* gcFEATURE_BIT_REG_Composition */
- 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */
- 0x1, /* gcFEATURE_BIT_REG_PESwizzle */
- 0x1, /* gcFEATURE_BIT_REG_EndEvent */
- 0x1, /* gcFEATURE_BIT_REG_S1S8 */
- 0x1, /* gcFEATURE_BIT_REG_Halti1 */
- 0x0, /* gcFEATURE_BIT_REG_RGB888 */
- 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */
- 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */
- 0x0, /* gcFEATURE_BIT_REG_TXFilter */
- 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */
- 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */
- 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */
- 0x1, /* gcFEATURE_BIT_REG_TileFiller */
- 0x1, /* gcFEATURE_BIT_REG_YUVStandard */
- 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */
- 0x0, /* gcFEATURE_BIT_REG_YUVConversion */
- 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */
- 0x1, /* gcFEATURE_BIT_REG_Interleaver */
- 0x1, /* gcFEATURE_BIT_REG_MixedStreams */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */
- 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */
- 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */
- 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */
- 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */
- 0x0, /* gcFEATURE_BIT_REG_OclOnly */
- 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */
- 0x1, /* gcFEATURE_BIT_REG_InstructionCache */
- 0x1, /* gcFEATURE_BIT_REG_GeometryShader */
- 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */
- 0x1, /* gcFEATURE_BIT_REG_Generics */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */
- 0x0, /* gcFEATURE_BIT_REG_FastMSAA */
- 0x0, /* gcFEATURE_BIT_REG_WClip */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */
- 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */
- 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */
- 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_ACE */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */
- 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */
- 0x1, /* gcFEATURE_BIT_REG_NewHZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */
- 0x0, /* gcFEATURE_BIT_REG_DENoGamma */
- 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */
- 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */
- 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */
- 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */
- 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */
- 0x1, /* gcFEATURE_BIT_REG_Halti2 */
- 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */
- 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */
- 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */
- 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */
- 0x0, /* gcFEATURE_BIT_REG_CSCV2 */
- 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */
- 0x0, /* gcFEATURE_BIT_REG_Compression2D */
- 0x1, /* gcFEATURE_BIT_REG_Probe */
- 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */
- 0x0, /* gcFEATURE_BIT_REG_DESupertile */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */
- 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */
- 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */
- 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */
- 0x1, /* gcFEATURE_BIT_REG_EEZ */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */
- 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */
- 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */
- 0x1, /* gcFEATURE_BIT_REG_Halti3 */
- 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */
- 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */
- 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */
- 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */
- 0x1, /* gcFEATURE_BIT_REG_Halti4 */
- 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */
- 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */
- 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */
- 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */
- 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */
- 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */
- 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */
- 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */
- 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */
- 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */
- 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */
- 0x1, /* gcFEATURE_BIT_REG_RSS8 */
- 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */
- 0x1, /* gcFEATURE_BIT_REG_Halti5 */
- 0x1, /* gcFEATURE_BIT_REG_Evis */
- 0x1, /* gcFEATURE_BIT_REG_BltEngine */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */
- 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */
- 0x0, /* gcFEATURE_BIT_REG_DEC */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */
- 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */
- 0x0, /* gcFEATURE_BIT_RenderTarget8 */
- 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */
- 0x0, /* gcFEATURE_BIT_FaceLod */
- 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */
- 0x0, /* gcFEATURE_BIT_MultiCoreBlockSetConfig */
- 0x1, /* gcFEATURE_BIT_VMSAA */
- 0x0, /* gcFEATURE_BIT_ChipEnableLink */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */
- 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */
- 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */
- 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */
- 0x1, /* gcFEATURE_BIT_V4Compression */
- 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */
- 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */
- 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */
- 0x1, /* gcFEATURE_BIT_NEW_GPIPE */
- 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */
- 0x1, /* gcFEATURE_BIT_MSAA_SHADING */
- 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */
- 0x0, /* gcFEATURE_BIT_NO_ASTC */
- 0x0, /* gcFEATURE_BIT_NO_DXT */
- 0x1, /* gcFEATURE_BIT_HWTFB */
- 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */
- 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */
- 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */
- 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */
- 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */
- 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */
- 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */
- 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */
- 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */
- 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */
- 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */
- 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */
- 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */
- 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */
- 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */
- 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */
- 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */
- 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */
- 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */
- 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */
- 0x1, /* gcFEATURE_BIT_SECURITY */
- 0x1, /* gcFEATURE_BIT_ROBUSTNESS */
- 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */
- 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */
- 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */
- 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */
- 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */
- 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */
- 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */
- 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */
- 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */
- 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */
- 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */
- 0x1, /* gcFEATURE_BIT_DRAWID */
- 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */
- 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */
- 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */
- 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */
- 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */
- 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */
- 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */
- 0x1, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */
- 0x1, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */
- 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */
- 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */
- 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */
- 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */
- 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */
- 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */
- 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */
- 0x0, /* gcFEATURE_BIT_VG_MMU */
- 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */
- 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */
- 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */
- 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */
- 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */
- 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */
- 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */
- 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */
- 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */
- 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */
- 0x0, /* gcFEATURE_BIT_VG_FP25 */
- 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */
- 0x1, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */
- 0x1, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */
- 0x1, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */
- 0x1, /* gcFEATURE_BIT_FE_ROBUST_FIX */
- 0x1, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */
- 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */
- 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */
- 0x1, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */
- 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */
- 0x1, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */
- 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */
- 0x0, /* gcFEATURE_BIT_G2D_DEC400 */
- 0x1, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */
- 0x1, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */
- 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */
- },
-};
-
-static gcsFEATURE_DATABASE*
-gcQueryFeatureDB(
- gctUINT32 ChipID,
- gctUINT32 ChipVersion,
- gctUINT32 ProductID,
- gctUINT32 EcoID,
- gctUINT32 CustomerID
- )
-{
- gctINT entryNum = sizeof(gChipInfo) / sizeof(gChipInfo[0]);
- gctINT i;
-
- /* check formal release entries first */
- for (i = 0; i < entryNum; ++i)
- {
-
- if ((gChipInfo[i].chipID == ChipID)
- && (gChipInfo[i].chipVersion == ChipVersion)
- && (gChipInfo[i].productID == ProductID)
- && (gChipInfo[i].ecoID == EcoID)
- && (gChipInfo[i].customerID == CustomerID)
- && (gChipInfo[i].formalRelease)
- )
- {
- return &gChipInfo[i];
- }
- }
-
- /* check informal release entries if we dont find in formal entries */
- for (i = 0; i < entryNum; ++i)
- {
-
- if ((gChipInfo[i].chipID == ChipID)
- && ((gChipInfo[i].chipVersion & 0xFFF0) == (ChipVersion & 0xFFF0))
- && (gChipInfo[i].productID == ProductID)
- && (gChipInfo[i].ecoID == EcoID)
- && (gChipInfo[i].customerID == CustomerID)
- && (!gChipInfo[i].formalRelease)
- )
- {
- return &gChipInfo[i];
- }
- }
-
- return gcvNULL;
-}
-#endif /* _gc_feature_database_h_ */
diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
index 77f8f5e18e88..4d8d5101b5da 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
@@ -66,6 +66,10 @@
#include "gc_hal_statistics.h"
#endif
+#if gcdSECURITY
+#include "gc_hal_security_interface.h"
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -142,7 +146,6 @@ extern "C" {
\******************************************************************************/
#define gcvINVALID_ADDRESS ~0U
-#define gcvINVALID_VALUE 0xCCCCCCCC
#define gcmGET_PRE_ROTATION(rotate) \
((rotate) & (~(gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y)))
@@ -188,7 +191,6 @@ typedef enum _gceOBJECT_TYPE
gcvOBJ_QUEUE = gcmCC('Q','U','E',' '),
gcvOBJ_SAMPLER = gcmCC('S','A','M','P'),
gcvOBJ_SHADER = gcmCC('S','H','D','R'),
- gcvOBJ_VIR_SHADER = gcmCC('V','S','D','R'),
gcvOBJ_STREAM = gcmCC('S','T','R','M'),
gcvOBJ_SURF = gcmCC('S','U','R','F'),
gcvOBJ_TEXTURE = gcmCC('T','X','T','R'),
@@ -200,8 +202,6 @@ typedef enum _gceOBJECT_TYPE
gcvOBJ_BUFOBJ = gcmCC('B','U','F','O'),
gcvOBJ_UNIFORM_BLOCK = gcmCC('U','B','L','K'),
gcvOBJ_CL = gcmCC('C','L',' ',' '),
- gcvOBJ_STORAGE_BLOCK = gcmCC('S','B','L','K'),
- gcvOBJ_IO_BLOCK = gcmCC('I','O','B','K'),
}
gceOBJECT_TYPE;
@@ -215,10 +215,25 @@ gcsOBJECT;
typedef struct _gckHARDWARE * gckHARDWARE;
+/* CORE flags. */
+typedef enum _gceCORE
+{
+ gcvCORE_MAJOR = 0x0,
+ gcvCORE_2D = 0x1,
+ gcvCORE_VG = 0x2,
+#if gcdMULTI_GPU_AFFINITY
+ gcvCORE_OCL = 0x3,
+#endif
+#if gcdENABLE_DEC_COMPRESSION
+ gcvCORE_DEC = 0x4,
+#endif
+ gcvCORE_COUNT
+}
+gceCORE;
#define gcdMAX_GPU_COUNT gcvCORE_COUNT
-#define gcdMAX_SURF_LAYERS 4
+#define gcdMAX_SURF_LAYERS 4
#define gcdMAX_DRAW_BUFFERS 8
@@ -413,9 +428,7 @@ gckOS_MapPagesEx(
IN gctPHYS_ADDR Physical,
IN gctSIZE_T PageCount,
IN gctUINT32 Address,
- IN gctPOINTER PageTable,
- IN gctBOOL Writable,
- IN gceSURF_TYPE Type
+ IN gctPOINTER PageTable
);
gceSTATUS
@@ -500,7 +513,7 @@ gceSTATUS
gckOS_UserLogicalToPhysical(
IN gckOS Os,
IN gctPOINTER Logical,
- OUT gctPHYS_ADDR_T * Address
+ OUT gctUINT64 * Address
);
/* Map physical memory. */
@@ -525,7 +538,6 @@ gceSTATUS
gckOS_PhysicalToPhysicalAddress(
IN gckOS Os,
IN gctPOINTER Physical,
- IN gctUINT32 Offset,
OUT gctPHYS_ADDR_T * PhysicalAddress
);
@@ -563,6 +575,26 @@ gckOS_WriteRegisterEx(
IN gctUINT32 Data
);
+#if gcdMULTI_GPU
+gceSTATUS
+gckOS_ReadRegisterByCoreId(
+ IN gckOS Os,
+ IN gceCORE Core,
+ IN gctUINT32 CoreId,
+ IN gctUINT32 Address,
+ OUT gctUINT32 * Data
+ );
+
+gceSTATUS
+gckOS_WriteRegisterByCoreId(
+ IN gckOS Os,
+ IN gceCORE Core,
+ IN gctUINT32 CoreId,
+ IN gctUINT32 Address,
+ IN gctUINT32 Data
+ );
+#endif
+
/* Write data to a 32-bit memory location. */
gceSTATUS
gckOS_WriteMemory(
@@ -826,7 +858,7 @@ gckOS_AtomDecrement(
OUT gctINT32_PTR Value
);
-/* Delay a number of milliseconds. */
+/* Delay a number of microseconds. */
gceSTATUS
gckOS_Delay(
IN gckOS Os,
@@ -1071,6 +1103,40 @@ gckOS_GetThreadID(
OUT gctUINT32_PTR ThreadID
);
+#if gcdSECURITY
+gceSTATUS
+gckOS_OpenSecurityChannel(
+ IN gckOS Os,
+ IN gceCORE Core,
+ OUT gctUINT32 *Channel
+ );
+
+gceSTATUS
+gckOS_CloseSecurityChannel(
+ IN gctUINT32 Channel
+ );
+
+gceSTATUS
+gckOS_CallSecurityService(
+ IN gctUINT32 Channel,
+ IN gcsTA_INTERFACE * Interface
+ );
+
+gceSTATUS
+gckOS_InitSecurityChannel(
+ OUT gctUINT32 Channel
+ );
+
+gceSTATUS
+gckOS_AllocatePageArray(
+ IN gckOS Os,
+ IN gctPHYS_ADDR Physical,
+ IN gctSIZE_T PageCount,
+ OUT gctPOINTER * PageArrayLogical,
+ OUT gctPHYS_ADDR * PageArrayPhysical
+ );
+#endif
+
/******************************************************************************\
********************************** Signal Object *********************************
\******************************************************************************/
@@ -1103,7 +1169,6 @@ gceSTATUS
gckOS_WaitSignal(
IN gckOS Os,
IN gctSIGNAL Signal,
- IN gctBOOL Interruptable,
IN gctUINT32 Wait
);
@@ -1166,16 +1231,7 @@ gckOS_WrapMemory(
IN gckOS Os,
IN gcsUSER_MEMORY_DESC_PTR Desc,
OUT gctSIZE_T *Bytes,
- OUT gctPHYS_ADDR * Physical,
- OUT gctBOOL *Contiguous
- );
-
-gceSTATUS
-gckOS_GetPolicyID(
- IN gckOS Os,
- IN gceSURF_TYPE Type,
- OUT gctUINT32_PTR PolicyID,
- OUT gctUINT32_PTR AXIConfig
+ OUT gctPHYS_ADDR * Physical
);
/******************************************************************************\
@@ -1184,7 +1240,6 @@ gckOS_GetPolicyID(
gceSTATUS
gckOS_CreateSyncTimeline(
IN gckOS Os,
- IN gceCORE Core,
OUT gctHANDLE * Timeline
);
@@ -1337,7 +1392,7 @@ gceSTATUS
gckOS_GPUPhysicalToCPUPhysical(
IN gckOS Os,
IN gctUINT32 GPUPhysical,
- IN gctPHYS_ADDR_T * CPUPhysical
+ IN gctUINT32_PTR CPUPhysical
);
gceSTATUS
@@ -1634,9 +1689,6 @@ typedef struct _gckVIDMEM * gckVIDMEM;
typedef struct _gckKERNEL * gckKERNEL;
typedef struct _gckDB * gckDB;
typedef struct _gckDVFS * gckDVFS;
-typedef struct _gcsASYNC_COMMAND * gckASYNC_COMMAND;
-typedef struct _gckMMU * gckMMU;
-typedef struct _gcsDEVICE * gckDEVICE;
/* Construct a new gckVIDMEM object. */
gceSTATUS
@@ -1709,22 +1761,6 @@ gckVIDMEM_DestroyVirtual(
IN gcuVIDMEM_NODE_PTR Node
);
-gceSTATUS
-gckVIDMEM_SetCommitStamp(
- IN gckKERNEL Kernel,
- IN gceENGINE Engine,
- IN gctUINT32 Handle,
- IN gctUINT64 CommitStamp
- );
-
-gceSTATUS
-gckVIDMEM_GetCommitStamp(
- IN gckKERNEL Kernel,
- IN gceENGINE Engine,
- IN gctUINT32 Handle,
- OUT gctUINT64_PTR CommitStamp
- );
-
/******************************************************************************\
******************************** gckKERNEL Object ******************************
\******************************************************************************/
@@ -1746,24 +1782,18 @@ typedef enum _gceKERNEL_FLUSH
gcvFLUSH_DEPTH = 0x02,
gcvFLUSH_TEXTURE = 0x04,
gcvFLUSH_2D = 0x08,
+#if gcdMULTI_GPU
gcvFLUSH_L2 = 0x10,
+#endif
gcvFLUSH_TILE_STATUS = 0x20,
- gcvFLUSH_ICACHE = 0x40,
- gcvFLUSH_TXDESC = 0x80,
- gcvFLUSH_FENCE = 0x100,
- gcvFLUSH_VERTEX = 0x200,
- gcvFLUSH_TFBHEADER = 0x400,
gcvFLUSH_ALL = gcvFLUSH_COLOR
| gcvFLUSH_DEPTH
| gcvFLUSH_TEXTURE
| gcvFLUSH_2D
+#if gcdMULTI_GPU
| gcvFLUSH_L2
+#endif
| gcvFLUSH_TILE_STATUS
- | gcvFLUSH_ICACHE
- | gcvFLUSH_TXDESC
- | gcvFLUSH_FENCE
- | gcvFLUSH_VERTEX
- | gcvFLUSH_TFBHEADER
}
gceKERNEL_FLUSH;
@@ -1772,9 +1802,7 @@ gceSTATUS
gckKERNEL_Construct(
IN gckOS Os,
IN gceCORE Core,
- IN gctUINT ChipID,
IN gctPOINTER Context,
- IN gckDEVICE Device,
IN gckDB SharedDB,
OUT gckKERNEL * Kernel
);
@@ -1789,7 +1817,6 @@ gckKERNEL_Destroy(
gceSTATUS
gckKERNEL_Dispatch(
IN gckKERNEL Kernel,
- IN gckDEVICE Device,
IN gctBOOL FromUser,
IN OUT struct _gcsHAL_INTERFACE * Interface
);
@@ -1912,6 +1939,9 @@ gckKERNEL_UnmapMemory(
gceSTATUS
gckKERNEL_Notify(
IN gckKERNEL Kernel,
+#if gcdMULTI_GPU
+ IN gctUINT CoreId,
+#endif
IN gceNOTIFY Notifcation,
IN gctBOOL Data
);
@@ -2038,7 +2068,6 @@ gckHARDWARE_BuildVirtualAddress(
gceSTATUS
gckHARDWARE_QueryCommandBuffer(
IN gckHARDWARE Hardware,
- IN gceENGINE Engine,
OUT gctUINT32 * Alignment,
OUT gctUINT32 * ReservedHead,
OUT gctUINT32 * ReservedTail
@@ -2049,7 +2078,6 @@ gceSTATUS
gckHARDWARE_WaitLink(
IN gckHARDWARE Hardware,
IN gctPOINTER Logical,
- IN gctUINT32 Address,
IN gctUINT32 Offset,
IN OUT gctUINT32 * Bytes,
OUT gctUINT32 * WaitOffset,
@@ -2072,6 +2100,7 @@ gckHARDWARE_End(
IN OUT gctUINT32 * Bytes
);
+#if gcdMULTI_GPU
gceSTATUS
gckHARDWARE_ChipEnable(
IN gckHARDWARE Hardware,
@@ -2079,6 +2108,7 @@ gckHARDWARE_ChipEnable(
IN gceCORE_3D_MASK ChipEnable,
IN OUT gctSIZE_T * Bytes
);
+#endif
/* Add a NOP command in the command queue. */
gceSTATUS
@@ -2179,6 +2209,9 @@ gckHARDWARE_ConvertLogical(
gceSTATUS
gckHARDWARE_Interrupt(
IN gckHARDWARE Hardware,
+#if gcdMULTI_GPU
+ IN gctUINT CoreId,
+#endif
IN gctBOOL InterruptValid
);
@@ -2271,6 +2304,12 @@ gckHARDWARE_SetPowerManagement(
);
gceSTATUS
+gckHARDWARE_SetPowerManagementLock(
+ IN gckHARDWARE Hardware,
+ IN gctBOOL Lock
+ );
+
+gceSTATUS
gckHARDWARE_SetGpuProfiler(
IN gckHARDWARE Hardware,
IN gctBOOL GpuProfiler
@@ -2411,16 +2450,6 @@ gckHARDWARE_QueryStateTimer(
OUT gctUINT64_PTR Suspend
);
-gceSTATUS
-gckHARDWARE_Fence(
- IN gckHARDWARE Hardware,
- IN gceENGINE Engine,
- IN gctPOINTER Logical,
- IN gctUINT32 FenceAddress,
- IN gctUINT64 FenceData,
- IN OUT gctUINT32 * Bytes
- );
-
#if !gcdENABLE_VG
/******************************************************************************\
***************************** gckINTERRUPT Object ******************************
@@ -2476,6 +2505,16 @@ gckEVENT_Destroy(
);
/* Reserve the next available hardware event. */
+#if gcdMULTI_GPU
+gceSTATUS
+gckEVENT_GetEvent(
+ IN gckEVENT Event,
+ IN gctBOOL Wait,
+ OUT gctUINT8 * EventID,
+ IN gceKERNEL_WHERE Source,
+ IN gceCORE_3D_MASK ChipEnable
+ );
+#else
gceSTATUS
gckEVENT_GetEvent(
IN gckEVENT Event,
@@ -2483,6 +2522,7 @@ gckEVENT_GetEvent(
OUT gctUINT8 * EventID,
IN gceKERNEL_WHERE Source
);
+#endif
/* Add a new event to the list of events. */
gceSTATUS
@@ -2542,8 +2582,7 @@ gckEVENT_Unlock(
gceSTATUS
gckEVENT_CommitDone(
IN gckEVENT Event,
- IN gceKERNEL_WHERE FromWhere,
- IN gckCONTEXT Context
+ IN gceKERNEL_WHERE FromWhere
);
/* Schedule a FreeVirtualCommandBuffer event. */
@@ -2556,18 +2595,37 @@ gckEVENT_DestroyVirtualCommandBuffer(
IN gceKERNEL_WHERE FromWhere
);
+#if gcdMULTI_GPU
+gceSTATUS
+gckEVENT_Submit(
+ IN gckEVENT Event,
+ IN gctBOOL Wait,
+ IN gctBOOL FromPower,
+ IN gceCORE_3D_MASK ChipEnable
+ );
+#else
gceSTATUS
gckEVENT_Submit(
IN gckEVENT Event,
IN gctBOOL Wait,
IN gctBOOL FromPower
);
+#endif
+#if gcdMULTI_GPU
+gceSTATUS
+gckEVENT_Commit(
+ IN gckEVENT Event,
+ IN gcsQUEUE_PTR Queue,
+ IN gceCORE_3D_MASK ChipEnable
+ );
+#else
gceSTATUS
gckEVENT_Commit(
IN gckEVENT Event,
IN gcsQUEUE_PTR Queue
);
+#endif
/* Schedule a composition event. */
gceSTATUS
@@ -2587,6 +2645,9 @@ gckEVENT_Notify(
gceSTATUS
gckEVENT_Interrupt(
IN gckEVENT Event,
+#if gcdMULTI_GPU
+ IN gctUINT CoreId,
+#endif
IN gctUINT32 IDs
);
@@ -2636,9 +2697,12 @@ gckCOMMAND_Start(
/* Stop the command queue. */
gceSTATUS
gckCOMMAND_Stop(
- IN gckCOMMAND Command
+ IN gckCOMMAND Command,
+ IN gctBOOL FromRecovery
);
+#if gcdMULTI_GPU
+/* Commit a buffer to the command queue. */
gceSTATUS
gckCOMMAND_Commit(
IN gckCOMMAND Command,
@@ -2647,9 +2711,19 @@ gckCOMMAND_Commit(
IN gcsSTATE_DELTA_PTR StateDelta,
IN gcsQUEUE_PTR EventQueue,
IN gctUINT32 ProcessID,
- IN gctBOOL Shared,
- IN gctUINT32 Index
+ IN gceCORE_3D_MASK ChipEnable
+ );
+#else
+gceSTATUS
+gckCOMMAND_Commit(
+ IN gckCOMMAND Command,
+ IN gckCONTEXT Context,
+ IN gcoCMDBUF CommandBuffer,
+ IN gcsSTATE_DELTA_PTR StateDelta,
+ IN gcsQUEUE_PTR EventQueue,
+ IN gctUINT32 ProcessID
);
+#endif
/* Reserve space in the command buffer. */
gceSTATUS
@@ -2668,11 +2742,20 @@ gckCOMMAND_Execute(
);
/* Stall the command queue. */
+#if gcdMULTI_GPU
+gceSTATUS
+gckCOMMAND_Stall(
+ IN gckCOMMAND Command,
+ IN gctBOOL FromPower,
+ IN gceCORE_3D_MASK ChipEnable
+ );
+#else
gceSTATUS
gckCOMMAND_Stall(
IN gckCOMMAND Command,
IN gctBOOL FromPower
);
+#endif
/* Attach user process. */
gceSTATUS
@@ -2709,6 +2792,8 @@ gckCOMMAND_AddressInKernelCommandBuffer(
********************************* gckMMU Object ********************************
\******************************************************************************/
+typedef struct _gckMMU * gckMMU;
+
/* Construct a new gckMMU object. */
gceSTATUS
gckMMU_Construct(
@@ -2737,7 +2822,6 @@ gckMMU_AllocatePagesEx(
IN gckMMU Mmu,
IN gctSIZE_T PageCount,
IN gceSURF_TYPE Type,
- IN gctBOOL Secure,
OUT gctPOINTER * PageTable,
OUT gctUINT32 * Address
);
@@ -2746,8 +2830,6 @@ gckMMU_AllocatePagesEx(
gceSTATUS
gckMMU_FreePages(
IN gckMMU Mmu,
- IN gctBOOL Secure,
- IN gctUINT32 Address,
IN gctPOINTER PageTable,
IN gctSIZE_T PageCount
);
@@ -2757,7 +2839,6 @@ gceSTATUS
gckMMU_SetPage(
IN gckMMU Mmu,
IN gctPHYS_ADDR_T PageAddress,
- IN gctBOOL Writable,
IN gctUINT32 *PageEntry
);
@@ -2773,20 +2854,6 @@ gckMMU_DumpPageTableEntry(
IN gctUINT32 Address
);
-gceSTATUS
-gckMMU_FillFlatMapping(
- IN gckMMU Mmu,
- IN gctUINT32 PhysBase,
- IN gctSIZE_T Size
- );
-
-gceSTATUS
-gckMMU_IsFlatMapped(
- IN gckMMU Mmu,
- OUT gctUINT32 Physical,
- OUT gctBOOL *In
- );
-
#if VIVANTE_PROFILER
gceSTATUS
@@ -2819,6 +2886,20 @@ gckHARDWARE_InitProfiler(
);
gceSTATUS
+gckOS_SignalQueryHardware(
+ IN gckOS Os,
+ IN gctSIGNAL Signal,
+ OUT gckHARDWARE * Hardware
+ );
+
+gceSTATUS
+gckOS_SignalSetHardware(
+ IN gckOS Os,
+ IN gctSIGNAL Signal,
+ gckHARDWARE Hardware
+ );
+
+gceSTATUS
gckOS_DetectProcessByName(
IN gctCONST_POINTER Name
);
diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
index f3bda192cf0d..5e453b0527f8 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
@@ -74,11 +74,14 @@ typedef struct _gcoOS * gcoOS;
typedef struct _gco2D * gco2D;
typedef struct gcsATOM * gcsATOM_PTR;
+#if gcdENABLE_3D
typedef struct _gco3D * gco3D;
typedef struct _gcoCL * gcoCL;
typedef struct _gcsFAST_FLUSH * gcsFAST_FLUSH_PTR;
+#endif
typedef struct _gcoSURF * gcoSURF;
+typedef struct _gcsSURF_INFO * gcsSURF_INFO_PTR;
typedef struct _gcsSURF_NODE * gcsSURF_NODE_PTR;
typedef struct _gcsSURF_FORMAT_INFO * gcsSURF_FORMAT_INFO_PTR;
typedef struct _gcsPOINT * gcsPOINT_PTR;
@@ -98,19 +101,18 @@ typedef struct _gcsCONTEXT_MAP * gcsCONTEXT_MAP_PTR;
typedef void * gcoVG;
#endif
+#if gcdGC355_PROFILER
+typedef struct _gcsPROFILERFUNCData * gcsPROFILERFUNCData_PTR;
+typedef struct _gcsPROFILERFUNCNODE * gcsPROFILERFUNCNODE_PTR;
+#endif
+
+#if gcdSYNC
typedef struct _gcoFENCE * gcoFENCE;
typedef struct _gcsSYNC_CONTEXT * gcsSYNC_CONTEXT_PTR;
-
-typedef enum {
- gcvFENCE_TYPE_READ = 0x1,
- gcvFENCE_TYPE_WRITE = 0x2,
- gcvFENCE_TYPE_ALL = gcvFENCE_TYPE_READ | gcvFENCE_TYPE_WRITE,
-}
-gceFENCE_TYPE;
+#endif
typedef struct _gcsUSER_MEMORY_DESC * gcsUSER_MEMORY_DESC_PTR;
-
/******************************************************************************\
********************* Share obj lock/unlock macros. ****************************
\******************************************************************************/
@@ -132,14 +134,6 @@ typedef struct _gcsUSER_MEMORY_DESC * gcsUSER_MEMORY_DESC_PTR;
}\
}
-typedef struct _gcsSystemInfo
-{
- /* memory latency number for SH data fetch, in SH cycle*/
- gctUINT32 memoryLatencySH;
-}
-gcsSystemInfo;
-
-
#if gcdENABLE_3D
#define gcPLS_INITIALIZER \
{ \
@@ -207,11 +201,6 @@ typedef struct _gcsTLS
{
gceHARDWARE_TYPE currentType;
- /* To which core device control is called,
- * it is index in a hardware type.
- */
- gctUINT32 currentCoreIndex;
-
/* Current 3D hardwre of this thread */
gcoHARDWARE currentHardware;
@@ -229,9 +218,6 @@ typedef struct _gcsTLS
#endif
#if gcdENABLE_2D
gco2D engine2D;
-#if gcdDUMP_2D
- gctUINT32 newDump2DFlag;
-#endif
#endif
/*thread data */
@@ -306,28 +292,11 @@ gceBLEND_FUNCTION;
/* Blending modes. */
typedef enum _gceBLEND_MODE
{
- gcvBLEND_ADD = 0,
+ gcvBLEND_ADD,
gcvBLEND_SUBTRACT,
gcvBLEND_REVERSE_SUBTRACT,
gcvBLEND_MIN,
gcvBLEND_MAX,
- gcvBLEND_MULTIPLY,
- gcvBLEND_SCREEN,
- gcvBLEND_OVERLAY,
- gcvBLEND_DARKEN,
- gcvBLEND_LIGHTEN,
- gcvBLEND_COLORDODGE,
- gcvBLEND_COLORBURN,
- gcvBLEND_HARDLIGHT,
- gcvBLEND_SOFTLIGHT,
- gcvBLEND_DIFFERENCE,
- gcvBLEND_EXCLUSION,
- gcvBLEND_HSL_HUE,
- gcvBLEND_HSL_SATURATION,
- gcvBLEND_HSL_COLOR,
- gcvBLEND_HSL_LUMINOSITY,
-
- gcvBLEND_TOTAL
}
gceBLEND_MODE;
@@ -341,7 +310,7 @@ typedef enum _gceDEPTH_MODE
gceDEPTH_MODE;
#endif /* gcdENABLE_3D */
-
+#if (gcdENABLE_3D || gcdENABLE_VG)
/* API flags. */
typedef enum _gceAPI
{
@@ -349,21 +318,19 @@ typedef enum _gceAPI
gcvAPI_OPENGL_ES11,
gcvAPI_OPENGL_ES20,
gcvAPI_OPENGL_ES30,
- gcvAPI_OPENGL_ES31,
- gcvAPI_OPENGL_ES32,
gcvAPI_OPENGL,
gcvAPI_OPENVG,
gcvAPI_OPENCL,
}
gceAPI;
+#endif
+
typedef enum _gceWHERE
{
- gcvWHERE_COMMAND_PREFETCH = 0,
gcvWHERE_COMMAND,
gcvWHERE_RASTER,
gcvWHERE_PIXEL,
- gcvWHERE_BLT,
}
gceWHERE;
@@ -398,19 +365,6 @@ typedef struct _gcsHAL_LIMITS
}gcsHAL_LIMITS;
-#define gcdEXTERNAL_MEMORY_NAME_MAX 32
-#define gcdEXTERNAL_MEMORY_DATA_MAX 8
-
-typedef struct _gcsEXTERNAL_MEMORY_INFO
-{
- /* Name of allocator used to attach this memory. */
- gctCHAR allocatorName[gcdEXTERNAL_MEMORY_NAME_MAX];
-
- /* User defined data which will be passed to allocator. */
- gctUINT32 userData[gcdEXTERNAL_MEMORY_DATA_MAX];
-}
-gcsEXTERNAL_MEMORY_INFO;
-
/******************************************************************************\
*********** Generic Memory Allocation Optimization Using Containers ************
\******************************************************************************/
@@ -444,6 +398,31 @@ typedef struct _gcsCONTAINER
}
gcsCONTAINER;
+#if gcdGC355_PROFILER
+/*------------------------GC355_PROFILER function node structure--------------*/
+typedef struct _gcsPROFILERFUNCData
+{
+ gctSTRING funcName;
+ gctSTRING Tag;
+ gctUINT TreeDepth;
+ gctUINT saveLayerTreeDepth;
+ gctUINT varTreeDepth;
+ gctUINT64 elapsedTime;
+ gctUINT64 cpuTime;
+ gctUINT64 gpuTime;
+}gcsPROFILERFUNCData;
+
+
+typedef struct _gcsPROFILERFUNCNODE
+{
+ gcsPROFILERFUNCData_PTR data;
+ gcsPROFILERFUNCNODE_PTR pre;
+ gcsPROFILERFUNCNODE_PTR next;
+}gcsPROFILERFUNCNODE;
+/*----------------------------------------------------------------------------*/
+#endif
+
+
gceSTATUS
gcsCONTAINER_Construct(
IN gcsCONTAINER_PTR Container,
@@ -520,13 +499,6 @@ gcoHAL_FrameInfoOps(
IN OUT gctUINT * Val
);
-/* Set HAL options */
-gceSTATUS
-gcoHAL_SetOption(
- IN gcoHAL Hal,
- IN gceOPTION Option,
- IN gctBOOL Value
- );
gceSTATUS
gcoHAL_GetHardware(
@@ -630,27 +602,19 @@ gcoHAL_QueryChipIdentity(
OUT gctUINT32* ChipMinorFeatures
);
-
-gceSTATUS
-gcoHAL_QuerySuperTileMode(
- OUT gctUINT32_PTR SuperTileMode
- );
-
-gceSTATUS
-gcoHAL_QueryMultiGPUAffinityConfig(
- IN gceHARDWARE_TYPE Type,
- OUT gceMULTI_GPU_MODE *Mode,
- OUT gctUINT32_PTR CoreIndex
+/* Query the minor features of the hardware. */
+gceSTATUS gcoHAL_QueryChipMinorFeatures(
+ IN gcoHAL Hal,
+ OUT gctUINT32* NumFeatures,
+ OUT gctUINT32* ChipMinorFeatures
);
-#ifdef LINUX
gctINT32
gcoOS_EndRecordAllocation(void);
void
gcoOS_RecordAllocation(void);
void
gcoOS_AddRecordAllocation(gctSIZE_T Size);
-#endif
/* Query the amount of video memory. */
gceSTATUS
@@ -833,6 +797,13 @@ gcoHAL_ScheduleEvent(
IN OUT gcsHAL_INTERFACE_PTR Interface
);
+/* Destroy a surface. */
+gceSTATUS
+gcoHAL_DestroySurface(
+ IN gcoHAL Hal,
+ IN gcoSURF Surface
+ );
+
/* Request a start/stop timestamp. */
gceSTATUS
gcoHAL_SetTimer(
@@ -881,14 +852,6 @@ gcoHAL_Query3DCoreCount(
);
gceSTATUS
-gcoHAL_QueryCoreCount(
- IN gcoHAL Hal,
- IN gceHARDWARE_TYPE Type,
- OUT gctUINT *Count,
- OUT gctUINT_PTR ChipIDs
- );
-
-gceSTATUS
gcoHAL_QuerySeparated2D(
IN gcoHAL Hal
);
@@ -909,26 +872,16 @@ gceSTATUS
gcoHAL_QueryChipLimits(
IN gcoHAL Hal,
IN gctINT32 Chip,
+ IN gctINT32 Mask,
OUT gcsHAL_LIMITS *Limits);
gceSTATUS
gcoHAL_QueryChipFeature(
IN gcoHAL Hal,
IN gctINT32 Chip,
+ IN gctINT32 Mask,
IN gceFEATURE Feature);
-gceSTATUS
-gcoHAL_SetCoreIndex(
- IN gcoHAL Hal,
- IN gctUINT32 Core
- );
-
-gceSTATUS
-gcoHAL_GetCurrentCoreIndex(
- IN gcoHAL Hal,
- OUT gctUINT32 *Core
- );
-
/*----------------------------------------------------------------------------*/
/*----- Shared Buffer --------------------------------------------------------*/
@@ -999,18 +952,10 @@ gcoHAL_UnlockVideoMemory(
);
gceSTATUS
-gcoHAL_ReleaseVideoMemory(
+ gcoHAL_ReleaseVideoMemory(
IN gctUINT32 Node
);
-gceSTATUS
-gcoHAL_AllocateContiguous(
- IN gcoOS Os,
- IN OUT gctSIZE_T * Bytes,
- OUT gctPHYS_ADDR * Physical,
- OUT gctPOINTER * Logical
- );
-
#if gcdENABLE_3D || gcdENABLE_VG
/* Query the target capabilities. */
gceSTATUS
@@ -1029,34 +974,6 @@ gcoHAL_WrapUserMemory(
OUT gctUINT32_PTR Node
);
-gceSTATUS
-gcoHAL_QueryResetTimeStamp(
- OUT gctUINT64_PTR ResetTimeStamp,
- OUT gctUINT64_PTR ContextID
- );
-
-gceSTATUS
-gcoHAL_WaitFence(
- IN gctUINT32 Handle,
- IN gctUINT32 TimeOut
- );
-
-#if gcdENABLE_2D
-gceSTATUS
-gcoHAL_AttachExternalMemory(
- IN gcoHAL Hal,
- IN gcsEXTERNAL_MEMORY_INFO * External,
- OUT gctPOINTER * Handle,
- OUT gctUINT32_PTR GPU2DAddress
- );
-
-gceSTATUS
-gcoHAL_DetachExternalMemory(
- IN gcoHAL Hal,
- IN gctPOINTER * Handle
- );
-#endif
-
/******************************************************************************\
********************************** gcoOS Object *********************************
\******************************************************************************/
@@ -1091,18 +1008,8 @@ gcoOS_GetTLS(
OUT gcsTLS_PTR * TLS
);
-/* Copy the TLS from a source thread. */
-gceSTATUS
-gcoOS_CopyTLS(
- IN gcsTLS_PTR Source
- );
-
-/* Query the thread local storage. */
-gceSTATUS
-gcoOS_QueryTLS(
- OUT gcsTLS_PTR * TLS
- );
-
+ /* Copy the TLS from a source thread. */
+ gceSTATUS gcoOS_CopyTLS(IN gcsTLS_PTR Source);
/* Destroy the objects associated with the current thread. */
void
@@ -1183,6 +1090,16 @@ gcoOS_FreeMemory(
IN gctPOINTER Memory
);
+/* Allocate contiguous memory. */
+gceSTATUS
+gcoOS_AllocateContiguous(
+ IN gcoOS Os,
+ IN gctBOOL InUserSpace,
+ IN OUT gctSIZE_T * Bytes,
+ OUT gctPHYS_ADDR * Physical,
+ OUT gctPOINTER * Logical
+ );
+
/* Free contiguous memory. */
gceSTATUS
gcoOS_FreeContiguous(
@@ -1608,12 +1525,6 @@ gcoOS_SetProfileSetting(
);
#endif
-/* Get the amount of physical system memory */
-gceSTATUS
-gcoOS_GetPhysicalSystemMemorySize(
- OUT gctSIZE_T * PhysicalSystemMemorySize
- );
-
/* Query the video memory. */
gceSTATUS
gcoOS_QueryVideoMemory(
@@ -1632,7 +1543,6 @@ gcoOS_QueryCurrentProcessName(
IN gctSIZE_T Size
);
-
/*----------------------------------------------------------------------------*/
/*----- Atoms ----------------------------------------------------------------*/
@@ -1938,12 +1848,6 @@ gcoOS_CPUPhysicalToGPUPhysical(
OUT gctUINT32_PTR GPUPhysical
);
-gceSTATUS
-gcoOS_QuerySystemInfo(
- IN gcoOS Os,
- OUT gcsSystemInfo *Info
- );
-
/*----------------------------------------------------------------------------*/
/*----- Profile --------------------------------------------------------------*/
@@ -2108,26 +2012,25 @@ typedef struct _gcsRECT
}
gcsRECT;
-typedef struct _gcsPIXEL
+typedef union _gcsPIXEL
{
- union
+ struct
+ {
+ gctFLOAT r, g, b, a;
+ gctFLOAT d, s;
+ } pf;
+
+ struct
{
- struct
- {
- gctFLOAT r, g, b, a;
- } f;
- struct
- {
- gctINT32 r, g, b, a;
- } i;
- struct
- {
- gctUINT32 r, g, b, a;
- } ui;
- } color;
-
- gctFLOAT d;
- gctUINT32 s;
+ gctINT32 r, g, b, a;
+ gctINT32 d, s;
+ } pi;
+
+ struct
+ {
+ gctUINT32 r, g, b, a;
+ gctUINT32 d, s;
+ } pui;
} gcsPIXEL;
@@ -2148,7 +2051,6 @@ typedef enum _gceFORMAT_CLASS
gcvFORMAT_CLASS_BUMP,
gcvFORMAT_CLASS_DEPTH,
gcvFORMAT_CLASS_ASTC,
- gcvFORMAT_CLASS_COMPRESSED,
gcvFORMAT_CLASS_OTHER
}
gceFORMAT_CLASS;
@@ -2481,14 +2383,6 @@ gcoSURF_GetSize(
OUT gctUINT * Depth
);
-/* Get surface information */
-gceSTATUS
-gcoSURF_GetInfo(
- IN gcoSURF Surface,
- IN gceSURF_INFO_TYPE InfoType,
- IN OUT gctINT32 *Value
- );
-
/* Get surface aligned sizes. */
gceSTATUS
gcoSURF_GetAlignedSize(
@@ -2546,6 +2440,13 @@ gcoSURF_GetTiling(
OUT gceTILING * Tiling
);
+/* Get flip bitmap offset bytes. */
+gceSTATUS
+gcoSURF_GetFlipBitmapOffset(
+ IN gcoSURF Surface,
+ OUT gctUINT_PTR FlipBitmapOffset
+ );
+
/* Get bottom buffer offset bytes. */
gceSTATUS
gcoSURF_GetBottomBufferOffset(
@@ -2561,6 +2462,14 @@ gcoSURF_Lock(
IN OUT gctPOINTER * Memory
);
+gceSTATUS
+gcoSURF_LockEx(
+ IN gcoSURF Surface,
+ OPTIONAL OUT gctUINT32 * Address,
+ OPTIONAL OUT gctPOINTER * Memory,
+ OPTIONAL OUT gctPHYS_ADDR_T *BusAddress
+ );
+
/* Unlock the surface. */
gceSTATUS
gcoSURF_Unlock(
@@ -2575,12 +2484,6 @@ gcoSURF_QueryFlags(
IN gceSURF_FLAG Flag
);
-gceSTATUS
-gcoSURF_QueryHints(
- IN gcoSURF Surface,
- IN gceSURF_TYPE Hints
- );
-
/* Return pixel format parameters; Info is required to be a pointer to an
* array of at least two items because some formats have up to two records
* of description. */
@@ -2622,10 +2525,10 @@ gcoSURF_Fill(
/* Alpha blend two surfaces together. */
gceSTATUS
gcoSURF_Blend(
- IN gcoSURF SrcSurf,
- IN gcoSURF DstSurf,
- IN gcsPOINT_PTR SrcOrigin,
- IN gcsPOINT_PTR DstOrigin,
+ IN gcoSURF SrcSurface,
+ IN gcoSURF DestSurface,
+ IN gcsPOINT_PTR SrcOrig,
+ IN gcsPOINT_PTR DestOrigin,
IN gcsSIZE_PTR Size,
IN gceSURF_BLEND_MODE Mode
);
@@ -2656,25 +2559,27 @@ gcoSURF_SetBuffer(
IN gctUINT32 Physical
);
-/* Set the size of the surface in pixels and map the underlying buffer. */
+/* Set the underlying video buffer for the surface wrapper. */
gceSTATUS
-gcoSURF_SetWindow(
+gcoSURF_SetVideoBuffer(
IN gcoSURF Surface,
- IN gctUINT X,
- IN gctUINT Y,
+ IN gceSURF_TYPE Type,
+ IN gceSURF_FORMAT Format,
IN gctUINT Width,
- IN gctUINT Height
+ IN gctUINT Height,
+ IN gctUINT Stride,
+ IN gctPOINTER *LogicalPlane1,
+ IN gctUINT32 *PhysicalPlane1
);
/* Set the size of the surface in pixels and map the underlying buffer. */
gceSTATUS
-gcoSURF_SetImage(
+gcoSURF_SetWindow(
IN gcoSURF Surface,
IN gctUINT X,
IN gctUINT Y,
IN gctUINT Width,
- IN gctUINT Height,
- IN gctUINT Depth
+ IN gctUINT Height
);
/* Set width/height alignment of the surface directly and calculate stride/size. This is only for dri backend now. Please be careful before use. */
@@ -2713,6 +2618,12 @@ gcoSURF_QueryOrientation(
);
gceSTATUS
+gcoSURF_SetOffset(
+ IN gcoSURF Surface,
+ IN gctSIZE_T Offset
+ );
+
+gceSTATUS
gcoSURF_NODE_Cache(
IN gcsSURF_NODE_PTR Node,
IN gctPOINTER Logical,
@@ -2720,26 +2631,6 @@ gcoSURF_NODE_Cache(
IN gceCACHEOPERATION Operation
);
-gceSTATUS
-gcsSURF_NODE_SetHardwareAddress(
- IN gcsSURF_NODE_PTR Node,
- IN gctUINT32 Address
- );
-
-gceSTATUS
-gcsSURF_NODE_GetHardwareAddress(
- IN gcsSURF_NODE_PTR Node,
- OUT gctUINT32_PTR Physical,
- OUT gctUINT32_PTR Physical2,
- OUT gctUINT32_PTR Physical3,
- OUT gctUINT32_PTR PhysicalBottom
- );
-
-gctUINT32
-gcsSURF_NODE_GetHWAddress(
- IN gcsSURF_NODE_PTR Node
- );
-
/* Lock and unlock surface node */
gceSTATUS
gcoSURF_LockNode(
@@ -2771,6 +2662,19 @@ gcoSURF_CPUCacheOperation(
IN gceCACHEOPERATION Operation
);
+gceSTATUS
+gcoSURF_WrapUserMultiBuffer(
+ IN gcoHAL Hal,
+ IN gctUINT Width,
+ IN gctUINT Height,
+ IN gceSURF_TYPE Type,
+ IN gceSURF_FORMAT Format,
+ IN gctUINT Stride[3],
+ IN gctUINT32 Handle[3],
+ IN gctUINT BufferOffset[3],
+ IN gctUINT32 Flag,
+ OUT gcoSURF * Surface
+ );
gceSTATUS
gcoSURF_Swap(
@@ -2852,9 +2756,9 @@ gcoSURF_GetSamples(
OUT gctUINT_PTR Samples
);
-/* Append tile status buffer to user pool surface. */
+/* Append tile status buffer. */
gceSTATUS
-gcoSURF_AppendTileStatus(
+gcoSURF_AttachTileStatus(
IN gcoSURF Surface
);
#endif
@@ -2873,32 +2777,6 @@ gcoSURF_WrapUserMemory(
OUT gcoSURF * Surface
);
-gceSTATUS
-gcoSURF_WrapUserMultiBuffer(
- IN gcoHAL Hal,
- IN gctUINT Width,
- IN gctUINT Height,
- IN gceSURF_TYPE Type,
- IN gceSURF_FORMAT Format,
- IN gctUINT Stride[3],
- IN gctUINT32 Handle[3],
- IN gctUINT BufferOffset[3],
- IN gctUINT32 Flag,
- OUT gcoSURF * Surface
- );
-
-#define MAX_SURF_MIX_SRC_NUM 64
-gceSTATUS
-gcoSURF_MixSurfacesCPU(
- IN gcoSURF TargetSurface,
- IN gctUINT TargetSliceIndex,
- IN gcoSURF *SourceSurface,
- IN gctUINT *SourceSliceIndices,
- IN gctFLOAT *Weights,
- IN gctINT Count
- );
-
-
/******************************************************************************\
********************************* gcoDUMP Object ********************************
\******************************************************************************/
@@ -3164,6 +3042,15 @@ gcoOS_ReplaceDebugFile(
IN gctFILE fp
);
+void
+gcoOS_SysTraceBegin(
+ IN gctCONST_STRING FuncName
+ );
+
+void
+gcoOS_SysTraceEnd(
+ IN void);
+
/*******************************************************************************
**
** gcmFATAL
@@ -3286,61 +3173,58 @@ gcoOS_DebugTrace(
#define gcvZONE_OS (1 << 0)
#define gcvZONE_HARDWARE (1 << 1)
#define gcvZONE_HEAP (1 << 2)
-#define gcvZONE_SIGNAL (1 << 3)
+#define gcvZONE_SIGNAL (1 << 27)
/* Kernel zones. */
-#define gcvZONE_KERNEL (1 << 4)
-#define gcvZONE_VIDMEM (1 << 5)
-#define gcvZONE_COMMAND (1 << 6)
-#define gcvZONE_DRIVER (1 << 7)
-#define gcvZONE_CMODEL (1 << 8)
-#define gcvZONE_MMU (1 << 9)
-#define gcvZONE_EVENT (1 << 10)
-#define gcvZONE_DEVICE (1 << 11)
-#define gcvZONE_DATABASE (1 << 12)
-#define gcvZONE_INTERRUPT (1 << 13)
-#define gcvZONE_POWER (1 << 14)
-#define gcvZONE_ASYNC_COMMAND (1 << 15)
-#define gcvZONE_ALLOCATOR (1 << 16)
+#define gcvZONE_KERNEL (1 << 3)
+#define gcvZONE_VIDMEM (1 << 4)
+#define gcvZONE_COMMAND (1 << 5)
+#define gcvZONE_DRIVER (1 << 6)
+#define gcvZONE_CMODEL (1 << 7)
+#define gcvZONE_MMU (1 << 8)
+#define gcvZONE_EVENT (1 << 9)
+#define gcvZONE_DEVICE (1 << 10)
+#define gcvZONE_DATABASE (1 << 11)
+#define gcvZONE_INTERRUPT (1 << 12)
+#define gcvZONE_POWER (1 << 13)
+#define gcvZONE_ALLOCATOR (1 << 14)
/* User zones. */
-#define gcvZONE_HAL (1 << 4)
-#define gcvZONE_BUFFER (1 << 5)
-#define gcvZONE_CONTEXT (1 << 6)
-#define gcvZONE_SURFACE (1 << 7)
-#define gcvZONE_INDEX (1 << 8)
-#define gcvZONE_STREAM (1 << 9)
-#define gcvZONE_TEXTURE (1 << 10)
-#define gcvZONE_2D (1 << 11)
-#define gcvZONE_3D (1 << 12)
-#define gcvZONE_COMPILER (1 << 13)
-#define gcvZONE_MEMORY (1 << 14)
-#define gcvZONE_STATE (1 << 15)
-#define gcvZONE_AUX (1 << 16)
-#define gcvZONE_VERTEX (1 << 17)
-#define gcvZONE_CL (1 << 18)
-#define gcvZONE_VG (1 << 19)
-#define gcvZONE_VX (1 << 20)
-#define gcvZONE_IMAGE (1 << 21)
-#define gcvZONE_UTILITY (1 << 22)
-#define gcvZONE_PARAMETERS (1 << 23)
-#define gcvZONE_BUFOBJ (1 << 24)
-#define gcvZONE_SHADER (1 << 25)
-#define gcvZONE_STREAM_OUT (1 << 26)
+#define gcvZONE_HAL (1 << 3)
+#define gcvZONE_BUFFER (1 << 4)
+#define gcvZONE_CONTEXT (1 << 5)
+#define gcvZONE_SURFACE (1 << 6)
+#define gcvZONE_INDEX (1 << 7)
+#define gcvZONE_STREAM (1 << 8)
+#define gcvZONE_TEXTURE (1 << 9)
+#define gcvZONE_2D (1 << 10)
+#define gcvZONE_3D (1 << 11)
+#define gcvZONE_COMPILER (1 << 12)
+#define gcvZONE_MEMORY (1 << 13)
+#define gcvZONE_STATE (1 << 14)
+#define gcvZONE_AUX (1 << 15)
+#define gcvZONE_VERTEX (1 << 16)
+#define gcvZONE_CL (1 << 17)
+#define gcvZONE_COMPOSITION (1 << 17)
+#define gcvZONE_VG (1 << 18)
+#define gcvZONE_IMAGE (1 << 19)
+#define gcvZONE_UTILITY (1 << 20)
+#define gcvZONE_PARAMETERS (1 << 21)
+#define gcvZONE_BUFOBJ (1 << 22)
+#define gcvZONE_SHADER (1 << 23)
+#define gcvZONE_STREAM_OUT (1 << 24)
/* API definitions. */
-#define gcvZONE_API_HAL ((gctUINT32) 1 << 28)
-#define gcvZONE_API_EGL ((gctUINT32) 2 << 28)
-#define gcvZONE_API_ES11 ((gctUINT32) 3 << 28)
-#define gcvZONE_API_ES20 ((gctUINT32) 4 << 28)
-#define gcvZONE_API_ES30 ((gctUINT32) 4 << 28)
-#define gcvZONE_API_VG11 ((gctUINT32) 5 << 28)
-#define gcvZONE_API_GL ((gctUINT32) 6 << 28)
-#define gcvZONE_API_DFB ((gctUINT32) 7 << 28)
-#define gcvZONE_API_GDI ((gctUINT32) 8 << 28)
-#define gcvZONE_API_D3D ((gctUINT32) 9 << 28)
-#define gcvZONE_API_CL ((gctUINT32) 10 << 28)
-#define gcvZONE_API_VX ((gctUINT32) 11 << 28)
+#define gcvZONE_API_HAL (1 << 28)
+#define gcvZONE_API_EGL (2 << 28)
+#define gcvZONE_API_ES11 (3 << 28)
+#define gcvZONE_API_ES20 (4 << 28)
+#define gcvZONE_API_VG11 (5 << 28)
+#define gcvZONE_API_GL (6 << 28)
+#define gcvZONE_API_DFB (7 << 28)
+#define gcvZONE_API_GDI ((gctUINT32)8 << 28)
+#define gcvZONE_API_D3D ((gctUINT32)9 << 28)
+#define gcvZONE_API_ES30 ((gctUINT32)10 << 28)
#define gcmZONE_GET_API(zone) ((zone) >> 28)
@@ -3355,7 +3239,6 @@ will enable print EGL module debug info*/
/*Dump API depth set 1 for API, 2 for API and API behavior*/
#define gcvDUMP_API_DEPTH 1
-
/*******************************************************************************
**
** gcmTRACE_ZONE
@@ -3431,7 +3314,6 @@ gcoOS_DebugTraceZone(
# define gcmkTRACE_ZONE_N __dummy_trace_zone_n
#endif
-
/*******************************************************************************
**
** gcmDEBUG_ONLY
@@ -3448,13 +3330,11 @@ gcoOS_DebugTraceZone(
# define gcmDEBUG_ONLY(f)
#endif
-
/*******************************************************************************
**
** gcmSTACK_PUSH
** gcmSTACK_POP
** gcmSTACK_DUMP
-** gcmSTACK_REMOVE
**
** Push or pop a function with entry arguments on the trace stack.
**
@@ -3464,85 +3344,40 @@ gcoOS_DebugTraceZone(
** Line Line number.
** Text Optional text.
** ... Optional arguments for text.
-**
-** Thread Thread id.
*/
-void
-gcoOS_StackPush(
- IN gctINT8_PTR Identity,
- IN gctCONST_STRING Function,
- IN gctINT Line,
- IN gctCONST_STRING Text,
- ...
- );
-
-void
-gcoOS_StackPop(
- IN gctINT8_PTR Identity,
- IN gctCONST_STRING Function
- );
-
-void
-gcoOS_StackDump(
- void);
-
-void
-gcoOS_StackRemove(
- IN gctHANDLE Thread
- );
-
#if gcmIS_DEBUG(gcdDEBUG_STACK)
+ void gcoOS_StackPush(IN gctINT8_PTR Identity, IN gctCONST_STRING Function, IN gctINT Line, IN gctCONST_STRING Text, ...);
+ void gcoOS_StackPop(IN gctINT8_PTR Identity, IN gctCONST_STRING Function);
+ void gcoOS_StackDump(void);
+ void gcoOS_StackRemove(IN gctHANDLE Thread);
+
# define gcmSTACK_PUSH gcoOS_StackPush
# define gcmSTACK_POP gcoOS_StackPop
# define gcmSTACK_DUMP gcoOS_StackDump
# define gcmSTACK_REMOVE gcoOS_StackRemove
#elif gcdHAS_ELLIPSIS
-# define gcmSTACK_PUSH(...)
-# define gcmSTACK_POP(...)
-# define gcmSTACK_DUMP()
-# define gcmSTACK_REMOVE(...)
+# define gcmSTACK_PUSH(...) do { } while (0)
+# define gcmSTACK_POP(...) do { } while (0)
+# define gcmSTACK_DUMP() do { } while (0)
+# define gcmSTACK_REMOVE(...) do { } while (0)
#else
gcmINLINE static void
__dummy_stack_push(
IN gctCONST_STRING Function,
IN gctINT Line,
- IN gctCONST_STRING Text,
- ...
+ IN gctCONST_STRING Text, ...
)
{
}
-
- gcmINLINE static void
- __dummy_stack_pop(
- IN gctINT8_PTR Identity,
- IN gctCONST_STRING Function
- );
-
- gcmINLINE static void
- __dummy_stack_remove(
- IN gctHANDLE Thread
- );
-
# define gcmSTACK_PUSH __dummy_stack_push
-# define gcmSTACK_POP(a,b) __dummy_stack_pop
-# define gcmSTACK_DUMP()
-# define gcmSTACK_REMOVE(a) __dummy_stack_remove
+# define gcmSTACK_POP(a,b) do { } while (0)
+# define gcmSTACK_DUMP() do { } while (0)
+# define gcmSTACK_REMOVE(a) do { } while (0)
#endif
-
-/*******************************************************************************
-**
-** gcmBINARY_TRACE
-**
-** Push or pop a function with entry arguments on the trace stack.
-**
-** ARGUMENTS:
-**
-** Function Name of function
-** Line Line number
-** Text Optional text
-** ... Optional arguments for text.
-*/
+/******************************************************************************\
+******************************** Binary Trace **********************************
+\******************************************************************************/
typedef struct _gcsBINARY_TRACE_MESSAGE * gcsBINARY_TRACE_MESSAGE_PTR;
typedef struct _gcsBINARY_TRACE_MESSAGE
{
@@ -3555,25 +3390,25 @@ typedef struct _gcsBINARY_TRACE_MESSAGE
}
gcsBINARY_TRACE_MESSAGE;
-void
-gcoOS_BinaryTrace(
- IN gctCONST_STRING Function,
- IN gctINT Line,
- IN gctCONST_STRING Text OPTIONAL,
- ...
- );
-
-void
-gckOS_BinaryTrace(
- IN gctCONST_STRING Function,
- IN gctINT Line,
- IN gctCONST_STRING Text OPTIONAL,
- ...
- );
-
#define gcdBINARY_TRACE_MESSAGE_SIZE 240
#if gcdBINARY_TRACE
+ void
+ gcoOS_BinaryTrace(
+ IN gctCONST_STRING Function,
+ IN gctINT Line,
+ IN gctCONST_STRING Text OPTIONAL,
+ ...
+ );
+
+ void
+ gckOS_BinaryTrace(
+ IN gctCONST_STRING Function,
+ IN gctINT Line,
+ IN gctCONST_STRING Text OPTIONAL,
+ ...
+ );
+
# define gcmBINARY_TRACE gcoOS_BinaryTrace
# define gcmkBINARY_TRACE gckOS_BinaryTrace
#elif gcdHAS_ELLIPSIS
@@ -3593,69 +3428,12 @@ gckOS_BinaryTrace(
# define gcmkBINARY_TRACE __dummy_binary_trace
#endif
-
-/*******************************************************************************
-**
-** gcmSYSTRACE_BEGIN
-** gcmSYSTRACE_END
-**
-** Systrace is a performance tunning tool on linux.
-**
-** ARGUMENTS:
-**
-** FuncName Function name
-** Zone Systrace zone. Only specified zones are traced.
-*/
-
-void
-gcoOS_SysTraceBegin(
- IN gctUINT32 Zone,
- IN gctCONST_STRING FuncName
- );
-
-void
-gcoOS_SysTraceEnd(
- IN gctUINT32 Zone
- );
-
-#if defined(LINUX) && gcdSYSTRACE
-# define gcmSYSTRACE_BEGIN gcoOS_SysTraceBegin
-# define gcmSYSTRACE_END gcoOS_SysTraceEnd
-#elif gcdHAS_ELLIPSIS
-# define gcmSYSTRACE_BEGIN(...)
-# define gcmSYSTRACE_END(...)
-#else
- gcmINLINE static void
- __dummy_systrace_begin(
- IN gctUINT32 Zone,
- IN gctCONST_STRING FuncName
- )
- {
- }
-
- gcmINLINE static void
- __dummy_systrace_end(
- IN gctUINT32 Zone
- )
- {
- }
-
-# define gcmSYSTRACE_BEGIN __dummy_systrace_begin
-# define gcmSYSTRACE_END __dummy_systrace_end
-#endif
-
-
/******************************************************************************\
******************************** Logging Macros ********************************
\******************************************************************************/
#define gcdHEADER_LEVEL gcvLEVEL_VERBOSE
-/* Always enable header/footer when systrace build is on */
-#if defined(LINUX) && gcdSYSTRACE
-#undef gcdEMPTY_HEADER_FOOTER
-#endif
-
#ifndef gcdEMPTY_HEADER_FOOTER
#define gcdEMPTY_HEADER_FOOTER 0
#endif
@@ -3672,39 +3450,35 @@ gcoOS_ProfileDB(
static gctBOOL __profile__initialized__ = gcvFALSE; \
gcmSTACK_PUSH(&__user__, __FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
gcoOS_ProfileDB(__FUNCTION__, &__profile__initialized__)
-
#define gcmHEADER_ARG(...) \
gctINT8 __user__ = 1; \
static gctBOOL __profile__initialized__ = gcvFALSE; \
gcmSTACK_PUSH(&__user__, __FUNCTION__, __LINE__, Text, __VA_ARGS__); \
gcoOS_ProfileDB(__FUNCTION__, &__profile__initialized__)
-
#define gcmFOOTER() \
gcmSTACK_POP(&__user__, __FUNCTION__); \
gcoOS_ProfileDB(__FUNCTION__, gcvNULL)
-
#define gcmFOOTER_NO() \
gcmSTACK_POP(&__user__, __FUNCTION__); \
gcoOS_ProfileDB(__FUNCTION__, gcvNULL)
-
#define gcmFOOTER_ARG(...) \
gcmSTACK_POP(&__user__, __FUNCTION__); \
gcoOS_ProfileDB(__FUNCTION__, gcvNULL)
-
#define gcmFOOTER_KILL() \
gcmSTACK_POP(&__user__, __FUNCTION__); \
gcoOS_ProfileDB(gcvNULL, gcvNULL)
-#else /* !gcdENABLE_PROFILING */
+#else /* gcdENABLE_PROFILING */
-#if gcdEMPTY_HEADER_FOOTER
+#ifdef gcdFSL_REL_BUILD
+#define gcmHEADER()
+#elif gcdEMPTY_HEADER_FOOTER
# define gcmHEADER()
#elif gcdHAS_ELLIPSIS
#define gcmHEADER() \
gctINT8 __user__ = 1; \
gctINT8_PTR __user_ptr__ = &__user__; \
gcmSTACK_PUSH(__user_ptr__, __FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
- gcmSYSTRACE_BEGIN(_GC_OBJ_ZONE, __FUNCTION__); \
gcmBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
"++%s(%d)", __FUNCTION__, __LINE__)
@@ -3716,7 +3490,9 @@ gcoOS_ProfileDB(
# define gcmHEADER __dummy_header
#endif
-#if gcdHAS_ELLIPSIS
+#ifdef gcdFSL_REL_BUILD
+#define gcmHEADER_ARG(Text, ...)
+#elif gcdHAS_ELLIPSIS
#if gcdEMPTY_HEADER_FOOTER
# define gcmHEADER_ARG(Text, ...)
#else
@@ -3724,7 +3500,6 @@ gcoOS_ProfileDB(
gctINT8 __user__ = 1; \
gctINT8_PTR __user_ptr__ = &__user__; \
gcmSTACK_PUSH(__user_ptr__, __FUNCTION__, __LINE__, Text, __VA_ARGS__); \
- gcmSYSTRACE_BEGIN(_GC_OBJ_ZONE, __FUNCTION__); \
gcmBINARY_TRACE(__FUNCTION__, __LINE__, Text, __VA_ARGS__); \
gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
"++%s(%d): " Text, __FUNCTION__, __LINE__, __VA_ARGS__)
@@ -3740,17 +3515,18 @@ gcoOS_ProfileDB(
# define gcmHEADER_ARG __dummy_header_arg
#endif
-#if gcdEMPTY_HEADER_FOOTER
+#ifdef gcdFSL_REL_BUILD
+# define gcmFOOTER()
+#elif gcdEMPTY_HEADER_FOOTER
# define gcmFOOTER()
#elif gcdHAS_ELLIPSIS
# define gcmFOOTER() \
gcmSTACK_POP(__user_ptr__, __FUNCTION__); \
- gcmSYSTRACE_END(_GC_OBJ_ZONE); \
gcmBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
"--%s(%d): status=%d(%s)", \
__FUNCTION__, __LINE__, \
- status, gcmSTATUS2NAME(status)); \
+ status, gcoOS_DebugStatus2Name(status)); \
*__user_ptr__ -= 1
#else
gcmINLINE static void
@@ -3760,12 +3536,13 @@ gcoOS_ProfileDB(
# define gcmFOOTER __dummy_footer
#endif
-#if gcdEMPTY_HEADER_FOOTER
+#ifdef gcdFSL_REL_BUILD
+#define gcmFOOTER_NO()
+#elif gcdEMPTY_HEADER_FOOTER
# define gcmFOOTER_NO()
#elif gcdHAS_ELLIPSIS
#define gcmFOOTER_NO() \
gcmSTACK_POP(__user_ptr__, __FUNCTION__); \
- gcmSYSTRACE_END(_GC_OBJ_ZONE); \
gcmBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
"--%s(%d)", __FUNCTION__, __LINE__); \
@@ -3778,12 +3555,13 @@ gcoOS_ProfileDB(
# define gcmFOOTER_NO __dummy_footer_no
#endif
-#if gcdEMPTY_HEADER_FOOTER
+#ifdef gcdFSL_REL_BUILD
+#define gcmFOOTER_KILL()
+#elif gcdEMPTY_HEADER_FOOTER
# define gcmFOOTER_KILL()
#elif gcdHAS_ELLIPSIS
#define gcmFOOTER_KILL() \
gcmSTACK_POP(__user_ptr__, __FUNCTION__); \
- gcmSYSTRACE_END(_GC_OBJ_ZONE); \
gcmBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
"--%s(%d)", __FUNCTION__, __LINE__); \
@@ -3796,13 +3574,14 @@ gcoOS_ProfileDB(
# define gcmFOOTER_KILL __dummy_footer_kill
#endif
-#if gcdHAS_ELLIPSIS
+#ifdef gcdFSL_REL_BUILD
+# define gcmFOOTER_ARG(Text, ...)
+#elif gcdHAS_ELLIPSIS
#if gcdEMPTY_HEADER_FOOTER
# define gcmFOOTER_ARG(Text, ...)
#else
# define gcmFOOTER_ARG(Text, ...) \
gcmSTACK_POP(__user_ptr__, __FUNCTION__); \
- gcmSYSTRACE_END(_GC_OBJ_ZONE); \
gcmBINARY_TRACE(__FUNCTION__, __LINE__, Text, __VA_ARGS__); \
gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
"--%s(%d): " Text, __FUNCTION__, __LINE__, __VA_ARGS__); \
@@ -3821,7 +3600,9 @@ gcoOS_ProfileDB(
#endif /* gcdENABLE_PROFILING */
-#if gcdHAS_ELLIPSIS
+#ifdef gcdFSL_REL_BUILD
+#define gcmkHEADER()
+#elif gcdHAS_ELLIPSIS
#define gcmkHEADER() \
gctINT8 __kernel__ = 1; \
gctINT8_PTR __kernel_ptr__ = &__kernel__; \
@@ -3836,7 +3617,9 @@ gcoOS_ProfileDB(
# define gcmkHEADER __dummy_kheader
#endif
-#if gcdHAS_ELLIPSIS
+#ifdef gcdFSL_REL_BUILD
+# define gcmkHEADER_ARG(Text, ...)
+#elif gcdHAS_ELLIPSIS
# define gcmkHEADER_ARG(Text, ...) \
gctINT8 __kernel__ = 1; \
gctINT8_PTR __kernel_ptr__ = &__kernel__; \
@@ -3854,12 +3637,14 @@ gcoOS_ProfileDB(
# define gcmkHEADER_ARG __dummy_kheader_arg
#endif
-#if gcdHAS_ELLIPSIS
+#ifdef gcdFSL_REL_BUILD
+#define gcmkFOOTER()
+#elif gcdHAS_ELLIPSIS
#define gcmkFOOTER() \
gcmkBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, status); \
gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
"--%s(%d): status=%d(%s)", \
- __FUNCTION__, __LINE__, status, gcmkSTATUS2NAME(status)); \
+ __FUNCTION__, __LINE__, status, gckOS_DebugStatus2Name(status)); \
*__kernel_ptr__ -= 1
#else
gcmINLINE static void
@@ -3869,7 +3654,9 @@ gcoOS_ProfileDB(
# define gcmkFOOTER __dummy_kfooter
#endif
-#if gcdHAS_ELLIPSIS
+#ifdef gcdFSL_REL_BUILD
+#define gcmkFOOTER_NO()
+#elif gcdHAS_ELLIPSIS
#define gcmkFOOTER_NO() \
gcmkBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
@@ -3883,7 +3670,9 @@ gcoOS_ProfileDB(
# define gcmkFOOTER_NO __dummy_kfooter_no
#endif
-#if gcdHAS_ELLIPSIS
+#ifdef gcdFSL_REL_BUILD
+# define gcmkFOOTER_ARG(Text, ...)
+#elif gcdHAS_ELLIPSIS
# define gcmkFOOTER_ARG(Text, ...) \
gcmkBINARY_TRACE(__FUNCTION__, __LINE__, Text, __VA_ARGS__); \
gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
@@ -3966,7 +3755,7 @@ void
gckOS_DumpBuffer(
IN gckOS Os,
IN gctPOINTER Buffer,
- IN gctSIZE_T Size,
+ IN gctUINT Size,
IN gceDUMP_BUFFER Type,
IN gctBOOL CopyMessage
);
@@ -4006,7 +3795,7 @@ gckOS_DebugFlush(
gceSTATUS
gcfDumpFrameRate(
void
- );
+ );
# define gcmDUMP_FRAMERATE gcfDumpFrameRate
#elif gcdHAS_ELLIPSIS
# define gcmDUMP_FRAMERATE(...)
@@ -4128,7 +3917,7 @@ gcfDumpBuffer(
IN gctSTRING Tag,
IN gctUINT32 Physical,
IN gctPOINTER Logical,
- IN gctSIZE_T Offset,
+ IN gctUINT32 Offset,
IN gctSIZE_T Bytes
);
# define gcmDUMP_BUFFER gcfDumpBuffer
@@ -4149,42 +3938,6 @@ gcfDumpBuffer(
# define gcmDUMP_BUFFER __dummy_dump_buffer
#endif
-#if gcdDUMP
-void
-gcfDumpLock(
- void
- );
-# define gcmDUMP_LOCK gcfDumpLock
-#elif gcdHAS_ELLIPSIS
-# define gcmDUMP_LOCK(...)
-#else
- gcmINLINE static void
- __dummy_dump_lock(
- void
- )
- {
- }
-# define gcmDUMP_LOCK __dummy_dump_lock
-#endif
-
-#if gcdDUMP
-void
-gcfDumpUnlock(
- void
- );
-# define gcmDUMP_UNLOCK gcfDumpUnlock
-#elif gcdHAS_ELLIPSIS
-# define gcmDUMP_UNLOCK(...)
-#else
- gcmINLINE static void
- __dummy_dump_unlock(
- void
- )
- {
- }
-# define gcmDUMP_UNLOCK __dummy_dump_unlock
-#endif
-
/*******************************************************************************
**
** gcmDUMP_API
@@ -4306,9 +4059,7 @@ gceSTATUS gcfDumpApiData(IN gctCONST_POINTER Data, IN gctSIZE_T Size);
*/
gceSTATUS gcfDump2DCommand(IN gctUINT32_PTR Command, IN gctUINT32 Size);
#if gcdDUMP_2D
-# define gcmDUMP_2D_COMMAND(cmd, size) \
- if (Hardware->newDump2DLevel > 1) \
- gcfDump2DCommand(cmd, size)
+# define gcmDUMP_2D_COMMAND gcfDump2DCommand
#elif gcdHAS_ELLIPSIS
# define gcmDUMP_2D_COMMAND(...)
#else
@@ -4334,9 +4085,7 @@ gceSTATUS gcfDump2DCommand(IN gctUINT32_PTR Command, IN gctUINT32 Size);
*/
gceSTATUS gcfDump2DSurface(IN gctBOOL Src, IN gctUINT32 Address);
#if gcdDUMP_2D
-# define gcmDUMP_2D_SURFACE(src, addr) \
- if (Hardware->newDump2DLevel > 2) \
- gcfDump2DSurface(src, addr)
+# define gcmDUMP_2D_SURFACE gcfDump2DSurface
#elif gcdHAS_ELLIPSIS
# define gcmDUMP_2D_SURFACE(...)
#else
@@ -4402,6 +4151,11 @@ gceSTATUS gcfDelMemoryInfo(IN gctUINT32 Address);
# define gcmDUMP_DEL_MEMORY_INFO __dummy_dump_del_memory_info
#endif
+#if gcdDUMP_2D
+extern gctPOINTER dumpMemInfoListMutex;
+extern gctBOOL dump2DFlag;
+#endif
+
/*******************************************************************************
**
** gcmTRACE_RELEASE
@@ -4589,14 +4343,6 @@ gckOS_DebugStatus2Name(
gceSTATUS status
);
-#if gcmIS_DEBUG(gcdDEBUG)
-# define gcmSTATUS2NAME gcoOS_DebugStatus2Name
-# define gcmkSTATUS2NAME gckOS_DebugStatus2Name
-#else
-# define gcmSTATUS2NAME(status) status
-# define gcmkSTATUS2NAME(status) status
-#endif
-
/*******************************************************************************
**
** gcmERR_BREAK
@@ -4618,7 +4364,7 @@ gckOS_DebugStatus2Name(
prefix##PRINT_VERSION(); \
prefix##TRACE(gcvLEVEL_ERROR, \
#prefix "ERR_BREAK: status=%d(%s) @ %s(%d)", \
- status, gcmSTATUS2NAME(status), __FUNCTION__, __LINE__); \
+ status, gcoOS_DebugStatus2Name(status), __FUNCTION__, __LINE__); \
break; \
} \
do { } while (gcvFALSE)
@@ -4657,7 +4403,7 @@ gckOS_DebugStatus2Name(
prefix##PRINT_VERSION(); \
prefix##TRACE(gcvLEVEL_ERROR, \
#prefix "ERR_RETURN: status=%d(%s) @ %s(%d)", \
- status, gcmSTATUS2NAME(status), __FUNCTION__, __LINE__); \
+ status, gcoOS_DebugStatus2Name(status), __FUNCTION__, __LINE__); \
prefix##FOOTER(); \
return status; \
} \
@@ -4669,7 +4415,7 @@ gckOS_DebugStatus2Name(
prefix##PRINT_VERSION(); \
prefix##TRACE(gcvLEVEL_ERROR, \
#prefix "ERR_RETURN: status=%d(%s) @ %s(%d)", \
- status, gcmkSTATUS2NAME(status), __FUNCTION__, __LINE__); \
+ status, gckOS_DebugStatus2Name(status), __FUNCTION__, __LINE__); \
prefix##FOOTER(); \
return status; \
} \
@@ -4701,7 +4447,7 @@ gckOS_DebugStatus2Name(
prefix##PRINT_VERSION(); \
prefix##TRACE(gcvLEVEL_ERROR, \
#prefix "ONERROR: status=%d(%s) @ %s(%d)", \
- status, gcmSTATUS2NAME(status), __FUNCTION__, __LINE__); \
+ status, gcoOS_DebugStatus2Name(status), __FUNCTION__, __LINE__); \
goto OnError; \
} \
} \
@@ -4715,7 +4461,7 @@ gckOS_DebugStatus2Name(
prefix##PRINT_VERSION(); \
prefix##TRACE(gcvLEVEL_ERROR, \
#prefix "ONERROR: status=%d(%s) @ %s(%d)", \
- status, gcmkSTATUS2NAME(status), __FUNCTION__, __LINE__); \
+ status, gckOS_DebugStatus2Name(status), __FUNCTION__, __LINE__); \
goto OnError; \
} \
} \
@@ -4746,7 +4492,7 @@ gckOS_DebugStatus2Name(
if (gcmSIZEOF(gctSIZE_T) > gcmSIZEOF(gctUINT32)) \
{ \
gcmkASSERT(tmp <= gcvMAXUINT32); \
- } \
+ } \
(x) = tmp; \
} \
while (gcvFALSE)
@@ -4758,7 +4504,7 @@ gckOS_DebugStatus2Name(
if (gcmSIZEOF(gctSIZE_T) > gcmSIZEOF(gctUINT32)) \
{ \
gcmASSERT(tmp <= gcvMAXUINT32); \
- } \
+ } \
(x) = tmp; \
} \
while (gcvFALSE)
@@ -4777,7 +4523,7 @@ gckOS_DebugStatus2Name(
** ARGUMENTS:
**
** x A gctUINT32 variable
-** y A gctPHYS_ADDR_T variable
+** y A gctSIZE_T variable
*/
#define gcmkSAFECASTPHYSADDRT(x, y) \
do \
@@ -4785,7 +4531,7 @@ gckOS_DebugStatus2Name(
gctUINT32 tmp = (gctUINT32)(y); \
if (gcmSIZEOF(gctPHYS_ADDR_T) > gcmSIZEOF(gctUINT32)) \
{ \
- gcmkASSERT(tmp <= gcvMAXUINT32); \
+ gcmkASSERT(tmp <= gcvMAXUINT32); \
} \
(x) = tmp; \
} \
@@ -4793,34 +4539,6 @@ gckOS_DebugStatus2Name(
/*******************************************************************************
**
-** gcmSAFECASTPHYSADDRT
-**
-** Check whether value of a gctPHYS_ADDR_T variable beyond the capability
-** of 32bits GPU hardware.
-**
-** ASSUMPTIONS:
-**
-**
-**
-** ARGUMENTS:
-**
-** x A gctUINT32 variable
-** y A gctPHYS_ADDR_T variable
-*/
-#define gcmSAFECASTPHYSADDRT(x, y) \
- do \
- { \
- gctUINT32 tmp = (gctUINT32)(y); \
- if (gcmSIZEOF(gctPHYS_ADDR_T) > gcmSIZEOF(gctUINT32)) \
- { \
- gcmASSERT(tmp <= gcvMAXUINT32); \
- } \
- (x) = tmp; \
- } \
- while (gcvFALSE)
-
-/*******************************************************************************
-**
** gcmVERIFY_LOCK
**
** Verifies whether the surface is locked.
@@ -4896,7 +4614,7 @@ gckOS_DebugStatus2Name(
{ \
prefix##TRACE(gcvLEVEL_ERROR, \
#prefix "CHECK_STATUS: status=%d(%s) @ %s(%d)", \
- last, gcmSTATUS2NAME(last), __FUNCTION__, __LINE__); \
+ last, gcoOS_DebugStatus2Name(last), __FUNCTION__, __LINE__); \
status = last; \
} \
} \
@@ -4909,7 +4627,7 @@ gckOS_DebugStatus2Name(
{ \
prefix##TRACE(gcvLEVEL_ERROR, \
#prefix "CHECK_STATUS: status=%d(%s) @ %s(%d)", \
- last, gcmkSTATUS2NAME(last), __FUNCTION__, __LINE__); \
+ last, gckOS_DebugStatus2Name(last), __FUNCTION__, __LINE__); \
status = last; \
} \
} \
@@ -5017,6 +4735,7 @@ gcGetUserDebugOption(
void
);
+
#if gcdHAS_ELLIPSIS
#define gcmUSER_DEBUG_MSG(level, ...) \
do \
@@ -5165,13 +4884,12 @@ gcGetUserDebugOption(
gctSIZE_T ReserveSize; \
gcoCMDBUF CommandBuffer; \
gctUINT32_PTR Memory; \
- gcsSTATE_DELTA_PTR StateDelta; \
- gceENGINE CurrentEngine = gcvENGINE_RENDER
+ gcsSTATE_DELTA_PTR StateDelta
#define gcmBEGINSTATEBUFFER(Hardware, CommandBuffer, StateDelta, Memory, ReserveSize) \
{ \
gcmONERROR(gcoBUFFER_Reserve( \
- Hardware->engine[CurrentEngine].buffer, ReserveSize, gcvTRUE, gcvCOMMAND_3D, &CommandBuffer \
+ Hardware->buffer, ReserveSize, gcvTRUE, gcvCOMMAND_3D, &CommandBuffer \
)); \
\
Memory = (gctUINT32_PTR) gcmUINT64_TO_PTR(CommandBuffer->lastReserve); \
@@ -5319,7 +5037,7 @@ gcGetUserDebugOption(
#define gcmSETSEMASTALLPIPE(StateDelta, CommandBuffer, Memory, Data) \
{ \
- gcmSETSINGLECTRLSTATE(StateDelta, CommandBuffer, Memory, gcvFALSE, AQSemaphoreRegAddrs, Data); \
+ gcmSETSINGLESTATE(StateDelta, CommandBuffer, Memory, gcvFALSE, AQSemaphoreRegAddrs, Data); \
\
*Memory++ = gcmSETFIELDVALUE(0, STALL_COMMAND, OPCODE, STALL); \
\
@@ -5362,8 +5080,7 @@ gcGetUserDebugOption(
gcmDEFINELOADSTATEBASE() \
gcsTEMPCMDBUF CommandBuffer = gcvNULL; \
gctUINT32_PTR Memory; \
- gcsSTATE_DELTA_PTR StateDelta; \
- gceENGINE CurrentEngine = gcvENGINE_RENDER
+ gcsSTATE_DELTA_PTR StateDelta
#define gcmBEGINSTATEBUFFER_NEW(Hardware, CommandBuffer, StateDelta, Memory, OutSide) \
@@ -5375,7 +5092,7 @@ gcGetUserDebugOption(
else \
{\
gcmONERROR(gcoBUFFER_StartTEMPCMDBUF( \
- Hardware->engine[CurrentEngine].buffer, &CommandBuffer \
+ Hardware->buffer, &CommandBuffer \
));\
\
Memory = (gctUINT32_PTR)(CommandBuffer->buffer); \
@@ -5400,36 +5117,11 @@ gcGetUserDebugOption(
CommandBuffer->currentByteSize = (gctUINT32)((gctUINT8_PTR)Memory - \
(gctUINT8_PTR)CommandBuffer->buffer); \
\
- gcmONERROR(gcoBUFFER_EndTEMPCMDBUF(Hardware->engine[CurrentEngine].buffer, gcvFALSE));\
+ gcmONERROR(gcoBUFFER_EndTEMPCMDBUF(Hardware->buffer));\
}\
gcmUNSETLOADSTATEBASE()\
}
-#define gcmDEFINECTRLSTATEBUFFER(CommandBuffer, Memory) \
- gcmDEFINESECUREUSER() \
- gcmDEFINELOADSTATEBASE() \
- gcsTEMPCMDBUF CommandBuffer = gcvNULL; \
- gctUINT32_PTR Memory; \
- gceENGINE CurrentEngine = gcvENGINE_RENDER
-
-#define gcmBEGINCTRLSTATEBUFFER(Hardware, CommandBuffer, Memory, OutSide) \
-{ \
- if (OutSide) \
- { \
- Memory = (gctUINT32_PTR)*OutSide; \
- } \
- else \
- { \
- gcmONERROR(gcoBUFFER_StartTEMPCMDBUF( \
- Hardware->engine[CurrentEngine].buffer, &CommandBuffer \
- )); \
- \
- Memory = (gctUINT32_PTR)(CommandBuffer->buffer); \
- } \
- gcmBEGINSECUREUSER(); \
- gcmSETLOADSTATEBASE(CommandBuffer,OutSide); \
-}
-
/*----------------------------------------------------------------------------*/
#define gcmBEGINSTATEBATCH_NEW(CommandBuffer, Memory, FixedPoint, Address, Count) \
@@ -5456,7 +5148,7 @@ gcGetUserDebugOption(
{ \
gctUINT32 __temp_data32__; \
\
- gcmSAFECASTSIZET(__temp_data32__, Data); \
+ __temp_data32__ = Data; \
\
*Memory++ = __temp_data32__; \
\
@@ -5541,7 +5233,7 @@ gcGetUserDebugOption(
#define gcmSETSEMASTALLPIPE_NEW(StateDelta, CommandBuffer, Memory, Data) \
{ \
- gcmSETSINGLECTRLSTATE_NEW(StateDelta, CommandBuffer, Memory, gcvFALSE, AQSemaphoreRegAddrs, Data); \
+ gcmSETSINGLESTATE_NEW(StateDelta, CommandBuffer, Memory, gcvFALSE, AQSemaphoreRegAddrs, Data); \
\
*Memory++ = gcmSETFIELDVALUE(0, STALL_COMMAND, OPCODE, STALL); \
\
@@ -5676,7 +5368,7 @@ gcGetUserDebugOption(
#define gcmBEGINSTATEBUFFER_FAST(Hardware, CommandBuffer, Memory, ReserveSize) \
{ \
gcmONERROR(gcoBUFFER_Reserve( \
- Hardware->engine[gcvENGINE_RENDER].buffer, ReserveSize, gcvTRUE, &CommandBuffer \
+ Hardware->buffer, ReserveSize, gcvTRUE, &CommandBuffer \
)); \
\
Memory = (gctUINT32_PTR) gcmUINT64_TO_PTR(CommandBuffer->lastReserve); \
@@ -5693,7 +5385,7 @@ gcGetUserDebugOption(
else \
{\
gcmONERROR(gcoBUFFER_StartTEMPCMDBUF( \
- Hardware->engine[gcvENGINE_RENDER].buffer, &CommandBuffer \
+ Hardware->buffer, &CommandBuffer \
));\
\
Memory = (gctUINT32_PTR)(CommandBuffer->buffer); \
@@ -5703,25 +5395,6 @@ gcGetUserDebugOption(
gcmBEGINSECUREUSER(); \
gcmSETLOADSTATEBASE(CommandBuffer,OutSide);\
}
-
-#define gcmENDSTATEBUFFER_NEW_FAST(Hardware, CommandBuffer, Memory, OutSide) \
-{ \
- gcmENDSECUREUSER(); \
- \
- if (OutSide) \
- {\
- *OutSide = Memory; \
- }\
- else \
- {\
- CommandBuffer->currentByteSize = (gctUINT32)((gctUINT8_PTR)Memory - \
- (gctUINT8_PTR)CommandBuffer->buffer); \
- \
- gcmONERROR(gcoBUFFER_EndTEMPCMDBUF(Hardware->engine[gcvENGINE_RENDER].buffer, gcvFALSE));\
- }\
- gcmUNSETLOADSTATEBASE()\
-}
-
/*******************************************************************************
**
** gcmCONFIGUREUNIFORMS
@@ -5732,7 +5405,7 @@ gcGetUserDebugOption(
#define gcmCONFIGUREUNIFORMS(ChipModel, ChipRevision, NumConstants, \
UnifiedConst, VsConstBase, PsConstBase, VsConstMax, PsConstMax, ConstMax) \
{ \
- if (ChipModel == gcv2000 && (ChipRevision == 0x5118 || ChipRevision == 0x5140)) \
+ if (ChipModel == gcv2000 && ChipRevision == 0x5118) \
{ \
UnifiedConst = gcvFALSE; \
VsConstBase = AQVertexShaderConstRegAddrs; \
@@ -5789,38 +5462,21 @@ gcGetUserDebugOption(
} \
}
#else
-#define gcmCONFIGUREUNIFORMS(ChipModel, ChipRevision, Halti5Avail, NumConstants, \
+#define gcmCONFIGUREUNIFORMS(ChipModel, ChipRevision, NumConstants, \
UnifiedConst, VsConstBase, PsConstBase, VsConstMax, PsConstMax, ConstMax) \
{ \
if (NumConstants > 256) \
{ \
UnifiedConst = gcvTRUE; \
- if (Halti5Avail) \
- { \
- VsConstBase = gcregGpipeUniformsRegAddrs; \
- PsConstBase = gcregPixelUniformsRegAddrs; \
- } \
- else \
- {\
- VsConstBase = gcregSHUniformsRegAddrs; \
- PsConstBase = gcregSHUniformsRegAddrs; \
- }\
- if ((ChipModel == gcv880) && ((ChipRevision & 0xfff0) == 0x5120)) \
- { \
- VsConstMax = 512; \
- PsConstMax = 64; \
- ConstMax = 576; \
- } \
- else \
- { \
- VsConstMax = gcmMIN(512, NumConstants - 64); \
- PsConstMax = gcmMIN(512, NumConstants - 64); \
- ConstMax = NumConstants; \
- } \
+ VsConstBase = gcregSHUniformsRegAddrs; \
+ PsConstBase = gcregSHUniformsRegAddrs; \
+ VsConstMax = gcmMIN(512, NumConstants - 64); \
+ PsConstMax = gcmMIN(512, NumConstants - 64); \
+ ConstMax = NumConstants; \
} \
else if (NumConstants == 256) \
{ \
- if (ChipModel == gcv2000 && (ChipRevision == 0x5118 || ChipRevision == 0x5140)) \
+ if (ChipModel == gcv2000 && ChipRevision == 0x5118) \
{ \
UnifiedConst = gcvFALSE; \
VsConstBase = AQVertexShaderConstRegAddrs; \
diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
index 767ad454c232..2641abee402c 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
@@ -52,6 +52,7 @@
*
*****************************************************************************/
+
#ifndef __gc_hal_driver_h_
#define __gc_hal_driver_h_
@@ -211,7 +212,7 @@ typedef enum _gceHAL_COMMAND_CODES
/* Create native fence and return its fd. */
gcvHAL_CREATE_NATIVE_FENCE,
- /* Let GPU wait on native fence. */
+ /* Wait native fence for GPU. */
gcvHAL_WAIT_NATIVE_FENCE,
/* Destory MMU. */
@@ -220,29 +221,21 @@ typedef enum _gceHAL_COMMAND_CODES
/* Shared buffer. */
gcvHAL_SHBUF,
+ /* Config power management. */
+ gcvHAL_CONFIG_POWER_MANAGEMENT,
/* Connect a video node to an OS native fd. */
gcvHAL_GET_VIDEO_MEMORY_FD,
- /* Config power management. */
- gcvHAL_CONFIG_POWER_MANAGEMENT,
-
/* Wrap a user memory into a video memory node. */
gcvHAL_WRAP_USER_MEMORY,
- /* Wait until GPU finishes access to a resource. */
- gcvHAL_WAIT_FENCE,
-
-#if gcdDEC_ENABLE_AHB
+#if gcdENABLE_DEC_COMPRESSION && gcdDEC_ENABLE_AHB
gcvHAL_DEC300_READ,
gcvHAL_DEC300_WRITE,
gcvHAL_DEC300_FLUSH,
gcvHAL_DEC300_FLUSH_WAIT,
#endif
-
-#if gcdENABLE_VG
- gcvHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY
-#endif
}
gceHAL_COMMAND_CODES;
@@ -272,12 +265,10 @@ typedef struct _gcsUSER_MEMORY_DESC
gctUINT64 logical;
gctUINT32 physical;
gctUINT32 size;
-
- /* gcvALLOC_FLAG_EXTERNAL_MEMORY */
- gcsEXTERNAL_MEMORY_INFO externalMemoryInfo;
}
gcsUSER_MEMORY_DESC;
+
/* gcvHAL_QUERY_CHIP_IDENTITY */
typedef struct _gcsHAL_QUERY_CHIP_IDENTITY * gcsHAL_QUERY_CHIP_IDENTITY_PTR;
typedef struct _gcsHAL_QUERY_CHIP_IDENTITY
@@ -289,10 +280,6 @@ typedef struct _gcsHAL_QUERY_CHIP_IDENTITY
/* Revision value.*/
gctUINT32 chipRevision;
- /* Chip date. */
- gctUINT32 chipDate;
-
-#if gcdENABLE_VG
/* Supported feature fields. */
gctUINT32 chipFeatures;
@@ -314,42 +301,58 @@ typedef struct _gcsHAL_QUERY_CHIP_IDENTITY
/* Supported minor feature 5 fields. */
gctUINT32 chipMinorFeatures5;
- /* Supported minor feature 6 fields. */
+ /* Supported minor feature 5 fields. */
gctUINT32 chipMinorFeatures6;
-#endif
/* Number of streams supported. */
gctUINT32 streamCount;
+ /* Total number of temporary registers per thread. */
+ gctUINT32 registerMax;
+
+ /* Maximum number of threads. */
+ gctUINT32 threadCount;
+
+ /* Number of shader cores. */
+ gctUINT32 shaderCoreCount;
+
+ /* Size of the vertex cache. */
+ gctUINT32 vertexCacheSize;
+
+ /* Number of entries in the vertex output buffer. */
+ gctUINT32 vertexOutputBufferSize;
+
/* Number of pixel pipes. */
gctUINT32 pixelPipes;
- /* Number of resolve pipes. */
- gctUINT32 resolvePipes;
-
/* Number of instructions. */
gctUINT32 instructionCount;
/* Number of constants. */
gctUINT32 numConstants;
+ /* Buffer size */
+ gctUINT32 bufferSize;
+
/* Number of varyings */
gctUINT32 varyingsCount;
+ /* Supertile layout style in hardware */
+ gctUINT32 superTileMode;
+
+#if gcdMULTI_GPU
/* Number of 3D GPUs */
gctUINT32 gpuCoreCount;
+#endif
+
+ /* Special control bits for 2D chip. */
+ gctUINT32 chip2DControl;
/* Product ID */
gctUINT32 productID;
/* Special chip flag bits */
gceCHIP_FLAG chipFlags;
-
- /* ECO ID. */
- gctUINT32 ecoID;
-
- /* Customer ID. */
- gctUINT32 customerID;
}
gcsHAL_QUERY_CHIP_IDENTITY;
@@ -391,9 +394,6 @@ typedef struct _gcsHAL_INTERFACE
/* Hardware type. */
gceHARDWARE_TYPE hardwareType;
- /* Core index for current hardware type. */
- gctUINT32 coreIndex;
-
/* Status value. */
gceSTATUS status;
@@ -403,9 +403,6 @@ typedef struct _gcsHAL_INTERFACE
/* Pid of the client. */
gctUINT32 pid;
- /* Engine */
- gceENGINE engine;
-
/* Union of command structures. */
union _u
{
@@ -414,12 +411,6 @@ typedef struct _gcsHAL_INTERFACE
{
/* Physical memory address of internal memory. */
OUT gctUINT32 baseAddress;
-
- /* Start of flat mapping range. */
- OUT gctUINT32 flatMappingStart;
-
- /* End of flat mapping range. */
- OUT gctUINT32 flatMappingEnd;
}
GetBaseAddress;
@@ -644,7 +635,11 @@ typedef struct _gcsHAL_INTERFACE
/* Event queue in gcsQUEUE. */
IN gctUINT64 queue;
- IN gceENGINE engine;
+#if gcdMULTI_GPU
+ IN gceCORE_3D_MASK chipEnable;
+
+ IN gceMULTI_GPU_MODE gpuMode;
+#endif
}
Event;
@@ -652,28 +647,22 @@ typedef struct _gcsHAL_INTERFACE
struct _gcsHAL_COMMIT
{
/* Context buffer object gckCONTEXT. */
- IN gctUINT64 contexts;
+ IN gctUINT64 context;
/* Command buffer gcoCMDBUF. */
- IN gctUINT64 commandBuffers;
+ IN gctUINT64 commandBuffer;
/* State delta buffer in gcsSTATE_DELTA. */
- gctUINT64 deltas;
+ gctUINT64 delta;
/* Event queue in gcsQUEUE. */
IN gctUINT64 queue;
- /* Used to distinguish different FE. */
- IN gceENGINE engine;
+#if gcdMULTI_GPU
+ IN gceCORE_3D_MASK chipEnable;
- /* The command buffer is linked to multiple command queue. */
- IN gctBOOL shared;
-
- /* Index of command queue. */
- IN gctUINT32 index;
-
- /* Count of gpu core. */
- IN gctUINT32 count;
+ IN gceMULTI_GPU_MODE gpuMode;
+#endif
}
Commit;
@@ -824,6 +813,7 @@ typedef struct _gcsHAL_INTERFACE
}
WriteRegisterData;
+#if gcdMULTI_GPU
/* gcvHAL_READ_REGISTER_EX */
struct _gcsHAL_READ_REGISTER_EX
{
@@ -833,7 +823,7 @@ typedef struct _gcsHAL_INTERFACE
IN gctUINT32 coreSelect;
/* Data read. */
- OUT gctUINT32 data[4];
+ OUT gctUINT32 data[gcdMULTI_GPU];
}
ReadRegisterDataEx;
@@ -846,9 +836,10 @@ typedef struct _gcsHAL_INTERFACE
IN gctUINT32 coreSelect;
/* Data read. */
- IN gctUINT32 data[4];
+ IN gctUINT32 data[gcdMULTI_GPU];
}
WriteRegisterDataEx;
+#endif
#if VIVANTE_PROFILER
/* gcvHAL_GET_PROFILE_SETTING */
@@ -856,7 +847,6 @@ typedef struct _gcsHAL_INTERFACE
{
/* Enable profiling */
OUT gctBOOL enable;
- OUT gctBOOL syncMode;
}
GetProfileSetting;
@@ -865,7 +855,6 @@ typedef struct _gcsHAL_INTERFACE
{
/* Enable profiling */
IN gctBOOL enable;
- IN gctBOOL syncMode;
}
SetProfileSetting;
@@ -1028,9 +1017,6 @@ typedef struct _gcsHAL_INTERFACE
/* Chip types. */
OUT gceHARDWARE_TYPE types[gcdCHIP_COUNT];
-
- /* Chip IDs. */
- OUT gctUINT32 ids[gcvCORE_COUNT];
}
ChipInfo;
@@ -1145,7 +1131,6 @@ typedef struct _gcsHAL_INTERFACE
struct _gcsHAL_QUERY_RESET_TIME_STAMP
{
OUT gctUINT64 timeStamp;
- OUT gctUINT64 contextID;
}
QueryResetTimeStamp;
@@ -1208,6 +1193,11 @@ typedef struct _gcsHAL_INTERFACE
}
ShBuf;
+ struct _gcsHAL_CONFIG_POWER_MANAGEMENT
+ {
+ IN gctBOOL enable;
+ }
+ ConfigPowerManagement;
struct _gcsHAL_GET_VIDEO_MEMORY_FD
{
@@ -1216,12 +1206,6 @@ typedef struct _gcsHAL_INTERFACE
}
GetVideoMemoryFd;
- struct _gcsHAL_CONFIG_POWER_MANAGEMENT
- {
- IN gctBOOL enable;
- }
- ConfigPowerManagement;
-
struct _gcsHAL_WRAP_USER_MEMORY
{
/* Handle from other allocators. */
@@ -1238,20 +1222,7 @@ typedef struct _gcsHAL_INTERFACE
}
WrapUserMemory;
- struct _gcsHAL_WAIT_FENCE
- {
- IN gctUINT32 handle;
- IN gctUINT32 timeOut;
- }
- WaitFence;
-
- struct _gcsHAL_COMMIT_DONE
- {
- IN gctUINT64 context;
- }
- CommitDone;
-
-#if gcdDEC_ENABLE_AHB
+#if gcdENABLE_DEC_COMPRESSION && gcdDEC_ENABLE_AHB
struct _gcsHAL_DEC300_READ
{
gctUINT32 enable;
@@ -1291,19 +1262,6 @@ typedef struct _gcsHAL_INTERFACE
}
DEC300FlushWait;
#endif
-
-#if gcdENABLE_VG
- /* gcvHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY: */
- struct _gcsHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY
- {
- /* Allocated video memory. */
- IN gctUINT32 node;
-
- /* Type of surface. */
- IN gceSURF_TYPE type;
- }
- BottomHalfUnlockVideoMemory;
-#endif
}
u;
}
diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h
index d05b38ac8c7a..ed41b7c892d9 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h
@@ -56,34 +56,36 @@
#ifndef __gc_hal_eglplatform_h_
#define __gc_hal_eglplatform_h_
+/* Include VDK types. */
#include "gc_hal_types.h"
#include "gc_hal_base.h"
-
+#include "gc_hal_eglplatform_type.h"
#ifdef __cplusplus
extern "C" {
#endif
#if defined(_WIN32) || defined(__VC32__) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
-#ifndef WIN32_LEAN_AND_MEAN
-/* #define WIN32_LEAN_AND_MEAN 1 */
-#endif
+/* Win32 and Windows CE platforms. */
#include <windows.h>
+typedef HDC HALNativeDisplayType;
+typedef HWND HALNativeWindowType;
+typedef HBITMAP HALNativePixmapType;
-typedef HDC HALNativeDisplayType;
-typedef HWND HALNativeWindowType;
-typedef HBITMAP HALNativePixmapType;
-
-typedef struct __BITFIELDINFO
-{
+typedef struct __BITFIELDINFO{
BITMAPINFO bmi;
RGBQUAD bmiColors[2];
-}
-BITFIELDINFO;
+} BITFIELDINFO;
+
+#elif defined(LINUX) && defined(EGL_API_DFB) && !defined(__APPLE__)
+#include <directfb.h>
+typedef struct _DFBDisplay * HALNativeDisplayType;
+typedef struct _DFBWindow * HALNativeWindowType;
+typedef struct _DFBPixmap * HALNativePixmapType;
-#elif /* defined(__APPLE__) || */ defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */
+#elif defined(LINUX) && defined(EGL_API_FB) && !defined(__APPLE__)
-#elif defined(WL_EGL_PLATFORM) || defined(EGL_API_WL) /* Wayland */
+#if defined(EGL_API_WL)
#if defined(__GNUC__)
# define inline __inline__ /* GNU keyword. */
@@ -93,8 +95,11 @@ BITFIELDINFO;
#include <wayland-egl.h>
#include <pthread.h>
+
#define WL_COMPOSITOR_SIGNATURE (0x31415926)
-#define WL_CLIENT_SIGNATURE (0x27182818)
+
+#define WL_CLIENT_SIGNATURE (0x27182818)
+
#define WL_LOCAL_DISPLAY_SIGNATURE (0x27182991)
typedef struct _gcsWL_VIV_BUFFER
@@ -115,9 +120,10 @@ typedef struct _gcsWL_EGL_DISPLAY
gctINT file;
} gcsWL_EGL_DISPLAY;
-typedef struct _gcsWL_LOCAL_DISPLAY {
- gctUINT wl_signature;
- gctPOINTER localInfo;
+typedef struct _gcsWL_LOCAL_DISPLAY
+{
+ gctUINT wl_signature;
+ gctPOINTER localInfo;
} gcsWL_LOCAL_DISPLAY;
typedef struct _gcsWL_EGL_BUFFER_INFO
@@ -129,7 +135,7 @@ typedef struct _gcsWL_EGL_BUFFER_INFO
gceSURF_TYPE type;
gcuVIDMEM_NODE_PTR node;
gcePOOL pool;
- gctSIZE_T bytes;
+ gctUINT bytes;
gcoSURF surface;
gctINT32 invalidate;
gctBOOL locked;
@@ -171,34 +177,77 @@ struct wl_egl_window
struct wl_list link;
};
-typedef void * HALNativeDisplayType;
-typedef void * HALNativeWindowType;
-typedef void * HALNativePixmapType;
-
-#elif defined(__GBM__) /* GBM */
-
+typedef void* HALNativeDisplayType;
+typedef void* HALNativeWindowType;
+typedef void* HALNativePixmapType;
+#else
+/* Linux platform for FBDEV. */
+typedef struct _FBDisplay * HALNativeDisplayType;
+typedef struct _FBWindow * HALNativeWindowType;
+typedef struct _FBPixmap * HALNativePixmapType;
+#endif
#elif defined(__ANDROID__) || defined(ANDROID)
-#elif defined(MIR_EGL_PLATFORM) /* Mir */
-
-#elif defined(__QNXNTO__)
+struct egl_native_pixmap_t;
-#elif defined(__unix__) || defined(__APPLE__)
+#if ANDROID_SDK_VERSION >= 9
+ #include <android/native_window.h>
-#if defined(EGL_API_DFB)
-
-#elif defined(EGL_API_FB)
+ typedef struct ANativeWindow* HALNativeWindowType;
+ typedef struct egl_native_pixmap_t* HALNativePixmapType;
+ typedef void* HALNativeDisplayType;
+#else
+ struct android_native_window_t;
+ typedef struct android_native_window_t* HALNativeWindowType;
+ typedef struct egl_native_pixmap_t * HALNativePixmapType;
+ typedef void* HALNativeDisplayType;
+#endif
-#elif defined(EGL_API_NULLWS)
+#elif defined(LINUX) || defined(__APPLE__)
+/* X11 platform. */
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+typedef Display * HALNativeDisplayType;
+typedef Window HALNativeWindowType;
+#ifdef CUSTOM_PIXMAP
+typedef void * HALNativePixmapType;
#else
+typedef Pixmap HALNativePixmapType;
+#endif /* CUSTOM_PIXMAP */
-/* X11 (tetative). */
+/* Rename some badly named X defines. */
+#ifdef Status
+# define XStatus int
+# undef Status
+#endif
+#ifdef Always
+# define XAlways 2
+# undef Always
+#endif
+#ifdef CurrentTime
+# undef CurrentTime
+# define XCurrentTime 0
#endif
+#elif defined(__QNXNTO__)
+#include <screen/screen.h>
+
+/* VOID */
+typedef int HALNativeDisplayType;
+typedef screen_window_t HALNativeWindowType;
+typedef screen_pixmap_t HALNativePixmapType;
+
#else
+
#error "Platform not recognized"
+
+/* VOID */
+typedef void * HALNativeDisplayType;
+typedef void * HALNativeWindowType;
+typedef void * HALNativePixmapType;
+
#endif
/* define DUMMY according to the system */
@@ -212,10 +261,6 @@ typedef void * HALNativePixmapType;
# define EGL_DUMMY (31415926)
#endif
-#if defined(_WIN32) || defined(__VC32__) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
-
-#include "gc_hal_eglplatform_type.h"
-
/*******************************************************************************
** Display. ********************************************************************
*/
@@ -292,17 +337,6 @@ gcoOS_SetDisplayVirtualEx(
);
gceSTATUS
-gcoOS_CancelDisplayBackbuffer(
- IN HALNativeDisplayType Display,
- IN HALNativeWindowType Window,
- IN gctPOINTER Context,
- IN gcoSURF Surface,
- IN gctUINT Offset,
- IN gctINT X,
- IN gctINT Y
- );
-
-gceSTATUS
gcoOS_SetSwapInterval(
IN HALNativeDisplayType Display,
IN gctINT Interval
@@ -410,6 +444,14 @@ gcoOS_GetWindowInfo(
);
gceSTATUS
+gcoOS_SetWindowFormat(
+ IN HALNativeDisplayType Display,
+ IN HALNativeWindowType Window,
+ IN gceTILING Tiling,
+ IN gceSURF_FORMAT Format
+ );
+
+gceSTATUS
gcoOS_DestroyWindow(
IN HALNativeDisplayType Display,
IN HALNativeWindowType Window
@@ -450,8 +492,7 @@ gcoOS_GetWindowInfoEx(
OUT gctINT * Height,
OUT gctINT * BitsPerPixel,
OUT gctUINT * Offset,
- OUT gceSURF_FORMAT * Format,
- OUT gceSURF_TYPE * Type
+ OUT gceSURF_FORMAT * Format
);
gceSTATUS
@@ -469,22 +510,6 @@ gcoOS_DrawImageEx(
IN gceSURF_FORMAT Format
);
-/*
- * Possiable types:
- * gcvSURF_BITMAP
- * gcvSURF_RENDER_TARGET
- * gcvSURF_RENDER_TARGET_NO_COMPRESSION
- * gcvSURF_RENDER_TARGET_NO_TILE_STATUS
- */
-gceSTATUS
-gcoOS_SetWindowFormat(
- IN HALNativeDisplayType Display,
- IN HALNativeWindowType Window,
- IN gceSURF_TYPE Type,
- IN gceSURF_FORMAT Format
- );
-
-
/*******************************************************************************
** Pixmaps. ********************************************************************
*/
@@ -663,6 +688,7 @@ gcoOS_SwapBuffers(
OUT gctUINT *Height
);
+#ifdef EGL_API_DRI
gceSTATUS
gcoOS_ResizeWindow(
IN gctPOINTER localDisplay,
@@ -671,13 +697,33 @@ gcoOS_ResizeWindow(
IN gctUINT Height
);
+#ifdef USE_FREESCALE_EGL_ACCEL
gceSTATUS
-gcoOS_RSForSwap(
+gcoOS_CreateDrawableEx(
IN gctPOINTER localDisplay,
IN HALNativeWindowType Drawable,
- IN gctPOINTER resolve
+ IN gctBOOL linear);
+
+gceSTATUS
+gcoOS_SwapBuffersGeneric_Async(
+ IN gctPOINTER localDisplay,
+ IN HALNativeWindowType Drawable,
+ IN gcoSURF RenderTarget,
+ IN gcoSURF ResolveTarget,
+ IN gctPOINTER ResolveBits,
+ OUT gctUINT *Width,
+ OUT gctUINT *Height,
+ IN void * resolveRect,
+ OUT gcoSURF *nextSurf
);
+gceSTATUS
+gcoOS_DrawSurface(
+ IN gctPOINTER localDisplay,
+ IN HALNativeWindowType Drawable
+ );
+#endif
+
#endif
#ifdef __cplusplus
diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform_type.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform_type.h
index c0cf93ce0c7b..00120072d1af 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform_type.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform_type.h
@@ -267,6 +267,28 @@ typedef struct _halEvent
}
halEvent;
+/* Tiling layouts. */
+typedef enum _halTiling
+{
+ HAL_INVALIDTILED = 0x0, /* Invalid tiling */
+ /* Tiling basic modes enum'ed in power of 2. */
+ HAL_LINEAR = 0x1, /* No tiling. */
+ HAL_TILED = 0x2, /* 4x4 tiling. */
+ HAL_SUPERTILED = 0x4, /* 64x64 tiling. */
+ HAL_MINORTILED = 0x8, /* 2x2 tiling. */
+
+ /* Tiling special layouts. */
+ HAL_TILING_SPLIT_BUFFER = 0x100,
+
+ /* Tiling combination layouts. */
+ HAL_MULTI_TILED = HAL_TILED
+ | HAL_TILING_SPLIT_BUFFER,
+
+ HAL_MULTI_SUPERTILED = HAL_SUPERTILED
+ | HAL_TILING_SPLIT_BUFFER,
+}
+halTiling;
+
/* VFK_DISPLAY_INFO structure defining information returned by
vdkGetDisplayInfoEx. */
typedef struct _halDISPLAY_INFO
@@ -279,6 +301,9 @@ typedef struct _halDISPLAY_INFO
** for the specified display.*/
int stride;
+ /* The tiling layout of the display. */
+ int tiling;
+
/* The color depth of the display in bits per pixel. */
int bitsPerPixel;
@@ -290,18 +315,13 @@ typedef struct _halDISPLAY_INFO
** if the address is not known for the specified display. */
unsigned long physical;
- /* Can be wraped as surface. */
+ /* True if requires buffer wrapping. */
int wrapFB;
- /* FB_MULTI_BUFFER support */
+ /* FB_MULTI_BUFFER */
int multiBuffer;
int backBufferY;
- /* Tiled buffer / tile status support. */
- int tiledBuffer;
- int tileStatus;
- int compression;
-
/* The color info of the display. */
unsigned int alphaLength;
unsigned int alphaOffset;
diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
index 39bc31b38e24..31c6bdf97730 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
@@ -59,8 +59,8 @@
#include "gc_hal_types.h"
#include "gc_hal_enum.h"
-
-#if gcdENABLE_3D && gcdENABLE_VG
+#if gcdENABLE_3D
+#if gcdENABLE_VG
#include "gc_hal_engine_vg.h"
#endif
@@ -68,45 +68,6 @@
extern "C" {
#endif
-typedef struct _gcsSURF_RESOLVE_ARGS
-{
- gceHAL_ARG_VERSION version;
-
- union _gcsSURF_RESOLVE_ARGS_UNION
- {
-
- struct _gcsSURF_RESOLVE_ARG_v2
- {
- gctBOOL yInverted;
- gctBOOL directCopy;
- gctBOOL resample;
- gctBOOL bUploadTex; /* used for upload tex.*/
- gctBOOL visualizeDepth; /* convert depth to visible color */
- gcsPOINT srcOrigin;
- gcsPOINT dstOrigin;
- gcsPOINT rectSize;
- gctUINT numSlices;
- gceENGINE engine; /* 3DBlit engine */
- gctBOOL gpuOnly; /* need only try HW path.*/
-
- gctBOOL dump; /* need dump for verify */
- gctBOOL srcSwizzle; /* src surface format swizzle infomation */
- gctBOOL dstSwizzle; /* dst surface format swizzle infomation */
- gctBOOL srcCompressed; /* src compressed format*/
- gctBOOL dstCompressed; /* dst compressed format*/
- } v2;
- } uArgs;
-}
-gcsSURF_RESOLVE_ARGS;
-
-typedef struct _gcsSURF_VIEW
-{
- gcoSURF surf;
- gctUINT firstSlice;
- gctUINT numSlices;
-}gcsSURF_VIEW;
-
-#if gcdENABLE_3D
/******************************************************************************\
****************************** Object Declarations *****************************
\******************************************************************************/
@@ -119,13 +80,13 @@ typedef struct _gcsVERTEX_ATTRIBUTES * gcsVERTEX_ATTRIBUTES_PTR;
typedef struct _gcoVERTEXARRAY * gcoVERTEXARRAY;
typedef struct _gcoBUFOBJ * gcoBUFOBJ;
-#define gcdATTRIBUTE_COUNT 32
+#define gcdATTRIBUTE_COUNT 16
typedef enum _gcePROGRAM_STAGE
{
gcvPROGRAM_STAGE_VERTEX = 0x0,
- gcvPROGRAM_STAGE_TCS = 0x1,
- gcvPROGRAM_STAGE_TES = 0x2,
+ gcvPROGRAM_STAGE_TES = 0x1,
+ gcvPROGRAM_STAGE_TCS = 0x2,
gcvPROGRAM_STAGE_GEOMETRY = 0x3,
gcvPROGRAM_STAGE_FRAGMENT = 0x4,
gcvPROGRAM_STAGE_COMPUTE = 0x5,
@@ -137,8 +98,8 @@ gcePROGRAM_STAGE;
typedef enum _gcePROGRAM_STAGE_BIT
{
gcvPROGRAM_STAGE_VERTEX_BIT = 1 << gcvPROGRAM_STAGE_VERTEX,
- gcvPROGRAM_STAGE_TCS_BIT = 1 << gcvPROGRAM_STAGE_TCS,
gcvPROGRAM_STAGE_TES_BIT = 1 << gcvPROGRAM_STAGE_TES,
+ gcvPROGRAM_STAGE_TCS_BIT = 1 << gcvPROGRAM_STAGE_TCS,
gcvPROGRAM_STAGE_GEOMETRY_BIT = 1 << gcvPROGRAM_STAGE_GEOMETRY,
gcvPROGRAM_STAGE_FRAGMENT_BIT = 1 << gcvPROGRAM_STAGE_FRAGMENT,
gcvPROGRAM_STAGE_COMPUTE_BIT = 1 << gcvPROGRAM_STAGE_COMPUTE,
@@ -147,11 +108,6 @@ typedef enum _gcePROGRAM_STAGE_BIT
gcePROGRAM_STAGE_BIT;
-#define gcvPORGRAM_STAGE_GPIPE (gcvPROGRAM_STAGE_VERTEX_BIT | \
- gcvPROGRAM_STAGE_TCS_BIT | \
- gcvPROGRAM_STAGE_TES_BIT | \
- gcvPROGRAM_STAGE_GEOMETRY_BIT)
-
/******************************************************************************\
********************************* gcoHAL Object *********************************
\******************************************************************************/
@@ -181,8 +137,8 @@ gcoHAL_QuerySamplerBase(
gceSTATUS
gcoHAL_QueryUniformBase(
IN gcoHAL Hal,
- OUT gctUINT32 * VertexBase,
- OUT gctUINT32 * FragmentBase
+ OUT gctUINT32 * VertexBase,
+ OUT gctUINT32 * FragmentBase
);
gceSTATUS
@@ -207,10 +163,9 @@ gceSTATUS
gcoHAL_QueryStreamCaps(
IN gcoHAL Hal,
OUT gctUINT32 * MaxAttributes,
- OUT gctUINT32 * MaxStreamStride,
+ OUT gctUINT32 * MaxStreamSize,
OUT gctUINT32 * NumberOfStreams,
- OUT gctUINT32 * Alignment,
- OUT gctUINT32 * MaxAttribOffset
+ OUT gctUINT32 * Alignment
);
/******************************************************************************\
@@ -221,8 +176,8 @@ gcoHAL_QueryStreamCaps(
/*--------------------------------- gcoSURF 3D --------------------------------*/
typedef enum _gceBLIT_FLAG
{
- gcvBLIT_FLAG_SKIP_DEPTH_WRITE = 1 << 0,
- gcvBLIT_FLAG_SKIP_STENCIL_WRITE = 1 << 1,
+ gcvBLIT_FLAG_SKIP_DEPTH_WRITE = 0x1,
+ gcvBLIT_FLAG_SKIP_STENCIL_WRITE = 0x2,
} gceBLIT_FLAG;
typedef struct _gcsSURF_BLIT_ARGS
@@ -251,9 +206,9 @@ typedef enum _gceCLEAR
gcvCLEAR_DEPTH = 0x2,
gcvCLEAR_STENCIL = 0x4,
gcvCLEAR_HZ = 0x8,
+ gcvCLEAR_HAS_VAA = 0x10,
gcvCLEAR_WITH_GPU_ONLY = 0x100,
gcvCLEAR_WITH_CPU_ONLY = 0x200,
- gcvCLEAR_MULTI_SLICES = 0x400,
}
gceCLEAR;
@@ -264,27 +219,52 @@ typedef struct _gcsSURF_CLEAR_ARGS
** is called.
*/
struct {
- gcuVALUE r;
- gcuVALUE g;
- gcuVALUE b;
- gcuVALUE a;
- /* Color has multiple value type so we must specify it. */
- gceVALUE_TYPE valueType;
+ gcuVALUE r;
+ gcuVALUE g;
+ gcuVALUE b;
+ gcuVALUE a;
+ /*
+ ** Color has multiple value type so we must specify it.
+ */
+ gceVALUE_TYPE valueType;
} color;
gcuVALUE depth;
+
gctUINT stencil;
- gctUINT8 stencilMask; /* stencil bit-wise mask */
- gctBOOL depthMask; /* Depth Write Mask */
- gctUINT8 colorMask; /* 4-bit channel Mask: ABGR:MSB->LSB */
- gcsRECT_PTR clearRect; /* NULL means full clear */
- gceCLEAR flags; /* clear flags */
- gctUINT32 offset; /* Offset in surface to cube/array/3D, obsolete in v2 version */
-} gcsSURF_CLEAR_ARGS, *gcsSURF_CLEAR_ARGS_PTR;
+ /*
+ ** stencil bit-wise mask
+ */
+ gctUINT8 stencilMask;
+ /*
+ ** Depth Write Mask
+ */
+ gctBOOL depthMask;
+ /*
+ ** 4-bit channel Mask: ABGR:MSB->LSB
+ */
+ gctUINT8 colorMask;
+ /*
+ ** If ClearRect is NULL, it means full clear
+ */
+ gcsRECT_PTR clearRect;
+ /*
+ ** clear flags
+ */
+ gceCLEAR flags;
+ /*
+ ** Offset in surface to cube/array/3D
+ */
+ gctUINT32 offset;
+
+} gcsSURF_CLEAR_ARGS;
+
+
+typedef gcsSURF_CLEAR_ARGS* gcsSURF_CLEAR_ARGS_PTR;
typedef struct _gscSURF_BLITDRAW_BLIT
{
@@ -339,17 +319,19 @@ typedef struct _gscSURF_BLITDRAW_ARGS
}
gcsSURF_BLITDRAW_ARGS;
-typedef struct _gcsSURF_BLITBLT_ARGS
+
+typedef struct _gcsSURF_RESOLVE_ARGS
{
- gctCONST_POINTER buf;
- gceSURF_FORMAT format;
- gctUINT32 stride;
- gcoSURF dstSurf;
- gcsPOINT dstOrigin;
- gcsPOINT rectSize;
- gctUINT32 dstOffset;
+ gceHAL_ARG_VERSION version;
+ union _gcsSURF_RESOLVE_ARGS_UNION
+ {
+ struct _gcsSURF_RESOLVE_ARG_v1
+ {
+ gctBOOL yInverted;
+ }v1;
+ } uArgs;
}
-gcsSURF_BLITBLT_ARGS;
+gcsSURF_RESOLVE_ARGS;
/* CPU Blit with format (including linear <-> tile) conversion*/
@@ -358,74 +340,106 @@ gcoSURF_BlitCPU(
gcsSURF_BLIT_ARGS* args
);
-/* Copy a rectangular area with format conversion. */
+
gceSTATUS
-gcoSURF_CopyPixels(
- IN gcsSURF_VIEW *SrcView,
- IN gcsSURF_VIEW *DstView,
- IN gcsSURF_RESOLVE_ARGS *Args
+gcoSURF_BlitDraw(
+ IN gcsSURF_BLITDRAW_ARGS *args
);
+#endif /* gcdENABLE_3D */
+
+
+#if gcdENABLE_3D
/* Clear surface function. */
gceSTATUS
gcoSURF_Clear(
- IN gcsSURF_VIEW *SurfView,
- IN gcsSURF_CLEAR_ARGS_PTR ClearArgs
+ IN gcoSURF Surface,
+ IN gcsSURF_CLEAR_ARGS_PTR clearArg
);
/* Preserve pixels from source. */
gceSTATUS
gcoSURF_Preserve(
- IN gcoSURF SrcSurf,
- IN gcoSURF DstSurf,
+ IN gcoSURF Source,
+ IN gcoSURF Dest,
IN gcsRECT_PTR MaskRect
);
+
/* TO BE REMOVED */
+ gceSTATUS
+ depr_gcoSURF_Resolve(
+ IN gcoSURF SrcSurface,
+ IN gcoSURF DestSurface,
+ IN gctUINT32 DestAddress,
+ IN gctPOINTER DestBits,
+ IN gctINT DestStride,
+ IN gceSURF_TYPE DestType,
+ IN gceSURF_FORMAT DestFormat,
+ IN gctUINT DestWidth,
+ IN gctUINT DestHeight
+ );
+
+ gceSTATUS
+ depr_gcoSURF_ResolveRect(
+ IN gcoSURF SrcSurface,
+ IN gcoSURF DestSurface,
+ IN gctUINT32 DestAddress,
+ IN gctPOINTER DestBits,
+ IN gctINT DestStride,
+ IN gceSURF_TYPE DestType,
+ IN gceSURF_FORMAT DestFormat,
+ IN gctUINT DestWidth,
+ IN gctUINT DestHeight,
+ IN gcsPOINT_PTR SrcOrigin,
+ IN gcsPOINT_PTR DestOrigin,
+ IN gcsPOINT_PTR RectSize
+ );
+
+/* Resample surface. */
gceSTATUS
-depr_gcoSURF_Resolve(
+gcoSURF_Resample(
IN gcoSURF SrcSurface,
- IN gcoSURF DestSurface,
- IN gctUINT32 DestAddress,
- IN gctPOINTER DestBits,
- IN gctINT DestStride,
- IN gceSURF_TYPE DestType,
- IN gceSURF_FORMAT DestFormat,
- IN gctUINT DestWidth,
- IN gctUINT DestHeight
+ IN gcoSURF DestSurface
);
+/* Resolve surface. */
gceSTATUS
-depr_gcoSURF_ResolveRect(
+gcoSURF_Resolve(
IN gcoSURF SrcSurface,
- IN gcoSURF DstSurface,
- IN gctUINT32 DstAddress,
- IN gctPOINTER DstBits,
- IN gctINT DstStride,
- IN gceSURF_TYPE DstType,
- IN gceSURF_FORMAT DstFormat,
- IN gctUINT DstWidth,
- IN gctUINT DstHeight,
- IN gcsPOINT_PTR SrcOrigin,
- IN gcsPOINT_PTR gcoSURF,
- IN gcsPOINT_PTR RectSize
+ IN gcoSURF DestSurface
);
-/* Resample surface. */
gceSTATUS
-gcoSURF_Resample(
- IN gcoSURF SrcSurf,
- IN gcoSURF DstSurf
+gcoSURF_ResolveEx(
+ IN gcoSURF SrcSurface,
+ IN gcoSURF DestSurface,
+ IN gcsSURF_RESOLVE_ARGS *args
);
+
/* Resolve rectangular area of a surface. */
gceSTATUS
gcoSURF_ResolveRect(
- IN gcsSURF_VIEW *SrcView,
- IN gcsSURF_VIEW *DstView,
- IN gcsSURF_RESOLVE_ARGS *Args
+ IN gcoSURF SrcSurface,
+ IN gcoSURF DestSurface,
+ IN gcsPOINT_PTR SrcOrigin,
+ IN gcsPOINT_PTR DestOrigin,
+ IN gcsPOINT_PTR RectSize
);
+/* Resolve rectangular area of a surface. */
+gceSTATUS
+gcoSURF_ResolveRectEx(
+ IN gcoSURF SrcSurface,
+ IN gcoSURF DestSurface,
+ IN gcsPOINT_PTR SrcOrigin,
+ IN gcsPOINT_PTR DestOrigin,
+ IN gcsPOINT_PTR RectSize,
+ IN gcsSURF_RESOLVE_ARGS *args
+ );
+
+
gceSTATUS
gcoSURF_GetResolveAlignment(
IN gcoSURF Surface,
@@ -437,10 +451,10 @@ gcoSURF_GetResolveAlignment(
gceSTATUS
gcoSURF_IsHWResolveable(
- IN gcoSURF SrcSurf,
- IN gcoSURF DstSurf,
+ IN gcoSURF SrcSurface,
+ IN gcoSURF DestSurface,
IN gcsPOINT_PTR SrcOrigin,
- IN gcsPOINT_PTR DstOrigin,
+ IN gcsPOINT_PTR DestOrigin,
IN gcsPOINT_PTR RectSize
);
@@ -462,32 +476,29 @@ gcoSURF_IsFormatRenderableAsRT(
);
gceSTATUS
-gcoBUFOBJ_GetFence(
- IN gcoBUFOBJ BufObj,
- IN gceFENCE_TYPE Type
+gcoSURF_SetSharedLock(
+ IN gcoSURF Surface,
+ IN gctPOINTER sharedLock
);
gceSTATUS
-gcoBUFOBJ_WaitFence(
- IN gcoBUFOBJ BufObj,
- IN gceFENCE_TYPE Type
+gcoSURF_GetFence(
+ IN gcoSURF Surface
);
gceSTATUS
-gcoBUFOBJ_IsFenceEnabled(
- IN gcoBUFOBJ BufObj
+gcoBUFOBJ_GetFence(
+ IN gcoBUFOBJ bufObj
);
gceSTATUS
-gcoSURF_SetSharedLock(
- IN gcoSURF Surface,
- IN gctPOINTER SharedLock
+gcoBUFOBJ_WaitFence(
+ IN gcoBUFOBJ bufObj
);
gceSTATUS
-gcoSURF_GetFence(
- IN gcoSURF Surface,
- IN gceFENCE_TYPE Type
+gcoBUFOBJ_IsFenceEnabled(
+ IN gcoBUFOBJ bufObj
);
gceSTATUS
@@ -507,31 +518,32 @@ gcoSTREAM_WaitFence(
gceSTATUS
gcoINDEX_GetFence(
- IN gcoINDEX Index
+ IN gcoINDEX index
);
gceSTATUS
gcoINDEX_WaitFence(
- IN gcoINDEX Index,
- IN gceFENCE_TYPE Type
+ IN gcoINDEX index
);
gceSTATUS
-gcoINDEX_SetSharedLock(
- IN gcoINDEX Index,
- IN gctPOINTER SharedLock
+gcoSURF_3DBlitClearRect(
+ IN gcoSURF Surface,
+ IN gcsSURF_CLEAR_ARGS_PTR ClearArgs
);
+
gceSTATUS
-gcoSURF_DrawBlit(
- gcsSURF_VIEW *SrcView,
- gcsSURF_VIEW *DstView,
- gscSURF_BLITDRAW_BLIT *Args
+gcoSURF_3DBlitBltRect(
+ IN gcoSURF SrcSurf,
+ IN gcoSURF DestSurf,
+ IN gcsPOINT_PTR SrcOrigin,
+ IN gcsPOINT_PTR DestOrigin,
+ IN gcsPOINT_PTR RectSize
);
gceSTATUS
gcoSURF_3DBlitCopy(
- IN gceENGINE Engine,
IN gctUINT32 SrcAddress,
IN gctUINT32 DestAddress,
IN gctUINT32 Bytes
@@ -541,6 +553,11 @@ gcoSURF_3DBlitCopy(
/******************************************************************************\
******************************** gcoINDEX Object *******************************
\******************************************************************************/
+gceSTATUS
+gcoINDEX_SetSharedLock(
+ IN gcoINDEX Index,
+ IN gctPOINTER sharedLock
+ );
/* Construct a new gcoINDEX object. */
gceSTATUS
@@ -660,8 +677,6 @@ gcoINDEX_SetDynamic(
IN gctUINT Buffers
);
-gceSTATUS
-gcoCLHardware_Construct(void);
/******************************************************************************\
********************************** gco3D Object *********************************
\******************************************************************************/
@@ -678,7 +693,6 @@ gceBLEND_UNIT;
gceSTATUS
gco3D_Construct(
IN gcoHAL Hal,
- IN gctBOOL Robust,
OUT gco3D * Engine
);
@@ -702,52 +716,61 @@ gco3D_GetAPI(
OUT gceAPI * ApiType
);
+/* Set render target. */
gceSTATUS
gco3D_SetTarget(
IN gco3D Engine,
- IN gctUINT32 TargetIndex,
- IN gcoSURF Surface,
- IN gctUINT32 SliceIndex,
- IN gctUINT32 LayerIndex
+ IN gcoSURF Surface
);
+/* Unset render target. */
gceSTATUS
gco3D_UnsetTarget(
IN gco3D Engine,
- IN gctUINT32 TargetIndex,
IN gcoSURF Surface
);
gceSTATUS
-gco3D_SetPSOutputMapping(
+gco3D_SetTargetEx(
IN gco3D Engine,
- IN gctINT32 * psOutputMapping
+ IN gctUINT32 TargetIndex,
+ IN gcoSURF Surface,
+ IN gctUINT32 LayerIndex
);
gceSTATUS
-gco3D_SetRenderLayered(
+gco3D_UnsetTargetEx(
IN gco3D Engine,
- IN gctBOOL Enable,
- IN gctUINT MaxLayers
+ IN gctUINT32 TargetIndex,
+ IN gcoSURF Surface
);
gceSTATUS
-gco3D_SetShaderLayered(
+gco3D_SetTargetOffsetEx(
IN gco3D Engine,
- IN gctBOOL Enable
+ IN gctUINT32 TargetIndex,
+ IN gctSIZE_T Offset
);
+
gceSTATUS
-gco3D_IsProgramSwitched(
- IN gco3D Engine
+gco3D_SetPSOutputMapping(
+ IN gco3D Engine,
+ IN gctINT32 * psOutputMapping
);
+
/* Set depth buffer. */
gceSTATUS
gco3D_SetDepth(
IN gco3D Engine,
- IN gcoSURF Surface,
- IN gctUINT32 SliceIndex
+ IN gcoSURF Surface
+ );
+
+gceSTATUS
+gco3D_SetDepthBufferOffset(
+ IN gco3D Engine,
+ IN gctSIZE_T Offset
);
/* Unset depth buffer. */
@@ -859,33 +882,6 @@ gco3D_SetBlendMode(
IN gceBLEND_MODE ModeAlpha
);
-/* Set blending mode for separate rt control */
-gceSTATUS
-gco3D_EnableBlendingIndexed(
- IN gco3D Engine,
- IN gctUINT Index,
- IN gctBOOL Enable
- );
-
-/* Set blending function for separate rt control */
-gceSTATUS
-gco3D_SetBlendFunctionIndexed(
- IN gco3D Engine,
- IN gctUINT Index,
- IN gceBLEND_UNIT Unit,
- IN gceBLEND_FUNCTION FunctionRGB,
- IN gceBLEND_FUNCTION FunctionAlpha
- );
-
-/* Set blending mode for separate rt control*/
-gceSTATUS
-gco3D_SetBlendModeIndexed(
- IN gco3D Engine,
- IN gctUINT Index,
- IN gceBLEND_MODE ModeRGB,
- IN gceBLEND_MODE ModeAlpha
- );
-
/* Set blending color. */
gceSTATUS
gco3D_SetBlendColor(
@@ -937,14 +933,6 @@ gco3D_SetPointSprite(
IN gctBOOL Enable
);
-
-/* Enable/Disable primitive-id. */
-gceSTATUS
-gco3D_SetPrimitiveIdEnable(
- IN gco3D Engine,
- IN gctBOOL Enable
- );
-
/* Set fill mode. */
gceSTATUS
gco3D_SetFill(
@@ -1035,14 +1023,6 @@ gco3D_SetColorWrite(
IN gctUINT8 Enable
);
-/* Set color write enable bits for separate rt control */
-gceSTATUS
-gco3D_SetColorWriteIndexed(
- IN gco3D Engine,
- IN gctUINT Index,
- IN gctUINT8 Enable
- );
-
/* Enable or disable early depth. */
gceSTATUS
gco3D_SetEarlyDepth(
@@ -1057,28 +1037,15 @@ gco3D_SetAllEarlyDepthModes(
IN gctBOOL Disable
);
-
+/* Enable or disable all early depth operations. */
gceSTATUS
-gco3D_SetEarlyDepthFromAPP(
- IN gco3D Engine,
- IN gctBOOL EarlyDepthFromAPP
- );
-
-gceSTATUS
-gco3D_SetRADepthWrite(
+gco3D_SetAllEarlyDepthModesEx(
IN gco3D Engine,
IN gctBOOL Disable,
- IN gctBOOL psReadZ,
- IN gctBOOL psReadW
- );
-
-gceSTATUS
-gco3D_SetPatchVertices(
- IN gco3D Engine,
- IN gctINT PatchVertices
+ IN gctBOOL DisableModify,
+ IN gctBOOL DisablePassZ
);
-
/* Switch dynamic early mode */
gceSTATUS
gco3D_SwitchDynamicEarlyDepthMode(
@@ -1216,23 +1183,20 @@ typedef struct _gcsALPHA_INFO
gctFLOAT floatReference;
/* Alpha blending states. */
- gctBOOL blend[gcdMAX_DRAW_BUFFERS];
+ gctBOOL blend;
- gceBLEND_FUNCTION srcFuncColor[gcdMAX_DRAW_BUFFERS];
- gceBLEND_FUNCTION srcFuncAlpha[gcdMAX_DRAW_BUFFERS];
- gceBLEND_FUNCTION trgFuncColor[gcdMAX_DRAW_BUFFERS];
- gceBLEND_FUNCTION trgFuncAlpha[gcdMAX_DRAW_BUFFERS];
+ gceBLEND_FUNCTION srcFuncColor;
+ gceBLEND_FUNCTION srcFuncAlpha;
+ gceBLEND_FUNCTION trgFuncColor;
+ gceBLEND_FUNCTION trgFuncAlpha;
- gceBLEND_MODE modeColor[gcdMAX_DRAW_BUFFERS];
- gceBLEND_MODE modeAlpha[gcdMAX_DRAW_BUFFERS];
+ gceBLEND_MODE modeColor;
+ gceBLEND_MODE modeAlpha;
gctUINT32 color;
-
- gctBOOL anyBlendEnabled;
}
gcsALPHA_INFO;
-
/* Enable or disable alpha test. */
gceSTATUS
gco3D_SetAlphaTest(
@@ -1300,31 +1264,11 @@ gco3D_DrawPrimitives(
);
gceSTATUS
-gco3D_DrawIndirectPrimitives(
- IN gco3D Engine,
- IN gcePRIMITIVE Type,
- IN gctBOOL DrawIndex,
- IN gctINT BaseOffset,
- IN gcoBUFOBJ BufObj
- );
-
-gceSTATUS
-gco3D_MultiDrawIndirectPrimitives(
- IN gco3D Engine,
- IN gcePRIMITIVE Type,
- IN gctBOOL DrawIndex,
- IN gctINT BaseOffset,
- IN gctINT DrawCount,
- IN gctINT Stride,
- IN gcoBUFOBJ BufObj
- );
-
-gceSTATUS
gco3D_DrawInstancedPrimitives(
IN gco3D Engine,
IN gcePRIMITIVE Type,
IN gctBOOL DrawIndex,
- IN gctINT StartVertex,
+ IN gctSIZE_T StartVertex,
IN gctSIZE_T StartIndex,
IN gctSIZE_T PrimitiveCount,
IN gctSIZE_T VertexCount,
@@ -1335,11 +1279,6 @@ gco3D_DrawInstancedPrimitives(
);
gceSTATUS
-gco3D_DrawNullPrimitives(
- IN gco3D Engine
- );
-
-gceSTATUS
gco3D_DrawPrimitivesCount(
IN gco3D Engine,
IN gcePRIMITIVE Type,
@@ -1395,14 +1334,6 @@ gco3D_SetAntiAlias(
IN gctBOOL Enable
);
-/* Set msaa samples */
-gceSTATUS
-gco3D_SetSamples(
- IN gco3D Engine,
- IN gctUINT32 Samples
- );
-
-
/* Write data into the command buffer. */
gceSTATUS
gco3D_WriteBuffer(
@@ -1420,7 +1351,6 @@ gco3D_Semaphore(
IN gceWHERE To,
IN gceHOW How);
-
/* Explicitly flush shader L1 cache */
gceSTATUS
gco3D_FlushSHL1Cache(
@@ -1435,111 +1365,30 @@ gco3D_SetCentroids(
IN gctPOINTER Centroids
);
-/* query msaa sample coordinates */
-gceSTATUS
-gco3D_GetSampleCoords(
- IN gco3D Engine,
- IN gctUINT32 SampleIndex,
- IN gctBOOL yInverted,
- OUT gctFLOAT_PTR Coords
- );
-
gceSTATUS
gco3D_SetLogicOp(
IN gco3D Engine,
IN gctUINT8 Rop
);
-typedef enum _gceXfbCmd
-{
- gcvXFBCMD_BEGIN = 0,
- gcvXFBCMD_PAUSE = 1,
- gcvXFBCMD_RESUME = 2,
- gcvXFBCMD_END = 3,
- gcvXFBCMD_PAUSE_INCOMMIT = 4,
- gcvXFBCMD_RESUME_INCOMMIT = 5,
- gcvXFBCMD_INVALID = 6,
-}
-gceXfbCmd;
-
-typedef enum _gceXfbStatus
-{
- gcvXFB_Disabled = 0,
- gcvXFB_Paused,
- gcvXFB_Enabled,
-}
-gceXfbStatus;
-
-typedef enum _gceQueryStatus
-{
- gcvQUERY_Disabled = 0,
- gcvQUERY_Paused = 1,
- gcvQUERY_Enabled = 2,
-}
-gceQueryStatus;
-
-typedef enum _gceQueryCmd
-{
- gcvQUERYCMD_BEGIN = 0,
- gcvQUERYCMD_PAUSE = 1,
- gcvQUERYCMD_RESUME = 2,
- gcvQUERYCMD_END = 3,
- gcvQUERYCMD_INVALID = 4,
-}
-gceQueryCmd;
-
-typedef enum _gceQueryType
-{
- gcvQUERY_OCCLUSION = 0,
- gcvQUERY_XFB_WRITTEN = 1,
- gcvQUERY_PRIM_GENERATED = 2,
- gcvQUERY_MAX_NUM = 3,
-}
-gceQueryType;
-
gceSTATUS
-gco3D_SetQuery(
+gco3D_SetOQ(
IN gco3D Engine,
- IN gctUINT32 QueryHeader,
- IN gceQueryType Type,
+ INOUT gctPOINTER * Result,
IN gctBOOL Enable
);
gceSTATUS
-gco3D_GetQuery(
- IN gco3D Engine,
- IN gceQueryType Type,
- IN gcsSURF_NODE_PTR Node,
- IN gctUINT32 Size,
- IN gctPOINTER Locked,
- OUT gctINT32 * Index
- );
-
-gceSTATUS
-gco3D_SetXfbHeader(
+gco3D_GetOQ(
IN gco3D Engine,
- IN gctUINT32 Physical
+ IN gctPOINTER Result,
+ OUT gctINT64 * Logical
);
gceSTATUS
-gco3D_SetXfbBuffer(
+gco3D_DeleteOQ(
IN gco3D Engine,
- IN gctUINT32 Index,
- IN gctUINT32 BufferAddr,
- IN gctUINT32 BufferStride,
- IN gctUINT32 BufferSize
- );
-
-gceSTATUS
-gco3D_SetXfbCmd(
- IN gco3D Engine,
- IN gceXfbCmd Cmd
- );
-
-gceSTATUS
-gco3D_SetRasterDiscard(
- IN gco3D Engine,
- IN gctBOOL Enable
+ INOUT gctPOINTER Result
);
gceSTATUS
@@ -1549,11 +1398,6 @@ gco3D_SetColorOutCount(
);
gceSTATUS
-gco3D_SetColorCacheMode(
- IN gco3D Engine
- );
-
-gceSTATUS
gco3D_Set3DEngine(
IN gco3D Engine
);
@@ -1568,11 +1412,6 @@ gco3D_Get3DEngine(
OUT gco3D * Engine
);
-gceSTATUS
-gco3D_QueryReset(
- IN gco3D Engine,
- OUT gctBOOL_PTR Innocent
- );
/* OCL thread walker information. */
typedef struct _gcsTHREAD_WALKER_INFO * gcsTHREAD_WALKER_INFO_PTR;
@@ -1595,10 +1434,6 @@ typedef struct _gcsTHREAD_WALKER_INFO
gctUINT32 globalSizeZ;
gctUINT32 globalOffsetZ;
- gctUINT32 globalScaleX;
- gctUINT32 globalScaleY;
- gctUINT32 globalScaleZ;
-
gctUINT32 workGroupSizeX;
gctUINT32 workGroupCountX;
gctUINT32 workGroupSizeY;
@@ -1607,85 +1442,9 @@ typedef struct _gcsTHREAD_WALKER_INFO
gctUINT32 workGroupCountZ;
gctUINT32 threadAllocation;
-
- gctBOOL indirect;
- gctUINT32 groupNumberUniformIdx;
- gctUINT32 baseAddress;
}
gcsTHREAD_WALKER_INFO;
-#if gcdUSE_VX
-/* VX thread walker parameters. */
-typedef struct _gcsVX_THREAD_WALKER_PARAMETERS * gcsVX_THREAD_WALKER_PARAMETERS_PTR;
-
-typedef struct _gcsVX_THREAD_WALKER_PARAMETERS
-{
- gctUINT32 valueOrder;
- gctUINT32 workDim;
-
- gctUINT32 workGroupSizeX;
- gctUINT32 workGroupCountX;
-
- gctUINT32 workGroupSizeY;
- gctUINT32 workGroupCountY;
-
- gctUINT32 globalOffsetX;
- gctUINT32 globalScaleX;
-
- gctUINT32 globalOffsetY;
- gctUINT32 globalScaleY;
-}
-gcsVX_THREAD_WALKER_PARAMETERS;
-
-typedef struct _gcsVX_IMAGE_INFO * gcsVX_IMAGE_INFO_PTR;
-
-typedef struct _gcsVX_IMAGE_INFO
-{
- gctUINT32 format;
- gctUINT32 rect[4];
- gctUINT32 width;
- gctUINT32 height;
- gctUINT32 bpp;
- gctUINT32 planes;
- gctUINT32 componentCount;
- gctBOOL isFloat;
-
- gctUINT32 uPixels;
- gctUINT32 vPixels;
- gceSURF_FORMAT internalFormat;
- gctUINT32 border;
-
- /*vx_imagepatch_addressing_t == (gctUINT32 * 8) */
- gctUINT32 imagepatch[8 * 3];
- void *base_addr[3];
-
- gctUINT32 stride[3];
-
- gctUINT32 logicals[3];
- gctUINT32 physicals[3];
- gctUINT32 bytes;
-
- gcsSURF_NODE_PTR nodes[3];
-
-#if gcdVX_OPTIMIZER
- gctUINT32 uniformData[3][4];
-#endif
-}
-gcsVX_IMAGE_INFO;
-typedef struct _gcsVX_DISTRIBUTION_INFO * gcsVX_DISTRIBUTION_INFO_PTR;
-
-typedef struct _gcsVX_DISTRIBUTION_INFO
-{
-
- gctUINT32 logical;
- gctUINT32 physical;
- gctUINT32 bytes;
-
- gcsSURF_NODE_PTR node;
-}
-gcsVX_DISTRIBUTION_INFO;
-#endif
-
/* Start OCL thread walker. */
gceSTATUS
gco3D_InvokeThreadWalker(
@@ -1734,73 +1493,47 @@ gco3D_SetWPlaneLimit(
gceSTATUS
gco3D_PrimitiveRestart(
IN gco3D Engine,
- IN gctBOOL PrimitiveRestart
- );
+ IN gctBOOL PrimitiveRestart);
-gceSTATUS
-gco3D_LoadProgram(
- IN gco3D Engine,
- IN gcePROGRAM_STAGE_BIT StageBits,
- IN gctPOINTER ProgramState
- );
-
-gceSTATUS
-gco3D_EnableAlphaToCoverage(
- IN gco3D Engine,
- IN gctBOOL Enable
- );
+#if gcdSTREAM_OUT_BUFFER
gceSTATUS
-gco3D_EnableSampleCoverage(
+gco3D_QueryStreamOut(
IN gco3D Engine,
- IN gctBOOL Enable
- );
-
-gceSTATUS
-gco3D_SetSampleCoverageValue(
- IN gco3D Engine,
- IN gctFLOAT CoverageValue,
- IN gctBOOL Invert
- );
-
-gceSTATUS
-gco3D_EnableSampleMask(
- IN gco3D Engine,
- IN gctBOOL Enable
+ IN gctUINT32 OriginalIndexAddress,
+ IN gctUINT32 OriginalIndexOffset,
+ IN gctUINT32 OriginalIndexCount,
+ OUT gctBOOL_PTR Found
);
gceSTATUS
-gco3D_SetSampleMask(
+gco3D_StartStreamOut(
IN gco3D Engine,
- IN gctUINT32 SampleMask
+ IN gctINT StreamOutStatus,
+ IN gctUINT32 IndexAddress,
+ IN gctUINT32 IndexOffset,
+ IN gctUINT32 IndexCount
);
gceSTATUS
-gco3D_EnableSampleShading(
- IN gco3D Engine,
- IN gctBOOL Enable
+gco3D_StopStreamOut(
+ IN gco3D Engine
);
gceSTATUS
-gco3D_SetMinSampleShadingValue(
+gco3D_ReplayStreamOut(
IN gco3D Engine,
- IN gctFLOAT MinSampleShadingValue
+ IN gctUINT32 IndexAddress,
+ IN gctUINT32 IndexOffset,
+ IN gctUINT32 IndexCount
);
gceSTATUS
-gco3D_SetSampleShading(
- IN gco3D Engine,
- IN gctBOOL Enable,
- IN gctBOOL IsSampleIn,
- IN gctFLOAT SampleShadingValue
+gco3D_EndStreamOut(
+ IN gco3D Engine
);
-gceSTATUS
-gco3D_EnableSampleMaskOut(
- IN gco3D Engine,
- IN gctBOOL Enable,
- IN gctINT SampleMaskLoc
- );
+#endif
/*----------------------------------------------------------------------------*/
/*-------------------------- gco3D Fragment Processor ------------------------*/
@@ -1937,7 +1670,7 @@ gco3D_SetAlphaTextureFunction(
/* Cube faces. */
typedef enum _gceTEXTURE_FACE
{
- gcvFACE_NONE = 0,
+ gcvFACE_NONE,
gcvFACE_POSITIVE_X,
gcvFACE_NEGATIVE_X,
gcvFACE_POSITIVE_Y,
@@ -1978,23 +1711,9 @@ typedef struct _gcsTEXTURE
gceTEXTURE_COMPARE_MODE compareMode;
gceCOMPARE compareFunc;
- gceTEXTURE_DS_MODE dsMode;
-
- /* sRGB decode */
- gceTEXTURE_SRGBDECODE sRGB;
-
- gcuVALUE borderColor[4];
}
gcsTEXTURE, * gcsTEXTURE_PTR;
-typedef struct _gcsTEXTURE_BINDTEXTS_ARGS
-{
- /* must be the first member */
- gceHAL_ARG_VERSION version;
-
-}
-gcsTEXTURE_BINDTEXTS_ARGS;
-
/* Construct a new gcoTEXTURE object. */
gceSTATUS
gcoTEXTURE_Construct(
@@ -2148,7 +1867,7 @@ gcoTEXTURE_AddMipMap(
);
gceSTATUS
-gcoTEXTURE_AddMipMapEx(
+gcoTEXTURE_AddMipMapWithFlag(
IN gcoTEXTURE Texture,
IN gctINT Level,
IN gctINT InternalFormat,
@@ -2158,7 +1877,6 @@ gcoTEXTURE_AddMipMapEx(
IN gctSIZE_T Depth,
IN gctUINT Faces,
IN gcePOOL Pool,
- IN gctUINT32 Samples,
IN gctBOOL Protected,
OUT gcoSURF * Surface
);
@@ -2178,14 +1896,6 @@ gcoTEXTURE_AddMipMapFromSurface(
);
gceSTATUS
-gcoTEXTURE_LockMipMap(
- IN gcoTEXTURE Texture,
- IN gctUINT MipMap,
- OPTIONAL OUT gctUINT32 * Address,
- OPTIONAL OUT gctPOINTER * Memory
- );
-
-gceSTATUS
gcoTEXTURE_SetEndianHint(
IN gcoTEXTURE Texture,
IN gceENDIAN_HINT EndianHint
@@ -2194,8 +1904,7 @@ gcoTEXTURE_SetEndianHint(
gceSTATUS
gcoTEXTURE_Disable(
IN gcoHAL Hal,
- IN gctINT Sampler,
- IN gctBOOL DefaultInteger
+ IN gctINT Sampler
);
gceSTATUS
@@ -2293,19 +2002,6 @@ gcoTEXTURE_BindTextureEx(
);
gceSTATUS
-gcoTEXTURE_BindTextureDesc(
- IN gcoTEXTURE Texture,
- IN gctINT Sampler,
- IN gcsTEXTURE_PTR Info,
- IN gctINT TextureLayer
- );
-
-gceSTATUS
-gcoTEXTURE_SetDescDirty(
- IN gcoTEXTURE Texture
- );
-
-gceSTATUS
gcoTEXTURE_InitParams(
IN gcoHAL Hal,
IN gcsTEXTURE_PTR TexParams
@@ -2317,17 +2013,6 @@ gcoTEXTURE_SetDepthTextureFlag(
IN gctBOOL unsized
);
-gceSTATUS
-gcoTEXTURE_BindTextureTS(
- IN gcsTEXTURE_BINDTEXTS_ARGS * args
- );
-
-gceSTATUS
-gcoTEXTURE_GenerateMipMap(
- IN gcoTEXTURE Texture,
- IN gctINT BaseLevel,
- IN gctINT MaxLevel
- );
/******************************************************************************\
******************************* gcoSTREAM Object ******************************
@@ -2360,12 +2045,10 @@ typedef enum _gceATTRIB_SCHEME
{
gcvATTRIB_SCHEME_KEEP = 0,
gcvATTRIB_SCHEME_2_10_10_10_REV_TO_FLOAT,
- gcvATTRIB_SCHEME_BYTE_TO_IVEC4,
- gcvATTRIB_SCHEME_SHORT_TO_IVEC4,
- gcvATTRIB_SCHEME_INT_TO_IVEC4,
- gcvATTRIB_SCHEME_UBYTE_TO_UVEC4,
- gcvATTRIB_SCHEME_USHORT_TO_UVEC4,
- gcvATTRIB_SCHEME_UINT_TO_UVEC4,
+ gcvATTRIB_SCHEME_BYTE_TO_INT,
+ gcvATTRIB_SCHEME_SHORT_TO_INT,
+ gcvATTRIB_SCHEME_UBYTE_TO_UINT,
+ gcvATTRIB_SCHEME_USHORT_TO_UINT,
} gceATTRIB_SCHEME;
gceSTATUS
@@ -2680,9 +2363,9 @@ gcoVERTEXARRAY_Bind_Ex2(
IN gcoVERTEXARRAY Vertex,
IN gctUINT32 EnableBits,
IN gcsATTRIBUTE_PTR VertexArray,
- IN gctINT First,
+ IN gctSIZE_T First,
IN gctSIZE_T * Count,
- IN gctBOOL DrawInstanced,
+ IN gctBOOL DrawArraysInstanced,
IN gctSIZE_T InstanceCount,
IN gceINDEX_TYPE IndexType,
IN gcoBUFOBJ IndexObject,
@@ -2694,8 +2377,8 @@ gcoVERTEXARRAY_Bind_Ex2(
IN OUT gcePRIMITIVE * SpilitPrimitiveType,
#if gcdUSE_WCLIP_PATCH
IN OUT gctSIZE_T * PrimitiveCount,
- IN OUT gctFLOAT * WLimitRms,
- IN OUT gctBOOL * WLimitRmsDirty,
+ IN OUT gctFLOAT * wLimitRms,
+ IN OUT gctBOOL * wLimitDirty,
#else
IN OUT gctUINT * PrimitiveCount,
#endif
@@ -2971,10 +2654,9 @@ gcoBUFOBJ_Dump(
IN gcoBUFOBJ BufObj
);
-#endif /* gcdENABLE_3D */
-
#ifdef __cplusplus
}
#endif
+#endif /* gcdENABLE_3D */
#endif /* __gc_hal_engine_h_ */
diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine_vg.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine_vg.h
index 4d93eebc1219..30434341200c 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine_vg.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine_vg.h
@@ -501,6 +501,7 @@ gcoHAL_QueryPathStorage(
IN gcoHAL Hal,
#if gcdGC355_PROFILER
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -514,6 +515,7 @@ gcoHAL_AssociateCompletion(
IN gcoHAL Hal,
#if gcdGC355_PROFILER
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -527,6 +529,7 @@ gcoHAL_DeassociateCompletion(
IN gcoHAL Hal,
#if gcdGC355_PROFILER
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -540,6 +543,7 @@ gcoHAL_CheckCompletion(
IN gcoHAL Hal,
#if gcdGC355_PROFILER
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -553,6 +557,7 @@ gcoHAL_WaitCompletion(
IN gcoHAL Hal,
#if gcdGC355_PROFILER
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -567,6 +572,7 @@ gcoHAL_Flush(
#if gcdGC355_PROFILER
,
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth
@@ -579,6 +585,7 @@ gcoHAL_SplitAddress(
IN gcoHAL Hal,
#if gcdGC355_PROFILER
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -594,6 +601,7 @@ gcoHAL_CombineAddress(
IN gcoHAL Hal,
#if gcdGC355_PROFILER
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -609,6 +617,7 @@ gcoHAL_ScheduleVideoMemory(
IN gcoHAL Hal,
#if gcdGC355_PROFILER
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -622,12 +631,12 @@ gcoHAL_FreeVideoMemory(
IN gcoHAL Hal,
#if gcdGC355_PROFILER
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
#endif
- IN gctUINT32 Node,
- IN gctBOOL asynchroneous
+ IN gctUINT32 Node
);
/* Query command buffer attributes. */
@@ -636,6 +645,7 @@ gcoHAL_QueryCommandBuffer(
IN gcoHAL Hal,
#if gcdGC355_PROFILER
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -648,6 +658,7 @@ gcoHAL_AllocateLinearVideoMemory(
IN gcoHAL Hal,
#if gcdGC355_PROFILER
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -666,6 +677,7 @@ gcoHAL_GetAlignedSurfaceSize(
IN gcoHAL Hal,
#if gcdGC355_PROFILER
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -680,6 +692,7 @@ gcoHAL_ReserveTask(
IN gcoHAL Hal,
#if gcdGC355_PROFILER
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -701,7 +714,8 @@ gcoHAL_ReserveTask(
void
gcoVG_ProfilerEnableDisable(
IN gcoVG Vg,
- IN gctUINT enableGetAPITimes,
+ IN gctUINT64 appStartTime,
+ IN gctBOOL enableGetAPITimes,
IN gctFILE apiTimeFile
);
@@ -712,8 +726,15 @@ gcoVG_ProfilerTreeDepth(
);
void
+gcoVG_ProfilerTag(
+ IN gcoVG Vg,
+ IN gctSTRING Tag
+ );
+
+void
gcoVG_ProfilerSetStates(
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT treeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth
@@ -724,6 +745,7 @@ gctBOOL
gcoVG_IsMaskSupported(
#if gcdGC355_PROFILER
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -735,6 +757,7 @@ gctBOOL
gcoVG_IsTargetSupported(
#if gcdGC355_PROFILER
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -746,6 +769,7 @@ gctBOOL
gcoVG_IsImageSupported(
#if gcdGC355_PROFILER
IN gcoVG Vg,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -756,6 +780,7 @@ gcoVG_IsImageSupported(
gctUINT8 gcoVG_PackColorComponent(
#if gcdGC355_PROFILER
gcoVG Vg,
+ gcsPROFILERFUNCNODE *DList,
gctUINT TreeDepth,
gctUINT saveLayerTreeDepth,
gctUINT varTreeDepth,
@@ -774,6 +799,7 @@ gcoVG_Destroy(
IN gcoVG Vg
#if gcdGC355_PROFILER
,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth
@@ -784,18 +810,19 @@ gceSTATUS
gcoVG_SetTarget(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
#endif
- IN gcoSURF Target,
- IN gceORIENTATION orientation
+ IN gcoSURF Target
);
gceSTATUS
gcoVG_UnsetTarget(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -807,6 +834,7 @@ gceSTATUS
gcoVG_SetUserToSurface(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -818,6 +846,7 @@ gceSTATUS
gcoVG_SetSurfaceToImage(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -829,6 +858,7 @@ gceSTATUS
gcoVG_EnableMask(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -840,6 +870,7 @@ gceSTATUS
gcoVG_SetMask(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -851,6 +882,7 @@ gceSTATUS
gcoVG_UnsetMask(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -863,6 +895,7 @@ gcoVG_FlushMask(
IN gcoVG Vg
#if gcdGC355_PROFILER
,
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth
@@ -873,6 +906,7 @@ gceSTATUS
gcoVG_EnableScissor(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -884,6 +918,7 @@ gceSTATUS
gcoVG_SetScissor(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -896,6 +931,7 @@ gceSTATUS
gcoVG_EnableColorTransform(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -907,6 +943,7 @@ gceSTATUS
gcoVG_SetColorTransform(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -918,6 +955,7 @@ gceSTATUS
gcoVG_SetTileFillColor(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -932,6 +970,7 @@ gceSTATUS
gcoVG_SetSolidPaint(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -946,6 +985,7 @@ gceSTATUS
gcoVG_SetLinearPaint(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -959,6 +999,7 @@ gceSTATUS
gcoVG_SetRadialPaint(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -978,6 +1019,7 @@ gceSTATUS
gcoVG_SetPatternPaint(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -995,6 +1037,7 @@ gceSTATUS
gcoVG_SetColorRamp(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -1007,6 +1050,7 @@ gceSTATUS
gcoVG_SetPattern(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -1022,6 +1066,7 @@ gceSTATUS
gcoVG_SetImageMode(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -1033,6 +1078,7 @@ gceSTATUS
gcoVG_SetBlendMode(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -1044,6 +1090,7 @@ gceSTATUS
gcoVG_SetRenderingQuality(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -1055,6 +1102,7 @@ gceSTATUS
gcoVG_SetFillRule(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -1072,6 +1120,7 @@ gceSTATUS
gcoVG_Clear(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -1086,6 +1135,7 @@ gceSTATUS
gcoVG_DrawPath(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -1105,11 +1155,11 @@ gceSTATUS
gcoVG_DrawImage(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
#endif
- IN gceORIENTATION orientation,
IN gcoSURF Source,
IN gcsPOINT_PTR SourceOrigin,
IN gcsPOINT_PTR TargetOrigin,
@@ -1128,6 +1178,7 @@ gceSTATUS
gcoVG_TesselateImage(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -1138,9 +1189,7 @@ gcoVG_TesselateImage(
IN gctBOOL Mask,
#if gcdMOVG
IN gctBOOL SoftwareTesselation,
- IN gceVG_BLEND BlendMode,
- IN gctINT Width,
- IN gctINT Height
+ IN gceVG_BLEND BlendMode
#else
IN gctBOOL SoftwareTesselation
#endif
@@ -1150,6 +1199,7 @@ gceSTATUS
gcoVG_DrawSurfaceToImage(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -1167,6 +1217,7 @@ gceSTATUS
gcoVG_Blit(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -1183,6 +1234,7 @@ gceSTATUS
gcoVG_ColorMatrix(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -1203,6 +1255,7 @@ gceSTATUS
gcoVG_SeparableConvolve(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -1233,6 +1286,7 @@ gceSTATUS
gcoVG_GaussianBlur(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -1257,6 +1311,7 @@ gceSTATUS
gcoVG_EnableDither(
IN gcoVG Vg,
#if gcdGC355_PROFILER
+ IN gcsPROFILERFUNCNODE *DList,
IN gctUINT TreeDepth,
IN gctUINT saveLayerTreeDepth,
IN gctUINT varTreeDepth,
@@ -1264,52 +1319,6 @@ gcoVG_EnableDither(
IN gctBOOL Enable
);
-/* Color Key States. */
-gceSTATUS
-gcoVG_SetColorKey(
- IN gcoVG Vg,
-#if gcdGC355_PROFILER
- IN gcsPROFILERFUNCNODE *DList,
- IN gctUINT TreeDepth,
- IN gctUINT saveLayerTreeDepth,
- IN gctUINT varTreeDepth,
-#endif
- IN gctUINT32* Values,
- IN gctBOOL * Enables
-);
-
-/* Index Color States. */
-gceSTATUS
-gcoVG_SetColorIndexTable(
- IN gcoVG Vg,
-#if gcdGC355_PROFILER
- IN gcsPROFILERFUNCNODE *DList,
- IN gctUINT TreeDepth,
- IN gctUINT saveLayerTreeDepth,
- IN gctUINT varTreeDepth,
-#endif
- IN gctUINT32* Values,
- IN gctINT32 Count
-);
-
-/* VG RS feature support: YUV format conversion. */
-gceSTATUS
-gcoVG_Resolve(
- IN gcoVG Vg,
- IN gcoSURF Source,
- IN gcoSURF Target,
- IN gctINT SX,
- IN gctINT SY,
- IN gctINT DX,
- IN gctINT DY,
- IN gctINT Width,
- IN gctINT Height,
- IN gctINT Src_uv,
- IN gctINT Src_standard,
- IN gctINT Dst_uv,
- IN gctINT Dst_standard,
- IN gctINT Dst_alpha
-);
#ifdef __cplusplus
}
#endif
diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
index dad383b7cb79..b53f738f4641 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
@@ -56,8 +56,6 @@
#ifndef __gc_hal_enum_h_
#define __gc_hal_enum_h_
-#include "gc_hal_options.h"
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -80,12 +78,10 @@ typedef enum _gceCHIPMODEL
gcv520 = 0x0520,
gcv530 = 0x0530,
gcv600 = 0x0600,
- gcv620 = 0x0620,
gcv700 = 0x0700,
gcv800 = 0x0800,
gcv860 = 0x0860,
gcv880 = 0x0880,
- gcv900 = 0x0900,
gcv1000 = 0x1000,
gcv1500 = 0x1500,
gcv2000 = 0x2000,
@@ -97,8 +93,6 @@ typedef enum _gceCHIPMODEL
gcv5000 = 0x5000,
gcv5200 = 0x5200,
gcv6400 = 0x6400,
- gcv7000 = 0x7000,
- gcv7400 = 0x7400,
}
gceCHIPMODEL;
@@ -142,6 +136,7 @@ typedef enum _gceFEATURE
gcvFEATURE_SHADER_HAS_CEIL,
gcvFEATURE_SHADER_HAS_SQRT,
gcvFEATURE_SHADER_HAS_TRIG,
+ gcvFEATURE_VAA,
gcvFEATURE_HZ,
gcvFEATURE_CORRECT_STENCIL,
gcvFEATURE_VG20,
@@ -181,9 +176,11 @@ typedef enum _gceFEATURE
gcvFEATURE_2D_MULTI_SOURCE_BLT_EX,
gcvFEATURE_BUG_FIXES10,
gcvFEATURE_2D_MINOR_TILING,
- gcvFEATURE_TEX_COMPRRESSION_SUPERTILED, /* Supertiled compressed textures are supported. */
+ /* Supertiled compressed textures are supported. */
+ gcvFEATURE_TEX_COMPRRESSION_SUPERTILED,
gcvFEATURE_FAST_MSAA,
gcvFEATURE_BUG_FIXED_INDEXED_TRIANGLE_STRIP,
+ gcvFEATURE_INDEX_FETCH_FIX,
gcvFEATURE_TEXTURE_TILE_STATUS_READ,
gcvFEATURE_DEPTH_BIAS_FIX,
gcvFEATURE_RECT_PRIMITIVE,
@@ -217,11 +214,9 @@ typedef enum _gceFEATURE
gcvFEATURE_HALTI0,
gcvFEATURE_HALTI1,
gcvFEATURE_HALTI2,
- gcvFEATURE_SUPPORT_GCREGTX,
gcvFEATURE_2D_MIRROR_EXTENSION,
gcvFEATURE_TEXTURE_ASTC,
- gcvFEATURE_TEXTURE_ASTC_DECODE_FIX,
- gcvFEATURE_TEXTURE_ASTC_BASE_LOD_FIX,
+ gcvFEATURE_TEXTURE_ASTC_FIX,
gcvFEATURE_2D_SUPER_TILE_V1,
gcvFEATURE_2D_SUPER_TILE_V2,
gcvFEATURE_2D_SUPER_TILE_V3,
@@ -235,10 +230,7 @@ typedef enum _gceFEATURE
gcvFEATURE_BRANCH_ON_IMMEDIATE_REG,
gcvFEATURE_2D_COMPRESSION,
gcvFEATURE_TPC_COMPRESSION,
- gcvFEATURE_TPCV11_COMPRESSION,
gcvFEATURE_DEC_COMPRESSION,
- gcvFEATURE_DEC300_COMPRESSION,
- gcvFEATURE_DEC400_COMPRESSION,
gcvFEATURE_DEC_TPC_COMPRESSION,
gcvFEATURE_DEC_COMPRESSION_TILE_NV12_8BIT,
gcvFEATURE_DEC_COMPRESSION_TILE_NV12_10BIT,
@@ -246,19 +238,16 @@ typedef enum _gceFEATURE
gcvFEATURE_2D_FILTERBLIT_A8_ALPHA,
gcvFEATURE_2D_MULTI_SRC_BLT_TO_UNIFIED_DST_RECT,
gcvFEATURE_2D_MULTI_SRC_BLT_BILINEAR_FILTER,
- gcvFEATURE_2D_MULTI_SRC_BLT_1_5_ENHANCEMENT,
gcvFEATURE_V2_COMPRESSION_Z16_FIX,
+
gcvFEATURE_VERTEX_INST_ID_AS_INTEGER,
gcvFEATURE_2D_YUV_MODE,
gcvFEATURE_2D_CACHE_128B256BPERLINE,
- gcvFEATURE_2D_SEPARATE_CACHE,
gcvFEATURE_2D_MAJOR_SUPER_TILE,
gcvFEATURE_2D_V4COMPRESSION,
- gcvFEATURE_2D_VMSAA,
- gcvFEATURE_2D_10BIT_OUTPUT_LINEAR,
- gcvFEATURE_2D_YUV420_OUTPUT_LINEAR,
gcvFEATURE_ACE,
gcvFEATURE_COLOR_COMPRESSION,
+
gcvFEATURE_32BPP_COMPONENT_TEXTURE_CHANNEL_SWIZZLE,
gcvFEATURE_64BPP_HW_CLEAR_SUPPORT,
gcvFEATURE_TX_LERP_PRECISION_FIX,
@@ -270,218 +259,76 @@ typedef enum _gceFEATURE
gcvFEATURE_COMPRESSION_V1,
gcvFEATURE_V1_COMPRESSION_Z16_DECOMPRESS_FIX,
gcvFEATURE_RTT,
- gcvFEATURE_GENERIC_ATTRIB,
+ gcvFEATURE_GENERICS,
gcvFEATURE_2D_ONE_PASS_FILTER,
gcvFEATURE_2D_ONE_PASS_FILTER_TAP,
gcvFEATURE_2D_POST_FLIP,
gcvFEATURE_2D_PIXEL_ALIGNMENT,
gcvFEATURE_CORRECT_AUTO_DISABLE_COUNT,
gcvFEATURE_CORRECT_AUTO_DISABLE_COUNT_WIDTH,
- gcvFEATURE_8K_RT,
+
gcvFEATURE_HALTI3,
gcvFEATURE_EEZ,
gcvFEATURE_INTEGER_SIGNEXT_FIX,
+ gcvFEATURE_INTEGER_PIPE_FIX,
gcvFEATURE_PSOUTPUT_MAPPING,
gcvFEATURE_8K_RT_FIX,
gcvFEATURE_TX_TILE_STATUS_MAPPING,
gcvFEATURE_SRGB_RT_SUPPORT,
+ gcvFEATURE_UNIFORM_APERTURE,
gcvFEATURE_TEXTURE_16K,
gcvFEATURE_PA_FARZCLIPPING_FIX,
gcvFEATURE_PE_DITHER_COLORMASK_FIX,
gcvFEATURE_ZSCALE_FIX,
+
gcvFEATURE_MULTI_PIXELPIPES,
gcvFEATURE_PIPE_CL,
+
gcvFEATURE_BUG_FIXES18,
+
gcvFEATURE_UNIFIED_SAMPLERS,
gcvFEATURE_CL_PS_WALKER,
gcvFEATURE_NEW_HZ,
+
gcvFEATURE_TX_FRAC_PRECISION_6BIT,
gcvFEATURE_SH_INSTRUCTION_PREFETCH,
gcvFEATURE_PROBE,
- gcvFEATURE_SINGLE_PIPE_HALTI1,
- gcvFEATURE_BUG_FIXES8, /* This HW feature is wrong, we can't use this to check integer branch!!!*/
+
+ gcvFEATURE_BUG_FIXES8,
gcvFEATURE_2D_ALL_QUAD,
+
+ gcvFEATURE_SINGLE_PIPE_HALTI1,
+
+ gcvFEATURE_BLOCK_SIZE_16x16,
+
+ gcvFEATURE_NO_USER_CSC,
+ gcvFEATURE_ANDROID_ONLY,
+ gcvFEATURE_HAS_PRODUCTID,
+
+ gcvFEATURE_V2_MSAA_COMP_FIX,
+
+ gcvFEATURE_S8_ONLY_RENDERING,
+
gcvFEATURE_SEPARATE_SRC_DST,
- gcvFEATURE_TX_HOR_ALIGN_SEL,
+
+ gcvFEATURE_FE_START_VERTEX_SUPPORT,
+ gcvFEATURE_FE_RESET_VERTEX_ID,
+ gcvFEATURE_RS_DEPTHSTENCIL_NATIVE_SUPPORT,
+
gcvFEATURE_HALTI4,
- gcvFEATURE_MRT_FC_FIX,
- gcvFEATURE_TESSELLATION,
- gcvFEATURE_DRAW_INDIRECT,
- gcvFEATURE_COMPUTE_INDIRECT,
- gcvFEATURE_MSAA_TEXTURE,
- gcvFEATURE_STENCIL_TEXTURE,
- gcvFEATURE_S8_ONLY_RENDERING,
- gcvFEATURE_D24S8_SAMPLE_STENCIL,
- gcvFEATURE_ADVANCED_BLEND_MODE_PART0,
- gcvFEATURE_RA_DEPTH_WRITE,
- gcvFEATURE_RS_DS_DOWNSAMPLE_NATIVE_SUPPORT,
- gcvFEATURE_S8_MSAA_COMPRESSION,
gcvFEATURE_MSAA_FRAGMENT_OPERATION,
- gcvFEATURE_FE_START_VERTEX_SUPPORT,
- gcvFEATURE_DIVISOR_STREAM_ADDR_FIX,
gcvFEATURE_ZERO_ATTRIB_SUPPORT,
- gcvFEATURE_DANGLING_VERTEX_FIX,
- gcvFEATURE_PE_DISABLE_COLOR_PIPE,
- gcvFEATURE_FE_12bit_stride,
- gcvFEATURE_TX_LOD_GUARDBAND,
- gcvFEATURE_HAS_PRODUCTID,
- gcvFEATURE_INTEGER32_FIX,
- gcvFEATURE_TEXTURE_GATHER,
- gcvFEATURE_IMG_INSTRUCTION,
- gcvFEATURE_HELPER_INVOCATION,
- gcvFEATURE_NO_USER_CSC,
- gcvFEATURE_ANDROID_ONLY,
- gcvFEATURE_V2_MSAA_COHERENCY_FIX,
- gcvFEATURE_BLOCK_SIZE_16x16,
- gcvFEATURE_TX_SUPPORT_DEC,
- gcvFEATURE_RSBLT_MSAA_DECOMPRESSION,
- gcvFEATURE_TILEFILLER_32TILE_ALIGNED,
- gcvFEATURE_GEOMETRY_SHADER,
- gcvFEATURE_HALTI5,
- gcvFEATURE_PIPELINE_32_ATTRIBUTES,
- gcvFEATURE_USC,
- gcvFEATURE_CUBEMAP_ARRAY,
- gcvFEATURE_TX_DESCRIPTOR,
- gcvFEATURE_SEPARATE_RT_CTRL,
- gcvFEATURE_RENDER_ARRAY,
- gcvFEATURE_BLT_ENGINE,
- gcvFEATURE_SMALLDRAW_BATCH,
- gcvFEATURE_TEXTURE_BUFFER,
- gcvFEATURE_GS_SUPPORT_EMIT,
- gcvFEATURE_SAMPLER_BASE_OFFSET,
- gcvFEATURE_IMAGE_OUT_BOUNDARY_FIX,
- gcvFEATURE_TX_BORDER_CLAMP,
- gcvFEATURE_MSAA_SHADING,
- gcvFEATURE_ADVANCED_SH_INST,
- gcvFEATURE_LOD_FIX_FOR_BASELEVEL,
- gcvFEATURE_MULTIDRAW_INDIRECT,
- gcvFEATURE_DRAW_ELEMENTS_BASE_VERTEX,
- gcvFEATURE_NEW_STEERING_AND_ICACHE_FLUSH, /* Steering base on register base. Trigger-style Icache flush state. */
- gcvFEATURE_PE_DITHER_FIX2,
- gcvFEATURE_INDEX_FETCH_FIX,
- gcvFEATURE_TEX_BASELOD,
- gcvFEATURE_TEX_SEAMLESS_CUBE,
- gcvFEATURE_TEX_ETC2,
- gcvFEATURE_TEX_CUBE_BORDER_LOD,
- gcvFEATURE_FE_ALLOW_STALL_PREFETCH_ENG,
- gcvFEATURE_TX_8BPP_TS_FIX,
- gcvFEATURE_HW_TFB,
- gcvFEATURE_COMPRESSION_V4,
- gcvFEATURE_FENCE,
- gcvFEATURE_R8_UNORM,
- gcvFEATURE_TX_DEFAULT_VALUE_FIX,
- gcvFEATURE_TX_8bit_UVFrac,
- gcvFEATURE_TX_MIPFILTER_NONE_FIX,
- gcvFEATURE_MC_STENCIL_CTRL,
- gcvFEATURE_DEPTH_MATH_FIX,
- gcvFEATURE_PE_B2B_PIXEL_FIX,
- gcvFEATURE_TEXTURE_GATHER_OFFSETS,
gcvFEATURE_TEX_CACHE_FLUSH_FIX,
- gcvFEATURE_WIDELINE_HELPER_FIX,
- gcvFEATURE_LINE_DIAMOND_RULE_FIX,
- gcvFEATURE_MULTIGPU_SYNC_V2,
- gcvFEATURE_DRAW_ID,
- gcvFEATURE_SNAPPAGE_CMD,
- gcvFEATURE_COMMAND_PREFETCH,
- gcvFEATURE_SAMPLEPOS_SWIZZLE_FIX,
- gcvFEATURE_SELECTMAP_SRC0_SWIZZLE_FIX,
- gcvFEATURE_LOADATTR_OOB_FIX,
- gcvFEATURE_RA_DEPTH_WRITE_MSAA1X_FIX,
- gcvFEATURE_MRT_8BIT_DUAL_PIPE_FIX,
- gcvFEATURE_BUG_FIXES1,
- gcvFEATURE_MULTI_SOURCE_BLT,
- gcvFEATURE_ZCOMPRESSION,
- gcvFEATURE_DITHER_AND_FILTER_PLUS_ALPHA_2D,
- gcvFEATURE_ONE_PASS_2D_FILTER,
- gcvFEATURE_TX_FILTER,
- gcvFEATURE_CHIPENABLE_LINK,
- gcvFEATURE_TEXTURE_BIAS_LOD_FIX,
- gcvFEATURE_USE_GL_Z,
- gcvFEATURE_SUPPORT_INTEGER,
- /* PARTLY_SUPPORT_INTEGER_BRANCH:
- ** chips can support all integer types for compare instructions, e.g, CMP, SELECT.
- ** FULLLY_SUPPORT_INTEGER_BRANCH:
- ** chips can support all integer types for JMP instruction.
- ** If PARTLY_SUPPORT_INTEGER_BRANCH is TRUE but FULLLY_SUPPORT_INTEGER_BRANCH is FALSE,
- ** then this chip can only support INT32/UINT32 JMP instruction.
- */
- gcvFEATURE_PARTLY_SUPPORT_INTEGER_BRANCH,
- gcvFEATURE_FULLLY_SUPPORT_INTEGER_BRANCH,
- gcvFEATURE_SUPPORT_INTEGER_ATTRIBUTE,
- gcvFEATURE_SUPPORT_MOVAI,
- gcvFEATURE_NEED_FIX_FOR_CL_X,
- gcvFEATURE_NEED_FIX_FOR_CL_XE,
- gcvFEATURE_HAS_OUTPUT_COUNT_FIX,
- gcvFEATURE_VARYING_PACKING_LIMITATION,
- gcvFEATURE_HIGHP_VARYING_SHIFT,
- gcvFEATURE_BUG_FIXES2,
- gcvFEATURE_64K_L2_CACHE,
- gcvFEATURE_128BTILE,
- gcvFEATURE_ADVANCED_BLEND_OPT,
- gcvFEATURE_SNAPPAGE_CMD_FIX,
- gcvFEATURE_L2_CACHE_FOR_2D_420,
- gcvFEATURE_TILE_STATUS_2BITS,
- gcvFEATURE_EXTRA_SHADER_INSTRUCTIONS0,
- gcvFEATURE_EXTRA_SHADER_INSTRUCTIONS1,
- gcvFEATURE_EXTRA_SHADER_INSTRUCTIONS2,
- gcvFEATURE_MEDIUM_PRECISION,
- gcvFEATURE_FE20_BIT_INDEX,
- gcvFEATURE_BUG_FIXES4,
- gcvFEATURE_BUG_FIXES12,
- gcvFEATURE_VMSAA,
- gcvFEATURE_ROBUST_ATOMIC,
- gcvFEATURE_32F_COLORMASK_FIX,
- gcvFEATURE_NEW_GPIPE,
- gcvFEATURE_RS_NEW_BASEADDR,
- gcvFEATURE_TX_DXT,
- gcvFEATURE_SH_FLAT_INTERPOLATION_DUAL16_FIX,
- gcvFEATURE_EVIS,
- gcvFEATURE_SH_SUPPORT_V4,
- gcvFEATURE_SH_SUPPORT_ALPHA_KILL,
- gcvFEATURE_PE_NO_ALPHA_TEST,
- gcvFEATURE_SH_SNAP2PAGE_MAXPAGES_FIX,
- gcvFEATURE_USC_FULLCACHE_FIX,
- gcvFEATURE_PE_64bit_FENCE_FIX,
- gcvFEATURE_BLT_8bit_256TILE_FC_FIX,
- gcvFEATURE_PE_RGBA16I_FIX,
- gcvFEATURE_BLT_64bpp_MASKED_CLEAR_FIX,
- gcvFEATURE_SH_PSO_MSAA1x_FIX,
- gcvFEATURE_USC_ATOMIC_FIX,
- gcvFEATURE_SH_NO_INDEX_CONST_ON_A0,
- gcvFEATURE_SH_NO_ONECONST_LIMIT,
- gcvFEATURE_EVIS_NO_ABSDIFF,
- gcvFEATURE_EVIS_NO_BITREPLACE,
- gcvFEATURE_EVIS_NO_BOXFILTER,
- gcvFEATURE_EVIS_NO_CORDIAC,
- gcvFEATURE_EVIS_NO_DP32,
- gcvFEATURE_EVIS_NO_FILTER,
- gcvFEATURE_EVIS_NO_IADD,
- gcvFEATURE_EVIS_NO_SELECTADD,
- gcvFEATURE_EVIS_LERP_7OUTPUT,
- gcvFEATURE_EVIS_ACCSQ_8OUTPUT,
- gcvFEATURE_ROBUSTNESS,
- gcvFEATURE_SECURITY,
- gcvFEATURE_TX_YUV_ASSEMBLER_10BIT,
- gcvFEATURE_USC_GOS_ADDR_FIX,
- gcvFEATURE_SUPPORT_MSAA2X,
- gcvFEATURE_TX_DESC_CACHE_CLOCKGATE_FIX,
- gcvFEATURE_TX_INTEGER_COORDINATE,
- gcvFEATURE_PSIO_SAMPLEMASK_IN_R0ZW_FIX,
- gcvFEATURE_MULTI_CORE_BLOCK_SET_CONFIG,
- gcvFEATURE_SH_IMG_LDST_ON_TEMP,
- gcvFEATURE_TX_INTEGER_COORDINATE_V2,
- gcvFEATURE_COMPUTE_ONLY,
- gcvFEATURE_SH_IMG_LDST_CLAMP,
- gcvFEATURE_SH_ICACHE_ALLOC_COUNT_FIX,
+ gcvFEATURE_PE_DITHER_FIX2,
+ gcvFEATURE_LOD_FIX_FOR_BASELEVEL,
gcvFEATURE_MSAA_OQ_FIX,
gcvFEATURE_PE_ENHANCEMENTS2,
- gcvFEATURE_PSIO_MSAA_CL_FIX,
gcvFEATURE_FE_NEED_DUMMYDRAW,
- gcvFEATURE_TX_ASTC_MULTISLICE_FIX,
- gcvFEATURE_PSIO_DUAL16_32bpc_FIX,
gcvFEATURE_USC_DEFER_FILL_FIX,
+ gcvFEATURE_USC,
+
/* Insert features above this comment only. */
gcvFEATURE_COUNT /* Not a feature. */
}
@@ -496,6 +343,7 @@ typedef enum _gceDUMMY_DRAW_TYPE
}
gceDUMMY_DRAW_TYPE;
+
/* Chip SWWA. */
typedef enum _gceSWWA
{
@@ -512,21 +360,15 @@ gceSWWA;
/* Option Set*/
typedef enum _gceOPTION
{
- /* HW setting. */
- gcvOPTION_PREFER_ZCONVERT_BYPASS = 0,
- gcvOPTION_PREFER_TILED_DISPLAY_BUFFER = 1,
- gcvOPTION_PREFER_GUARDBAND = 2,
- gcvOPTION_PREFER_TPG_TRIVIALMODEL = 3,
- gcvOPTION_PREFER_RA_DEPTH_WRITE = 4,
- gcvOPTION_PREFER_USC_RECONFIG = 5,
+ /* HW setting we take PREFER */
+ gcvOPTION_PREFER_MULTIPIPE_RS = 0,
+ gcvOPTION_PREFER_ZCONVERT_BYPASS =1,
+
- /* SW options */
gcvOPTION_HW_NULL = 50,
gcvOPTION_PRINT_OPTION = 51,
- gcvOPTION_KERNEL_FENCE = 52,
- gcvOPTION_ASYNC_BLT = 53,
- gcvOPTION_FBO_PREFER_MEM = 54,
- gcvOPTION_GPU_TEX_UPLOAD = 55,
+
+ gcvOPTION_FBO_PREFER_MEM = 80,
/* Insert option above this comment only */
gcvOPTION_COUNT /* Not a OPTION*/
@@ -535,16 +377,11 @@ gceOPTION;
typedef enum _gceFRAMEINFO
{
- /* Total frame count in one run */
gcvFRAMEINFO_FRAME_NUM = 0,
- /* Total draw count in current frame, including draw/compute */
gcvFRAMEINFO_DRAW_NUM = 1,
- /* Total compute count in current frame, subset of drawNum */
- gcvFRAMEINFO_COMPUTE_NUM = 2,
- /* Total dual16 draw/compute count in current frame, subset of drawNum */
- gcvFRAMEINFO_DUAL16_NUM = 3,
- /* Current programID is being set. only valid for ES20 driver right now */
- gcvFRAMEINFO_PROGRAM_ID = 4,
+ gcvFRAMEINFO_DRAW_DUAL16_NUM = 2,
+ gcvFRAMEINFO_DRAW_FL32_NUM = 3,
+
gcvFRAMEINFO_COUNT,
}
@@ -556,7 +393,7 @@ typedef enum _gceFRAMEINFO_OP
gcvFRAMEINFO_OP_DEC = 1,
gcvFRAMEINFO_OP_ZERO = 2,
gcvFRAMEINFO_OP_GET = 3,
- gcvFRAMEINFO_OP_SET = 4,
+
gcvFRAMEINFO_OP_COUNT,
}
gceFRAMEINFO_OP;
@@ -583,9 +420,9 @@ gceCHIPPOWERSTATE;
/* CPU cache operations */
typedef enum _gceCACHEOPERATION
{
- gcvCACHE_CLEAN = 0x01, /* Flush CPU cache to mem */
- gcvCACHE_INVALIDATE = 0x02, /* Invalidte CPU cache */
- gcvCACHE_FLUSH = gcvCACHE_CLEAN | gcvCACHE_INVALIDATE, /* Both flush & invalidate */
+ gcvCACHE_CLEAN = 0x01,
+ gcvCACHE_INVALIDATE = 0x02,
+ gcvCACHE_FLUSH = gcvCACHE_CLEAN | gcvCACHE_INVALIDATE,
gcvCACHE_MEMORY_BARRIER = 0x04
}
gceCACHEOPERATION;
@@ -605,10 +442,6 @@ typedef enum _gceSURF_TYPE
gcvSURF_MASK,
gcvSURF_SCISSOR,
gcvSURF_HIERARCHICAL_DEPTH,
- gcvSURF_ICACHE,
- gcvSURF_TXDESC,
- gcvSURF_FENCE,
- gcvSURF_TFBHEADER,
gcvSURF_NUM_TYPES, /* Make sure this is the last one! */
/* Combinations. */
@@ -617,7 +450,7 @@ typedef enum _gceSURF_TYPE
In Android, vidmem node is allocated by another process. */
gcvSURF_CACHEABLE = 0x400, /* Used to allocate a cacheable surface */
- gcvSURF_TILE_RLV_FENCE = 0x800, /* create texture fence as tile */
+ gcvSURF_FLIP = 0x800, /* The Resolve Target the will been flip resolve from RT */
gcvSURF_TILE_STATUS_DIRTY = 0x1000, /* Init tile status to all dirty */
@@ -627,16 +460,10 @@ typedef enum _gceSURF_TYPE
gcvSURF_PROTECTED_CONTENT = 0x8000, /* create it as content protected */
- gcvSURF_CREATE_AS_DISPLAYBUFFER = 0x10000, /*create it as a display buffer surface */
-
- gcvSURF_CONTIGUOUS = 0x20000, /*create it as contiguous */
-
/* Create it as no compression, valid on when it has tile status. */
gcvSURF_NO_COMPRESSION = 0x40000,
- gcvSURF_DEC = 0x80000, /* Surface is DEC compressed */
-
- gcvSURF_NO_HZ = 0x100000,
+ gcvSURF_CONTIGUOUS = 0x20000, /*create it as contiguous */
gcvSURF_TEXTURE_LINEAR = gcvSURF_TEXTURE
| gcvSURF_LINEAR,
@@ -647,9 +474,6 @@ typedef enum _gceSURF_TYPE
gcvSURF_RENDER_TARGET_NO_TILE_STATUS = gcvSURF_RENDER_TARGET
| gcvSURF_NO_TILE_STATUS,
- gcvSURF_RENDER_TARGET_NO_COMPRESSION = gcvSURF_RENDER_TARGET
- | gcvSURF_NO_COMPRESSION,
-
gcvSURF_RENDER_TARGET_TS_DIRTY = gcvSURF_RENDER_TARGET
| gcvSURF_TILE_STATUS_DIRTY,
@@ -672,6 +496,9 @@ typedef enum _gceSURF_TYPE
gcvSURF_CACHEABLE_BITMAP = gcvSURF_BITMAP
| gcvSURF_CACHEABLE,
+
+ gcvSURF_FLIP_BITMAP = gcvSURF_BITMAP
+ | gcvSURF_FLIP,
}
gceSURF_TYPE;
@@ -725,8 +552,12 @@ typedef enum _gceSURF_FLAG
gcvSURF_FLAG_CONTENT_UPDATED = 0x2,
/* content is y inverted */
gcvSURF_FLAG_CONTENT_YINVERTED = 0x4,
+ /* content is protected */
+ gcvSURF_FLAG_CONTENT_PROTECTED = 0x8,
+ /* surface is contiguous. */
+ gcvSURF_FLAG_CONTIGUOUS = (1 << 4),
/* surface has multiple nodes */
- gcvSURF_FLAG_MULTI_NODE = 0x8,
+ gcvSURF_FLAG_MULTI_NODE = (1 << 5),
}
gceSURF_FLAG;
@@ -736,9 +567,7 @@ typedef enum _gceMIPMAP_IMAGE_FORMAT
}
gceMIPMAP_IMAGE_FORMAT;
-/* Surface formats.
-** Name rules is from MSB->LSB.
-*/
+/* Surface formats. */
typedef enum _gceSURF_FORMAT
{
/* Unknown format. */
@@ -748,9 +577,6 @@ typedef enum _gceSURF_FORMAT
gcvSURF_INDEX1 = 100,
gcvSURF_INDEX4,
gcvSURF_INDEX8,
-#if gcdVG_ONLY
- gcvSURF_INDEX2,
-#endif
/* RGB formats. */
gcvSURF_A2R2G2B2 = 200,
@@ -771,7 +597,6 @@ typedef enum _gceSURF_FORMAT
gcvSURF_R8G8B8G8,
gcvSURF_X2R10G10B10,
gcvSURF_A2R10G10B10,
- gcvSURF_R10G10B10A2,
gcvSURF_X12R12G12B12,
gcvSURF_A12R12G12B12,
gcvSURF_X16R16G16B16,
@@ -784,6 +609,7 @@ typedef enum _gceSURF_FORMAT
gcvSURF_A16R16G16B16_2_A8R8G8B8,
gcvSURF_A32R32G32B32_2_G32R32F,
gcvSURF_A32R32G32B32_4_A8R8G8B8,
+
/* BGR formats. */
gcvSURF_A4B4G4R4 = 300,
gcvSURF_A1B5G5R5,
@@ -802,7 +628,6 @@ typedef enum _gceSURF_FORMAT
gcvSURF_B5G5R5A1,
gcvSURF_B8G8R8X8,
gcvSURF_B8G8R8A8,
- gcvSURF_B10G10R10A2,
gcvSURF_X4B4G4R4,
gcvSURF_X1B5G5R5,
gcvSURF_B4G4R4X4,
@@ -843,20 +668,6 @@ typedef enum _gceSURF_FORMAT
gcvSURF_NV61,
gcvSURF_YVYU,
gcvSURF_VYUY,
- gcvSURF_AYUV,
- gcvSURF_YUV420_10_ST,
- gcvSURF_YUV420_TILE_ST,
- gcvSURF_YUV420_TILE_10_ST,
- gcvSURF_NV12_10BIT,
- gcvSURF_NV21_10BIT,
- gcvSURF_NV16_10BIT,
- gcvSURF_NV61_10BIT,
- gcvSURF_P010,
-#if gcdVG_ONLY
- gcvSURF_AYUY2,
- gcvSURF_ANV12,
- gcvSURF_ANV16,
-#endif
/* Depth formats. */
gcvSURF_D16 = 600,
@@ -869,8 +680,6 @@ typedef enum _gceSURF_FORMAT
gcvSURF_S8D32F_2_A8R8G8B8,
gcvSURF_D24S8_1_A8R8G8B8,
gcvSURF_S8,
- gcvSURF_X24S8,
- gcvSURF_X24S8_1_A8R8G8B8,
/* Alpha formats. */
gcvSURF_A4 = 700,
@@ -956,7 +765,6 @@ typedef enum _gceSURF_FORMAT
gcvSURF_X16B16G16R16F_2_A8R8G8B8,
gcvSURF_A16B16G16R16F_2_A8R8G8B8,
- gcvSURF_A16B16G16R16F_2_G16R16F,
gcvSURF_G32R32F_2_A8R8G8B8,
gcvSURF_X32B32G32R32F_2_G32R32F,
gcvSURF_A32B32G32R32F_2_G32R32F,
@@ -969,20 +777,14 @@ typedef enum _gceSURF_FORMAT
gcvSURF_R32F_1_A8R8G8B8,
gcvSURF_B32G32R32F_3_A8R8G8B8,
- gcvSURF_B10G11R11F_1_A8R8G8B8,
-
- gcvSURF_A32F_1_R32F,
- gcvSURF_L32F_1_R32F,
- gcvSURF_A32L32F_1_G32R32F,
+ gcvSURF_B10G11R11F_1_A8R8G8B8,
/* sRGB format. */
gcvSURF_SBGR8 = 1400,
gcvSURF_A8_SBGR8,
gcvSURF_X8_SBGR8,
- gcvSURF_A8_SRGB8,
- gcvSURF_X8_SRGB8,
/* Integer formats. */
gcvSURF_R8I = 1500,
@@ -1029,25 +831,17 @@ typedef enum _gceSURF_FORMAT
gcvSURF_A32B32G32R32UI,
gcvSURF_A2B10G10R10UI,
gcvSURF_G32R32I_2_A8R8G8B8,
- gcvSURF_G32R32I_1_G32R32F,
gcvSURF_G32R32UI_2_A8R8G8B8,
- gcvSURF_G32R32UI_1_G32R32F,
gcvSURF_X16B16G16R16I_2_A8R8G8B8,
- gcvSURF_X16B16G16R16I_1_G32R32F,
gcvSURF_A16B16G16R16I_2_A8R8G8B8,
- gcvSURF_A16B16G16R16I_1_G32R32F,
gcvSURF_X16B16G16R16UI_2_A8R8G8B8,
- gcvSURF_X16B16G16R16UI_1_G32R32F,
gcvSURF_A16B16G16R16UI_2_A8R8G8B8,
- gcvSURF_A16B16G16R16UI_1_G32R32F,
gcvSURF_X32B32G32R32I_2_G32R32I,
gcvSURF_A32B32G32R32I_2_G32R32I,
- gcvSURF_A32B32G32R32I_2_G32R32F,
gcvSURF_X32B32G32R32I_3_A8R8G8B8,
gcvSURF_A32B32G32R32I_4_A8R8G8B8,
gcvSURF_X32B32G32R32UI_2_G32R32UI,
gcvSURF_A32B32G32R32UI_2_G32R32UI,
- gcvSURF_A32B32G32R32UI_2_G32R32F,
gcvSURF_X32B32G32R32UI_3_A8R8G8B8,
gcvSURF_A32B32G32R32UI_4_A8R8G8B8,
gcvSURF_A2B10G10R10UI_1_A8R8G8B8,
@@ -1074,17 +868,9 @@ typedef enum _gceSURF_FORMAT
gcvSURF_B8G8R8I_1_A8R8G8B8,
gcvSURF_B8G8R8UI_1_A8R8G8B8,
gcvSURF_B16G16R16I_2_A8R8G8B8,
- gcvSURF_B16G16R16I_1_G32R32F,
gcvSURF_B16G16R16UI_2_A8R8G8B8,
- gcvSURF_B16G16R16UI_1_G32R32F,
gcvSURF_B32G32R32I_3_A8R8G8B8,
gcvSURF_B32G32R32UI_3_A8R8G8B8,
- gcvSURF_A16B16G16R16_2_A8R8G8B8,
- gcvSURF_R8G8B8_1_A8R8G8B8,
- gcvSURF_G16R16_1_A8R8G8B8,
- gcvSURF_A2B10G10R10_1_A8R8G8B8,
- gcvSURF_A2R10G10B10_1_A8R8G8B8,
- gcvSURF_A2W10V10U10_1_A8R8G8B8,
/* ASTC formats. */
gcvSURF_ASTC4x4 = 1600,
@@ -1116,30 +902,6 @@ typedef enum _gceSURF_FORMAT
gcvSURF_ASTC12x10_SRGB,
gcvSURF_ASTC12x12_SRGB,
- /* Recompile format*/
- gcvSURF_L16_1_A4R4G4B4 = 1700,
- gcvSURF_V16U16_1_A8R8G8B8,
- gcvSURF_Q8W8V8U8_1_A8R8G8B8,
- gcvSURF_X8L8V8U8_1_A8R8G8B8,
- gcvSURF_R3G3B2_1_A8R8G8B8,
- gcvSURF_A8R3G3B2_1_A8R8G8B8,
- gcvSURF_W11V11U10_1_A8R8G8B8,
- gcvSURF_Q16W16V16U16_2_A8R8G8B8,
- gcvSURF_W11V11U10,
- gcvSURF_V8U8_1_A4R4G4B4,
- gcvSURF_A8B8G8R8_1_A8R8G8B8,
- gcvSURF_A32R32G32B32_1_A8R8G8B8,
- gcvSURF_X16B16G16R16F_1_A8R8G8B8,
- gcvSURF_A16B16G16R16F_1_A8R8G8B8,
- gcvSURF_G32R32F_1_A8R8G8B8,
- gcvSURF_X32B32G32R32F_1_A8R8G8B8,
- gcvSURF_A32B32G32R32F_1_A8R8G8B8,
- gcvSURF_G32R32I_1_A8R8G8B8,
- gcvSURF_G32R32UI_1_A8R8G8B8,
- gcvSURF_A32B32G32R32I_1_A8R8G8B8,
- gcvSURF_A32B32G32R32UI_1_A8R8G8B8,
- gcvSURF_Q16W16V16U16_1_A8R8G8B8,
- gcvSURF_A16B16G16R16_1_A8R8G8B8,
gcvSURF_FORMAT_COUNT
}
gceSURF_FORMAT;
@@ -1152,13 +914,6 @@ typedef enum _gceSURF_YUV_COLOR_SPACE
}
gceSURF_YUV_COLOR_SPACE;
-typedef enum _gceSURF_YUV_SAMPLE_RANGE
-{
- gcvSURF_YUV_FULL_RANGE,
- gcvSURF_YUV_NARROW_RANGE,
-}
-gceSURF_YUV_SAMPLE_RANGE;
-
typedef enum _gceSURF_YUV_CHROMA_SITING
{
gcvSURF_YUV_CHROMA_SITING_0,
@@ -1166,13 +921,12 @@ typedef enum _gceSURF_YUV_CHROMA_SITING
}
gceSURF_YUV_CHROMA_SITING;
-typedef enum _gceSURF_INFO_TYPE
+typedef enum _gceSURF_YUV_SAMPLE_RANGE
{
- gcvSURF_INFO_UNKNOWN = 0,
- gcvSURF_INFO_LAYERSIZE = 1,
- gcvSURF_INFO_SLICESIZE = 2,
+ gcvSURF_YUV_FULL_RANGE,
+ gcvSURF_YUV_NARROW_RANGE,
}
-gceSURF_INFO_TYPE;
+gceSURF_YUV_SAMPLE_RANGE;
/* Format modifiers. */
typedef enum _gceSURF_FORMAT_MODE
@@ -1395,6 +1149,7 @@ typedef enum _gce2D_TILE_STATUS_CONFIG
gcv2D_TSC_COMPRESSED = 0x00000002,
gcv2D_TSC_DOWN_SAMPLER = 0x00000004,
gcv2D_TSC_2D_COMPRESSED = 0x00000008,
+ gcv2D_TSC_TPC_COMPRESSED = 0x00000010,
gcv2D_TSC_DEC_COMPRESSED = 0x00000020,
gcv2D_TSC_DEC_TPC = 0x00000040,
@@ -1405,10 +1160,6 @@ typedef enum _gce2D_TILE_STATUS_CONFIG
gcv2D_TSC_DEC_TPC_TILED = gcv2D_TSC_DEC_COMPRESSED | gcv2D_TSC_DEC_TPC,
gcv2D_TSC_DEC_TPC_TILED_COMPRESSED = gcv2D_TSC_DEC_TPC_TILED | gcv2D_TSC_DEC_TPC_COMPRESSED,
-
- gcv2D_TSC_TPC_COMPRESSED = 0x00001000,
- gcv2D_TSC_TPC_COMPRESSED_V10 = gcv2D_TSC_TPC_COMPRESSED | 0x00000400,
- gcv2D_TSC_TPC_COMPRESSED_V11 = gcv2D_TSC_TPC_COMPRESSED | 0x00000800,
}
gce2D_TILE_STATUS_CONFIG;
@@ -1470,9 +1221,6 @@ typedef enum _gceTEXTURE_TYPE
gcvTEXTURE_CUBEMAP,
gcvTEXTURE_1D_ARRAY,
gcvTEXTURE_2D_ARRAY,
- gcvTEXTURE_2D_MS,
- gcvTEXTURE_2D_MS_ARRAY,
- gcvTEXTURE_CUBEMAP_ARRAY,
gcvTEXTURE_EXTERNAL
}
gceTEXTURE_TYPE;
@@ -1550,10 +1298,8 @@ typedef enum _gceTILING
gcvMINORTILED = 0x8, /* 2x2 tiling. */
/* Tiling special layouts. */
- gcvTILING_SPLIT_BUFFER = 0x10,
- gcvTILING_X_MAJOR = 0x20,
- gcvTILING_Y_MAJOR = 0x40,
- gcvTILING_SWAP = 0x80,
+ gcvTILING_SPLIT_BUFFER = 0x100,
+ gcvTILING_Y_MAJOR = 0x200,
/* Tiling combination layouts. */
gcvMULTI_TILED = gcvTILED
@@ -1564,29 +1310,9 @@ typedef enum _gceTILING
gcvYMAJOR_SUPERTILED = gcvSUPERTILED
| gcvTILING_Y_MAJOR,
-
- gcvTILED_8X4 = 0x0100,
- gcvTILED_4X8 = 0x0100 | gcvTILING_SWAP,
- gcvTILED_8X8 = 0x0200,
- gcvTILED_16X4 = 0x0400,
- gcvTILED_32X4 = 0x0800,
- gcvTILED_64X4 = 0x1000,
-
- gcvTILED_8X8_XMAJOR = gcvTILED_8X8 | gcvTILING_X_MAJOR,
- gcvTILED_8X8_YMAJOR = gcvTILED_8X8 | gcvTILING_Y_MAJOR,
}
gceTILING;
-typedef enum _gceCACHE_MODE
-{
- gcvCACHE_NONE,
- gcvCACHE_128,
- gcvCACHE_256,
-}
-gceCACHE_MODE;
-
-#define DEFAULT_CACHE_MODE gcvCACHE_256
-
/* 2D pattern type. */
typedef enum _gce2D_PATTERN
{
@@ -1619,16 +1345,18 @@ gcePIPE_SELECT;
/* Hardware type. */
typedef enum _gceHARDWARE_TYPE
{
- gcvHARDWARE_INVALID,
- gcvHARDWARE_3D,
- gcvHARDWARE_2D,
- gcvHARDWARE_VG,
- gcvHARDWARE_3D2D,
- gcvHARDWARE_NUM_TYPES,
+ gcvHARDWARE_INVALID = 0x00,
+ gcvHARDWARE_3D = 0x01,
+ gcvHARDWARE_2D = 0x02,
+ gcvHARDWARE_VG = 0x04,
+#if gcdMULTI_GPU_AFFINITY
+ gcvHARDWARE_OCL = 0x05,
+#endif
+ gcvHARDWARE_3D2D = gcvHARDWARE_3D | gcvHARDWARE_2D,
}
gceHARDWARE_TYPE;
-#define gcdCHIP_COUNT gcvCORE_COUNT
+#define gcdCHIP_COUNT 3
typedef enum _gceMMU_MODE
{
@@ -1676,7 +1404,6 @@ typedef enum _gceKERNEL_WHERE
gcvKERNEL_TRIANGLE,
gcvKERNEL_TEXTURE,
gcvKERNEL_PIXEL,
- gcvKERNEL_BLT,
}
gceKERNEL_WHERE;
@@ -1836,13 +1563,6 @@ typedef enum _gceTEXTURE_SWIZZLE
gcvTEXTURE_SWIZZLE_INVALID,
} gceTEXTURE_SWIZZLE;
-typedef enum _gceTEXTURE_SRGBDECODE
-{
- gcvTEXTURE_SRGB_INVALID = 0,
- gcvTEXTURE_DECODE,
- gcvTEXTURE_SKIP_DECODE,
-}gceTEXTURE_SRGBDECODE;
-
typedef enum _gceTEXTURE_COMPARE_MODE
{
gcvTEXTURE_COMPARE_MODE_INVALID = 0,
@@ -1850,14 +1570,6 @@ typedef enum _gceTEXTURE_COMPARE_MODE
gcvTEXTURE_COMPARE_MODE_REF,
} gceTEXTURE_COMPARE_MODE;
-typedef enum _gceTEXTURE_DS_MODE
-{
- gcvTEXTURE_DS_MODE_INVALID = 0,
- gcvTEXTURE_DS_MODE_DEPTH = 1,
- gcvTEXTURE_DS_MODE_STENCIL = 2,
-}gceTEXTURE_DS_MODE;
-
-
/* Pixel output swizzle modes. */
typedef enum _gcePIXEL_SWIZZLE
{
@@ -1880,11 +1592,6 @@ typedef enum _gcePRIMITIVE
gcvPRIMITIVE_TRIANGLE_STRIP,
gcvPRIMITIVE_TRIANGLE_FAN,
gcvPRIMITIVE_RECTANGLE,
- gcvPRIMITIVE_LINES_ADJACENCY,
- gcvPRIMITIVE_LINE_STRIP_ADJACENCY,
- gcvPRIMITIVE_TRIANGLES_ADJACENCY,
- gcvPRIMITIVE_TRIANGLE_STRIP_ADJACENCY,
- gcvPRIMITIVE_PATCH_LIST,
}
gcePRIMITIVE;
@@ -1905,8 +1612,7 @@ typedef enum _gceMULTI_GPU_RENDERING_MODE
gcvMULTI_GPU_RENDERING_MODE_SPLIT_HEIGHT,
gcvMULTI_GPU_RENDERING_MODE_INTERLEAVED_64x64,
gcvMULTI_GPU_RENDERING_MODE_INTERLEAVED_128x64,
- gcvMULTI_GPU_RENDERING_MODE_INTERLEAVED_128x128,
- gcvMULTI_GPU_RENDERING_MODE_INVALID
+ gcvMULTI_GPU_RENDERING_MODE_INTERLEAVED_128x128
}
gceMULTI_GPU_RENDERING_MODE;
@@ -1943,6 +1649,7 @@ typedef enum _gceMACHINECODE
gcvMACHINECODE_GLB25_RELEASE_0,
gcvMACHINECODE_GLB25_RELEASE_1,
+ gcvMACHINECODE_GLB25_RELEASE_2,
/* keep it as the last enum */
gcvMACHINECODE_COUNT
@@ -1959,7 +1666,6 @@ typedef enum _gceUNIFORMCVT
typedef enum _gceHAL_ARG_VERSION
{
gcvHAL_ARG_VERSION_V1 = 0x0,
- gcvHAL_ARG_VERSION_V2,
}
gceHAL_ARG_VERSION;
@@ -1975,65 +1681,15 @@ typedef enum _gceCMDBUF_TYPE
}
gceCMDBUF_SOURCE;
-typedef enum _gceCHIP_FLAG
+typedef enum _gceCHIP_FALG
{
gcvCHIP_FLAG_MSAA_COHERENCEY_ECO_FIX = 1 << 0,
gcvCHIP_FLAG_GC2000_R2 = 1 << 1,
}
gceCHIP_FLAG;
-typedef enum
-{
- gcvENGINE_RENDER = 0,
- gcvENGINE_BLT = 1,
- gcvENGINE_COUNT = 2,
-}
-gceENGINE;
-
-/* CORE enum. */
-typedef enum _gceCORE
-{
- gcvCORE_MAJOR,
- gcvCORE_3D1,
- gcvCORE_3D2,
- gcvCORE_3D3,
- gcvCORE_2D,
- gcvCORE_VG,
-#if gcdDEC_ENABLE_AHB
- gcvCORE_DEC,
-#endif
- gcvCORE_COUNT
-}
-gceCORE;
-
-
-typedef enum _gceADDRESS_AREA
-{
- gcvADDRESS_AREA_NORMAL,
- gcvADDRESS_AREA_SECURE,
-
- gcvADDRESS_AREA_COUNT
-}
-gceADDRESS_AREA;
-
-typedef enum _gceSECURE_MODE
-{
- /* For cores without gcvFEATURE_SECURITY. */
- gcvSECURE_NONE,
-
- /* Use registers added in gcvFEATURE_SECURITY in normal driver,
- ** In this mode, GPU always works under non secure mode and
- ** should not touch secure buffer. It is used to test basic function.
- */
- gcvSECURE_IN_NORMAL,
-
- /* Make use of gcvFEATURE_SECURITY in trust application. */
- gcvSECURE_IN_TA
-}
-gceSECURE_MODE;
-
/*
-* Bit of a requirement is 1 means requirement is a must, 0 means requirement can
+* Bit of a requirment is 1 means requirement is a must, 0 means requirement can
* be ignored.
*/
#define gcvALLOC_FLAG_CONTIGUOUS_BIT 0
@@ -2043,7 +1699,6 @@ gceSECURE_MODE;
#define gcvALLOC_FLAG_MEMLIMIT_BIT 4
#define gcvALLOC_FLAG_DMABUF_BIT 5
#define gcvALLOC_FLAG_USERMEMORY_BIT 6
-#define gcvALLOC_FLAG_EXTERNAL_MEMORY_BIT 7
/* No special needs. */
#define gcvALLOC_FLAG_NONE (0)
@@ -2055,14 +1710,13 @@ gceSECURE_MODE;
#define gcvALLOC_FLAG_SECURITY (1 << gcvALLOC_FLAG_SECURITY_BIT)
/* Physical non contiguous. */
#define gcvALLOC_FLAG_NON_CONTIGUOUS (1 << gcvALLOC_FLAG_NON_CONTIGUOUS_BIT)
+
#define gcvALLOC_FLAG_MEMLIMIT (1 << gcvALLOC_FLAG_MEMLIMIT_BIT)
/* Import DMABUF. */
#define gcvALLOC_FLAG_DMABUF (1 << gcvALLOC_FLAG_DMABUF_BIT)
/* Import USERMEMORY. */
#define gcvALLOC_FLAG_USERMEMORY (1 << gcvALLOC_FLAG_USERMEMORY_BIT)
-/* Import an External Buffer. */
-#define gcvALLOC_FLAG_EXTERNAL_MEMORY (1 << gcvALLOC_FLAG_EXTERNAL_MEMORY_BIT)
/* GL_VIV internal usage */
#ifndef GL_MAP_BUFFER_OBJ_VIV
@@ -2073,9 +1727,6 @@ gceSECURE_MODE;
#define gcvCOMMAND_2D (1 << 0)
#define gcvCOMMAND_3D (1 << 1)
-/* Default chip ID means chip ID same as core index. */
-#define gcvCHIP_ID_DEFAULT (~0U)
-
/******************************************************************************\
****************************** Object Declarations *****************************
\******************************************************************************/
@@ -2089,7 +1740,6 @@ typedef struct _gcoQUEUE * gcoQUEUE;
typedef struct _gcsHAL_INTERFACE * gcsHAL_INTERFACE_PTR;
typedef struct _gcs2D_PROFILE * gcs2D_PROFILE_PTR;
-
#if gcdENABLE_VG
typedef struct _gcoVGHARDWARE * gcoVGHARDWARE;
typedef struct _gcoVGBUFFER * gcoVGBUFFER;
diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer.h
index 4fc2b3082bdb..9da71df83cbc 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer.h
@@ -67,21 +67,6 @@ extern "C" {
/* The number of context buffers per user. */
#define gcdCONTEXT_BUFFER_COUNT 2
-#define gcdRENDER_FENCE_LENGTH (6 * gcmSIZEOF(gctUINT32))
-#define gcdBLT_FENCE_LENGTH (10 * gcmSIZEOF(gctUINT32))
-#define gcdRESERVED_FLUSHCACHE_LENGTH (2 * gcmSIZEOF(gctUINT32))
-#define gcdRESERVED_PAUSE_OQ_LENGTH (2 * gcmSIZEOF(gctUINT32))
-#define gcdRESERVED_PAUSE_XFBWRITTEN_QUERY_LENGTH (4 * gcmSIZEOF(gctUINT32))
-#define gcdRESERVED_PAUSE_PRIMGEN_QUERY_LENGTH (4 * gcmSIZEOF(gctUINT32))
-#define gcdRESERVED_PAUSE_XFB_LENGTH (2 * gcmSIZEOF(gctUINT32))
-#define gcdRESERVED_HW_FENCE (4 * gcmSIZEOF(gctUINT32))
-
-#define gcdRESUME_OQ_LENGTH (2 * gcmSIZEOF(gctUINT32))
-#define gcdRESUME_XFBWRITTEN_QUERY_LENGTH (4 * gcmSIZEOF(gctUINT32))
-#define gcdRESUME_PRIMGEN_QUERY_LENGTH (4 * gcmSIZEOF(gctUINT32))
-#define gcdRESUME_XFB_LENGH (2 * gcmSIZEOF(gctUINT32))
-
-
/* State delta record. */
typedef struct _gcsSTATE_DELTA_RECORD * gcsSTATE_DELTA_RECORD_PTR;
typedef struct _gcsSTATE_DELTA_RECORD
@@ -101,7 +86,9 @@ gcsSTATE_DELTA_RECORD;
typedef struct _gcsSTATE_DELTA
{
/* For debugging: the number of delta in the order of creation. */
+#if gcmIS_DEBUG(gcdDEBUG_CODE)
gctUINT num;
+#endif
/* Main state delta ID. Every time state delta structure gets reinitialized,
main ID is incremented. If main state ID overflows, all map entry IDs get
@@ -137,32 +124,28 @@ typedef struct _gcsSTATE_DELTA
}
gcsSTATE_DELTA;
-#define gcdPATCH_LIST_SIZE 1024
-
/* Command buffer patch record. */
-typedef struct _gcsPATCH
+struct _gcsPATCH
{
- /* Handle of a video memory node. */
- gctUINT32 handle;
+ /* Pointer within the buffer. */
+ gctUINT32_PTR pointer;
- /* Flag */
- gctUINT32 flag;
-}
-gcsPATCH;
+ /* 32-bit data to write at the specified offset. */
+ gctUINT32 data;
+};
/* List of patches for the command buffer. */
-typedef struct _gcsPATCH_LIST
+struct _gcsPATCH_LIST
{
/* Array of patch records. */
- struct _gcsPATCH patch[gcdPATCH_LIST_SIZE];
+ struct _gcsPATCH patch[1024];
/* Number of patches in the array. */
gctUINT count;
/* Next item in the list. */
struct _gcsPATCH_LIST *next;
-}
-gcsPATCH_LIST;
+};
/* Command buffer object. */
struct _gcoCMDBUF
@@ -180,9 +163,8 @@ struct _gcoCMDBUF
/* Feature usage flags. */
gctBOOL using2D;
gctBOOL using3D;
-
- /* Size of reserved tail for each commit. */
- gctUINT32 reservedTail;
+ gctBOOL usingFilterBlit;
+ gctBOOL usingPalette;
/* Physical address of command buffer. Just a name. */
gctUINT32 physical;
@@ -213,28 +195,23 @@ struct _gcoCMDBUF
gctUINT64 hintArrayTail;
#endif
+#if gcmIS_DEBUG(gcdDEBUG_CODE)
/* Last load state command location and hardware address. */
gctUINT64 lastLoadStatePtr;
gctUINT32 lastLoadStateAddress;
gctUINT32 lastLoadStateCount;
-
- /* List of patches. */
- gctUINT64 patchHead;
-
- /*
- * Put pointer type member after this line.
- */
+#endif
/* Completion signal. */
gctSIGNAL signal;
+ /* List of patches. */
+ struct _gcsPATCH_LIST *patchHead;
+ struct _gcsPATCH_LIST *patchTail;
+
/* Link to the siblings. */
gcoCMDBUF prev;
gcoCMDBUF next;
-
- /* Mirror command buffer(s). */
- gcoCMDBUF *mirrors;
- gctUINT32 mirrorCount;
};
typedef struct _gcsQUEUE
@@ -266,8 +243,6 @@ struct _gcoQUEUE
#define gcdIN_QUEUE_RECORD_LIMIT 16
/* Number of records currently in queue */
gctUINT32 recordCount;
-
- gceENGINE engine;
};
struct _gcsTEMPCMDBUF
diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
index 7cd21247e1ba..a63f5c6b3494 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
@@ -52,6 +52,7 @@
*
*****************************************************************************/
+
#ifndef __gc_hal_options_h_
#define __gc_hal_options_h_
@@ -73,19 +74,6 @@
#endif
/*
-USE_KERNEL_VIRTUAL_BUFFERS
-
-This define enables the use of VM for gckCommand and fence buffers.
-*/
-#ifndef USE_KERNEL_VIRTUAL_BUFFERS
-#if defined(UNDER_CE)
-# define USE_KERNEL_VIRTUAL_BUFFERS 1
-#else
-# define USE_KERNEL_VIRTUAL_BUFFERS 0
-#endif
-#endif
-
-/*
USE_NEW_LINUX_SIGNAL
This define enables the Linux kernel signaling between kernel and user.
@@ -116,23 +104,13 @@ This define enables the use of VM for gckCommand and fence buffers.
# define VIVANTE_PROFILER_PERDRAW 0
#endif
-#ifndef VIVANTE_PROFILER_PROBE
-# define VIVANTE_PROFILER_PROBE_PERDRAW 0
-# define VIVANTE_PROFILER_PROBE 0
-#endif
-
-#ifndef VIVANTE_PROFILER_MULTI_GPU
-# define VIVANTE_PROFILER_MULTI_GPU 0
-#endif
-
-#ifndef VIVANTE_PROFILER_ALL_COUNTER
-# define VIVANTE_PROFILER_ALL_COUNTER 0
+#ifndef VIVANTE_PROFILER_NEW
+# define VIVANTE_PROFILER_NEW 0
#endif
#ifndef VIVANTE_PROFILER_PM
# define VIVANTE_PROFILER_PM 1
#endif
-
/*
gcdUSE_VG
@@ -143,15 +121,6 @@ This define enables the use of VM for gckCommand and fence buffers.
#endif
/*
- gcdUSE_VX
-
- Enable VX HAL layer.
-*/
-#ifndef gcdUSE_VX
-# define gcdUSE_VX 1
-#endif
-
-/*
USE_SW_FB
Set to 1 if the frame buffer memory cannot be accessed by the GPU.
@@ -240,15 +209,7 @@ This define enables the use of VM for gckCommand and fence buffers.
# define gcdDUMP_API 0
#endif
-/*
- gcdDUMP_AHB_ACCESS
- When set to 1, a dump of all AHB register access will be printed to kernel
- message.
-*/
-#ifndef gcdDUMP_AHB_ACCESS
-# define gcdDUMP_AHB_ACCESS 0
-#endif
/*
gcdDEBUG_OPTION
@@ -311,39 +272,19 @@ This define enables the use of VM for gckCommand and fence buffers.
# define gcdDEBUG_OPTION_NONE_DEPTH 0
# endif
-/*
- gcdDEBUG_FORCE_CONTEXT_UPDATE
- When set to 1, context will be updated before every commit.
-*/
-#ifndef gcdDEBUG_FORCE_CONTEXT_UPDATE
-# define gcdDEBUG_FORCE_CONTEXT_UPDATE 0
-# endif
-
-
-/*
- gcdDEBUG_FORCE_CONTEXT_UPDATE
- When set to 1, pool of each type surface can be specified by
- changing poolPerType[] in gcsSURF_NODE_Construct.
-*/
-#ifndef gcdDEBUG_OPTION_SPECIFY_POOL
-# define gcdDEBUG_OPTION_SPECIFY_POOL 0
-# endif
-
# endif
#endif
/*
- gcdDUMP_VERIFY_PER_DRAW
+ gcdDUMP_SWAP_PER_DRAW
- When set to 1, verify RT and images(if used) for every single draw to ease simulation debug.
+ When set to 1, dump swap command for every single draw to make simulation comparison happy.
Only valid for ES3 driver for now.
*/
-#ifndef gcdDUMP_VERIFY_PER_DRAW
-# define gcdDUMP_VERIFY_PER_DRAW 0
+#ifndef gcdDUMP_SWAP_PER_DRAW
+# define gcdDUMP_SWAP_PER_DRAW 0
#endif
-
-
/*
gcdDUMP_FRAMERATE
When set to a value other than zero, averaqe frame rate will be dumped.
@@ -433,15 +374,6 @@ This define enables the use of VM for gckCommand and fence buffers.
#endif
/*
- gcdCMD_BLT_BUFFER_SIZE
-
- Number of bytes in a command buffer.
-*/
-#ifndef gcdCMD_BLT_BUFFER_SIZE
-# define gcdCMD_BLT_BUFFER_SIZE (1 << 10)
-#endif
-
-/*
gcdCMD_BUFFERS
Number of command buffers to use per client.
@@ -480,18 +412,33 @@ This define enables the use of VM for gckCommand and fence buffers.
#endif
/*
+ gcdMIRROR_PAGETABLE
+
+ Enable it when GPUs with old MMU and new MMU exist at same SoC. It makes
+ each GPU use same virtual address to access same physical memory.
+*/
+#ifndef gcdMIRROR_PAGETABLE
+# define gcdMIRROR_PAGETABLE 0
+#endif
+
+/*
gcdMMU_SIZE
Size of the MMU page table in bytes. Each 4 bytes can hold 4kB worth of
virtual data.
*/
#ifndef gcdMMU_SIZE
+#if gcdMIRROR_PAGETABLE
+# define gcdMMU_SIZE 0x200000
+#else
# define gcdMMU_SIZE (2048 << 10)
#endif
+#endif
#ifndef gcdGC355_VGMMU_MEMORY_SIZE_KB
# define gcdGC355_VGMMU_MEMORY_SIZE_KB 32
#endif
+
/*
gcdSECURE_USER
@@ -588,7 +535,7 @@ This define enables the use of VM for gckCommand and fence buffers.
*/
#ifndef gcdGPU_TIMEOUT
#if gcdFPGA_BUILD
-# define gcdGPU_TIMEOUT (3600 * 1000)
+# define gcdGPU_TIMEOUT 0
# else
# define gcdGPU_TIMEOUT 20000
# endif
@@ -756,6 +703,14 @@ This define enables the use of VM for gckCommand and fence buffers.
#endif
/*
+ gcdDISABLE_CORES_2D3D
+ disable the 2D3D cores for 2D openVG
+*/
+#ifndef gcdDISABLE_CORES_2D3D
+# define gcdDISABLE_CORES_2D3D 0
+#endif
+
+/*
gcdPAGED_MEMORY_CACHEABLE
When non-zero, paged memory will be cacheable.
@@ -800,6 +755,27 @@ This define enables the use of VM for gckCommand and fence buffers.
#endif
/*
+ gcdMULTI_GPU
+
+ Enable/disable multi-GPU support.
+ 0 : Disable multi-GPU support
+ 1 : Enable one of the 3D cores
+ [2..X] : Number of 3D GPU Cores
+*/
+#ifndef gcdMULTI_GPU
+# define gcdMULTI_GPU 0
+#endif
+
+/*
+ gcdMULTI_GPU_AFFINITY
+
+ Enable/disable the binding of a context to one GPU
+*/
+#ifndef gcdMULTI_GPU_AFFINITY
+# define gcdMULTI_GPU_AFFINITY 0
+#endif
+
+/*
gcdPOWEROFF_TIMEOUT
When non-zero, GPU will power off automatically from
@@ -828,6 +804,24 @@ This define enables the use of VM for gckCommand and fence buffers.
#endif
/*
+ gcdSMP
+
+ This define enables SMP support.
+
+ Currently, it only works on Linux/Android,
+ Kbuild will config it according to whether
+ CONFIG_SMP is set.
+
+*/
+#ifndef gcdSMP
+#ifdef __APPLE__
+# define gcdSMP 1
+#else
+# define gcdSMP 0
+#endif
+#endif
+
+/*
gcdSHARED_RESOLVE_BUFFER_ENABLED
Use shared resolve buffer for all app buffers.
@@ -844,6 +838,15 @@ This define enables the use of VM for gckCommand and fence buffers.
#endif
/*
+ gcdENABLE_OUTER_CACHE_PATCH
+
+ Enable the outer cache patch.
+*/
+#ifndef gcdENABLE_OUTER_CACHE_PATCH
+# define gcdENABLE_OUTER_CACHE_PATCH 0
+#endif
+
+/*
gcdPROCESS_ADDRESS_SPACE
When non-zero, every process which attaches to galcore has its own GPU
@@ -862,7 +865,7 @@ This define enables the use of VM for gckCommand and fence buffers.
they can use same GPU virtual address.
*/
#ifndef gcdSHARED_PAGETABLE
-# define gcdSHARED_PAGETABLE 0
+# define gcdSHARED_PAGETABLE !gcdPROCESS_ADDRESS_SPACE
#endif
#ifndef gcdUSE_PVR
@@ -939,6 +942,25 @@ This define enables the use of VM for gckCommand and fence buffers.
# define gcdGLB27_SHADER_REPLACE_OPTIMIZATION 1
#endif
+/*
+ gcdSTREAM_OUT_BUFFER
+
+ Enable suppport for the secondary stream out buffer.
+*/
+#ifndef gcdSTREAM_OUT_BUFFER
+# define gcdSTREAM_OUT_BUFFER 0
+# define gcdSTREAM_OUT_NAIVE_SYNC 0
+#endif
+
+/*
+ gcdUSE_HARDWARE_CONFIGURATION_TABLES
+
+ Enable the use of hardware configuration tables,
+ instead of query hardware and determine the features.
+*/
+#ifndef gcdUSE_HARDWARE_CONFIGURATION_TABLES
+# define gcdUSE_HARDWARE_CONFIGURATION_TABLES 0
+#endif
/*
gcdSUPPORT_SWAP_RECTANGLE
@@ -965,16 +987,15 @@ This define enables the use of VM for gckCommand and fence buffers.
/*
gcdENABLE_RENDER_INTO_WINDOW
- Enable Render-Into-Window (ie, No-Resolve) feature on android.
+ Enable Render-Into-Window (ie, No-Resolve or direct rendering) feature.
NOTE that even if enabled, it still depends on hardware feature and
- android application behavior. When hardware feature or application
+ application behavior. When hardware feature or application
behavior can not support render into window mode, it will fail back
to normal mode.
- When Render-Into-Window is finally used, window back buffer of android
- applications will be allocated matching render target tiling format.
+ On android, if Render-Into-Window is finally used, window back buffer
+ of applications will be allocated matching render target tiling format.
Otherwise buffer tiling is decided by the above option
'gcdGPU_LINEAR_BUFFER_ENABLED'.
- Android only for now.
*/
#ifndef gcdENABLE_RENDER_INTO_WINDOW
# define gcdENABLE_RENDER_INTO_WINDOW 1
@@ -988,7 +1009,7 @@ This define enables the use of VM for gckCommand and fence buffers.
This will dynamically check if color compression is available.
*/
#ifndef gcdENABLE_RENDER_INTO_WINDOW_WITH_FC
-# define gcdENABLE_RENDER_INTO_WINDOW_WITH_FC 0
+# define gcdENABLE_RENDER_INTO_WINDOW_WITH_FC 1
#endif
/*
@@ -1055,6 +1076,16 @@ This define enables the use of VM for gckCommand and fence buffers.
#endif
/*
+ gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
+
+ Enable source surface address adjust when composition on android.
+ Android only.
+*/
+#ifndef gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
+# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 1
+#endif
+
+/*
gcdUSE_WCLIP_PATCH
Enable wclipping patch.
@@ -1068,6 +1099,15 @@ This define enables the use of VM for gckCommand and fence buffers.
#endif
/*
+ gcd3DBLIT
+
+ TODO: Should be replaced by feature bit if available.
+*/
+#ifndef gcd3DBLIT
+# define gcd3DBLIT 0
+#endif
+
+/*
gcdINTERNAL_COMMENT
Wrap internal comment, content wrapped by it and the macor itself
@@ -1123,7 +1163,7 @@ This define enables the use of VM for gckCommand and fence buffers.
# define gcdENABLE_TS_DOUBLE_BUFFER 1
#else
#if gcdMOVG
-# define gcdENABLE_TS_DOUBLE_BUFFER 0
+# define gcdENABLE_TS_DOUBLE_BUFFER 0
#else
# define gcdENABLE_TS_DOUBLE_BUFFER 1
#endif
@@ -1135,7 +1175,7 @@ This define enables the use of VM for gckCommand and fence buffers.
*/
#ifndef gcdINTERRUPT_STATISTIC
-#if defined(LINUX) || defined(__QNXNTO__) || defined(UNDER_CE)
+#if defined(LINUX)
# define gcdINTERRUPT_STATISTIC 1
#else
# define gcdINTERRUPT_STATISTIC 0
@@ -1143,6 +1183,22 @@ This define enables the use of VM for gckCommand and fence buffers.
#endif
/*
+ gcdYINVERTED_RENDERING
+ When it's not zero, we will rendering display buffer
+ with top-bottom direction. All other offscreen rendering
+ will be bottom-top, which follow OpenGL ES spec.
+*/
+#ifndef gcdYINVERTED_RENDERING
+# define gcdYINVERTED_RENDERING 1
+#endif
+
+#if gcdYINVERTED_RENDERING
+/* disable unaligned linear composition adjust in Y-inverted rendering mode. */
+# undef gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
+# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 0
+#endif
+
+/*
gcdFENCE_WAIT_LOOP_COUNT
Wait fence, loop count.
*/
@@ -1151,6 +1207,15 @@ This define enables the use of VM for gckCommand and fence buffers.
#endif
/*
+ gcdHAL_3D_DRAWBLIT
+ When it's not zero, we will enable HAL 3D drawblit
+ to replace client 3dblit.
+*/
+#ifndef gcdHAL_3D_DRAWBLIT
+# define gcdHAL_3D_DRAWBLIT 1
+#endif
+
+/*
gcdPARTIAL_FAST_CLEAR
When it's not zero, partial fast clear is enabled.
Depends on gcdHAL_3D_DRAWBLIT, if gcdHAL_3D_DRAWBLIT is not enabled,
@@ -1167,17 +1232,7 @@ This define enables the use of VM for gckCommand and fence buffers.
It wil become to a parameter of resolve function.
*/
#ifndef gcdREMOVE_SURF_ORIENTATION
-# define gcdREMOVE_SURF_ORIENTATION 1
-#endif
-
-
-
-/*
- gcdTEST_DEC200
- Test part for DEC200. Remove when release.
-*/
-#ifndef gcdTEST_DEC200
-# define gcdTEST_DEC200 0
+# define gcdREMOVE_SURF_ORIENTATION 0
#endif
/*
@@ -1197,26 +1252,12 @@ This define enables the use of VM for gckCommand and fence buffers.
#endif
/*
- gcdPERFORMANCE_ANALYSIS
-
- When set to 1, driver will pass information through loadstate
- to HW. This loadstate does not impact HW execution.
-*/
-#ifndef gcdPERFORMANCE_ANALYSIS
-# define gcdPERFORMANCE_ANALYSIS 0
-#endif
-
-/*
gcdFRAMEINFO_STATISTIC
When enable, collect frame information.
*/
#ifndef gcdFRAMEINFO_STATISTIC
-#if (defined(DBG) && DBG) || defined(DEBUG) || \
- defined(_DEBUG) || gcdDUMP || gcdPERFORMANCE_ANALYSIS || \
- (defined(WIN32) && !defined(UNDER_CE)) || \
- gcdFPGA_BUILD
-
+#if (defined(DBG) && DBG) || defined(DEBUG) || defined(_DEBUG) || gcdDUMP
# define gcdFRAMEINFO_STATISTIC 1
#else
# define gcdFRAMEINFO_STATISTIC 0
@@ -1225,19 +1266,31 @@ This define enables the use of VM for gckCommand and fence buffers.
#endif
/*
- gcdDEC_ENABLE_AHB
- Enable DEC300 compression AHB mode or not.
+ gcdPACKED_OUTPUT_ADDRESS
+ When it's not zero, ps output is already packed after linked
*/
-#ifndef gcdDEC_ENABLE_AHB
-# define gcdDEC_ENABLE_AHB 0
+#ifndef gcdPACKED_OUTPUT_ADDRESS
+# define gcdPACKED_OUTPUT_ADDRESS 1
#endif
/*
- gcdENABLE_UNIFIED_CONSTANT
- Enable unified constant or not.
+ gcdENABLE_THIRD_PARTY_OPERATION
+ Enable third party operation like tpc or not.
+ This macro can only be enabled by special customer.
*/
-#ifndef gcdENABLE_UNIFIED_CONSTANT
-# define gcdENABLE_UNIFIED_CONSTANT 1
+#ifndef gcdENABLE_THIRD_PARTY_OPERATION
+# define gcdENABLE_THIRD_PARTY_OPERATION 0
+#endif
+
+/*
+ gcdENABLE_DEC_COMPRESSION
+ Enable DEC TPC compression or not.
+*/
+#ifndef gcdENABLE_DEC_COMPRESSION
+# define gcdENABLE_DEC_COMPRESSION 0
+#ifndef gcdDEC_ENABLE_AHB
+# define gcdDEC_ENABLE_AHB 0
+#endif
#endif
/*
@@ -1255,40 +1308,6 @@ This define enables the use of VM for gckCommand and fence buffers.
# define gcdENABLE_VG 0
#endif
-#ifndef gcdVG_ONLY
-# define gcdVG_ONLY (!gcdENABLE_3D && !gcdENABLE_2D && gcdENABLE_VG)
-#endif
-
-#if defined(WIN32) && !defined(UNDER_CE) && (gcdENABLE_VG == 1)
-
-#ifdef gcdUSE_VX
-#undef gcdUSE_VX
-#endif
-
-#ifdef COMMAND_PROCESSOR_VERSION
-#undef COMMAND_PROCESSOR_VERSION
-#endif
-
-#ifdef gcdENABLE_TRUST_APPLICATION
-#undef gcdENABLE_TRUST_APPLICATION
-#endif
-
-#ifdef gcdENABLE_3D
-#undef gcdENABLE_3D
-#endif
-
-#ifdef gcdENABLE_2D
-#undef gcdENABLE_2D
-#endif
-
-#define gcdENABLE_3D 0
-#define gcdENABLE_2D 0
-#define gcdUSE_VX 0
-#define COMMAND_PROCESSOR_VERSION 2
-#define gcdENABLE_TRUST_APPLICATION 0
-
-#endif /* Only for GC355 Cmodel build. */
-
#ifndef gcdGC355_PROFILER
# define gcdGC355_PROFILER 0
#endif
@@ -1302,6 +1321,9 @@ This define enables the use of VM for gckCommand and fence buffers.
# endif
#endif
+#ifndef gcdENABLE_UNIFIED_CONSTANT
+# define gcdENABLE_UNIFIED_CONSTANT 1
+#endif
/*
gcdRECORD_COMMAND
@@ -1321,93 +1343,4 @@ This define enables the use of VM for gckCommand and fence buffers.
# define gcdALLOC_CMD_FROM_RESERVE 0
#endif
-/*
- gcdBOUNDARY_CHECK
-
- When enabled, add bounary before and after a range of
- GPU address. So overflow can be trapped by MMU exception.
- This is a debug option for new MMU and gcdUSE_MMU_EXCEPTION
- is enabled.
-*/
-#ifndef gcdBOUNDARY_CHECK
-# define gcdBOUNDARY_CHECK 0
-#endif
-
-/*
- gcdRENDER_QUALITY_CHECK
-
- When enabled, we disable performance opt patch
- to get know rendering quality comparing with other vendor.
-*/
-#ifndef gcdRENDER_QUALITY_CHECK
-# define gcdRENDER_QUALITY_CHECK 0
-#endif
-
-/*
- gcdSYSTRACE
-
- When enabled, we embed systrace in function header/footer
- to gather time information on linux platforms include android.
- '1' to trace API (EGL, ES11, ES2x, ES3x, etc)
- '2' to trace HAL (except compiler)
- '4' to trace HAL compiler
- See gc_hal_user_debug.c for more detailed trace zones.
-*/
-#ifndef gcdSYSTRACE
-# define gcdSYSTRACE 0
-#endif
-
-#ifndef gcdENABLE_APPCTXT_BLITDRAW
-# define gcdENABLE_APPCTXT_BLITDRAW 0
-#endif
-
-/*
- gcdENABLE_TRUST_APPLICATION
-
- When enabled, trust application is used to handle 'security' registers.
-
- 1) If HW doesn't have robust and security feature, this option is meaningless.
- 2) If HW have robust and security and this option is not enable,
- security registers are handled by non secure driver. It is for
- platform doesn't want/need to use trust zone.
-*/
-#ifndef gcdENABLE_TRUST_APPLICATION
-#if (defined(_WIN32) && !defined(UNDER_CE)) || (defined (LINUX) && !defined(EMULATOR))
-# define gcdENABLE_TRUST_APPLICATION 1
-#else
-# define gcdENABLE_TRUST_APPLICATION 0
-#endif
-#endif
-
-/* Disable gcdENABLE_TRUST_APPLICATION when oboslete gcdSECURITY enabled. */
-#if gcdSECURITY
-#undef gcdENABLE_TRUST_APPLICATION
-#define gcdENABLE_TRUST_APPLICATION 0
-#endif
-
-#ifndef gcdMMU_SECURE_AREA_SIZE
-# define gcdMMU_SECURE_AREA_SIZE 128
-#endif
-
-/*
-VIV:gcdUSE_MMU_EXCEPTION
-
- When enabled, enable and check exception interrupt raised by MMU.
-*/
-#ifndef gcdUSE_MMU_EXCEPTION
-# define gcdUSE_MMU_EXCEPTION 1
-#endif
-
-#ifndef gcdVX_OPTIMIZER
-# define gcdVX_OPTIMIZER 0
-#endif
-
-/*
- gcdDISABLE_GPU_VIRTUAL_ADDRESS
-
- When enabled, disable MMU and all virtual allocated from MMU.
-*/
-#ifndef gcdDISABLE_GPU_VIRTUAL_ADDRESS
-# define gcdDISABLE_GPU_VIRTUAL_ADDRESS 0
-#endif
#endif /* __gc_hal_options_h_ */
diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
index d8155de02b84..b8c449c4df15 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
@@ -56,6 +56,10 @@
#ifndef __gc_hal_profiler_h_
#define __gc_hal_profiler_h_
+#if VIVANTE_PROFILER_NEW
+#include "gc_hal_engine.h"
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -128,21 +132,12 @@ extern "C" {
#define VS_TEXLDINSTCOUNT (VS_BRANCHINSTCOUNT + 1)
#define VS_RENDEREDVERTCOUNT (VS_TEXLDINSTCOUNT + 1)
#define VS_SOURCE (VS_RENDEREDVERTCOUNT + 1)
-#define VS_NONIDLESTARVECOUNT (VS_SOURCE + 1)
-#define VS_STARVELCOUNT (VS_NONIDLESTARVECOUNT + 1)
-#define VS_STALLCOUNT (VS_STARVELCOUNT + 1)
-#define VS_PROCESSCOUNT (VS_STALLCOUNT + 1)
#define PS_INSTCOUNT 1
#define PS_BRANCHINSTCOUNT (PS_INSTCOUNT + 1)
#define PS_TEXLDINSTCOUNT (PS_BRANCHINSTCOUNT + 1)
#define PS_RENDEREDPIXCOUNT (PS_TEXLDINSTCOUNT + 1)
#define PS_SOURCE (PS_RENDEREDPIXCOUNT + 1)
-#define PS_NONIDLESTARVECOUNT (PS_SOURCE + 1)
-#define PS_STARVELCOUNT (PS_NONIDLESTARVECOUNT + 1)
-#define PS_STALLCOUNT (PS_STARVELCOUNT + 1)
-#define PS_PROCESSCOUNT (PS_STALLCOUNT + 1)
-#define PS_SHADERCYCLECOUNT (PS_PROCESSCOUNT + 1)
#define PA_INVERTCOUNT 1
#define PA_INPRIMCOUNT (PA_INVERTCOUNT + 1)
@@ -150,21 +145,9 @@ extern "C" {
#define PA_DEPTHCLIPCOUNT (PA_OUTPRIMCOUNT + 1)
#define PA_TRIVIALREJCOUNT (PA_DEPTHCLIPCOUNT + 1)
#define PA_CULLCOUNT (PA_TRIVIALREJCOUNT + 1)
-#define PA_NONIDLESTARVECOUNT (PA_CULLCOUNT + 1)
-#define PA_STARVELCOUNT (PA_NONIDLESTARVECOUNT + 1)
-#define PA_STALLCOUNT (PA_STARVELCOUNT + 1)
-#define PA_PROCESSCOUNT (PA_STALLCOUNT + 1)
-
-#define SE_TRIANGLECOUNT 1
-#define SE_LINECOUNT (SE_TRIANGLECOUNT + 1)
-#define SE_STARVECOUNT (SE_LINECOUNT + 1)
-#define SE_STALLCOUNT (SE_STARVECOUNT + 1)
-#define SE_RECEIVETRIANGLECOUNT (SE_STALLCOUNT + 1)
-#define SE_SENDTRIANGLECOUNT (SE_RECEIVETRIANGLECOUNT + 1)
-#define SE_RECEIVELINESCOUNT (SE_SENDTRIANGLECOUNT + 1)
-#define SE_SENDLINESCOUNT (SE_RECEIVELINESCOUNT + 1)
-#define SE_NONIDLESTARVECOUNT (SE_SENDLINESCOUNT + 1)
-#define SE_PROCESSCOUNT (SE_NONIDLESTARVECOUNT + 1)
+
+#define SE_TRIANGLECOUNT 1
+#define SE_LINECOUNT (SE_TRIANGLECOUNT + 1)
#define RA_VALIDPIXCOUNT 1
#define RA_TOTALQUADCOUNT (RA_VALIDPIXCOUNT + 1)
@@ -173,10 +156,6 @@ extern "C" {
#define RA_PIPECACHEMISSCOUNT (RA_TOTALPRIMCOUNT + 1)
#define RA_PREFCACHEMISSCOUNT (RA_PIPECACHEMISSCOUNT + 1)
#define RA_EEZCULLCOUNT (RA_PREFCACHEMISSCOUNT + 1)
-#define RA_NONIDLESTARVECOUNT (RA_EEZCULLCOUNT + 1)
-#define RA_STARVELCOUNT (RA_NONIDLESTARVECOUNT + 1)
-#define RA_STALLCOUNT (RA_STARVELCOUNT + 1)
-#define RA_PROCESSCOUNT (RA_STALLCOUNT + 1)
#define TX_TOTBILINEARREQ 1
#define TX_TOTTRILINEARREQ (TX_TOTBILINEARREQ + 1)
@@ -187,10 +166,6 @@ extern "C" {
#define TX_CACHEMISSCOUNT (TX_MEMREADIN8BCOUNT + 1)
#define TX_CACHEHITTEXELCOUNT (TX_CACHEMISSCOUNT + 1)
#define TX_CACHEMISSTEXELCOUNT (TX_CACHEHITTEXELCOUNT + 1)
-#define TX_NONIDLESTARVECOUNT (TX_CACHEMISSTEXELCOUNT+ 1)
-#define TX_STARVELCOUNT (TX_NONIDLESTARVECOUNT + 1)
-#define TX_STALLCOUNT (TX_STARVELCOUNT + 1)
-#define TX_PROCESSCOUNT (TX_STALLCOUNT + 1)
#define PE_KILLEDBYCOLOR 1
#define PE_KILLEDBYDEPTH (PE_KILLEDBYCOLOR + 1)
@@ -200,20 +175,11 @@ extern "C" {
#define MC_READREQ8BPIPE 1
#define MC_READREQ8BIP (MC_READREQ8BPIPE + 1)
#define MC_WRITEREQ8BPIPE (MC_READREQ8BIP + 1)
-#define MC_AXIMINLATENCY (MC_WRITEREQ8BPIPE + 1)
-#define MC_AXIMAXLATENCY (MC_AXIMINLATENCY + 1)
-#define MC_AXITOTALLATENCY (MC_AXIMAXLATENCY + 1)
-#define MC_AXISAMPLECOUNT (MC_AXITOTALLATENCY + 1)
#define AXI_READREQSTALLED 1
#define AXI_WRITEREQSTALLED (AXI_READREQSTALLED + 1)
#define AXI_WRITEDATASTALLED (AXI_WRITEREQSTALLED + 1)
-#define FE_DRAWCOUNT 1
-#define FE_OUTVERTEXCOUNT (FE_DRAWCOUNT + 1)
-#define FE_STALLCOUNT (FE_OUTVERTEXCOUNT + 1)
-#define FE_STARVECOUNT (FE_STALLCOUNT + 1)
-
#define PVS_INSTRCOUNT 1
#define PVS_ALUINSTRCOUNT (PVS_INSTRCOUNT + 1)
#define PVS_TEXINSTRCOUNT (PVS_ALUINSTRCOUNT + 1)
@@ -262,8 +228,6 @@ extern "C" {
#define VPG_ES11_DRAW 0x200000
#define VPG_ES30_DRAW 0x210000
#define VPG_VG11_TIME 0x220000
-#define VPG_FE 0x230000
-#define VPG_MULTI_GPU 0x240000
#define VPG_END 0xff0000
/* Info. */
@@ -333,20 +297,12 @@ extern "C" {
#define VPC_VSBRANCHINSTCOUNT (VPG_VS + VS_BRANCHINSTCOUNT)
#define VPC_VSTEXLDINSTCOUNT (VPG_VS + VS_TEXLDINSTCOUNT)
#define VPC_VSRENDEREDVERTCOUNT (VPG_VS + VS_RENDEREDVERTCOUNT)
-#define VPC_VSNONIDLESTARVECOUNT (VPG_VS + VS_NONIDLESTARVECOUNT)
-#define VPC_VSSTARVELCOUNT (VPG_VS + VS_STARVELCOUNT)
-#define VPC_VSSTALLCOUNT (VPG_VS + VS_STALLCOUNT)
-#define VPC_VSPROCESSCOUNT (VPG_VS + VS_PROCESSCOUNT)
/* HW: PS Count. */
#define VPC_PSINSTCOUNT (VPG_PS + PS_INSTCOUNT)
#define VPC_PSBRANCHINSTCOUNT (VPG_PS + PS_BRANCHINSTCOUNT)
#define VPC_PSTEXLDINSTCOUNT (VPG_PS + PS_TEXLDINSTCOUNT)
#define VPC_PSRENDEREDPIXCOUNT (VPG_PS + PS_RENDEREDPIXCOUNT)
-#define VPC_PSNONIDLESTARVECOUNT (VPG_PS + PS_NONIDLESTARVECOUNT)
-#define VPC_PSSTARVELCOUNT (VPG_PS + PS_STARVELCOUNT)
-#define VPC_PSSTALLCOUNT (VPG_PS + PS_STALLCOUNT)
-#define VPC_PSPROCESSCOUNT (VPG_PS + PS_PROCESSCOUNT)
-#define VPC_PSSHADERCYCLECOUNT (VPG_PS + PS_SHADERCYCLECOUNT)
+
/* HW: PA Counters. */
#define VPC_PAINVERTCOUNT (VPG_PA + PA_INVERTCOUNT)
@@ -355,22 +311,10 @@ extern "C" {
#define VPC_PADEPTHCLIPCOUNT (VPG_PA + PA_DEPTHCLIPCOUNT)
#define VPC_PATRIVIALREJCOUNT (VPG_PA + PA_TRIVIALREJCOUNT)
#define VPC_PACULLCOUNT (VPG_PA + PA_CULLCOUNT)
-#define VPC_PANONIDLESTARVECOUNT (VPG_PA + PA_NONIDLESTARVECOUNT)
-#define VPC_PASTARVELCOUNT (VPG_PA + PA_STARVELCOUNT)
-#define VPC_PASTALLCOUNT (VPG_PA + PA_STALLCOUNT)
-#define VPC_PAPROCESSCOUNT (VPG_PA + PA_PROCESSCOUNT)
/* HW: Setup Counters. */
#define VPC_SETRIANGLECOUNT (VPG_SETUP + SE_TRIANGLECOUNT)
#define VPC_SELINECOUNT (VPG_SETUP + SE_LINECOUNT)
-#define VPC_SESTARVECOUNT (VPG_SETUP + SE_STARVECOUNT)
-#define VPC_SESTALLCOUNT (VPG_SETUP + SE_STALLCOUNT)
-#define VPC_SERECEIVETRIANGLECOUNT (VPG_SETUP + SE_RECEIVETRIANGLECOUNT)
-#define VPC_SESENDTRIANGLECOUNT (VPG_SETUP + SE_SENDTRIANGLECOUNT)
-#define VPC_SERECEIVELINESCOUNT (VPG_SETUP + SE_RECEIVELINESCOUNT)
-#define VPC_SESENDLINESCOUNT (VPG_SETUP + SE_SENDLINESCOUNT)
-#define VPC_SENONIDLESTARVECOUNT (VPG_SETUP + SE_NONIDLESTARVECOUNT)
-#define VPC_SEPROCESSCOUNT (VPG_SETUP + SE_PROCESSCOUNT)
/* HW: RA Counters. */
#define VPC_RAVALIDPIXCOUNT (VPG_RA + RA_VALIDPIXCOUNT)
@@ -380,10 +324,6 @@ extern "C" {
#define VPC_RAPIPECACHEMISSCOUNT (VPG_RA + RA_PIPECACHEMISSCOUNT)
#define VPC_RAPREFCACHEMISSCOUNT (VPG_RA + RA_PREFCACHEMISSCOUNT)
#define VPC_RAEEZCULLCOUNT (VPG_RA + RA_EEZCULLCOUNT)
-#define VPC_RANONIDLESTARVECOUNT (VPG_RA + RA_NONIDLESTARVECOUNT)
-#define VPC_RASTARVELCOUNT (VPG_RA + RA_STARVELCOUNT)
-#define VPC_RASTALLCOUNT (VPG_RA + RA_STALLCOUNT)
-#define VPC_RAPROCESSCOUNT (VPG_RA + RA_PROCESSCOUNT)
/* HW: TEX Counters. */
#define VPC_TXTOTBILINEARREQ (VPG_TX + TX_TOTBILINEARREQ)
@@ -395,10 +335,6 @@ extern "C" {
#define VPC_TXCACHEMISSCOUNT (VPG_TX + TX_CACHEMISSCOUNT)
#define VPC_TXCACHEHITTEXELCOUNT (VPG_TX + TX_CACHEHITTEXELCOUNT)
#define VPC_TXCACHEMISSTEXELCOUNT (VPG_TX + TX_CACHEMISSTEXELCOUNT)
-#define VPC_TXNONIDLESTARVECOUNT (VPG_TX + TX_NONIDLESTARVECOUNT)
-#define VPC_TXSTARVELCOUNT (VPG_TX + TX_STARVELCOUNT)
-#define VPC_TXSTALLCOUNT (VPG_TX + TX_STALLCOUNT)
-#define VPC_TXPROCESSCOUNT (VPG_TX + TX_PROCESSCOUNT)
/* HW: PE Counters. */
#define VPC_PEKILLEDBYCOLOR (VPG_PE + PE_KILLEDBYCOLOR)
@@ -410,22 +346,12 @@ extern "C" {
#define VPC_MCREADREQ8BPIPE (VPG_MC + MC_READREQ8BPIPE)
#define VPC_MCREADREQ8BIP (VPG_MC + MC_READREQ8BIP)
#define VPC_MCWRITEREQ8BPIPE (VPG_MC + MC_WRITEREQ8BPIPE)
-#define VPC_MCAXIMINLATENCY (VPG_MC + MC_AXIMINLATENCY)
-#define VPC_MCAXIMAXLATENCY (VPG_MC + MC_AXIMAXLATENCY)
-#define VPC_MCAXITOTALLATENCY (VPG_MC + MC_AXITOTALLATENCY)
-#define VPC_MCAXISAMPLECOUNT (VPG_MC + MC_AXISAMPLECOUNT)
/* HW: AXI Counters. */
#define VPC_AXIREADREQSTALLED (VPG_AXI + AXI_READREQSTALLED)
#define VPC_AXIWRITEREQSTALLED (VPG_AXI + AXI_WRITEREQSTALLED)
#define VPC_AXIWRITEDATASTALLED (VPG_AXI + AXI_WRITEDATASTALLED)
-/* HW: FE Counters. */
-#define VPC_FEDRAWCOUNT (VPG_FE + FE_DRAWCOUNT)
-#define VPC_FEOUTVERTEXCOUNT (VPG_FE + FE_OUTVERTEXCOUNT)
-#define VPC_FESTALLCOUNT (VPG_FE + FE_STALLCOUNT)
-#define VPC_FESTARVECOUNT (VPG_FE + FE_STARVECOUNT)
-
/* PROGRAM: Shader program counters. */
#define VPC_PVSINSTRCOUNT (VPG_PVS + PVS_INSTRCOUNT)
#define VPC_PVSALUINSTRCOUNT (VPG_PVS + PVS_ALUINSTRCOUNT)
@@ -447,55 +373,8 @@ extern "C" {
#define VPC_ES30_DRAW_NO (VPG_ES30_DRAW + 1)
#define VPC_ES11_DRAW_NO (VPG_ES11_DRAW + 1)
-#define VPC_ES30_GPU_NO (VPG_MULTI_GPU + 1)
-#endif
-
-#if VIVANTE_PROFILER_ALL_COUNTER
-#define MODULE_FRONT_END_COUNTER_NUM 30
-#define MODULE_SHADER_COUNTER_NUM 30
-#define MODULE_PRIMITIVE_ASSEMBLY_COUNTER_NUM 30
-#define MODULE_SETUP_COUNTER_NUM 30
-#define MODULE_RASTERIZER_COUNTER_NUM 30
-#define MODULE_TEXTURE_COUNTER_NUM 30
-#define MODULE_PIXEL_ENGINE_COUNTER_NUM 30
-#define MODULE_MEMORY_CONTROLLER_COUNTER_NUM 30
-#define MODULE_HOST_INTERFACE_COUNTER_NUM 30
#endif
-#if VIVANTE_PROFILER_PROBE
-#define MODULE_FRONT_END_COUNTER_NUM 0x5
-#define MODULE_VERTEX_SHADER_COUNTER_NUM 0x9
-#define MODULE_PRIMITIVE_ASSEMBLY_COUNTER_NUM 0xC
-#define MODULE_SETUP_COUNTER_NUM 0xD
-#define MODULE_RASTERIZER_COUNTER_NUM 0xE
-#define MODULE_PIXEL_SHADER_COUNTER_NUM 0x9
-#define MODULE_TEXTURE_COUNTER_NUM 0x8
-#define MODULE_PIXEL_ENGINE_COUNTER_NUM 0x8
-#define MODULE_MEMORY_CONTROLLER_COLOR_COUNTER_NUM 0xC
-#define MODULE_MEMORY_CONTROLLER_DEPTH_COUNTER_NUM 0xC
-#define MODULE_HOST_INTERFACE0_COUNTER_NUM 0x9
-#define MODULE_HOST_INTERFACE1_COUNTER_NUM 0x7
-#define MODULE_GPUL2_CACHE_COUNTER_NUM 0xE
-
-typedef enum _gceCOUNTER
-{
- gcvCOUNTER_FRONT_END,
- gcvCOUNTER_VERTEX_SHADER,
- gcvCOUNTER_PRIMITIVE_ASSEMBLY,
- gcvCOUNTER_SETUP,
- gcvCOUNTER_RASTERIZER,
- gcvCOUNTER_PIXEL_SHADER,
- gcvCOUNTER_TEXTURE,
- gcvCOUNTER_PIXEL_ENGINE,
- gcvCOUNTER_MEMORY_CONTROLLER_COLOR,
- gcvCOUNTER_MEMORY_CONTROLLER_DEPTH,
- gcvCOUNTER_HOST_INTERFACE0,
- gcvCOUNTER_HOST_INTERFACE1,
- gcvCOUNTER_GPUL2_CACHE,
- gcvCOUNTER_COUNT
-}
-gceCOUNTER;
-#endif
/* HW profile information. */
typedef struct _gcsPROFILER_COUNTERS
@@ -531,15 +410,6 @@ typedef struct _gcsPROFILER_COUNTERS
gctUINT32 vtx_texld_inst_counter;
gctUINT32 pxl_branch_inst_counter;
gctUINT32 pxl_texld_inst_counter;
- gctUINT32 vs_non_idle_starve_count;
- gctUINT32 vs_starve_count;
- gctUINT32 vs_stall_count;
- gctUINT32 vs_process_count;
- gctUINT32 ps_non_idle_starve_count;
- gctUINT32 ps_starve_count;
- gctUINT32 ps_stall_count;
- gctUINT32 ps_process_count;
- gctUINT32 shader_cycle_count;
/* PA */
gctUINT32 pa_input_vtx_counter;
@@ -548,22 +418,10 @@ typedef struct _gcsPROFILER_COUNTERS
gctUINT32 pa_depth_clipped_counter;
gctUINT32 pa_trivial_rejected_counter;
gctUINT32 pa_culled_counter;
- gctUINT32 pa_non_idle_starve_count;
- gctUINT32 pa_starve_count;
- gctUINT32 pa_stall_count;
- gctUINT32 pa_process_count;
/* SE */
gctUINT32 se_culled_triangle_count;
gctUINT32 se_culled_lines_count;
- gctUINT32 se_starve_count;
- gctUINT32 se_stall_count;
- gctUINT32 se_receive_triangle_count;
- gctUINT32 se_send_triangle_count;
- gctUINT32 se_receive_lines_count;
- gctUINT32 se_send_lines_count;
- gctUINT32 se_process_count;
- gctUINT32 se_non_idle_starve_count;
/* RA */
gctUINT32 ra_valid_pixel_count;
@@ -573,10 +431,6 @@ typedef struct _gcsPROFILER_COUNTERS
gctUINT32 ra_pipe_cache_miss_counter;
gctUINT32 ra_prefetch_cache_miss_counter;
gctUINT32 ra_eez_culled_counter;
- gctUINT32 ra_non_idle_starve_count;
- gctUINT32 ra_starve_count;
- gctUINT32 ra_stall_count;
- gctUINT32 ra_process_count;
/* TX */
gctUINT32 tx_total_bilinear_requests;
@@ -588,65 +442,22 @@ typedef struct _gcsPROFILER_COUNTERS
gctUINT32 tx_cache_miss_count;
gctUINT32 tx_cache_hit_texel_count;
gctUINT32 tx_cache_miss_texel_count;
- gctUINT32 tx_non_idle_starve_count;
- gctUINT32 tx_starve_count;
- gctUINT32 tx_stall_count;
- gctUINT32 tx_process_count;
/* MC */
gctUINT32 mc_total_read_req_8B_from_pipeline;
gctUINT32 mc_total_read_req_8B_from_IP;
gctUINT32 mc_total_write_req_8B_from_pipeline;
- gctUINT32 mc_axi_total_latency;
- gctUINT32 mc_axi_sample_count;
- gctUINT32 mc_axi_max_latency;
- gctUINT32 mc_axi_min_latency;
/* HI */
gctUINT32 hi_axi_cycles_read_request_stalled;
gctUINT32 hi_axi_cycles_write_request_stalled;
gctUINT32 hi_axi_cycles_write_data_stalled;
-
- /* FE */
- gctUINT32 fe_draw_count;
- gctUINT32 fe_out_vertex_count;
- gctUINT32 fe_stall_count;
- gctUINT32 fe_starve_count;
-
-#if VIVANTE_PROFILER_ALL_COUNTER
- gctUINT32 feCounters[MODULE_FRONT_END_COUNTER_NUM];
- gctUINT32 paCounters[MODULE_PRIMITIVE_ASSEMBLY_COUNTER_NUM];
- gctUINT32 shCounters[MODULE_SHADER_COUNTER_NUM];
- gctUINT32 seCounters[MODULE_SETUP_COUNTER_NUM];
- gctUINT32 raCounters[MODULE_RASTERIZER_COUNTER_NUM];
- gctUINT32 txCounters[MODULE_TEXTURE_COUNTER_NUM];
- gctUINT32 peCounters[MODULE_PIXEL_ENGINE_COUNTER_NUM];
- gctUINT32 mcCounters[MODULE_MEMORY_CONTROLLER_COUNTER_NUM];
- gctUINT32 hiCounters[MODULE_HOST_INTERFACE_COUNTER_NUM];
-
-#endif
}
gcsPROFILER_COUNTERS;
-#define NumOfDrawBuf 1024
-
-typedef enum _gceCOUNTER_OPTYPE
-{
- gcvCOUNTER_OP_DRAW = 0,
- gcvCOUNTER_OP_BLT = 1,
- gcvCOUNTER_OP_COMPUTE = 2,
- gcvCOUNTER_OP_RS = 3,
- gcvCOUNTER_OP_NONE = 4
-}
-gceCOUNTER_OPTYPE;
-
-typedef struct _gcsPROBEBUFFER
-{
- gctHANDLE newCounterBuf[NumOfDrawBuf];
- gctUINT32 curBufId;
- gceCOUNTER_OPTYPE opType[NumOfDrawBuf];
-}
-gcsPROBEBUFFER;
+#if VIVANTE_PROFILER_NEW
+#define NumOfDrawBuf 64
+#endif
/* HAL profile information. */
typedef struct _gcsPROFILER
@@ -656,7 +467,6 @@ typedef struct _gcsPROFILER
gctBOOL enableHW;
gctBOOL enableSH;
gctBOOL isSyncMode;
- gctBOOL enablePrint;
gctBOOL disableOutputCounter;
gctBOOL useSocket;
@@ -701,10 +511,20 @@ typedef struct _gcsPROFILER
gctUINT32 redundantStateChangeCalls;
#endif
-#if VIVANTE_PROFILER_PROBE
- gcsPROBEBUFFER probeBuffer;
- gctFILE probeFile;
+ gctUINT32 prevVSInstCount;
+ gctUINT32 prevVSBranchInstCount;
+ gctUINT32 prevVSTexInstCount;
+ gctUINT32 prevVSVertexCount;
+ gctUINT32 prevPSInstCount;
+ gctUINT32 prevPSBranchInstCount;
+ gctUINT32 prevPSTexInstCount;
+ gctUINT32 prevPSPixelCount;
+
+#if VIVANTE_PROFILER_NEW
+ gcoBUFOBJ newCounterBuf[NumOfDrawBuf];
+ gctUINT32 curBufId;
#endif
+
}
gcsPROFILER;
@@ -763,15 +583,9 @@ gcoPROFILER_EndFrame(
IN gcoHAL Hal
);
-gceSTATUS
- gcoPROFILER_Begin(
- IN gcoHAL Hal,
- IN gceCOUNTER_OPTYPE operationType
- );
-
/* Call to signal end of draw. */
gceSTATUS
-gcoPROFILER_End(
+gcoPROFILER_EndDraw(
IN gcoHAL Hal,
IN gctBOOL FirstDraw
);
diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
index 1b700f059626..c7b03fd51154 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
@@ -215,6 +215,41 @@ gcoSURF_DisableAlphaBlend(
IN gcoSURF Surface
);
+/* Copy a rectangular area with format conversion. */
+gceSTATUS
+gcoSURF_CopyPixels(
+ IN gcoSURF Source,
+ IN gcoSURF Target,
+ IN gctINT SourceX,
+ IN gctINT SourceY,
+ IN gctINT TargetX,
+ IN gctINT TargetY,
+ IN gctINT Width,
+ IN gctINT Height
+ );
+
+/* Read surface pixel. */
+gceSTATUS
+gcoSURF_ReadPixel(
+ IN gcoSURF Surface,
+ IN gctPOINTER Memory,
+ IN gctINT X,
+ IN gctINT Y,
+ IN gceSURF_FORMAT Format,
+ OUT gctPOINTER PixelValue
+ );
+
+/* Write surface pixel. */
+gceSTATUS
+gcoSURF_WritePixel(
+ IN gcoSURF Surface,
+ IN gctPOINTER Memory,
+ IN gctINT X,
+ IN gctINT Y,
+ IN gceSURF_FORMAT Format,
+ IN gctPOINTER PixelValue
+ );
+
gceSTATUS
gcoSURF_SetDither(
IN gcoSURF Surface,
diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_security_interface.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_security_interface.h
index 1e07964512d6..335e8da4c5d8 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_security_interface.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_security_interface.h
@@ -69,14 +69,11 @@ typedef enum kernel_packet_command {
KERNEL_ALLOCATE_SECRUE_MEMORY, /*! Security memory management. */
KERNEL_FREE_SECURE_MEMORY,
KERNEL_EXECUTE, /* Execute a command buffer. */
- KERNEL_DUMP_MMU_EXCEPTION,
} kernel_packet_command_t;
struct kernel_start_command {
kernel_packet_command_t command; /*! The command (always needs to be the first entry in a structure). */
gctUINT8 gpu; /*! Which GPU. */
- gctUINT32 address;
- gctUINT32 bytes;
};
/*!
@@ -135,7 +132,6 @@ struct kernel_map_memory {
kernel_packet_command_t command;
kernel_map_scatter_gather_t *scatter;
gctUINT32 *physicals;
- gctPHYS_ADDR_T physical; /*! Contiguous physical address range. */
gctUINT32 pageCount;
gctUINT32 gpuAddress;
};
diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
index 3ac4dc14c236..baf43e14c45c 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
@@ -121,13 +121,8 @@ extern "C" {
/******************************************************************************\
************************************ Keyword ***********************************
\******************************************************************************/
-
#if defined(ANDROID) && defined(__BIONIC_FORTIFY)
-#if defined(__clang__)
-# define gcmINLINE __inline__ __attribute__ ((always_inline)) __attribute__ ((gnu_inline))
-# else
-# define gcmINLINE __inline__ __attribute__ ((always_inline)) __attribute__ ((gnu_inline)) __attribute__ ((artificial))
-# endif
+# define gcmINLINE __inline__ __attribute__ ((always_inline)) __attribute__ ((gnu_inline)) __attribute__ ((artificial))
#elif ((defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || defined(__APPLE__))
# define gcmINLINE inline /* C99 keyword. */
#elif defined(__GNUC__)
@@ -210,7 +205,6 @@ typedef unsigned short gctUINT16;
typedef unsigned int gctUINT32;
typedef unsigned long long gctUINT64;
typedef uintptr_t gctUINTPTR_T;
-typedef ptrdiff_t gctPTRDIFF_T;
typedef gctUINT * gctUINT_PTR;
typedef gctUINT8 * gctUINT8_PTR;
@@ -239,11 +233,11 @@ typedef gctUINT32 gctTRACE;
#define gcvMAXUINT8 0xff
#define gcvMINUINT8 0x0
#define gcvMAXUINT16 0xffff
-#define gcvMINUINT16 0x0
+#define gcvMINUINT16 0x8000
#define gcvMAXUINT32 0xffffffff
-#define gcvMINUINT32 0x0
+#define gcvMINUINT32 0x80000000
#define gcvMAXUINT64 0xffffffffffffffff
-#define gcvMINUINT64 0x0
+#define gcvMINUINT64 0x8000000000000000
#define gcvMAXUINTPTR_T (~(gctUINTPTR_T)0)
typedef float gctFLOAT;
@@ -486,7 +480,6 @@ typedef enum _gceSTATUS
gcvSTATUS_INTERRUPTED = -26,
gcvSTATUS_DEVICE = -27,
gcvSTATUS_NOT_MULTI_PIPE_ALIGNED = -28,
- gcvSTATUS_OUT_OF_SAMPLER = -29,
/* Linker errors. */
gcvSTATUS_GLOBAL_TYPE_MISMATCH = -1000,
@@ -504,7 +497,6 @@ typedef enum _gceSTATUS
gcvSTATUS_LINK_INVALID_SHADERS = -1012,
gcvSTATUS_CS_NO_WORKGROUP_SIZE = -1013,
gcvSTATUS_LINK_LIB_ERROR = -1014,
-
gcvSTATUS_SHADER_VERSION_MISMATCH = -1015,
gcvSTATUS_TOO_MANY_INSTRUCTION = -1016,
gcvSTATUS_SSBO_MISMATCH = -1017,
@@ -513,13 +505,7 @@ typedef enum _gceSTATUS
gcvSTATUS_NOT_SUPPORT_CL = -1020,
gcvSTATUS_NOT_SUPPORT_INTEGER = -1021,
gcvSTATUS_UNIFORM_TYPE_MISMATCH = -1022,
-
- gcvSTATUS_MISSING_PRIMITIVE_TYPE = -1023,
- gcvSTATUS_MISSING_OUTPUT_VERTEX_COUNT = -1024,
- gcvSTATUS_NON_INVOCATION_ID_AS_INDEX = -1025,
- gcvSTATUS_INPUT_ARRAY_SIZE_MISMATCH = -1026,
- gcvSTATUS_OUTPUT_ARRAY_SIZE_MISMATCH = -1027,
- gcvSTATUS_LOCATION_ALIASED = -1028,
+ gcvSTATUS_TOO_MANY_SAMPLER = -1023,
/* Compiler errors. */
gcvSTATUS_COMPILER_FE_PREPROCESSOR_ERROR = -2000,
@@ -836,23 +822,6 @@ gceSTATUS;
/*******************************************************************************
**
-** gcmCONTAINEROF
-**
-** Get containing structure of a member.
-**
-** ARGUMENTS:
-**
-** Pointer Pointer of member.
-** Type Structure name.
-** Name Field name.
-*/
-#define gcmCONTAINEROF(Pointer, Type, Member) \
-(\
- (struct Type *)((gctUINTPTR_T)Pointer - gcmOFFSETOF(Type, Member)) \
-)
-
-/*******************************************************************************
-**
** gcmSWAB32
**
** Return a value with all bytes in the 32 bit argument swapped.
@@ -950,6 +919,7 @@ typedef struct _gcsHAL_FRAME_INFO
}
gcsHAL_FRAME_INFO;
+#if gcdLINK_QUEUE_SIZE
typedef struct _gckLINKDATA * gckLINKDATA;
struct _gckLINKDATA
{
@@ -960,29 +930,31 @@ struct _gckLINKDATA
gctUINT32 linkHigh;
};
-typedef struct _gckADDRESSDATA * gckADDRESSDATA;
-struct _gckADDRESSDATA
+typedef struct _gckLINKQUEUE * gckLINKQUEUE;
+struct _gckLINKQUEUE
{
- gctUINT32 start;
- gctUINT32 end;
+ struct _gckLINKDATA data[gcdLINK_QUEUE_SIZE];
+ gctUINT32 rear;
+ gctUINT32 front;
+ gctUINT32 count;
};
+#endif
-typedef union _gcuQUEUEDATA
+#define gcdENTRY_QUEUE_SIZE 256
+typedef struct _gckENTRYDATA * gckENTRYDATA;
+struct _gckENTRYDATA
{
- struct _gckLINKDATA linkData;
-
- struct _gckADDRESSDATA addressData;
-}
-gcuQUEUEDATA;
+ gctUINT32 physical;
+ gctUINT32 bytes;
+};
-typedef struct _gckQUEUE * gckQUEUE;
-struct _gckQUEUE
+typedef struct _gckENTRYQUEUE * gckENTRYQUEUE;
+struct _gckENTRYQUEUE
{
- gcuQUEUEDATA * datas;
+ struct _gckENTRYDATA data[gcdENTRY_QUEUE_SIZE];
gctUINT32 rear;
gctUINT32 front;
gctUINT32 count;
- gctUINT32 size;
};
typedef enum _gceTRACEMODE
@@ -992,27 +964,10 @@ typedef enum _gceTRACEMODE
gcvTRACEMODE_LOGGER = 2,
gcvTRACEMODE_PRE = 3,
gcvTRACEMODE_POST = 4,
-} gceTRACEMODE;
+ gcvTRACEMODE_SYSTRACE = 5,
-typedef struct _gcsLISTHEAD * gcsLISTHEAD_PTR;
-typedef struct _gcsLISTHEAD
-{
- gcsLISTHEAD_PTR prev;
- gcsLISTHEAD_PTR next;
-}
-gcsLISTHEAD;
-
-/*
- gcvFEATURE_DATABASE_DATE_MASK
+} gceTRACEMODE;
- Mask used to control which bits of chip date will be used to
- query feature database, ignore release date for fpga and emulator.
-*/
-#if (gcdFPGA_BUILD || defined(EMULATOR))
-# define gcvFEATURE_DATABASE_DATE_MASK (0U)
-#else
-# define gcvFEATURE_DATABASE_DATE_MASK (~0U)
-#endif
#ifdef __cplusplus
}
diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
index 07ff0714f000..e15b0b577c2d 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
@@ -56,14 +56,14 @@
#ifndef __gc_hal_version_h_
#define __gc_hal_version_h_
-#define gcvVERSION_MAJOR 6
+#define gcvVERSION_MAJOR 5
-#define gcvVERSION_MINOR 1
+#define gcvVERSION_MINOR 0
-#define gcvVERSION_PATCH 1
+#define gcvVERSION_PATCH 11
-#define gcvVERSION_BUILD 72587
+#define gcvVERSION_BUILD 41671
-#define gcvVERSION_STRING "6.1.1.72587"
+#define gcvVERSION_STRING "5.0.11.p8.41671"
#endif /* __gc_hal_version_h_ */
diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h
index fc271f09938b..d3e7aa960eef 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h
@@ -378,12 +378,15 @@ gckVGKERNEL_Destroy(
IN gckVGKERNEL Kernel
);
-/* Unlock video memory from gpu. */
+/* Allocate linear video memory. */
gceSTATUS
-gckVGKERNEL_BottomHalfUnlockVideoMemory(
+gckVGKERNEL_AllocateLinearMemory(
IN gckKERNEL Kernel,
- IN gctUINT32 ProcessID,
- IN gctUINT32 Node
+ IN OUT gcePOOL * Pool,
+ IN gctSIZE_T Bytes,
+ IN gctUINT32 Alignment,
+ IN gceSURF_TYPE Type,
+ OUT gcuVIDMEM_NODE_PTR * Node
);
/* Unmap memory. */
@@ -472,8 +475,6 @@ gckVGHARDWARE_QueryChipIdentity(
IN gckVGHARDWARE Hardware,
OUT gceCHIPMODEL* ChipModel,
OUT gctUINT32* ChipRevision,
- OUT gctUINT32* ProductID,
- OUT gctUINT32* EcoID,
OUT gctUINT32* ChipFeatures,
OUT gctUINT32* ChipMinorFeatures,
OUT gctUINT32* ChipMinorFeatures1
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_array.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_array.h
index a8808c35f9d2..e15d2204c12f 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_array.h
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_array.h
@@ -62,12 +62,6 @@ _DefaultAlloctorInit(
OUT gckALLOCATOR * Allocator
);
-extern gceSTATUS
-_UserMemoryAlloctorInit(
- IN gckOS Os,
- OUT gckALLOCATOR * Allocator
- );
-
#ifdef CONFIG_DMA_SHARED_BUFFER
extern gceSTATUS
_DmabufAlloctorInit(
@@ -76,31 +70,15 @@ _DmabufAlloctorInit(
);
#endif
-#ifndef NO_DMA_COHERENT
-extern gceSTATUS
-_DmaAlloctorInit(
- IN gckOS Os,
- OUT gckALLOCATOR * Allocator
- );
-#endif
-
-/* Default allocator entry. */
gcsALLOCATOR_DESC allocatorArray[] =
{
/* Default allocator. */
gcmkDEFINE_ALLOCATOR_DESC("default", _DefaultAlloctorInit),
- /* User memory importer. */
- gcmkDEFINE_ALLOCATOR_DESC("user", _UserMemoryAlloctorInit),
-
#ifdef CONFIG_DMA_SHARED_BUFFER
/* Dmabuf allocator. */
gcmkDEFINE_ALLOCATOR_DESC("dmabuf", _DmabufAlloctorInit),
#endif
-
-#ifndef NO_DMA_COHERENT
- gcmkDEFINE_ALLOCATOR_DESC("dma", _DmaAlloctorInit),
-#endif
};
#endif
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dma.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dma.c
deleted file mode 100644
index e3de0774f80b..000000000000
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dma.c
+++ /dev/null
@@ -1,490 +0,0 @@
-/****************************************************************************
-*
-* The MIT License (MIT)
-*
-* Copyright (c) 2014 - 2016 Vivante Corporation
-*
-* Permission is hereby granted, free of charge, to any person obtaining a
-* copy of this software and associated documentation files (the "Software"),
-* to deal in the Software without restriction, including without limitation
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,
-* and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-* DEALINGS IN THE SOFTWARE.
-*
-*****************************************************************************
-*
-* The GPL License (GPL)
-*
-* Copyright (C) 2014 - 2016 Vivante Corporation
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software Foundation,
-* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*
-*****************************************************************************
-*
-* Note: This software is released under dual MIT and GPL licenses. A
-* recipient may use this file under the terms of either the MIT license or
-* GPL License. If you wish to use only one license not the other, you can
-* indicate your decision by deleting one of the above license notices in your
-* version of this file.
-*
-*****************************************************************************/
-
-
-#include "gc_hal_kernel_linux.h"
-#include "gc_hal_kernel_allocator.h"
-
-#include <linux/pagemap.h>
-#include <linux/seq_file.h>
-#include <linux/mman.h>
-#include <asm/atomic.h>
-#include <linux/dma-mapping.h>
-#include <linux/slab.h>
-#include <linux/platform_device.h>
-
-#define _GC_OBJ_ZONE gcvZONE_OS
-
-typedef struct _gcsDMA_PRIV * gcsDMA_PRIV_PTR;
-typedef struct _gcsDMA_PRIV {
- gctUINT32 size;
-}
-gcsDMA_PRIV;
-
-struct mdl_dma_priv {
- gctPOINTER kvaddr;
- dma_addr_t dmaHandle;
-};
-
-/*
-* Debugfs support.
-*/
-int gc_dma_usage_show(struct seq_file* m, void* data)
-{
- gcsINFO_NODE *node = m->private;
- gckALLOCATOR Allocator = node->device;
- gcsDMA_PRIV_PTR priv = Allocator->privateData;
-
- seq_printf(m, "dma: %u bytes\n", priv->size);
-
- return 0;
-}
-
-static gcsINFO InfoList[] =
-{
- {"dmausage", gc_dma_usage_show},
-};
-
-static void
-_DebugfsInit(
- IN gckALLOCATOR Allocator,
- IN gckDEBUGFS_DIR Root
- )
-{
- gcmkVERIFY_OK(
- gckDEBUGFS_DIR_Init(&Allocator->debugfsDir, Root->root, "dma"));
-
- gcmkVERIFY_OK(gckDEBUGFS_DIR_CreateFiles(
- &Allocator->debugfsDir,
- InfoList,
- gcmCOUNTOF(InfoList),
- Allocator
- ));
-}
-
-static void
-_DebugfsCleanup(
- IN gckALLOCATOR Allocator
- )
-{
- gcmkVERIFY_OK(gckDEBUGFS_DIR_RemoveFiles(
- &Allocator->debugfsDir,
- InfoList,
- gcmCOUNTOF(InfoList)
- ));
-
- gckDEBUGFS_DIR_Deinit(&Allocator->debugfsDir);
-}
-
-#ifdef CONFIG_ARM64
-static struct device *
-_GetDevice(
- IN gckOS Os
- )
-{
- gcsPLATFORM *platform;
-
- platform = Os->device->platform;
-
- if (!platform)
- {
- return gcvNULL;
- }
-
- return &platform->device->dev;
-}
-#endif
-
-static gceSTATUS
-_DmaAlloc(
- IN gckALLOCATOR Allocator,
- INOUT PLINUX_MDL Mdl,
- IN gctSIZE_T NumPages,
- IN gctUINT32 Flags
- )
-{
- gceSTATUS status;
- gcsDMA_PRIV_PTR allocatorPriv = (gcsDMA_PRIV_PTR)Allocator->privateData;
-
- struct mdl_dma_priv *mdlPriv=gcvNULL;
- gckOS os = Allocator->os;
-
-#if defined CONFIG_ARM64
- struct device *dev = _GetDevice(os);
-#endif
-
- gcmkHEADER_ARG("Mdl=%p NumPages=%d", Mdl, NumPages);
-
-#if defined CONFIG_ARM64
- gcmkVERIFY_ARGUMENT(dev);
-#endif
-
- gcmkONERROR(gckOS_Allocate(os, sizeof(struct mdl_dma_priv), (gctPOINTER *)&mdlPriv));
-
- mdlPriv->kvaddr
-#if defined CONFIG_ARM64
- = dma_alloc_coherent(dev, NumPages * PAGE_SIZE, &mdlPriv->dmaHandle, GFP_KERNEL | gcdNOWARN);
-#elif defined CONFIG_MIPS
- = dma_alloc_coherent(gcvNULL, NumPages * PAGE_SIZE, &mdlPriv->dmaHandle, GFP_KERNEL | gcdNOWARN);
-#else
- = dma_alloc_writecombine(gcvNULL, NumPages * PAGE_SIZE, &mdlPriv->dmaHandle, GFP_KERNEL | gcdNOWARN);
-#endif
-
-#ifdef CONFLICT_BETWEEN_BASE_AND_PHYS
- if ((os->device->baseAddress & 0x80000000) != (mdlPriv->dmaHandle & 0x80000000))
- {
- mdlPriv->dmaHandle = (mdlPriv->dmaHandle & ~0x80000000)
- | (os->device->baseAddress & 0x80000000);
- }
-#endif
-
- if (mdlPriv->kvaddr == gcvNULL)
- {
- gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
- }
-
- Mdl->priv = mdlPriv;
-
- Mdl->dmaHandle = mdlPriv->dmaHandle;
-
- /* Statistic. */
- allocatorPriv->size += NumPages * PAGE_SIZE;
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- if(mdlPriv)
- {
- gckOS_Free(os, mdlPriv);
- }
-
- gcmkFOOTER();
- return status;
-}
-
-static void
-_DmaFree(
- IN gckALLOCATOR Allocator,
- IN OUT PLINUX_MDL Mdl
- )
-{
- gckOS os = Allocator->os;
- struct mdl_dma_priv *mdlPriv=(struct mdl_dma_priv *)Mdl->priv;
- gcsDMA_PRIV_PTR allocatorPriv = (gcsDMA_PRIV_PTR)Allocator->privateData;
-
-#if defined CONFIG_ARM64 || defined CONFIG_MIPS
- dma_free_coherent(gcvNULL, Mdl->numPages * PAGE_SIZE, mdlPriv->kvaddr, mdlPriv->dmaHandle);
-#else
- dma_free_writecombine(gcvNULL, Mdl->numPages * PAGE_SIZE, mdlPriv->kvaddr, mdlPriv->dmaHandle);
-#endif
-
- gckOS_Free(os, mdlPriv);
-
- /* Statistic. */
- allocatorPriv->size -= Mdl->numPages * PAGE_SIZE;
-}
-
-gctINT
-_DmaMapUser(
- gckALLOCATOR Allocator,
- PLINUX_MDL Mdl,
- gctBOOL Cacheable,
- OUT gctPOINTER * UserLogical
- )
-{
-
- PLINUX_MDL mdl = Mdl;
- struct mdl_dma_priv *mdlPriv=(struct mdl_dma_priv *)Mdl->priv;
- struct vm_area_struct * vma;
- gctPOINTER userLogical = gcvNULL;
-
- gcmkHEADER_ARG("Allocator=%p Mdl=%p gctBOOL=%d", Allocator, Mdl, Cacheable);
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0)
- userLogical = (gctSTRING)vm_mmap(gcvNULL,
- 0L,
- mdl->numPages * PAGE_SIZE,
- PROT_READ | PROT_WRITE,
- MAP_SHARED,
- 0);
-#else
- down_write(&current->mm->mmap_sem);
-
- userLogical = (gctSTRING)do_mmap_pgoff(gcvNULL,
- 0L,
- mdl->numPages * PAGE_SIZE,
- PROT_READ | PROT_WRITE,
- MAP_SHARED,
- 0);
-
- up_write(&current->mm->mmap_sem);
-#endif
-
- gcmkTRACE_ZONE(
- gcvLEVEL_INFO, gcvZONE_OS,
- "%s(%d): vmaAddr->0x%X for phys_addr->0x%X",
- __FUNCTION__, __LINE__,
- (gctUINT32)(gctUINTPTR_T)userLogical,
- (gctUINT32)(gctUINTPTR_T)mdl
- );
-
- if (IS_ERR(userLogical))
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_INFO, gcvZONE_OS,
- "%s(%d): do_mmap_pgoff error",
- __FUNCTION__, __LINE__
- );
-
- gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY);
- return gcvSTATUS_OUT_OF_MEMORY;
- }
-
- down_write(&current->mm->mmap_sem);
-
- vma = find_vma(current->mm, (unsigned long)userLogical);
-
- if (vma == gcvNULL)
- {
- up_write(&current->mm->mmap_sem);
-
- gcmkTRACE_ZONE(
- gcvLEVEL_INFO, gcvZONE_OS,
- "%s(%d): find_vma error",
- __FUNCTION__, __LINE__
- );
-
- gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_RESOURCES);
- return gcvSTATUS_OUT_OF_RESOURCES;
- }
-
- /* map kernel memory to user space.. */
-#if defined CONFIG_MIPS
- if (remap_pfn_range(
- vma,
- vma->vm_start,
- mdlPriv->dmaHandle >> PAGE_SHIFT,
- mdl->numPages * PAGE_SIZE,
- gcmkNONPAGED_MEMROY_PROT(vma->vm_page_prot)) < 0)
-#else
- /* map kernel memory to user space.. */
- if (dma_mmap_writecombine(gcvNULL,
- vma,
- mdlPriv->kvaddr,
- mdlPriv->dmaHandle,
- mdl->numPages * PAGE_SIZE) < 0)
-#endif
- {
- up_write(&current->mm->mmap_sem);
-
- gcmkTRACE_ZONE(
- gcvLEVEL_WARNING, gcvZONE_OS,
- "%s(%d): dma_mmap_attrs error",
- __FUNCTION__, __LINE__
- );
-
- gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY);
- return gcvSTATUS_OUT_OF_MEMORY;
- }
-
- up_write(&current->mm->mmap_sem);
-
- *UserLogical = userLogical;
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-}
-
-void
-_DmaUnmapUser(
- IN gckALLOCATOR Allocator,
- IN gctPOINTER Logical,
- IN gctUINT32 Size
- )
-{
- if (unlikely(current->mm == gcvNULL))
- {
- /* Do nothing if process is exiting. */
- return;
- }
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)
- if (vm_munmap((unsigned long)Logical, Size) < 0)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_WARNING, gcvZONE_OS,
- "%s(%d): vm_munmap failed",
- __FUNCTION__, __LINE__
- );
- }
-#else
- down_write(&current->mm->mmap_sem);
- if (do_munmap(current->mm, (unsigned long)Logical, Size) < 0)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_WARNING, gcvZONE_OS,
- "%s(%d): do_munmap failed",
- __FUNCTION__, __LINE__
- );
- }
- up_write(&current->mm->mmap_sem);
-#endif
-}
-
-gceSTATUS
-_DmaMapKernel(
- IN gckALLOCATOR Allocator,
- IN PLINUX_MDL Mdl,
- OUT gctPOINTER *Logical
- )
-{
- struct mdl_dma_priv *mdlPriv=(struct mdl_dma_priv *)Mdl->priv;
- *Logical =mdlPriv->kvaddr;
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-_DmaUnmapKernel(
- IN gckALLOCATOR Allocator,
- IN PLINUX_MDL Mdl,
- IN gctPOINTER Logical
- )
-{
- return gcvSTATUS_OK;
-}
-
-extern gceSTATUS
-_DefaultCache(
- IN gckALLOCATOR Allocator,
- IN PLINUX_MDL Mdl,
- IN gctPOINTER Logical,
- IN gctUINT32 Physical,
- IN gctUINT32 Bytes,
- IN gceCACHEOPERATION Operation
- );
-
-gceSTATUS
-_DmaPhysical(
- IN gckALLOCATOR Allocator,
- IN PLINUX_MDL Mdl,
- IN gctUINT32 Offset,
- OUT gctPHYS_ADDR_T * Physical
- )
-{
- struct mdl_dma_priv *mdlPriv=(struct mdl_dma_priv *)Mdl->priv;
-
- *Physical = mdlPriv->dmaHandle + Offset;
-
- return gcvSTATUS_OK;
-}
-
-extern void
-_DefaultAllocatorDestructor(
- IN void* PrivateData
- );
-
-/* Default allocator operations. */
-gcsALLOCATOR_OPERATIONS DmaAllocatorOperations = {
- .Alloc = _DmaAlloc,
- .Free = _DmaFree,
- .MapUser = _DmaMapUser,
- .UnmapUser = _DmaUnmapUser,
- .MapKernel = _DmaMapKernel,
- .UnmapKernel = _DmaUnmapKernel,
- .Cache = _DefaultCache,
- .Physical = _DmaPhysical,
-};
-
-/* Default allocator entry. */
-gceSTATUS
-_DmaAlloctorInit(
- IN gckOS Os,
- OUT gckALLOCATOR * Allocator
- )
-{
- gceSTATUS status;
- gckALLOCATOR allocator = gcvNULL;
- gcsDMA_PRIV_PTR priv = gcvNULL;
-
- gcmkONERROR(gckALLOCATOR_Construct(Os, &DmaAllocatorOperations, &allocator));
-
- priv = kzalloc(gcmSIZEOF(gcsDMA_PRIV), GFP_KERNEL | gcdNOWARN);
-
- if (!priv)
- {
- gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
- }
-
- /* Register private data. */
- allocator->privateData = priv;
- allocator->privateDataDestructor = _DefaultAllocatorDestructor;
-
- /* Register debugfs callbacks. */
- allocator->debugfsInit = _DebugfsInit;
- allocator->debugfsCleanup = _DebugfsCleanup;
-
- /* dma allocator is only used when NO_DMA_COHERENT is not defined. */
- allocator->capability = gcvALLOC_FLAG_NONE;
-
- *Allocator = allocator;
-
- return gcvSTATUS_OK;
-
-OnError:
- if(allocator != gcvNULL)
- gckOS_Free(Os, (gctPOINTER)allocator);
- return status;
-}
-
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dmabuf.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dmabuf.c
index ebc2fe362eac..43203f7bc6e4 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dmabuf.c
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dmabuf.c
@@ -160,9 +160,6 @@ _DmabufAttach(
Mdl->priv = gcdmabuf;
- /* Always treat it as a non-contigous buffer. */
- Mdl->contiguous = gcvFALSE;
-
gcmkFOOTER_NO();
return gcvSTATUS_OK;
@@ -196,37 +193,40 @@ static gctINT
_DmabufMapUser(
IN gckALLOCATOR Allocator,
IN PLINUX_MDL Mdl,
- IN gctBOOL Cacheable,
- OUT gctPOINTER * UserLogical
+ IN PLINUX_MDL_MAP MdlMap,
+ IN gctBOOL Cacheable
)
{
gcsDMABUF *gcdmabuf = Mdl->priv;
gceSTATUS status;
PLINUX_MDL mdl = Mdl;
+ PLINUX_MDL_MAP mdlMap = MdlMap;
struct file * file = gcdmabuf->dmabuf->file;
- *UserLogical = (gctSTRING)vm_mmap(file,
+ mdlMap->vmaAddr = (gctSTRING)vm_mmap(file,
0L,
mdl->numPages * PAGE_SIZE,
PROT_READ | PROT_WRITE,
MAP_SHARED,
0);
- if (IS_ERR(*UserLogical))
+ if (IS_ERR(mdlMap->vmaAddr))
{
gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
}
- /* To make sure the mapping is created. */
- if (access_ok(VERIFY_READ, *UserLogical, 4))
- {
- uint32_t mem;
- get_user(mem, (uint32_t *) *UserLogical);
+ down_write(&current->mm->mmap_sem);
+
+ mdlMap->vma = find_vma(current->mm, (unsigned long)mdlMap->vmaAddr);
- (void) mem;
+ up_write(&current->mm->mmap_sem);
+
+ if (mdlMap->vma == gcvNULL)
+ {
+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
}
- return gcvSTATUS_OK;
+ return 0;
OnError:
return status;
@@ -272,6 +272,19 @@ _DmabufUnmapKernel(
}
static gceSTATUS
+_DmabufLogicalToPhysical(
+ IN gckALLOCATOR Allocator,
+ IN PLINUX_MDL Mdl,
+ IN gctPOINTER Logical,
+ IN gctUINT32 ProcessID,
+ OUT gctPHYS_ADDR_T * Physical
+ )
+{
+ return gcvSTATUS_NOT_SUPPORTED;
+}
+
+
+static gceSTATUS
_DmabufCache(
IN gckALLOCATOR Allocator,
IN PLINUX_MDL Mdl,
@@ -294,10 +307,8 @@ _DmabufPhysical(
)
{
gcsDMABUF *gcdmabuf = Mdl->priv;
- gctUINT32 offsetInPage = Offset & ~PAGE_MASK;
- gctUINT32 index = Offset / PAGE_SIZE;
- *Physical = gcdmabuf->pagearray[index] + offsetInPage;
+ *Physical = gcdmabuf->pagearray[Offset];
return gcvSTATUS_OK;
@@ -312,6 +323,7 @@ static gcsALLOCATOR_OPERATIONS DmabufAllocatorOperations =
.UnmapUser = _DmabufUnmapUser,
.MapKernel = _DmabufMapKernel,
.UnmapKernel = _DmabufUnmapKernel,
+ .LogicalToPhysical = _DmabufLogicalToPhysical,
.Cache = _DmabufCache,
.Physical = _DmabufPhysical,
};
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_user_memory.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_user_memory.c
deleted file mode 100644
index 27d859703c82..000000000000
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_user_memory.c
+++ /dev/null
@@ -1,639 +0,0 @@
-/****************************************************************************
-*
-* The MIT License (MIT)
-*
-* Copyright (c) 2014 - 2016 Vivante Corporation
-*
-* Permission is hereby granted, free of charge, to any person obtaining a
-* copy of this software and associated documentation files (the "Software"),
-* to deal in the Software without restriction, including without limitation
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,
-* and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-* DEALINGS IN THE SOFTWARE.
-*
-*****************************************************************************
-*
-* The GPL License (GPL)
-*
-* Copyright (C) 2014 - 2016 Vivante Corporation
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software Foundation,
-* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*
-*****************************************************************************
-*
-* Note: This software is released under dual MIT and GPL licenses. A
-* recipient may use this file under the terms of either the MIT license or
-* GPL License. If you wish to use only one license not the other, you can
-* indicate your decision by deleting one of the above license notices in your
-* version of this file.
-*
-*****************************************************************************/
-
-
-#include "gc_hal_kernel_linux.h"
-#include "gc_hal_kernel_allocator.h"
-
-#include <linux/slab.h>
-#include <linux/pagemap.h>
-
-#define _GC_OBJ_ZONE gcvZONE_ALLOCATOR
-
-/* Descriptor of a user memory imported. */
-typedef struct _gcsUserMemory
-{
- gctPHYS_ADDR_T physical;
- struct page ** pages;
- gctUINT32 extraPage;
- gctPOINTER logical;
- gctSIZE_T pageCount;
- gctUINT32 offset;
- gctBOOL contiguous;
- gctBOOL userPages;
- gctBOOL *ref;
-}
-gcsUserMemory;
-
-static gceSTATUS
-_Import(
- IN gckOS Os,
- IN gctPOINTER Memory,
- IN gctUINT32 Physical,
- IN gctSIZE_T Size,
- IN gcsUserMemory * UserMemory
- )
-{
- gceSTATUS status = gcvSTATUS_OK;
-
- gctUINTPTR_T start, end, memory;
- gctINT result = 0;
-
- struct page **pages = gcvNULL;
- gctSIZE_T extraPage;
- gctSIZE_T pageCount, i;
- gctBOOL *ref = gcvNULL;
-
- gcmkHEADER_ARG("Os=0x%x Memory=0x%x Physical=0x%x Size=%lu", Os, Memory, Physical, Size);
-
- /* Verify the arguments. */
- gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
- gcmkVERIFY_ARGUMENT(Memory != gcvNULL || Physical != ~0U);
- gcmkVERIFY_ARGUMENT(Size > 0);
-
- memory = (gctUINTPTR_T) Memory;
-
- /* Get the number of required pages. */
- end = (memory + Size + PAGE_SIZE - 1) >> PAGE_SHIFT;
- start = memory >> PAGE_SHIFT;
- pageCount = end - start;
-
- /* Allocate extra page to avoid cache overflow */
-#if gcdENABLE_2D
- extraPage = 2;
-#else
- extraPage = (((memory + gcmALIGN(Size + 64, 64) + PAGE_SIZE - 1) >> PAGE_SHIFT) > end) ? 1 : 0;
-#endif
-
- gcmkTRACE_ZONE(
- gcvLEVEL_INFO, _GC_OBJ_ZONE,
- "%s(%d): pageCount: %d. extraPage: %d",
- __FUNCTION__, __LINE__,
- pageCount, extraPage
- );
-
- /* Overflow. */
- if ((memory + Size) < memory)
- {
- gcmkFOOTER_ARG("status=%d", gcvSTATUS_INVALID_ARGUMENT);
- return gcvSTATUS_INVALID_ARGUMENT;
- }
-
- /* Allocate the array of page addresses. */
- pages = (struct page **)kmalloc((pageCount + extraPage) * sizeof(struct page *), GFP_KERNEL | gcdNOWARN);
-
- if (pages == gcvNULL)
- {
- status = gcvSTATUS_OUT_OF_MEMORY;
- goto OnError;
- }
-
- ref = (gctBOOL *)kzalloc((pageCount + extraPage) * sizeof(gctBOOL), GFP_KERNEL | gcdNOWARN);
-
- if (ref == gcvNULL)
- {
- status = gcvSTATUS_OUT_OF_MEMORY;
- goto OnError;
- }
-
- if (Physical != ~0U)
- {
- unsigned long pfn = Physical >> PAGE_SHIFT;
-
- UserMemory->contiguous = gcvTRUE;
-
- if (pfn_valid(pfn))
- {
- for (i = 0; i < pageCount; i++)
- {
- pages[i] = pfn_to_page((Physical >> PAGE_SHIFT) + i);
- }
- }
- else
- {
- /* Free pages array since there is no struct page for this memory. */
- kfree(pages);
- pages = gcvNULL;
- }
- }
- else
- {
- UserMemory->contiguous = gcvFALSE;
- UserMemory->userPages = gcvTRUE;
-
- /* Get the user pages. */
- down_read(&current->mm->mmap_sem);
-
- result = get_user_pages(current,
- current->mm,
- memory & PAGE_MASK,
- pageCount,
- 1,
- 0,
- pages,
- gcvNULL
- );
-
- up_read(&current->mm->mmap_sem);
-
- if (result <=0 || result < pageCount)
- {
- struct vm_area_struct *vma;
-
- /* Release the pages if any. */
- if (result > 0)
- {
- for (i = 0; i < result; i++)
- {
- if (pages[i] == gcvNULL)
- {
- break;
- }
-
- page_cache_release(pages[i]);
- pages[i] = gcvNULL;
- }
-
- result = 0;
- }
-
- vma = find_vma(current->mm, memory);
-
- if (vma && (vma->vm_flags & VM_PFNMAP))
- {
- pte_t * pte;
- spinlock_t * ptl;
- gctUINTPTR_T logical = memory;
-
- for (i = 0; i < pageCount; i++)
- {
- pgd_t * pgd = pgd_offset(current->mm, logical);
- pud_t * pud = pud_offset(pgd, logical);
-
- if (pud)
- {
- pmd_t * pmd = pmd_offset(pud, logical);
- pte = pte_offset_map_lock(current->mm, pmd, logical, &ptl);
- if (!pte)
- {
- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
- }
- }
- else
- {
- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
- }
-
- pages[i] = pte_page(*pte);
- pte_unmap_unlock(pte, ptl);
-
- /* Advance to next. */
- logical += PAGE_SIZE;
- }
- }
- else
- {
- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
- }
-
- /* Check whether pages are contigous. */
- for (i = 1; i < pageCount; i++)
- {
- if (pages[i] != nth_page(pages[0], i))
- {
- /* Non-contiguous. */
- break;
- }
- }
-
- if (i == pageCount)
- {
- UserMemory->contiguous = gcvTRUE;
- }
-
- /* Reference pages. */
- for (i = 0; i < pageCount; i++)
- {
- if (pfn_valid(page_to_pfn(pages[i])))
- {
- ref[i] = get_page_unless_zero(pages[i]);
- }
- }
- }
- else
- {
- /* Mark feference when pages from get_user_pages. */
- for (i = 0; i < pageCount; i++)
- {
- ref[i] = gcvTRUE;
- }
- }
- }
-
- if (UserMemory->userPages)
- {
- for (i = 0; i < pageCount; i++)
- {
- gctUINT32 phys;
-
- #ifdef CONFIG_ARM
- gctUINT32 data;
-
- if (memory)
- {
- get_user(data, (gctUINT32*)((memory & PAGE_MASK) + i * PAGE_SIZE));
- }
- #endif
-
- if (pages)
- {
- phys = page_to_phys(pages[i]);
- }
- else
- {
- phys = Physical + i * PAGE_SIZE;
- }
-
- if (memory)
- {
- /* Flush(clean) the data cache. */
- gcmkONERROR(gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
- phys,
- (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE,
- PAGE_SIZE));
- }
- }
- }
-
- if (extraPage)
- {
- if (pages)
- {
- for (i = 0; i < extraPage; i++)
- {
- pages[pageCount++] = Os->paddingPage;
- }
- }
-
- /* Adjust pageCount to include padding page. */
- UserMemory->extraPage = extraPage;
- }
-
- UserMemory->physical = Physical;
- UserMemory->pages = pages;
- UserMemory->pageCount = pageCount;
- UserMemory->logical = Memory;
- UserMemory->ref = ref;
-
- UserMemory->offset = (Physical != ~0U)
- ? (Physical & ~PAGE_MASK)
- : (memory & ~PAGE_MASK);
-
- /* Success. */
- gcmkFOOTER();
- return gcvSTATUS_OK;
-
-OnError:
-
- /* Release page array. */
- if (result > 0 && pages != gcvNULL)
- {
- gcmkTRACE(
- gcvLEVEL_ERROR,
- "%s(%d): error: page table is freed.",
- __FUNCTION__, __LINE__
- );
-
- for (i = 0; i < result; i++)
- {
- if (pages[i] == gcvNULL)
- {
- break;
- }
-
- page_cache_release(pages[i]);
- }
- }
-
- if (pages != gcvNULL)
- {
- gcmkTRACE(
- gcvLEVEL_ERROR,
- "%s(%d): error: pages is freed.",
- __FUNCTION__, __LINE__
- );
-
- /* Free the page table. */
- kfree(pages);
- }
-
- if (ref != gcvNULL)
- {
- /* Free the ref table. */
- kfree(ref);
- }
-
- gcmkFOOTER();
- return status;
-}
-
-static gceSTATUS
-_Free(
- IN gckOS Os,
- IN gcsUserMemory * UserMemory
- )
-{
- gctSIZE_T pageCount, i;
- struct page **pages;
- gctBOOL *ref;
-
- gcmkHEADER_ARG("Os=0x%X", Os);
-
- /* Verify the arguments. */
- gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-
- pages = UserMemory->pages;
-
- /* Invalid page array. */
- if (pages == gcvNULL)
- {
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
- }
-
- pageCount = UserMemory->pageCount;
-
- if (UserMemory->extraPage)
- {
- pageCount -= UserMemory->extraPage;
- }
-
- ref = UserMemory->ref;
-
- if (UserMemory->userPages)
- {
- /* Release the page cache. */
- if (pages)
- {
- for (i = 0; i < pageCount; i++)
- {
- if (!PageReserved(pages[i]))
- {
- SetPageDirty(pages[i]);
- }
-
- if (pfn_valid(page_to_pfn(pages[i])) && ref[i])
- {
- page_cache_release(pages[i]);
- }
- }
- }
- }
-
- kfree(ref);
- kfree(pages);
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-}
-
-static gceSTATUS
-_UserMemoryAttach(
- IN gckALLOCATOR Allocator,
- IN gcsATTACH_DESC_PTR Desc,
- IN PLINUX_MDL Mdl
- )
-{
- gceSTATUS status;
- gcsUserMemory * userMemory = gcvNULL;
-
- gckOS os = Allocator->os;
-
- gcmkHEADER();
-
- /* Handle is meangless for this importer. */
- gcmkVERIFY_ARGUMENT(Desc != gcvNULL);
-
- gcmkONERROR(gckOS_Allocate(os, gcmSIZEOF(gcsUserMemory), (gctPOINTER *)&userMemory));
-
- gckOS_ZeroMemory(userMemory, gcmSIZEOF(gcsUserMemory));
-
- gcmkONERROR(_Import(os, Desc->memory, Desc->physical, Desc->size, userMemory));
-
- Mdl->priv = userMemory;
- Mdl->numPages = userMemory->pageCount;
- Mdl->contiguous = userMemory->contiguous;
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- if(userMemory != gcvNULL)
- gckOS_Free(os,(gctPOINTER)userMemory);
- gcmkFOOTER();
- return status;
-}
-
-static void
-_UserMemoryFree(
- IN gckALLOCATOR Allocator,
- IN PLINUX_MDL Mdl
- )
-{
- gckOS os = Allocator->os;
- gcsUserMemory *userMemory = Mdl->priv;
-
- gcmkHEADER();
-
- if (userMemory)
- {
- gcmkVERIFY_OK(_Free(os, userMemory));
-
- gcmkOS_SAFE_FREE(os, userMemory);
- }
-
- gcmkFOOTER_NO();
-}
-
-static gctINT
-_UserMemoryMapUser(
- IN gckALLOCATOR Allocator,
- IN PLINUX_MDL Mdl,
- IN gctBOOL Cacheable,
- OUT gctPOINTER * UserLogical
- )
-{
- gcsUserMemory *userMemory = Mdl->priv;
-
- *UserLogical = userMemory->logical;
-
- return 0;
-}
-
-static void
-_UserMemoryUnmapUser(
- IN gckALLOCATOR Allocator,
- IN gctPOINTER Logical,
- IN gctUINT32 Size
- )
-{
- return;
-}
-
-static gceSTATUS
-_UserMemoryMapKernel(
- IN gckALLOCATOR Allocator,
- IN PLINUX_MDL Mdl,
- OUT gctPOINTER *Logical
- )
-{
- /* Kernel doesn't acess video memory. */
- return gcvSTATUS_NOT_SUPPORTED;
-
-}
-
-static gceSTATUS
-_UserMemoryUnmapKernel(
- IN gckALLOCATOR Allocator,
- IN PLINUX_MDL Mdl,
- IN gctPOINTER Logical
- )
-{
- /* Kernel doesn't acess video memory. */
- return gcvSTATUS_NOT_SUPPORTED;
-}
-
-static gceSTATUS
-_UserMemoryCache(
- IN gckALLOCATOR Allocator,
- IN PLINUX_MDL Mdl,
- IN gctPOINTER Logical,
- IN gctUINT32 Physical,
- IN gctUINT32 Bytes,
- IN gceCACHEOPERATION Operation
- )
-{
- return gcvSTATUS_OK;
-}
-
-static gceSTATUS
-_UserMemoryPhysical(
- IN gckALLOCATOR Allocator,
- IN PLINUX_MDL Mdl,
- IN gctUINT32 Offset,
- OUT gctPHYS_ADDR_T * Physical
- )
-{
- gckOS os = Allocator->os;
- gcsUserMemory *userMemory = Mdl->priv;
- gctUINT32 offsetInPage = Offset & ~PAGE_MASK;
- gctUINT32 index = Offset / PAGE_SIZE;
-
- if (userMemory->pages)
- {
- if (index == userMemory->pageCount - 1 && userMemory->extraPage)
- {
- *Physical = page_to_phys(os->paddingPage);
- }
- else
- {
- *Physical = page_to_phys(userMemory->pages[index]);
- }
- }
- else
- {
- *Physical = userMemory->physical + index * PAGE_SIZE;
- }
-
- *Physical += offsetInPage;
-
- return gcvSTATUS_OK;
-}
-
-/* User memory allocator (importer) operations. */
-static gcsALLOCATOR_OPERATIONS UserMemoryAllocatorOperations =
-{
- .Attach = _UserMemoryAttach,
- .Free = _UserMemoryFree,
- .MapUser = _UserMemoryMapUser,
- .UnmapUser = _UserMemoryUnmapUser,
- .MapKernel = _UserMemoryMapKernel,
- .UnmapKernel = _UserMemoryUnmapKernel,
- .Cache = _UserMemoryCache,
- .Physical = _UserMemoryPhysical,
-};
-
-/* Default allocator entry. */
-gceSTATUS
-_UserMemoryAlloctorInit(
- IN gckOS Os,
- OUT gckALLOCATOR * Allocator
- )
-{
- gceSTATUS status;
- gckALLOCATOR allocator;
-
- gcmkONERROR(
- gckALLOCATOR_Construct(Os, &UserMemoryAllocatorOperations, &allocator));
-
- allocator->capability = gcvALLOC_FLAG_USERMEMORY;
-
- *Allocator = allocator;
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_array.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_array.h
index 14467e28db7e..086a49343986 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_array.h
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_array.h
@@ -62,12 +62,6 @@ _DefaultAlloctorInit(
OUT gckALLOCATOR * Allocator
);
-extern gceSTATUS
-_UserMemoryAlloctorInit(
- IN gckOS Os,
- OUT gckALLOCATOR * Allocator
- );
-
#if LINUX_CMA_FSL
extern gceSTATUS
_CMAFSLAlloctorInit(
@@ -84,14 +78,6 @@ _DmabufAlloctorInit(
);
#endif
-#ifndef NO_DMA_COHERENT
-extern gceSTATUS
-_DmaAlloctorInit(
- IN gckOS Os,
- OUT gckALLOCATOR * Allocator
- );
-#endif
-
gcsALLOCATOR_DESC allocatorArray[] =
{
#if LINUX_CMA_FSL
@@ -100,17 +86,10 @@ gcsALLOCATOR_DESC allocatorArray[] =
/* Default allocator. */
gcmkDEFINE_ALLOCATOR_DESC("default", _DefaultAlloctorInit),
- /* User memory importer. */
- gcmkDEFINE_ALLOCATOR_DESC("user", _UserMemoryAlloctorInit),
-
#ifdef CONFIG_DMA_SHARED_BUFFER
/* Dmabuf allocator. */
gcmkDEFINE_ALLOCATOR_DESC("dmabuf", _DmabufAlloctorInit),
#endif
-
-#ifndef NO_DMA_COHERENT
- gcmkDEFINE_ALLOCATOR_DESC("dma", _DmaAlloctorInit),
-#endif
};
#endif
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_cma.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_cma.c
index b786695307ee..a0d784090346 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_cma.c
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_cma.c
@@ -63,7 +63,6 @@
#include <linux/dma-mapping.h>
#include <linux/slab.h>
#include <linux/dma-mapping.h>
-#include <linux/platform_device.h>
#define _GC_OBJ_ZONE gcvZONE_OS
@@ -144,7 +143,7 @@ _CMAFSLAlloc(
gcmkONERROR(gckOS_Allocate(os, sizeof(struct mdl_cma_priv), (gctPOINTER *)&mdl_priv));
mdl_priv->kvaddr = gcvNULL;
- mdl_priv->kvaddr = dma_alloc_writecombine(&os->device->platform->device->dev,
+ mdl_priv->kvaddr = dma_alloc_writecombine(gcvNULL,
NumPages * PAGE_SIZE,
&mdl_priv->physical,
GFP_KERNEL | gcdNOWARN);
@@ -176,7 +175,7 @@ _CMAFSLFree(
gckOS os = Allocator->os;
struct mdl_cma_priv *mdl_priv=(struct mdl_cma_priv *)Mdl->priv;
gcsCMA_PRIV_PTR priv = (gcsCMA_PRIV_PTR)Allocator->privateData;
- dma_free_writecombine(&os->device->platform->device->dev,
+ dma_free_writecombine(gcvNULL,
Mdl->numPages * PAGE_SIZE,
mdl_priv->kvaddr,
mdl_priv->physical);
@@ -184,25 +183,23 @@ _CMAFSLFree(
priv->cmasize -= Mdl->numPages * PAGE_SIZE;
}
-static gctINT
+gctINT
_CMAFSLMapUser(
- IN gckALLOCATOR Allocator,
- IN PLINUX_MDL Mdl,
- IN gctBOOL Cacheable,
- OUT gctPOINTER * UserLogical
+ gckALLOCATOR Allocator,
+ PLINUX_MDL Mdl,
+ PLINUX_MDL_MAP MdlMap,
+ gctBOOL Cacheable
)
{
PLINUX_MDL mdl = Mdl;
+ PLINUX_MDL_MAP mdlMap = MdlMap;
struct mdl_cma_priv *mdl_priv=(struct mdl_cma_priv *)Mdl->priv;
- gckOS os = Allocator->os;
- struct vm_area_struct * vma;
- gctPOINTER userLogical = gcvNULL;
- gcmkHEADER_ARG("Allocator=%p Mdl=%p gctBOOL=%d", Allocator, Mdl, Cacheable);
+ gcmkHEADER_ARG("Allocator=%p Mdl=%p MdlMap=%p gctBOOL=%d", Allocator, Mdl, MdlMap, Cacheable);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0)
- userLogical = (gctSTRING)vm_mmap(gcvNULL,
+ mdlMap->vmaAddr = (gctSTRING)vm_mmap(gcvNULL,
0L,
mdl->numPages * PAGE_SIZE,
PROT_READ | PROT_WRITE,
@@ -211,7 +208,7 @@ _CMAFSLMapUser(
#else
down_write(&current->mm->mmap_sem);
- userLogical = (gctSTRING)do_mmap_pgoff(gcvNULL,
+ mdlMap->vmaAddr = (gctSTRING)do_mmap_pgoff(gcvNULL,
0L,
mdl->numPages * PAGE_SIZE,
PROT_READ | PROT_WRITE,
@@ -225,11 +222,11 @@ _CMAFSLMapUser(
gcvLEVEL_INFO, gcvZONE_OS,
"%s(%d): vmaAddr->0x%X for phys_addr->0x%X",
__FUNCTION__, __LINE__,
- (gctUINT32)(gctUINTPTR_T)userLogical,
+ (gctUINT32)(gctUINTPTR_T)mdlMap->vmaAddr,
(gctUINT32)(gctUINTPTR_T)mdl
);
- if (IS_ERR(userLogical))
+ if (IS_ERR(mdlMap->vmaAddr))
{
gcmkTRACE_ZONE(
gcvLEVEL_INFO, gcvZONE_OS,
@@ -237,15 +234,17 @@ _CMAFSLMapUser(
__FUNCTION__, __LINE__
);
+ mdlMap->vmaAddr = gcvNULL;
+
gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY);
return gcvSTATUS_OUT_OF_MEMORY;
}
down_write(&current->mm->mmap_sem);
- vma = find_vma(current->mm, (unsigned long)userLogical);
+ mdlMap->vma = find_vma(current->mm, (unsigned long)mdlMap->vmaAddr);
- if (vma == gcvNULL)
+ if (mdlMap->vma == gcvNULL)
{
up_write(&current->mm->mmap_sem);
@@ -255,6 +254,8 @@ _CMAFSLMapUser(
__FUNCTION__, __LINE__
);
+ mdlMap->vmaAddr = gcvNULL;
+
gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_RESOURCES);
return gcvSTATUS_OUT_OF_RESOURCES;
}
@@ -263,8 +264,8 @@ _CMAFSLMapUser(
if (mdl->contiguous)
{
/* map kernel memory to user space.. */
- if (dma_mmap_writecombine(&os->device->platform->device->dev,
- vma,
+ if (dma_mmap_writecombine(gcvNULL,
+ mdlMap->vma,
mdl_priv->kvaddr,
mdl_priv->physical,
mdl->numPages * PAGE_SIZE) < 0)
@@ -277,6 +278,8 @@ _CMAFSLMapUser(
__FUNCTION__, __LINE__
);
+ mdlMap->vmaAddr = gcvNULL;
+
gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY);
return gcvSTATUS_OUT_OF_MEMORY;
}
@@ -288,17 +291,6 @@ _CMAFSLMapUser(
up_write(&current->mm->mmap_sem);
- gcmkVERIFY_OK(gckOS_CacheFlush(
- os,
- _GetProcessID(),
- mdl,
- gcvINVALID_ADDRESS,
- (gctPOINTER)userLogical,
- mdl->numPages * PAGE_SIZE
- ));
-
- *UserLogical = userLogical;
-
gcmkFOOTER_NO();
return gcvSTATUS_OK;
}
@@ -362,6 +354,15 @@ _CMAUnmapKernel(
}
extern gceSTATUS
+_DefaultLogicalToPhysical(
+ IN gckALLOCATOR Allocator,
+ IN PLINUX_MDL Mdl,
+ IN gctPOINTER Logical,
+ IN gctUINT32 ProcessID,
+ OUT gctPHYS_ADDR_T * Physical
+ );
+
+extern gceSTATUS
_DefaultCache(
IN gckALLOCATOR Allocator,
IN PLINUX_MDL Mdl,
@@ -381,11 +382,12 @@ _CMAPhysical(
{
struct mdl_cma_priv *mdl_priv=(struct mdl_cma_priv *)Mdl->priv;
- *Physical = mdl_priv->physical + Offset;
+ *Physical = mdl_priv->physical + Offset * PAGE_SIZE;
return gcvSTATUS_OK;
}
+
extern void
_DefaultAllocatorDestructor(
IN void* PrivateData
@@ -399,6 +401,7 @@ gcsALLOCATOR_OPERATIONS CMAFSLAllocatorOperations = {
.UnmapUser = _CMAUnmapUser,
.MapKernel = _CMAMapKernel,
.UnmapKernel = _CMAUnmapKernel,
+ .LogicalToPhysical = _DefaultLogicalToPhysical,
.Cache = _DefaultCache,
.Physical = _CMAPhysical,
};
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.c
index b44549ac6414..93d6fa82958e 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.c
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.c
@@ -61,18 +61,12 @@
#include <asm/atomic.h>
#include <linux/dma-mapping.h>
#include <linux/slab.h>
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32)
-#include <linux/anon_inodes.h>
-#endif
-#include <linux/file.h>
#include "gc_hal_kernel_allocator_array.h"
#include "gc_hal_kernel_platform.h"
#define _GC_OBJ_ZONE gcvZONE_OS
-#define gcdDISCRETE_PAGES 0
-
typedef struct _gcsDEFAULT_PRIV * gcsDEFAULT_PRIV_PTR;
typedef struct _gcsDEFAULT_PRIV {
gctUINT32 low;
@@ -80,31 +74,6 @@ typedef struct _gcsDEFAULT_PRIV {
}
gcsDEFAULT_PRIV;
-typedef struct _gcsDEFAULT_MDL_PRIV *gcsDEFAULT_MDL_PRIV_PTR;
-typedef struct _gcsDEFAULT_MDL_PRIV {
- union _pages
- {
- /* Pointer to a array of pages. */
- struct page * contiguousPages;
- /* Pointer to a array of pointers to page. */
- struct page ** nonContiguousPages;
- }
- u;
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
- gctBOOL exact;
-#endif
-
- struct file * file;
-
- gctBOOL cacheable;
-
- gcsPLATFORM * platform;
-
- gctBOOL contiguous;
-}
-gcsDEFAULT_MDL_PRIV;
-
/******************************************************************************\
************************** Default Allocator Debugfs ***************************
\******************************************************************************/
@@ -157,35 +126,6 @@ _DefaultAllocatorDebugfsCleanup(
gckDEBUGFS_DIR_Deinit(&Allocator->debugfsDir);
}
-static inline struct page *
-_NonContiguousToPage(
- IN struct page ** Pages,
- IN gctUINT32 Index
- )
-{
- gcmkASSERT(Pages != gcvNULL);
- return Pages[Index];
-}
-
-static inline unsigned long
-_NonContiguousToPfn(
- IN struct page ** Pages,
- IN gctUINT32 Index
- )
-{
- gcmkASSERT(Pages != gcvNULL);
- return page_to_pfn(_NonContiguousToPage(Pages, Index));
-}
-
-static inline unsigned long
-_NonContiguousToPhys(
- IN struct page ** Pages,
- IN gctUINT32 Index
- )
-{
- gcmkASSERT(Pages != gcvNULL);
- return page_to_phys(_NonContiguousToPage(Pages, Index));
-}
static void
_NonContiguousFree(
@@ -223,9 +163,6 @@ _NonContiguousAlloc(
{
struct page ** pages;
struct page *p;
-#if gcdDISCRETE_PAGES
- struct page *l;
-#endif
gctINT i, size;
gcmkHEADER_ARG("NumPages=%lu", NumPages);
@@ -266,30 +203,6 @@ _NonContiguousAlloc(
return gcvNULL;
}
-#if gcdDISCRETE_PAGES
- if (i != 0)
- {
- if (page_to_pfn(pages[i-1]) == page_to_pfn(p)-1)
- {
- /* Replaced page. */
- l = p;
-
- /* Allocate a page which is not contiguous to previous one. */
- p = alloc_page(GFP_KERNEL | __GFP_HIGHMEM | __GFP_NOWARN);
-
- /* Give replaced page back. */
- __free_page(l);
-
- if (!p)
- {
- _NonContiguousFree(pages, i);
- gcmkFOOTER_NO();
- return gcvNULL;
- }
- }
- }
-#endif
-
pages[i] = p;
}
@@ -297,23 +210,22 @@ _NonContiguousAlloc(
return pages;
}
-static gctSTRING
+gctSTRING
_CreateKernelVirtualMapping(
IN PLINUX_MDL Mdl
)
{
gctSTRING addr = 0;
gctINT numPages = Mdl->numPages;
- gcsDEFAULT_MDL_PRIV_PTR mdlPriv = Mdl->priv;
#if gcdNONPAGED_MEMORY_CACHEABLE
if (Mdl->contiguous)
{
- addr = page_address(mdlPriv->u.contiguousPages);
+ addr = page_address(Mdl->u.contiguousPages);
}
else
{
- addr = vmap(mdlPriv->u.nonContiguousPages,
+ addr = vmap(Mdl->u.nonContiguousPages,
numPages,
0,
PAGE_KERNEL);
@@ -337,14 +249,14 @@ _CreateKernelVirtualMapping(
for (i = 0; i < numPages; i++)
{
- pages[i] = nth_page(mdlPriv->u.contiguousPages, i);
+ pages[i] = nth_page(Mdl->u.contiguousPages, i);
}
free = gcvTRUE;
}
else
{
- pages = mdlPriv->u.nonContiguousPages;
+ pages = Mdl->u.nonContiguousPages;
}
/* ioremap() can't work on system memory since 2.6.38. */
@@ -360,7 +272,7 @@ _CreateKernelVirtualMapping(
return addr;
}
-static void
+void
_DestoryKernelVirtualMapping(
IN gctSTRING Addr
)
@@ -405,98 +317,6 @@ _UnmapUserLogical(
#endif
}
-static gceSTATUS
-default_mmap_internal(
- IN gcsDEFAULT_MDL_PRIV_PTR MdlPriv,
- IN struct vm_area_struct *vma
- )
-{
- gcsPLATFORM * platform = MdlPriv->platform;
- gctUINT32 numPages;
- unsigned long start;
- unsigned long pfn;
- gctINT i;
-
- gcmkHEADER();
-
- vma->vm_flags |= gcdVM_FLAGS;
-
- if (MdlPriv->cacheable == gcvFALSE)
- {
- /* Make this mapping non-cached. */
- vma->vm_page_prot = gcmkPAGED_MEMROY_PROT(vma->vm_page_prot);
- }
-
- if (platform && platform->ops->adjustProt)
- {
- platform->ops->adjustProt(vma);
- }
-
- /* Now map all the vmalloc pages to this user address. */
- if (MdlPriv->contiguous)
- {
- /* map kernel memory to user space.. */
- if (remap_pfn_range(vma,
- vma->vm_start,
- page_to_pfn(MdlPriv->u.contiguousPages),
- vma->vm_end - vma->vm_start,
- vma->vm_page_prot) < 0)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_INFO, gcvZONE_OS,
- "%s(%d): unable to mmap ret",
- __FUNCTION__, __LINE__
- );
-
- gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY);
- return gcvSTATUS_OUT_OF_MEMORY;
- }
- }
- else
- {
- numPages = (vma->vm_end - vma->vm_start) / PAGE_SIZE;
- start = vma->vm_start;
-
- for (i = 0; i < numPages; i++)
- {
- pfn = _NonContiguousToPfn(MdlPriv->u.nonContiguousPages, i);
-
- if (remap_pfn_range(vma,
- start,
- pfn,
- PAGE_SIZE,
- vma->vm_page_prot) < 0)
- {
- gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY);
- return gcvSTATUS_OUT_OF_MEMORY;
- }
-
- start += PAGE_SIZE;
- }
- }
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-}
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32)
-static int default_mmap(struct file *file, struct vm_area_struct *vma)
-{
- gcsDEFAULT_MDL_PRIV_PTR mdlPriv = file->private_data;
-
- if (gcmIS_ERROR(default_mmap_internal(mdlPriv, vma)))
- {
- return -EINVAL;
- }
-
- return 0;
-}
-
-static const struct file_operations default_fops = {
- .mmap = default_mmap,
-};
-#endif
-
/***************************************************************************\
************************ Default Allocator **********************************
\***************************************************************************/
@@ -520,13 +340,13 @@ _DefaultAlloc(
gctBOOL contiguous = Flags & gcvALLOC_FLAG_CONTIGUOUS;
struct sysinfo temsysinfo;
gcsDEFAULT_PRIV_PTR priv = (gcsDEFAULT_PRIV_PTR)Allocator->privateData;
- gcsDEFAULT_MDL_PRIV_PTR mdlPriv = gcvNULL;
gcmkHEADER_ARG("Mdl=%p NumPages=%d", Mdl, NumPages);
numPages = NumPages;
bytes = NumPages * PAGE_SIZE;
order = get_order(bytes);
+
si_meminfo(&temsysinfo);
if (Flags & gcvALLOC_FLAG_MEMLIMIT)
@@ -537,10 +357,6 @@ _DefaultAlloc(
}
}
- gcmkONERROR(gckOS_Allocate(Allocator->os, gcmSIZEOF(gcsDEFAULT_MDL_PRIV), (gctPOINTER *)&mdlPriv));
-
- gckOS_ZeroMemory(mdlPriv, gcmSIZEOF(gcsDEFAULT_MDL_PRIV));
-
if (contiguous)
{
if (order >= MAX_ORDER)
@@ -552,32 +368,32 @@ _DefaultAlloc(
addr =
alloc_pages_exact(bytes, GFP_KERNEL | gcdNOWARN | __GFP_NORETRY);
- mdlPriv->u.contiguousPages = addr
+ Mdl->u.contiguousPages = addr
? virt_to_page(addr)
: gcvNULL;
- mdlPriv->exact = gcvTRUE;
+ Mdl->exact = gcvTRUE;
#else
- mdlPriv->u.contiguousPages =
+ Mdl->u.contiguousPages =
alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, order);
#endif
- if (mdlPriv->u.contiguousPages == gcvNULL)
+ if (Mdl->u.contiguousPages == gcvNULL)
{
- mdlPriv->u.contiguousPages =
+ Mdl->u.contiguousPages =
alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, order);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
- mdlPriv->exact = gcvFALSE;
+ Mdl->exact = gcvFALSE;
#endif
}
}
else
{
- mdlPriv->u.nonContiguousPages = _NonContiguousAlloc(numPages);
+ Mdl->u.nonContiguousPages = _NonContiguousAlloc(numPages);
}
- if (mdlPriv->u.contiguousPages == gcvNULL && mdlPriv->u.nonContiguousPages == gcvNULL)
+ if (Mdl->u.contiguousPages == gcvNULL && Mdl->u.nonContiguousPages == gcvNULL)
{
gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
}
@@ -585,77 +401,53 @@ _DefaultAlloc(
for (i = 0; i < numPages; i++)
{
struct page *page;
- gctPHYS_ADDR_T phys = 0U;
if (contiguous)
{
- page = nth_page(mdlPriv->u.contiguousPages, i);
+ page = nth_page(Mdl->u.contiguousPages, i);
}
else
{
- page = _NonContiguousToPage(mdlPriv->u.nonContiguousPages, i);
+ page = _NonContiguousToPage(Mdl->u.nonContiguousPages, i);
}
SetPageReserved(page);
- phys = page_to_phys(page);
-
- BUG_ON(!phys);
-
- if (PageHighMem(page))
+ if (!PageHighMem(page) && page_to_phys(page))
{
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)
- void *vaddr = kmap_atomic(page);
-#else
- void *vaddr = kmap_atomic(page, KM_USER0);
-#endif
-
- gcmkVERIFY_OK(gckOS_CacheFlush(
- Allocator->os, _GetProcessID(), gcvNULL, phys, vaddr, PAGE_SIZE
- ));
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)
- kunmap_atomic(vaddr);
-#else
- kunmap_atomic(vaddr, KM_USER0);
-#endif
+ gcmkVERIFY_OK(
+ gckOS_CacheFlush(Allocator->os, _GetProcessID(), gcvNULL,
+ page_to_phys(page),
+ page_address(page),
+ PAGE_SIZE));
- priv->high += PAGE_SIZE;
+ priv->low += PAGE_SIZE;
}
else
{
- gcmkVERIFY_OK(gckOS_CacheFlush(
- Allocator->os, _GetProcessID(), gcvNULL, phys, page_address(page), PAGE_SIZE
- ));
-
- priv->low += PAGE_SIZE;
- }
- }
+ flush_dcache_page(page);
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32)
- mdlPriv->file = anon_inode_getfile("default", &default_fops, mdlPriv, O_RDWR);
-
- if (IS_ERR(mdlPriv->file))
- {
- gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
- }
+#if !gcdCACHE_FUNCTION_UNIMPLEMENTED && defined(CONFIG_OUTER_CACHE) && gcdENABLE_OUTER_CACHE_PATCH
+ if (page_to_phys(page))
+ {
+ _HandleOuterCache(
+ Allocator->os,
+ page_to_phys(page),
+ gcvNULL,
+ PAGE_SIZE,
+ gcvCACHE_FLUSH
+ );
+ }
#endif
- mdlPriv->platform = Allocator->os->device->platform;
- mdlPriv->contiguous = contiguous;
-
- Mdl->priv = mdlPriv;
+ priv->high += PAGE_SIZE;
+ }
+ }
gcmkFOOTER_NO();
return gcvSTATUS_OK;
OnError:
-
- if (mdlPriv)
- {
- gcmkOS_SAFE_FREE(Allocator->os, mdlPriv);
- }
-
gcmkFOOTER();
return status;
}
@@ -669,17 +461,16 @@ _DefaultFree(
gctINT i;
struct page * page;
gcsDEFAULT_PRIV_PTR priv = (gcsDEFAULT_PRIV_PTR)Allocator->privateData;
- gcsDEFAULT_MDL_PRIV_PTR mdlPriv = Mdl->priv;
for (i = 0; i < Mdl->numPages; i++)
{
if (Mdl->contiguous)
{
- page = nth_page(mdlPriv->u.contiguousPages, i);
+ page = nth_page(Mdl->u.contiguousPages, i);
}
else
{
- page = _NonContiguousToPage(mdlPriv->u.nonContiguousPages, i);
+ page = _NonContiguousToPage(Mdl->u.nonContiguousPages, i);
}
ClearPageReserved(page);
@@ -697,51 +488,45 @@ _DefaultFree(
if (Mdl->contiguous)
{
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
- if (mdlPriv->exact == gcvTRUE)
+ if (Mdl->exact == gcvTRUE)
{
- free_pages_exact(page_address(mdlPriv->u.contiguousPages), Mdl->numPages * PAGE_SIZE);
+ free_pages_exact(page_address(Mdl->u.contiguousPages), Mdl->numPages * PAGE_SIZE);
}
else
#endif
{
- __free_pages(mdlPriv->u.contiguousPages, get_order(Mdl->numPages * PAGE_SIZE));
+ __free_pages(Mdl->u.contiguousPages, get_order(Mdl->numPages * PAGE_SIZE));
}
}
else
{
- _NonContiguousFree(mdlPriv->u.nonContiguousPages, Mdl->numPages);
- }
-
- if (mdlPriv->file != gcvNULL)
- {
- fput(mdlPriv->file);
+ _NonContiguousFree(Mdl->u.nonContiguousPages, Mdl->numPages);
}
-
- gcmkOS_SAFE_FREE(Allocator->os, Mdl->priv);
}
gctINT
_DefaultMapUser(
gckALLOCATOR Allocator,
PLINUX_MDL Mdl,
- gctBOOL Cacheable,
- OUT gctPOINTER * UserLogical
+ PLINUX_MDL_MAP MdlMap,
+ gctBOOL Cacheable
)
{
+
+ gctSTRING addr;
+ unsigned long start;
+ unsigned long pfn;
+ gctINT i;
gckOS os = Allocator->os;
+ gcsPLATFORM * platform = os->device->platform;
PLINUX_MDL mdl = Mdl;
- gctPOINTER userLogical = gcvNULL;
- struct vm_area_struct * vma;
- gcsDEFAULT_MDL_PRIV_PTR mdlPriv = Mdl->priv;
+ PLINUX_MDL_MAP mdlMap = MdlMap;
- gcmkHEADER_ARG("Allocator=%p Mdl=%p gctBOOL=%d", Allocator, Mdl, Cacheable);
-
- /* mdlPriv->cacheable must be used under protection of mdl->mapMutex. */
- mdlPriv->cacheable = Cacheable;
+ gcmkHEADER_ARG("Allocator=%p Mdl=%p MdlMap=%p gctBOOL=%d", Allocator, Mdl, MdlMap, Cacheable);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0)
- userLogical = (gctSTRING)vm_mmap(mdlPriv->file,
+ mdlMap->vmaAddr = (gctSTRING)vm_mmap(gcvNULL,
0L,
mdl->numPages * PAGE_SIZE,
PROT_READ | PROT_WRITE,
@@ -750,7 +535,7 @@ _DefaultMapUser(
#else
down_write(&current->mm->mmap_sem);
- userLogical = (gctSTRING)do_mmap_pgoff(mdlPriv->file,
+ mdlMap->vmaAddr = (gctSTRING)do_mmap_pgoff(gcvNULL,
0L,
mdl->numPages * PAGE_SIZE,
PROT_READ | PROT_WRITE,
@@ -764,11 +549,11 @@ _DefaultMapUser(
gcvLEVEL_INFO, gcvZONE_OS,
"%s(%d): vmaAddr->0x%X for phys_addr->0x%X",
__FUNCTION__, __LINE__,
- (gctUINT32)(gctUINTPTR_T)userLogical,
+ (gctUINT32)(gctUINTPTR_T)mdlMap->vmaAddr,
(gctUINT32)(gctUINTPTR_T)mdl
);
- if (IS_ERR(userLogical))
+ if (IS_ERR(mdlMap->vmaAddr))
{
gcmkTRACE_ZONE(
gcvLEVEL_INFO, gcvZONE_OS,
@@ -776,54 +561,99 @@ _DefaultMapUser(
__FUNCTION__, __LINE__
);
- userLogical = gcvNULL;
+ mdlMap->vmaAddr = gcvNULL;
gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY);
return gcvSTATUS_OUT_OF_MEMORY;
}
- if (mdlPriv->file == gcvNULL)
+ down_write(&current->mm->mmap_sem);
+
+ mdlMap->vma = find_vma(current->mm, (unsigned long)mdlMap->vmaAddr);
+
+ if (mdlMap->vma == gcvNULL)
+ {
+ up_write(&current->mm->mmap_sem);
+
+ gcmkTRACE_ZONE(
+ gcvLEVEL_INFO, gcvZONE_OS,
+ "%s(%d): find_vma error",
+ __FUNCTION__, __LINE__
+ );
+
+ mdlMap->vmaAddr = gcvNULL;
+
+ gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_RESOURCES);
+ return gcvSTATUS_OUT_OF_RESOURCES;
+ }
+
+ mdlMap->vma->vm_flags |= gcdVM_FLAGS;
+
+ if (Cacheable == gcvFALSE)
{
- /* Remap here since there is no file and ops->mmap(). */
- down_write(&current->mm->mmap_sem);
+ /* Make this mapping non-cached. */
+ mdlMap->vma->vm_page_prot = gcmkPAGED_MEMROY_PROT(mdlMap->vma->vm_page_prot);
+ }
- vma = find_vma(current->mm, (unsigned long)userLogical);
+ if (platform && platform->ops->adjustProt)
+ {
+ platform->ops->adjustProt(mdlMap->vma);
+ }
- if (vma == gcvNULL)
+ addr = mdl->addr;
+
+ /* Now map all the vmalloc pages to this user address. */
+ if (mdl->contiguous)
+ {
+ /* map kernel memory to user space.. */
+ if (remap_pfn_range(mdlMap->vma,
+ mdlMap->vma->vm_start,
+ page_to_pfn(mdl->u.contiguousPages),
+ mdlMap->vma->vm_end - mdlMap->vma->vm_start,
+ mdlMap->vma->vm_page_prot) < 0)
{
up_write(&current->mm->mmap_sem);
gcmkTRACE_ZONE(
gcvLEVEL_INFO, gcvZONE_OS,
- "%s(%d): find_vma error",
+ "%s(%d): unable to mmap ret",
__FUNCTION__, __LINE__
);
- gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_RESOURCES);
- return gcvSTATUS_OUT_OF_RESOURCES;
- }
-
- if (gcmIS_ERROR(default_mmap_internal(mdlPriv, vma)))
- {
- up_write(&current->mm->mmap_sem);
+ mdlMap->vmaAddr = gcvNULL;
gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY);
return gcvSTATUS_OUT_OF_MEMORY;
}
-
- up_write(&current->mm->mmap_sem);
}
+ else
+ {
+ start = mdlMap->vma->vm_start;
- gcmkVERIFY_OK(gckOS_CacheFlush(
- os,
- _GetProcessID(),
- mdl,
- gcvINVALID_ADDRESS,
- userLogical,
- mdl->numPages * PAGE_SIZE
- ));
+ for (i = 0; i < mdl->numPages; i++)
+ {
+ pfn = _NonContiguousToPfn(mdl->u.nonContiguousPages, i);
+
+ if (remap_pfn_range(mdlMap->vma,
+ start,
+ pfn,
+ PAGE_SIZE,
+ mdlMap->vma->vm_page_prot) < 0)
+ {
+ up_write(&current->mm->mmap_sem);
+
+ mdlMap->vmaAddr = gcvNULL;
+
+ gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY);
+ return gcvSTATUS_OUT_OF_MEMORY;
+ }
+
+ start += PAGE_SIZE;
+ addr += PAGE_SIZE;
+ }
+ }
- *UserLogical = userLogical;
+ up_write(&current->mm->mmap_sem);
gcmkFOOTER_NO();
return gcvSTATUS_OK;
@@ -862,6 +692,19 @@ _DefaultUnmapKernel(
}
gceSTATUS
+_DefaultLogicalToPhysical(
+ IN gckALLOCATOR Allocator,
+ IN PLINUX_MDL Mdl,
+ IN gctPOINTER Logical,
+ IN gctUINT32 ProcessID,
+ OUT gctPHYS_ADDR_T * Physical
+ )
+{
+ return _ConvertLogical2Physical(
+ Allocator->os, Logical, ProcessID, Mdl, Physical);
+}
+
+gceSTATUS
_DefaultCache(
IN gckALLOCATOR Allocator,
IN PLINUX_MDL Mdl,
@@ -882,21 +725,17 @@ _DefaultPhysical(
OUT gctPHYS_ADDR_T * Physical
)
{
- gcsDEFAULT_MDL_PRIV_PTR mdlPriv = Mdl->priv;
- gctUINT32 offsetInPage = Offset & ~PAGE_MASK;
- gctUINT32 index = Offset / PAGE_SIZE;
+ gcmkASSERT(Mdl->pagedMem);
if (Mdl->contiguous)
{
- *Physical = page_to_phys(nth_page(mdlPriv->u.contiguousPages, index));
+ *Physical = page_to_phys(nth_page(Mdl->u.contiguousPages, Offset));
}
else
{
- *Physical = _NonContiguousToPhys(mdlPriv->u.nonContiguousPages, index);
+ *Physical = _NonContiguousToPhys(Mdl->u.nonContiguousPages, Offset);
}
- *Physical += offsetInPage;
-
return gcvSTATUS_OK;
}
@@ -916,6 +755,7 @@ gcsALLOCATOR_OPERATIONS DefaultAllocatorOperations = {
.UnmapUser = _DefaultUnmapUser,
.MapKernel = _DefaultMapKernel,
.UnmapKernel = _DefaultUnmapKernel,
+ .LogicalToPhysical = _DefaultLogicalToPhysical,
.Cache = _DefaultCache,
.Physical = _DefaultPhysical,
};
@@ -954,10 +794,6 @@ _DefaultAlloctorInit(
| gcvALLOC_FLAG_MEMLIMIT
;
-#if defined(gcdEMULATE_SECURE_ALLOCATOR)
- allocator->capability |= gcvALLOC_FLAG_SECURITY;
-#endif
-
*Allocator = allocator;
return gcvSTATUS_OK;
@@ -993,6 +829,7 @@ gckALLOCATOR_Construct(
&& Operations->UnmapUser
&& Operations->MapKernel
&& Operations->UnmapKernel
+ && Operations->LogicalToPhysical
&& Operations->Cache
&& Operations->Physical
);
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.h
index 0a984aa5c7f5..402f5e817ff4 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.h
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.h
@@ -135,14 +135,15 @@ typedef struct _gcsALLOCATOR_OPERATIONS
** PLINUX_MDL Mdl
** Pointer to a Mdl.
**
+ ** PLINUX_MDL_MAP MdlMap
+ ** Pointer to a MdlMap, mapped address is stored
+ ** in MdlMap->vmaAddr
+ **
** gctBOOL Cacheable
** Whether this mapping is cacheable.
**
** OUTPUT:
**
- ** gctPOINTER * UserLogical
- ** Pointer to user logical address.
- **
** Nothing.
**
*/
@@ -150,8 +151,8 @@ typedef struct _gcsALLOCATOR_OPERATIONS
(*MapUser)(
IN gckALLOCATOR Allocator,
IN PLINUX_MDL Mdl,
- IN gctBOOL Cacheable,
- OUT gctPOINTER * UserLogical
+ IN PLINUX_MDL_MAP MdlMap,
+ IN gctBOOL Cacheable
);
/**************************************************************************
@@ -236,6 +237,41 @@ typedef struct _gcsALLOCATOR_OPERATIONS
/**************************************************************************
**
+ ** LogicalToPhysical
+ **
+ ** Get physical address from logical address, logical
+ ** address could be user virtual address or kernel
+ ** virtual address.
+ **
+ ** INPUT:
+ ** gckALLOCATOR Allocator
+ ** Pointer to an gckALLOCATOER object.
+ **
+ ** PLINUX_MDL Mdl
+ ** Pointer to a Mdl object.
+ **
+ ** gctPOINTER Logical
+ ** Mapped kernel address.
+ **
+ ** gctUINT32 ProcessID
+ ** pid of current process.
+ ** OUTPUT:
+ **
+ ** gctUINT32_PTR Physical
+ ** Physical address.
+ **
+ */
+ gceSTATUS
+ (*LogicalToPhysical)(
+ IN gckALLOCATOR Allocator,
+ IN PLINUX_MDL Mdl,
+ IN gctPOINTER Logical,
+ IN gctUINT32 ProcessID,
+ OUT gctPHYS_ADDR_T * Physical
+ );
+
+ /**************************************************************************
+ **
** Cache
**
** Maintain cache coherency.
@@ -378,8 +414,6 @@ typedef struct _gcsATTACH_DESC
gctPOINTER memory;
gctUINT32 physical;
gctSIZE_T size;
-
- gcsEXTERNAL_MEMORY_INFO info;
}
gcsATTACH_DESC;
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debug.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debug.h
index 6b8fee144977..9c83a3a439c8 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debug.h
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debug.h
@@ -80,21 +80,6 @@ typedef va_list gctARGUMENTS;
#define gcmkARGUMENTS_ARG(Arguments, Type) \
va_arg(Arguments, Type)
-#if gcdDUMP_COMMAND || gcdDUMP_IN_KERNEL
-/* VIV: gckOS_DumpBuffer holds spinlock and return to userspace which causes
- schedule in atomic. Because there isn't dump information from interrupt,
- mutex can be used in this situation. Need to solve this by avoid
- return userspace while lock still being hold which is very dangerous.
-*/
-#define gcmkDECLARE_LOCK(__mutex__) \
- static DEFINE_MUTEX(__mutex__); \
-
-#define gcmkLOCKSECTION(__mutex__) \
- mutex_lock(&__mutex__);
-
-#define gcmkUNLOCKSECTION(__mutex__) \
- mutex_unlock(&__mutex__);
-#else
#define gcmkDECLARE_LOCK(__spinLock__) \
static DEFINE_SPINLOCK(__spinLock__); \
unsigned long __spinLock__##flags = 0;
@@ -104,7 +89,6 @@ typedef va_list gctARGUMENTS;
#define gcmkUNLOCKSECTION(__spinLock__) \
spin_unlock_irqrestore(&__spinLock__, __spinLock__##flags)
-#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
# define gcmkGETPROCESSID() \
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.c
index 1c22bf7ba3b6..fa542753e48b 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.c
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.c
@@ -154,6 +154,7 @@ struct _gcsDEBUGFS_Node
#endif
struct dentry *parent ; /*parent directory*/
struct dentry *filen ; /*filename*/
+ struct dentry *vidmem;
struct semaphore sem ; /* mutual exclusion semaphore */
char *data ; /* The circular buffer data */
int size ; /* Size of the buffer pointed to by 'data' */
@@ -201,30 +202,9 @@ static int gc_debugfs_open(struct inode *inode, struct file *file)
return single_open(file, node->info->show, node);
}
-static ssize_t
-gc_debugfs_write(
- struct file *file,
- const char __user *buf,
- size_t count,
- loff_t *pos
- )
-{
- struct seq_file *s = file->private_data;
- gcsINFO_NODE *node = s->private;
- gcsINFO *info = node->info;
-
- if (info->write)
- {
- info->write(buf, count, node);
- }
-
- return count;
-}
-
static const struct file_operations gc_debugfs_operations = {
.owner = THIS_MODULE,
.open = gc_debugfs_open,
- .write = gc_debugfs_write,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
@@ -678,6 +658,222 @@ _DebugFSWrite (
return n ;
}
+int dumpProcess = 0;
+
+void
+_PrintCounter(
+ struct seq_file *file,
+ gcsDATABASE_COUNTERS * counter,
+ gctCONST_STRING Name
+ )
+{
+ seq_printf(file,"Counter: %s\n", Name);
+
+ seq_printf(file,"%-9s%10s","", "All");
+
+ seq_printf(file, "\n");
+
+ seq_printf(file,"%-9s","Current");
+
+ seq_printf(file,"%10lld", counter->bytes);
+
+ seq_printf(file, "\n");
+
+ seq_printf(file,"%-9s","Maximum");
+
+ seq_printf(file,"%10lld", counter->maxBytes);
+
+ seq_printf(file, "\n");
+
+ seq_printf(file,"%-9s","Total");
+
+ seq_printf(file,"%10lld", counter->totalBytes);
+
+ seq_printf(file, "\n");
+}
+
+void
+_ShowCounters(
+ struct seq_file *file,
+ gcsDATABASE_PTR database
+ )
+{
+ gctUINT i = 0;
+ gcsDATABASE_COUNTERS * counter;
+ gcsDATABASE_COUNTERS * nonPaged;
+
+ static gctCONST_STRING surfaceTypes[] = {
+ "UNKNOWN",
+ "Index",
+ "Vertex",
+ "Texture",
+ "RT",
+ "Depth",
+ "Bitmap",
+ "TS",
+ "Image",
+ "Mask",
+ "Scissor",
+ "HZDepth",
+ };
+
+ /* Get pointer to counters. */
+ counter = &database->vidMem;
+
+ nonPaged = &database->nonPaged;
+
+ seq_printf(file,"Counter: vidMem (for each surface type)\n");
+
+ seq_printf(file,"%-9s%10s","", "All");
+
+ for (i = 1; i < gcvSURF_NUM_TYPES; i++)
+ {
+ counter = &database->vidMemType[i];
+
+ seq_printf(file, "%10s",surfaceTypes[i]);
+ }
+
+ seq_printf(file, "\n");
+
+ seq_printf(file,"%-9s","Current");
+
+ seq_printf(file,"%10lld", database->vidMem.bytes);
+
+ for (i = 1; i < gcvSURF_NUM_TYPES; i++)
+ {
+ counter = &database->vidMemType[i];
+
+ seq_printf(file,"%10lld", counter->bytes);
+ }
+
+ seq_printf(file, "\n");
+
+ seq_printf(file,"%-9s","Maximum");
+
+ seq_printf(file,"%10lld", database->vidMem.maxBytes);
+
+ for (i = 1; i < gcvSURF_NUM_TYPES; i++)
+ {
+ counter = &database->vidMemType[i];
+
+ seq_printf(file,"%10lld", counter->maxBytes);
+ }
+
+ seq_printf(file, "\n");
+
+ seq_printf(file,"%-9s","Total");
+
+ seq_printf(file,"%10lld", database->vidMem.totalBytes);
+
+ for (i = 1; i < gcvSURF_NUM_TYPES; i++)
+ {
+ counter = &database->vidMemType[i];
+
+ seq_printf(file,"%10lld", counter->totalBytes);
+ }
+
+ seq_printf(file, "\n");
+
+ seq_printf(file,"Counter: vidMem (for each pool)\n");
+
+ seq_printf(file,"%-9s%10s","", "All");
+
+ for (i = 1; i < gcvPOOL_NUMBER_OF_POOLS; i++)
+ {
+ seq_printf(file, "%10d", i);
+ }
+
+ seq_printf(file, "\n");
+
+ seq_printf(file,"%-9s","Current");
+
+ seq_printf(file,"%10lld", database->vidMem.bytes);
+
+ for (i = 1; i < gcvPOOL_NUMBER_OF_POOLS; i++)
+ {
+ counter = &database->vidMemPool[i];
+
+ seq_printf(file,"%10lld", counter->bytes);
+ }
+
+ seq_printf(file, "\n");
+
+ seq_printf(file,"%-9s","Maximum");
+
+ seq_printf(file,"%10lld", database->vidMem.maxBytes);
+
+ for (i = 1; i < gcvPOOL_NUMBER_OF_POOLS; i++)
+ {
+ counter = &database->vidMemPool[i];
+
+ seq_printf(file,"%10lld", counter->maxBytes);
+ }
+
+ seq_printf(file, "\n");
+
+ seq_printf(file,"%-9s","Total");
+
+ seq_printf(file,"%10lld", database->vidMem.totalBytes);
+
+ for (i = 1; i < gcvPOOL_NUMBER_OF_POOLS; i++)
+ {
+ counter = &database->vidMemPool[i];
+
+ seq_printf(file,"%10lld", counter->totalBytes);
+ }
+
+ seq_printf(file, "\n");
+
+ /* Print nonPaged. */
+ _PrintCounter(file, &database->nonPaged, "nonPaged");
+ _PrintCounter(file, &database->contiguous, "contiguous");
+ _PrintCounter(file, &database->mapUserMemory, "mapUserMemory");
+ _PrintCounter(file, &database->mapMemory, "mapMemory");
+}
+
+static int vidmem_show(struct seq_file *file, void *unused)
+{
+ gceSTATUS status;
+ gcsDATABASE_PTR database;
+ gckGALDEVICE device = file->private;
+
+ gckKERNEL kernel = _GetValidKernel(device);
+
+ /* Find the database. */
+ gcmkONERROR(
+ gckKERNEL_FindDatabase(kernel, dumpProcess, gcvFALSE, &database));
+
+ seq_printf(file, "VidMem Usage (Process %d):\n", dumpProcess);
+
+ _ShowCounters(file, database);
+
+ return 0;
+
+OnError:
+ return 0;
+}
+
+static int
+vidmem_open(
+ struct inode *inode,
+ struct file *file
+ )
+{
+ return single_open(file, vidmem_show, inode->i_private);
+}
+
+static ssize_t
+vidmem_write(
+ struct file *file,
+ const char __user *buf,
+ size_t count,
+ loff_t *pos
+ )
+{
+ dumpProcess = simple_strtol(buf, NULL, 0);
+ return count;
+}
+
/*******************************************************************************
**
** File Operations Table
@@ -690,6 +886,15 @@ static const struct file_operations debugfs_operations = {
.write = _DebugFSWrite ,
} ;
+static const struct file_operations vidmem_operations = {
+ .owner = THIS_MODULE ,
+ .open = vidmem_open,
+ .read = seq_read,
+ .write = vidmem_write,
+ .llseek = seq_lseek,
+ .release = single_release,
+} ;
+
/*******************************************************************************
**
** INTERFACE FUNCTIONS (START)
@@ -831,6 +1036,9 @@ gckDEBUGFS_CreateNode (
&debugfs_operations);
}
+ node->vidmem
+ = debugfs_create_file("vidmem", S_IRUGO|S_IWUSR, node->parent, Device, &vidmem_operations);
+
/* add it to our linked list */
node->next = gc_dbgfs.linkedlist ;
gc_dbgfs.linkedlist = node ;
@@ -878,6 +1086,11 @@ gckDEBUGFS_FreeNode (
kfree(Node->temp);
/*Close Debug fs*/
+ if (Node->vidmem)
+ {
+ debugfs_remove(Node->vidmem);
+ }
+
if ( Node->filen )
{
debugfs_remove ( Node->filen ) ;
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.h
index 1f97624eb45f..4e9658498756 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.h
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.h
@@ -75,7 +75,6 @@ typedef struct _gcsINFO
{
const char * name;
int (*show)(struct seq_file*, void*);
- int (*write)(const char __user *buf, size_t count, void*);
}
gcsINFO;
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
index 004d493b2dce..92e7ebcec228 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
@@ -70,10 +70,6 @@
static struct dove_gpio_irq_handler gc500_handle;
#endif
-static gckGALDEVICE galDevice;
-
-extern gcTA globalTA;
-
/******************************************************************************\
******************************** Debugfs Support *******************************
\******************************************************************************/
@@ -89,8 +85,6 @@ int gc_info_show(struct seq_file* m, void* data)
int i = 0;
gceCHIPMODEL chipModel;
gctUINT32 chipRevision;
- gctUINT32 productID = 0;
- gctUINT32 ecoID = 0;
for (i = 0; i < gcdMAX_GPU_COUNT; i++)
{
@@ -107,15 +101,11 @@ int gc_info_show(struct seq_file* m, void* data)
{
chipModel = device->kernels[i]->hardware->identity.chipModel;
chipRevision = device->kernels[i]->hardware->identity.chipRevision;
- productID = device->kernels[i]->hardware->identity.productID;
- ecoID = device->kernels[i]->hardware->identity.ecoID;
}
seq_printf(m, "gpu : %d\n", i);
seq_printf(m, "model : %4x\n", chipModel);
seq_printf(m, "revision : %4x\n", chipRevision);
- seq_printf(m, "product : %4x\n", productID);
- seq_printf(m, "eco : %4x\n", ecoID);
seq_printf(m, "\n");
}
}
@@ -453,35 +443,13 @@ _DumpState(
IN gckKERNEL Kernel
);
-/*******************************************************************************
-**
-** Show PM state timer.
-**
-** Entry is called as 'idle' for compatible reason, it shows more information
-** than idle actually.
-**
-** Start: Start time of this counting period.
-** End: End time of this counting peroid.
-** On: Time GPU stays in gcvPOWER_0N.
-** Off: Time GPU stays in gcvPOWER_0FF.
-** Idle: Time GPU stays in gcvPOWER_IDLE.
-** Suspend: Time GPU stays in gcvPOWER_SUSPEND.
-*/
-
-static int dumpCore = 0;
-
static int
gc_dump_trigger_show(struct seq_file *m, void *data)
{
#if gcdENABLE_3D || gcdENABLE_2D
gcsINFO_NODE *node = m->private;
gckGALDEVICE device = node->device;
- gckKERNEL kernel = gcvNULL;
-
- if (dumpCore >= gcvCORE_MAJOR && dumpCore < gcvCORE_COUNT)
- {
- kernel = device->kernels[dumpCore];
- }
+ gckKERNEL kernel = _GetValidKernel(device);
#endif
seq_printf(m, gcdDEBUG_FS_WARN);
@@ -489,7 +457,7 @@ gc_dump_trigger_show(struct seq_file *m, void *data)
#if gcdENABLE_3D || gcdENABLE_2D
seq_printf(m, "Get dump from /proc/kmsg or /sys/kernel/debug/gc/galcore_trace\n");
- if (kernel && kernel->hardware->powerManagement == gcvFALSE)
+ if (kernel->hardware->powerManagement == gcvFALSE)
{
_DumpState(kernel);
}
@@ -498,214 +466,6 @@ gc_dump_trigger_show(struct seq_file *m, void *data)
return 0;
}
-static int dumpProcess = 0;
-
-void
-_PrintCounter(
- struct seq_file *file,
- gcsDATABASE_COUNTERS * counter,
- gctCONST_STRING Name
- )
-{
- seq_printf(file,"Counter: %s\n", Name);
-
- seq_printf(file,"%-9s%10s","", "All");
-
- seq_printf(file, "\n");
-
- seq_printf(file,"%-9s","Current");
-
- seq_printf(file,"%10lld", counter->bytes);
-
- seq_printf(file, "\n");
-
- seq_printf(file,"%-9s","Maximum");
-
- seq_printf(file,"%10lld", counter->maxBytes);
-
- seq_printf(file, "\n");
-
- seq_printf(file,"%-9s","Total");
-
- seq_printf(file,"%10lld", counter->totalBytes);
-
- seq_printf(file, "\n");
-}
-
-void
-_ShowCounters(
- struct seq_file *file,
- gcsDATABASE_PTR database
- )
-{
- gctUINT i = 0;
- gcsDATABASE_COUNTERS * counter;
- gcsDATABASE_COUNTERS * nonPaged;
-
- static gctCONST_STRING surfaceTypes[gcvSURF_NUM_TYPES] = {
- "UNKNOWN",
- "Index",
- "Vertex",
- "Texture",
- "RT",
- "Depth",
- "Bitmap",
- "TS",
- "Image",
- "Mask",
- "Scissor",
- "HZDepth",
- };
-
- /* Get pointer to counters. */
- counter = &database->vidMem;
-
- nonPaged = &database->nonPaged;
-
- seq_printf(file,"Counter: vidMem (for each surface type)\n");
-
- seq_printf(file,"%-9s%10s","", "All");
-
- for (i = 1; i < gcvSURF_NUM_TYPES; i++)
- {
- counter = &database->vidMemType[i];
-
- seq_printf(file, "%10s",surfaceTypes[i]);
- }
-
- seq_printf(file, "\n");
-
- seq_printf(file,"%-9s","Current");
-
- seq_printf(file,"%10lld", database->vidMem.bytes);
-
- for (i = 1; i < gcvSURF_NUM_TYPES; i++)
- {
- counter = &database->vidMemType[i];
-
- seq_printf(file,"%10lld", counter->bytes);
- }
-
- seq_printf(file, "\n");
-
- seq_printf(file,"%-9s","Maximum");
-
- seq_printf(file,"%10lld", database->vidMem.maxBytes);
-
- for (i = 1; i < gcvSURF_NUM_TYPES; i++)
- {
- counter = &database->vidMemType[i];
-
- seq_printf(file,"%10lld", counter->maxBytes);
- }
-
- seq_printf(file, "\n");
-
- seq_printf(file,"%-9s","Total");
-
- seq_printf(file,"%10lld", database->vidMem.totalBytes);
-
- for (i = 1; i < gcvSURF_NUM_TYPES; i++)
- {
- counter = &database->vidMemType[i];
-
- seq_printf(file,"%10lld", counter->totalBytes);
- }
-
- seq_printf(file, "\n");
-
- seq_printf(file,"Counter: vidMem (for each pool)\n");
-
- seq_printf(file,"%-9s%10s","", "All");
-
- for (i = 1; i < gcvPOOL_NUMBER_OF_POOLS; i++)
- {
- seq_printf(file, "%10d", i);
- }
-
- seq_printf(file, "\n");
-
- seq_printf(file,"%-9s","Current");
-
- seq_printf(file,"%10lld", database->vidMem.bytes);
-
- for (i = 1; i < gcvPOOL_NUMBER_OF_POOLS; i++)
- {
- counter = &database->vidMemPool[i];
-
- seq_printf(file,"%10lld", counter->bytes);
- }
-
- seq_printf(file, "\n");
-
- seq_printf(file,"%-9s","Maximum");
-
- seq_printf(file,"%10lld", database->vidMem.maxBytes);
-
- for (i = 1; i < gcvPOOL_NUMBER_OF_POOLS; i++)
- {
- counter = &database->vidMemPool[i];
-
- seq_printf(file,"%10lld", counter->maxBytes);
- }
-
- seq_printf(file, "\n");
-
- seq_printf(file,"%-9s","Total");
-
- seq_printf(file,"%10lld", database->vidMem.totalBytes);
-
- for (i = 1; i < gcvPOOL_NUMBER_OF_POOLS; i++)
- {
- counter = &database->vidMemPool[i];
-
- seq_printf(file,"%10lld", counter->totalBytes);
- }
-
- seq_printf(file, "\n");
-
- /* Print nonPaged. */
- _PrintCounter(file, &database->nonPaged, "nonPaged");
- _PrintCounter(file, &database->contiguous, "contiguous");
- _PrintCounter(file, &database->mapUserMemory, "mapUserMemory");
- _PrintCounter(file, &database->mapMemory, "mapMemory");
-}
-
-static int gc_vidmem_show(struct seq_file *m, void *unused)
-{
- gceSTATUS status;
- gcsDATABASE_PTR database;
- gcsINFO_NODE *node = m->private;
- gckGALDEVICE device = node->device;
-
- gckKERNEL kernel = _GetValidKernel(device);
-
- /* Find the database. */
- gcmkONERROR(
- gckKERNEL_FindDatabase(kernel, dumpProcess, gcvFALSE, &database));
-
- seq_printf(m, "VidMem Usage (Process %d):\n", dumpProcess);
-
- _ShowCounters(m, database);
-
- return 0;
-
-OnError:
- return 0;
-}
-
-static int gc_vidmem_write(const char __user *buf, size_t count, void* data)
-{
- dumpProcess = simple_strtol(buf, NULL, 0);
- return count;
-}
-
-static int gc_dump_trigger_write(const char __user *buf, size_t count, void* data)
-{
- dumpCore = simple_strtol(buf, NULL, 0);
- return count;
-}
-
static gcsINFO InfoList[] =
{
{"info", gc_info_show},
@@ -714,8 +474,7 @@ static gcsINFO InfoList[] =
{"idle", gc_idle_show},
{"database", gc_db_show},
{"version", gc_version_show},
- {"vidmem", gc_vidmem_show, gc_vidmem_write},
- {"dump_trigger", gc_dump_trigger_show, gc_dump_trigger_write},
+ {"dump_trigger", gc_dump_trigger_show},
};
static gceSTATUS
@@ -767,7 +526,6 @@ _AllocateMemory(
)
{
gceSTATUS status;
- gctPHYS_ADDR_T physAddr;
gcmkHEADER_ARG("Device=0x%x Bytes=%lu", Device, Bytes);
@@ -780,11 +538,7 @@ _AllocateMemory(
Device->os, gcvFALSE, &Bytes, Physical, Logical
));
- gcmkONERROR(gckOS_GetPhysicalAddress(
- Device->os, *Logical, &physAddr
- ));
-
- gcmkSAFECASTPHYSADDRT(*PhysAddr, physAddr);
+ *PhysAddr = ((PLINUX_MDL)*Physical)->dmaHandle;
/* Success. */
gcmkFOOTER_ARG(
@@ -821,173 +575,247 @@ _FreeMemory(
return status;
}
-static gceSTATUS
-_SetupVidMem(
- IN gckGALDEVICE Device,
- IN gctUINT32 ContiguousBase,
- IN gctSIZE_T ContiguousSize,
- IN gctSIZE_T BankSize,
- IN gcsDEVICE_CONSTRUCT_ARGS * Args
- )
+
+
+/******************************************************************************\
+******************************* Interrupt Handler ******************************
+\******************************************************************************/
+#if gcdMULTI_GPU
+static irqreturn_t isrRoutine3D0(int irq, void *ctxt)
{
gceSTATUS status;
- gctUINT32 physAddr = ~0U;
- gckGALDEVICE device = Device;
- struct resource* mem_region;
+ gckGALDEVICE device;
- /* set up the contiguous memory */
- device->contiguousSize = ContiguousSize;
+ device = (gckGALDEVICE) ctxt;
- if (ContiguousSize > 0)
+ /* Call kernel interrupt notification. */
+ status = gckKERNEL_Notify(device->kernels[gcvCORE_MAJOR],
+ gcvCORE_3D_0_ID,
+ gcvNOTIFY_INTERRUPT,
+ gcvTRUE);
+
+ if (gcmIS_SUCCESS(status))
{
- if (ContiguousBase == 0)
- {
- while (device->contiguousSize > 0)
- {
- /* Allocate contiguous memory. */
- status = _AllocateMemory(
- device,
- device->contiguousSize,
- &device->contiguousBase,
- &device->contiguousPhysical,
- &physAddr
- );
+ /* Wake up the threadRoutine to process events. */
+ device->dataReady3D[gcvCORE_3D_0_ID] = gcvTRUE;
+ wake_up_interruptible(&device->intrWaitQueue3D[gcvCORE_3D_0_ID]);
- if (gcmIS_SUCCESS(status))
- {
- status = gckVIDMEM_Construct(
- device->os,
- physAddr | device->systemMemoryBaseAddress,
- device->contiguousSize,
- 64,
- BankSize,
- &device->contiguousVidMem
- );
+ return IRQ_HANDLED;
+ }
- if (gcmIS_SUCCESS(status))
- {
- device->requestedContiguousBase = physAddr;
- break;
- }
+ return IRQ_NONE;
+}
- gcmkONERROR(_FreeMemory(
- device,
- device->contiguousBase,
- device->contiguousPhysical
- ));
+static int threadRoutine3D0(void *ctxt)
+{
+ gckGALDEVICE device = (gckGALDEVICE) ctxt;
- device->contiguousBase = gcvNULL;
- device->contiguousPhysical = gcvNULL;
- }
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DRIVER,
+ "Starting isr Thread with extension=%p",
+ device);
- if (device->contiguousSize <= (4 << 20))
- {
- device->contiguousSize = 0;
- }
- else
- {
- device->contiguousSize -= (4 << 20);
- }
+ for (;;)
+ {
+ /* Sleep until being awaken by the interrupt handler. */
+ wait_event_interruptible(device->intrWaitQueue3D[gcvCORE_3D_0_ID],
+ device->dataReady3D[gcvCORE_3D_0_ID] == gcvTRUE);
+ device->dataReady3D[gcvCORE_3D_0_ID] = gcvFALSE;
+
+ if (device->killThread == gcvTRUE)
+ {
+ /* The daemon exits. */
+ while (!kthread_should_stop())
+ {
+ gckOS_Delay(device->os, 1);
}
+
+ return 0;
}
- else
- {
- /* Create the contiguous memory heap. */
- status = gckVIDMEM_Construct(
- device->os,
- ContiguousBase | device->systemMemoryBaseAddress,
- ContiguousSize,
- 64, BankSize,
- &device->contiguousVidMem
- );
- if (gcmIS_ERROR(status))
+ gckKERNEL_Notify(device->kernels[gcvCORE_MAJOR],
+ gcvCORE_3D_0_ID,
+ gcvNOTIFY_INTERRUPT,
+ gcvFALSE);
+ }
+}
+
+#if gcdMULTI_GPU > 1
+static irqreturn_t isrRoutine3D1(int irq, void *ctxt)
+{
+ gceSTATUS status;
+ gckGALDEVICE device;
+
+ device = (gckGALDEVICE) ctxt;
+
+ /* Call kernel interrupt notification. */
+ status = gckKERNEL_Notify(device->kernels[gcvCORE_MAJOR],
+ gcvCORE_3D_1_ID,
+ gcvNOTIFY_INTERRUPT,
+ gcvTRUE);
+
+ if (gcmIS_SUCCESS(status))
+ {
+ /* Wake up the worker thread to process events. */
+ device->dataReady3D[gcvCORE_3D_1_ID] = gcvTRUE;
+ wake_up_interruptible(&device->intrWaitQueue3D[gcvCORE_3D_1_ID]);
+
+ return IRQ_HANDLED;
+ }
+
+ return IRQ_NONE;
+}
+
+static int threadRoutine3D1(void *ctxt)
+{
+ gckGALDEVICE device = (gckGALDEVICE) ctxt;
+
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DRIVER,
+ "Starting isr Thread with extension=%p",
+ device);
+
+ for (;;)
+ {
+ /* Sleep until being awaken by the interrupt handler. */
+ wait_event_interruptible(device->intrWaitQueue3D[gcvCORE_3D_1_ID],
+ device->dataReady3D[gcvCORE_3D_1_ID] == gcvTRUE);
+ device->dataReady3D[gcvCORE_3D_1_ID] = gcvFALSE;
+
+ if (device->killThread == gcvTRUE)
+ {
+ /* The daemon exits. */
+ while (!kthread_should_stop())
{
- /* Error, disable contiguous memory pool. */
- device->contiguousVidMem = gcvNULL;
- device->contiguousSize = 0;
+ gckOS_Delay(device->os, 1);
}
- else
- {
- if (Args->contiguousRequested == gcvFALSE)
- {
- mem_region = request_mem_region(
- ContiguousBase, ContiguousSize, "galcore managed memory"
- );
- if (mem_region == gcvNULL)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): Failed to claim %ld bytes @ 0x%08X\n",
- __FUNCTION__, __LINE__,
- ContiguousSize, ContiguousBase
- );
+ return 0;
+ }
- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
- }
- }
+ gckKERNEL_Notify(device->kernels[gcvCORE_MAJOR],
+ gcvCORE_3D_1_ID,
+ gcvNOTIFY_INTERRUPT,
+ gcvFALSE);
+ }
+}
+#endif
+#elif gcdMULTI_GPU_AFFINITY
+static irqreturn_t isrRoutine3D0(int irq, void *ctxt)
+{
+ gceSTATUS status;
+ gckGALDEVICE device;
- device->requestedContiguousBase = ContiguousBase;
- device->requestedContiguousSize = ContiguousSize;
- device->contiguousRequested = Args->contiguousRequested;
+ device = (gckGALDEVICE) ctxt;
- device->contiguousPhysical = gcvNULL;
- device->contiguousPhysicalName = 0;
- device->contiguousSize = ContiguousSize;
- device->contiguousMapped = gcvTRUE;
+ /* Call kernel interrupt notification. */
+ status = gckKERNEL_Notify(device->kernels[gcvCORE_MAJOR], gcvNOTIFY_INTERRUPT, gcvTRUE);
+
+ if (gcmIS_SUCCESS(status))
+ {
+ up(&device->semas[gcvCORE_MAJOR]);
+
+ return IRQ_HANDLED;
+ }
+
+ return IRQ_NONE;
+}
+
+static int threadRoutine3D0(void *ctxt)
+{
+ gckGALDEVICE device = (gckGALDEVICE) ctxt;
+
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DRIVER,
+ "Starting isr Thread with extension=%p",
+ device);
+
+ for (;;)
+ {
+ static int down;
+
+ down = down_interruptible(&device->semas[gcvCORE_MAJOR]);
+ if (down); /*To make gcc 4.6 happye*/
+
+ if (device->killThread == gcvTRUE)
+ {
+ /* The daemon exits. */
+ while (!kthread_should_stop())
+ {
+ gckOS_Delay(device->os, 1);
}
+
+ return 0;
}
+
+ gckKERNEL_Notify(device->kernels[gcvCORE_MAJOR],
+ gcvNOTIFY_INTERRUPT,
+ gcvFALSE);
}
+}
- return gcvSTATUS_OK;
-OnError:
- return status;
+static irqreturn_t isrRoutine3D1(int irq, void *ctxt)
+{
+ gceSTATUS status;
+ gckGALDEVICE device;
+
+ device = (gckGALDEVICE) ctxt;
+
+ /* Call kernel interrupt notification. */
+ status = gckKERNEL_Notify(device->kernels[gcvCORE_OCL], gcvNOTIFY_INTERRUPT, gcvTRUE);
+
+ if (gcmIS_SUCCESS(status))
+ {
+ up(&device->semas[gcvCORE_OCL]);
+
+ return IRQ_HANDLED;
+ }
+
+ return IRQ_NONE;
}
-void
-_SetupRegisterPhysical(
- IN gckGALDEVICE Device,
- IN gcsDEVICE_CONSTRUCT_ARGS * Args
- )
+static int threadRoutine3D1(void *ctxt)
{
- gctINT *irqs = Args->irqs;
- gctUINT *registerBases = Args->registerBases;
- gctUINT *registerSizes = Args->registerSizes;
+ gckGALDEVICE device = (gckGALDEVICE) ctxt;
- gctINT i = 0;
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DRIVER,
+ "Starting isr Thread with extension=%p",
+ device);
- for (i = 0; i < gcvCORE_COUNT; i++)
+ for (;;)
{
- if (irqs[i] != -1)
+ static int down;
+
+ down = down_interruptible(&device->semas[gcvCORE_OCL]);
+ if (down); /*To make gcc 4.6 happye*/
+
+ if (device->killThread == gcvTRUE)
{
- Device->requestedRegisterMemBases[i] = registerBases[i];
- Device->requestedRegisterMemSizes[i] = registerSizes[i];
+ /* The daemon exits. */
+ while (!kthread_should_stop())
+ {
+ gckOS_Delay(device->os, 1);
+ }
- gcmkTRACE_ZONE(gcvLEVEL_INFO, _GC_OBJ_ZONE,
- "Get register base %llx of core %d",
- registerBases[i], i);
+ return 0;
}
+
+ gckKERNEL_Notify(device->kernels[gcvCORE_OCL],
+ gcvNOTIFY_INTERRUPT,
+ gcvFALSE);
}
}
-
-/******************************************************************************\
-******************************* Interrupt Handler ******************************
-\******************************************************************************/
+#else
static irqreturn_t isrRoutine(int irq, void *ctxt)
{
gceSTATUS status;
gckGALDEVICE device;
- gceCORE Core = (gceCORE) gcmPTR2INT32(ctxt);
- device = galDevice;
+ device = (gckGALDEVICE) ctxt;
/* Call kernel interrupt notification. */
- status = gckKERNEL_Notify(device->kernels[Core], gcvNOTIFY_INTERRUPT, gcvTRUE);
+ status = gckKERNEL_Notify(device->kernels[gcvCORE_MAJOR], gcvNOTIFY_INTERRUPT, gcvTRUE);
if (gcmIS_SUCCESS(status))
{
- up(&device->semas[Core]);
+ up(&device->semas[gcvCORE_MAJOR]);
return IRQ_HANDLED;
}
@@ -997,27 +825,74 @@ static irqreturn_t isrRoutine(int irq, void *ctxt)
static int threadRoutine(void *ctxt)
{
- gckGALDEVICE device = galDevice;
- gceCORE core = (gceCORE) gcmPTR2INT32(ctxt);
- gctUINT i;
+ gckGALDEVICE device = (gckGALDEVICE) ctxt;
gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DRIVER,
"Starting isr Thread with extension=%p",
device);
- /* Make kernel update page table of this thread to include entry related to command buffer.*/
- for (i = 0; i < gcdCOMMAND_QUEUES; i++)
+ for (;;)
+ {
+ static int down;
+
+ down = down_interruptible(&device->semas[gcvCORE_MAJOR]);
+ if (down); /*To make gcc 4.6 happye*/
+
+ if (device->killThread == gcvTRUE)
+ {
+ /* The daemon exits. */
+ while (!kthread_should_stop())
+ {
+ gckOS_Delay(device->os, 1);
+ }
+
+ return 0;
+ }
+
+ gckKERNEL_Notify(device->kernels[gcvCORE_MAJOR],
+ gcvNOTIFY_INTERRUPT,
+ gcvFALSE);
+ }
+}
+#endif
+
+static irqreturn_t isrRoutine2D(int irq, void *ctxt)
+{
+ gceSTATUS status;
+ gckGALDEVICE device;
+
+ device = (gckGALDEVICE) ctxt;
+
+ /* Call kernel interrupt notification. */
+ status = gckKERNEL_Notify(device->kernels[gcvCORE_2D],
+#if gcdMULTI_GPU
+ 0,
+#endif
+ gcvNOTIFY_INTERRUPT,
+ gcvTRUE);
+ if (gcmIS_SUCCESS(status))
{
- gctUINT32 data = *(gctUINT32_PTR)device->kernels[core]->command->queues[i].logical;
+ up(&device->semas[gcvCORE_2D]);
- data = 0;
+ return IRQ_HANDLED;
}
+ return IRQ_NONE;
+}
+
+static int threadRoutine2D(void *ctxt)
+{
+ gckGALDEVICE device = (gckGALDEVICE) ctxt;
+
+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DRIVER,
+ "Starting isr Thread with extension=%p",
+ device);
+
for (;;)
{
static int down;
- down = down_interruptible(&device->semas[core]);
+ down = down_interruptible(&device->semas[gcvCORE_2D]);
if (down); /*To make gcc 4.6 happye*/
if (device->killThread == gcvTRUE)
@@ -1030,8 +905,10 @@ static int threadRoutine(void *ctxt)
return 0;
}
-
- gckKERNEL_Notify(device->kernels[core],
+ gckKERNEL_Notify(device->kernels[gcvCORE_2D],
+#if gcdMULTI_GPU
+ 0,
+#endif
gcvNOTIFY_INTERRUPT,
gcvFALSE);
}
@@ -1083,6 +960,9 @@ static int threadRoutineVG(void *ctxt)
return 0;
}
gckKERNEL_Notify(device->kernels[gcvCORE_VG],
+#if gcdMULTI_GPU
+ 0,
+#endif
gcvNOTIFY_INTERRUPT,
gcvFALSE);
}
@@ -1108,9 +988,18 @@ static int threadRoutineVG(void *ctxt)
*/
gceSTATUS
gckGALDEVICE_Construct(
+#if gcdMULTI_GPU || gcdMULTI_GPU_AFFINITY
+ IN gctINT IrqLine3D0,
+ IN gctUINT32 RegisterMemBase3D0,
+ IN gctSIZE_T RegisterMemSize3D0,
+ IN gctINT IrqLine3D1,
+ IN gctUINT32 RegisterMemBase3D1,
+ IN gctSIZE_T RegisterMemSize3D1,
+#else
IN gctINT IrqLine,
IN gctUINT32 RegisterMemBase,
IN gctSIZE_T RegisterMemSize,
+#endif
IN gctINT IrqLine2D,
IN gctUINT32 RegisterMemBase2D,
IN gctSIZE_T RegisterMemSize2D,
@@ -1136,13 +1025,30 @@ gckGALDEVICE_Construct(
gctUINT32 externalBaseAddress = 0, externalAlignment = 0;
gctUINT32 horizontalTileSize, verticalTileSize;
struct resource* mem_region;
+ gctUINT32 physAddr;
gctUINT32 physical;
gckGALDEVICE device;
gceSTATUS status;
gctINT32 i;
+#if gcdMULTI_GPU
+ gctINT32 j;
+#endif
gceHARDWARE_TYPE type;
+ gckDB sharedDB = gcvNULL;
gckKERNEL kernel = gcvNULL;
+#if gcdMULTI_GPU || gcdMULTI_GPU_AFFINITY
+ gcmkHEADER_ARG("IrqLine3D0=%d RegisterMemBase3D0=0x%08x RegisterMemSize3D0=%u "
+ "IrqLine2D=%d RegisterMemBase2D=0x%08x RegisterMemSize2D=%u "
+ "IrqLineVG=%d RegisterMemBaseVG=0x%08x RegisterMemSizeVG=%u "
+ "ContiguousBase=0x%08x ContiguousSize=%lu BankSize=%lu "
+ "FastClear=%d Compression=%d PhysBaseAddr=0x%x PhysSize=%d Signal=%d",
+ IrqLine3D0, RegisterMemBase3D0, RegisterMemSize3D0,
+ IrqLine2D, RegisterMemBase2D, RegisterMemSize2D,
+ IrqLineVG, RegisterMemBaseVG, RegisterMemSizeVG,
+ ContiguousBase, ContiguousSize, BankSize, FastClear, Compression,
+ PhysBaseAddr, PhysSize, Signal);
+#else
gcmkHEADER_ARG("IrqLine=%d RegisterMemBase=0x%08x RegisterMemSize=%u "
"IrqLine2D=%d RegisterMemBase2D=0x%08x RegisterMemSize2D=%u "
"IrqLineVG=%d RegisterMemBaseVG=0x%08x RegisterMemSizeVG=%u "
@@ -1153,16 +1059,16 @@ gckGALDEVICE_Construct(
IrqLineVG, RegisterMemBaseVG, RegisterMemSizeVG,
ContiguousBase, ContiguousSize, BankSize, FastClear, Compression,
PhysBaseAddr, PhysSize, Signal);
-
-#if !gcdENABLE_3D
- IrqLine = -1;
#endif
-#if !gcdENABLE_2D
+#if gcdDISABLE_CORES_2D3D
+ IrqLine = -1;
IrqLine2D = -1;
#endif
+
/* Allocate device structure. */
device = kmalloc(sizeof(struct _gckGALDEVICE), GFP_KERNEL | __GFP_NOWARN);
+
if (!device)
{
gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
@@ -1174,17 +1080,9 @@ gckGALDEVICE_Construct(
device->platform = Args->platform;
- device->args = *Args;
-
/* set up the contiguous memory */
device->contiguousSize = ContiguousSize;
- /* Clear irq lines. */
- for (i = 0; i < gcdMAX_GPU_COUNT; i++)
- {
- device->irqLines[i] = -1;
- }
-
gcmkONERROR(_DebugfsInit(device));
if (gckDEBUGFS_CreateNode(
@@ -1202,13 +1100,37 @@ gckGALDEVICE_Construct(
gckDEBUGFS_SetCurrentNode(device->dbgNode);
}
- _SetupRegisterPhysical(device, Args);
+#if gcdMULTI_GPU
+ if (IrqLine3D0 != -1)
+ {
+ device->requestedRegisterMemBase3D[gcvCORE_3D_0_ID] = RegisterMemBase3D0;
+ device->requestedRegisterMemSize3D[gcvCORE_3D_0_ID] = RegisterMemSize3D0;
+ }
+ if (IrqLine3D1 != -1)
+ {
+ device->requestedRegisterMemBase3D[gcvCORE_3D_1_ID] = RegisterMemBase3D1;
+ device->requestedRegisterMemSize3D[gcvCORE_3D_1_ID] = RegisterMemSize3D1;
+ }
+#elif gcdMULTI_GPU_AFFINITY
+ if (IrqLine3D0 != -1)
+ {
+ device->requestedRegisterMemBases[gcvCORE_MAJOR] = RegisterMemBase3D0;
+ device->requestedRegisterMemSizes[gcvCORE_MAJOR] = RegisterMemSize3D0;
+ }
+
+ if (IrqLine3D1 != -1)
+ {
+ device->requestedRegisterMemBases[gcvCORE_OCL] = RegisterMemBase3D1;
+ device->requestedRegisterMemSizes[gcvCORE_OCL] = RegisterMemSize3D1;
+ }
+#else
if (IrqLine != -1)
{
device->requestedRegisterMemBases[gcvCORE_MAJOR] = RegisterMemBase;
device->requestedRegisterMemSizes[gcvCORE_MAJOR] = RegisterMemSize;
}
+#endif
if (IrqLine2D != -1)
{
@@ -1221,7 +1143,7 @@ gckGALDEVICE_Construct(
device->requestedRegisterMemBases[gcvCORE_VG] = RegisterMemBaseVG;
device->requestedRegisterMemSizes[gcvCORE_VG] = RegisterMemSizeVG;
}
-#if gcdDEC_ENABLE_AHB
+#if gcdENABLE_DEC_COMPRESSION
{
device->requestedRegisterMemBases[gcvCORE_DEC] = Args->registerMemBaseDEC300;
device->requestedRegisterMemSizes[gcvCORE_DEC] = Args->registerMemSizeDEC300;
@@ -1229,125 +1151,174 @@ gckGALDEVICE_Construct(
#endif
- for (i = gcvCORE_MAJOR; i < gcvCORE_COUNT; i++)
+ device->requestedContiguousBase = 0;
+ device->requestedContiguousSize = 0;
+
+ for (i = 0; i < gcdMAX_GPU_COUNT; i++)
{
- if (Args->irqs[i] != -1)
+#if gcdMULTI_GPU
+ if (i == gcvCORE_MAJOR)
{
- device->requestedRegisterMemBases[i] = Args->registerBases[i];
- device->requestedRegisterMemSizes[i] = Args->registerSizes[i];
+ for (j = 0; j < gcdMULTI_GPU; j++)
+ {
+ physical = device->requestedRegisterMemBase3D[j];
- gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DEVICE,
- "%s(%d): Core = %d, RegiseterBase = %x",
- __FUNCTION__, __LINE__,
- i, Args->registerBases[i]
- );
- }
- }
+ /* Set up register memory region. */
+ if (physical != 0)
+ {
+ mem_region = request_mem_region(physical,
+ device->requestedRegisterMemSize3D[j],
+ "galcore register region");
- /* Initialize the ISR. */
- device->irqLines[gcvCORE_MAJOR] = IrqLine;
- device->irqLines[gcvCORE_2D] = IrqLine2D;
- device->irqLines[gcvCORE_VG] = IrqLineVG;
+ if (mem_region == gcvNULL)
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_ERROR, gcvZONE_DRIVER,
+ "%s(%d): Failed to claim %lu bytes @ 0x%08X\n",
+ __FUNCTION__, __LINE__,
+ physical, device->requestedRegisterMemSize3D[j]
+ );
- for (i = gcvCORE_MAJOR; i < gcvCORE_COUNT; i++)
- {
- if (Args->irqs[i] != -1)
- {
- device->irqLines[i] = Args->irqs[i];
- }
- }
+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
+ }
- device->requestedContiguousBase = 0;
- device->requestedContiguousSize = 0;
+ device->registerBase3D[j] = (gctPOINTER) ioremap_nocache(
+ physical, device->requestedRegisterMemSize3D[j]);
- for (i = 0; i < gcdMAX_GPU_COUNT; i++)
- {
- physical = device->requestedRegisterMemBases[i];
+ if (device->registerBase3D[j] == gcvNULL)
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_ERROR, gcvZONE_DRIVER,
+ "%s(%d): Unable to map %ld bytes @ 0x%08X\n",
+ __FUNCTION__, __LINE__,
+ physical, device->requestedRegisterMemSize3D[j]
+ );
+
+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
+ }
- /* Set up register memory region. */
- if ( physical != 0)
+ physical += device->requestedRegisterMemSize3D[j];
+ }
+ else
+ {
+ device->registerBase3D[j] = gcvNULL;
+ }
+ }
+ }
+ else
+#endif
{
+ physical = device->requestedRegisterMemBases[i];
- if ( Args->registerMemMapped )
+ /* Set up register memory region. */
+ if (physical != 0)
{
- device->registerBases[i] = Args->registerMemAddress;
- device->requestedRegisterMemBases[i] = 0;
- } else {
-
- mem_region = request_mem_region(physical,
- device->requestedRegisterMemSizes[i],
- "galcore register region");
-
- if (mem_region == gcvNULL)
+ if ( Args->registerMemMapped )
{
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): Failed to claim %lu bytes @ 0x%08X\n",
- __FUNCTION__, __LINE__,
- physical, device->requestedRegisterMemSizes[i]
- );
+ device->registerBases[i] = Args->registerMemAddress;
+ device->requestedRegisterMemBases[i] = 0;
- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
- }
+ } else {
- device->registerBases[i] = (gctPOINTER) ioremap_nocache(
- physical, device->requestedRegisterMemSizes[i]);
+ mem_region = request_mem_region(physical,
+ device->requestedRegisterMemSizes[i],
+ "galcore register region");
- if (device->registerBases[i] == gcvNULL)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): Unable to map %ld bytes @ 0x%08X\n",
- __FUNCTION__, __LINE__,
- physical, device->requestedRegisterMemSizes[i]
- );
+ if (mem_region == gcvNULL)
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_ERROR, gcvZONE_DRIVER,
+ "%s(%d): Failed to claim %lu bytes @ 0x%08X\n",
+ __FUNCTION__, __LINE__,
+ physical, device->requestedRegisterMemSizes[i]
+ );
gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
+ }
+
+ device->registerBases[i] = (gctPOINTER) ioremap_nocache(
+ physical, device->requestedRegisterMemSizes[i]);
+
+ if (device->registerBases[i] == gcvNULL)
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_ERROR, gcvZONE_DRIVER,
+ "%s(%d): Unable to map %ld bytes @ 0x%08X\n",
+ __FUNCTION__, __LINE__,
+ physical, device->requestedRegisterMemSizes[i]
+ );
+
+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
+ }
}
- }
- physical += device->requestedRegisterMemSizes[i];
+ physical += device->requestedRegisterMemSizes[i];
+
+ }
}
}
/* Set the base address */
device->baseAddress = device->physBase = PhysBaseAddr;
device->physSize = PhysSize;
+ device->mmu = Args->mmu;
/* Construct the gckOS object. */
gcmkONERROR(gckOS_Construct(device, &device->os));
- /* Construct the gckDEVICE object for os independent core management. */
- gcmkONERROR(gckDEVICE_Construct(device->os, &device->device));
-
- if (device->irqLines[gcvCORE_MAJOR] != -1)
+#if gcdMULTI_GPU || gcdMULTI_GPU_AFFINITY
+ if (IrqLine3D0 != -1)
+#else
+ if (IrqLine != -1)
+#endif
{
- gcmkONERROR(gctaOS_ConstructOS(device->os, &device->taos));
- gcmkONERROR(gcTA_Construct(device->taos, &globalTA));
- }
+ /* Construct the gckKERNEL object. */
+ gcmkONERROR(gckKERNEL_Construct(
+ device->os, gcvCORE_MAJOR, device,
+ gcvNULL, &device->kernels[gcvCORE_MAJOR]));
- gcmkONERROR(_SetupVidMem(device, ContiguousBase, ContiguousSize, BankSize, Args));
+ sharedDB = device->kernels[gcvCORE_MAJOR]->db;
- if (device->irqLines[gcvCORE_MAJOR] != -1)
- {
- gcmkONERROR(gckDEVICE_AddCore(device->device, gcvCORE_MAJOR, Args->chipIDs[gcvCORE_MAJOR], device, &device->kernels[gcvCORE_MAJOR]));
+ /* Initialize core mapping */
+ for (i = 0; i < 8; i++)
+ {
+ device->coreMapping[i] = gcvCORE_MAJOR;
+ }
/* Setup the ISR manager. */
gcmkONERROR(gckHARDWARE_SetIsrManager(
device->kernels[gcvCORE_MAJOR]->hardware,
(gctISRMANAGERFUNC) gckGALDEVICE_Setup_ISR,
(gctISRMANAGERFUNC) gckGALDEVICE_Release_ISR,
- (gctPOINTER)gcvCORE_MAJOR
+ device
));
gcmkONERROR(gckHARDWARE_SetFastClear(
device->kernels[gcvCORE_MAJOR]->hardware, FastClear, Compression
));
- gcmkONERROR(gckHARDWARE_SetPowerManagement(
- device->kernels[gcvCORE_MAJOR]->hardware, PowerManagement
- ));
+ if(PowerManagement != -1)
+ {
+ gcmkONERROR(gckHARDWARE_SetPowerManagementLock(
+ device->kernels[gcvCORE_MAJOR]->hardware, gcvFALSE
+ ));
+ gcmkONERROR(gckHARDWARE_SetPowerManagement(
+ device->kernels[gcvCORE_MAJOR]->hardware, PowerManagement
+ ));
+ gcmkONERROR(gckHARDWARE_SetPowerManagementLock(
+ device->kernels[gcvCORE_MAJOR]->hardware, gcvTRUE
+ ));
+ }
+ else
+ {
+ gcmkONERROR(gckHARDWARE_SetPowerManagementLock(
+ device->kernels[gcvCORE_MAJOR]->hardware, gcvFALSE
+ ));
+ gcmkONERROR(gckHARDWARE_SetPowerManagement(
+ device->kernels[gcvCORE_MAJOR]->hardware, gcvTRUE
+ ));
+ }
#if gcdENABLE_FSCALE_VAL_ADJUST
gcmkONERROR(gckHARDWARE_SetMinFscaleValue(
@@ -1358,15 +1329,101 @@ gckGALDEVICE_Construct(
gcmkONERROR(gckHARDWARE_SetGpuProfiler(
device->kernels[gcvCORE_MAJOR]->hardware, GpuProfiler
));
+
+ gcmkVERIFY_OK(gckKERNEL_SetRecovery(
+ device->kernels[gcvCORE_MAJOR], Args->recovery, Args->stuckDump
+ ));
+
+#if COMMAND_PROCESSOR_VERSION == 1
+ /* Start the command queue. */
+ gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_MAJOR]->command));
+#endif
}
else
{
device->kernels[gcvCORE_MAJOR] = gcvNULL;
}
- if (device->irqLines[gcvCORE_2D] != -1)
+#if gcdMULTI_GPU_AFFINITY
+ if (IrqLine3D1 != -1)
{
- gcmkONERROR(gckDEVICE_AddCore(device->device, gcvCORE_2D, gcvCHIP_ID_DEFAULT, device, &device->kernels[gcvCORE_2D]));
+ /* Construct the gckKERNEL object. */
+ gcmkONERROR(gckKERNEL_Construct(
+ device->os, gcvCORE_OCL, device,
+ gcvNULL, &device->kernels[gcvCORE_OCL]));
+
+ if (sharedDB == gcvNULL) sharedDB = device->kernels[gcvCORE_OCL]->db;
+
+ /* Initialize core mapping */
+ if (device->kernels[gcvCORE_MAJOR] == gcvNULL)
+ {
+ for (i = 0; i < 8; i++)
+ {
+ device->coreMapping[i] = gcvCORE_OCL;
+ }
+ }
+ else
+ {
+ device->coreMapping[gcvHARDWARE_OCL] = gcvCORE_OCL;
+ }
+
+ /* Setup the ISR manager. */
+ gcmkONERROR(gckHARDWARE_SetIsrManager(
+ device->kernels[gcvCORE_OCL]->hardware,
+ (gctISRMANAGERFUNC) gckGALDEVICE_Setup_ISR,
+ (gctISRMANAGERFUNC) gckGALDEVICE_Release_ISR,
+ device
+ ));
+
+ gcmkONERROR(gckHARDWARE_SetFastClear(
+ device->kernels[gcvCORE_OCL]->hardware, FastClear, Compression
+ ));
+
+#if gcdENABLE_FSCALE_VAL_ADJUST
+ gcmkONERROR(gckHARDWARE_SetMinFscaleValue(
+ device->kernels[gcvCORE_OCL]->hardware, Args->gpu3DMinClock
+ ));
+#endif
+ if(PowerManagement != -1)
+ {
+ gcmkONERROR(gckHARDWARE_SetPowerManagementLock(
+ device->kernels[gcvCORE_OCL]->hardware, gcvFALSE
+ ));
+ gcmkONERROR(gckHARDWARE_SetPowerManagement(
+ device->kernels[gcvCORE_OCL]->hardware, PowerManagement
+ ));
+ gcmkONERROR(gckHARDWARE_SetPowerManagementLock(
+ device->kernels[gcvCORE_OCL]->hardware, gcvTRUE
+ ));
+ }
+ else
+ {
+ gcmkONERROR(gckHARDWARE_SetPowerManagementLock(
+ device->kernels[gcvCORE_OCL]->hardware, gcvFALSE
+ ));
+ gcmkONERROR(gckHARDWARE_SetPowerManagement(
+ device->kernels[gcvCORE_OCL]->hardware, gcvTRUE
+ ));
+ }
+
+#if COMMAND_PROCESSOR_VERSION == 1
+ /* Start the command queue. */
+ gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_OCL]->command));
+#endif
+ }
+ else
+ {
+ device->kernels[gcvCORE_OCL] = gcvNULL;
+ }
+#endif
+
+ if (IrqLine2D != -1)
+ {
+ gcmkONERROR(gckKERNEL_Construct(
+ device->os, gcvCORE_2D, device,
+ sharedDB, &device->kernels[gcvCORE_2D]));
+
+ if (sharedDB == gcvNULL) sharedDB = device->kernels[gcvCORE_2D]->db;
/* Verify the hardware type */
gcmkONERROR(gckHARDWARE_GetType(device->kernels[gcvCORE_2D]->hardware, &type));
@@ -1383,38 +1440,113 @@ gckGALDEVICE_Construct(
gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
}
+ /* Initialize core mapping */
+ if (device->kernels[gcvCORE_MAJOR] == gcvNULL
+#if gcdMULTI_GPU_AFFINITY
+ && device->kernels[gcvCORE_OCL] == gcvNULL
+#endif
+ )
+ {
+ for (i = 0; i < 8; i++)
+ {
+ device->coreMapping[i] = gcvCORE_2D;
+ }
+ }
+ else
+ {
+ device->coreMapping[gcvHARDWARE_2D] = gcvCORE_2D;
+ }
+
/* Setup the ISR manager. */
gcmkONERROR(gckHARDWARE_SetIsrManager(
device->kernels[gcvCORE_2D]->hardware,
- (gctISRMANAGERFUNC) gckGALDEVICE_Setup_ISR,
- (gctISRMANAGERFUNC) gckGALDEVICE_Release_ISR,
- (gctPOINTER)gcvCORE_2D
+ (gctISRMANAGERFUNC) gckGALDEVICE_Setup_ISR_2D,
+ (gctISRMANAGERFUNC) gckGALDEVICE_Release_ISR_2D,
+ device
));
- gcmkONERROR(gckHARDWARE_SetPowerManagement(
- device->kernels[gcvCORE_2D]->hardware, PowerManagement
- ));
+ if(PowerManagement != -1)
+ {
+ gcmkONERROR(gckHARDWARE_SetPowerManagementLock(
+ device->kernels[gcvCORE_2D]->hardware, gcvFALSE
+ ));
+ gcmkONERROR(gckHARDWARE_SetPowerManagement(
+ device->kernels[gcvCORE_2D]->hardware, PowerManagement
+ ));
+ gcmkONERROR(gckHARDWARE_SetPowerManagementLock(
+ device->kernels[gcvCORE_2D]->hardware, gcvTRUE
+ ));
+ }
+ else
+ {
+ gcmkONERROR(gckHARDWARE_SetPowerManagementLock(
+ device->kernels[gcvCORE_2D]->hardware, gcvFALSE
+ ));
+ gcmkONERROR(gckHARDWARE_SetPowerManagement(
+ device->kernels[gcvCORE_2D]->hardware, gcvTRUE
+ ));
+ }
#if gcdENABLE_FSCALE_VAL_ADJUST
gcmkONERROR(gckHARDWARE_SetMinFscaleValue(
device->kernels[gcvCORE_2D]->hardware, 1
));
#endif
+
+ gcmkVERIFY_OK(gckKERNEL_SetRecovery(
+ device->kernels[gcvCORE_2D], Args->recovery, Args->stuckDump
+ ));
+
+#if COMMAND_PROCESSOR_VERSION == 1
+ /* Start the command queue. */
+ gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_2D]->command));
+#endif
}
else
{
device->kernels[gcvCORE_2D] = gcvNULL;
}
- if (device->irqLines[gcvCORE_VG] != -1)
+ if (IrqLineVG != -1)
{
#if gcdENABLE_VG
- gcmkONERROR(gckDEVICE_AddCore(device->device, gcvCORE_VG, gcvCHIP_ID_DEFAULT, device, &device->kernels[gcvCORE_VG]));
+ gcmkONERROR(gckKERNEL_Construct(
+ device->os, gcvCORE_VG, device,
+ sharedDB, &device->kernels[gcvCORE_VG]));
+ /* Initialize core mapping */
+ if (device->kernels[gcvCORE_MAJOR] == gcvNULL
+ && device->kernels[gcvCORE_2D] == gcvNULL
+#if gcdMULTI_GPU_AFFINITY
+ && device->kernels[gcvCORE_OCL] == gcvNULL
+#endif
+ )
+ {
+ for (i = 0; i < 8; i++)
+ {
+ device->coreMapping[i] = gcvCORE_VG;
+ }
+ }
+ else
+ {
+ device->coreMapping[gcvHARDWARE_VG] = gcvCORE_VG;
+ }
+
+ if(PowerManagement != -1)
+ {
+ gcmkONERROR(gckVGHARDWARE_SetPowerManagement(
+ device->kernels[gcvCORE_VG]->vg->hardware,
+ PowerManagement
+ ));
+ }
+ else
+ {
+ gcmkONERROR(gckVGHARDWARE_SetPowerManagement(
+ device->kernels[gcvCORE_VG]->vg->hardware,
+ gcvTRUE
+ ));
+ }
+
- gcmkONERROR(gckVGHARDWARE_SetPowerManagement(
- device->kernels[gcvCORE_VG]->vg->hardware,
- PowerManagement
- ));
#endif
}
else
@@ -1422,19 +1554,37 @@ gckGALDEVICE_Construct(
device->kernels[gcvCORE_VG] = gcvNULL;
}
- /* Add core for multiple core. */
- for (i = gcvCORE_3D1; i <= gcvCORE_3D3; i++)
- {
- if (Args->irqs[i] != -1)
- {
- gckDEVICE_AddCore(device->device, i, Args->chipIDs[i], device, &device->kernels[i]);
- }
- }
+ /* Initialize the ISR. */
+#if gcdMULTI_GPU
+ device->irqLine3D[gcvCORE_3D_0_ID] = IrqLine3D0;
+#if gcdMULTI_GPU > 1
+ device->irqLine3D[gcvCORE_3D_1_ID] = IrqLine3D1;
+#endif
+#elif gcdMULTI_GPU_AFFINITY
+ device->irqLines[gcvCORE_MAJOR] = IrqLine3D0;
+ device->irqLines[gcvCORE_OCL] = IrqLine3D1;
+#else
+ device->irqLines[gcvCORE_MAJOR] = IrqLine;
+#endif
+ device->irqLines[gcvCORE_2D] = IrqLine2D;
+ device->irqLines[gcvCORE_VG] = IrqLineVG;
/* Initialize the kernel thread semaphores. */
for (i = 0; i < gcdMAX_GPU_COUNT; i++)
{
- if (device->irqLines[i] != -1) sema_init(&device->semas[i], 0);
+#if gcdMULTI_GPU
+ if (i == gcvCORE_MAJOR)
+ {
+ for (j = 0; j < gcdMULTI_GPU; j++)
+ {
+ if (device->irqLine3D[j] != -1) init_waitqueue_head(&device->intrWaitQueue3D[j]);
+ }
+ }
+ else
+#endif
+ {
+ if (device->irqLines[i] != -1) sema_init(&device->semas[i], 0);
+ }
}
device->signal = Signal;
@@ -1489,10 +1639,26 @@ gckGALDEVICE_Construct(
/* Grab the first availiable kernel */
for (i = 0; i < gcdMAX_GPU_COUNT; i++)
{
- if (device->irqLines[i] != -1)
+#if gcdMULTI_GPU
+ if (i == gcvCORE_MAJOR)
{
- kernel = device->kernels[i];
- break;
+ for (j = 0; j < gcdMULTI_GPU; j++)
+ {
+ if (device->irqLine3D[j] != -1)
+ {
+ kernel = device->kernels[i];
+ break;
+ }
+ }
+ }
+ else
+#endif
+ {
+ if (device->irqLines[i] != -1)
+ {
+ kernel = device->kernels[i];
+ break;
+ }
}
}
@@ -1558,13 +1724,114 @@ gckGALDEVICE_Construct(
}
}
- if (device->contiguousPhysical)
+ /* set up the contiguous memory */
+ device->contiguousSize = ContiguousSize;
+
+ if (ContiguousSize > 0)
{
- device->contiguousPhysicalName = gcmPTR_TO_NAME(device->contiguousPhysical);
+ if (ContiguousBase == 0)
+ {
+ while (device->contiguousSize > 0)
+ {
+ /* Allocate contiguous memory. */
+ status = _AllocateMemory(
+ device,
+ device->contiguousSize,
+ &device->contiguousBase,
+ &device->contiguousPhysical,
+ &physAddr
+ );
+
+ if (gcmIS_SUCCESS(status))
+ {
+ device->contiguousPhysicalName = gcmPTR_TO_NAME(device->contiguousPhysical);
+ status = gckVIDMEM_Construct(
+ device->os,
+ physAddr | device->systemMemoryBaseAddress,
+ device->contiguousSize,
+ 64,
+ BankSize,
+ &device->contiguousVidMem
+ );
+
+ if (gcmIS_SUCCESS(status))
+ {
+ break;
+ }
+
+ gcmkONERROR(_FreeMemory(
+ device,
+ device->contiguousBase,
+ device->contiguousPhysical
+ ));
+
+ gcmRELEASE_NAME(device->contiguousPhysicalName);
+ device->contiguousBase = gcvNULL;
+ device->contiguousPhysical = gcvNULL;
+ }
+
+ if (device->contiguousSize <= (4 << 20))
+ {
+ device->contiguousSize = 0;
+ }
+ else
+ {
+ device->contiguousSize -= (4 << 20);
+ }
+ }
+ }
+ else
+ {
+ /* Create the contiguous memory heap. */
+ status = gckVIDMEM_Construct(
+ device->os,
+ ContiguousBase | device->systemMemoryBaseAddress,
+ ContiguousSize,
+ 64, BankSize,
+ &device->contiguousVidMem
+ );
+
+ if (gcmIS_ERROR(status))
+ {
+ /* Error, disable contiguous memory pool. */
+ device->contiguousVidMem = gcvNULL;
+ device->contiguousSize = 0;
+ }
+ else
+ {
+ if (Args->contiguousRequested == gcvFALSE)
+ {
+ mem_region = request_mem_region(
+ ContiguousBase, ContiguousSize, "galcore managed memory"
+ );
+
+ if (mem_region == gcvNULL)
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_ERROR, gcvZONE_DRIVER,
+ "%s(%d): Failed to claim %ld bytes @ 0x%08X\n",
+ __FUNCTION__, __LINE__,
+ ContiguousSize, ContiguousBase
+ );
+
+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
+ }
+ }
+
+ device->requestedContiguousBase = ContiguousBase;
+ device->requestedContiguousSize = ContiguousSize;
+ device->contiguousRequested = Args->contiguousRequested;
+
+ device->contiguousPhysical = gcvNULL;
+ device->contiguousPhysicalName = 0;
+ device->contiguousSize = ContiguousSize;
+ device->contiguousMapped = gcvTRUE;
+ }
+ }
}
/* Return pointer to the device. */
- *Device = galDevice = device;
+ *Device = device;
gcmkFOOTER_ARG("*Device=0x%x", * Device);
return gcvSTATUS_OK;
@@ -1600,6 +1867,9 @@ gckGALDEVICE_Destroy(
gckGALDEVICE Device)
{
gctINT i;
+#if gcdMULTI_GPU
+ gctINT j;
+#endif
gckKERNEL kernel = gcvNULL;
gcmkHEADER_ARG("Device=0x%x", Device);
@@ -1609,10 +1879,26 @@ gckGALDEVICE_Destroy(
/* Grab the first availiable kernel */
for (i = 0; i < gcdMAX_GPU_COUNT; i++)
{
- if (Device->irqLines[i] != -1)
+#if gcdMULTI_GPU
+ if (i == gcvCORE_MAJOR)
{
- kernel = Device->kernels[i];
- break;
+ for (j = 0; j < gcdMULTI_GPU; j++)
+ {
+ if (Device->irqLine3D[j] != -1)
+ {
+ kernel = Device->kernels[i];
+ break;
+ }
+ }
+ }
+ else
+#endif
+ {
+ if (Device->irqLines[i] != -1)
+ {
+ kernel = Device->kernels[i];
+ break;
+ }
}
}
@@ -1637,6 +1923,8 @@ gckGALDEVICE_Destroy(
{
if (Device->kernels[i] != gcvNULL)
{
+ /* Destroy the gckKERNEL object. */
+ gcmkVERIFY_OK(gckKERNEL_Destroy(Device->kernels[i]));
Device->kernels[i] = gcvNULL;
}
}
@@ -1700,42 +1988,60 @@ gckGALDEVICE_Destroy(
Device->contiguousVidMem = gcvNULL;
}
- for (i = 0; i < gcdMAX_GPU_COUNT; i++)
+ if (Device->dbgNode)
{
- if (Device->registerBases[i] != gcvNULL)
- {
- /* Unmap register memory. */
- if ( Device->requestedRegisterMemBases[i] != 0 )
- iounmap(Device->registerBases[i]);
-
- if (Device->requestedRegisterMemBases[i] != 0)
- {
- release_mem_region(Device->requestedRegisterMemBases[i],
- Device->requestedRegisterMemSizes[i]);
- }
+ gckDEBUGFS_FreeNode(Device->dbgNode);
- Device->registerBases[i] = gcvNULL;
- Device->requestedRegisterMemBases[i] = 0;
- Device->requestedRegisterMemSizes[i] = 0;
+ if(Device->dbgNode != gcvNULL)
+ {
+ kfree(Device->dbgNode);
+ Device->dbgNode = gcvNULL;
}
}
- if (Device->device)
+ for (i = 0; i < gcdMAX_GPU_COUNT; i++)
{
- gcmkVERIFY_OK(gckDEVICE_Destroy(Device->os, Device->device));
- Device->device = gcvNULL;
- }
+#if gcdMULTI_GPU
+ if (i == gcvCORE_MAJOR)
+ {
+ for (j = 0; j < gcdMULTI_GPU; j++)
+ {
+ if (Device->registerBase3D[j] != gcvNULL)
+ {
+ /* Unmap register memory. */
+ iounmap(Device->registerBase3D[j]);
+ if (Device->requestedRegisterMemBase3D[j] != 0)
+ {
+ release_mem_region(Device->requestedRegisterMemBase3D[j],
+ Device->requestedRegisterMemSize3D[j]);
+ }
+
+ Device->registerBase3D[j] = gcvNULL;
+ Device->requestedRegisterMemBase3D[j] = 0;
+ Device->requestedRegisterMemSize3D[j] = 0;
+ }
+ }
+ }
+ else
+#endif
+ {
+ if (Device->registerBases[i] != gcvNULL)
+ {
+ /* Unmap register memory. */
+ if (Device->requestedRegisterMemBases[i] != 0)
+ iounmap(Device->registerBases[i]);
- if (globalTA)
- {
- gcTA_Destroy(globalTA);
- globalTA = gcvNULL;
- }
+ if (Device->requestedRegisterMemBases[i] != 0)
+ {
+ release_mem_region(Device->requestedRegisterMemBases[i],
+ Device->requestedRegisterMemSizes[i]);
+ }
- if (Device->taos)
- {
- gcmkVERIFY_OK(gctaOS_DestroyOS(Device->taos));
- Device->taos = gcvNULL;
+ Device->registerBases[i] = gcvNULL;
+ Device->requestedRegisterMemBases[i] = 0;
+ Device->requestedRegisterMemSizes[i] = 0;
+ }
+ }
}
/* Destroy the gckOS object. */
@@ -1745,17 +2051,6 @@ gckGALDEVICE_Destroy(
Device->os = gcvNULL;
}
- if (Device->dbgNode)
- {
- gckDEBUGFS_FreeNode(Device->dbgNode);
-
- if(Device->dbgNode != gcvNULL)
- {
- kfree(Device->dbgNode);
- Device->dbgNode = gcvNULL;
- }
- }
-
_DebugfsCleanup(Device);
/* Free the device. */
@@ -1790,18 +2085,17 @@ gckGALDEVICE_Destroy(
*/
gceSTATUS
gckGALDEVICE_Setup_ISR(
- IN gceCORE Core
+ IN gckGALDEVICE Device
)
{
gceSTATUS status;
gctINT ret = 0;
- gckGALDEVICE Device = galDevice;
- gcmkHEADER_ARG("Device=0x%x Core=%d", Device, Core);
+ gcmkHEADER_ARG("Device=0x%x", Device);
gcmkVERIFY_ARGUMENT(Device != NULL);
- if (Device->irqLines[Core] < 0)
+ if (Device->irqLines[gcvCORE_MAJOR] < 0)
{
gcmkONERROR(gcvSTATUS_GENERIC_IO);
}
@@ -1818,9 +2112,92 @@ gckGALDEVICE_Setup_ISR(
DOVE_GPIO0_7, &gc500_handle
);
#else
+#if gcdMULTI_GPU
+ ret = request_irq(
+ Device->irqLine3D[gcvCORE_3D_0_ID], isrRoutine3D0, gcdIRQF_FLAG,
+ "galcore_3d_0", Device
+ );
+
+ if (ret != 0)
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_ERROR, gcvZONE_DRIVER,
+ "%s(%d): Could not register irq line %d (error=%d)\n",
+ __FUNCTION__, __LINE__,
+ Device->irqLine3D[gcvCORE_3D_0_ID], ret
+ );
+
+ gcmkONERROR(gcvSTATUS_GENERIC_IO);
+ }
+
+ /* Mark ISR as initialized. */
+ Device->isrInitialized3D[gcvCORE_3D_0_ID] = gcvTRUE;
+
+#if gcdMULTI_GPU > 1
+ ret = request_irq(
+ Device->irqLine3D[gcvCORE_3D_1_ID], isrRoutine3D1, gcdIRQF_FLAG,
+ "galcore_3d_1", Device
+ );
+
+ if (ret != 0)
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_ERROR, gcvZONE_DRIVER,
+ "%s(%d): Could not register irq line %d (error=%d)\n",
+ __FUNCTION__, __LINE__,
+ Device->irqLine3D[gcvCORE_3D_1_ID], ret
+ );
+
+ gcmkONERROR(gcvSTATUS_GENERIC_IO);
+ }
+
+ /* Mark ISR as initialized. */
+ Device->isrInitialized3D[gcvCORE_3D_1_ID] = gcvTRUE;
+#endif
+#elif gcdMULTI_GPU_AFFINITY
+ ret = request_irq(
+ Device->irqLines[gcvCORE_MAJOR], isrRoutine3D0, gcdIRQF_FLAG,
+ "galcore_3d_0", Device
+ );
+
+ if (ret != 0)
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_ERROR, gcvZONE_DRIVER,
+ "%s(%d): Could not register irq line %d (error=%d)\n",
+ __FUNCTION__, __LINE__,
+ Device->irqLines[gcvCORE_MAJOR], ret
+ );
+
+ gcmkONERROR(gcvSTATUS_GENERIC_IO);
+ }
+
+ /* Mark ISR as initialized. */
+ Device->isrInitializeds[gcvCORE_MAJOR] = gcvTRUE;
+
+ ret = request_irq(
+ Device->irqLines[gcvCORE_OCL], isrRoutine3D1, gcdIRQF_FLAG,
+ "galcore_3d_1", Device
+ );
+
+ if (ret != 0)
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_ERROR, gcvZONE_DRIVER,
+ "%s(%d): Could not register irq line %d (error=%d)\n",
+ __FUNCTION__, __LINE__,
+ Device->irqLines[gcvCORE_OCL], ret
+ );
+
+ gcmkONERROR(gcvSTATUS_GENERIC_IO);
+ }
+
+ /* Mark ISR as initialized. */
+ Device->isrInitializeds[gcvCORE_OCL] = gcvTRUE;
+#else
ret = request_irq(
- Device->irqLines[Core], isrRoutine, gcdIRQF_FLAG,
- "galcore interrupt service", (gctPOINTER)Core
+ Device->irqLines[gcvCORE_MAJOR], isrRoutine, gcdIRQF_FLAG,
+ "galcore interrupt service", Device
);
if (ret != 0)
@@ -1829,16 +2206,75 @@ gckGALDEVICE_Setup_ISR(
gcvLEVEL_ERROR, gcvZONE_DRIVER,
"%s(%d): Could not register irq line %d (error=%d)\n",
__FUNCTION__, __LINE__,
- Device->irqLines[Core], ret
+ Device->irqLines[gcvCORE_MAJOR], ret
);
gcmkONERROR(gcvSTATUS_GENERIC_IO);
}
/* Mark ISR as initialized. */
- Device->isrInitializeds[Core] = gcvTRUE;
+ Device->isrInitializeds[gcvCORE_MAJOR] = gcvTRUE;
+#endif
+#endif
+
+ gcmkFOOTER_NO();
+ return gcvSTATUS_OK;
+
+OnError:
+ gcmkFOOTER();
+ return status;
+}
+
+gceSTATUS
+gckGALDEVICE_Setup_ISR_2D(
+ IN gckGALDEVICE Device
+ )
+{
+ gceSTATUS status;
+ gctINT ret;
+
+ gcmkHEADER_ARG("Device=0x%x", Device);
+
+ gcmkVERIFY_ARGUMENT(Device != NULL);
+
+ if (Device->irqLines[gcvCORE_2D] < 0)
+ {
+ gcmkONERROR(gcvSTATUS_GENERIC_IO);
+ }
+
+ /* Hook up the isr based on the irq line. */
+#ifdef FLAREON
+ gc500_handle.dev_name = "galcore interrupt service";
+ gc500_handle.dev_id = Device;
+ gc500_handle.handler = isrRoutine2D;
+ gc500_handle.intr_gen = GPIO_INTR_LEVEL_TRIGGER;
+ gc500_handle.intr_trig = GPIO_TRIG_HIGH_LEVEL;
+
+ ret = dove_gpio_request(
+ DOVE_GPIO0_7, &gc500_handle
+ );
+#else
+ ret = request_irq(
+ Device->irqLines[gcvCORE_2D], isrRoutine2D, gcdIRQF_FLAG,
+ "galcore interrupt service for 2D", Device
+ );
#endif
+ if (ret != 0)
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_ERROR, gcvZONE_DRIVER,
+ "%s(%d): Could not register irq line %d (error=%d)\n",
+ __FUNCTION__, __LINE__,
+ Device->irqLines[gcvCORE_2D], ret
+ );
+
+ gcmkONERROR(gcvSTATUS_GENERIC_IO);
+ }
+
+ /* Mark ISR as initialized. */
+ Device->isrInitializeds[gcvCORE_2D] = gcvTRUE;
+
gcmkFOOTER_NO();
return gcvSTATUS_OK;
@@ -1926,23 +2362,64 @@ OnError:
*/
gceSTATUS
gckGALDEVICE_Release_ISR(
- IN gceCORE Core
+ IN gckGALDEVICE Device
+ )
+{
+ gcmkHEADER_ARG("Device=0x%x", Device);
+
+ gcmkVERIFY_ARGUMENT(Device != NULL);
+
+#if gcdMULTI_GPU
+ /* release the irq */
+ if (Device->isrInitialized3D[gcvCORE_3D_0_ID])
+ {
+ free_irq(Device->irqLine3D[gcvCORE_3D_0_ID], Device);
+ Device->isrInitialized3D[gcvCORE_3D_0_ID] = gcvFALSE;
+ }
+#if gcdMULTI_GPU > 1
+ /* release the irq */
+ if (Device->isrInitialized3D[gcvCORE_3D_1_ID])
+ {
+ free_irq(Device->irqLine3D[gcvCORE_3D_1_ID], Device);
+ Device->isrInitialized3D[gcvCORE_3D_1_ID] = gcvFALSE;
+ }
+#endif
+#else
+ /* release the irq */
+ if (Device->isrInitializeds[gcvCORE_MAJOR])
+ {
+#ifdef FLAREON
+ dove_gpio_free(DOVE_GPIO0_7, "galcore interrupt service");
+#else
+ free_irq(Device->irqLines[gcvCORE_MAJOR], Device);
+#endif
+ Device->isrInitializeds[gcvCORE_MAJOR] = gcvFALSE;
+ }
+#endif
+
+ gcmkFOOTER_NO();
+ return gcvSTATUS_OK;
+}
+
+gceSTATUS
+gckGALDEVICE_Release_ISR_2D(
+ IN gckGALDEVICE Device
)
{
- gckGALDEVICE Device = galDevice;
gcmkHEADER_ARG("Device=0x%x", Device);
gcmkVERIFY_ARGUMENT(Device != NULL);
/* release the irq */
- if (Device->isrInitializeds[Core])
+ if (Device->isrInitializeds[gcvCORE_2D])
{
#ifdef FLAREON
dove_gpio_free(DOVE_GPIO0_7, "galcore interrupt service");
#else
- free_irq(Device->irqLines[Core], (gctPOINTER)Core);
+ free_irq(Device->irqLines[gcvCORE_2D], Device);
#endif
- Device->isrInitializeds[Core] = gcvFALSE;
+
+ Device->isrInitializeds[gcvCORE_2D] = gcvFALSE;
}
gcmkFOOTER_NO();
@@ -2008,10 +2485,90 @@ gckGALDEVICE_Start_Threads(
gcmkVERIFY_ARGUMENT(Device != NULL);
+#if gcdMULTI_GPU
+ if (Device->kernels[gcvCORE_MAJOR] != gcvNULL)
+ {
+ /* Start the kernel thread. */
+ task = kthread_run(threadRoutine3D0, Device, "galcore_3d_0");
+
+ if (IS_ERR(task))
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_ERROR, gcvZONE_DRIVER,
+ "%s(%d): Could not start the kernel thread.\n",
+ __FUNCTION__, __LINE__
+ );
+
+ gcmkONERROR(gcvSTATUS_GENERIC_IO);
+ }
+
+ Device->threadCtxt3D[gcvCORE_3D_0_ID] = task;
+ Device->threadInitialized3D[gcvCORE_3D_0_ID] = gcvTRUE;
+
+#if gcdMULTI_GPU > 1
+ /* Start the kernel thread. */
+ task = kthread_run(threadRoutine3D1, Device, "galcore_3d_1");
+
+ if (IS_ERR(task))
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_ERROR, gcvZONE_DRIVER,
+ "%s(%d): Could not start the kernel thread.\n",
+ __FUNCTION__, __LINE__
+ );
+
+ gcmkONERROR(gcvSTATUS_GENERIC_IO);
+ }
+
+ Device->threadCtxt3D[gcvCORE_3D_1_ID] = task;
+ Device->threadInitialized3D[gcvCORE_3D_1_ID] = gcvTRUE;
+#endif
+ }
+#elif gcdMULTI_GPU_AFFINITY
+ if (Device->kernels[gcvCORE_MAJOR] != gcvNULL)
+ {
+ /* Start the kernel thread. */
+ task = kthread_run(threadRoutine3D0, Device, "galcore_3d_0");
+
+ if (IS_ERR(task))
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_ERROR, gcvZONE_DRIVER,
+ "%s(%d): Could not start the kernel thread.\n",
+ __FUNCTION__, __LINE__
+ );
+
+ gcmkONERROR(gcvSTATUS_GENERIC_IO);
+ }
+
+ Device->threadCtxts[gcvCORE_MAJOR] = task;
+ Device->threadInitializeds[gcvCORE_MAJOR] = gcvTRUE;
+ }
+
+ if (Device->kernels[gcvCORE_OCL] != gcvNULL)
+ {
+ /* Start the kernel thread. */
+ task = kthread_run(threadRoutine3D1, Device, "galcore_3d_1");
+
+ if (IS_ERR(task))
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_ERROR, gcvZONE_DRIVER,
+ "%s(%d): Could not start the kernel thread.\n",
+ __FUNCTION__, __LINE__
+ );
+
+ gcmkONERROR(gcvSTATUS_GENERIC_IO);
+ }
+
+ Device->threadCtxts[gcvCORE_OCL] = task;
+ Device->threadInitializeds[gcvCORE_OCL] = gcvTRUE;
+ }
+#else
if (Device->kernels[gcvCORE_MAJOR] != gcvNULL)
{
/* Start the kernel thread. */
- task = kthread_run(threadRoutine, gcvCORE_MAJOR, "galcore daemon thread");
+ task = kthread_run(threadRoutine, Device, "galcore daemon thread");
if (IS_ERR(task))
{
@@ -2027,11 +2584,12 @@ gckGALDEVICE_Start_Threads(
Device->threadCtxts[gcvCORE_MAJOR] = task;
Device->threadInitializeds[gcvCORE_MAJOR] = gcvTRUE;
}
+#endif
if (Device->kernels[gcvCORE_2D] != gcvNULL)
{
/* Start the kernel thread. */
- task = kthread_run(threadRoutine, (void *)gcvCORE_2D, "galcore daemon thread for 2D");
+ task = kthread_run(threadRoutine2D, Device, "galcore daemon thread for 2D");
if (IS_ERR(task))
{
@@ -2076,38 +2634,6 @@ gckGALDEVICE_Start_Threads(
Device->threadInitializeds[gcvCORE_VG] = gcvFALSE;
}
- {
- gctUINTPTR_T i = gcvCORE_3D1;
-
- for (; i <= gcvCORE_3D3; i++)
- {
- if (Device->kernels[i])
- {
- /* Start the kernel thread. */
- task = kthread_run(threadRoutine, (void *)i, "galcore daemon thread");
-
- if (IS_ERR(task))
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): Could not start the kernel thread.\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_GENERIC_IO);
- }
-
- Device->threadCtxts[i] = task;
- Device->threadInitializeds[i] = gcvTRUE;
-
- }
- else
- {
- Device->threadInitializeds[i] = gcvFALSE;
- }
- }
- }
-
gcmkFOOTER_NO();
return gcvSTATUS_OK;
@@ -2142,6 +2668,9 @@ gckGALDEVICE_Stop_Threads(
)
{
gctINT i;
+#if gcdMULTI_GPU
+ gctINT j;
+#endif
gcmkHEADER_ARG("Device=0x%x", Device);
@@ -2149,15 +2678,37 @@ gckGALDEVICE_Stop_Threads(
for (i = 0; i < gcdMAX_GPU_COUNT; i++)
{
- /* Stop the kernel threads. */
- if (Device->threadInitializeds[i])
+#if gcdMULTI_GPU
+ if (i == gcvCORE_MAJOR)
{
- Device->killThread = gcvTRUE;
- up(&Device->semas[i]);
+ for (j = 0; j < gcdMULTI_GPU; j++)
+ {
+ /* Stop the kernel threads. */
+ if (Device->threadInitialized3D[j])
+ {
+ Device->killThread = gcvTRUE;
+ Device->dataReady3D[j] = gcvTRUE;
+ wake_up_interruptible(&Device->intrWaitQueue3D[j]);
- kthread_stop(Device->threadCtxts[i]);
- Device->threadCtxts[i] = gcvNULL;
- Device->threadInitializeds[i] = gcvFALSE;
+ kthread_stop(Device->threadCtxt3D[j]);
+ Device->threadCtxt3D[j] = gcvNULL;
+ Device->threadInitialized3D[j] = gcvFALSE;
+ }
+ }
+ }
+ else
+#endif
+ {
+ /* Stop the kernel threads. */
+ if (Device->threadInitializeds[i])
+ {
+ Device->killThread = gcvTRUE;
+ up(&Device->semas[i]);
+
+ kthread_stop(Device->threadCtxts[i]);
+ Device->threadCtxts[i] = gcvNULL;
+ Device->threadInitializeds[i] = gcvFALSE;
+ }
}
}
@@ -2192,30 +2743,32 @@ gckGALDEVICE_Start(
)
{
gceSTATUS status;
- gctUINT i;
gcmkHEADER_ARG("Device=0x%x", Device);
/* Start the kernel thread. */
gcmkONERROR(gckGALDEVICE_Start_Threads(Device));
- for (i = 0; i < gcvCORE_COUNT; i++)
+ if (Device->kernels[gcvCORE_MAJOR] != gcvNULL)
{
- if (i == gcvCORE_VG)
- {
- continue;
- }
+ /* Setup the ISR routine. */
+ gcmkONERROR(gckGALDEVICE_Setup_ISR(Device));
- if (Device->kernels[i] != gcvNULL)
- {
- /* Setup the ISR routine. */
- gcmkONERROR(gckGALDEVICE_Setup_ISR(i));
+ /* Switch to SUSPEND power state. */
+ gcmkONERROR(gckHARDWARE_SetPowerManagementState(
+ Device->kernels[gcvCORE_MAJOR]->hardware, gcvPOWER_OFF_BROADCAST
+ ));
+ }
- /* Switch to SUSPEND power state. */
- gcmkONERROR(gckHARDWARE_SetPowerManagementState(
- Device->kernels[i]->hardware, gcvPOWER_OFF_BROADCAST
- ));
- }
+ if (Device->kernels[gcvCORE_2D] != gcvNULL)
+ {
+ /* Setup the ISR routine. */
+ gcmkONERROR(gckGALDEVICE_Setup_ISR_2D(Device));
+
+ /* Switch to SUSPEND power state. */
+ gcmkONERROR(gckHARDWARE_SetPowerManagementState(
+ Device->kernels[gcvCORE_2D]->hardware, gcvPOWER_OFF_BROADCAST
+ ));
}
if (Device->kernels[gcvCORE_VG] != gcvNULL)
@@ -2265,29 +2818,31 @@ gckGALDEVICE_Stop(
)
{
gceSTATUS status;
- gctUINT i;
gcmkHEADER_ARG("Device=0x%x", Device);
gcmkVERIFY_ARGUMENT(Device != NULL);
- for (i = 0; i < gcvCORE_COUNT; i++)
+ if (Device->kernels[gcvCORE_MAJOR] != gcvNULL)
{
- if (i == gcvCORE_VG)
- {
- continue;
- }
+ /* Switch to OFF power state. */
+ gcmkONERROR(gckHARDWARE_SetPowerManagementState(
+ Device->kernels[gcvCORE_MAJOR]->hardware, gcvPOWER_OFF
+ ));
- if (Device->kernels[i] != gcvNULL)
- {
- /* Switch to OFF power state. */
- gcmkONERROR(gckHARDWARE_SetPowerManagementState(
- Device->kernels[i]->hardware, gcvPOWER_OFF
- ));
+ /* Remove the ISR routine. */
+ gcmkONERROR(gckGALDEVICE_Release_ISR(Device));
+ }
- /* Remove the ISR routine. */
- gcmkONERROR(gckGALDEVICE_Release_ISR(i));
- }
+ if (Device->kernels[gcvCORE_2D] != gcvNULL)
+ {
+ /* Setup the ISR routine. */
+ gcmkONERROR(gckGALDEVICE_Release_ISR_2D(Device));
+
+ /* Switch to OFF power state. */
+ gcmkONERROR(gckHARDWARE_SetPowerManagementState(
+ Device->kernels[gcvCORE_2D]->hardware, gcvPOWER_OFF
+ ));
}
if (Device->kernels[gcvCORE_VG] != gcvNULL)
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
index 581375786aa0..38482d91939e 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
@@ -57,34 +57,9 @@
#define __gc_hal_kernel_device_h_
#include "gc_hal_kernel_debugfs.h"
-#include "gc_hal_ta.h"
-
-typedef struct _gcsDEVICE_CONSTRUCT_ARGS
-{
- gctBOOL recovery;
- gctUINT stuckDump;
- gctUINT gpu3DMinClock;
-
- gctBOOL contiguousRequested;
- gcsPLATFORM* platform;
- gctBOOL mmu;
- gctBOOL registerMemMapped;
- gctPOINTER registerMemAddress;
-#if gcdDEC_ENABLE_AHB
- gctUINT32 registerMemBaseDEC300;
- gctSIZE_T registerMemSizeDEC300;
-#endif
- gctINT irqs[gcvCORE_COUNT];
- gctUINT registerBases[gcvCORE_COUNT];
- gctUINT registerSizes[gcvCORE_COUNT];
- gctBOOL powerManagement;
- gctBOOL gpuProfiler;
- gctUINT chipIDs[gcvCORE_COUNT];
-}
-gcsDEVICE_CONSTRUCT_ARGS;
/******************************************************************************\
-************************** gckGALDEVICE Structure ******************************
+******************************* gckGALDEVICE Structure *******************************
\******************************************************************************/
typedef struct _gckGALDEVICE
@@ -116,21 +91,40 @@ typedef struct _gckGALDEVICE
gctBOOL contiguousRequested;
gctSIZE_T systemMemorySize;
gctUINT32 systemMemoryBaseAddress;
+#if gcdMULTI_GPU
+ gctPOINTER registerBase3D[gcdMULTI_GPU];
+ gctSIZE_T registerSize3D[gcdMULTI_GPU];
+#endif
gctPOINTER registerBases[gcdMAX_GPU_COUNT];
gctSIZE_T registerSizes[gcdMAX_GPU_COUNT];
gctUINT32 baseAddress;
gctUINT32 physBase;
gctUINT32 physSize;
+ gctBOOL mmu;
+#if gcdMULTI_GPU
+ gctUINT32 requestedRegisterMemBase3D[gcdMULTI_GPU];
+ gctSIZE_T requestedRegisterMemSize3D[gcdMULTI_GPU];
+#endif
gctUINT32 requestedRegisterMemBases[gcdMAX_GPU_COUNT];
gctSIZE_T requestedRegisterMemSizes[gcdMAX_GPU_COUNT];
gctUINT32 requestedContiguousBase;
gctSIZE_T requestedContiguousSize;
/* IRQ management. */
+#if gcdMULTI_GPU
+ gctINT irqLine3D[gcdMULTI_GPU];
+ gctBOOL isrInitialized3D[gcdMULTI_GPU];
+ gctBOOL dataReady3D[gcdMULTI_GPU];
+#endif
gctINT irqLines[gcdMAX_GPU_COUNT];
gctBOOL isrInitializeds[gcdMAX_GPU_COUNT];
/* Thread management. */
+#if gcdMULTI_GPU
+ struct task_struct *threadCtxt3D[gcdMULTI_GPU];
+ wait_queue_head_t intrWaitQueue3D[gcdMULTI_GPU];
+ gctBOOL threadInitialized3D[gcdMULTI_GPU];
+#endif
struct task_struct *threadCtxts[gcdMAX_GPU_COUNT];
struct semaphore semas[gcdMAX_GPU_COUNT];
gctBOOL threadInitializeds[gcdMAX_GPU_COUNT];
@@ -139,6 +133,9 @@ typedef struct _gckGALDEVICE
/* Signal management. */
gctINT signal;
+ /* Core mapping */
+ gceCORE coreMapping[8];
+
/* States before suspend. */
gceCHIPPOWERSTATE statesStored[gcdMAX_GPU_COUNT];
@@ -146,13 +143,6 @@ typedef struct _gckGALDEVICE
struct _gcsDEBUGFS_Node * dbgNode;
gcsDEBUGFS_DIR debugfsDir;
-
- gckDEVICE device;
-
- gcsDEVICE_CONSTRUCT_ARGS args;
-
- /* gctsOs object for trust application. */
- gctaOS taos;
}
* gckGALDEVICE;
@@ -166,8 +156,31 @@ typedef struct _gcsHAL_PRIVATE_DATA
}
gcsHAL_PRIVATE_DATA, * gcsHAL_PRIVATE_DATA_PTR;
+typedef struct _gcsDEVICE_CONSTRUCT_ARGS
+{
+ gctBOOL recovery;
+ gctUINT stuckDump;
+ gctUINT gpu3DMinClock;
+
+ gctBOOL contiguousRequested;
+ gcsPLATFORM* platform;
+ gctBOOL mmu;
+ gctBOOL registerMemMapped;
+ gctPOINTER registerMemAddress;
+#if gcdENABLE_DEC_COMPRESSION
+ gctUINT32 registerMemBaseDEC300;
+ gctSIZE_T registerMemSizeDEC300;
+#endif
+}
+
+gcsDEVICE_CONSTRUCT_ARGS;
+
gceSTATUS gckGALDEVICE_Setup_ISR(
- IN gceCORE Core
+ IN gckGALDEVICE Device
+ );
+
+gceSTATUS gckGALDEVICE_Setup_ISR_2D(
+ IN gckGALDEVICE Device
);
gceSTATUS gckGALDEVICE_Setup_ISR_VG(
@@ -175,7 +188,11 @@ gceSTATUS gckGALDEVICE_Setup_ISR_VG(
);
gceSTATUS gckGALDEVICE_Release_ISR(
- IN gceCORE Core
+ IN gckGALDEVICE Device
+ );
+
+gceSTATUS gckGALDEVICE_Release_ISR_2D(
+ IN gckGALDEVICE Device
);
gceSTATUS gckGALDEVICE_Release_ISR_VG(
@@ -199,9 +216,18 @@ gceSTATUS gckGALDEVICE_Stop(
);
gceSTATUS gckGALDEVICE_Construct(
+#if gcdMULTI_GPU || gcdMULTI_GPU_AFFINITY
+ IN gctINT IrqLine3D0,
+ IN gctUINT32 RegisterMemBase3D0,
+ IN gctSIZE_T RegisterMemSize3D0,
+ IN gctINT IrqLine3D1,
+ IN gctUINT32 RegisterMemBase3D1,
+ IN gctSIZE_T RegisterMemSize3D1,
+#else
IN gctINT IrqLine,
IN gctUINT32 RegisterMemBase,
IN gctSIZE_T RegisterMemSize,
+#endif
IN gctINT IrqLine2D,
IN gctUINT32 RegisterMemBase2D,
IN gctSIZE_T RegisterMemSize2D,
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
deleted file mode 100644
index 6386484e82e8..000000000000
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
+++ /dev/null
@@ -1,1379 +0,0 @@
-/****************************************************************************
-*
-* The MIT License (MIT)
-*
-* Copyright (c) 2014 - 2016 Vivante Corporation
-*
-* Permission is hereby granted, free of charge, to any person obtaining a
-* copy of this software and associated documentation files (the "Software"),
-* to deal in the Software without restriction, including without limitation
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,
-* and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-* DEALINGS IN THE SOFTWARE.
-*
-*****************************************************************************
-*
-* The GPL License (GPL)
-*
-* Copyright (C) 2014 - 2016 Vivante Corporation
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software Foundation,
-* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*
-*****************************************************************************
-*
-* Note: This software is released under dual MIT and GPL licenses. A
-* recipient may use this file under the terms of either the MIT license or
-* GPL License. If you wish to use only one license not the other, you can
-* indicate your decision by deleting one of the above license notices in your
-* version of this file.
-*
-*****************************************************************************/
-
-
-#include <linux/device.h>
-#include <linux/slab.h>
-
-#include "gc_hal_kernel_linux.h"
-#include "gc_hal_driver.h"
-
-#include <linux/platform_device.h>
-
-/* Zone used for header/footer. */
-#define _GC_OBJ_ZONE gcvZONE_DRIVER
-
-MODULE_DESCRIPTION("Vivante Graphics Driver");
-MODULE_LICENSE("GPL");
-
-static struct class* gpuClass;
-
-static gcsPLATFORM platform;
-
-static gckGALDEVICE galDevice;
-
-static uint major = 199;
-module_param(major, uint, 0644);
-MODULE_PARM_DESC(major, "major device number for GC device");
-
-static int irqLine = -1;
-module_param(irqLine, int, 0644);
-MODULE_PARM_DESC(irqLine, "IRQ number of GC core");
-
-static ulong registerMemBase = 0x80000000;
-module_param(registerMemBase, ulong, 0644);
-MODULE_PARM_DESC(registerMemBase, "Base of bus address of GC core AHB register");
-
-static ulong registerMemSize = 2 << 10;
-module_param(registerMemSize, ulong, 0644);
-MODULE_PARM_DESC(registerMemSize, "Size of bus address range of GC core AHB register");
-
-static int irqLine2D = -1;
-module_param(irqLine2D, int, 0644);
-MODULE_PARM_DESC(irqLine2D, "IRQ number of G2D core if irqLine is used for a G3D core");
-
-static ulong registerMemBase2D = 0x00000000;
-module_param(registerMemBase2D, ulong, 0644);
-MODULE_PARM_DESC(registerMemBase2D, "Base of bus address of G2D core if registerMemBase2D is used for a G3D core");
-
-static ulong registerMemSize2D = 2 << 10;
-module_param(registerMemSize2D, ulong, 0644);
-MODULE_PARM_DESC(registerMemSize2D, "Size of bus address range of G2D core if registerMemSize is used for a G3D core");
-
-static int irqLineVG = -1;
-module_param(irqLineVG, int, 0644);
-MODULE_PARM_DESC(irqLineVG, "IRQ number of VG core");
-
-static ulong registerMemBaseVG = 0x00000000;
-module_param(registerMemBaseVG, ulong, 0644);
-MODULE_PARM_DESC(registerMemBaseVG, "Base of bus address of VG core");
-
-static ulong registerMemSizeVG = 2 << 10;
-module_param(registerMemSizeVG, ulong, 0644);
-MODULE_PARM_DESC(registerMemSizeVG, "Size of bus address range of VG core");
-
-#if gcdDEC_ENABLE_AHB
-static ulong registerMemBaseDEC300 = 0x00000000;
-module_param(registerMemBaseDEC300, ulong, 0644);
-
-static ulong registerMemSizeDEC300 = 2 << 10;
-module_param(registerMemSizeDEC300, ulong, 0644);
-#endif
-
-#ifndef gcdDEFAULT_CONTIGUOUS_SIZE
-#define gcdDEFAULT_CONTIGUOUS_SIZE (4 << 20)
-#endif
-static ulong contiguousSize = gcdDEFAULT_CONTIGUOUS_SIZE;
-module_param(contiguousSize, ulong, 0644);
-MODULE_PARM_DESC(contiguousSize, "Size of memory reserved for GC");
-
-static ulong contiguousBase = 0;
-module_param(contiguousBase, ulong, 0644);
-MODULE_PARM_DESC(contiguousBase, "Base address of memory reserved for GC, if it is 0, GC driver will try to allocate a buffer whose size defined by contiguousSize");
-
-static int fastClear = -1;
-module_param(fastClear, int, 0644);
-MODULE_PARM_DESC(fastClear, "Disable fast clear if set it to 0, enabled by default");
-
-static int compression = -1;
-module_param(compression, int, 0644);
-MODULE_PARM_DESC(compression, "Disable compression if set it to 0, enabled by default");
-
-static int powerManagement = 1;
-module_param(powerManagement, int, 0644);
-MODULE_PARM_DESC(powerManagement, "Disable auto power saving if set it to 1, enabled by default");
-
-static int gpuProfiler = 0;
-module_param(gpuProfiler, int, 0644);
-MODULE_PARM_DESC(gpuProfiler, "Enable profiling support, disabled by default");
-
-static ulong baseAddress = 0;
-module_param(baseAddress, ulong, 0644);
-MODULE_PARM_DESC(baseAddress, "Only used for old MMU, set it to 0 if memory which can be accessed by GPU falls into 0 - 2G, otherwise set it to 0x80000000");
-
-static ulong physSize = 0;
-module_param(physSize, ulong, 0644);
-MODULE_PARM_DESC(physSize, "Obsolete");
-
-static uint logFileSize = 0;
-module_param(logFileSize,uint, 0644);
-MODULE_PARM_DESC(logFileSize, "Size of buffer to store GC driver output messsage, if it is not 0, message is read from /sys/kernel/debug/gc/galcore_trace, default value is 0");
-
-static uint recovery = 1;
-module_param(recovery, uint, 0644);
-MODULE_PARM_DESC(recovery, "Recover GPU from stuck (1: Enable, 0: Disable)");
-
-/* Middle needs about 40KB buffer, Maximal may need more than 200KB buffer. */
-static uint stuckDump = 0;
-module_param(stuckDump, uint, 0644);
-MODULE_PARM_DESC(stuckDump, "Level of stuck dump content (1: Minimal, 2: Middle, 3: Maximal)");
-
-static int showArgs = 0;
-module_param(showArgs, int, 0644);
-MODULE_PARM_DESC(showArgs, "Display parameters value when driver loaded");
-
-static int mmu = 1;
-module_param(mmu, int, 0644);
-MODULE_PARM_DESC(mmu, "Disable MMU if set it to 0, enabled by default");
-
-static int irqs[gcvCORE_COUNT] = {[0 ... gcvCORE_COUNT - 1] = -1};
-module_param_array(irqs, int, NULL, 0644);
-MODULE_PARM_DESC(irqs, "Array of IRQ numbers of multi-GPU");
-
-static uint registerBases[gcvCORE_COUNT];
-module_param_array(registerBases, uint, NULL, 0644);
-MODULE_PARM_DESC(registerBases, "Array of bases of bus address of register of multi-GPU");
-
-static uint registerSizes[gcvCORE_COUNT] = {[0 ... gcvCORE_COUNT - 1] = 2 << 10};
-module_param_array(registerSizes, uint, NULL, 0644);
-MODULE_PARM_DESC(registerSizes, "Array of sizes of bus address range of register of multi-GPU");
-
-static uint chipIDs[gcvCORE_COUNT] = {[0 ... gcvCORE_COUNT - 1] = gcvCHIP_ID_DEFAULT};
-module_param_array(chipIDs, uint, NULL, 0644);
-MODULE_PARM_DESC(chipIDs, "Array of chipIDs of multi-GPU");
-
-static int gpu3DMinClock = 1;
-
-static int contiguousRequested = 0;
-
-static gctBOOL registerMemMapped = gcvFALSE;
-static gctPOINTER registerMemAddress = gcvNULL;
-static ulong bankSize = 0;
-static int signal = 48;
-
-static int drv_open(
- struct inode* inode,
- struct file* filp
- );
-
-static int drv_release(
- struct inode* inode,
- struct file* filp
- );
-
-static long drv_ioctl(
- struct file* filp,
- unsigned int ioctlCode,
- unsigned long arg
- );
-
-static int drv_mmap(
- struct file* filp,
- struct vm_area_struct* vma
- );
-
-static struct file_operations driver_fops =
-{
- .owner = THIS_MODULE,
- .open = drv_open,
- .release = drv_release,
- .unlocked_ioctl = drv_ioctl,
-#ifdef HAVE_COMPAT_IOCTL
- .compat_ioctl = drv_ioctl,
-#endif
- .mmap = drv_mmap,
-};
-
-void
-_UpdateModuleParam(
- gcsMODULE_PARAMETERS *Param
- )
-{
- irqLine = Param->irqLine ;
- registerMemBase = Param->registerMemBase;
- registerMemSize = Param->registerMemSize;
- irqLine2D = Param->irqLine2D ;
- registerMemBase2D = Param->registerMemBase2D;
- registerMemSize2D = Param->registerMemSize2D;
-#if gcdENABLE_VG
- irqLineVG = Param->irqLineVG;
- registerMemBaseVG = Param->registerMemBaseVG;
- registerMemSizeVG = Param->registerMemSizeVG;
-#endif
- contiguousSize = Param->contiguousSize;
- contiguousBase = Param->contiguousBase;
- bankSize = Param->bankSize;
- fastClear = Param->fastClear;
- compression = Param->compression;
- powerManagement = Param->powerManagement;
- gpuProfiler = Param->gpuProfiler;
- signal = Param->signal;
- baseAddress = Param->baseAddress;
- physSize = Param->physSize;
- logFileSize = Param->logFileSize;
- recovery = Param->recovery;
- stuckDump = Param->stuckDump;
- showArgs = Param->showArgs;
- contiguousRequested = Param->contiguousRequested;
- gpu3DMinClock = Param->gpu3DMinClock;
- registerMemMapped = Param->registerMemMapped;
- registerMemAddress = Param->registerMemAddress;
-
- memcpy(irqs, Param->irqs, gcmSIZEOF(gctINT) * gcvCORE_COUNT);
- memcpy(registerBases, Param->registerBases, gcmSIZEOF(gctUINT) * gcvCORE_COUNT);
- memcpy(registerSizes, Param->registerSizes, gcmSIZEOF(gctUINT) * gcvCORE_COUNT);
- memcpy(chipIDs, Param->chipIDs, gcmSIZEOF(gctUINT) * gcvCORE_COUNT);
-}
-
-void
-gckOS_DumpParam(
- void
- )
-{
- gctINT i;
-
- printk("Galcore options:\n");
- if (irqLine != -1)
- {
- printk(" irqLine = %d\n", irqLine);
- printk(" registerMemBase = 0x%08lX\n", registerMemBase);
- printk(" registerMemSize = 0x%08lX\n", registerMemSize);
- }
-
- if (irqLine2D != -1)
- {
- printk(" irqLine2D = %d\n", irqLine2D);
- printk(" registerMemBase2D = 0x%08lX\n", registerMemBase2D);
- printk(" registerMemSize2D = 0x%08lX\n", registerMemSize2D);
- }
-
- if (irqLineVG != -1)
- {
- printk(" irqLineVG = %d\n", irqLineVG);
- printk(" registerMemBaseVG = 0x%08lX\n", registerMemBaseVG);
- printk(" registerMemSizeVG = 0x%08lX\n", registerMemSizeVG);
- }
-
-#if gcdDEC_ENABLE_AHB
- printk(" registerMemBaseDEC300 = 0x%08lX\n", registerMemBaseDEC300);
- printk(" registerMemSizeDEC300 = 0x%08lX\n", registerMemSizeDEC300);
-#endif
-
- printk(" contiguousSize = %ld\n", contiguousSize);
- printk(" contiguousBase = 0x%08lX\n", contiguousBase);
- printk(" bankSize = 0x%08lX\n", bankSize);
- printk(" fastClear = %d\n", fastClear);
- printk(" compression = %d\n", compression);
- printk(" signal = %d\n", signal);
- printk(" powerManagement = %d\n", powerManagement);
- printk(" baseAddress = 0x%08lX\n", baseAddress);
- printk(" physSize = 0x%08lX\n", physSize);
- printk(" logFileSize = %d KB \n", logFileSize);
- printk(" recovery = %d\n", recovery);
- printk(" stuckDump = %d\n", stuckDump);
- printk(" gpuProfiler = %d\n", gpuProfiler);
-
- printk(" irqs = ");
- for (i = 0; i < gcvCORE_COUNT; i++)
- {
- printk("%d, ", irqs[i]);
- }
- printk("\n");
-
- printk(" registerBases = ");
- for (i = 0; i < gcvCORE_COUNT; i++)
- {
- printk("0x%08X, ", registerBases[i]);
- }
- printk("\n");
-
- printk(" registerSizes = ");
- for (i = 0; i < gcvCORE_COUNT; i++)
- {
- printk("0x%08X, ", registerSizes[i]);
- }
- printk("\n");
-
- printk(" chipIDs = ");
- for (i = 0; i < gcvCORE_COUNT; i++)
- {
- printk("0x%08X, ", chipIDs[i]);
- }
- printk("\n");
-
- printk("Build options:\n");
- printk(" gcdGPU_TIMEOUT = %d\n", gcdGPU_TIMEOUT);
- printk(" gcdGPU_2D_TIMEOUT = %d\n", gcdGPU_2D_TIMEOUT);
-}
-
-int drv_open(
- struct inode* inode,
- struct file* filp
- )
-{
- gceSTATUS status;
- gctBOOL attached = gcvFALSE;
- gcsHAL_PRIVATE_DATA_PTR data = gcvNULL;
- gctINT i;
-
- gcmkHEADER_ARG("inode=0x%08X filp=0x%08X", inode, filp);
-
- if (filp == gcvNULL)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): filp is NULL\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- data = kmalloc(sizeof(gcsHAL_PRIVATE_DATA), GFP_KERNEL | __GFP_NOWARN);
-
- if (data == gcvNULL)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): private_data is NULL\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
- }
-
- data->device = galDevice;
- data->mappedMemory = gcvNULL;
- data->contiguousLogical = gcvNULL;
- gcmkONERROR(gckOS_GetProcessID(&data->pidOpen));
-
- /* Attached the process. */
- for (i = 0; i < gcdMAX_GPU_COUNT; i++)
- {
- if (galDevice->kernels[i] != gcvNULL)
- {
- gcmkONERROR(gckKERNEL_AttachProcess(galDevice->kernels[i], gcvTRUE));
- }
- }
- attached = gcvTRUE;
-
- if (!galDevice->contiguousMapped)
- {
- if (galDevice->contiguousPhysical != gcvNULL)
- {
- gcmkONERROR(gckOS_MapMemory(
- galDevice->os,
- galDevice->contiguousPhysical,
- galDevice->contiguousSize,
- &data->contiguousLogical
- ));
- }
- }
-
- filp->private_data = data;
-
- /* Success. */
- gcmkFOOTER_NO();
- return 0;
-
-OnError:
- if (data != gcvNULL)
- {
- if (data->contiguousLogical != gcvNULL)
- {
- gcmkVERIFY_OK(gckOS_UnmapMemory(
- galDevice->os,
- galDevice->contiguousPhysical,
- galDevice->contiguousSize,
- data->contiguousLogical
- ));
- }
-
- kfree(data);
- }
-
- if (attached)
- {
- for (i = 0; i < gcdMAX_GPU_COUNT; i++)
- {
- if (galDevice->kernels[i] != gcvNULL)
- {
- gcmkVERIFY_OK(gckKERNEL_AttachProcess(galDevice->kernels[i], gcvFALSE));
- }
- }
- }
-
- gcmkFOOTER();
- return -ENOTTY;
-}
-
-int drv_release(
- struct inode* inode,
- struct file* filp
- )
-{
- gceSTATUS status;
- gcsHAL_PRIVATE_DATA_PTR data;
- gckGALDEVICE device;
- gctINT i;
-
- gcmkHEADER_ARG("inode=0x%08X filp=0x%08X", inode, filp);
-
- if (filp == gcvNULL)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): filp is NULL\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- data = filp->private_data;
-
- if (data == gcvNULL)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): private_data is NULL\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- device = data->device;
-
- if (device == gcvNULL)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): device is NULL\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- if (!device->contiguousMapped)
- {
- if (data->contiguousLogical != gcvNULL)
- {
- gcmkONERROR(gckOS_UnmapMemoryEx(
- galDevice->os,
- galDevice->contiguousPhysical,
- galDevice->contiguousSize,
- data->contiguousLogical,
- data->pidOpen
- ));
-
- data->contiguousLogical = gcvNULL;
- }
- }
-
- /* A process gets detached. */
- for (i = 0; i < gcdMAX_GPU_COUNT; i++)
- {
- if (galDevice->kernels[i] != gcvNULL)
- {
- gcmkONERROR(gckKERNEL_AttachProcessEx(galDevice->kernels[i], gcvFALSE, data->pidOpen));
- }
- }
-
- kfree(data);
- filp->private_data = NULL;
-
- /* Success. */
- gcmkFOOTER_NO();
- return 0;
-
-OnError:
- gcmkFOOTER();
- return -ENOTTY;
-}
-
-long drv_ioctl(
- struct file* filp,
- unsigned int ioctlCode,
- unsigned long arg
- )
-{
- gceSTATUS status;
- gcsHAL_INTERFACE iface;
- gctUINT32 copyLen;
- DRIVER_ARGS drvArgs;
- gckGALDEVICE device;
- gcsHAL_PRIVATE_DATA_PTR data;
- gckVIDMEM_NODE nodeObject;
- gctUINT32 i;
-
- gcmkHEADER_ARG(
- "filp=0x%08X ioctlCode=0x%08X arg=0x%08X",
- filp, ioctlCode, arg
- );
-
- if (filp == gcvNULL)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): filp is NULL\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- data = filp->private_data;
-
- if (data == gcvNULL)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): private_data is NULL\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- device = data->device;
-
- if (device == gcvNULL)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): device is NULL\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- if ((ioctlCode != IOCTL_GCHAL_INTERFACE)
- && (ioctlCode != IOCTL_GCHAL_KERNEL_INTERFACE)
- )
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): unknown command %d\n",
- __FUNCTION__, __LINE__,
- ioctlCode
- );
-
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- /* Get the drvArgs. */
- copyLen = copy_from_user(
- &drvArgs, (void *) arg, sizeof(DRIVER_ARGS)
- );
-
- if (copyLen != 0)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): error copying of the input arguments.\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- /* Now bring in the gcsHAL_INTERFACE structure. */
- if ((drvArgs.InputBufferSize != sizeof(gcsHAL_INTERFACE))
- || (drvArgs.OutputBufferSize != sizeof(gcsHAL_INTERFACE))
- )
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): input or/and output structures are invalid.\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- copyLen = copy_from_user(
- &iface, gcmUINT64_TO_PTR(drvArgs.InputBuffer), sizeof(gcsHAL_INTERFACE)
- );
-
- if (copyLen != 0)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): error copying of input HAL interface.\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- status = gckDEVICE_Dispatch(device->device, &iface);
-
- /* Redo system call after pending signal is handled. */
- if (status == gcvSTATUS_INTERRUPTED)
- {
- gcmkFOOTER();
- return -ERESTARTSYS;
- }
-
- if (gcmIS_SUCCESS(status) && (iface.command == gcvHAL_LOCK_VIDEO_MEMORY))
- {
- gcuVIDMEM_NODE_PTR node;
- gctUINT32 processID;
-
- for (i = 0; i < gcvCORE_COUNT; i++)
- {
- if (device->kernels[i] != gcvNULL)
- {
- break;
- }
- }
-
- if(i == gcvCORE_COUNT)
- goto OnError;
-
- gckOS_GetProcessID(&processID);
-
- gcmkONERROR(gckVIDMEM_HANDLE_Lookup(device->kernels[i],
- processID,
- (gctUINT32)iface.u.LockVideoMemory.node,
- &nodeObject));
- node = nodeObject->node;
-
- /* Special case for mapped memory. */
- if ((data->mappedMemory != gcvNULL)
- && (node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
- )
- {
- /* Compute offset into mapped memory. */
- gctUINT32 offset
- = (gctUINT8 *) gcmUINT64_TO_PTR(iface.u.LockVideoMemory.memory)
- - (gctUINT8 *) device->contiguousBase;
-
- /* Compute offset into user-mapped region. */
- iface.u.LockVideoMemory.memory =
- gcmPTR_TO_UINT64((gctUINT8 *) data->mappedMemory + offset);
- }
- }
-
- /* Copy data back to the user. */
- copyLen = copy_to_user(
- gcmUINT64_TO_PTR(drvArgs.OutputBuffer), &iface, sizeof(gcsHAL_INTERFACE)
- );
-
- if (copyLen != 0)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): error copying of output HAL interface.\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- /* Success. */
- gcmkFOOTER_NO();
- return 0;
-
-OnError:
- gcmkFOOTER();
- return -ENOTTY;
-}
-
-static int drv_mmap(
- struct file* filp,
- struct vm_area_struct* vma
- )
-{
- gceSTATUS status = gcvSTATUS_OK;
- gcsHAL_PRIVATE_DATA_PTR data;
- gckGALDEVICE device;
-
- gcmkHEADER_ARG("filp=0x%08X vma=0x%08X", filp, vma);
-
- if (filp == gcvNULL)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): filp is NULL\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- data = filp->private_data;
-
- if (data == gcvNULL)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): private_data is NULL\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- device = data->device;
-
- if (device == gcvNULL)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): device is NULL\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
-#if !gcdPAGED_MEMORY_CACHEABLE
- vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
- vma->vm_flags |= gcdVM_FLAGS;
-#endif
- vma->vm_pgoff = 0;
-
- if (device->contiguousMapped)
- {
- unsigned long size = vma->vm_end - vma->vm_start;
- int ret = 0;
-
- if (size > device->contiguousSize)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): Invalid mapping size.\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- ret = io_remap_pfn_range(
- vma,
- vma->vm_start,
- device->requestedContiguousBase >> PAGE_SHIFT,
- size,
- vma->vm_page_prot
- );
-
- if (ret != 0)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): io_remap_pfn_range failed %d\n",
- __FUNCTION__, __LINE__,
- ret
- );
-
- data->mappedMemory = gcvNULL;
-
- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
- }
-
- data->mappedMemory = (gctPOINTER) vma->vm_start;
-
- /* Success. */
- gcmkFOOTER_NO();
- return 0;
- }
-
-OnError:
- gcmkFOOTER();
- return -ENOTTY;
-}
-
-static int drv_init(void)
-{
- int ret;
- int result = -EINVAL;
- gceSTATUS status;
- gckGALDEVICE device = gcvNULL;
- struct class* device_class = gcvNULL;
-
- gcsDEVICE_CONSTRUCT_ARGS args = {
- .recovery = recovery,
- .stuckDump = stuckDump,
- .gpu3DMinClock = gpu3DMinClock,
- .contiguousRequested = contiguousRequested,
- .platform = &platform,
- .mmu = mmu,
- .registerMemMapped = registerMemMapped,
- .registerMemAddress = registerMemAddress,
-#if gcdDEC_ENABLE_AHB
- .registerMemBaseDEC300 = registerMemBaseDEC300,
- .registerMemSizeDEC300 = registerMemSizeDEC300,
-#endif
- };
-
- gcmkHEADER();
-
- memcpy(args.irqs, irqs, gcmSIZEOF(gctINT) * gcvCORE_COUNT);
- memcpy(args.registerBases, registerBases, gcmSIZEOF(gctUINT) * gcvCORE_COUNT);
- memcpy(args.registerSizes, registerSizes, gcmSIZEOF(gctUINT) * gcvCORE_COUNT);
- memcpy(args.chipIDs, chipIDs, gcmSIZEOF(gctUINT) * gcvCORE_COUNT);
-
- printk(KERN_INFO "Galcore version %d.%d.%d.%d\n",
- gcvVERSION_MAJOR, gcvVERSION_MINOR, gcvVERSION_PATCH, gcvVERSION_BUILD);
-
-#if !VIVANTE_PROFILER_PM
- /* when enable gpu profiler, we need to turn off gpu powerMangement */
- if (gpuProfiler)
- {
- powerManagement = 0;
- }
-#endif
-
- args.powerManagement = powerManagement;
- args.gpuProfiler = gpuProfiler;
-
- if (showArgs)
- {
- gckOS_DumpParam();
- }
-
- if (logFileSize != 0)
- {
- gckDEBUGFS_Initialize();
- }
-
- /* Create the GAL device. */
- status = gckGALDEVICE_Construct(
- irqLine,
- registerMemBase, registerMemSize,
- irqLine2D,
- registerMemBase2D, registerMemSize2D,
- irqLineVG,
- registerMemBaseVG, registerMemSizeVG,
- contiguousBase, contiguousSize,
- bankSize, fastClear, compression, baseAddress, physSize, signal,
- logFileSize,
- powerManagement,
- gpuProfiler,
- &args,
- &device
- );
-
- if (gcmIS_ERROR(status))
- {
- gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): Failed to create the GAL device: status=%d\n",
- __FUNCTION__, __LINE__, status);
-
- goto OnError;
- }
-
- /* Start the GAL device. */
- gcmkONERROR(gckGALDEVICE_Start(device));
-
- if ((physSize != 0)
- && (device->kernels[gcvCORE_MAJOR] != gcvNULL)
- && (device->kernels[gcvCORE_MAJOR]->hardware->mmuVersion != 0))
- {
- /* Reset the base address */
- device->baseAddress = 0;
- }
-
- /* Set global galDevice pointer. */
- galDevice = device;
-
- /* Register the character device. */
- ret = register_chrdev(major, DEVICE_NAME, &driver_fops);
-
- if (ret < 0)
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): Could not allocate major number for mmap.\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
- }
-
- if (major == 0)
- {
- major = ret;
- }
-
- /* Create the device class. */
- device_class = class_create(THIS_MODULE, CLASS_NAME);
-
- if (IS_ERR(device_class))
- {
- gcmkTRACE_ZONE(
- gcvLEVEL_ERROR, gcvZONE_DRIVER,
- "%s(%d): Failed to create the class.\n",
- __FUNCTION__, __LINE__
- );
-
- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
- }
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
- device_create(device_class, NULL, MKDEV(major, 0), NULL, DEVICE_NAME);
-#else
- device_create(device_class, NULL, MKDEV(major, 0), DEVICE_NAME);
-#endif
-
- gpuClass = device_class;
-
- gcmkTRACE_ZONE(
- gcvLEVEL_INFO, gcvZONE_DRIVER,
- "%s(%d): irqLine=%d, contiguousSize=%lu, memBase=0x%lX\n",
- __FUNCTION__, __LINE__,
- irqLine, contiguousSize, registerMemBase
- );
-
- /* Success. */
- gcmkFOOTER_NO();
- return 0;
-
-OnError:
- /* Roll back. */
- if (device_class != gcvNULL)
- {
- device_destroy(device_class, MKDEV(major, 0));
- class_destroy(device_class);
- }
-
- if (device != gcvNULL)
- {
- gcmkVERIFY_OK(gckGALDEVICE_Stop(device));
- gcmkVERIFY_OK(gckGALDEVICE_Destroy(device));
- }
-
- gcmkFOOTER();
- return result;
-}
-
-static void drv_exit(void)
-{
- gcmkHEADER();
-
- gcmkASSERT(gpuClass != gcvNULL);
- device_destroy(gpuClass, MKDEV(major, 0));
- class_destroy(gpuClass);
-
- unregister_chrdev(major, DEVICE_NAME);
-
- gcmkVERIFY_OK(gckGALDEVICE_Stop(galDevice));
- gcmkVERIFY_OK(gckGALDEVICE_Destroy(galDevice));
-
- if(gckDEBUGFS_IsEnabled())
- {
- gckDEBUGFS_Terminate();
- }
-
- gcmkFOOTER_NO();
-}
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
-static int gpu_probe(struct platform_device *pdev)
-#else
-static int __devinit gpu_probe(struct platform_device *pdev)
-#endif
-{
- int ret = -ENODEV;
- gcsMODULE_PARAMETERS moduleParam = {
- .irqLine = irqLine,
- .registerMemBase = registerMemBase,
- .registerMemSize = registerMemSize,
- .irqLine2D = irqLine2D,
- .registerMemBase2D = registerMemBase2D,
- .registerMemSize2D = registerMemSize2D,
- .irqLineVG = irqLineVG,
- .registerMemBaseVG = registerMemBaseVG,
- .registerMemSizeVG = registerMemSizeVG,
- .contiguousSize = contiguousSize,
- .contiguousBase = contiguousBase,
- .bankSize = bankSize,
- .fastClear = fastClear,
- .compression = compression,
- .powerManagement = powerManagement,
- .gpuProfiler = gpuProfiler,
- .signal = signal,
- .baseAddress = baseAddress,
- .physSize = physSize,
- .logFileSize = logFileSize,
- .recovery = recovery,
- .stuckDump = stuckDump,
- .showArgs = showArgs,
- .gpu3DMinClock = gpu3DMinClock,
- .registerMemMapped = registerMemMapped,
- };
-
-
- gcmkHEADER();
-
- memcpy(moduleParam.irqs, irqs, gcmSIZEOF(gctINT) * gcvCORE_COUNT);
- memcpy(moduleParam.registerBases, registerBases, gcmSIZEOF(gctUINT) * gcvCORE_COUNT);
- memcpy(moduleParam.registerSizes, registerSizes, gcmSIZEOF(gctUINT) * gcvCORE_COUNT);
- memcpy(moduleParam.chipIDs, chipIDs, gcmSIZEOF(gctUINT) * gcvCORE_COUNT);
-
- platform.device = pdev;
-
- if (platform.ops->getPower)
- {
- if (gcmIS_ERROR(platform.ops->getPower(&platform)))
- {
- gcmkFOOTER_NO();
- return ret;
- }
- }
-
- if (platform.ops->adjustParam)
- {
- /* Override default module param. */
- platform.ops->adjustParam(&platform, &moduleParam);
-
- /* Update module param because drv_init() uses them directly. */
- _UpdateModuleParam(&moduleParam);
- }
-
- ret = drv_init();
-
- if (!ret)
- {
- platform_set_drvdata(pdev, galDevice);
-
- gcmkFOOTER_NO();
- return ret;
- }
-
- gcmkFOOTER_ARG(KERN_INFO "Failed to register gpu driver: %d\n", ret);
- return ret;
-}
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
-static int gpu_remove(struct platform_device *pdev)
-#else
-static int __devexit gpu_remove(struct platform_device *pdev)
-#endif
-{
- gcmkHEADER();
-
- drv_exit();
-
- if (platform.ops->putPower)
- {
- platform.ops->putPower(&platform);
- }
-
- gcmkFOOTER_NO();
- return 0;
-}
-
-static int gpu_suspend(struct platform_device *dev, pm_message_t state)
-{
- gceSTATUS status;
- gckGALDEVICE device;
- gctINT i;
-
- device = platform_get_drvdata(dev);
-
- if (!device)
- {
- return -1;
- }
-
- for (i = 0; i < gcdMAX_GPU_COUNT; i++)
- {
- if (device->kernels[i] != gcvNULL)
- {
- /* Store states. */
-#if gcdENABLE_VG
- if (i == gcvCORE_VG)
- {
- status = gckVGHARDWARE_QueryPowerManagementState(device->kernels[i]->vg->hardware, &device->statesStored[i]);
- }
- else
-#endif
- {
- status = gckHARDWARE_QueryPowerManagementState(device->kernels[i]->hardware, &device->statesStored[i]);
- }
-
- if (gcmIS_ERROR(status))
- {
- return -1;
- }
-
-#if gcdENABLE_VG
- if (i == gcvCORE_VG)
- {
- status = gckVGHARDWARE_SetPowerManagementState(device->kernels[i]->vg->hardware, gcvPOWER_OFF);
- }
- else
-#endif
- {
- status = gckHARDWARE_SetPowerManagementState(device->kernels[i]->hardware, gcvPOWER_OFF);
- }
-
- if (gcmIS_ERROR(status))
- {
- return -1;
- }
-
- }
- }
-
- return 0;
-}
-
-static int gpu_resume(struct platform_device *dev)
-{
- gceSTATUS status;
- gckGALDEVICE device;
- gctINT i;
- gceCHIPPOWERSTATE statesStored;
-
- device = platform_get_drvdata(dev);
-
- if (!device)
- {
- return -1;
- }
-
- for (i = 0; i < gcdMAX_GPU_COUNT; i++)
- {
- if (device->kernels[i] != gcvNULL)
- {
-#if gcdENABLE_VG
- if (i == gcvCORE_VG)
- {
- status = gckVGHARDWARE_SetPowerManagementState(device->kernels[i]->vg->hardware, gcvPOWER_ON);
- }
- else
-#endif
- {
- status = gckHARDWARE_SetPowerManagementState(device->kernels[i]->hardware, gcvPOWER_ON);
- }
-
- if (gcmIS_ERROR(status))
- {
- return -1;
- }
-
- /* Convert global state to crossponding internal state. */
- switch(device->statesStored[i])
- {
- case gcvPOWER_OFF:
- statesStored = gcvPOWER_OFF_BROADCAST;
- break;
- case gcvPOWER_IDLE:
- statesStored = gcvPOWER_IDLE_BROADCAST;
- break;
- case gcvPOWER_SUSPEND:
- statesStored = gcvPOWER_SUSPEND_BROADCAST;
- break;
- case gcvPOWER_ON:
- statesStored = gcvPOWER_ON_AUTO;
- break;
- default:
- statesStored = device->statesStored[i];
- break;
- }
-
- /* Restore states. */
-#if gcdENABLE_VG
- if (i == gcvCORE_VG)
- {
- status = gckVGHARDWARE_SetPowerManagementState(device->kernels[i]->vg->hardware, statesStored);
- }
- else
-#endif
- {
- status = gckHARDWARE_SetPowerManagementState(device->kernels[i]->hardware, statesStored);
- }
-
- if (gcmIS_ERROR(status))
- {
- return -1;
- }
- }
- }
-
- return 0;
-}
-
-#if defined(CONFIG_PM) && LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30)
-#ifdef CONFIG_PM_SLEEP
-static int gpu_system_suspend(struct device *dev)
-{
- pm_message_t state={0};
- return gpu_suspend(to_platform_device(dev), state);
-}
-
-static int gpu_system_resume(struct device *dev)
-{
- return gpu_resume(to_platform_device(dev));
-}
-#endif
-
-static const struct dev_pm_ops gpu_pm_ops = {
- SET_SYSTEM_SLEEP_PM_OPS(gpu_system_suspend, gpu_system_resume)
-};
-#endif
-
-static struct platform_driver gpu_driver = {
- .probe = gpu_probe,
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
- .remove = gpu_remove,
-#else
- .remove = __devexit_p(gpu_remove),
-#endif
-
- .suspend = gpu_suspend,
- .resume = gpu_resume,
-
- .driver = {
- .owner = THIS_MODULE,
- .name = DEVICE_NAME,
-#if defined(CONFIG_PM) && LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30)
- .pm = &gpu_pm_ops,
-#endif
- }
-};
-
-static int __init gpu_init(void)
-{
- int ret = 0;
-
- memset(&platform, 0, sizeof(gcsPLATFORM));
-
- gckPLATFORM_QueryOperations(&platform.ops);
-
- if (platform.ops == gcvNULL)
- {
- printk(KERN_ERR "galcore: No platform specific operations.\n");
- ret = -ENODEV;
- goto out;
- }
-
- if (platform.ops->allocPriv)
- {
- /* Allocate platform private data. */
- if (gcmIS_ERROR(platform.ops->allocPriv(&platform)))
- {
- ret = -ENOMEM;
- goto out;
- }
- }
-
- if (platform.ops->needAddDevice
- && platform.ops->needAddDevice(&platform))
- {
- /* Allocate device */
- platform.device = platform_device_alloc(DEVICE_NAME, -1);
- if (!platform.device)
- {
- printk(KERN_ERR "galcore: platform_device_alloc failed.\n");
- ret = -ENOMEM;
- goto out;
- }
-
- /* Add device */
- ret = platform_device_add(platform.device);
- if (ret)
- {
- printk(KERN_ERR "galcore: platform_device_add failed.\n");
- goto put_dev;
- }
- }
-
- platform.driver = &gpu_driver;
-
- if (platform.ops->adjustDriver)
- {
- /* Override default platform_driver struct. */
- platform.ops->adjustDriver(&platform);
- }
-
- ret = platform_driver_register(&gpu_driver);
- if (!ret)
- {
- goto out;
- }
-
- platform_device_del(platform.device);
-put_dev:
- platform_device_put(platform.device);
-
-out:
- return ret;
-}
-
-static void __exit gpu_exit(void)
-{
- platform_driver_unregister(&gpu_driver);
-
- if (platform.ops->needAddDevice
- && platform.ops->needAddDevice(&platform))
- {
- platform_device_unregister(platform.device);
- }
-
- if (platform.priv)
- {
- /* Free platform private data. */
- platform.ops->freePriv(&platform);
- }
-}
-
-module_init(gpu_init);
-module_exit(gpu_exit);
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.c
index 499f3704659a..ba35eac6f668 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.c
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.c
@@ -350,16 +350,12 @@ gckKERNEL_MapVideoMemoryEx(
gctINT processID;
gckOS_GetProcessID(&processID);
- gcmkVERIFY_OK(gckOS_AcquireMutex(Kernel->os, Kernel->os->memoryLock, gcvINFINITE));
-
mdl = (PLINUX_MDL) device->contiguousPhysical;
mdlMap = FindMdlMap(mdl, processID);
gcmkASSERT(mdlMap);
logical = (gctPOINTER) mdlMap->vmaAddr;
-
- gcmkVERIFY_OK(gckOS_ReleaseMutex(Kernel->os, Kernel->os->memoryLock));
}
#if gcdENABLE_VG
if (Core == gcvCORE_VG)
@@ -471,6 +467,9 @@ gckKERNEL_MapVideoMemory(
gceSTATUS
gckKERNEL_Notify(
IN gckKERNEL Kernel,
+#if gcdMULTI_GPU
+ IN gctUINT CoreId,
+#endif
IN gceNOTIFY Notification,
IN gctBOOL Data
)
@@ -492,6 +491,9 @@ gckKERNEL_Notify(
status = gckINTERRUPT_Notify(Kernel->interrupt, Data);
#else
status = gckHARDWARE_Interrupt(Kernel->hardware,
+#if gcdMULTI_GPU
+ CoreId,
+#endif
Data);
#endif
break;
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h
index fb4ca36bf4d6..8bea8e11da2c 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h
@@ -64,7 +64,6 @@
#include <linux/sched.h>
#include <linux/signal.h>
#ifdef FLAREON
-#error 1
# include <asm/arch-realview/dove_gpio_irq.h>
#endif
#include <linux/interrupt.h>
@@ -92,7 +91,6 @@
#include "gc_hal_kernel_device.h"
#include "gc_hal_kernel_os.h"
#include "gc_hal_kernel_debugfs.h"
-#include "gc_hal_ta.h"
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31)
@@ -103,9 +101,18 @@
#define FIND_TASK_BY_PID(x) find_task_by_pid(x)
#endif
+#define _WIDE(string) L##string
+#define WIDE(string) _WIDE(string)
+
+#define countof(a) (sizeof(a) / sizeof(a[0]))
+
#ifndef DEVICE_NAME
+#ifdef CONFIG_DOVE_GPU
+# define DEVICE_NAME "dove_gpu"
+#else
# define DEVICE_NAME "galcore"
#endif
+#endif
#ifndef CLASS_NAME
# define CLASS_NAME "graphics_class"
@@ -139,17 +146,9 @@
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION (4, 1, 0)
-#ifdef gcdIRQ_SHARED
-# define gcdIRQF_FLAG (IRQF_SHARED)
-# else
-# define gcdIRQF_FLAG (0)
-# endif
+#define gcdIRQF_FLAG (0)
#else
-#ifdef gcdIRQ_SHARED
-# define gcdIRQF_FLAG (IRQF_DISABLED | IRQF_SHARED)
-# else
-# define gcdIRQF_FLAG (IRQF_DISABLED)
-# endif
+#define gcdIRQF_FLAG (IRQF_DISABLED)
#endif
/******************************************************************************\
@@ -199,6 +198,7 @@ struct _gckOS
/* Memory management */
gctPOINTER memoryLock;
+ gctPOINTER memoryMapLock;
struct _LINUX_MDL *mdlHead;
struct _LINUX_MDL *mdlTail;
@@ -266,6 +266,8 @@ typedef struct _gcsSIGNAL
/* The owner of the signal. */
gctHANDLE process;
+ gckHARDWARE hardware;
+
/* ID. */
gctUINT32 id;
}
@@ -290,6 +292,20 @@ typedef struct _gcsSYNC_POINT
gcsSYNC_POINT;
#endif
+typedef struct _gcsPageInfo * gcsPageInfo_PTR;
+typedef struct _gcsPageInfo
+{
+ struct page **pages;
+ gctUINT32_PTR pageTable;
+ gctUINT32 extraPage;
+ gctUINT32 address;
+#if gcdPROCESS_ADDRESS_SPACE
+ gckMMU mmu;
+#endif
+ gctBOOL *ref;
+}
+gcsPageInfo;
+
typedef struct _gcsOSTIMER * gcsOSTIMER_PTR;
typedef struct _gcsOSTIMER
{
@@ -309,6 +325,15 @@ gckOS_FreeAllocators(
);
gceSTATUS
+_HandleOuterCache(
+ IN gckOS Os,
+ IN gctUINT32 Physical,
+ IN gctPOINTER Logical,
+ IN gctSIZE_T Bytes,
+ IN gceCACHEOPERATION Type
+ );
+
+gceSTATUS
_ConvertLogical2Physical(
IN gckOS Os,
IN gctPOINTER Logical,
@@ -317,6 +342,16 @@ _ConvertLogical2Physical(
OUT gctPHYS_ADDR_T * Physical
);
+gctSTRING
+_CreateKernelVirtualMapping(
+ IN PLINUX_MDL Mdl
+ );
+
+void
+_DestoryKernelVirtualMapping(
+ IN gctSTRING Addr
+ );
+
void
_UnmapUserLogical(
IN gctPOINTER Logical,
@@ -335,6 +370,36 @@ _GetProcessID(
#endif
}
+static inline struct page *
+_NonContiguousToPage(
+ IN struct page ** Pages,
+ IN gctUINT32 Index
+ )
+{
+ gcmkASSERT(Pages != gcvNULL);
+ return Pages[Index];
+}
+
+static inline unsigned long
+_NonContiguousToPfn(
+ IN struct page ** Pages,
+ IN gctUINT32 Index
+ )
+{
+ gcmkASSERT(Pages != gcvNULL);
+ return page_to_pfn(_NonContiguousToPage(Pages, Index));
+}
+
+static inline unsigned long
+_NonContiguousToPhys(
+ IN struct page ** Pages,
+ IN gctUINT32 Index
+ )
+{
+ gcmkASSERT(Pages != gcvNULL);
+ return page_to_phys(_NonContiguousToPage(Pages, Index));
+}
+
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
static inline int
is_vmalloc_addr(
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
index 7c33d27142ac..405ebed942f8 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
@@ -67,7 +67,6 @@
#include <linux/math64.h>
#endif
#include <linux/delay.h>
-#include <linux/platform_device.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
#include <linux/anon_inodes.h>
@@ -78,10 +77,6 @@
#include "gc_hal_kernel_sync.h"
#endif
-#if defined(CONFIG_ARM) && LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0)
-#include <dma.h>
-#endif
-
#define _GC_OBJ_ZONE gcvZONE_OS
#include "gc_hal_kernel_allocator.h"
@@ -95,21 +90,15 @@
#define MEMORY_UNLOCK(os) \
gcmkVERIFY_OK(gckOS_ReleaseMutex((os), (os)->memoryLock))
-#define gcmkBUG_ON(x, func, line) \
- do { \
- if (unlikely(x)) \
- { \
- int i = 0; \
- while (1) \
- { \
- static int delay = 10 * 1000; \
- gcmkPRINT("[galcore]: BUG ON @ %s(%d) (%d)", func, line, i++); \
- dump_stack(); \
- gckOS_Delay(gcvNULL, delay); \
- delay *= 2; \
- } \
- } \
- } while (0)
+#define MEMORY_MAP_LOCK(os) \
+ gcmkVERIFY_OK(gckOS_AcquireMutex( \
+ (os), \
+ (os)->memoryMapLock, \
+ gcvINFINITE))
+
+#define MEMORY_MAP_UNLOCK(os) \
+ gcmkVERIFY_OK(gckOS_ReleaseMutex((os), (os)->memoryMapLock))
+
/******************************************************************************\
******************************* Private Functions ******************************
@@ -137,11 +126,6 @@ _CreateMdl(
mdl = (PLINUX_MDL)kzalloc(sizeof(struct _LINUX_MDL), GFP_KERNEL | gcdNOWARN);
- if (mdl)
- {
- mutex_init(&mdl->mapsMutex);
- }
-
gcmkFOOTER_ARG("0x%X", mdl);
return mdl;
}
@@ -191,7 +175,7 @@ _CreateMdlMap(
gcmkHEADER_ARG("Mdl=0x%X ProcessID=%d", Mdl, ProcessID);
- mdlMap = (PLINUX_MDL_MAP)kmalloc(sizeof(struct _LINUX_MDL_MAP), GFP_KERNEL | gcdNOWARN);
+ mdlMap = (PLINUX_MDL_MAP)kmalloc(sizeof(struct _LINUX_MDL_MAP), gcdNOWARN | GFP_ATOMIC);
if (mdlMap == gcvNULL)
{
gcmkFOOTER_NO();
@@ -200,7 +184,9 @@ _CreateMdlMap(
mdlMap->pid = ProcessID;
mdlMap->vmaAddr = gcvNULL;
- mdlMap->count = 0;
+ mdlMap->vma = gcvNULL;
+
+ atomic_set(&mdlMap->count, 0);
mdlMap->next = Mdl->maps;
Mdl->maps = mdlMap;
@@ -411,14 +397,6 @@ _QueryProcessPageTable(
pud_t *pud;
pmd_t *pmd;
pte_t *pte;
- gctUINT32 offset = logical & ~PAGE_MASK;
-
- if (is_vmalloc_addr(Logical))
- {
- *Address = page_to_phys(vmalloc_to_page(Logical)) + offset;
-
- return gcvSTATUS_OK;
- }
if (!current->mm)
{
@@ -466,7 +444,7 @@ _QueryProcessPageTable(
return gcvSTATUS_NOT_FOUND;
}
- *Address = (pte_pfn(*pte) << PAGE_SHIFT) | offset;
+ *Address = (pte_pfn(*pte) << PAGE_SHIFT) | (logical & ~PAGE_MASK);
#ifndef CONFIG_DEBUG_SPINLOCK
pte_unmap_unlock(pte, lock);
#else
@@ -502,6 +480,7 @@ outer_func(
return gcvSTATUS_OK;
}
+#if gcdENABLE_OUTER_CACHE_PATCH
/*******************************************************************************
** _HandleOuterCache
**
@@ -580,6 +559,7 @@ OnError:
return status;
}
#endif
+#endif
gctBOOL
_AllowAccess(
@@ -593,7 +573,7 @@ _AllowAccess(
/* Check external clock state. */
if (Os->clockStates[Core] == gcvFALSE)
{
- gcmkPRINT("[galcore]: %s(%d) GPU[%d] External clock off", __FUNCTION__, __LINE__, Core);
+ gcmkPRINT("[galcore]: %s(%d) External clock off", __FUNCTION__, __LINE__);
return gcvFALSE;
}
@@ -603,11 +583,20 @@ _AllowAccess(
return gcvTRUE;
}
- data = readl((gctUINT8 *)Os->device->registerBases[Core] + 0x0);
+#if gcdMULTI_GPU
+ if (Core == gcvCORE_MAJOR)
+ {
+ data = readl((gctUINT8 *)Os->device->registerBase3D[gcvCORE_3D_0_ID] + 0x0);
+ }
+ else
+#endif
+ {
+ data = readl((gctUINT8 *)Os->device->registerBases[Core] + 0x0);
+ }
if ((data & 0x3) == 0x3)
{
- gcmkPRINT("[galcore]: %s(%d) GPU[%d] Internal clock off", __FUNCTION__, __LINE__, Core);
+ gcmkPRINT("[galcore]: %s(%d) Internal clock off", __FUNCTION__, __LINE__);
return gcvFALSE;
}
@@ -696,6 +685,7 @@ gckOS_Construct(
/* Initialize the memory lock. */
gcmkONERROR(gckOS_CreateMutex(os, &os->memoryLock));
+ gcmkONERROR(gckOS_CreateMutex(os, &os->memoryMapLock));
/* Create debug lock mutex. */
gcmkONERROR(gckOS_CreateMutex(os, &os->debugLock));
@@ -761,7 +751,7 @@ gckOS_Construct(
gckOS_ImportAllocators(os);
#ifdef CONFIG_IOMMU_SUPPORT
- if (((gckGALDEVICE)(os->device))->args.mmu == gcvFALSE)
+ if (((gckGALDEVICE)(os->device))->mmu == gcvFALSE)
{
/* Only use IOMMU when internal MMU is not enabled. */
status = gckIOMMU_Construct(os, &os->iommu);
@@ -800,6 +790,12 @@ OnError:
gckOS_DeleteMutex(os, os->signalMutex));
}
+ if (os->memoryMapLock != gcvNULL)
+ {
+ gcmkVERIFY_OK(
+ gckOS_DeleteMutex(os, os->memoryMapLock));
+ }
+
if (os->memoryLock != gcvNULL)
{
gcmkVERIFY_OK(
@@ -873,6 +869,7 @@ gckOS_Destroy(
gcmkVERIFY_OK(gckOS_DeleteMutex(Os, Os->signalMutex));
/* Destroy the memory lock. */
+ gcmkVERIFY_OK(gckOS_DeleteMutex(Os, Os->memoryMapLock));
gcmkVERIFY_OK(gckOS_DeleteMutex(Os, Os->memoryLock));
/* Destroy debug lock mutex. */
@@ -1206,10 +1203,8 @@ gckOS_MapMemory(
OUT gctPOINTER * Logical
)
{
- gceSTATUS status;
PLINUX_MDL_MAP mdlMap;
PLINUX_MDL mdl = (PLINUX_MDL)Physical;
- gckALLOCATOR allocator;
gcmkHEADER_ARG("Os=0x%X Physical=0x%X Bytes=%lu", Os, Physical, Bytes);
@@ -1219,7 +1214,7 @@ gckOS_MapMemory(
gcmkVERIFY_ARGUMENT(Bytes > 0);
gcmkVERIFY_ARGUMENT(Logical != gcvNULL);
- mutex_lock(&mdl->mapsMutex);
+ MEMORY_LOCK(Os);
mdlMap = FindMdlMap(mdl, _GetProcessID());
@@ -1229,29 +1224,134 @@ gckOS_MapMemory(
if (mdlMap == gcvNULL)
{
- mutex_unlock(&mdl->mapsMutex);
+ MEMORY_UNLOCK(Os);
gcmkFOOTER_ARG("status=%d", gcvSTATUS_OUT_OF_MEMORY);
return gcvSTATUS_OUT_OF_MEMORY;
}
}
+ MEMORY_UNLOCK(Os);
+
if (mdlMap->vmaAddr == gcvNULL)
{
- allocator = mdl->allocator;
- gcmkONERROR(allocator->ops->MapUser(allocator, mdl, gcvFALSE, &mdlMap->vmaAddr));
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0)
+ mdlMap->vmaAddr = (char *)vm_mmap(gcvNULL,
+ 0L,
+ mdl->numPages * PAGE_SIZE,
+ PROT_READ | PROT_WRITE,
+ MAP_SHARED,
+ 0);
+#else
+ down_write(&current->mm->mmap_sem);
+
+ mdlMap->vmaAddr = (char *)do_mmap_pgoff(gcvNULL,
+ 0L,
+ mdl->numPages * PAGE_SIZE,
+ PROT_READ | PROT_WRITE,
+ MAP_SHARED,
+ 0);
+
+ up_write(&current->mm->mmap_sem);
+#endif
+
+ if (IS_ERR(mdlMap->vmaAddr))
+ {
+ gcmkTRACE(
+ gcvLEVEL_ERROR,
+ "%s(%d): do_mmap_pgoff error",
+ __FUNCTION__, __LINE__
+ );
+
+ gcmkTRACE(
+ gcvLEVEL_ERROR,
+ "%s(%d): mdl->numPages: %d mdl->vmaAddr: 0x%X",
+ __FUNCTION__, __LINE__,
+ mdl->numPages,
+ mdlMap->vmaAddr
+ );
+
+ mdlMap->vmaAddr = gcvNULL;
+
+ gcmkFOOTER_ARG("status=%d", gcvSTATUS_OUT_OF_MEMORY);
+ return gcvSTATUS_OUT_OF_MEMORY;
}
- mutex_unlock(&mdl->mapsMutex);
+ down_write(&current->mm->mmap_sem);
+
+ mdlMap->vma = find_vma(current->mm, (unsigned long)mdlMap->vmaAddr);
+
+ if (!mdlMap->vma)
+ {
+ gcmkTRACE(
+ gcvLEVEL_ERROR,
+ "%s(%d): find_vma error.",
+ __FUNCTION__, __LINE__
+ );
+
+ mdlMap->vmaAddr = gcvNULL;
+
+ up_write(&current->mm->mmap_sem);
+
+ gcmkFOOTER_ARG("status=%d", gcvSTATUS_OUT_OF_RESOURCES);
+ return gcvSTATUS_OUT_OF_RESOURCES;
+ }
+
+#ifndef NO_DMA_COHERENT
+ if (dma_mmap_writecombine(gcvNULL,
+ mdlMap->vma,
+ mdl->addr,
+ mdl->dmaHandle,
+ mdl->numPages * PAGE_SIZE) < 0)
+ {
+ up_write(&current->mm->mmap_sem);
+
+ gcmkTRACE(
+ gcvLEVEL_ERROR,
+ "%s(%d): dma_mmap_coherent error.",
+ __FUNCTION__, __LINE__
+ );
+
+ mdlMap->vmaAddr = gcvNULL;
+
+ gcmkFOOTER_ARG("status=%d", gcvSTATUS_OUT_OF_RESOURCES);
+ return gcvSTATUS_OUT_OF_RESOURCES;
+ }
+#else
+#if !gcdPAGED_MEMORY_CACHEABLE
+ mdlMap->vma->vm_page_prot = gcmkPAGED_MEMROY_PROT(mdlMap->vma->vm_page_prot);
+ mdlMap->vma->vm_flags |= gcdVM_FLAGS;
+# endif
+ mdlMap->vma->vm_pgoff = 0;
+
+ if (remap_pfn_range(mdlMap->vma,
+ mdlMap->vma->vm_start,
+ mdl->dmaHandle >> PAGE_SHIFT,
+ mdl->numPages*PAGE_SIZE,
+ mdlMap->vma->vm_page_prot) < 0)
+ {
+ up_write(&current->mm->mmap_sem);
+
+ gcmkTRACE(
+ gcvLEVEL_ERROR,
+ "%s(%d): remap_pfn_range error.",
+ __FUNCTION__, __LINE__
+ );
+
+ mdlMap->vmaAddr = gcvNULL;
+
+ gcmkFOOTER_ARG("status=%d", gcvSTATUS_OUT_OF_RESOURCES);
+ return gcvSTATUS_OUT_OF_RESOURCES;
+ }
+#endif
+
+ up_write(&current->mm->mmap_sem);
+ }
*Logical = mdlMap->vmaAddr;
gcmkFOOTER_ARG("*Logical=0x%X", *Logical);
return gcvSTATUS_OK;
-
-OnError:
- gcmkFOOTER();
- return status;
}
/*******************************************************************************
@@ -1341,6 +1441,7 @@ gckOS_UnmapMemoryEx(
{
PLINUX_MDL_MAP mdlMap;
PLINUX_MDL mdl = (PLINUX_MDL)Physical;
+ gctPOINTER pointer = gcvNULL;
gcmkHEADER_ARG("Os=0x%X Physical=0x%X Bytes=%lu Logical=0x%X PID=%d",
Os, Physical, Bytes, Logical, PID);
@@ -1352,25 +1453,30 @@ gckOS_UnmapMemoryEx(
gcmkVERIFY_ARGUMENT(Logical != gcvNULL);
gcmkVERIFY_ARGUMENT(PID != 0);
+ MEMORY_LOCK(Os);
+
if (Logical)
{
- mutex_lock(&mdl->mapsMutex);
-
mdlMap = FindMdlMap(mdl, PID);
if (mdlMap == gcvNULL || mdlMap->vmaAddr == gcvNULL)
{
- mutex_unlock(&mdl->mapsMutex);
+ MEMORY_UNLOCK(Os);
gcmkFOOTER_ARG("status=%d", gcvSTATUS_INVALID_ARGUMENT);
return gcvSTATUS_INVALID_ARGUMENT;
}
- _UnmapUserLogical(mdlMap->vmaAddr, mdl->numPages * PAGE_SIZE);
+ pointer = mdlMap->vmaAddr;
gcmkVERIFY_OK(_DestroyMdlMap(mdl, mdlMap));
+ }
+
+ MEMORY_UNLOCK(Os);
- mutex_unlock(&mdl->mapsMutex);
+ if (pointer)
+ {
+ _UnmapUserLogical(pointer, mdl->numPages * PAGE_SIZE);
}
/* Success. */
@@ -1470,10 +1576,14 @@ gckOS_AllocateNonPagedMemory(
gctINT numPages;
PLINUX_MDL mdl = gcvNULL;
PLINUX_MDL_MAP mdlMap = gcvNULL;
- gctPOINTER addr;
- gceSTATUS status = gcvSTATUS_NOT_SUPPORTED;
- gckALLOCATOR allocator;
- gctUINT32 flag = gcvALLOC_FLAG_CONTIGUOUS;
+ gctSTRING addr;
+ gckKERNEL kernel;
+#ifdef NO_DMA_COHERENT
+ struct page * page;
+ long size, order;
+ gctPOINTER vaddr;
+#endif
+ gceSTATUS status;
gcmkHEADER_ARG("Os=0x%X InUserSpace=%d *Bytes=%lu",
Os, InUserSpace, gcmOPT_VALUE(Bytes));
@@ -1491,57 +1601,81 @@ gckOS_AllocateNonPagedMemory(
/* Get total number of pages.. */
numPages = GetPageCount(bytes, 0);
- /* Allocate mdl structure */
+ /* Allocate mdl+vector structure */
mdl = _CreateMdl();
if (mdl == gcvNULL)
{
gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
}
- /* Walk all allocators. */
- list_for_each_entry(allocator, &Os->allocatorList, head)
- {
- gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_OS,
- "%s(%d) flag = %x allocator->capability = %x",
- __FUNCTION__, __LINE__, flag, allocator->capability);
+ mdl->pagedMem = 0;
+ mdl->numPages = numPages;
#ifndef NO_DMA_COHERENT
- /* Point to dma coherent allocator. */
- if (strcmp(allocator->name, "dma"))
- {
- status = gcvSTATUS_NOT_SUPPORTED;
- continue;
- }
+#ifdef CONFIG_ARM64
+ addr = dma_alloc_coherent(gcvNULL,
#else
- if ((flag & allocator->capability) != flag)
- {
- status = gcvSTATUS_NOT_SUPPORTED;
- continue;
- }
+ addr = dma_alloc_writecombine(gcvNULL,
#endif
+ mdl->numPages * PAGE_SIZE,
+ &mdl->dmaHandle,
+ GFP_KERNEL | gcdNOWARN);
+#else
+ size = mdl->numPages * PAGE_SIZE;
+ order = get_order(size);
+ page = alloc_pages(GFP_KERNEL | gcdNOWARN, order);
- status = allocator->ops->Alloc(allocator, mdl, numPages, flag);
-
- if (gcmIS_SUCCESS(status))
+ if (page == gcvNULL)
{
- mdl->allocator = allocator;
- break;
- }
+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
}
- /* Check status. */
- gcmkONERROR(status);
-
- mdl->numPages = numPages;
-
+ vaddr = (gctPOINTER)page_address(page);
mdl->contiguous = gcvTRUE;
-
- gcmkONERROR(allocator->ops->MapKernel(allocator, mdl, &addr));
+ mdl->u.contiguousPages = page;
+ addr = _CreateKernelVirtualMapping(mdl);
+ mdl->dmaHandle = virt_to_phys(vaddr);
+ mdl->kaddr = vaddr;
/* Trigger a page fault. */
memset(addr, 0, numPages * PAGE_SIZE);
+#if !defined(CONFIG_PPC)
+ /* Cache invalidate. */
+ dma_sync_single_for_device(
+ gcvNULL,
+ page_to_phys(page),
+ bytes,
+ DMA_FROM_DEVICE);
+#endif
+
+ while (size > 0)
+ {
+ SetPageReserved(virt_to_page(vaddr));
+
+ vaddr += PAGE_SIZE;
+ size -= PAGE_SIZE;
+ }
+#endif
+
+ if (addr == gcvNULL)
+ {
+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
+ }
+
+ kernel = Os->device->kernels[gcvCORE_MAJOR] != gcvNULL ?
+ Os->device->kernels[gcvCORE_MAJOR] : Os->device->kernels[gcvCORE_2D];
+
+#ifdef CONFLICT_BETWEEN_BASE_AND_PHYS
+ if (((Os->device->baseAddress & 0x80000000) != (mdl->dmaHandle & 0x80000000)) &&
+ kernel->hardware->mmuVersion == 0)
+ {
+ mdl->dmaHandle = (mdl->dmaHandle & ~0x80000000)
+ | (Os->device->baseAddress & 0x80000000);
+ }
+#endif
+
mdl->addr = addr;
if (InUserSpace)
@@ -1553,13 +1687,112 @@ gckOS_AllocateNonPagedMemory(
gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
}
- gcmkONERROR(allocator->ops->MapUser(allocator, mdl, gcvFALSE, &mdlMap->vmaAddr));
+ /* Only after mmap this will be valid. */
+
+ /* We need to map this to user space. */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0)
+ mdlMap->vmaAddr = (gctSTRING) vm_mmap(gcvNULL,
+ 0L,
+ mdl->numPages * PAGE_SIZE,
+ PROT_READ | PROT_WRITE,
+ MAP_SHARED,
+ 0);
+#else
+ down_write(&current->mm->mmap_sem);
+
+ mdlMap->vmaAddr = (gctSTRING) do_mmap_pgoff(gcvNULL,
+ 0L,
+ mdl->numPages * PAGE_SIZE,
+ PROT_READ | PROT_WRITE,
+ MAP_SHARED,
+ 0);
+
+ up_write(&current->mm->mmap_sem);
+#endif
+
+ if (IS_ERR(mdlMap->vmaAddr))
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_WARNING, gcvZONE_OS,
+ "%s(%d): do_mmap_pgoff error",
+ __FUNCTION__, __LINE__
+ );
+
+ mdlMap->vmaAddr = gcvNULL;
+
+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
+ }
+
+ down_write(&current->mm->mmap_sem);
+
+ mdlMap->vma = find_vma(current->mm, (unsigned long)mdlMap->vmaAddr);
+
+ if (mdlMap->vma == gcvNULL)
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_WARNING, gcvZONE_OS,
+ "%s(%d): find_vma error",
+ __FUNCTION__, __LINE__
+ );
+
+ up_write(&current->mm->mmap_sem);
+
+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
+ }
+
+#ifndef NO_DMA_COHERENT
+ if (dma_mmap_coherent(gcvNULL,
+ mdlMap->vma,
+ mdl->addr,
+ mdl->dmaHandle,
+ mdl->numPages * PAGE_SIZE) < 0)
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_WARNING, gcvZONE_OS,
+ "%s(%d): dma_mmap_coherent error",
+ __FUNCTION__, __LINE__
+ );
+
+ up_write(&current->mm->mmap_sem);
+
+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
+ }
+#else
+#if !gcdSECURITY
+ mdlMap->vma->vm_page_prot = gcmkNONPAGED_MEMROY_PROT(mdlMap->vma->vm_page_prot);
+#endif
+ mdlMap->vma->vm_flags |= gcdVM_FLAGS;
+ mdlMap->vma->vm_pgoff = 0;
+
+ if (remap_pfn_range(mdlMap->vma,
+ mdlMap->vma->vm_start,
+ mdl->dmaHandle >> PAGE_SHIFT,
+ mdl->numPages * PAGE_SIZE,
+ mdlMap->vma->vm_page_prot))
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_WARNING, gcvZONE_OS,
+ "%s(%d): remap_pfn_range error",
+ __FUNCTION__, __LINE__
+ );
+
+ up_write(&current->mm->mmap_sem);
+
+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
+ }
+#endif /* NO_DMA_COHERENT */
+
+ up_write(&current->mm->mmap_sem);
*Logical = mdlMap->vmaAddr;
}
else
{
- *Logical = addr;
+#if gcdSECURITY
+ *Logical = (gctPOINTER)mdl->kaddr;
+#else
+ *Logical = (gctPOINTER)mdl->addr;
+#endif
}
/*
@@ -1567,7 +1800,6 @@ gckOS_AllocateNonPagedMemory(
* Will be used by get physical address
* and mapuser pointer functions.
*/
-
MEMORY_LOCK(Os);
if (!Os->mdlHead)
@@ -1612,7 +1844,6 @@ OnError:
return status;
}
-
/*******************************************************************************
**
** gckOS_FreeNonPagedMemory
@@ -1645,8 +1876,11 @@ gceSTATUS gckOS_FreeNonPagedMemory(
)
{
PLINUX_MDL mdl;
-
- gckALLOCATOR allocator;
+ PLINUX_MDL_MAP mdlMap;
+#ifdef NO_DMA_COHERENT
+ unsigned size;
+ gctPOINTER vaddr;
+#endif /* NO_DMA_COHERENT */
gcmkHEADER_ARG("Os=0x%X Bytes=%lu Physical=0x%X Logical=0x%X",
Os, Bytes, Physical, Logical);
@@ -1660,13 +1894,44 @@ gceSTATUS gckOS_FreeNonPagedMemory(
/* Convert physical address into a pointer to a MDL. */
mdl = (PLINUX_MDL) Physical;
- allocator = mdl->allocator;
+#ifndef NO_DMA_COHERENT
+#ifdef CONFIG_ARM64
+ dma_free_coherent(gcvNULL,
+#else
+ dma_free_writecombine(gcvNULL,
+#endif
+ mdl->numPages * PAGE_SIZE,
+ mdl->addr,
+ mdl->dmaHandle);
+#else
+ size = mdl->numPages * PAGE_SIZE;
+ vaddr = mdl->kaddr;
- allocator->ops->UnmapKernel(allocator, mdl, mdl->addr);
- allocator->ops->Free(allocator, mdl);
+ while (size > 0)
+ {
+ ClearPageReserved(virt_to_page(vaddr));
+
+ vaddr += PAGE_SIZE;
+ size -= PAGE_SIZE;
+ }
+
+ free_pages((unsigned long)mdl->kaddr, get_order(mdl->numPages * PAGE_SIZE));
+
+ _DestoryKernelVirtualMapping(mdl->addr);
+#endif /* NO_DMA_COHERENT */
MEMORY_LOCK(Os);
+ mdlMap = mdl->maps;
+
+ while (mdlMap != gcvNULL)
+ {
+ /* No mapped memory exists when free nonpaged memory */
+ gcmkASSERT(mdlMap->vmaAddr == gcvNULL);
+
+ mdlMap = mdlMap->next;
+ }
+
/* Remove the node from global list.. */
if (mdl == Os->mdlHead)
{
@@ -1738,33 +2003,63 @@ gckOS_ReadRegisterEx(
/* Verify the arguments. */
gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
-
+#if !gcdMULTI_GPU
gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
-
+#endif
gcmkVERIFY_ARGUMENT(Data != gcvNULL);
- if (!in_irq())
+ if (!in_interrupt())
{
mutex_lock(&Os->registerAccessLocks[Core]);
}
- gcmkBUG_ON(!_AllowAccess(Os, Core, Address), __FUNCTION__, __LINE__);
+ BUG_ON(!_AllowAccess(Os, Core, Address));
- *Data = readl((gctUINT8 *)Os->device->registerBases[Core] + Address);
+#if gcdMULTI_GPU
+ if (Core == gcvCORE_MAJOR)
+ {
+ *Data = readl((gctUINT8 *)Os->device->registerBase3D[gcvCORE_3D_0_ID] + Address);
+ }
+ else
+#endif
+ {
+ *Data = readl((gctUINT8 *)Os->device->registerBases[Core] + Address);
+ }
- if (!in_irq())
+ if (!in_interrupt())
{
mutex_unlock(&Os->registerAccessLocks[Core]);
}
-#if gcdDUMP_AHB_ACCESS
- gcmkPRINT("@[RD %d] %08x %08x", Core, Address, *Data);
-#endif
+ /* Success. */
+ gcmkFOOTER_ARG("*Data=0x%08x", *Data);
+ return gcvSTATUS_OK;
+}
+
+#if gcdMULTI_GPU
+gceSTATUS
+gckOS_ReadRegisterByCoreId(
+ IN gckOS Os,
+ IN gceCORE Core,
+ IN gctUINT32 CoreId,
+ IN gctUINT32 Address,
+ OUT gctUINT32 * Data
+ )
+{
+ gcmkHEADER_ARG("Os=0x%X Core=%d CoreId=%d Address=0x%X",
+ Os, Core, CoreId, Address);
+
+ /* Verify the arguments. */
+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
+ gcmkVERIFY_ARGUMENT(Data != gcvNULL);
+
+ *Data = readl((gctUINT8 *)Os->device->registerBase3D[CoreId] + Address);
/* Success. */
gcmkFOOTER_ARG("*Data=0x%08x", *Data);
return gcvSTATUS_OK;
}
+#endif
/*******************************************************************************
**
@@ -1807,30 +2102,61 @@ gckOS_WriteRegisterEx(
{
gcmkHEADER_ARG("Os=0x%X Core=%d Address=0x%X Data=0x%08x", Os, Core, Address, Data);
+#if !gcdMULTI_GPU
gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
+#endif
if (!in_interrupt())
{
mutex_lock(&Os->registerAccessLocks[Core]);
}
- gcmkBUG_ON(!_AllowAccess(Os, Core, Address), __FUNCTION__, __LINE__);
+ BUG_ON(!_AllowAccess(Os, Core, Address));
- writel(Data, (gctUINT8 *)Os->device->registerBases[Core] + Address);
+#if gcdMULTI_GPU
+ if (Core == gcvCORE_MAJOR)
+ {
+ writel(Data, (gctUINT8 *)Os->device->registerBase3D[gcvCORE_3D_0_ID] + Address);
+#if gcdMULTI_GPU > 1
+ writel(Data, (gctUINT8 *)Os->device->registerBase3D[gcvCORE_3D_1_ID] + Address);
+#endif
+ }
+ else
+#endif
+ {
+ writel(Data, (gctUINT8 *)Os->device->registerBases[Core] + Address);
+ }
if (!in_interrupt())
{
mutex_unlock(&Os->registerAccessLocks[Core]);
}
-#if gcdDUMP_AHB_ACCESS
- gcmkPRINT("@[WR %d] %08x %08x", Core, Address, Data);
-#endif
+ /* Success. */
+ gcmkFOOTER_NO();
+ return gcvSTATUS_OK;
+}
+
+#if gcdMULTI_GPU
+gceSTATUS
+gckOS_WriteRegisterByCoreId(
+ IN gckOS Os,
+ IN gceCORE Core,
+ IN gctUINT32 CoreId,
+ IN gctUINT32 Address,
+ IN gctUINT32 Data
+ )
+{
+ gcmkHEADER_ARG("Os=0x%X Core=%d CoreId=%d Address=0x%X Data=0x%08x",
+ Os, Core, CoreId, Address, Data);
+
+ writel(Data, (gctUINT8 *)Os->device->registerBase3D[CoreId] + Address);
/* Success. */
gcmkFOOTER_NO();
return gcvSTATUS_OK;
}
+#endif
/*******************************************************************************
**
@@ -1863,7 +2189,7 @@ gceSTATUS gckOS_GetPageSize(
*PageSize = (gctSIZE_T) PAGE_SIZE;
/* Success. */
- gcmkFOOTER_ARG("*PageSize=%d", *PageSize);
+ gcmkFOOTER_ARG("*PageSize", *PageSize);
return gcvSTATUS_OK;
}
@@ -1900,6 +2226,7 @@ _GetPhysicalAddressProcess(
{
PLINUX_MDL mdl;
gctINT8_PTR base;
+ gckALLOCATOR allocator = gcvNULL;
gceSTATUS status = gcvSTATUS_INVALID_ADDRESS;
gcmkHEADER_ARG("Os=0x%X Logical=0x%X ProcessID=%d", Os, Logical, ProcessID);
@@ -1929,18 +2256,11 @@ _GetPhysicalAddressProcess(
{
/* Try the contiguous memory pool. */
mdl = (PLINUX_MDL) Os->device->contiguousPhysical;
-
- mutex_lock(&mdl->mapsMutex);
-
- status = _ConvertLogical2Physical(
- Os,
+ status = _ConvertLogical2Physical(Os,
Logical,
ProcessID,
mdl,
- Address
- );
-
- mutex_unlock(&mdl->mapsMutex);
+ Address);
}
if (gcmIS_ERROR(status))
@@ -1948,17 +2268,27 @@ _GetPhysicalAddressProcess(
/* Walk all MDLs. */
for (mdl = Os->mdlHead; mdl != gcvNULL; mdl = mdl->next)
{
- mutex_lock(&mdl->mapsMutex);
+ /* Try this MDL. */
+ allocator = mdl->allocator;
- status = _ConvertLogical2Physical(
- Os,
+ if (allocator)
+ {
+ status = allocator->ops->LogicalToPhysical(
+ allocator,
+ mdl,
Logical,
ProcessID,
- mdl,
Address
);
-
- mutex_unlock(&mdl->mapsMutex);
+ }
+ else
+ {
+ status = _ConvertLogical2Physical(Os,
+ Logical,
+ ProcessID,
+ mdl,
+ Address);
+ }
if (gcmIS_SUCCESS(status))
{
@@ -2165,24 +2495,61 @@ _ConvertLogical2Physical(
OUT gctPHYS_ADDR_T * Physical
)
{
- gckALLOCATOR allocator = Mdl->allocator;
+ gctINT8_PTR base, vBase;
gctUINT32 offset;
- gceSTATUS status = gcvSTATUS_NOT_FOUND;
- gctINT8_PTR vBase;
+ PLINUX_MDL_MAP map;
+ gcsUSER_MAPPING_PTR userMap;
+
+#if gcdSECURITY
+ base = (Mdl == gcvNULL) ? gcvNULL : (gctINT8_PTR) Mdl->kaddr;
+#else
+ base = (Mdl == gcvNULL) ? gcvNULL : (gctINT8_PTR) Mdl->addr;
+#endif
- if ((gctUINTPTR_T)Logical >= TASK_SIZE)
+ /* Check for the logical address match. */
+ if ((base != gcvNULL)
+ && ((gctINT8_PTR) Logical >= base)
+ && ((gctINT8_PTR) Logical < base + Mdl->numPages * PAGE_SIZE)
+ )
{
- /* Kernel virtual address. */
- vBase = Mdl->addr;
+ offset = (gctINT8_PTR) Logical - base;
+
+ if (Mdl->dmaHandle != 0)
+ {
+ /* The memory was from coherent area. */
+ *Physical = (gctUINT32) Mdl->dmaHandle + offset;
+ }
+ else if (Mdl->pagedMem && !Mdl->contiguous)
+ {
+ /* paged memory is not mapped to kernel space. */
+ return gcvSTATUS_INVALID_ADDRESS;
}
else
{
- /* User virtual address. */
- PLINUX_MDL_MAP map;
+ *Physical = gcmPTR2INT32(virt_to_phys(base)) + offset;
+ }
+
+ return gcvSTATUS_OK;
+ }
+
+ /* Walk user maps. */
+ for (userMap = Os->userMap; userMap != gcvNULL; userMap = userMap->next)
+ {
+ if (((gctINT8_PTR) Logical >= userMap->start)
+ && ((gctINT8_PTR) Logical < userMap->end)
+ )
+ {
+ *Physical = userMap->physical
+ + (gctUINT32) ((gctINT8_PTR) Logical - userMap->start);
+
+ return gcvSTATUS_OK;
+ }
+ }
+ if (ProcessID != Os->kernelProcessID)
+ {
map = FindMdlMap(Mdl, (gctINT) ProcessID);
vBase = (map == gcvNULL) ? gcvNULL : (gctINT8_PTR) map->vmaAddr;
- }
/* Is the given address within that range. */
if ((vBase != gcvNULL)
@@ -2192,12 +2559,26 @@ _ConvertLogical2Physical(
{
offset = (gctINT8_PTR) Logical - vBase;
- allocator->ops->Physical(allocator, Mdl, offset, Physical);
+ if (Mdl->dmaHandle != 0)
+ {
+ /* The memory was from coherent area. */
+ *Physical = (gctUINT32) Mdl->dmaHandle + offset;
+ }
+ else if (Mdl->pagedMem && !Mdl->contiguous)
+ {
+ *Physical = _NonContiguousToPhys(Mdl->u.nonContiguousPages, offset/PAGE_SIZE);
+ }
+ else
+ {
+ *Physical = page_to_phys(Mdl->u.contiguousPages) + offset;
+ }
- status = gcvSTATUS_OK;
+ return gcvSTATUS_OK;
+ }
}
- return status;
+ /* Address not yet found. */
+ return gcvSTATUS_INVALID_ADDRESS;
}
/*******************************************************************************
@@ -2267,13 +2648,12 @@ gckOS_MapPhysical(
if (mdl == gcvNULL)
{
- unsigned long pfn = physical >> PAGE_SHIFT;
+ struct page * page = pfn_to_page(physical >> PAGE_SHIFT);
- if (pfn_valid(pfn))
+ if (pfn_valid(page_to_pfn(page)))
{
gctUINT32 offset = physical & ~PAGE_MASK;
struct page ** pages;
- struct page * page;
gctUINT numPages;
gctINT i;
@@ -2287,8 +2667,6 @@ gckOS_MapPhysical(
return gcvSTATUS_OUT_OF_MEMORY;
}
- page = pfn_to_page(pfn);
-
for (i = 0; i < numPages; i++)
{
pages[i] = nth_page(page, i);
@@ -3282,7 +3660,6 @@ gckOS_AllocatePagedMemoryEx(
if ((Flag & allocator->capability) != Flag)
{
- status = gcvSTATUS_NOT_SUPPORTED;
continue;
}
@@ -3301,6 +3678,7 @@ gckOS_AllocatePagedMemoryEx(
mdl->dmaHandle = 0;
mdl->addr = 0;
mdl->numPages = numPages;
+ mdl->pagedMem = 1;
mdl->contiguous = Flag & gcvALLOC_FLAG_CONTIGUOUS;
if (Gid != gcvNULL)
@@ -3479,7 +3857,7 @@ gckOS_LockPages(
mdl = (PLINUX_MDL) Physical;
allocator = mdl->allocator;
- mutex_lock(&mdl->mapsMutex);
+ MEMORY_LOCK(Os);
mdlMap = FindMdlMap(mdl, _GetProcessID());
@@ -3489,28 +3867,28 @@ gckOS_LockPages(
if (mdlMap == gcvNULL)
{
- mutex_unlock(&mdl->mapsMutex);
+ MEMORY_UNLOCK(Os);
gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY);
return gcvSTATUS_OUT_OF_MEMORY;
}
}
- if (mdlMap->vmaAddr == gcvNULL)
+ MEMORY_UNLOCK(Os);
+
+ if (atomic_inc_return(&mdlMap->count) == 1)
{
- status = allocator->ops->MapUser(allocator, mdl, Cacheable, &mdlMap->vmaAddr);
+ gcmkASSERT(mdlMap->vmaAddr == gcvNULL);
+
+ status = allocator->ops->MapUser(allocator, mdl, mdlMap, Cacheable);
if (gcmIS_ERROR(status))
{
- mutex_unlock(&mdl->mapsMutex);
-
gcmkFOOTER_ARG("*status=%d", status);
return status;
}
}
- mdlMap->count++;
-
/* Convert pointer to MDL. */
*Logical = mdlMap->vmaAddr;
@@ -3520,7 +3898,14 @@ gckOS_LockPages(
*PageCount = mdl->numPages * (PAGE_SIZE / 4096);
- mutex_unlock(&mdl->mapsMutex);
+ gcmkVERIFY_OK(gckOS_CacheFlush(
+ Os,
+ _GetProcessID(),
+ Physical,
+ gcvINVALID_ADDRESS,
+ (gctPOINTER)mdlMap->vmaAddr,
+ mdl->numPages * PAGE_SIZE
+ ));
/* Success. */
gcmkFOOTER_ARG("*Logical=0x%X *PageCount=%lu", *Logical, *PageCount);
@@ -3559,7 +3944,12 @@ gckOS_MapPages(
IN gctPOINTER PageTable
)
{
- return gcvSTATUS_NOT_SUPPORTED;
+ return gckOS_MapPagesEx(Os,
+ gcvCORE_MAJOR,
+ Physical,
+ PageCount,
+ 0,
+ PageTable);
}
gceSTATUS
@@ -3569,9 +3959,7 @@ gckOS_MapPagesEx(
IN gctPHYS_ADDR Physical,
IN gctSIZE_T PageCount,
IN gctUINT32 Address,
- IN gctPOINTER PageTable,
- IN gctBOOL Writable,
- IN gceSURF_TYPE Type
+ IN gctPOINTER PageTable
)
{
gceSTATUS status = gcvSTATUS_OK;
@@ -3591,11 +3979,6 @@ gckOS_MapPagesEx(
#endif
gckALLOCATOR allocator;
- gctUINT32 policyID = 0;
- gctUINT32 axiConfig = 0;
-
- gcsPLATFORM * platform = Os->device->platform;
-
gcmkHEADER_ARG("Os=0x%X Core=%d Physical=0x%X PageCount=%u PageTable=0x%X",
Os, Core, Physical, PageCount, PageTable);
@@ -3610,14 +3993,16 @@ gckOS_MapPagesEx(
allocator = mdl->allocator;
+ /* Only support pagedMem, and pagedMem always has its allocator. */
gcmkASSERT(allocator != gcvNULL);
gcmkTRACE_ZONE(
gcvLEVEL_INFO, gcvZONE_OS,
- "%s(%d): Physical->0x%X PageCount->0x%X",
+ "%s(%d): Physical->0x%X PageCount->0x%X PagedMemory->?%d",
__FUNCTION__, __LINE__,
(gctUINT32)(gctUINTPTR_T)Physical,
- (gctUINT32)(gctUINTPTR_T)PageCount
+ (gctUINT32)(gctUINTPTR_T)PageCount,
+ mdl->pagedMem
);
#if gcdPROCESS_ADDRESS_SPACE
@@ -3631,16 +4016,6 @@ gckOS_MapPagesEx(
mmuMdl = (PLINUX_MDL)mmu->pageTablePhysical;
#endif
- if (platform && platform->ops->getPolicyID)
- {
- platform->ops->getPolicyID(platform, Type, &policyID, &axiConfig);
-
- gcmkBUG_ON(policyID > 0x1F, __FUNCTION__, __LINE__);
-
- /* ID[3:0] is used in STLB. */
- policyID &= 0xF;
- }
-
/* Get all the physical addresses and store them in the page table. */
offset = 0;
@@ -3652,19 +4027,10 @@ gckOS_MapPagesEx(
gctUINT i;
gctPHYS_ADDR_T phys = ~0U;
- allocator->ops->Physical(allocator, mdl, offset * PAGE_SIZE, &phys);
+ allocator->ops->Physical(allocator, mdl, offset, &phys);
gcmkVERIFY_OK(gckOS_CPUPhysicalToGPUPhysical(Os, phys, &phys));
- if (policyID)
- {
- /* AxUSER must not used for address currently. */
- gcmkBUG_ON((phys >> 32) & 0xF, __FUNCTION__, __LINE__);
-
- /* Merge policyID to AxUSER[7:4].*/
- phys |= ((gctPHYS_ADDR_T)policyID << 36);
- }
-
#ifdef CONFIG_IOMMU_SUPPORT
if (Os->iommu)
{
@@ -3705,13 +4071,11 @@ gckOS_MapPagesEx(
gcmkONERROR(
gckMMU_SetPage(mmu,
phys + (i * 4096),
- Writable,
pageTableEntry));
#else
gcmkONERROR(
gckMMU_SetPage(Os->device->kernels[Core]->mmu,
phys + (i * 4096),
- Writable,
table++));
#endif
}
@@ -3797,6 +4161,7 @@ gckOS_UnlockPages(
PLINUX_MDL_MAP mdlMap;
PLINUX_MDL mdl = (PLINUX_MDL)Physical;
gckALLOCATOR allocator = mdl->allocator;
+ gctPOINTER pointer = gcvNULL;
gcmkHEADER_ARG("Os=0x%X Physical=0x%X Bytes=%u Logical=0x%X",
Os, Physical, Bytes, Logical);
@@ -3806,7 +4171,7 @@ gckOS_UnlockPages(
gcmkVERIFY_ARGUMENT(Physical != gcvNULL);
gcmkVERIFY_ARGUMENT(Logical != gcvNULL);
- mutex_lock(&mdl->mapsMutex);
+ MEMORY_LOCK(Os);
mdlMap = mdl->maps;
@@ -3814,21 +4179,26 @@ gckOS_UnlockPages(
{
if ((mdlMap->vmaAddr != gcvNULL) && (_GetProcessID() == mdlMap->pid))
{
- if (--mdlMap->count == 0)
+ if (atomic_dec_and_test(&mdlMap->count))
{
- allocator->ops->UnmapUser(
- allocator,
- mdlMap->vmaAddr,
- mdl->numPages * PAGE_SIZE);
-
+ /* User virtual address to be unmap. */
+ pointer = mdlMap->vmaAddr;
mdlMap->vmaAddr = gcvNULL;
}
+
+ /* There is only one map for one process.*/
+ break;
}
mdlMap = mdlMap->next;
}
- mutex_unlock(&mdl->mapsMutex);
+ MEMORY_UNLOCK(Os);
+
+ if (pointer)
+ {
+ allocator->ops->UnmapUser(allocator, pointer, mdl->numPages * PAGE_SIZE);
+ }
/* Success. */
gcmkFOOTER_NO();
@@ -4103,6 +4473,9 @@ gckOS_MapUserPointer(
OUT gctPOINTER * KernelPointer
)
{
+ gctPOINTER buf = gcvNULL;
+ gctUINT32 len;
+
gcmkHEADER_ARG("Os=0x%X Pointer=0x%X Size=%lu", Os, Pointer, Size);
/* Verify the arguments. */
@@ -4111,7 +4484,38 @@ gckOS_MapUserPointer(
gcmkVERIFY_ARGUMENT(Size > 0);
gcmkVERIFY_ARGUMENT(KernelPointer != gcvNULL);
- *KernelPointer = Pointer;
+ buf = kmalloc(Size, GFP_KERNEL | gcdNOWARN);
+ if (buf == gcvNULL)
+ {
+ gcmkTRACE(
+ gcvLEVEL_ERROR,
+ "%s(%d): Failed to allocate memory.",
+ __FUNCTION__, __LINE__
+ );
+
+ gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY);
+ return gcvSTATUS_OUT_OF_MEMORY;
+ }
+
+ len = copy_from_user(buf, Pointer, Size);
+ if (len != 0)
+ {
+ gcmkTRACE(
+ gcvLEVEL_ERROR,
+ "%s(%d): Failed to copy data from user.",
+ __FUNCTION__, __LINE__
+ );
+
+ if (buf != gcvNULL)
+ {
+ kfree(buf);
+ }
+
+ gcmkFOOTER_ARG("*status=%d", gcvSTATUS_GENERIC_IO);
+ return gcvSTATUS_GENERIC_IO;
+ }
+
+ *KernelPointer = buf;
gcmkFOOTER_ARG("*KernelPointer=0x%X", *KernelPointer);
return gcvSTATUS_OK;
@@ -4149,9 +4553,34 @@ gckOS_UnmapUserPointer(
IN gctPOINTER KernelPointer
)
{
+ gctUINT32 len;
+
gcmkHEADER_ARG("Os=0x%X Pointer=0x%X Size=%lu KernelPointer=0x%X",
Os, Pointer, Size, KernelPointer);
+
+ /* Verify the arguments. */
+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
+ gcmkVERIFY_ARGUMENT(Pointer != gcvNULL);
+ gcmkVERIFY_ARGUMENT(Size > 0);
+ gcmkVERIFY_ARGUMENT(KernelPointer != gcvNULL);
+
+ len = copy_to_user(Pointer, KernelPointer, Size);
+
+ kfree(KernelPointer);
+
+ if (len != 0)
+ {
+ gcmkTRACE(
+ gcvLEVEL_ERROR,
+ "%s(%d): Failed to copy data to user.",
+ __FUNCTION__, __LINE__
+ );
+
+ gcmkFOOTER_ARG("status=%d", gcvSTATUS_GENERIC_IO);
+ return gcvSTATUS_GENERIC_IO;
+ }
+
gcmkFOOTER_NO();
return gcvSTATUS_OK;
}
@@ -4376,43 +4805,6 @@ OnError:
return status;
}
-gceSTATUS
-gckOS_ReadMappedPointer(
- IN gckOS Os,
- IN gctPOINTER Address,
- IN gctUINT32_PTR Data
- )
-{
- gceSTATUS status;
- gcmkHEADER_ARG("Os=0x%X Address=0x%X Data=%u", Os, Address, Data);
-
- /* Verify the arguments. */
- gcmkVERIFY_ARGUMENT(Address != gcvNULL);
-
- /* Write memory. */
- if (access_ok(VERIFY_READ, Address, 4))
- {
- /* User address. */
- if (get_user(*Data, (gctUINT32*)Address))
- {
- gcmkONERROR(gcvSTATUS_INVALID_ADDRESS);
- }
- }
- else
- {
- /* Kernel address. */
- *Data = *(gctUINT32_PTR)Address;
- }
-
- /* Success. */
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- gcmkFOOTER();
- return status;
-}
-
/*******************************************************************************
**
** gckOS_MapUserMemory
@@ -4449,7 +4841,554 @@ gckOS_MapUserMemory(
OUT gctUINT32_PTR Address
)
{
- return gcvSTATUS_NOT_SUPPORTED;
+ gceSTATUS status;
+
+ gcmkHEADER_ARG("Os=0x%x Core=%d Memory=0x%x Size=%lu", Os, Core, Memory, Size);
+
+#if gcdSECURE_USER
+ gcmkONERROR(gckOS_AddMapping(Os, *Address, Memory, Size));
+
+ gcmkFOOTER_NO();
+ return gcvSTATUS_OK;
+
+OnError:
+ gcmkFOOTER();
+ return status;
+#else
+{
+ gctSIZE_T pageCount, i, j;
+ gctUINT32_PTR pageTable;
+ gctUINT32 address = 0, physical = ~0U;
+ gctUINTPTR_T start, end, memory;
+ gctUINT32 offset;
+ gctINT result = 0;
+#if gcdPROCESS_ADDRESS_SPACE
+ gckMMU mmu;
+#endif
+
+ gcsPageInfo_PTR info = gcvNULL;
+ struct page **pages = gcvNULL;
+ gctBOOL *ref = gcvNULL;
+
+ /* Verify the arguments. */
+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
+ gcmkVERIFY_ARGUMENT(Memory != gcvNULL || Physical != ~0U);
+ gcmkVERIFY_ARGUMENT(Size > 0);
+ gcmkVERIFY_ARGUMENT(Info != gcvNULL);
+ gcmkVERIFY_ARGUMENT(Address != gcvNULL);
+
+ do
+ {
+ gctSIZE_T extraPage;
+
+ memory = (gctUINTPTR_T) Memory;
+
+ /* Get the number of required pages. */
+ end = (memory + Size + PAGE_SIZE - 1) >> PAGE_SHIFT;
+ start = memory >> PAGE_SHIFT;
+ pageCount = end - start;
+
+ /* Allocate extra page to avoid cache overflow */
+#if gcdENABLE_2D
+ extraPage = 2;
+#else
+ extraPage = (((memory + gcmALIGN(Size + 64, 64) + PAGE_SIZE - 1) >> PAGE_SHIFT) > end) ? 1 : 0;
+#endif
+
+
+ gcmkTRACE_ZONE(
+ gcvLEVEL_INFO, gcvZONE_OS,
+ "%s(%d): pageCount: %d.",
+ __FUNCTION__, __LINE__,
+ pageCount
+ );
+
+ /* Overflow. */
+ if ((memory + Size) < memory)
+ {
+ gcmkFOOTER_ARG("status=%d", gcvSTATUS_INVALID_ARGUMENT);
+ return gcvSTATUS_INVALID_ARGUMENT;
+ }
+
+ MEMORY_MAP_LOCK(Os);
+
+ /* Allocate the Info struct. */
+ info = (gcsPageInfo_PTR)kmalloc(sizeof(gcsPageInfo), GFP_KERNEL | gcdNOWARN);
+
+ if (info == gcvNULL)
+ {
+ status = gcvSTATUS_OUT_OF_MEMORY;
+ break;
+ }
+
+ info->extraPage = 0;
+
+ /* Allocate the array of page addresses. */
+ pages = (struct page **)kmalloc((pageCount + extraPage) * sizeof(struct page *), GFP_KERNEL | gcdNOWARN);
+
+ if (pages == gcvNULL)
+ {
+ status = gcvSTATUS_OUT_OF_MEMORY;
+ break;
+ }
+
+ ref = (gctBOOL *)kzalloc((pageCount + extraPage) * sizeof(gctBOOL), GFP_KERNEL | gcdNOWARN);
+
+ if (ref == gcvNULL)
+ {
+ status = gcvSTATUS_OUT_OF_MEMORY;
+ break;
+ }
+
+ if (Physical != ~0U)
+ {
+ for (i = 0; i < pageCount; i++)
+ {
+ pages[i] = pfn_to_page((Physical >> PAGE_SHIFT) + i);
+
+ if (pfn_valid(page_to_pfn(pages[i])))
+ {
+ ref[i] = get_page_unless_zero(pages[i]);
+ }
+ }
+ }
+ else
+ {
+ /* Get the user pages. */
+ down_read(&current->mm->mmap_sem);
+
+ result = get_user_pages(current,
+ current->mm,
+ memory & PAGE_MASK,
+ pageCount,
+ 1,
+ 0,
+ pages,
+ gcvNULL
+ );
+
+ up_read(&current->mm->mmap_sem);
+
+ if (result <=0 || result < pageCount)
+ {
+ struct vm_area_struct *vma;
+
+ /* Release the pages if any. */
+ if (result > 0)
+ {
+ for (i = 0; i < result; i++)
+ {
+ if (pages[i] == gcvNULL)
+ {
+ break;
+ }
+
+ page_cache_release(pages[i]);
+ pages[i] = gcvNULL;
+ }
+
+ result = 0;
+ }
+
+ vma = find_vma(current->mm, memory);
+
+ if (vma && (vma->vm_flags & VM_PFNMAP))
+ {
+ pte_t * pte;
+ spinlock_t * ptl;
+ gctUINTPTR_T logical = memory;
+
+ for (i = 0; i < pageCount; i++)
+ {
+ pgd_t * pgd = pgd_offset(current->mm, logical);
+ pud_t * pud = pud_offset(pgd, logical);
+
+ if (pud)
+ {
+ pmd_t * pmd = pmd_offset(pud, logical);
+ pte = pte_offset_map_lock(current->mm, pmd, logical, &ptl);
+ if (!pte)
+ {
+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
+ }
+ }
+ else
+ {
+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
+ }
+
+ pages[i] = pte_page(*pte);
+ pte_unmap_unlock(pte, ptl);
+
+ /* Advance to next. */
+ logical += PAGE_SIZE;
+ }
+ }
+ else
+ {
+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
+ }
+
+ /* Check if this memory is contiguous for old mmu. */
+ if (Os->device->kernels[Core]->hardware->mmuVersion == 0)
+ {
+ for (i = 1; i < pageCount; i++)
+ {
+ if (pages[i] != nth_page(pages[0], i))
+ {
+ /* Non-contiguous. */
+ break;
+ }
+ }
+
+ if (i == pageCount)
+ {
+ /* Contiguous memory. */
+ physical = page_to_phys(pages[0]) | (memory & ~PAGE_MASK);
+
+ if (!((physical - Os->device->baseAddress) & 0x80000000))
+ {
+ gctPHYS_ADDR_T gpuPhysical;
+ kfree(pages);
+ pages = gcvNULL;
+
+ info->pages = gcvNULL;
+ info->pageTable = gcvNULL;
+
+ MEMORY_MAP_UNLOCK(Os);
+
+ *Address = physical - Os->device->baseAddress;
+ *Info = info;
+
+ gcmkVERIFY_OK(
+ gckOS_CPUPhysicalToGPUPhysical(Os, *Address, &gpuPhysical));
+
+ gcmkSAFECASTPHYSADDRT(*Address, gpuPhysical);
+
+ gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x",
+ *Info, *Address);
+
+ return gcvSTATUS_OK;
+ }
+ }
+ }
+
+ /* Reference pages. */
+ for (i = 0; i < pageCount; i++)
+ {
+ if (pfn_valid(page_to_pfn(pages[i])))
+ {
+ ref[i] = get_page_unless_zero(pages[i]);
+ }
+ }
+ }
+ else
+ {
+ /* Mark feference when pages from get_user_pages. */
+ for (i = 0; i < pageCount; i++)
+ {
+ ref[i] = gcvTRUE;
+ }
+ }
+ }
+
+ for (i = 0; i < pageCount; i++)
+ {
+#ifdef CONFIG_ARM
+ gctUINT32 data;
+ get_user(data, (gctUINT32*)((memory & PAGE_MASK) + i * PAGE_SIZE));
+#endif
+
+ /* Flush(clean) the data cache. */
+ gcmkONERROR(gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
+ page_to_phys(pages[i]),
+ (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE,
+ PAGE_SIZE));
+ }
+
+#if gcdPROCESS_ADDRESS_SPACE
+ gcmkONERROR(gckKERNEL_GetProcessMMU(Os->device->kernels[Core], &mmu));
+#endif
+
+ if (extraPage)
+ {
+ for (i = 0; i < extraPage; i++)
+ {
+ pages[pageCount++] = Os->paddingPage;
+ }
+ info->extraPage = extraPage;
+ }
+
+#if gcdSECURITY
+ {
+ gctPHYS_ADDR physicalArrayPhysical;
+ gctPOINTER physicalArrayLogical;
+ gctUINT32_PTR logical;
+ gctSIZE_T bytes = pageCount * gcmSIZEOF(gctUINT32);
+ pageTable = gcvNULL;
+
+ gcmkONERROR(gckOS_AllocateNonPagedMemory(
+ Os,
+ gcvFALSE,
+ &bytes,
+ &physicalArrayPhysical,
+ &physicalArrayLogical
+ ));
+
+ logical = physicalArrayLogical;
+
+ /* Fill the page table. */
+ for (i = 0; i < pageCount; i++)
+ {
+ gctUINT32 phys;
+ phys = page_to_phys(pages[i]);
+
+ logical[i] = phys;
+ }
+ j = 0;
+
+
+ gcmkONERROR(gckKERNEL_SecurityMapMemory(
+ Os->device->kernels[Core],
+ physicalArrayLogical,
+ pageCount,
+ &address
+ ));
+
+ gcmkONERROR(gckOS_FreeNonPagedMemory(
+ Os,
+ 1,
+ physicalArrayPhysical,
+ physicalArrayLogical
+ ));
+ }
+
+#else
+#if gcdENABLE_VG
+ if (Core == gcvCORE_VG)
+ {
+ /* Allocate pages inside the page table. */
+ gcmkERR_BREAK(gckVGMMU_AllocatePages(Os->device->kernels[Core]->vg->mmu,
+ pageCount * (PAGE_SIZE/4096),
+ (gctPOINTER *) &pageTable,
+ &address));
+ }
+ else
+#endif
+ {
+#if gcdPROCESS_ADDRESS_SPACE
+ /* Allocate pages inside the page table. */
+ gcmkERR_BREAK(gckMMU_AllocatePages(mmu,
+ pageCount * (PAGE_SIZE/4096),
+ (gctPOINTER *) &pageTable,
+ &address));
+#else
+ /* Allocate pages inside the page table. */
+ gcmkERR_BREAK(gckMMU_AllocatePages(Os->device->kernels[Core]->mmu,
+ pageCount * (PAGE_SIZE/4096),
+ (gctPOINTER *) &pageTable,
+ &address));
+#endif
+ }
+
+ /* Fill the page table. */
+ for (i = 0; i < pageCount; i++)
+ {
+ gctPHYS_ADDR_T phys;
+ gctUINT32_PTR tab = pageTable + i * (PAGE_SIZE/4096);
+
+#if gcdPROCESS_ADDRESS_SPACE
+ gckMMU_GetPageEntry(mmu, address + i * 4096, &tab);
+#endif
+ phys = page_to_phys(pages[i]);
+
+#ifdef CONFIG_IOMMU_SUPPORT
+ if (Os->iommu)
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_INFO, gcvZONE_OS,
+ "%s(%d): Setup mapping in IOMMU %x => %x",
+ __FUNCTION__, __LINE__,
+ Address + (i * PAGE_SIZE), phys
+ );
+
+ gcmkONERROR(gckIOMMU_Map(
+ Os->iommu, address + i * PAGE_SIZE, phys, PAGE_SIZE));
+ }
+ else
+#endif
+ {
+
+#if gcdENABLE_VG
+ if (Core == gcvCORE_VG)
+ {
+ gcmkVERIFY_OK(
+ gckOS_CPUPhysicalToGPUPhysical(Os, phys, &phys));
+
+ /* Get the physical address from page struct. */
+ gcmkONERROR(
+ gckVGMMU_SetPage(Os->device->kernels[Core]->vg->mmu,
+ phys,
+ tab));
+ }
+ else
+#endif
+ {
+ /* Get the physical address from page struct. */
+ gcmkONERROR(
+ gckMMU_SetPage(Os->device->kernels[Core]->mmu,
+ phys,
+ tab));
+ }
+
+ for (j = 1; j < (PAGE_SIZE/4096); j++)
+ {
+ pageTable[i * (PAGE_SIZE/4096) + j] = pageTable[i * (PAGE_SIZE/4096)] + 4096 * j;
+ }
+ }
+
+#if !gcdPROCESS_ADDRESS_SPACE
+ gcmkTRACE_ZONE(
+ gcvLEVEL_INFO, gcvZONE_OS,
+ "%s(%d): pageTable[%d]: 0x%X 0x%X.",
+ __FUNCTION__, __LINE__,
+ i, phys, pageTable[i]);
+#endif
+ }
+
+#if gcdENABLE_VG
+ if (Core == gcvCORE_VG)
+ {
+ gcmkONERROR(gckVGMMU_Flush(Os->device->kernels[Core]->vg->mmu));
+ }
+ else
+#endif
+ {
+#if gcdPROCESS_ADDRESS_SPACE
+ info->mmu = mmu;
+ gcmkONERROR(gckMMU_Flush(mmu));
+#else
+ gcmkONERROR(gckMMU_Flush(Os->device->kernels[Core]->mmu, gcvSURF_TYPE_UNKNOWN));
+#endif
+ }
+#endif
+ info->address = address;
+
+ /* Save pointer to page table. */
+ info->pageTable = pageTable;
+ info->pages = pages;
+ info->ref = ref;
+
+ *Info = (gctPOINTER) info;
+
+ gcmkTRACE_ZONE(
+ gcvLEVEL_INFO, gcvZONE_OS,
+ "%s(%d): info->pages: 0x%X, info->pageTable: 0x%X, info: 0x%X.",
+ __FUNCTION__, __LINE__,
+ info->pages,
+ info->pageTable,
+ info
+ );
+
+ offset = (Physical != ~0U)
+ ? (Physical & ~PAGE_MASK)
+ : (memory & ~PAGE_MASK);
+
+ /* Return address. */
+ *Address = address + offset;
+
+ gcmkTRACE_ZONE(
+ gcvLEVEL_INFO, gcvZONE_OS,
+ "%s(%d): Address: 0x%X.",
+ __FUNCTION__, __LINE__,
+ *Address
+ );
+
+ /* Success. */
+ status = gcvSTATUS_OK;
+ }
+ while (gcvFALSE);
+
+OnError:
+
+ if (gcmIS_ERROR(status))
+ {
+ gcmkTRACE(
+ gcvLEVEL_ERROR,
+ "%s(%d): error occured: %d.",
+ __FUNCTION__, __LINE__,
+ status
+ );
+
+ /* Release page array. */
+ if (result > 0 && pages != gcvNULL)
+ {
+ gcmkTRACE(
+ gcvLEVEL_ERROR,
+ "%s(%d): error: page table is freed.",
+ __FUNCTION__, __LINE__
+ );
+
+ for (i = 0; i < result; i++)
+ {
+ if (pages[i] == gcvNULL)
+ {
+ break;
+ }
+ page_cache_release(pages[i]);
+ }
+ }
+
+ if (info!= gcvNULL && pages != gcvNULL)
+ {
+ gcmkTRACE(
+ gcvLEVEL_ERROR,
+ "%s(%d): error: pages is freed.",
+ __FUNCTION__, __LINE__
+ );
+
+ /* Free the page table. */
+ kfree(pages);
+ info->pages = gcvNULL;
+ }
+
+ if (info!= gcvNULL && ref != gcvNULL)
+ {
+ /* Free the ref table. */
+ kfree(ref);
+ info->ref = gcvNULL;
+ }
+
+ /* Release page info struct. */
+ if (info != gcvNULL)
+ {
+ gcmkTRACE(
+ gcvLEVEL_ERROR,
+ "%s(%d): error: info is freed.",
+ __FUNCTION__, __LINE__
+ );
+
+ /* Free the page info struct. */
+ kfree(info);
+ *Info = gcvNULL;
+ }
+ }
+
+ MEMORY_MAP_UNLOCK(Os);
+
+ /* Return the status. */
+ if (gcmIS_SUCCESS(status))
+ {
+ gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x", *Info, *Address);
+ }
+ else
+ {
+ gcmkFOOTER();
+ }
+
+ return status;
+}
+#endif
}
/*******************************************************************************
@@ -4487,7 +5426,194 @@ gckOS_UnmapUserMemory(
IN gctUINT32 Address
)
{
- return gcvSTATUS_NOT_SUPPORTED;
+ gceSTATUS status;
+
+ gcmkHEADER_ARG("Os=0x%X Core=%d Memory=0x%X Size=%lu Info=0x%X Address0x%08x",
+ Os, Core, Memory, Size, Info, Address);
+
+#if gcdSECURE_USER
+ gcmkONERROR(gckOS_RemoveMapping(Os, Memory, Size));
+
+ gcmkFOOTER_NO();
+ return gcvSTATUS_OK;
+
+OnError:
+ gcmkFOOTER();
+ return status;
+#else
+{
+ gctUINTPTR_T memory, start, end;
+ gcsPageInfo_PTR info;
+ gctSIZE_T pageCount, i;
+ struct page **pages;
+ gctBOOL *ref;
+
+ /* Verify the arguments. */
+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
+ gcmkVERIFY_ARGUMENT(Memory != gcvNULL);
+ gcmkVERIFY_ARGUMENT(Size > 0);
+ gcmkVERIFY_ARGUMENT(Info != gcvNULL);
+
+ do
+ {
+ info = (gcsPageInfo_PTR) Info;
+
+ pages = info->pages;
+
+ ref = info->ref;
+
+ gcmkTRACE_ZONE(
+ gcvLEVEL_INFO, gcvZONE_OS,
+ "%s(%d): info=0x%X, pages=0x%X.",
+ __FUNCTION__, __LINE__,
+ info, pages
+ );
+
+ /* Invalid page array. */
+ if (pages == gcvNULL && info->pageTable == gcvNULL)
+ {
+ kfree(info);
+
+ gcmkFOOTER_NO();
+ return gcvSTATUS_OK;
+ }
+
+ memory = (gctUINTPTR_T)Memory;
+ end = (memory + Size + PAGE_SIZE - 1) >> PAGE_SHIFT;
+ start = memory >> PAGE_SHIFT;
+ pageCount = end - start;
+
+ /* Overflow. */
+ if ((memory + Size) < memory)
+ {
+ gcmkFOOTER_ARG("status=%d", gcvSTATUS_INVALID_ARGUMENT);
+ return gcvSTATUS_INVALID_ARGUMENT;
+ }
+
+ gcmkTRACE_ZONE(
+ gcvLEVEL_INFO, gcvZONE_OS,
+ "%s(%d): memory: 0x%X, pageCount: %d, pageTable: 0x%X.",
+ __FUNCTION__, __LINE__,
+ memory, pageCount, info->pageTable
+ );
+
+ MEMORY_MAP_LOCK(Os);
+
+#if !gcdSECURITY
+ gcmkASSERT(info->pageTable != gcvNULL);
+#endif
+
+ if (info->extraPage)
+ {
+ pageCount += info->extraPage;
+ }
+
+#if gcdSECURITY
+ if (info->address > 0x80000000)
+ {
+ gckKERNEL_SecurityUnmapMemory(
+ Os->device->kernels[Core],
+ info->address,
+ pageCount
+ );
+ }
+ else
+ {
+ gcmkPRINT("Wrong address %s(%d) %x", __FUNCTION__, __LINE__, info->address);
+ }
+#else
+#if gcdENABLE_VG
+ if (Core == gcvCORE_VG)
+ {
+ /* Free the pages from the MMU. */
+ gcmkERR_BREAK(gckVGMMU_FreePages(Os->device->kernels[Core]->vg->mmu,
+ info->pageTable,
+ pageCount * (PAGE_SIZE/4096)
+ ));
+ }
+ else
+#endif
+ {
+ /* Free the pages from the MMU. */
+#if gcdPROCESS_ADDRESS_SPACE
+ gcmkERR_BREAK(gckMMU_FreePagesEx(info->mmu,
+ info->address,
+ pageCount * (PAGE_SIZE/4096)
+ ));
+
+#else
+ gcmkERR_BREAK(gckMMU_FreePages(Os->device->kernels[Core]->mmu,
+ info->pageTable,
+ pageCount * (PAGE_SIZE/4096)
+ ));
+#endif
+
+ gcmkERR_BREAK(gckOS_UnmapPages(
+ Os,
+ pageCount * (PAGE_SIZE/4096),
+ info->address
+ ));
+ }
+#endif
+
+ if (info->extraPage)
+ {
+ pageCount -= info->extraPage;
+ info->extraPage = 0;
+ }
+
+ /* Release the page cache. */
+ if (pages)
+ {
+ for (i = 0; i < pageCount; i++)
+ {
+ gcmkTRACE_ZONE(
+ gcvLEVEL_INFO, gcvZONE_OS,
+ "%s(%d): pages[%d]: 0x%X.",
+ __FUNCTION__, __LINE__,
+ i, pages[i]
+ );
+
+ if (!PageReserved(pages[i]))
+ {
+ SetPageDirty(pages[i]);
+ }
+
+ if (pfn_valid(page_to_pfn(pages[i])) && ref[i])
+ {
+ page_cache_release(pages[i]);
+ }
+ }
+ }
+
+ /* Success. */
+ status = gcvSTATUS_OK;
+ }
+ while (gcvFALSE);
+
+ if (info != gcvNULL)
+ {
+ /* Free the page array. */
+ if (info->pages != gcvNULL)
+ {
+ kfree(info->pages);
+ }
+
+ if (info->ref != gcvNULL)
+ {
+ kfree(info->ref);
+ }
+
+ kfree(info);
+ }
+
+ MEMORY_MAP_UNLOCK(Os);
+
+ /* Return the status. */
+ gcmkFOOTER();
+ return status;
+}
+#endif
}
/*******************************************************************************
@@ -4534,6 +5660,32 @@ gckOS_SuspendInterrupt(
return gckOS_SuspendInterruptEx(Os, gcvCORE_MAJOR);
}
+#if gcdMULTI_GPU
+gceSTATUS
+gckOS_SuspendInterruptEx(
+ IN gckOS Os,
+ IN gceCORE Core
+ )
+{
+ gcmkHEADER_ARG("Os=0x%X Core=%d", Os, Core);
+
+ /* Verify the arguments. */
+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
+
+ if (Core == gcvCORE_MAJOR)
+ {
+ disable_irq(Os->device->irqLine3D[gcvCORE_3D_0_ID]);
+ disable_irq(Os->device->irqLine3D[gcvCORE_3D_1_ID]);
+ }
+ else
+ {
+ disable_irq(Os->device->irqLines[Core]);
+ }
+
+ gcmkFOOTER_NO();
+ return gcvSTATUS_OK;
+}
+#else
gceSTATUS
gckOS_SuspendInterruptEx(
IN gckOS Os,
@@ -4550,6 +5702,7 @@ gckOS_SuspendInterruptEx(
gcmkFOOTER_NO();
return gcvSTATUS_OK;
}
+#endif
gceSTATUS
gckOS_ResumeInterrupt(
@@ -4559,6 +5712,32 @@ gckOS_ResumeInterrupt(
return gckOS_ResumeInterruptEx(Os, gcvCORE_MAJOR);
}
+#if gcdMULTI_GPU
+gceSTATUS
+gckOS_ResumeInterruptEx(
+ IN gckOS Os,
+ IN gceCORE Core
+ )
+{
+ gcmkHEADER_ARG("Os=0x%X Core=%d", Os, Core);
+
+ /* Verify the arguments. */
+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
+
+ if (Core == gcvCORE_MAJOR)
+ {
+ enable_irq(Os->device->irqLine3D[gcvCORE_3D_0_ID]);
+ enable_irq(Os->device->irqLine3D[gcvCORE_3D_1_ID]);
+ }
+ else
+ {
+ enable_irq(Os->device->irqLines[Core]);
+ }
+
+ gcmkFOOTER_NO();
+ return gcvSTATUS_OK;
+}
+#else
gceSTATUS
gckOS_ResumeInterruptEx(
IN gckOS Os,
@@ -4575,6 +5754,7 @@ gckOS_ResumeInterruptEx(
gcmkFOOTER_NO();
return gcvSTATUS_OK;
}
+#endif
gceSTATUS
gckOS_MemCopy(
@@ -4644,27 +5824,6 @@ gckOS_ZeroMemory(
** gctSIZE_T Bytes
** Size of the address range in bytes to flush.
*/
-
-/*
-
-Following patch can be applied to kernel in case cache API is not exported.
-
-diff --git a/arch/arm/mm/proc-syms.c b/arch/arm/mm/proc-syms.c
-index 054b491..e9e74ec 100644
---- a/arch/arm/mm/proc-syms.c
-+++ b/arch/arm/mm/proc-syms.c
-@@ -30,6 +30,9 @@ EXPORT_SYMBOL(__cpuc_flush_user_all);
- EXPORT_SYMBOL(__cpuc_flush_user_range);
- EXPORT_SYMBOL(__cpuc_coherent_kern_range);
- EXPORT_SYMBOL(__cpuc_flush_dcache_area);
-+EXPORT_SYMBOL(__glue(_CACHE,_dma_map_area));
-+EXPORT_SYMBOL(__glue(_CACHE,_dma_unmap_area));
-+EXPORT_SYMBOL(__glue(_CACHE,_dma_flush_range));
- #else
- EXPORT_SYMBOL(cpu_cache);
- #endif
-
-*/
gceSTATUS
gckOS_CacheClean(
IN gckOS Os,
@@ -4705,9 +5864,8 @@ gckOS_CacheClean(
}
#if !gcdCACHE_FUNCTION_UNIMPLEMENTED
-#if defined(CONFIG_ARM) || defined(CONFIG_ARM64)
+#ifdef CONFIG_ARM
-#if defined (CONFIG_ARM)
/* Inner cache. */
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)
dmac_map_area(Logical, Bytes, DMA_TO_DEVICE);
@@ -4715,13 +5873,13 @@ gckOS_CacheClean(
dmac_clean_range(Logical, Logical + Bytes);
# endif
-#elif defined(CONFIG_ARM64)
- __dma_map_area(Logical, Bytes, DMA_TO_DEVICE);
-#endif
-
#if defined(CONFIG_OUTER_CACHE)
/* Outer cache. */
+#if gcdENABLE_OUTER_CACHE_PATCH
_HandleOuterCache(Os, Physical, Logical, Bytes, gcvCACHE_CLEAN);
+#else
+ outer_clean_range((unsigned long) Handle, (unsigned long) Handle + Bytes);
+#endif
#endif
#elif defined(CONFIG_MIPS)
@@ -4810,22 +5968,22 @@ gckOS_CacheInvalidate(
}
#if !gcdCACHE_FUNCTION_UNIMPLEMENTED
-#if defined(CONFIG_ARM) || defined(CONFIG_ARM64)
+#ifdef CONFIG_ARM
-#if defined (CONFIG_ARM)
/* Inner cache. */
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)
dmac_map_area(Logical, Bytes, DMA_FROM_DEVICE);
# else
dmac_inv_range(Logical, Logical + Bytes);
# endif
-#elif defined(CONFIG_ARM64)
- __dma_map_area(Logical, Bytes, DMA_FROM_DEVICE);
-#endif
#if defined(CONFIG_OUTER_CACHE)
/* Outer cache. */
+#if gcdENABLE_OUTER_CACHE_PATCH
_HandleOuterCache(Os, Physical, Logical, Bytes, gcvCACHE_INVALIDATE);
+#else
+ outer_inv_range((unsigned long) Handle, (unsigned long) Handle + Bytes);
+#endif
#endif
#elif defined(CONFIG_MIPS)
@@ -4910,17 +6068,17 @@ gckOS_CacheFlush(
}
#if !gcdCACHE_FUNCTION_UNIMPLEMENTED
-#if defined(CONFIG_ARM) || defined(CONFIG_ARM64)
-#if defined (CONFIG_ARM)
+#ifdef CONFIG_ARM
/* Inner cache. */
dmac_flush_range(Logical, Logical + Bytes);
-#elif defined (CONFIG_ARM64)
- __dma_flush_range(Logical, Logical + Bytes);
-#endif
#if defined(CONFIG_OUTER_CACHE)
/* Outer cache. */
+#if gcdENABLE_OUTER_CACHE_PATCH
_HandleOuterCache(Os, Physical, Logical, Bytes, gcvCACHE_FLUSH);
+#else
+ outer_flush_range((unsigned long) Handle, (unsigned long) Handle + Bytes);
+#endif
#endif
#elif defined(CONFIG_MIPS)
@@ -5247,6 +6405,8 @@ gckOS_AcquireSemaphore(
IN gctPOINTER Semaphore
)
{
+ gceSTATUS status;
+
gcmkHEADER_ARG("Os=0x%08X Semaphore=0x%08X", Os, Semaphore);
/* Verify the arguments. */
@@ -5254,11 +6414,19 @@ gckOS_AcquireSemaphore(
gcmkVERIFY_ARGUMENT(Semaphore != gcvNULL);
/* Acquire the semaphore. */
- down((struct semaphore *) Semaphore);
+ if (down_interruptible((struct semaphore *) Semaphore))
+ {
+ gcmkONERROR(gcvSTATUS_INTERRUPTED);
+ }
/* Success. */
gcmkFOOTER_NO();
return gcvSTATUS_OK;
+
+OnError:
+ /* Return the status. */
+ gcmkFOOTER();
+ return status;
}
/*******************************************************************************
@@ -5833,6 +7001,7 @@ gckOS_CreateSignal(
/* Save the process ID. */
signal->process = (gctHANDLE)(gctUINTPTR_T) _GetProcessID();
signal->manualReset = ManualReset;
+ signal->hardware = gcvNULL;
init_completion(&signal->obj);
atomic_set(&signal->ref, 1);
@@ -5853,6 +7022,61 @@ OnError:
return status;
}
+gceSTATUS
+gckOS_SignalQueryHardware(
+ IN gckOS Os,
+ IN gctSIGNAL Signal,
+ OUT gckHARDWARE * Hardware
+ )
+{
+ gceSTATUS status;
+ gcsSIGNAL_PTR signal;
+
+ gcmkHEADER_ARG("Os=0x%X Signal=0x%X Hardware=0x%X", Os, Signal, Hardware);
+
+ /* Verify the arguments. */
+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
+ gcmkVERIFY_ARGUMENT(Signal != gcvNULL);
+ gcmkVERIFY_ARGUMENT(Hardware != gcvNULL);
+
+ gcmkONERROR(_QueryIntegerId(&Os->signalDB, (gctUINT32)(gctUINTPTR_T)Signal, (gctPOINTER)&signal));
+
+ *Hardware = signal->hardware;
+
+ gcmkFOOTER_NO();
+ return gcvSTATUS_OK;
+OnError:
+ gcmkFOOTER();
+ return status;
+}
+
+gceSTATUS
+gckOS_SignalSetHardware(
+ IN gckOS Os,
+ IN gctSIGNAL Signal,
+ IN gckHARDWARE Hardware
+ )
+{
+ gceSTATUS status;
+ gcsSIGNAL_PTR signal;
+
+ gcmkHEADER_ARG("Os=0x%X Signal=0x%X Hardware=0x%X", Os, Signal, Hardware);
+
+ /* Verify the arguments. */
+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
+ gcmkVERIFY_ARGUMENT(Signal != gcvNULL);
+
+ gcmkONERROR(_QueryIntegerId(&Os->signalDB, (gctUINT32)(gctUINTPTR_T)Signal, (gctPOINTER)&signal));
+
+ signal->hardware = Hardware;
+
+ gcmkFOOTER_NO();
+ return gcvSTATUS_OK;
+OnError:
+ gcmkFOOTER();
+ return status;
+}
+
/*******************************************************************************
**
** gckOS_DestroySignal
@@ -5968,6 +7192,9 @@ gckOS_Signal(
if (State)
{
+ /* unbind the signal from hardware. */
+ signal->hardware = gcvNULL;
+
/* Set the event to a signaled state. */
complete(&signal->obj);
}
@@ -6137,7 +7364,6 @@ gceSTATUS
gckOS_WaitSignal(
IN gckOS Os,
IN gctSIGNAL Signal,
- IN gctBOOL Interruptable,
IN gctUINT32 Wait
)
{
@@ -6176,7 +7402,7 @@ gckOS_WaitSignal(
/* Convert wait to milliseconds. */
long timeout = (Wait == gcvINFINITE)
? MAX_SCHEDULE_TIMEOUT
- : msecs_to_jiffies(Wait);
+ : Wait * HZ / 1000;
DECLARE_WAITQUEUE(wait, current);
wait.flags |= WQ_FLAG_EXCLUSIVE;
@@ -6184,7 +7410,7 @@ gckOS_WaitSignal(
while (gcvTRUE)
{
- if (Interruptable && signal_pending(current))
+ if (signal_pending(current))
{
/* Interrupt received. */
status = gcvSTATUS_INTERRUPTED;
@@ -6401,7 +7627,7 @@ gckOS_WaitUserSignal(
IN gctUINT32 Wait
)
{
- return gckOS_WaitSignal(Os, (gctSIGNAL)(gctUINTPTR_T)SignalID, gcvTRUE, Wait);
+ return gckOS_WaitSignal(Os, (gctSIGNAL)(gctUINTPTR_T)SignalID, Wait);
}
/*******************************************************************************
@@ -7216,17 +8442,13 @@ OnError:
gceSTATUS
gckOS_CreateSyncTimeline(
IN gckOS Os,
- IN gceCORE Core,
OUT gctHANDLE * Timeline
)
{
struct viv_sync_timeline * timeline;
- char name[32];
-
- snprintf(name, 32, "gccore:%u", (unsigned int) Core);
/* Create viv sync timeline. */
- timeline = viv_sync_timeline_create(name, Os);
+ timeline = viv_sync_timeline_create("viv timeline", Os);
if (timeline == gcvNULL)
{
@@ -7301,9 +8523,7 @@ gckOS_CreateNativeFence(
syncPoint->timeline = &timeline->obj;
/* Build fence name. */
- snprintf(name, 32, "%.20s:%u",
- current->comm,
- (gctUINT32)(gctUINTPTR_T)SyncPoint);
+ snprintf(name, 32, "viv sync_fence-%u", (gctUINT)(gctUINTPTR_T)SyncPoint);
/* Create sync_fence. */
fence = sync_fence_create(name, pt);
@@ -7535,7 +8755,7 @@ gckOS_AllocatePageArray(
gctPHYS_ADDR_T phys_addr;
- allocator->ops->Physical(allocator, mdl, offset * PAGE_SIZE, &phys_addr);
+ allocator->ops->Physical(allocator, mdl, offset, &phys_addr);
phys = (unsigned long)phys_addr;
@@ -7582,23 +8802,12 @@ gceSTATUS
gckOS_GPUPhysicalToCPUPhysical(
IN gckOS Os,
IN gctUINT32 GPUPhysical,
- IN gctPHYS_ADDR_T * CPUPhysical
+ IN gctUINT32_PTR CPUPhysical
)
{
- gcsPLATFORM * platform;
gcmkHEADER_ARG("GPUPhysical=0x%X", GPUPhysical);
- platform = Os->device->platform;
-
- if (platform && platform->ops->getCPUPhysical)
- {
- gcmkVERIFY_OK(
- platform->ops->getCPUPhysical(platform, GPUPhysical, CPUPhysical));
- }
- else
- {
- *CPUPhysical = GPUPhysical;
- }
+ *CPUPhysical = GPUPhysical;
gcmkFOOTER_NO();
return gcvSTATUS_OK;
@@ -7608,7 +8817,6 @@ gceSTATUS
gckOS_PhysicalToPhysicalAddress(
IN gckOS Os,
IN gctPOINTER Physical,
- IN gctUINT32 Offset,
OUT gctPHYS_ADDR_T * PhysicalAddress
)
{
@@ -7617,47 +8825,10 @@ gckOS_PhysicalToPhysicalAddress(
if (allocator)
{
- return allocator->ops->Physical(allocator, mdl, Offset, PhysicalAddress);
- }
-
- return gcvSTATUS_NOT_SUPPORTED;
-}
-
-static int fd_release(struct inode *inode, struct file *file)
-{
- gcsFDPRIVATE_PTR private = (gcsFDPRIVATE_PTR)file->private_data;
-
- if (private && private->release)
- {
- return private->release(private);
- }
-
- return 0;
-}
-
-static const struct file_operations fd_fops = {
- .release = fd_release,
-};
-
-gceSTATUS
-gckOS_GetFd(
- IN gctSTRING Name,
- IN gcsFDPRIVATE_PTR Private,
- OUT gctINT * Fd
- )
-{
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
- *Fd = anon_inode_getfd(Name, &fd_fops, Private, O_RDWR);
-
- if (*Fd < 0)
- {
- return gcvSTATUS_OUT_OF_RESOURCES;
+ return allocator->ops->Physical(allocator, mdl, 0, PhysicalAddress);
}
- return gcvSTATUS_OK;
-#else
return gcvSTATUS_NOT_SUPPORTED;
-#endif
}
gceSTATUS
@@ -7684,7 +8855,7 @@ gckOS_QueryOption(
#if gcdSECURITY
*Value = 0;
#else
- *Value = device->args.mmu;
+ *Value = device->mmu;
#endif
return gcvSTATUS_OK;
}
@@ -7693,38 +8864,49 @@ gckOS_QueryOption(
*Value = device->contiguousSize;
return gcvSTATUS_OK;
}
- else if (!strcmp(Option, "contiguousBase"))
- {
- *Value = device->requestedContiguousBase;
- return gcvSTATUS_OK;
- }
- else if (!strcmp(Option, "recovery"))
- {
- *Value = device->args.recovery;
- return gcvSTATUS_OK;
- }
- else if (!strcmp(Option, "stuckDump"))
- {
- *Value = device->args.stuckDump;
- return gcvSTATUS_OK;
- }
- else if (!strcmp(Option, "powerManagement"))
- {
- *Value = device->args.powerManagement;
- return gcvSTATUS_OK;
- }
- else if (!strcmp(Option, "TA"))
+
+ return gcvSTATUS_NOT_SUPPORTED;
+}
+
+static int
+fd_release(
+ struct inode *inode,
+ struct file *file
+ )
+{
+ gcsFDPRIVATE_PTR private = (gcsFDPRIVATE_PTR)file->private_data;
+
+ if (private && private->release)
{
- *Value = 1;
- return gcvSTATUS_OK;
+ return private->release(private);
}
- else if (!strcmp(Option, "gpuProfiler"))
+
+ return 0;
+}
+
+static const struct file_operations fd_fops = {
+ .release = fd_release,
+};
+
+gceSTATUS
+gckOS_GetFd(
+ IN gctSTRING Name,
+ IN gcsFDPRIVATE_PTR Private,
+ OUT gctINT *Fd
+ )
+{
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
+ *Fd = anon_inode_getfd(Name, &fd_fops, Private, O_RDWR);
+
+ if (*Fd < 0)
{
- *Value = device->args.gpuProfiler;
- return gcvSTATUS_OK;
+ return gcvSTATUS_OUT_OF_RESOURCES;
}
+ return gcvSTATUS_OK;
+#else
return gcvSTATUS_NOT_SUPPORTED;
+#endif
}
/*******************************************************************************
@@ -7755,8 +8937,7 @@ gckOS_WrapMemory(
IN gckOS Os,
IN gcsUSER_MEMORY_DESC_PTR Desc,
OUT gctSIZE_T *Bytes,
- OUT gctPHYS_ADDR * Physical,
- OUT gctBOOL *Contiguous
+ OUT gctPHYS_ADDR * Physical
)
{
PLINUX_MDL mdl = gcvNULL;
@@ -7783,8 +8964,6 @@ gckOS_WrapMemory(
desc.size = Desc->size;
flag = Desc->flag;
- desc.info = Desc->externalMemoryInfo;
-
/* Walk all allocators. */
list_for_each_entry(allocator, &Os->allocatorList, head)
{
@@ -7798,16 +8977,6 @@ gckOS_WrapMemory(
continue;
}
- if (flag == gcvALLOC_FLAG_EXTERNAL_MEMORY)
- {
- /* Use name to match suitable allocator for external memory. */
- if (!strncmp(Desc->externalMemoryInfo.allocatorName, allocator->name, gcdEXTERNAL_MEMORY_NAME_MAX))
- {
- status = gcvSTATUS_NOT_SUPPORTED;
- continue;
- }
- }
-
status = allocator->ops->Attach(allocator, &desc, mdl);
if (gcmIS_SUCCESS(status))
@@ -7822,14 +8991,13 @@ gckOS_WrapMemory(
mdl->dmaHandle = 0;
mdl->addr = 0;
+ mdl->pagedMem = 1;
*Bytes = mdl->numPages * PAGE_SIZE;
/* Return physical address. */
*Physical = (gctPHYS_ADDR) mdl;
- *Contiguous = mdl->contiguous;
-
MEMORY_LOCK(Os);
/*
@@ -7868,21 +9036,3 @@ OnError:
return status;
}
-gceSTATUS
-gckOS_GetPolicyID(
- IN gckOS Os,
- IN gceSURF_TYPE Type,
- OUT gctUINT32_PTR PolicyID,
- OUT gctUINT32_PTR AXIConfig
- )
-{
- gcsPLATFORM * platform = Os->device->platform;
-
- if (platform && platform->ops->getPolicyID)
- {
- return platform->ops->getPolicyID(platform, Type, PolicyID, AXIConfig);
- }
-
- return gcvSTATUS_NOT_SUPPORTED;
-}
-
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h
index c4e0355bcb91..407b1e8fca22 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h
@@ -60,7 +60,8 @@ typedef struct _LINUX_MDL_MAP
{
gctINT pid;
gctPOINTER vmaAddr;
- gctUINT32 count;
+ atomic_t count;
+ struct vm_area_struct * vma;
struct _LINUX_MDL_MAP * next;
}
LINUX_MDL_MAP;
@@ -71,11 +72,27 @@ typedef struct _LINUX_MDL
{
char * addr;
+ union _pages
+ {
+ /* Pointer to a array of pages. */
+ struct page * contiguousPages;
+ /* Pointer to a array of pointers to page. */
+ struct page ** nonContiguousPages;
+ }
+ u;
+
+#ifdef NO_DMA_COHERENT
+ gctPOINTER kaddr;
+#endif /* NO_DMA_COHERENT */
+
gctINT numPages;
+ gctINT pagedMem;
gctBOOL contiguous;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
+ gctBOOL exact;
+#endif
dma_addr_t dmaHandle;
PLINUX_MDL_MAP maps;
- struct mutex mapsMutex;
struct _LINUX_MDL * prev;
struct _LINUX_MDL * next;
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_platform.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_platform.h
index 90f68db7b73d..bee9a8fa407b 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_platform.h
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_platform.h
@@ -59,9 +59,18 @@
typedef struct _gcsMODULE_PARAMETERS
{
+#if gcdMULTI_GPU || gcdMULTI_GPU_AFFINITY
+ gctINT irqLine3D0;
+ gctUINT registerMemBase3D0;
+ gctUINT registerMemSize3D0;
+ gctINT irqLine3D1;
+ gctUINT registerMemBase3D1;
+ gctUINT registerMemSize3D1;
+#else
gctINT irqLine;
gctUINT registerMemBase;
gctUINT registerMemSize;
+#endif
gctINT irqLine2D;
gctUINT registerMemBase2D;
gctUINT registerMemSize2D;
@@ -86,10 +95,6 @@ typedef struct _gcsMODULE_PARAMETERS
gctUINT gpu3DMinClock;
gctBOOL registerMemMapped;
gctPOINTER registerMemAddress;
- gctINT irqs[gcvCORE_COUNT];
- gctUINT registerBases[gcvCORE_COUNT];
- gctUINT registerSizes[gcvCORE_COUNT];
- gctUINT chipIDs[gcvCORE_COUNT];
}
gcsMODULE_PARAMETERS;
@@ -252,20 +257,6 @@ typedef struct _gcsPLATFORM_OPERATIONS
/*******************************************************************************
**
- ** getGPUPhysical
- **
- ** Convert GPU physical address to CPU physical address if they are
- ** different.
- */
- gceSTATUS
- (*getCPUPhysical)(
- IN gckPLATFORM Platform,
- IN gctUINT32 GPUPhysical,
- OUT gctPHYS_ADDR_T * CPUPhysical
- );
-
- /*******************************************************************************
- **
** adjustProt
**
** Override Prot flag when mapping paged memory to userspace.
@@ -318,19 +309,6 @@ typedef struct _gcsPLATFORM_OPERATIONS
IN gctCONST_STRING * Name
);
- /*******************************************************************************
- **
- ** getPolicyID
- **
- ** Get policyID for a specified surface type.
- */
- gceSTATUS
- (*getPolicyID)(
- IN gckPLATFORM Platform,
- IN gceSURF_TYPE Type,
- OUT gctUINT32_PTR PolicyID,
- OUT gctUINT32_PTR AXIConfig
- );
}
gcsPLATFORM_OPERATIONS;
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_security_channel.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_security_channel.c
index 8fe2b0d50eee..33be5bdd5847 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_security_channel.c
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_security_channel.c
@@ -113,7 +113,6 @@ gpu3d_allocate_secure_mem(
status = gckOS_PhysicalToPhysicalAddress(
Os,
handle,
- 0,
&phyAddr);
if (gcmIS_ERROR(status))
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_security_channel_emulator.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_security_channel_emulator.c
deleted file mode 100644
index cad717213912..000000000000
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_security_channel_emulator.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/****************************************************************************
-*
-* The MIT License (MIT)
-*
-* Copyright (c) 2014 - 2016 Vivante Corporation
-*
-* Permission is hereby granted, free of charge, to any person obtaining a
-* copy of this software and associated documentation files (the "Software"),
-* to deal in the Software without restriction, including without limitation
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,
-* and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-* DEALINGS IN THE SOFTWARE.
-*
-*****************************************************************************
-*
-* The GPL License (GPL)
-*
-* Copyright (C) 2014 - 2016 Vivante Corporation
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software Foundation,
-* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*
-*****************************************************************************
-*
-* Note: This software is released under dual MIT and GPL licenses. A
-* recipient may use this file under the terms of either the MIT license or
-* GPL License. If you wish to use only one license not the other, you can
-* indicate your decision by deleting one of the above license notices in your
-* version of this file.
-*
-*****************************************************************************/
-
-
-#include "gc_hal_kernel_linux.h"
-
-#define _GC_OBJ_ZONE gcvZONE_OS
-
-#if gcdENABLE_TRUST_APPLICATION
-
-gceSTATUS
-gckOS_OpenSecurityChannel(
- IN gckOS Os,
- IN gceCORE Core,
- OUT gctUINT32 *Channel
- )
-{
- *Channel = 0x1;
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gckOS_InitSecurityChannel(
- OUT gctUINT32 Channel
- )
-{
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gckOS_CloseSecurityChannel(
- IN gctUINT32 Channel
- )
-{
- return gcvSTATUS_OK;
-}
-
-extern gceSTATUS
-TAEmulator (
- void *
- );
-
-gceSTATUS
-gckOS_CallSecurityService(
- IN gctUINT32 Channel,
- IN gcsTA_INTERFACE *Interface
- )
-{
- gceSTATUS status;
- gcmkHEADER();
- gcmkVERIFY_ARGUMENT(Channel != 0);
-
- TAEmulator(Interface);
-
- status = Interface->result;
-
- gcmkFOOTER();
- return status;
-}
-
-#endif
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
index b3477f18bf6a..21f4f69be18b 100644
--- 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
@@ -161,47 +161,19 @@ viv_sync_pt_free(
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0)
obj = (struct viv_sync_timeline *) sync_pt_parent(sync_pt);
#else
- obj = (struct viv_sync_timeline *) sync_pt->parent;
+ obj = (struct viv_sync_timeline *)sync_pt->parent;
#endif
gckOS_DestroySyncPoint(obj->os, pt->sync);
}
-static void
-viv_timeline_value_str(
- struct sync_timeline * timeline,
- char * str,
- int size
- )
-{
- struct viv_sync_timeline * obj;
-
- obj = (struct viv_sync_timeline *) timeline;
- snprintf(str, size, "%u", obj->stamp);
-}
-
-static void
-viv_pt_value_str(
- struct sync_pt * sync_pt,
- char * str,
- int size
- )
-{
- struct viv_sync_pt * pt;
-
- pt = (struct viv_sync_pt *) sync_pt;
- snprintf(str, size, "%u", pt->stamp);
-}
-
static struct sync_timeline_ops viv_timeline_ops =
{
- .driver_name = "viv_hw_sync",
+ .driver_name = "viv_sync",
.dup = viv_sync_pt_dup,
.has_signaled = viv_sync_pt_has_signaled,
.compare = viv_sync_pt_compare,
.free_pt = viv_sync_pt_free,
- .timeline_value_str = viv_timeline_value_str,
- .pt_value_str = viv_pt_value_str,
};
struct viv_sync_timeline *
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6q14.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6q14.c
index eb11719d827a..b0b9cf21a7fc 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6q14.c
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6q14.c
@@ -78,20 +78,13 @@
#include <linux/busfreq-imx6.h>
#include <linux/reset.h>
#else
-#if !IMX8_SCU_CONTROL
#include <linux/busfreq-imx.h>
-#endif
#include <linux/reset.h>
#endif
#endif
#include <linux/clk.h>
-#if IMX8_SCU_CONTROL
-#include <soc/imx8/sc/sci.h>
-static sc_ipc_t gpu_ipcHandle;
-#endif
-
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
#include <mach/hardware.h>
#endif
@@ -134,18 +127,18 @@ static int
task_notify_func(struct notifier_block *self, unsigned long val, void *data);
static struct notifier_block task_nb = {
- .notifier_call = task_notify_func,
+ .notifier_call = task_notify_func,
};
static int
task_notify_func(struct notifier_block *self, unsigned long val, void *data)
{
- struct task_struct *task = data;
+ struct task_struct *task = data;
- if (task == lowmem_deathpending)
- lowmem_deathpending = NULL;
+ if (task == lowmem_deathpending)
+ lowmem_deathpending = NULL;
- return NOTIFY_DONE;
+ return NOTIFY_DONE;
}
extern struct task_struct *lowmem_deathpending;
@@ -153,85 +146,85 @@ static unsigned long lowmem_deathpending_timeout;
static int force_contiguous_lowmem_shrink(IN gckKERNEL Kernel)
{
- struct task_struct *p;
- struct task_struct *selected = NULL;
- int tasksize;
+ struct task_struct *p;
+ struct task_struct *selected = NULL;
+ int tasksize;
int ret = -1;
- int min_adj = 0;
- int selected_tasksize = 0;
- int selected_oom_adj;
- /*
- * If we already have a death outstanding, then
- * bail out right away; indicating to vmscan
- * that we have nothing further to offer on
- * this pass.
- *
- */
- if (lowmem_deathpending &&
- time_before_eq(jiffies, lowmem_deathpending_timeout))
- return 0;
- selected_oom_adj = min_adj;
+ int min_adj = 0;
+ int selected_tasksize = 0;
+ int selected_oom_adj;
+ /*
+ * If we already have a death outstanding, then
+ * bail out right away; indicating to vmscan
+ * that we have nothing further to offer on
+ * this pass.
+ *
+ */
+ if (lowmem_deathpending &&
+ time_before_eq(jiffies, lowmem_deathpending_timeout))
+ return 0;
+ selected_oom_adj = min_adj;
rcu_read_lock();
- for_each_process(p) {
- struct mm_struct *mm;
- struct signal_struct *sig;
+ for_each_process(p) {
+ struct mm_struct *mm;
+ struct signal_struct *sig;
gcuDATABASE_INFO info;
- int oom_adj;
-
- task_lock(p);
- mm = p->mm;
- sig = p->signal;
- if (!mm || !sig) {
- task_unlock(p);
- continue;
- }
- oom_adj = sig->oom_score_adj;
- if (oom_adj < min_adj) {
- task_unlock(p);
- continue;
- }
-
- tasksize = 0;
- task_unlock(p);
+ int oom_adj;
+
+ task_lock(p);
+ mm = p->mm;
+ sig = p->signal;
+ if (!mm || !sig) {
+ task_unlock(p);
+ continue;
+ }
+ oom_adj = sig->oom_score_adj;
+ if (oom_adj < min_adj) {
+ task_unlock(p);
+ continue;
+ }
+
+ tasksize = 0;
+ task_unlock(p);
rcu_read_unlock();
- if (gckKERNEL_QueryProcessDB(Kernel, p->pid, gcvFALSE, gcvDB_VIDEO_MEMORY, &info) == gcvSTATUS_OK){
- tasksize += info.counters.bytes / PAGE_SIZE;
- }
- if (gckKERNEL_QueryProcessDB(Kernel, p->pid, gcvFALSE, gcvDB_CONTIGUOUS, &info) == gcvSTATUS_OK){
- tasksize += info.counters.bytes / PAGE_SIZE;
- }
+ if (gckKERNEL_QueryProcessDB(Kernel, p->pid, gcvFALSE, gcvDB_VIDEO_MEMORY, &info) == gcvSTATUS_OK){
+ tasksize += info.counters.bytes / PAGE_SIZE;
+ }
+ if (gckKERNEL_QueryProcessDB(Kernel, p->pid, gcvFALSE, gcvDB_CONTIGUOUS, &info) == gcvSTATUS_OK){
+ tasksize += info.counters.bytes / PAGE_SIZE;
+ }
rcu_read_lock();
- if (tasksize <= 0)
- continue;
-
- gckOS_Print("<gpu> pid %d (%s), adj %d, size %d \n", p->pid, p->comm, oom_adj, tasksize);
-
- if (selected) {
- if (oom_adj < selected_oom_adj)
- continue;
- if (oom_adj == selected_oom_adj &&
- tasksize <= selected_tasksize)
- continue;
- }
- selected = p;
- selected_tasksize = tasksize;
- selected_oom_adj = oom_adj;
- }
+ if (tasksize <= 0)
+ continue;
+
+ gckOS_Print("<gpu> pid %d (%s), adj %d, size %d \n", p->pid, p->comm, oom_adj, tasksize);
+
+ if (selected) {
+ if (oom_adj < selected_oom_adj)
+ continue;
+ if (oom_adj == selected_oom_adj &&
+ tasksize <= selected_tasksize)
+ continue;
+ }
+ selected = p;
+ selected_tasksize = tasksize;
+ selected_oom_adj = oom_adj;
+ }
if (selected && selected_oom_adj > 0) {
- gckOS_Print("<gpu> send sigkill to %d (%s), adj %d, size %d\n",
- selected->pid, selected->comm,
- selected_oom_adj, selected_tasksize);
- lowmem_deathpending = selected;
- lowmem_deathpending_timeout = jiffies + HZ;
- force_sig(SIGKILL, selected);
- ret = 0;
- }
+ gckOS_Print("<gpu> send sigkill to %d (%s), adj %d, size %d\n",
+ selected->pid, selected->comm,
+ selected_oom_adj, selected_tasksize);
+ lowmem_deathpending = selected;
+ lowmem_deathpending_timeout = jiffies + HZ;
+ force_sig(SIGKILL, selected);
+ ret = 0;
+ }
rcu_read_unlock();
- return ret;
+ return ret;
}
extern gckKERNEL
@@ -358,7 +351,6 @@ static DRIVER_ATTR(gpu3DMinClock, S_IRUGO | S_IWUSR, show_gpu3DMinClock, update_
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
static const struct of_device_id mxs_gpu_dt_ids[] = {
{ .compatible = "fsl,imx6q-gpu", },
- { .compatible = "fsl,imx8x-gpu", },
{/* sentinel */}
};
MODULE_DEVICE_TABLE(of, mxs_gpu_dt_ids);
@@ -383,13 +375,6 @@ struct imx_priv {
struct clk *clk_2d_axi;
struct clk *clk_vg_axi;
- struct clk *clk_core_3d[2];
- struct clk *clk_shader_3d[2];
-
-#if IMX8_SCU_CONTROL
- sc_rsrc_t sc_gpu_pid[2];
-#endif
-
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0)
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
/*Power management.*/
@@ -421,9 +406,6 @@ gckPLATFORM_AdjustParam(
#else
struct viv_gpu_platform_data *pdata;
#endif
- int i, j = 0;
- const char *irq_3d_res[2] = {"irq_3d_0", "irq_3d_1"};
- const char *iobase_3d_res[2] = {"iobase_3d_0", "iobase_3d_1"};
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "phys_baseaddr");
if (res)
@@ -462,23 +444,6 @@ gckPLATFORM_AdjustParam(
Args->registerMemSizeVG = res->end - res->start + 1;
}
- for (i = 0; i < sizeof(irq_3d_res)/sizeof(irq_3d_res[0]); i++)
- {
- res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, irq_3d_res[i]);
- if (res)
- Args->irqs[gcvCORE_MAJOR + j] = res->start;
- else
- continue;
-
- res = platform_get_resource_byname(pdev, IORESOURCE_MEM, iobase_3d_res[i]);
- if (res)
- {
- Args->registerBases[gcvCORE_MAJOR + j] = res->start;
- Args->registerSizes[gcvCORE_MAJOR + j] = res->end - res->start + 1;
- j++;
- }
- }
-
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "contiguous_mem");
if (res)
@@ -513,17 +478,9 @@ gckPLATFORM_AdjustParam(
if(Args->physSize == 0)
{
-#if IMX8_PHYS_SIZE
- Args->physSize = IMX8_PHYS_SIZE;
-#else
Args->physSize = 0x80000000;
-#endif
}
-#if IMX8_DISABLE_PM
- Args->powerManagement = 0;
-#endif
-
return gcvSTATUS_OK;
}
@@ -536,7 +493,7 @@ _AllocPriv(
#ifdef CONFIG_GPU_LOW_MEMORY_KILLER
#if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0)
- task_free_register(&task_nb);
+ task_free_register(&task_nb);
#else
task_handoff_register(&task_nb);
#endif
@@ -571,23 +528,23 @@ _SetClock(
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
static void imx6sx_optimize_qosc_for_GPU(IN gckPLATFORM Platform)
{
- struct device_node *np;
- void __iomem *src_base;
-
- np = of_find_compatible_node(NULL, NULL, "fsl,imx6sx-qosc");
- if (!np)
- return;
-
- src_base = of_iomap(np, 0);
- WARN_ON(!src_base);
- _SetClock(Platform, gcvCORE_MAJOR, gcvTRUE);
- writel_relaxed(0, src_base); /* Disable clkgate & soft_rst */
- writel_relaxed(0, src_base+0x60); /* Enable all masters */
- writel_relaxed(0, src_base+0x1400); /* Disable clkgate & soft_rst for gpu */
- writel_relaxed(0x0f000222, src_base+0x1400+0xd0); /* Set Write QoS 2 for gpu */
- writel_relaxed(0x0f000822, src_base+0x1400+0xe0); /* Set Read QoS 8 for gpu */
- _SetClock(Platform, gcvCORE_MAJOR, gcvFALSE);
- return;
+ struct device_node *np;
+ void __iomem *src_base;
+
+ np = of_find_compatible_node(NULL, NULL, "fsl,imx6sx-qosc");
+ if (!np)
+ return;
+
+ src_base = of_iomap(np, 0);
+ WARN_ON(!src_base);
+ _SetClock(Platform, gcvCORE_MAJOR, gcvTRUE);
+ writel_relaxed(0, src_base); /* Disable clkgate & soft_rst */
+ writel_relaxed(0, src_base+0x60); /* Enable all masters */
+ writel_relaxed(0, src_base+0x1400); /* Disable clkgate & soft_rst for gpu */
+ writel_relaxed(0x0f000222, src_base+0x1400+0xd0); /* Set Write QoS 2 for gpu */
+ writel_relaxed(0x0f000822, src_base+0x1400+0xe0); /* Set Read QoS 8 for gpu */
+ _SetClock(Platform, gcvCORE_MAJOR, gcvFALSE);
+ return;
}
#endif
@@ -598,11 +555,9 @@ _GetPower(
{
struct device* pdev = &Platform->device->dev;
struct imx_priv *priv = Platform->priv;
-#ifdef CONFIG_RESET_CONTROLLER
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
struct reset_control *rstc;
#endif
-#endif
#ifdef CONFIG_PM
/*Init runtime pm for gpu*/
@@ -610,7 +565,7 @@ _GetPower(
priv->pmdev = pdev;
#endif
-#ifdef CONFIG_RESET_CONTROLLER
+
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
rstc = devm_reset_control_get(pdev, "gpu3d");
priv->rstc[gcvCORE_MAJOR] = IS_ERR(rstc) ? NULL : rstc;
@@ -619,7 +574,6 @@ _GetPower(
rstc = devm_reset_control_get(pdev, "gpuvg");
priv->rstc[gcvCORE_VG] = IS_ERR(rstc) ? NULL : rstc;
#endif
-#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0)
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
@@ -685,7 +639,7 @@ _GetPower(
}
-#if gcdENABLE_FSCALE_VAL_ADJUST && defined(CONFIG_DEVICE_THERMAL)
+#if gcdENABLE_FSCALE_VAL_ADJUST
pdevice = Platform->device;
REG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
{
@@ -749,7 +703,7 @@ _PutPower(
}
#endif
-#if gcdENABLE_FSCALE_VAL_ADJUST && defined(CONFIG_DEVICE_THERMAL)
+#if gcdENABLE_FSCALE_VAL_ADJUST
UNREG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
driver_remove_file(pdevice->dev.driver, &driver_attr_gpu3DMinClock);
@@ -765,10 +719,7 @@ _SetPower(
IN gctBOOL Enable
)
{
-#ifdef CONFIG_PM
struct imx_priv* priv = Platform->priv;
-#endif
-
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0)
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
int ret;
@@ -791,9 +742,9 @@ _SetPower(
#endif
#ifdef CONFIG_PM
- pm_runtime_get_sync(priv->pmdev);
+ pm_runtime_get_sync(priv->pmdev);
#endif
- }
+ }
else
{
#ifdef CONFIG_PM
@@ -929,7 +880,6 @@ _SetClock(
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
#ifdef CONFIG_PM
-#ifdef CONFIG_PM_RUNTIME
static int gpu_runtime_suspend(struct device *dev)
{
release_bus_freq(BUS_FREQ_HIGH);
@@ -941,7 +891,6 @@ static int gpu_runtime_resume(struct device *dev)
request_bus_freq(BUS_FREQ_HIGH);
return 0;
}
-#endif
static struct dev_pm_ops gpu_pm_ops;
#endif
@@ -960,14 +909,13 @@ _AdjustDriver(
driver->driver.of_match_table = mxs_gpu_dt_ids;
#endif
-#ifdef CONFIG_PM
/* Override PM callbacks to add runtime PM callbacks. */
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
/* Fill local structure with original value. */
memcpy(&gpu_pm_ops, driver->driver.pm, sizeof(struct dev_pm_ops));
/* Add runtime PM callback. */
-#ifdef CONFIG_PM_RUNTIME
+#ifdef CONFIG_PM
gpu_pm_ops.runtime_suspend = gpu_runtime_suspend;
gpu_pm_ops.runtime_resume = gpu_runtime_resume;
gpu_pm_ops.runtime_idle = NULL;
@@ -976,8 +924,6 @@ _AdjustDriver(
/* Replace callbacks. */
driver->driver.pm = &gpu_pm_ops;
#endif
-#endif
-
return gcvSTATUS_OK;
}
@@ -1041,323 +987,11 @@ gcsPLATFORM_OPERATIONS platformOperations = {
.name = _Name,
};
-/* the following code is implemented for imx8x gpu specifically */
-gceSTATUS
-_GetPower_imx8x(
- IN gckPLATFORM Platform
- )
-{
- struct device* pdev = &Platform->device->dev;
- struct imx_priv *priv = Platform->priv;
- const char* clk_core_3d[2] = {"clk_core_3d_0", "clk_core_3d_1"};
- const char* clk_shader_3d[2] = {"clk_shader_3d_0", "clk_shader_3d_1"};
- const char *irq_3d_res[2] = {"irq_3d_0", "irq_3d_1"};
- struct resource* res = NULL;
- int i, j = 0;
-#if IMX8_SCU_CONTROL
- const sc_rsrc_t sc_gpu_pid[2] = {SC_R_GPU_0_PID0, SC_R_GPU_1_PID0};
- sc_err_t sciErr;
- uint32_t mu_id;
-
- sciErr = sc_ipc_getMuID(&mu_id);
- if (sciErr != SC_ERR_NONE) {
- gckOS_Print("galcore; cannot obtain mu id\n");
- return gcvSTATUS_FALSE;
- }
-
- sciErr = sc_ipc_open(&gpu_ipcHandle, mu_id);
- if (sciErr != SC_ERR_NONE) {
- gckOS_Print("galcore: cannot open MU channel to SCU\n");
- return gcvSTATUS_FALSE;
- };
-#endif
-
- for (i = 0; i < sizeof(clk_core_3d) / sizeof(clk_core_3d[0]); i++)
- {
- /*Initialize the clock structure*/
- priv->clk_core_3d[j] = clk_get(pdev, clk_core_3d[i]);
- res = platform_get_resource_byname(Platform->device, IORESOURCE_IRQ, irq_3d_res[i]);
- if (res && !IS_ERR(priv->clk_core_3d[j])) {
- priv->clk_shader_3d[j] = clk_get(pdev, clk_shader_3d[i]);
- if (IS_ERR(priv->clk_shader_3d[j])) {
- clk_put(priv->clk_core_3d[j]);
- priv->clk_core_3d[j] = NULL;
- priv->clk_shader_3d[j] = NULL;
- gckOS_Print("galcore: clk_get clk_shader_3d_%d failed, disable 3d_%d!\n", i, i);
- } else {
-#if IMX8_SCU_CONTROL
- sciErr = sc_pm_set_resource_power_mode(gpu_ipcHandle, sc_gpu_pid[i], SC_PM_PW_MODE_ON);
- if (sciErr != SC_ERR_NONE) {
- gckOS_Print("galcore; cannot power up 3d_%d\n", i);
- return gcvSTATUS_FALSE;
- }
- priv->sc_gpu_pid[j] = sc_gpu_pid[i];
-#endif
- clk_prepare(priv->clk_core_3d[j]);
- clk_set_rate(priv->clk_core_3d[j], 800000000);
- clk_unprepare(priv->clk_core_3d[j]);
-
- clk_prepare(priv->clk_shader_3d[j]);
- clk_set_rate(priv->clk_shader_3d[j], 800000000);
- clk_unprepare(priv->clk_shader_3d[j]);
-
- j++;
- }
- } else {
- priv->clk_core_3d[j] = NULL;
- priv->clk_shader_3d[j] = NULL;
- gckOS_Print("galcore: clk_get clk_core_3d_%d failed, disable 3d_%d!\n", i, i);
- }
- }
-
- if (priv->clk_core_3d[0] == NULL && priv->clk_core_3d[1] == NULL)
- {
- return gcvSTATUS_OUT_OF_RESOURCES;
- }
-
-#if IMX8_SCU_CONTROL
- sciErr = sc_misc_set_control(gpu_ipcHandle, SC_R_GPU_0_PID0, SC_C_ID, 0);
- if (sciErr != SC_ERR_NONE)
- gckOS_Print("galcore: failed to set gpu id for 3d_0\n");
-
- sciErr = sc_misc_set_control(gpu_ipcHandle, SC_R_GPU_1_PID0, SC_C_ID, 1);
- if (sciErr != SC_ERR_NONE)
- gckOS_Print("galcore: failed to set gpu id for 3d_1\n");
-
- /* check dual core mode */
- if (priv->clk_core_3d[0] != NULL && priv->clk_core_3d[1] != NULL)
- {
- sciErr = sc_misc_set_control(gpu_ipcHandle, SC_R_GPU_0_PID0, SC_C_SINGLE_MODE, 0);
- if (sciErr != SC_ERR_NONE)
- gckOS_Print("galcore: failed to set gpu dual more for 3d_0\n");
-
- sciErr = sc_misc_set_control(gpu_ipcHandle, SC_R_GPU_1_PID0, SC_C_SINGLE_MODE, 0);
- if (sciErr != SC_ERR_NONE)
- gckOS_Print("galcore: failed to set gpu dual more for 3d_1\n");
- }
- /* check single core mode */
- else if (priv->clk_core_3d[0] != NULL || priv->clk_core_3d[1] != NULL)
- {
- sciErr = sc_misc_set_control(gpu_ipcHandle, SC_R_GPU_0_PID0, SC_C_SINGLE_MODE, 1);
- if (sciErr != SC_ERR_NONE)
- gckOS_Print("galcore: failed to set gpu single more for 3d_0\n");
-
- sciErr = sc_misc_set_control(gpu_ipcHandle, SC_R_GPU_1_PID0, SC_C_SINGLE_MODE, 1);
- if (sciErr != SC_ERR_NONE)
- gckOS_Print("galcore: failed to set gpu single more for 3d_1\n");
- }
- else ; /* caution, do NOT call SCU control without gpu core enabled !!! */
-
- for (i = 0; i < sizeof(clk_core_3d) / sizeof(clk_core_3d[0]); i++)
- {
- if(priv->clk_core_3d[i] != NULL)
- {
- sciErr = sc_pm_set_resource_power_mode(gpu_ipcHandle, priv->sc_gpu_pid[i], SC_PM_PW_MODE_OFF);
- if (sciErr != SC_ERR_NONE) {
- gckOS_Print("galcore; cannot power down 3d_%d\n", i);
- return gcvSTATUS_FALSE;
- }
- }
- }
-#endif
-
-#if gcdENABLE_FSCALE_VAL_ADJUST && defined(CONFIG_DEVICE_THERMAL)
- pdevice = Platform->device;
- REG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
- {
- int ret = 0;
- ret = driver_create_file(pdevice->dev.driver, &driver_attr_gpu3DMinClock);
- if(ret)
- dev_err(&pdevice->dev, "create gpu3DMinClock attr failed (%d)\n", ret);
- }
-#endif
-
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-_PutPower_imx8x(
- IN gckPLATFORM Platform
- )
-{
- struct imx_priv *priv = Platform->priv;
- int i = 0;
-
- /*Disable clock*/
- for (i = 0; i < sizeof(priv->clk_core_3d)/sizeof(priv->clk_core_3d[0]); i++)
- {
- if (priv->clk_core_3d[i]) {
- clk_put(priv->clk_core_3d[i]);
- priv->clk_core_3d[i] = NULL;
- }
-
- if (priv->clk_shader_3d[i]) {
- clk_put(priv->clk_shader_3d[i]);
- priv->clk_shader_3d[i] = NULL;
- }
- }
-
-#if gcdENABLE_FSCALE_VAL_ADJUST && defined(CONFIG_DEVICE_THERMAL)
- UNREG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
-
- driver_remove_file(pdevice->dev.driver, &driver_attr_gpu3DMinClock);
-#endif
-
-#if IMX8_SCU_CONTROL
- sc_ipc_close(gpu_ipcHandle);
-#endif
-
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-_SetPower_imx8x(
- IN gckPLATFORM Platform,
- IN gceCORE GPU,
- IN gctBOOL Enable
- )
-{
-#if IMX8_SCU_CONTROL
- struct imx_priv* priv = Platform->priv;
- sc_err_t sciErr = 0;
-
- if (Enable) {
- switch (GPU) {
- case gcvCORE_MAJOR:
- sciErr = sc_pm_set_resource_power_mode(gpu_ipcHandle, priv->sc_gpu_pid[0], SC_PM_PW_MODE_ON);
- break;
- case gcvCORE_3D1:
- sciErr = sc_pm_set_resource_power_mode(gpu_ipcHandle, priv->sc_gpu_pid[1], SC_PM_PW_MODE_ON);
- break;
- default:
- break;
- }
- } else {
- switch (GPU) {
- case gcvCORE_MAJOR:
- sciErr = sc_pm_set_resource_power_mode(gpu_ipcHandle, priv->sc_gpu_pid[0], SC_PM_PW_MODE_OFF);
- break;
- case gcvCORE_3D1:
- sciErr = sc_pm_set_resource_power_mode(gpu_ipcHandle, priv->sc_gpu_pid[1], SC_PM_PW_MODE_OFF);
- break;
- default:
- break;
- }
- }
-
- if (sciErr != SC_ERR_NONE) {
- gckOS_Print("galcore: failed power operation on gpu %d\n", GPU);
- return gcvSTATUS_FALSE;
- }
-
-#endif
-
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-_SetClock_imx8x(
- IN gckPLATFORM Platform,
- IN gceCORE GPU,
- IN gctBOOL Enable
- )
-{
- struct imx_priv* priv = Platform->priv;
- struct clk *clk_core_3d_0 = priv->clk_core_3d[0];
- struct clk *clk_shader_3d_0 = priv->clk_shader_3d[0];
- struct clk *clk_core_3d_1 = priv->clk_core_3d[1];
- struct clk *clk_shader_3d_1 = priv->clk_shader_3d[1];
-
- if (Enable) {
- switch (GPU) {
- case gcvCORE_MAJOR:
- if (clk_core_3d_0 && clk_shader_3d_0) {
- clk_prepare(clk_core_3d_0);
- clk_enable(clk_core_3d_0);
- clk_prepare(clk_shader_3d_0);
- clk_enable(clk_shader_3d_0);
- }
- break;
- case gcvCORE_3D1:
- if (clk_core_3d_1 && clk_shader_3d_1) {
- clk_prepare(clk_core_3d_1);
- clk_enable(clk_core_3d_1);
- clk_prepare(clk_shader_3d_1);
- clk_enable(clk_shader_3d_1);
- }
- break;
- default:
- break;
- }
- } else {
- switch (GPU) {
- case gcvCORE_MAJOR:
- if (clk_core_3d_0 && clk_shader_3d_0) {
- clk_disable(clk_core_3d_0);
- clk_unprepare(clk_core_3d_0);
- clk_disable(clk_shader_3d_0);
- clk_unprepare(clk_shader_3d_0);
- }
- break;
- case gcvCORE_3D1:
- if (clk_core_3d_1 && clk_shader_3d_1) {
- clk_disable(clk_core_3d_1);
- clk_unprepare(clk_core_3d_1);
- clk_disable(clk_shader_3d_1);
- clk_unprepare(clk_shader_3d_1);
- }
- break;
- default:
- break;
- }
- }
-
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-_Reset_imx8x(
- IN gckPLATFORM Platform,
- gceCORE GPU
- )
-{
- return gcvSTATUS_OK;
-}
-
-gcsPLATFORM_OPERATIONS platformOperations_imx8x = {
- .adjustParam = gckPLATFORM_AdjustParam,
- .allocPriv = _AllocPriv,
- .freePriv = _FreePriv,
- .getPower = _GetPower_imx8x,
- .putPower = _PutPower_imx8x,
- .setPower = _SetPower_imx8x,
- .setClock = _SetClock_imx8x,
- .adjustDriver = _AdjustDriver,
- .reset = _Reset_imx8x,
-#ifdef CONFIG_GPU_LOW_MEMORY_KILLER
- .shrinkMemory = _ShrinkMemory,
-#endif
- .name = _Name,
-};
-
void
gckPLATFORM_QueryOperations(
IN gcsPLATFORM_OPERATIONS ** Operations
)
{
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
- struct device_node *np;
-
- np = of_find_compatible_node(NULL, NULL, "fsl,imx8x-gpu");
- if (np)
- {
- *Operations = &platformOperations_imx8x;
- }
- else
-#endif
- {
- *Operations = &platformOperations;
- }
+ *Operations = &platformOperations;
}
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6q14.config b/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6q14.config
index 51c5c599b86d..1a520e9dd7a4 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6q14.config
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6q14.config
@@ -11,12 +11,6 @@ $(warn Android native fence sync needs CONFIG_SYNC)
endif
endif
-ifneq ($(CONFIG_ARCH_FSL_IMX8DV),)
-EXTRA_CFLAGS += -DIMX8_SCU_CONTROL=1 -DIMX8_DISABLE_PM=1 -DIMX8_PHYS_SIZE=0xB4000000
-else
-EXTRA_CFLAGS += -DIMX8_SCU_CONTROL=0 -DIMX8_DISABLE_PM=0 -DIMX8_PHYS_SIZE=0
-endif
-
EXTRA_CFLAGS += -DLINUX_CMA_FSL=1
ALLOCATOR_ARRAY_H_LOCATION := $(OS_KERNEL_DIR)/allocator/freescale
CUSTOMER_ALLOCATOR_OBJS := $(ALLOCATOR_ARRAY_H_LOCATION)/gc_hal_kernel_allocator_cma.o
@@ -25,3 +19,5 @@ EXTRA_CFLAGS += -DCLASS_NAME=\"gpu_class\"
EXTRA_CFLAGS += -DgcdGPU_2D_TIMEOUT=20000
+EXTRA_CFLAGS += -DDISABLE_RECORD_ARRAY_SIZE_OPTIMIZATION
+
diff --git a/drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta.c b/drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta.c
deleted file mode 100644
index 6753059e24a4..000000000000
--- a/drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta.c
+++ /dev/null
@@ -1,294 +0,0 @@
-/****************************************************************************
-*
-* The MIT License (MIT)
-*
-* Copyright (c) 2014 - 2016 Vivante Corporation
-*
-* Permission is hereby granted, free of charge, to any person obtaining a
-* copy of this software and associated documentation files (the "Software"),
-* to deal in the Software without restriction, including without limitation
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,
-* and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-* DEALINGS IN THE SOFTWARE.
-*
-*****************************************************************************
-*
-* The GPL License (GPL)
-*
-* Copyright (C) 2014 - 2016 Vivante Corporation
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software Foundation,
-* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*
-*****************************************************************************
-*
-* Note: This software is released under dual MIT and GPL licenses. A
-* recipient may use this file under the terms of either the MIT license or
-* GPL License. If you wish to use only one license not the other, you can
-* indicate your decision by deleting one of the above license notices in your
-* version of this file.
-*
-*****************************************************************************/
-
-
-#include "gc_hal_types.h"
-#include "gc_hal_base.h"
-#include "gc_hal_security_interface.h"
-#include "gc_hal_ta.h"
-#include "gc_hal.h"
-
-/*
-* Responsibility of TA (trust application).
-* 1) Start FE.
-* When non secure driver asks for start FE. TA enable MMU and start FE.
-* TA always execute MMU enable processes because it has no idea whether
-* GPU has been power off.
-*
-* 2) Setup page table
-* When non secure driver asks for set up GPU address to physical address
-* mapping, TA check the attribute of physical address and attribute of
-* GPU address to make sure they are match. Then it change page table.
-*
-*/
-
-/*******************************************************************************
-**
-** gcTA_Construct
-**
-** Construct a new gcTA object.
-*/
-int
-gcTA_Construct(
- IN gctaOS Os,
- OUT gcTA *TA
- )
-{
- gceSTATUS status;
- gctPOINTER pointer;
- gcTA ta;
-
- /* Construct a gcTA object. */
- gcmkONERROR(gctaOS_Allocate(sizeof(struct _gcTA), &pointer));
-
- gctaOS_ZeroMemory(pointer, sizeof(struct _gcTA));
-
- ta = (gcTA)pointer;
-
- ta->os = Os;
-
- gcmkONERROR(gctaHARDWARE_Construct(ta, &ta->hardware));
-
- if (gctaHARDWARE_IsFeatureAvailable(ta->hardware, gcvFEATURE_SECURITY))
- {
- gcmkONERROR(gctaMMU_Construct(ta, &ta->mmu));
-
- gcmkONERROR(gctaHARDWARE_PrepareFunctions(ta->hardware));
- }
-
- *TA = ta;
-
- return 0;
-
-OnError:
- return status;
-}
-
-/*******************************************************************************
-**
-** gcTA_Construct
-**
-** Destroy a gcTA object.
-*/
-int
-gcTA_Destroy(
- IN gcTA TA
- )
-{
- if (TA->mmu)
- {
- gcmkVERIFY_OK(gctaMMU_Destory(TA->mmu));
- }
-
- if (TA->hardware)
- {
- gcmkVERIFY_OK(gctaHARDWARE_Destroy(TA->hardware));
- }
-
- gcmkVERIFY_OK(gctaOS_Free(TA));
-
- /* Destroy. */
- return 0;
-}
-
-
-/*
-* Map a scatter gather list into gpu address space.
-*
-*/
-gceSTATUS
-gcTA_MapMemory(
- IN gcTA TA,
- IN gctUINT32 *PhysicalArray,
- IN gctPHYS_ADDR_T Physical,
- IN gctUINT32 PageCount,
- OUT gctUINT32 *GPUAddress
- )
-{
- gceSTATUS status;
- gcTA_MMU mmu;
- gctUINT32 pageCount = PageCount;
- gctUINT32 i;
- gctUINT32 gpuAddress = *GPUAddress;
- gctBOOL mtlbSecure = gcvFALSE;
- gctBOOL physicalSecure = gcvFALSE;
-
- mmu = TA->mmu;
-
- /* Fill in page table. */
- for (i = 0; i < pageCount; i++)
- {
- gctUINT32 physical;
- gctUINT32_PTR entry;
-
- if (PhysicalArray)
- {
- physical = PhysicalArray[i];
- }
- else
- {
- physical = (gctUINT32)Physical + 4096 * i;
- }
-
- gcmkONERROR(gctaMMU_GetPageEntry(mmu, gpuAddress, &entry, &mtlbSecure));
-
- status = gctaOS_IsPhysicalSecure(TA->os, physical, &physicalSecure);
-
- if (gcmIS_SUCCESS(status) && physicalSecure != mtlbSecure)
- {
- gcmkONERROR(gcvSTATUS_NOT_SUPPORTED);
- }
-
- gctaMMU_SetPage(mmu, physical, entry);
-
- gpuAddress += 4096;
- }
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-
-gceSTATUS
-gcTA_UnmapMemory(
- IN gcTA TA,
- IN gctUINT32 GPUAddress,
- IN gctUINT32 PageCount
- )
-{
- gceSTATUS status;
-
- gcmkONERROR(gctaMMU_FreePages(TA->mmu, GPUAddress, PageCount));
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-
-gceSTATUS
-gcTA_StartCommand(
- IN gcTA TA,
- IN gctUINT32 Address,
- IN gctUINT32 Bytes
- )
-{
- gctaHARDWARE_Execute(TA, Address, Bytes);
- return gcvSTATUS_OK;
-}
-
-int
-gcTA_Dispatch(
- IN gcTA TA,
- IN gcsTA_INTERFACE * Interface
- )
-{
- int command = Interface->command;
-
- gceSTATUS status = gcvSTATUS_OK;
-
- switch (command)
- {
- case KERNEL_START_COMMAND:
- /* Enable MMU every time FE starts.
- ** Because if normal world stop GPU and power off GPU, MMU states is reset.
- */
- gcmkONERROR(gctaHARDWARE_SetMMU(TA->hardware, TA->mmu->mtlbLogical));
-
- gcmkONERROR(gcTA_StartCommand(
- TA,
- Interface->u.StartCommand.address,
- Interface->u.StartCommand.bytes
- ));
- break;
-
- case KERNEL_MAP_MEMORY:
- gcmkONERROR(gcTA_MapMemory(
- TA,
- Interface->u.MapMemory.physicals,
- Interface->u.MapMemory.physical,
- Interface->u.MapMemory.pageCount,
- &Interface->u.MapMemory.gpuAddress
- ));
-
- break;
-
- case KERNEL_UNMAP_MEMORY:
- status = gcTA_UnmapMemory(
- TA,
- Interface->u.UnmapMemory.gpuAddress,
- Interface->u.UnmapMemory.pageCount
- );
- break;
-
- case KERNEL_DUMP_MMU_EXCEPTION:
- status = gctaHARDWARE_DumpMMUException(TA->hardware);
- break;
-
- default:
- gcmkASSERT(0);
-
- status = gcvSTATUS_INVALID_ARGUMENT;
- break;
- }
-
-OnError:
- Interface->result = status;
-
- return 0;
-}
-
-
-
diff --git a/drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta.h b/drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta.h
deleted file mode 100644
index bda9635da0c1..000000000000
--- a/drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta.h
+++ /dev/null
@@ -1,345 +0,0 @@
-/****************************************************************************
-*
-* The MIT License (MIT)
-*
-* Copyright (c) 2014 - 2016 Vivante Corporation
-*
-* Permission is hereby granted, free of charge, to any person obtaining a
-* copy of this software and associated documentation files (the "Software"),
-* to deal in the Software without restriction, including without limitation
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,
-* and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-* DEALINGS IN THE SOFTWARE.
-*
-*****************************************************************************
-*
-* The GPL License (GPL)
-*
-* Copyright (C) 2014 - 2016 Vivante Corporation
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software Foundation,
-* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*
-*****************************************************************************
-*
-* Note: This software is released under dual MIT and GPL licenses. A
-* recipient may use this file under the terms of either the MIT license or
-* GPL License. If you wish to use only one license not the other, you can
-* indicate your decision by deleting one of the above license notices in your
-* version of this file.
-*
-*****************************************************************************/
-
-
-#ifndef _GC_HAL_TA_H_
-#define _GC_HAL_TA_H_
-#include "gc_hal_types.h"
-#include "gc_hal_security_interface.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-typedef struct _gctaOS * gctaOS;
-typedef struct _gcTA * gcTA;
-
-typedef struct _gcTA_HARDWARE * gcTA_HARDWARE;
-typedef struct _gcTA_MMU * gcTA_MMU;
-
-/*
- Trust Application is a object needed to be created as a context in trust zone.
- One client for a core.
-*/
-typedef struct _gcTA {
- /* gctaOS object */
- gctaOS os;
-
- gcTA_MMU mmu;
-
- gcTA_HARDWARE hardware;
-} gcsTA;
-
-typedef struct _gcTA_MMU
-{
- gctaOS os;
-
- gctSIZE_T mtlbBytes;
- gctPOINTER mtlbLogical;
- gctPHYS_ADDR mtlbPhysical;
-
- gctPOINTER stlbs;
-
- gctPOINTER safePageLogical;
- gctPHYS_ADDR safePagePhysical;
-
- gctPOINTER nonSecureSafePageLogical;
- gctPHYS_ADDR nonSecureSafePagePhysical;
-
- gctPOINTER mutex;
-}
-gcsTA_MMU;
-
-gceSTATUS HALDECL
-TAEmulator(
- void * Interface
- );
-
-int
-gcTA_Construct(
- IN gctaOS Os,
- OUT gcTA *TA
-);
-
-int
-gcTA_Destroy(
- IN gcTA TA
-);
-
-int
-gcTA_Dispatch(
- IN gcTA TA,
- IN OUT gcsTA_INTERFACE * Interface
-);
-
-/*************************************
-* Porting layer
-*/
-
-gceSTATUS
-gctaOS_ConstructOS(
- IN gckOS Os,
- OUT gctaOS *TAos
- );
-
-gceSTATUS
-gctaOS_DestroyOS(
- IN gctaOS Os
- );
-
-gceSTATUS
-gctaOS_Allocate(
- IN gctUINT32 Bytes,
- OUT gctPOINTER *Pointer
- );
-
-gceSTATUS
-gctaOS_Free(
- IN gctPOINTER Pointer
- );
-
-gceSTATUS
-gctaOS_AllocateSecurityMemory(
- IN gctaOS Os,
- IN gctSIZE_T *Bytes,
- OUT gctPOINTER *Logical,
- OUT gctPOINTER *Physical
- );
-
-gceSTATUS
-gctaOS_FreeSecurityMemory(
- IN gctaOS Os,
- IN gctSIZE_T Bytes,
- IN gctPOINTER Logical,
- OUT gctPOINTER Physical
- );
-
-gceSTATUS
-gctaOS_AllocateNonSecurityMemory(
- IN gctaOS Os,
- IN gctSIZE_T *Bytes,
- OUT gctPOINTER *Logical,
- OUT gctPOINTER *Physical
- );
-
-gceSTATUS
-gctaOS_FreeNonSecurityMemory(
- IN gctaOS Os,
- IN gctSIZE_T Bytes,
- IN gctPOINTER Logical,
- OUT gctPOINTER Physical
- );
-
-
-
-gceSTATUS
-gctaOS_GetPhysicalAddress(
- IN gctaOS Os,
- IN gctPOINTER Logical,
- OUT gctPHYS_ADDR_T * Physical
- );
-
-gceSTATUS
-gctaOS_WriteRegister(
- IN gctaOS Os,
- IN gctUINT32 Address,
- IN gctUINT32 Data
- );
-
-gceSTATUS
-gctaOS_ReadRegister(
- IN gctaOS Os,
- IN gctUINT32 Address,
- IN gctUINT32 *Data
- );
-
-gceSTATUS
-gctaOS_MemCopy(
- IN gctUINT8_PTR Dest,
- IN gctUINT8_PTR Src,
- IN gctUINT32 Bytes
- );
-
-gceSTATUS
-gctaOS_ZeroMemory(
- IN gctUINT8_PTR Dest,
- IN gctUINT32 Bytes
- );
-
-void
-gctaOS_CacheFlush(
- IN gctUINT8_PTR Dest,
- IN gctUINT32 Bytes
- );
-
-void
-gctaOS_CacheClean(
- IN gctUINT8_PTR Dest,
- IN gctUINT32 Bytes
- );
-
-void
-gctaOS_CacheInvalidate(
- IN gctUINT8_PTR Dest,
- IN gctUINT32 Bytes
- );
-
-gceSTATUS
-gctaOS_IsPhysicalSecure(
- IN gctaOS Os,
- IN gctUINT32 Physical,
- OUT gctBOOL *Secure
- );
-
-gceSTATUS
-gctaOS_Delay(
- IN gctaOS Os,
- IN gctUINT32 Delay
- );
-
-/*
-** gctaHARDWARE
-*/
-gceSTATUS
-gctaHARDWARE_Construct(
- IN gcTA TA,
- OUT gcTA_HARDWARE * Hardware
- );
-
-gceSTATUS
-gctaHARDWARE_Destroy(
- IN gcTA_HARDWARE Hardware
- );
-
-gceSTATUS
-gctaHARDWARE_Execute(
- IN gcTA TA,
- IN gctUINT32 Address,
- IN gctUINT32 Bytes
- );
-
-gceSTATUS
-gctaHARDWARE_End(
- IN gcTA_HARDWARE Hardware,
- IN gctPOINTER Logical,
- IN OUT gctUINT32 * Bytes
- );
-
-gceSTATUS
-gctaHARDWARE_SetMMU(
- IN gcTA_HARDWARE Hardware,
- IN gctPOINTER Logical
- );
-
-gceSTATUS
-gctaHARDWARE_IsFeatureAvailable(
- IN gcTA_HARDWARE Hardware,
- IN gceFEATURE Feature
- );
-
-gceSTATUS
-gctaHARDWARE_PrepareFunctions(
- IN gcTA_HARDWARE Hardware
- );
-
-gceSTATUS
-gctaHARDWARE_DumpMMUException(
- IN gcTA_HARDWARE Hardware
- );
-
-gceSTATUS
-gctaMMU_Construct(
- IN gcTA TA,
- OUT gcTA_MMU *Mmu
- );
-
-gceSTATUS
-gctaMMU_Destory(
- IN gcTA_MMU Mmu
- );
-
-gceSTATUS
-gctaMMU_SetPage(
- IN gcTA_MMU Mmu,
- IN gctUINT32 PageAddress,
- IN gctUINT32 *PageEntry
- );
-
-gceSTATUS
-gctaMMU_GetPageEntry(
- IN gcTA_MMU Mmu,
- IN gctUINT32 Address,
- OUT gctUINT32_PTR *PageTable,
- OUT gctBOOL * Secure
- );
-
-void
-gctaMMU_DumpPagetableEntry(
- IN gcTA_MMU Mmu,
- IN gctUINT32 Address
- );
-
-gceSTATUS
-gctaMMU_FreePages(
- IN gcTA_MMU Mmu,
- IN gctUINT32 Address,
- IN gctUINT32 PageCount
- );
-
-#ifdef __cplusplus
-}
-#endif
-#endif
-
diff --git a/drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta_hardware.c b/drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta_hardware.c
deleted file mode 100644
index 4b5786ec0a65..000000000000
--- a/drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta_hardware.c
+++ /dev/null
@@ -1,830 +0,0 @@
-/****************************************************************************
-*
-* The MIT License (MIT)
-*
-* Copyright (c) 2014 - 2016 Vivante Corporation
-*
-* Permission is hereby granted, free of charge, to any person obtaining a
-* copy of this software and associated documentation files (the "Software"),
-* to deal in the Software without restriction, including without limitation
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,
-* and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-* DEALINGS IN THE SOFTWARE.
-*
-*****************************************************************************
-*
-* The GPL License (GPL)
-*
-* Copyright (C) 2014 - 2016 Vivante Corporation
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software Foundation,
-* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*
-*****************************************************************************
-*
-* Note: This software is released under dual MIT and GPL licenses. A
-* recipient may use this file under the terms of either the MIT license or
-* GPL License. If you wish to use only one license not the other, you can
-* indicate your decision by deleting one of the above license notices in your
-* version of this file.
-*
-*****************************************************************************/
-
-
-#include "gc_hal_types.h"
-#include "gc_hal_base.h"
-#include "gc_hal_security_interface.h"
-#include "gc_hal_ta.h"
-#include "gc_hal_ta_hardware.h"
-#include "gc_hal.h"
-#include "gc_feature_database.h"
-
-
-#define _GC_OBJ_ZONE 1
-#define SRC_MAX 8
-#define RECT_ADDR_OFFSET 3
-
-#define INVALID_ADDRESS ~0U
-
-/******************************************************************************\
-********************************* Support Code *********************************
-\******************************************************************************/
-static gceSTATUS
-_IdentifyHardwareByDatabase(
- IN gcTA_HARDWARE Hardware
- )
-{
- gceSTATUS status;
- gctUINT32 chipIdentity;
- gcsFEATURE_DATABASE *database;
- gctaOS os = Hardware->os;
-
- gcmkHEADER();
-
- /***************************************************************************
- ** Get chip ID and revision.
- */
-
- /* Read chip identity register. */
- gcmkONERROR(gctaOS_ReadRegister(os, 0x00018, &chipIdentity));
-
- /* Special case for older graphic cores. */
- if (((((gctUINT32) (chipIdentity)) >> (0 ? 31:24) & ((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1)))))) == (0x01 & ((gctUINT32) ((((1 ?
- 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:
-24) + 1))))))))
- {
- Hardware->chipModel = gcv500;
- Hardware->chipRevision = (((((gctUINT32) (chipIdentity)) >> (0 ? 15:12)) & ((gctUINT32) ((((1 ? 15:12) - (0 ? 15:12) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:12) - (0 ? 15:12) + 1)))))) );
- }
-
- else
- {
- /* Read chip identity register. */
- gcmkONERROR(
- gctaOS_ReadRegister(os,
- 0x00020,
- (gctUINT32_PTR) &Hardware->chipModel));
-
- if (((Hardware->chipModel & 0xFF00) == 0x0400)
- && (Hardware->chipModel != 0x0420)
- && (Hardware->chipModel != 0x0428))
- {
- Hardware->chipModel = (gceCHIPMODEL) (Hardware->chipModel & 0x0400);
- }
-
- /* Read CHIP_REV register. */
- gcmkONERROR(
- gctaOS_ReadRegister(os,
- 0x00024,
- &Hardware->chipRevision));
-
- if ((Hardware->chipModel == gcv300)
- && (Hardware->chipRevision == 0x2201)
- )
- {
- gctUINT32 chipDate;
- gctUINT32 chipTime;
-
- /* Read date and time registers. */
- gcmkONERROR(
- gctaOS_ReadRegister(os,
- 0x00028,
- &chipDate));
-
- gcmkONERROR(
- gctaOS_ReadRegister(os,
- 0x0002C,
- &chipTime));
-
- if ((chipDate == 0x20080814) && (chipTime == 0x12051100))
- {
- /* This IP has an ECO; put the correct revision in it. */
- Hardware->chipRevision = 0x1051;
- }
- }
-
- gcmkONERROR(
- gctaOS_ReadRegister(os,
- 0x000A8,
- &Hardware->productID));
- }
-
- gcmkVERIFY_OK(gctaOS_ReadRegister(
- os,
- 0x000E8,
- &Hardware->ecoID
- ));
-
- gcmkVERIFY_OK(gctaOS_ReadRegister(
- os,
- 0x00030,
- &Hardware->customerID
- ));
-
- /***************************************************************************
- ** Get chip features.
- */
-
- database =
- Hardware->featureDatabase =
- gcQueryFeatureDB(
- Hardware->chipModel,
- Hardware->chipRevision,
- Hardware->productID,
- Hardware->ecoID,
- Hardware->customerID
- );
-
- if (database == gcvNULL)
- {
- gcmkPRINT("[galcore]: Feature database is not found,"
- "chipModel=0x%0x, chipRevision=0x%x, productID=0x%x, ecoID=0x%x",
- Hardware->chipModel,
- Hardware->chipRevision,
- Hardware->productID,
- Hardware->ecoID);
- gcmkONERROR(gcvSTATUS_NOT_FOUND);
- }
-
- /* Success. */
- gcmkFOOTER();
- return gcvSTATUS_OK;
-
-OnError:
- /* Return the status. */
- gcmkFOOTER();
- return status;
-}
-
-
-gceSTATUS
-gctaHARDWARE_SetMMUStates(
- IN gcTA_HARDWARE Hardware,
- IN gctPOINTER MtlbAddress,
- IN gceMMU_MODE Mode,
- IN gctPOINTER SafeAddress,
- IN gctPOINTER Logical,
- IN OUT gctUINT32 * Bytes
- )
-{
- gceSTATUS status;
- gctUINT32 config, address;
- gctUINT32 extMtlb, extSafeAddrss;
- gctPHYS_ADDR_T physical;
- gctUINT32_PTR buffer;
- gctUINT32 reserveBytes = 2 * 4;
- gcsMMU_TABLE_ARRAY_ENTRY * entry;
-
- gcmkHEADER_ARG("Hardware=0x%x", Hardware);
-
- entry = (gcsMMU_TABLE_ARRAY_ENTRY *) Hardware->pagetableArray.logical;
-
- /* Convert logical address into physical address. */
- gcmkONERROR(
- gctaOS_GetPhysicalAddress(Hardware->os, MtlbAddress, &physical));
-
- config = (gctUINT32)(physical & 0xFFFFFFFF);
- extMtlb = (gctUINT32)(physical >> 32);
-
- gcmkONERROR(
- gctaOS_GetPhysicalAddress(Hardware->os, SafeAddress, &physical));
-
- address = (gctUINT32)(physical & 0xFFFFFFFF);
- extSafeAddrss = (gctUINT32)(physical >> 32);
-
- if (address & 0x3F)
- {
- gcmkONERROR(gcvSTATUS_NOT_ALIGNED);
- }
-
- switch (Mode)
- {
- case gcvMMU_MODE_1K:
- if (config & 0x3FF)
- {
- gcmkONERROR(gcvSTATUS_NOT_ALIGNED);
- }
-
- config |= ((((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)));
-
- break;
-
- case gcvMMU_MODE_4K:
- if (config & 0xFFF)
- {
- gcmkONERROR(gcvSTATUS_NOT_ALIGNED);
- }
-
- config |= ((((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) (0x0 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
-
- break;
-
- default:
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
- }
-
- if (Logical != gcvNULL)
- {
- buffer = Logical;
-
- /* Setup page table array entry. */
- entry->low = config;
- entry->high = physical >> 32;
-
- /* Setup command buffer to load index 0 of page table array. */
- *buffer++
- = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ?
- 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) | (((gctUINT32) ((gctUINT32) (0x006B) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)))
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ?
- 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ?
- 25:16)));
-
- *buffer++
- = (((((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) (0) & ((gctUINT32) ((((1 ? 15:0) - (0 ?
- 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0))) &((((gctUINT32) (~0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 16:16) - (0 ?
- 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ?
- 16:16))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))));
- }
-
- if (Bytes != gcvNULL)
- {
- *Bytes = reserveBytes;
- }
-
- /* Return the status. */
- gcmkFOOTER_NO();
- return status;
-
-OnError:
- /* Return the status. */
- gcmkFOOTER();
- return status;
-}
-
-gceSTATUS
-gctaHARDWARE_End(
- IN gcTA_HARDWARE Hardware,
- IN gctPOINTER Logical,
- IN OUT gctUINT32 * Bytes
- )
-{
- gctUINT32_PTR logical = (gctUINT32_PTR) Logical;
- gceSTATUS status;
-
- gcmkHEADER_ARG("Hardware=0x%x Logical=0x%x *Bytes=%lu",
- Hardware, Logical, gcmOPT_VALUE(Bytes));
-
- /* Verify the arguments. */
- gcmkVERIFY_ARGUMENT((Logical == gcvNULL) || (Bytes != gcvNULL));
-
- if (Logical != gcvNULL)
- {
- if (*Bytes < 8)
- {
- /* Command queue too small. */
- gcmkONERROR(gcvSTATUS_BUFFER_TOO_SMALL);
- }
-
- /* Append END. */
- logical[0] =
- ((((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) (0x02 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)));
-
- /* Record the count of execution which is finised by this END. */
- logical[1] =
- 0;
-
- gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE, "0x%x: END", Logical);
- }
-
- if (Bytes != gcvNULL)
- {
- /* Return number of bytes required by the END command. */
- *Bytes = 8;
- }
-
- /* Success. */
- gcmkFOOTER_ARG("*Bytes=%lu", gcmOPT_VALUE(Bytes));
- return gcvSTATUS_OK;
-
-OnError:
- /* Return the status. */
- gcmkFOOTER();
- return status;
-}
-
-
-gceSTATUS
-gctaHARDWARE_Construct(
- IN gcTA TA,
- OUT gcTA_HARDWARE * Hardware
- )
-{
- gceSTATUS status;
- gcTA_HARDWARE hardware;
-
- gctaOS os = TA->os;
-
- gcmkONERROR(gctaOS_Allocate(
- gcmSIZEOF(gcsTA_HARDWARE),
- (gctPOINTER *)&hardware
- ));
-
- gctaOS_ZeroMemory((gctUINT8_PTR)hardware, gcmSIZEOF(gcsTA_HARDWARE));
-
- hardware->ta = TA;
- hardware->os = os;
-
- hardware->pagetableArray.size = 4096;
-
- hardware->functionBytes = 4096;
-
- /*************************************/
- /******** Get chip information ******/
- /*************************************/
-
- _IdentifyHardwareByDatabase(hardware);
-
- *Hardware = hardware;
-
- return gcvSTATUS_OK;
-OnError:
- return status;
-}
-
-gceSTATUS
-gctaHARDWARE_Destroy(
- IN gcTA_HARDWARE Hardware
- )
-{
- if (Hardware->pagetableArray.logical)
- {
- gctaOS_FreeSecurityMemory(
- Hardware->ta->os,
- Hardware->pagetableArray.size,
- Hardware->pagetableArray.logical,
- (gctUINT32_PTR)Hardware->pagetableArray.physical
- );
- }
-
- if (Hardware->functionLogical)
- {
- gctaOS_FreeSecurityMemory(
- Hardware->ta->os,
- Hardware->functionBytes,
- Hardware->functionLogical,
- (gctUINT32_PTR)Hardware->functionPhysical
- );
- }
-
- gctaOS_Free(Hardware);
-
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gctaHARDWARE_Execute(
- IN gcTA TA,
- IN gctUINT32 Address,
- IN gctUINT32 Bytes
- )
-{
- gceSTATUS status;
- gctUINT32 address = Address, control;
-
- gcmkHEADER_ARG("Address=0x%x Bytes=%lu",
- Address, Bytes);
-
- /* Enable all events. */
- gcmkONERROR(
- gctaOS_WriteRegister(TA->os, 0x00014, ~0U));
-
- /* Write address register. */
- gcmkONERROR(
- gctaOS_WriteRegister(TA->os, 0x00654, address));
-
- /* Build control register. */
- control = ((((gctUINT32) (0)) & ~(((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)))
- | ((((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) ((Bytes + 7) >> 3) & ((gctUINT32) ((((1 ?
- 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ?
- 15:0)));
-
- /* Write control register. */
- gcmkONERROR(
- gctaOS_WriteRegister(TA->os, 0x003A4, control));
-
- gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
- "Started command buffer @ 0x%08x",
- address);
-
- /* Success. */
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- /* Return the status. */
- gcmkFOOTER();
- return status;
-}
-
-gceSTATUS
-gctaHARDWARE_MmuEnable(
- IN gcTA_HARDWARE Hardware
- )
-{
- gctaOS_WriteRegister(
- Hardware->ta->os,
- 0x0018C,
- ((((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) ((gctUINT32) (1 ) & ((gctUINT32) ((((1 ? 0:0) - (0 ?
- 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ?
- 0:0))));
-
- return gcvSTATUS_OK;
-}
-
-/*
-* In trust zone, we prepare page table array table and configure base address of
-* it to hardware.
-*/
-gceSTATUS
-gctaHARDWARE_SetMMU(
- IN gcTA_HARDWARE Hardware,
- IN gctPOINTER Logical
- )
-{
- gcsMMU_TABLE_ARRAY_ENTRY *entry;
- gcsHARDWARE_FUNCTION *function = &Hardware->functions[0];
- gctUINT32 delay = 1;
- gctUINT32 timer = 0;
- gctUINT32 idle;
- gctPHYS_ADDR_T mtlbPhysical;
- gctPHYS_ADDR_T secureSafeAddress;
- gctPHYS_ADDR_T nonSecureSafeAddress;
-
- gctaOS_GetPhysicalAddress(Hardware->ta->os, Logical, &mtlbPhysical);
-
- gctaOS_GetPhysicalAddress(Hardware->ta->os, Hardware->ta->mmu->safePageLogical, &secureSafeAddress);
-
- gctaOS_GetPhysicalAddress(Hardware->ta->os, Hardware->ta->mmu->nonSecureSafePageLogical, &nonSecureSafeAddress);
-
- /* Fill entry 0 of page table array. */
- entry = (gcsMMU_TABLE_ARRAY_ENTRY *)Hardware->pagetableArray.logical;
-
- entry->low = (gctUINT32)(mtlbPhysical & 0xFFFFFFFF);
-
- entry->high = (gctUINT32)(mtlbPhysical >> 32)
- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
- 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1))))))) << (0 ?
- 8:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 8:8) - (0 ?
- 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1))))))) << (0 ?
- 8:8)))
- ;
-
- /* Set page table base. */
- gctaOS_WriteRegister(
- Hardware->ta->os,
- 0x0038C,
- (gctUINT32)(Hardware->pagetableArray.address & 0xFFFFFFFF)
- );
-
- gctaOS_WriteRegister(
- Hardware->ta->os,
- 0x00390,
- (gctUINT32)((Hardware->pagetableArray.address >> 32) & 0xFFFFFFFF)
- );
-
- gctaOS_WriteRegister(
- Hardware->ta->os,
- 0x00394,
- 1
- );
-
- gctaOS_WriteRegister(
- Hardware->ta->os,
- 0x0039C,
- (gctUINT32)(secureSafeAddress & 0xFFFFFFFF)
- );
-
- gctaOS_WriteRegister(
- Hardware->ta->os,
- 0x00398,
- (gctUINT32)(nonSecureSafeAddress & 0xFFFFFFFF)
- );
-
- gctaOS_WriteRegister(
- Hardware->ta->os,
- 0x003A0,
- (((((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) ((gctUINT32)((secureSafeAddress >> 32) & 0xFFFFFFFF)) & ((gctUINT32) ((((1 ?
- 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ?
- 23:16))) &((((gctUINT32) (~0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:31) - (0 ?
- 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ?
- 31:31))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31))))
- | (((((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) ((gctUINT32)((nonSecureSafeAddress >> 32) & 0xFFFFFFFF)) & ((gctUINT32) ((((1 ?
- 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ?
- 7:0))) &((((gctUINT32) (~0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:15) - (0 ?
- 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ?
- 15:15))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ?
- ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15))))
- );
-
- /* Execute prepared command sequence. */
- gctaHARDWARE_Execute(
- Hardware->ta,
- function->address,
- function->bytes
- );
-
- /* Wait until MMU configure finishes. */
- do
- {
- gctaOS_Delay(Hardware->os, delay);
-
- gctaOS_ReadRegister(
- Hardware->ta->os,
- 0x00004,
- &idle);
-
- timer += delay;
- delay *= 2;
- }
- while (!(((((gctUINT32) (idle)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ));
-
- /* Enable MMU. */
- gctaOS_WriteRegister(
- Hardware->os,
- 0x00388,
- ((((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)))
- );
-
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gctaHARDWARE_PrepareFunctions(
- IN gcTA_HARDWARE Hardware
- )
-{
- gceSTATUS status;
- gcsHARDWARE_FUNCTION * function;
- gctUINT32 mmuBytes;
- gctUINT32 endBytes = 8;
- gctUINT8_PTR logical;
-
- gcmkHEADER();
-
- /* Allocate page table array. */
- gcmkONERROR(gctaOS_AllocateSecurityMemory(
- Hardware->ta->os,
- &Hardware->pagetableArray.size,
- &Hardware->pagetableArray.logical,
- &Hardware->pagetableArray.physical
- ));
-
- gcmkONERROR(gctaOS_GetPhysicalAddress(
- Hardware->ta->os,
- Hardware->pagetableArray.logical,
- &Hardware->pagetableArray.address
- ));
-
- /* Allocate GPU functions. */
- gcmkONERROR(gctaOS_AllocateSecurityMemory(
- Hardware->ta->os,
- &Hardware->functionBytes,
- &Hardware->functionLogical,
- &Hardware->functionPhysical
- ));
-
- gcmkONERROR(gctaOS_GetPhysicalAddress(
- Hardware->ta->os,
- Hardware->functionLogical,
- (gctPHYS_ADDR_T *)&Hardware->functionAddress
- ));
-
- function = &Hardware->functions[0];
-
- function->logical = Hardware->functionLogical;
-
- function->address = Hardware->functionAddress;
-
- logical = function->logical;
-
- gcmkONERROR(gctaHARDWARE_SetMMUStates(
- Hardware,
- Hardware->ta->mmu->mtlbLogical,
- gcvMMU_MODE_4K,
- Hardware->ta->mmu->safePageLogical,
- logical,
- &mmuBytes
- ));
-
- logical += 8;
-
- gcmkONERROR(gctaHARDWARE_End(
- Hardware,
- logical,
- &endBytes
- ));
-
- function->bytes = mmuBytes + endBytes;
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- gcmkFOOTER();
- return status;
-}
-
-gceSTATUS
-gctaHARDWARE_IsFeatureAvailable(
- IN gcTA_HARDWARE Hardware,
- IN gceFEATURE Feature
- )
-{
- gctBOOL available;
- gcsFEATURE_DATABASE *database = Hardware->featureDatabase;
-
- switch (Feature)
- {
- case gcvFEATURE_SECURITY:
- available = database->SECURITY;
- break;
- default:
- gcmkFATAL("Invalid feature has been requested.");
- available = gcvFALSE;
- }
-
- return available;
-}
-
-gceSTATUS
-gctaHARDWARE_DumpMMUException(
- IN gcTA_HARDWARE Hardware
- )
-{
- gctUINT32 mmu = 0;
- gctUINT32 mmuStatus = 0;
- gctUINT32 address = 0;
- gctUINT32 i = 0;
-
- gctUINT32 mmuStatusRegAddress;
- gctUINT32 mmuExceptionAddress;
-
- gcmkHEADER_ARG("Hardware=0x%x", Hardware);
-
- mmuStatusRegAddress = 0x00384;
- mmuExceptionAddress = 0x00380;
-
- /* Verify the arguments. */
- gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
-
- gcmkPRINT("ChipModel=0x%x ChipRevision=0x%x:\n",
- Hardware->chipModel,
- Hardware->chipRevision);
-
- gcmkPRINT("**************************\n");
- gcmkPRINT("*** MMU ERROR DUMP ***\n");
- gcmkPRINT("**************************\n");
-
- gcmkVERIFY_OK(gctaOS_ReadRegister(
- Hardware->os,
- mmuStatusRegAddress,
- &mmuStatus
- ));
-
- gcmkPRINT(" MMU status = 0x%08X\n", mmuStatus);
-
- for (i = 0; i < 4; i += 1)
- {
- mmu = mmuStatus & 0xF;
- mmuStatus >>= 4;
-
- if (mmu == 0)
- {
- continue;
- }
-
- switch (mmu)
- {
- case 1:
- gcmkPRINT(" MMU%d: slave not present\n", i);
- break;
-
- case 2:
- gcmkPRINT(" MMU%d: page not present\n", i);
- break;
-
- case 3:
- gcmkPRINT(" MMU%d: write violation\n", i);
- break;
-
- case 4:
- gcmkPRINT(" MMU%d: out of bound", i);
- break;
-
- case 5:
- gcmkPRINT(" MMU%d: read security violation", i);
- break;
-
- case 6:
- gcmkPRINT(" MMU%d: write security violation", i);
- break;
-
- default:
- gcmkPRINT(" MMU%d: unknown state\n", i);
- }
-
- gcmkVERIFY_OK(gctaOS_ReadRegister(
- Hardware->os,
- mmuExceptionAddress + i * 4,
- &address
- ));
-
- gcmkPRINT(" MMU%d: exception address = 0x%08X\n", i, address);
-
- gctaMMU_DumpPagetableEntry(Hardware->ta->mmu, address);
- }
-
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-}
-
diff --git a/drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta_hardware.h b/drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta_hardware.h
deleted file mode 100644
index 6693b40f1a92..000000000000
--- a/drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta_hardware.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/****************************************************************************
-*
-* The MIT License (MIT)
-*
-* Copyright (c) 2014 - 2016 Vivante Corporation
-*
-* Permission is hereby granted, free of charge, to any person obtaining a
-* copy of this software and associated documentation files (the "Software"),
-* to deal in the Software without restriction, including without limitation
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,
-* and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-* DEALINGS IN THE SOFTWARE.
-*
-*****************************************************************************
-*
-* The GPL License (GPL)
-*
-* Copyright (C) 2014 - 2016 Vivante Corporation
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software Foundation,
-* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*
-*****************************************************************************
-*
-* Note: This software is released under dual MIT and GPL licenses. A
-* recipient may use this file under the terms of either the MIT license or
-* GPL License. If you wish to use only one license not the other, you can
-* indicate your decision by deleting one of the above license notices in your
-* version of this file.
-*
-*****************************************************************************/
-
-
-#ifndef _GC_HAL_TA_HARDWARE_H_
-#define _GC_HAL_TA_HARDWARE_H_
-#include "gc_hal_types.h"
-#include "gc_hal_security_interface.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct _gcsMMU_TABLE_ARRAY_ENTRY
-{
- gctUINT32 low;
- gctUINT32 high;
-}
-gcsMMU_TABLE_ARRAY_ENTRY;
-
-typedef struct _gcsHARDWARE_PAGETABLE_ARRAY
-{
- /* Number of entries in page table array. */
- gctUINT num;
-
- /* Size in bytes of array. */
- gctSIZE_T size;
-
- /* Physical address of array. */
- gctPHYS_ADDR_T address;
-
- /* Memory descriptor. */
- gctPOINTER physical;
-
- /* Logical address of array. */
- gctPOINTER logical;
-}
-gcsHARDWARE_PAGETABLE_ARRAY;
-
-typedef struct _gcsHARWARE_FUNCTION
-{
- /* Entry of the function. */
- gctUINT32 address;
-
- /* CPU address of the function. */
- gctUINT8_PTR logical;
-
- /* Bytes of the function. */
- gctUINT32 bytes;
-
- /* Hardware address of END in this function. */
- gctUINT32 endAddress;
-
- /* Logical of END in this function. */
- gctUINT8_PTR endLogical;
-}
-gcsHARDWARE_FUNCTION;
-
-typedef struct _gcTA_HARDWARE
-{
- gctaOS os;
- gcTA ta;
-
- gctUINT32 chipModel;
- gctUINT32 chipRevision;
- gctUINT32 productID;
- gctUINT32 ecoID;
- gctUINT32 customerID;
-
- gctPOINTER featureDatabase;
-
- gcsHARDWARE_PAGETABLE_ARRAY pagetableArray;
-
- /* Function used by gctaHARDWARE. */
- gctPHYS_ADDR functionPhysical;
- gctPOINTER functionLogical;
- gctUINT32 functionAddress;
- gctSIZE_T functionBytes;
-
- gcsHARDWARE_FUNCTION functions[1];
-}
-gcsTA_HARDWARE;
-
-#ifdef __cplusplus
-}
-#endif
-#endif
-
diff --git a/drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta_mmu.c b/drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta_mmu.c
deleted file mode 100644
index 5a343f04b41d..000000000000
--- a/drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta_mmu.c
+++ /dev/null
@@ -1,522 +0,0 @@
-/****************************************************************************
-*
-* The MIT License (MIT)
-*
-* Copyright (c) 2014 - 2016 Vivante Corporation
-*
-* Permission is hereby granted, free of charge, to any person obtaining a
-* copy of this software and associated documentation files (the "Software"),
-* to deal in the Software without restriction, including without limitation
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,
-* and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-* DEALINGS IN THE SOFTWARE.
-*
-*****************************************************************************
-*
-* The GPL License (GPL)
-*
-* Copyright (C) 2014 - 2016 Vivante Corporation
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software Foundation,
-* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*
-*****************************************************************************
-*
-* Note: This software is released under dual MIT and GPL licenses. A
-* recipient may use this file under the terms of either the MIT license or
-* GPL License. If you wish to use only one license not the other, you can
-* indicate your decision by deleting one of the above license notices in your
-* version of this file.
-*
-*****************************************************************************/
-
-
-#include "gc_hal_types.h"
-#include "gc_hal_base.h"
-#include "gc_hal_security_interface.h"
-#include "gc_hal_ta.h"
-#include "gc_hal.h"
-
-#define _GC_OBJ_ZONE 2
-/*******************************************************************************
-************************************ Define ************************************
-********************************************************************************/
-
-#define gcdMMU_MTLB_SHIFT 22
-#define gcdMMU_STLB_4K_SHIFT 12
-#define gcdMMU_STLB_64K_SHIFT 16
-
-#define gcdMMU_MTLB_BITS (32 - gcdMMU_MTLB_SHIFT)
-#define gcdMMU_PAGE_4K_BITS gcdMMU_STLB_4K_SHIFT
-#define gcdMMU_STLB_4K_BITS (32 - gcdMMU_MTLB_BITS - gcdMMU_PAGE_4K_BITS)
-#define gcdMMU_PAGE_64K_BITS gcdMMU_STLB_64K_SHIFT
-#define gcdMMU_STLB_64K_BITS (32 - gcdMMU_MTLB_BITS - gcdMMU_PAGE_64K_BITS)
-
-#define gcdMMU_MTLB_ENTRY_NUM (1 << gcdMMU_MTLB_BITS)
-#define gcdMMU_MTLB_SIZE (gcdMMU_MTLB_ENTRY_NUM << 2)
-#define gcdMMU_STLB_4K_ENTRY_NUM (1 << gcdMMU_STLB_4K_BITS)
-#define gcdMMU_STLB_4K_SIZE (gcdMMU_STLB_4K_ENTRY_NUM << 2)
-#define gcdMMU_PAGE_4K_SIZE (1 << gcdMMU_STLB_4K_SHIFT)
-#define gcdMMU_STLB_64K_ENTRY_NUM (1 << gcdMMU_STLB_64K_BITS)
-#define gcdMMU_STLB_64K_SIZE (gcdMMU_STLB_64K_ENTRY_NUM << 2)
-#define gcdMMU_PAGE_64K_SIZE (1 << gcdMMU_STLB_64K_SHIFT)
-
-#define gcdMMU_MTLB_MASK (~((1U << gcdMMU_MTLB_SHIFT)-1))
-#define gcdMMU_STLB_4K_MASK ((~0U << gcdMMU_STLB_4K_SHIFT) ^ gcdMMU_MTLB_MASK)
-#define gcdMMU_PAGE_4K_MASK (gcdMMU_PAGE_4K_SIZE - 1)
-#define gcdMMU_STLB_64K_MASK ((~((1U << gcdMMU_STLB_64K_SHIFT)-1)) ^ gcdMMU_MTLB_MASK)
-#define gcdMMU_PAGE_64K_MASK (gcdMMU_PAGE_64K_SIZE - 1)
-
-/* Page offset definitions. */
-#define gcdMMU_OFFSET_4K_BITS (32 - gcdMMU_MTLB_BITS - gcdMMU_STLB_4K_BITS)
-#define gcdMMU_OFFSET_4K_MASK ((1U << gcdMMU_OFFSET_4K_BITS) - 1)
-#define gcdMMU_OFFSET_16K_BITS (32 - gcdMMU_MTLB_BITS - gcdMMU_STLB_16K_BITS)
-#define gcdMMU_OFFSET_16K_MASK ((1U << gcdMMU_OFFSET_16K_BITS) - 1)
-
-#define gcdMMU_MTLB_PRESENT 0x00000001
-#define gcdMMU_MTLB_EXCEPTION 0x00000002
-#define gcdMMU_MTLB_4K_PAGE 0x00000000
-
-#define gcdMMU_STLB_PRESENT 0x00000001
-#define gcdMMU_STLB_EXCEPTION 0x00000002
-#define gcdMMU_STLB_SECURITY (1 << 4)
-#define gcdMMU_STLB_4K_PAGE 0x00000000
-
-#define gcdUSE_MMU_EXCEPTION 1
-
-#define gcdMMU_SECURE_AREA_START ((gcdMMU_MTLB_ENTRY_NUM - gcdMMU_SECURE_AREA_SIZE) << gcdMMU_MTLB_SHIFT)
-
-typedef enum _gceMMU_TYPE
-{
- gcvMMU_USED = (0 << 4),
- gcvMMU_SINGLE = (1 << 4),
- gcvMMU_FREE = (2 << 4),
-}
-gceMMU_TYPE;
-
-typedef struct _gcsMMU_STLB *gcsMMU_STLB_PTR;
-typedef struct _gcsMMU_STLB
-{
- gctPHYS_ADDR physical;
- gctUINT32_PTR logical;
- gctSIZE_T size;
- gctPHYS_ADDR_T physBase;
- gctSIZE_T pageCount;
- gctUINT32 mtlbIndex;
- gctUINT32 mtlbEntryNum;
- gcsMMU_STLB_PTR next;
-} gcsMMU_STLB;
-
-
-#define gcmENTRY_TYPE(x) (x & 0xF0)
-/*
-* We need flat mapping ta command buffer.
-
-*/
-
-/*
-* Helper
-*/
-gctUINT32
-_MtlbOffset(
- gctUINT32 Address
- )
-{
- return (Address & gcdMMU_MTLB_MASK) >> gcdMMU_MTLB_SHIFT;
-}
-
-gctUINT32
-_StlbOffset(
- gctUINT32 Address
- )
-{
- return (Address & gcdMMU_STLB_4K_MASK) >> gcdMMU_STLB_4K_SHIFT;
-}
-
-static gctUINT32
-_SetPage(gctUINT32 PageAddress)
-{
- return PageAddress
- /* writable */
- | (1 << 2)
- /* Ignore exception */
- | (0 << 1)
- /* Present */
- | (1 << 0);
-}
-
-static void
-_WritePageEntry(
- IN gctUINT32_PTR PageEntry,
- IN gctUINT32 EntryValue
- )
-{
- *PageEntry = EntryValue;
-
- gctaOS_CacheClean((gctUINT8_PTR)PageEntry, gcmSIZEOF(gctUINT32));
-}
-
-static gceSTATUS
-_FillPageTable(
- IN gctUINT32_PTR PageTable,
- IN gctUINT32 PageCount,
- IN gctUINT32 EntryValue
-)
-{
- gctUINT i;
-
- for (i = 0; i < PageCount; i++)
- {
- _WritePageEntry(PageTable + i, EntryValue);
- }
-
- return gcvSTATUS_OK;
-}
-
-
-static gceSTATUS
-_AllocateStlb(
- IN gctaOS Os,
- OUT gcsMMU_STLB_PTR *Stlb
- )
-{
- gceSTATUS status;
- gcsMMU_STLB_PTR stlb;
- gctPOINTER pointer;
-
- /* Allocate slave TLB record. */
- gcmkONERROR(gctaOS_Allocate(gcmSIZEOF(gcsMMU_STLB), &pointer));
- stlb = pointer;
-
- stlb->size = gcdMMU_STLB_4K_SIZE;
-
- /* Allocate slave TLB entries. */
- gcmkONERROR(gctaOS_AllocateSecurityMemory(
- Os,
- &stlb->size,
- (gctPOINTER *)&stlb->logical,
- &stlb->physical
- ));
-
- gcmkONERROR(gctaOS_GetPhysicalAddress(Os, stlb->logical, &stlb->physBase));
-
-#if gcdUSE_MMU_EXCEPTION
- _FillPageTable(stlb->logical, stlb->size / 4, gcdMMU_STLB_EXCEPTION);
-#else
- gctaOS_ZeroMemory(stlb->logical, stlb->size);
-#endif
-
- *Stlb = stlb;
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-
-gceSTATUS
-gctaMMU_Construct(
- IN gcTA TA,
- OUT gcTA_MMU *Mmu
- )
-{
- gceSTATUS status;
- gctSIZE_T bytes = 4096;
-
- gcTA_MMU mmu;
-
- gcmkONERROR(gctaOS_Allocate(
- gcmSIZEOF(gcsTA_MMU),
- (gctPOINTER *)&mmu
- ));
-
- mmu->os = TA->os;
-
- /* MTLB bytes. */
- mmu->mtlbBytes = gcdMMU_MTLB_SIZE;
-
- /* Allocate MTLB. */
- gcmkONERROR(gctaOS_AllocateSecurityMemory(
- TA->os,
- &mmu->mtlbBytes,
- &mmu->mtlbLogical,
- &mmu->mtlbPhysical
- ));
-
- /* Allocate a array to store stlbs. */
- gcmkONERROR(gctaOS_Allocate(mmu->mtlbBytes, &mmu->stlbs));
-
- gctaOS_ZeroMemory((gctUINT8_PTR)mmu->stlbs, mmu->mtlbBytes);
-
- /* Allocate security safe page. */
- gcmkONERROR(gctaOS_AllocateSecurityMemory(
- TA->os,
- &bytes,
- &mmu->safePageLogical,
- &mmu->safePagePhysical
- ));
-
- gctaOS_ZeroMemory((gctUINT8_PTR)mmu->safePageLogical, bytes);
-
- /* Allocate non security safe page. */
- gcmkONERROR(gctaOS_AllocateSecurityMemory(
- TA->os,
- &bytes,
- &mmu->nonSecureSafePageLogical,
- &mmu->nonSecureSafePagePhysical
- ));
-
- gctaOS_ZeroMemory((gctUINT8_PTR)mmu->nonSecureSafePageLogical, bytes);
-
- /* gcmkONERROR(gctaOS_CreateMutex(TA->os, &mmu->mutex)); */
-
- *Mmu = mmu;
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-
-gceSTATUS
-gctaMMU_Destory(
- IN gcTA_MMU Mmu
- )
-{
- gctaOS os = Mmu->os;
-
- if (Mmu->safePageLogical)
- {
- gcmkVERIFY_OK(gctaOS_FreeSecurityMemory(
- os,
- 4096,
- Mmu->safePageLogical,
- Mmu->safePagePhysical
- ));
- }
-
- if (Mmu->nonSecureSafePageLogical)
- {
- gcmkVERIFY_OK(gctaOS_FreeSecurityMemory(
- os,
- 4096,
- Mmu->nonSecureSafePageLogical,
- Mmu->nonSecureSafePagePhysical
- ));
- }
-
- if (Mmu->mtlbLogical)
- {
- gcmkVERIFY_OK(gctaOS_FreeSecurityMemory(
- os,
- 4096,
- Mmu->mtlbLogical,
- Mmu->mtlbPhysical
- ));
- }
-
- gcmkVERIFY_OK(gctaOS_Free(Mmu));
-
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gctaMMU_GetPageEntry(
- IN gcTA_MMU Mmu,
- IN gctUINT32 Address,
- OUT gctUINT32_PTR *PageTable,
- OUT gctBOOL * Secure
- )
-{
- gceSTATUS status;
- struct _gcsMMU_STLB *stlb;
- struct _gcsMMU_STLB **stlbs = (struct _gcsMMU_STLB **)Mmu->stlbs;
- gctUINT32 offset = _MtlbOffset(Address);
- gctUINT32 mtlbEntry;
- gctBOOL secure = Address > gcdMMU_SECURE_AREA_START;
-
- gcmkHEADER_ARG("Mmu=0x%x", Mmu);
-
- /* Verify the arguments. */
- gcmkVERIFY_ARGUMENT((Address & 0xFFF) == 0);
-
- stlb = stlbs[offset];
-
- if (stlb == gcvNULL)
- {
- gcmkONERROR(_AllocateStlb(Mmu->os, &stlb));
-
- mtlbEntry = (gctUINT32)(stlb->physBase & 0xFFFFFFFF)
- | gcdMMU_MTLB_4K_PAGE
- | gcdMMU_MTLB_PRESENT
- ;
-
- if (secure)
- {
- /* Secure MTLB. */
- mtlbEntry |= (1 << 4);
- }
-
- /* Insert Slave TLB address to Master TLB entry.*/
- _WritePageEntry((gctUINT32_PTR)Mmu->mtlbLogical + offset, mtlbEntry);
-
- /* Record stlb. */
- stlbs[offset] = stlb;
- }
-
- *PageTable = &stlb->logical[_StlbOffset(Address)];
-
- if (Secure)
- {
- *Secure = secure;
- }
-
- /* Success. */
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- gcmkFOOTER();
- return status;
-}
-
-gceSTATUS
-gctaMMU_SetPage(
- IN gcTA_MMU Mmu,
- IN gctUINT32 PageAddress,
- IN gctUINT32 *PageEntry
- )
-{
- /* gctBOOL secure; */
-
- gcmkHEADER_ARG("Mmu=0x%x", Mmu);
-
- /* Verify the arguments. */
- gcmkVERIFY_ARGUMENT(PageEntry != gcvNULL);
- gcmkVERIFY_ARGUMENT(!(PageAddress & 0xFFF));
-
- _WritePageEntry(PageEntry, _SetPage(PageAddress));
-
- /* Success. */
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gctaMMU_FreePages(
- IN gcTA_MMU Mmu,
- IN gctUINT32 Address,
- IN gctUINT32 PageCount
- )
-{
- gceSTATUS status;
- gctUINT32 i;
- gctUINT32_PTR entry;
- gcmkHEADER_ARG("Mmu=0x%x", Mmu);
-
- /* Fill in page table. */
- for (i = 0; i < PageCount; i++)
- {
- gcmkONERROR(gctaMMU_GetPageEntry(Mmu, Address, &entry, gcvNULL));
-
-#if gcdUSE_MMU_EXCEPTION
- *entry = gcdMMU_STLB_EXCEPTION;
-#else
- *entry = 0;
-#endif
-
- Address += 4096;
- }
-
- /* Success. */
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-
-OnError:
- gcmkFOOTER();
- return status;
-}
-
-gceSTATUS
-gctaMMU_Enable(
- IN gcTA_MMU Mmu,
- IN gcTA TA
- )
-{
- gceSTATUS status;
- gctPHYS_ADDR_T address;
- gctPHYS_ADDR_T safeAddress;
-
- gcmkONERROR(gctaOS_GetPhysicalAddress(Mmu->os, Mmu->mtlbLogical, &address));
-
- gctaOS_GetPhysicalAddress(Mmu->os, Mmu->safePageLogical, &safeAddress);
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-
-void
-gctaMMU_DumpPagetableEntry(
- IN gcTA_MMU Mmu,
- IN gctUINT32 Address
- )
-{
- gctUINT32 entry;
- gctUINT32 mtlb = _MtlbOffset(Address);
- gctUINT32_PTR mtlbLogical = Mmu->mtlbLogical;
- gctUINT32_PTR stlbLogical;
- gcsMMU_STLB_PTR stlb;
- struct _gcsMMU_STLB **stlbs = (struct _gcsMMU_STLB **)Mmu->stlbs;
-
- gctUINT32 stlbOffset = (Address & gcdMMU_STLB_4K_MASK) >> gcdMMU_STLB_4K_SHIFT;
- gctUINT32 offsetInPage = Address & gcdMMU_OFFSET_4K_MASK;
-
- stlb = stlbs[mtlb];
-
- gcmkPRINT(" MTLB entry = %d\n", mtlb);
-
- gcmkPRINT(" STLB entry = %d\n", stlbOffset);
-
- gcmkPRINT(" Offset = 0x%08X (%d)\n", offsetInPage, offsetInPage);
-
-
- if (stlb == gcvNULL)
- {
- /* Dmp mtlb entry. */
- entry = mtlbLogical[mtlb];
-
- gcmkPRINT(" mtlb entry [%d] = %x", mtlb, entry);
- }
- else
- {
- stlbLogical = stlb->logical;
-
- gcmkPRINT(" stlb entry = 0x%08X", stlbLogical[stlbOffset]);
- }
-}
-
-
diff --git a/drivers/mxc/gpu-viv/hal/security_v1/os/emulator/gc_hal_ta_emulator.c b/drivers/mxc/gpu-viv/hal/security_v1/os/emulator/gc_hal_ta_emulator.c
deleted file mode 100644
index 444df7e52373..000000000000
--- a/drivers/mxc/gpu-viv/hal/security_v1/os/emulator/gc_hal_ta_emulator.c
+++ /dev/null
@@ -1,310 +0,0 @@
-/****************************************************************************
-*
-* The MIT License (MIT)
-*
-* Copyright (c) 2014 - 2016 Vivante Corporation
-*
-* Permission is hereby granted, free of charge, to any person obtaining a
-* copy of this software and associated documentation files (the "Software"),
-* to deal in the Software without restriction, including without limitation
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,
-* and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-* DEALINGS IN THE SOFTWARE.
-*
-*****************************************************************************
-*
-* The GPL License (GPL)
-*
-* Copyright (C) 2014 - 2016 Vivante Corporation
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software Foundation,
-* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*
-*****************************************************************************
-*
-* Note: This software is released under dual MIT and GPL licenses. A
-* recipient may use this file under the terms of either the MIT license or
-* GPL License. If you wish to use only one license not the other, you can
-* indicate your decision by deleting one of the above license notices in your
-* version of this file.
-*
-*****************************************************************************/
-
-
-#include "gc_hal_base.h"
-#include "gc_hal.h"
-#include "gc_hal_ta.h"
-#include "gc_hal_kernel_mutex.h"
-
-#define _GC_OBJ_ZONE gcvZONE_OS
-
-gcTA globalTA = gcvNULL;
-gctaOS globalTAos;
-
-struct _gctaOS {
- void *os;
-
- gctPOINTER dispatchMutex;
-};
-
-gceSTATUS HALDECL
-TAEmulator(
- void * Interface
- )
-{
- gckOS_AcquireMutex(globalTAos->os, globalTAos->dispatchMutex, gcvINFINITE);
-
- gcTA_Dispatch(globalTA, Interface);
-
- gckOS_ReleaseMutex(globalTAos->os, globalTAos->dispatchMutex);
- return gcvSTATUS_OK;
-}
-
-
-gceSTATUS
-gctaOS_ConstructOS(
- IN gckOS Os,
- OUT gctaOS *TAos
- )
-{
- gctaOS os;
- gctPOINTER pointer;
- gceSTATUS status;
-
- gcmkONERROR(gckOS_AllocateMemory(Os, gcmSIZEOF(struct _gctaOS), &pointer));
-
- os = (gctaOS)pointer;
- os->os = Os;
-
- gcmkONERROR(gckOS_CreateMutex(Os, &os->dispatchMutex));
-
- gckOS_SetGPUPower(Os, gcvCORE_MAJOR, gcvTRUE, gcvTRUE);
-
- *TAos = globalTAos = os;
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-
-gceSTATUS
-gctaOS_DestroyOS(
- IN gctaOS Os
- )
-{
- gckOS os = Os->os;
-
- gcmkVERIFY_OK(gckOS_DeleteMutex(os, Os->dispatchMutex));
- gcmkVERIFY_OK(gckOS_FreeMemory(os, Os));
-
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gctaOS_AllocateSecurityMemory(
- IN gctaOS Os,
- IN gctSIZE_T *Bytes,
- OUT gctPOINTER *Logical,
- OUT gctPOINTER *Physical
- )
-{
- gceSTATUS status;
-
- gcmkONERROR(gckOS_AllocateNonPagedMemory(Os->os, gcvFALSE, Bytes, (gctPHYS_ADDR *)Physical, Logical));
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-
-gceSTATUS
-gctaOS_FreeSecurityMemory(
- IN gctaOS Os,
- IN gctSIZE_T Bytes,
- IN gctPOINTER Logical,
- OUT gctPOINTER Physical
- )
-{
- gckOS_FreeNonPagedMemory(Os->os, Bytes, (gctPHYS_ADDR)Physical, Logical);
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gctaOS_AllocateNonSecurityMemory(
- IN gctaOS Os,
- IN gctSIZE_T *Bytes,
- OUT gctPOINTER *Logical,
- OUT gctPOINTER *Physical
- )
-{
- gceSTATUS status;
-
- gcmkONERROR(gckOS_AllocateNonPagedMemory(Os->os, gcvFALSE, Bytes, (gctPHYS_ADDR *)Physical, Logical));
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-
-gceSTATUS
-gctaOS_FreeNonSecurityMemory(
- IN gctaOS Os,
- IN gctSIZE_T Bytes,
- IN gctPOINTER Logical,
- OUT gctPOINTER Physical
- )
-{
- gckOS_FreeNonPagedMemory(Os->os, Bytes, (gctPHYS_ADDR)Physical, Logical);
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gctaOS_Allocate(
- IN gctUINT32 Bytes,
- OUT gctPOINTER *Pointer
- )
-{
- return gckOS_AllocateMemory(globalTAos->os, Bytes, Pointer);
-}
-
-gceSTATUS
-gctaOS_Free(
- IN gctPOINTER Pointer
- )
-{
- return gckOS_FreeMemory(globalTAos->os, Pointer);
-}
-
-gceSTATUS
-gctaOS_GetPhysicalAddress(
- IN gctaOS Os,
- IN gctPOINTER Logical,
- OUT gctPHYS_ADDR_T * Physical
- )
-{
- gctPHYS_ADDR_T physical;
- gceSTATUS status;
-
- gcmkONERROR(gckOS_GetPhysicalAddress(Os->os, Logical, &physical));
-
- *Physical = (gctUINT32)physical;
-
- return gcvSTATUS_OK;
-
-OnError:
- return status;
-}
-
-gceSTATUS
-gctaOS_WriteRegister(
- IN gctaOS Os,
- IN gctUINT32 Address,
- IN gctUINT32 Data
- )
-{
- return gckOS_WriteRegister(Os->os, Address, Data);
-}
-
-gceSTATUS
-gctaOS_ReadRegister(
- IN gctaOS Os,
- IN gctUINT32 Address,
- IN gctUINT32 *Data
- )
-{
- return gckOS_ReadRegister(Os->os, Address, Data);
-}
-
-gceSTATUS
-gctaOS_MemCopy(
- IN gctUINT8_PTR Dest,
- IN gctUINT8_PTR Src,
- IN gctUINT32 Bytes
- )
-{
- gckOS_MemCopy(Dest, Src, Bytes);
- return gcvSTATUS_OK;
-}
-
-gceSTATUS
-gctaOS_ZeroMemory(
- IN gctUINT8_PTR Dest,
- IN gctUINT32 Bytes
- )
-{
- gckOS_ZeroMemory(Dest, Bytes);
- return gcvSTATUS_OK;
-}
-
-void
-gctaOS_CacheFlush(
- IN gctUINT8_PTR Dest,
- IN gctUINT32 Bytes
- )
-{
-
-}
-
-void
-gctaOS_CacheClean(
- IN gctUINT8_PTR Dest,
- IN gctUINT32 Bytes
- )
-{
-
-}
-
-void
-gctaOS_CacheInvalidate(
- IN gctUINT8_PTR Dest,
- IN gctUINT32 Bytes
- )
-{
-
-}
-
-gceSTATUS
-gctaOS_IsPhysicalSecure(
- IN gctaOS Os,
- IN gctUINT32 Physical,
- OUT gctBOOL *Secure
- )
-{
- return gcvSTATUS_NOT_SUPPORTED;
-}
-
-gceSTATUS
-gctaOS_Delay(
- IN gctaOS Os,
- IN gctUINT32 Delay
- )
-{
- return gckOS_Delay(Os->os, Delay);
-}
-
-