diff options
author | Xianzhong <xianzhong.li@nxp.com> | 2016-08-30 05:37:28 -0500 |
---|---|---|
committer | Xianzhong <xianzhong.li@nxp.com> | 2016-08-30 05:50:15 -0500 |
commit | 0f0dac4798e905f75e8954d4b1b463c20e339107 (patch) | |
tree | 87a4ad760a359416766e509b61894c5b7a22a2e1 /drivers/mxc | |
parent | e21f697b3bcfc0a6b6d92c9099970c6276f48de1 (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')
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, - ¤tAxiConfig - )); - - 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, - ®PMC)); + if (regPMC == 0) + { + gcmkONERROR( + gckOS_ReadRegisterEx(Hardware->os, + Hardware->core, + Hardware->powerBaseAddress + + 0x00104, + ®PMC)); + } + + /* 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( ®PMC)); } - 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(¤t->mm->mmap_sem); - - userLogical = (gctSTRING)do_mmap_pgoff(gcvNULL, - 0L, - mdl->numPages * PAGE_SIZE, - PROT_READ | PROT_WRITE, - MAP_SHARED, - 0); - - up_write(¤t->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(¤t->mm->mmap_sem); - - vma = find_vma(current->mm, (unsigned long)userLogical); - - if (vma == gcvNULL) - { - up_write(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->mm->mmap_sem); + + mdlMap->vma = find_vma(current->mm, (unsigned long)mdlMap->vmaAddr); - (void) mem; + up_write(¤t->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(¤t->mm->mmap_sem); - - result = get_user_pages(current, - current->mm, - memory & PAGE_MASK, - pageCount, - 1, - 0, - pages, - gcvNULL - ); - - up_read(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->mm->mmap_sem); + + mdlMap->vma = find_vma(current->mm, (unsigned long)mdlMap->vmaAddr); + + if (mdlMap->vma == gcvNULL) + { + up_write(¤t->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(¤t->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(¤t->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(¤t->mm->mmap_sem); + mdlMap->vmaAddr = gcvNULL; gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY); return gcvSTATUS_OUT_OF_MEMORY; } - - up_write(¤t->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(¤t->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(¤t->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(¤t->mm->mmap_sem); + + mdlMap->vmaAddr = (char *)do_mmap_pgoff(gcvNULL, + 0L, + mdl->numPages * PAGE_SIZE, + PROT_READ | PROT_WRITE, + MAP_SHARED, + 0); + + up_write(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->mm->mmap_sem); + + mdlMap->vmaAddr = (gctSTRING) do_mmap_pgoff(gcvNULL, + 0L, + mdl->numPages * PAGE_SIZE, + PROT_READ | PROT_WRITE, + MAP_SHARED, + 0); + + up_write(¤t->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(¤t->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(¤t->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(¤t->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(¤t->mm->mmap_sem); + + gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES); + } +#endif /* NO_DMA_COHERENT */ + + up_write(¤t->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(¤t->mm->mmap_sem); + + result = get_user_pages(current, + current->mm, + memory & PAGE_MASK, + pageCount, + 1, + 0, + pages, + gcvNULL + ); + + up_read(¤t->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); -} - - |