From 9937f476411437bdf1440c4025bf315f7fa62f1c Mon Sep 17 00:00:00 2001 From: Xianzhong Date: Wed, 2 Aug 2017 09:51:08 +0800 Subject: [PATCH] MGS-3150 gpu: Integrate 6.2.3 official driver release Upgrade GPU driver to enable OpenVX 1.1 for i.MX8QM, Integrated more bug-fixing for critical gpu issues. Signed-off-by: Xianzhong --- drivers/mxc/gpu-viv/Kbuild | 18 +- .../hal/kernel/arch/gc_hal_kernel_context.c | 3 - .../hal/kernel/arch/gc_hal_kernel_context.h | 2 - .../hal/kernel/arch/gc_hal_kernel_hardware.c | 1147 +- .../hal/kernel/arch/gc_hal_kernel_hardware.h | 2 +- .../hal/kernel/arch/gc_hal_kernel_recorder.c | 6 +- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel.c | 78 +- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel.h | 12 +- .../hal/kernel/gc_hal_kernel_async_command.c | 35 +- .../hal/kernel/gc_hal_kernel_command.c | 59 +- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c | 3 +- .../gpu-viv/hal/kernel/gc_hal_kernel_debug.c | 113 +- .../gpu-viv/hal/kernel/gc_hal_kernel_event.c | 123 +- .../gpu-viv/hal/kernel/gc_hal_kernel_mmu.c | 670 +- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c | 73 +- .../hal/kernel/gc_hal_kernel_video_memory.c | 24 +- .../hal/kernel/inc/gc_feature_database.h | 11719 +++++++++++----- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h | 37 +- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h | 130 +- .../gpu-viv/hal/kernel/inc/gc_hal_driver.h | 74 +- .../gpu-viv/hal/kernel/inc/gc_hal_engine.h | 100 +- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h | 68 +- .../hal/kernel/inc/gc_hal_kernel_buffer.h | 30 +- .../gpu-viv/hal/kernel/inc/gc_hal_options.h | 60 +- .../gpu-viv/hal/kernel/inc/gc_hal_profiler.h | 96 +- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h | 18 +- .../gpu-viv/hal/kernel/inc/gc_hal_version.h | 6 +- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h | 3 +- .../default/gc_hal_kernel_allocator_array.h | 19 +- .../default/gc_hal_kernel_allocator_dma.c | 82 +- .../default/gc_hal_kernel_allocator_dmabuf.c | 32 +- .../default/gc_hal_kernel_allocator_gfp.c | 929 ++ .../gc_hal_kernel_allocator_reserved_mem.c | 475 + .../gc_hal_kernel_allocator_user_memory.c | 698 +- .../freescale/gc_hal_kernel_allocator_array.h | 20 +- .../freescale/gc_hal_kernel_allocator_cma.c | 82 +- .../os/linux/kernel/gc_hal_kernel_allocator.c | 984 +- .../os/linux/kernel/gc_hal_kernel_allocator.h | 97 +- .../hal/os/linux/kernel/gc_hal_kernel_debug.h | 27 +- .../os/linux/kernel/gc_hal_kernel_debugfs.c | 81 +- .../os/linux/kernel/gc_hal_kernel_device.c | 159 +- .../os/linux/kernel/gc_hal_kernel_device.h | 24 +- .../os/linux/kernel/gc_hal_kernel_driver.c | 465 +- .../hal/os/linux/kernel/gc_hal_kernel_linux.c | 21 +- .../hal/os/linux/kernel/gc_hal_kernel_linux.h | 30 +- .../hal/os/linux/kernel/gc_hal_kernel_os.c | 543 +- .../os/linux/kernel/gc_hal_kernel_platform.h | 145 +- .../hal/os/linux/kernel/gc_hal_kernel_sync.c | 16 +- .../default/gc_hal_kernel_platform_default.c | 91 +- .../freescale/gc_hal_kernel_platform_imx6.c | 1355 +- .../gc_hal_kernel_platform_imx6.config | 2 +- .../hal/security_v1/gc_hal_ta_hardware.c | 43 +- 52 files changed, 13223 insertions(+), 7906 deletions(-) create mode 100644 drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_gfp.c create mode 100644 drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_reserved_mem.c diff --git a/drivers/mxc/gpu-viv/Kbuild b/drivers/mxc/gpu-viv/Kbuild index 06e0b254c2d8..8ba72e790eb2 100644 --- a/drivers/mxc/gpu-viv/Kbuild +++ b/drivers/mxc/gpu-viv/Kbuild @@ -89,6 +89,8 @@ OBJS := $(OS_KERNEL_DIR)/gc_hal_kernel_device.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)/allocator/default/gc_hal_kernel_allocator_gfp.o \ + $(OS_KERNEL_DIR)/allocator/default/gc_hal_kernel_allocator_reserved_mem.o \ $(OS_KERNEL_DIR)/gc_hal_kernel_driver.o \ $(OS_KERNEL_DIR)/platform/$(soc_vendor)/gc_hal_kernel_platform_$(soc_board).o @@ -134,9 +136,9 @@ EXTRA_CFLAGS += -Idrivers/staging/android OBJS += $(OS_KERNEL_DIR)/gc_hal_kernel_sync.o else - ifneq ($(CONFIG_SYNC_FILE),) - OBJS += $(OS_KERNEL_DIR)/gc_hal_kernel_sync.o - endif + ifneq ($(CONFIG_SYNC_FILE),) + OBJS += $(OS_KERNEL_DIR)/gc_hal_kernel_sync.o + endif endif ifeq ($(SECURITY), 1) @@ -215,6 +217,12 @@ else EXTRA_CFLAGS += -DUSE_NEW_LINUX_SIGNAL=0 endif +ifeq ($(USE_LINUX_PCIE), 1) +EXTRA_CFLAGS += -DUSE_LINUX_PCIE=1 +else +EXTRA_CFLAGS += -DUSE_LINUX_PCIE=0 +endif + ifeq ($(FORCE_ALL_VIDEO_MEMORY_CACHED), 1) EXTRA_CFLAGS += -DgcdPAGED_MEMORY_CACHEABLE=1 else @@ -271,7 +279,7 @@ ifeq ($(USE_BANK_ALIGNMENT), 1) endif endif -ifeq ($(gcdFPGA_BUILD), 1) +ifeq ($(FPGA_BUILD), 1) EXTRA_CFLAGS += -DgcdFPGA_BUILD=1 else EXTRA_CFLAGS += -DgcdFPGA_BUILD=0 @@ -299,7 +307,7 @@ endif EXTRA_CFLAGS += -DHOST=\"$(HOST)\" -EXTRA_CFLAGS += -DgcdENABLE_TRUST_APPLICATION=1 +EXTRA_CFLAGS += -DgcdENABLE_TRUST_APPLICATION=0 obj-$(CONFIG_MXC_GPU_VIV) = $(MODULE_NAME).o 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 2e5c24488236..69574f61298a 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 @@ -1910,9 +1910,6 @@ if (halti5){ vsConstBase = 0xD000; { 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); 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 cc5817200137..2614ee92d9ea 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 @@ -178,11 +178,9 @@ struct _gckCONTEXT gctBOOL_PTR hint; #endif -#if VIVANTE_PROFILER_CONTEXT gcsPROFILER_COUNTERS latestProfiler; gcsPROFILER_COUNTERS histroyProfiler; gcsPROFILER_COUNTERS preProfiler; -#endif gcsPROFILER_NEW_COUNTERS_PART1 latestNewProfiler_part1; gcsPROFILER_NEW_COUNTERS_PART1 histroyNewProfiler_part1; gcsPROFILER_NEW_COUNTERS_PART1 preNewProfiler_part1; 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 c2259a5cf5bc..31c6259c0be4 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 @@ -55,9 +55,7 @@ #include "gc_hal.h" #include "gc_hal_kernel.h" -#if VIVANTE_PROFILER_CONTEXT #include "gc_hal_kernel_context.h" -#endif #include "gc_feature_database.h" @@ -144,19 +142,16 @@ _GetEcoID( &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 @@ -170,6 +165,7 @@ _IdentifyHardwareByDatabase( gceSTATUS status; gctUINT32 chipIdentity; gctUINT32 debugControl0; + gctUINT32 chipInfo; gcsFEATURE_DATABASE *database; gcmkHEADER_ARG("Os=0x%x", Os); @@ -329,6 +325,16 @@ _IdentifyHardwareByDatabase( Identity->chipFlags |= gcvCHIP_FLAG_MSAA_COHERENCEY_ECO_FIX; } + gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x000A4, &chipInfo)); + + if (((((gctUINT32) (chipInfo)) >> (0 ? 21:21) & ((gctUINT32) ((((1 ? + 21:21) - (0 ? 21:21) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 21:21) - (0 ? + 21:21) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 21:21) - (0 ? 21:21) + 1)))))))) + { + Identity->chipFlags |= gcvCHIP_AXI_BUS128_BITS; + } + /* Success. */ gcmkFOOTER(); return gcvSTATUS_OK; @@ -1106,7 +1112,7 @@ _QueryFeatureDatabase( available = database->REG_MMU; break; - case gcvFEATURE_FENCE: + case gcvFEATURE_FENCE_64BIT: available = database->REG_Halti5; break; @@ -1245,7 +1251,7 @@ _QueryFeatureDatabase( break; case gcvFEATURE_SECURITY: - available = database->SECURITY; + available = gcvFALSE; break; case gcvFEATURE_TX_DESCRIPTOR: @@ -1328,6 +1334,10 @@ _QueryFeatureDatabase( available = database->SECURITY_AHB; break; + case gcvFEATURE_ASYNC_BLIT: + available = database->ASYNC_BLT; + break; + default: gcmkFATAL("Invalid feature has been requested."); available = gcvFALSE; @@ -1530,6 +1540,7 @@ gckHARDWARE_Construct( gckHARDWARE hardware = gcvNULL; gctUINT16 data = 0xff00; gctPOINTER pointer = gcvNULL; + gctUINT i; gcmkHEADER_ARG("Os=0x%x", Os); @@ -1594,17 +1605,12 @@ gckHARDWARE_Construct( ? 0x0100 : 0x0000; - /* VIV: Don't do sftware reset here for 0x2000, 0xfff5450 to workaround #12789. */ - if(!(_IsHardwareMatch(hardware, gcv2000, 0xffff5450))) - { - /* _ResetGPU need powerBaseAddress. */ - status = _ResetGPU(hardware, Os, Core); - if (status != gcvSTATUS_OK) - { - 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 @@ -1617,7 +1623,6 @@ gckHARDWARE_Construct( 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, @@ -1636,13 +1641,21 @@ gckHARDWARE_Construct( gcmkONERROR(gckHARDWARE_SetFastClear(hardware, -1, -1)); #if !gcdENABLE_128B_MERGE - if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_MULTI_SOURCE_BLT)) { /* 128B merge is turned on by default. Disable it. */ gcmkONERROR(gckOS_WriteRegisterEx(Os, Core, 0x00558, 0)); } +#endif +#if (gcdFPGA_BUILD && 1) + if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_TPCV11_COMPRESSION)) + { + gctUINT32 data; + gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x00558, &data)); + data |= 0x1 << 27; + gcmkONERROR(gckOS_WriteRegisterEx(Os, Core, 0x00558, data)); + } #endif { @@ -1686,7 +1699,11 @@ gckHARDWARE_Construct( &hardware->powerOffTimer)); #endif - gcmkONERROR(gckOS_AtomConstruct(Os, &hardware->pageTableDirty)); + for (i = 0; i < gcvENGINE_GPU_ENGINE_COUNT; i++) + { + gcmkONERROR(gckOS_AtomConstruct(Os, &hardware->pageTableDirty[i])); + } + gcmkONERROR(gckOS_AtomConstruct(Os, &hardware->pendingEvent)); status = gckOS_QueryOption(Os, "powerManagement", (gctUINT32*)&hardware->powerManagement); @@ -1801,9 +1818,12 @@ OnError: } #endif - if (hardware->pageTableDirty != gcvNULL) + for (i = 0; i < gcvENGINE_GPU_ENGINE_COUNT; i++) { - gcmkVERIFY_OK(gckOS_AtomDestroy(Os, hardware->pageTableDirty)); + if (hardware->pageTableDirty[i] != gcvNULL) + { + gcmkVERIFY_OK(gckOS_AtomDestroy(Os, hardware->pageTableDirty[i])); + } } if (hardware->pendingEvent != gcvNULL) @@ -1850,6 +1870,7 @@ gckHARDWARE_Destroy( ) { gceSTATUS status; + gctUINT i; gcmkHEADER_ARG("Hardware=0x%x", Hardware); @@ -1868,7 +1889,10 @@ gckHARDWARE_Destroy( gcmkVERIFY_OK(gckOS_DestroyTimer(Hardware->os, Hardware->powerOffTimer)); #endif - gcmkVERIFY_OK(gckOS_AtomDestroy(Hardware->os, Hardware->pageTableDirty)); + for (i = 0; i < gcvENGINE_GPU_ENGINE_COUNT; i++) + { + gcmkVERIFY_OK(gckOS_AtomDestroy(Hardware->os, Hardware->pageTableDirty[i])); + } gcmkVERIFY_OK(gckOS_AtomDestroy(Hardware->os, Hardware->pendingEvent)); @@ -2393,7 +2417,6 @@ gckHARDWARE_InitializeHardware( 0x00002200)); } - if ((Hardware->identity.chipRevision > 0x5420) && gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_3D)) { @@ -2416,7 +2439,6 @@ gckHARDWARE_InitializeHardware( } - /* VIV: #15495. */ if (_IsHardwareMatch(Hardware, gcv2500, 0x5422)) { gcmkONERROR(gckOS_ReadRegisterEx( @@ -4275,7 +4297,7 @@ gckHARDWARE_Interrupt( data); } - if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_BLT_ENGINE)) + if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_ASYNC_BLIT)) { /* Read BLT interrupt. */ gcmkONERROR(gckOS_ReadRegisterEx( @@ -4306,7 +4328,7 @@ gckHARDWARE_Interrupt( /* Handle events. */ status = gckEVENT_Notify(eventObj, 0); - if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_BLT_ENGINE)) + if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_ASYNC_BLIT)) { status = gckEVENT_Notify(Hardware->kernel->asyncEvent, 0); } @@ -4636,118 +4658,210 @@ gckHARDWARE_SetMMU( } else if (Hardware->enableMMU == gcvTRUE && Hardware->secureMode != gcvSECURE_IN_TA) { - /* Prepared command sequence contains an END, - ** so update lastEnd and store executeCount to END command. - */ - gcsHARDWARE_FUNCTION *function = &Hardware->functions[gcvHARDWARE_FUNCTION_MMU]; - gctUINT32_PTR endLogical = (gctUINT32_PTR)function->endLogical; - - Hardware->lastEnd = function->endAddress; - - *(endLogical + 1) = Hardware->executeCount + 1; + gctBOOL hwMmuDisabled = gcvTRUE; + /* Force Disable MMU to guarantee setup command be read from physical addr */ if (Hardware->secureMode == gcvSECURE_IN_NORMAL) { - /* Set up base address of page table array. */ - gcmkONERROR(gckOS_WriteRegisterEx( + gctUINT32 regMmuCtrl = 0; + gcmkONERROR(gckOS_ReadRegisterEx( Hardware->os, Hardware->core, - 0x0038C, - (gctUINT32)(Hardware->pagetableArray.address & 0xFFFFFFFF) + 0x00388, + ®MmuCtrl )); - gcmkONERROR(gckOS_WriteRegisterEx( - Hardware->os, - Hardware->core, - 0x00390, - (gctUINT32)((Hardware->pagetableArray.address >> 32) & 0xFFFFFFFF) - )); + hwMmuDisabled = ((((((gctUINT32) (regMmuCtrl)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ) == 0x1) + ? gcvFALSE + : gcvTRUE; + } + else + { + gctUINT32 regMmuCtrl = 0; - gcmkONERROR(gckOS_WriteRegisterEx( + gcmkONERROR(gckOS_ReadRegisterEx( Hardware->os, Hardware->core, - 0x00394, - 1 + 0x0018C, + ®MmuCtrl )); + + hwMmuDisabled = ((((((gctUINT32) (regMmuCtrl)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ) == 0x1) + ? gcvFALSE + : gcvTRUE; } - /* Execute prepared command sequence. */ - gcmkONERROR(gckHARDWARE_Execute( - Hardware, - function->address, - function->bytes - )); + if (hwMmuDisabled) + { + /* Prepared command sequence contains an END, + ** so update lastEnd and store executeCount to END command. + */ + gcsHARDWARE_FUNCTION *function = &Hardware->functions[gcvHARDWARE_FUNCTION_MMU]; + gctUINT32_PTR endLogical = (gctUINT32_PTR)function->endLogical; + + Hardware->lastEnd = function->endAddress; + + *(endLogical + 1) = Hardware->executeCount + 1; + + if (Hardware->secureMode == gcvSECURE_IN_NORMAL) + { + gctUINT32_PTR safeLogical = Hardware->kernel->mmu->safePageLogical; + gctUINT32 extSafeAddress; + /* 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 + )); + + gcmkONERROR( + gckOS_GetPhysicalAddress(Hardware->os, safeLogical, &physical)); + + address = (gctUINT32)(physical & 0xFFFFFFFF); + extSafeAddress = (gctUINT32)(physical >> 32); + + if (address & 0x3F) + { + gcmkONERROR(gcvSTATUS_NOT_ALIGNED); + } + + /* more than 40bit physical address */ + if (extSafeAddress & 0xFFFFFF00) + { + gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); + } + + gckOS_WriteRegisterEx( + Hardware->os, + Hardware->core, + 0x0039C, + address + ); + + gckOS_WriteRegisterEx( + Hardware->os, + Hardware->core, + 0x00398, + address + ); + + gckOS_WriteRegisterEx( + Hardware->os, + Hardware->core, + 0x003A0, + (((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? + 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) ((gctUINT32)extSafeAddress) & ((gctUINT32) ((((1 ? + 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? + 23:16) + 1))))))) << (0 ? 23:16))) &((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:31) - (0 ? 31:31) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:31) - (0 ? + 31:31) + 1))))))) << (0 ? 31:31))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? + 31:31) - (0 ? 31:31) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:31) - (0 ? + 31:31) + 1))))))) << (0 ? 31:31)))) + | (((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? + 7:0))) | (((gctUINT32) ((gctUINT32) ((gctUINT32)extSafeAddress) & ((gctUINT32) ((((1 ? + 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? + 7:0))) &((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:15) - (0 ? + 15:15) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? + 15:15))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15)))) + ); + } + + /* Execute prepared command sequence. */ + gcmkONERROR(gckHARDWARE_Execute( + Hardware, + function->address, + function->bytes + )); #if gcdLINK_QUEUE_SIZE - { - gcuQUEUEDATA data; + { + gcuQUEUEDATA data; - gcmkVERIFY_OK(gckOS_GetProcessID(&data.linkData.pid)); + 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; + 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); - } + gckQUEUE_Enqueue(&Hardware->linkQueue, &data); + } #endif - /* Wait until MMU configure finishes. */ - do - { - gckOS_Delay(Hardware->os, delay); + /* Wait until MMU configure finishes. */ + do + { + gckOS_Delay(Hardware->os, delay); - gcmkONERROR(gckOS_ReadRegisterEx( - Hardware->os, - Hardware->core, - 0x00004, - &idle)); + gcmkONERROR(gckOS_ReadRegisterEx( + Hardware->os, + Hardware->core, + 0x00004, + &idle)); - timer += delay; - delay *= 2; + timer += delay; + delay *= 2; #if gcdGPU_TIMEOUT - if (timer >= Hardware->kernel->timeOut) - { - gckHARDWARE_DumpGPUState(Hardware); - gckCOMMAND_DumpExecutingBuffer(Hardware->kernel->command); - - /* Even if hardware is not reset correctly, let software - ** continue to avoid software stuck. Software will timeout again - ** and try to recover GPU in next timeout. - */ - gcmkONERROR(gcvSTATUS_DEVICE); - } + if (timer >= Hardware->kernel->timeOut) + { + gckHARDWARE_DumpGPUState(Hardware); + gckCOMMAND_DumpExecutingBuffer(Hardware->kernel->command); + + /* Even if hardware is not reset correctly, let software + ** continue to avoid software stuck. Software will timeout again + ** and try to recover GPU in next timeout. + */ + gcmkONERROR(gcvSTATUS_DEVICE); + } #endif - } - while (!(((((gctUINT32) (idle)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) )); + } + while (!(((((gctUINT32) (idle)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((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 ? + /* 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) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) - )); - } - else - { - gcmkONERROR(gckOS_WriteRegisterEx( - Hardware->os, - Hardware->core, - 0x0018C, - ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + )); + } + else + { + gcmkONERROR(gckOS_WriteRegisterEx( + Hardware->os, + Hardware->core, + 0x0018C, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) ((gctUINT32) (gcvTRUE) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) - )); + )); + } } } @@ -4761,6 +4875,172 @@ OnError: return status; } +gceSTATUS +gckHARDWARE_FlushAsyncMMU( + IN gckHARDWARE Hardware, + IN gctPOINTER Logical, + IN OUT gctUINT32 * Bytes + ) +{ + gctUINT32 semaphore, stall; + gctUINT32_PTR buffer; + + gcmkHEADER_ARG("Hardware=0x%x Logical=0x%x *Bytes=%lu", + Hardware, Logical, gcmOPT_VALUE(Bytes)); + + /* Verify the arguments. */ + gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE); + gcmkVERIFY_ARGUMENT((Logical == gcvNULL) || (Bytes != gcvNULL)); + + if (Logical != gcvNULL) + { + buffer = (gctUINT32_PTR) Logical; + + *buffer++ = + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? + 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? + 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x502E) & ((gctUINT32) ((((1 ? 15:0) - (0 ? + 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? + 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? + 25:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? + 25:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? + 25:16))); + + *buffer++ = + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? + 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))); + + *buffer++ = + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? + 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? + 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ? + 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? + 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? + 25:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? + 25:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? + 25:16))); + + *buffer++ = + (((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:4) - (0 ? 4:4) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? + 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) & ((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 7:7) - (0 ? 7:7) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? + 7:7))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7)))); + + *buffer++ = + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? + 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? 25:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? 25:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? 25:16))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E02) & ((gctUINT32) ((((1 ? 15:0) - (0 ? + 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? + 15:0))); + + semaphore = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:0) - (0 ? 4:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? + 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:8) - (0 ? 12:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? + 12:8))) | (((gctUINT32) (0x10 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); + + if (Hardware->stallFEPrefetch) + { + semaphore |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 29:28) - (0 ? 29:28) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 29:28) - (0 ? + 29:28) + 1))))))) << (0 ? 29:28))) | (((gctUINT32) (0x3 & ((gctUINT32) ((((1 ? + 29:28) - (0 ? 29:28) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 29:28) - (0 ? + 29:28) + 1))))))) << (0 ? 29:28))); + } + + *buffer++ = + semaphore; + + *buffer++ = + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? + 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); + + stall = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:0) - (0 ? 4:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? + 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 4:0) - (0 ? 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:8) - (0 ? 12:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? + 12:8))) | (((gctUINT32) (0x10 & ((gctUINT32) ((((1 ? 12:8) - (0 ? 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 29:28) - (0 ? + 29:28) + 1))))))) << (0 ? 29:28))) | (((gctUINT32) (0x3 & ((gctUINT32) ((((1 ? + 29:28) - (0 ? 29:28) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 29:28) - (0 ? + 29:28) + 1))))))) << (0 ? 29:28))); + } + + *buffer++ = + stall; + + *buffer++ = + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? + 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? + 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x502E) & ((gctUINT32) ((((1 ? 15:0) - (0 ? + 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? + 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? + 25:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? + 25:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? + 25:16))); + + *buffer++ = + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? + 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))); + } + + if (Bytes != gcvNULL) + { + /* Return number of bytes required by the PIPESELECT command. */ + *Bytes = 40; + } + + /* Success. */ + gcmkFOOTER_ARG("*Bytes=%lu", gcmOPT_VALUE(Bytes)); + return gcvSTATUS_OK; +} + /******************************************************************************* ** ** gckHARDWARE_FlushMMU @@ -4789,7 +5069,6 @@ gckHARDWARE_FlushMMU( gctUINT32 flushSize; gctUINT32 count, offset; gctUINT32 address; - gctBOOL bltEngine; gctUINT32 semaphore, stall; gcmkHEADER_ARG("Hardware=0x%x", Hardware); @@ -4852,14 +5131,16 @@ gckHARDWARE_FlushMMU( } else { + gctUINT32 prefetchCount = 4; + gctBOOL bltEngine = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_BLT_ENGINE); + flushSize = 10 * 4; offset = 2; - bltEngine = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_BLT_ENGINE); - if (bltEngine) { flushSize += 4 * 4; + prefetchCount += 2; } gcmkONERROR(gckCOMMAND_Reserve( @@ -4881,7 +5162,7 @@ gckHARDWARE_FlushMMU( 31:27) + 1))))))) << (0 ? 31:27))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) ((bltEngine ? 6 : 4)) & ((gctUINT32) ((((1 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (prefetchCount) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))); @@ -5101,11 +5382,11 @@ gckHARDWARE_SetMMUStates( { gceSTATUS status; gctUINT32 config, address; - gctUINT32 extMtlb, extSafeAddrss, configEx = 0; + gctUINT32 extMtlb, extSafeAddress, configEx = 0; gctPHYS_ADDR_T physical; gctUINT32_PTR buffer; gctBOOL ace; - gctUINT32 reserveBytes = 16 + 4 * 4; + gctUINT32 reserveBytes = 0; gcsMMU_TABLE_ARRAY_ENTRY * entry; gctBOOL config2D; @@ -5120,15 +5401,29 @@ gckHARDWARE_SetMMUStates( ace = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_ACE); - if (ace) + switch (Hardware->secureMode) { - reserveBytes += 8; - } - - config2D = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_3D) - && gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_2D); - - if (config2D) + case gcvSECURE_IN_NORMAL: + reserveBytes = 8 + 4 * 4; + break; + case gcvSECURE_NONE: + reserveBytes = 16 + 4 * 4; + if (ace) + { + reserveBytes += 8; + } + break; + case gcvSECURE_IN_TA: + default: + gcmkASSERT(gcvFALSE); + gcmkPRINT("%s(%d): secureMode is wrong", __FUNCTION__, __LINE__); + break; + } + + config2D = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_3D) + && gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_2D); + + if (config2D) { reserveBytes += /* Pipe Select. */ @@ -5151,22 +5446,34 @@ gckHARDWARE_SetMMUStates( config = (gctUINT32)(physical & 0xFFFFFFFF); extMtlb = (gctUINT32)(physical >> 32); + /* more than 40bit physical address */ + if (extMtlb & 0xFFFFFF00) + { + gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); + } + gcmkONERROR( gckOS_GetPhysicalAddress(Hardware->os, SafeAddress, &physical)); address = (gctUINT32)(physical & 0xFFFFFFFF); - extSafeAddrss = (gctUINT32)(physical >> 32); + extSafeAddress = (gctUINT32)(physical >> 32); if (address & 0x3F) { gcmkONERROR(gcvSTATUS_NOT_ALIGNED); } + /* more than 40bit physical address */ + if (extSafeAddress & 0xFFFFFF00) + { + gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); + } + if (ace) { configEx = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (extSafeAddrss) & ((gctUINT32) ((((1 ? + 7:0))) | (((gctUINT32) ((gctUINT32) (extSafeAddress) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? @@ -5215,8 +5522,16 @@ gckHARDWARE_SetMMUStates( if (Hardware->secureMode == gcvSECURE_IN_NORMAL) { /* Setup page table array entry. */ - entry->low = config; - entry->high = (gctUINT32)(physical >> 32); + if (Hardware->bigEndian) + { + entry->low = gcmBSWAP32(config); + entry->high = gcmBSWAP32(extMtlb); + } + else + { + entry->low = config; + entry->high = extMtlb; + } /* Setup command buffer to load index 0 of page table array. */ *buffer++ @@ -5248,6 +5563,8 @@ gckHARDWARE_SetMMUStates( } else { + gcmkASSERT(Hardware->secureMode == gcvSECURE_NONE); + *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:27) - (0 ? @@ -5266,48 +5583,48 @@ gckHARDWARE_SetMMUStates( 25:16) + 1))))))) << (0 ? 25:16))); *buffer++ = config; - } - *buffer++ - = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + *buffer++ + = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - *buffer++ = address; + *buffer++ = address; - if (ace) - { - *buffer++ - = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + if (ace) + { + *buffer++ + = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0068) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - *buffer++ - = configEx; + *buffer++ + = configEx; + } } do{*buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? @@ -7528,14 +7845,22 @@ gckHARDWARE_SetPowerManagementState( } } - gcmkONERROR(gckCOMMAND_Start(command)); + if(_IsHardwareMatch(Hardware, gcv400, 0x4645)) + { + gcmkONERROR(gckCOMMAND_Start(command)); - gcmkONERROR(_FlushCache(Hardware, command)); + gcmkONERROR(_FlushCache(Hardware, command)); - gckOS_Delay(gcvNULL, 1); + gckOS_Delay(gcvNULL, 1); - /* Stop the command parser. */ - gcmkONERROR(gckCOMMAND_Stop(command)); + /* Stop the command parser. */ + gcmkONERROR(gckCOMMAND_Stop(command)); + } + else + { + gckHARDWARE_ExecuteFunctions(Hardware, gcvHARDWARE_FUNCTION_FLUSH); + gckOS_Delay(gcvNULL, 1); + } flag |= gcvPOWER_FLAG_CLOCK_OFF; } @@ -8383,7 +8708,6 @@ OnError: #if VIVANTE_PROFILER -#if !VIVANTE_PROFILER_ALL_COUNTER static gctUINT32 CalcDelta( IN gctUINT32 new, @@ -8399,7 +8723,7 @@ CalcDelta( return (gctUINT32)((gctUINT64)new + 0x100000000ll - old); } } -#endif + #if USE_SW_RESET #define gcmkRESET_PROFILE_DATA(counterName, preCounters) \ @@ -9317,8 +9641,6 @@ OnError: } #endif - -#if VIVANTE_PROFILER_CONTEXT #define gcmkUPDATE_PROFILE_DATA(data) \ profilerHistroy->data += profiler->data @@ -9354,68 +9676,6 @@ 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) { @@ -9501,7 +9761,6 @@ gckHARDWARE_UpdateContextProfile( } gcmkUPDATE_PROFILE_DATA(gpuIdleCyclesCounter); -#if !VIVANTE_PROFILER_ALL_COUNTER { gctUINT clock; gctUINT32 colorKilled = 0, colorDrawn = 0, depthKilled = 0, depthDrawn = 0; @@ -10343,314 +10602,7 @@ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((g )); } -#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) ? ~0U : (~(~0U << ((1 ? 23:20) - (0 ? - 23:20) + 1))))))) << (0 ? 23:20))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? - 23:20) - (0 ? 23:20) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 7:0) - (0 ? - 7:0) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (resetValue) & ((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? - 7:0) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 7:0) - (0 ? - 7:0) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (resetValue) & ((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? - 7:0) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (resetValue) & ((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 15:8) - (0 ? - 15:8) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (resetValue) & ((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? - 15:8) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (resetValue) & ((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (resetValue) & ((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (resetValue) & ((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 7:0) - (0 ? - 7:0) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (resetValue) & ((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? - 7:0) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 15:8) - (0 ? - 15:8) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (resetValue) & ((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~0U : (~(~0U << ((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) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? - 15:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) -)); - - } -#endif /* Success. */ gcmkFOOTER_NO(); @@ -10661,7 +10613,7 @@ OnError: gcmkFOOTER(); return status; } -#endif + gceSTATUS gckHARDWARE_QueryContextNewProfile( @@ -10682,18 +10634,10 @@ gckHARDWARE_QueryContextNewProfile( /* Verify the arguments. */ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE); - /* - * User-space can attach to whatever context it desires, leading first to a - * memory NULL pointer dereference when copying the counters, and later - * invocation of this function will dead-lock trying to acquire a lock that - * was already acquired. The context is converted to a pointer so even if - * user-space supplies another context would be transformed to a NULL value. - */ - if ((Context == NULL) || (&Context->histroyNewProfiler_part1 == NULL) || - (&Context->histroyNewProfiler_part2 == NULL)) { - gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + if (!Context) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); } - /* Acquire the context sequnence mutex. */ gcmkONERROR(gckOS_AcquireMutex( command->os, command->mutexContextSeq, gcvINFINITE @@ -10766,6 +10710,7 @@ gckHARDWARE_UpdateContextNewProfile( gctUINT32 mc_axi_max_min_latency; gctUINT32 temp; gckCOMMAND command = Hardware->kernel->command; + gctBOOL mutexAcquired = gcvFALSE; gcmkHEADER_ARG("Hardware=0x%x Context=0x%x", Hardware, Context); @@ -10777,6 +10722,7 @@ gckHARDWARE_UpdateContextNewProfile( gcmkONERROR(gckOS_AcquireMutex( command->os, command->mutexContextSeq, gcvINFINITE )); + mutexAcquired = gcvTRUE; chipModel = Hardware->identity.chipModel; chipRevision = Hardware->identity.chipRevision; @@ -11947,10 +11893,12 @@ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((g return gcvSTATUS_OK; OnError: - - gckOS_ReleaseMutex( - command->os, command->mutexContextSeq - ); + if (mutexAcquired) + { + gckOS_ReleaseMutex( + command->os, command->mutexContextSeq + ); + } /* Return the status. */ gcmkFOOTER(); @@ -12298,110 +12246,6 @@ gckHARDWARE_SetIsrManager( return status; } -/******************************************************************************* -** -** gckHARDWARE_Compose -** -** Start a composition. -** -** INPUT: -** -** gckHARDWARE Hardware -** Pointer to the gckHARDWARE object. -** -** OUTPUT: -** -** Nothing. -*/ -gceSTATUS -gckHARDWARE_Compose( - IN gckHARDWARE Hardware, - IN gctUINT32 ProcessID, - IN gctPHYS_ADDR Physical, - IN gctPOINTER Logical, - IN gctSIZE_T Offset, - IN gctSIZE_T Size, - IN gctUINT8 EventID - ) -{ -#if gcdENABLE_3D - gceSTATUS status; - gctUINT32_PTR triggerState; - - gcmkHEADER_ARG("Hardware=0x%x Physical=0x%x Logical=0x%x" - " Offset=%d Size=%d EventID=%d", - Hardware, Physical, Logical, Offset, Size, EventID); - - /* Verify the arguments. */ - gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE); - gcmkVERIFY_ARGUMENT(((Size + 8) & 63) == 0); - gcmkVERIFY_ARGUMENT(Logical != gcvNULL); - - /* Program the trigger state. */ - 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) ? ~0U : (~(~0U << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? - 1:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:4) - (0 ? - 5:4) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 5:4) - (0 ? 5:4) + 1))))))) << (0 ? - 5:4))) | (((gctUINT32) (0x3 & ((gctUINT32) ((((1 ? 5:4) - (0 ? 5:4) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 5:4) - (0 ? 5:4) + 1))))))) << (0 ? 5:4))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 8:8) - (0 ? - 8:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 8:8) - (0 ? 8:8) + 1))))))) << (0 ? - 8:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 8:8) - (0 ? - 8:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 8:8) - (0 ? 8:8) + 1))))))) << (0 ? - 8:8))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 24:24) - (0 ? - 24:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 24:24) - (0 ? 24:24) + 1))))))) << (0 ? - 24:24))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 24:24) - (0 ? - 24:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 24:24) - (0 ? 24:24) + 1))))))) << (0 ? - 24:24))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 12:12) - (0 ? - 12:12) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? - 12:12))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 12:12) - (0 ? - 12:12) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? - 12:12))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 20:16) - (0 ? - 20:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 20:16) - (0 ? 20:16) + 1))))))) << (0 ? - 20:16))) | (((gctUINT32) ((gctUINT32) (EventID) & ((gctUINT32) ((((1 ? - 20:16) - (0 ? 20:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 20:16) - (0 ? - 20:16) + 1))))))) << (0 ? 20:16))) - ; - -#if gcdNONPAGED_MEMORY_CACHEABLE - /* Flush the cache for the wait/link. */ - gcmkONERROR(gckOS_CacheClean( - Hardware->os, ProcessID, gcvNULL, - (gctUINT32)Physical, Logical, Offset + Size - )); -#endif - - /* Start composition. */ - gcmkONERROR(gckOS_WriteRegisterEx( - Hardware->os, Hardware->core, 0x00554, - ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:0) - (0 ? - 1:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? - 1:0))) | (((gctUINT32) (0x3 & ((gctUINT32) ((((1 ? 1:0) - (0 ? 1:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))) - )); - - /* Success. */ - gcmkFOOTER_NO(); - return gcvSTATUS_OK; - -OnError: - /* Return the status. */ - gcmkFOOTER(); - return status; -#else - /* Return the status. */ - return gcvSTATUS_NOT_SUPPORTED; -#endif -} - /******************************************************************************* ** ** gckHARDWARE_IsFeatureAvailable @@ -13700,7 +13544,7 @@ gckHARDWARE_PrepareFunctions( &endBytes )); - if (Hardware->mmuVersion > 0) + if (Hardware->mmuVersion > 0 && Hardware->enableMMU && Hardware->secureMode != gcvSECURE_IN_TA) { gctUINT32 mmuBytes; gctPHYS_ADDR_T physical = 0; @@ -13730,12 +13574,6 @@ gckHARDWARE_PrepareFunctions( function->logical = (gctUINT8_PTR)Hardware->mmuFuncLogical; gcmkSAFECASTPHYSADDRT(function->address, physical); - gcmkONERROR(gckMMU_FillFlatMapping( - Hardware->kernel->mmu, - function->address, - Hardware->mmuFuncBytes - )); - gcmkONERROR(gckHARDWARE_SetMMUStates( Hardware, Hardware->kernel->mmu->mtlbLogical, @@ -13849,9 +13687,9 @@ gckHARDWARE_PrepareFunctions( function->endLogical = function->logical + flushBytes; /* - ** BLT Engine event command + ** ASYNC-BLT Engine event command */ - if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_BLT_ENGINE)) + if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_ASYNC_BLIT)) { gctUINT8 i; gctUINT32 eventBytes; @@ -13983,7 +13821,18 @@ gckHARDWARE_ExecuteFunctions( gctUINT32 idle; gctUINT32 timer = 0, delay = 1; gcsHARDWARE_FUNCTION * function = &Hardware->functions[Function]; - gctUINT32 address = function->address - Hardware->baseAddress; + gctUINT32 address; + +#if USE_KERNEL_VIRTUAL_BUFFERS + if (Hardware->kernel->virtualCommandBuffer) + { + address = function->address; + } + else +#endif + { + address = function->address - Hardware->baseAddress; + } /* Execute prepared command sequence. */ gcmkONERROR(gckHARDWARE_Execute( @@ -14011,7 +13860,7 @@ gckHARDWARE_ExecuteFunctions( Hardware->os, function->logical, function->bytes, - gceDUMP_BUFFER_KERNEL, + gcvDUMP_BUFFER_KERNEL, gcvTRUE ); @@ -14119,7 +13968,7 @@ gckHARDWARE_WaitFence( 31:27) + 1))))))) << (0 ? 31:27))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E26) & ((gctUINT32) ((((1 ? 15:0) - (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x01FD) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 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 0d7275b300c1..3e37ab26f0ab 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 @@ -215,7 +215,7 @@ struct _gckHARDWARE #if gcdENABLE_FSCALE_VAL_ADJUST gctUINT32 powerOnFscaleVal; #endif - gctPOINTER pageTableDirty; + gctPOINTER pageTableDirty[gcvENGINE_GPU_ENGINE_COUNT]; #if gcdLINK_QUEUE_SIZE struct _gckQUEUE linkQueue; 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 e4380a4bc280..4ea214e14f31 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 @@ -708,17 +708,17 @@ gckRECORDER_Dump( previous = _Previous(last); gcmkPRINT("#[mirror]"); - gckOS_DumpBuffer(os, mirror->logical[previous], mirror->bytes, gceDUMP_BUFFER_CONTEXT, gcvTRUE); + gckOS_DumpBuffer(os, mirror->logical[previous], mirror->bytes, gcvDUMP_BUFFER_CONTEXT, gcvTRUE); gcmkPRINT("@[kernel.execute]"); } if (delta->contextBytes) { - gckOS_DumpBuffer(os, delta->context, delta->contextBytes, gceDUMP_BUFFER_CONTEXT, gcvTRUE); + gckOS_DumpBuffer(os, delta->context, delta->contextBytes, gcvDUMP_BUFFER_CONTEXT, gcvTRUE); gcmkPRINT("@[kernel.execute]"); } - gckOS_DumpBuffer(os, delta->command, delta->commandBytes, gceDUMP_BUFFER_USER, gcvTRUE); + gckOS_DumpBuffer(os, delta->command, delta->commandBytes, gcvDUMP_BUFFER_USER, gcvTRUE); gcmkPRINT("@[kernel.execute]"); last = _Next(last); 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 a3065edb8597..adab62fb84c1 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c @@ -107,9 +107,6 @@ gctCONST_STRING _DispatchText[] = gcmDEFINE2TEXT(gcvHAL_SET_PROFILE_SETTING), gcmDEFINE2TEXT(gcvHAL_READ_ALL_PROFILE_REGISTERS), gcmDEFINE2TEXT(gcvHAL_PROFILE_REGISTERS_2D), -#if VIVANTE_PROFILER_PERDRAW - gcmDEFINE2TEXT(gcvHAL_READ_PROFILER_REGISTER_SETTING), -#endif gcmDEFINE2TEXT(gcvHAL_READ_ALL_PROFILE_NEW_REGISTERS), gcmDEFINE2TEXT(gcvHAL_READ_PROFILER_NEW_REGISTER_SETTING), gcmDEFINE2TEXT(gcvHAL_SET_POWER_MANAGEMENT_STATE), @@ -127,7 +124,6 @@ gctCONST_STRING _DispatchText[] = gcmDEFINE2TEXT(gcvHAL_CHIP_INFO), gcmDEFINE2TEXT(gcvHAL_ATTACH), gcmDEFINE2TEXT(gcvHAL_DETACH), - gcmDEFINE2TEXT(gcvHAL_COMPOSE), gcmDEFINE2TEXT(gcvHAL_SET_TIMEOUT), gcmDEFINE2TEXT(gcvHAL_GET_FRAME_INFO), gcmDEFINE2TEXT(gcvHAL_DUMP_GPU_PROFILE), @@ -570,18 +566,11 @@ gckKERNEL_Construct( : gcdGPU_TIMEOUT ; -#if (defined(LINUX) || defined(__QNXNTO__)) && !defined(EMULATOR) && !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 + /* Initialize virtual command buffer. */ +#if gcdALLOC_CMD_FROM_RESERVE || gcdSECURITY || gcdDISABLE_GPU_VIRTUAL_ADDRESS || !USE_KERNEL_VIRTUAL_BUFFERS kernel->virtualCommandBuffer = gcvFALSE; +#else + kernel->virtualCommandBuffer = kernel->hardware->enableMMU; #endif #if gcdSHARED_PAGETABLE @@ -616,7 +605,7 @@ gckKERNEL_Construct( gcmkONERROR( gckCOMMAND_Construct(kernel, &kernel->command)); - if (gckHARDWARE_IsFeatureAvailable(kernel->hardware, gcvFEATURE_BLT_ENGINE)) + if (gckHARDWARE_IsFeatureAvailable(kernel->hardware, gcvFEATURE_ASYNC_BLIT)) { /* Construct the gckASYNC_COMMAND object for BLT engine. */ gcmkONERROR(gckASYNC_COMMAND_Construct(kernel, &kernel->asyncCommand)); @@ -995,7 +984,6 @@ gckKERNEL_AllocateLinearMemory( secure = Flag & gcvALLOC_FLAG_SECURITY; #if gcdALLOC_ON_FAULT - /* VIV: Force all render target is allocated on fault. */ if (Type == gcvSURF_RENDER_TARGET) { Flag |= gcvALLOC_FLAG_ALLOC_ON_FAULT; @@ -1786,7 +1774,7 @@ gckKERNEL_WaitFence( gcmkONERROR(gckVIDMEM_HANDLE_LookupAndReference(Kernel, Handle, &node)); /* Wait for fence of all engines. */ - for (i = 0; i < gcvENGINE_COUNT; i++) + for (i = 0; i < gcvENGINE_GPU_ENGINE_COUNT; i++) { gckFENCE_SYNC sync = &node->sync[i]; @@ -1922,8 +1910,12 @@ 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; + Interface->u.GetBaseAddress.flatMappingRangeCount = Kernel->mmu->flatMappingRangeCount; + if (Kernel->mmu->flatMappingRangeCount) + { + gckOS_MemCopy(Interface->u.GetBaseAddress.flatMappingRanges, Kernel->mmu->flatMappingRanges, + gcmSIZEOF(gcsFLAT_MAPPING_RANGE) * Kernel->mmu->flatMappingRangeCount); + } break; case gcvHAL_QUERY_VIDEO_MEMORY: @@ -1972,7 +1964,8 @@ gckKERNEL_Dispatch( gckKERNEL_UnmapMemory(Kernel, physical, (gctSIZE_T) Interface->u.UnmapMemory.bytes, - gcmUINT64_TO_PTR(Interface->u.UnmapMemory.logical))); + gcmUINT64_TO_PTR(Interface->u.UnmapMemory.logical), + processID)); break; case gcvHAL_ALLOCATE_NON_PAGED_MEMORY: @@ -2164,9 +2157,9 @@ gckKERNEL_Dispatch( commitMutexAcquired = gcvTRUE; /* Commit an event queue. */ - if (Interface->u.Event.engine == gcvENGINE_BLT) + if (Interface->engine == gcvENGINE_BLT) { - if (!gckHARDWARE_IsFeatureAvailable(Kernel->hardware, gcvFEATURE_BLT_ENGINE)) + if (!gckHARDWARE_IsFeatureAvailable(Kernel->hardware, gcvFEATURE_ASYNC_BLIT)) { gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); } @@ -2192,11 +2185,11 @@ gckKERNEL_Dispatch( commitMutexAcquired = gcvTRUE; /* Commit a command and context buffer. */ - if (Interface->u.Commit.engine == gcvENGINE_BLT) + if (Interface->engine == gcvENGINE_BLT) { gctUINT64 *commandBuffers = gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffer); - if (!gckHARDWARE_IsFeatureAvailable(Kernel->hardware, gcvFEATURE_BLT_ENGINE)) + if (!gckHARDWARE_IsFeatureAvailable(Kernel->hardware, gcvFEATURE_ASYNC_BLIT)) { gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); } @@ -2214,7 +2207,8 @@ gckKERNEL_Dispatch( } else { - if (Interface->u.Commit.count > 1 && Interface->u.Commit.engine == gcvENGINE_RENDER) + /* XXX: Workaround nxp dual GPU hang issue, bug #17898, Jira IMX-603. */ + if (Interface->u.Commit.count > 1 && Interface->engine == gcvENGINE_RENDER) { gctUINT32 i; @@ -2224,8 +2218,8 @@ gckKERNEL_Dispatch( gckKERNEL kernel = Device->map[type].kernels[i]; gcmkONERROR(gckOS_Broadcast(kernel->os, - kernel->hardware, - gcvBROADCAST_GPU_COMMIT)); + kernel->hardware, + gcvBROADCAST_GPU_COMMIT)); } } @@ -2247,7 +2241,7 @@ gckKERNEL_Dispatch( gcmkONERROR(status); } - if (Interface->u.Commit.count > 1 && Interface->u.Commit.engine == gcvENGINE_RENDER) + if (Interface->u.Commit.count > 1 && Interface->engine == gcvENGINE_RENDER) { gctUINT32 i; @@ -2473,7 +2467,7 @@ gckKERNEL_Dispatch( break; case gcvHAL_READ_ALL_PROFILE_REGISTERS: -#if VIVANTE_PROFILER && VIVANTE_PROFILER_CONTEXT +#if VIVANTE_PROFILER if (Kernel->profileSyncMode) { /* Read profile data according to the context. */ @@ -2544,9 +2538,6 @@ gckKERNEL_Dispatch( case gcvHAL_SET_PROFILE_SETTING: #if VIVANTE_PROFILER -#if VIVANTE_PROFILER_PROBE - gckHARDWARE_InitProfiler(Kernel->hardware); -#else /* Set profile setting */ if(Kernel->hardware->gpuProfiler) { @@ -2564,20 +2555,11 @@ gckKERNEL_Dispatch( status = gcvSTATUS_NOT_SUPPORTED; break; } -#endif #endif status = gcvSTATUS_OK; break; -#if VIVANTE_PROFILER_PERDRAW - case gcvHAL_READ_PROFILER_REGISTER_SETTING: - #if VIVANTE_PROFILER - Kernel->profileCleanRegister = Interface->u.SetProfilerRegisterClear.bclear; - #endif - status = gcvSTATUS_OK; - break; -#endif case gcvHAL_READ_PROFILER_NEW_REGISTER_SETTING: Kernel->profileCleanRegister = Interface->u.SetProfilerRegisterClear.bclear; status = gcvSTATUS_OK; @@ -2613,7 +2595,7 @@ gckKERNEL_Dispatch( gckOS_DumpBuffer(Kernel->os, Interface->u.Debug.message, gcmSIZEOF(Interface->u.Debug.message), - gceDUMP_BUFFER_FROM_USER, + gcvDUMP_BUFFER_FROM_USER, gcvTRUE); } else @@ -2621,7 +2603,7 @@ gckKERNEL_Dispatch( gckOS_DumpBuffer(Kernel->os, Interface->u.Debug.message, Interface->u.Debug.messageSize, - gceDUMP_BUFFER_FROM_USER, + gcvDUMP_BUFFER_FROM_USER, gcvTRUE); } } @@ -2806,14 +2788,6 @@ gckKERNEL_Dispatch( gcmRELEASE_NAME(Interface->u.Detach.context); break; - case gcvHAL_COMPOSE: - Interface->u.Compose.physical = gcmPTR_TO_UINT64(gcmNAME_TO_PTR(Interface->u.Compose.physical)); - /* Start composition. */ - gcmkONERROR( - gckEVENT_Compose(Kernel->eventObj, - &Interface->u.Compose)); - break; - case gcvHAL_GET_FRAME_INFO: gcmkONERROR(gckHARDWARE_GetFrameInfo( Kernel->hardware, 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 d71da8a53b5e..fa0c29703b1e 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h @@ -734,10 +734,8 @@ struct _gckCOMMAND /* Context switching mutex. */ gctPOINTER mutexContext; -#if VIVANTE_PROFILER_CONTEXT /* Context sequence mutex. */ gctPOINTER mutexContextSeq; -#endif /* Command queue power semaphore. */ gctPOINTER powerSemaphore; @@ -1070,6 +1068,7 @@ struct _gckVIDMEM gctUINT32 baseAddress; gctSIZE_T bytes; gctSIZE_T freeBytes; + gctSIZE_T minFreeBytes; /* Mapping for each type of surface. */ gctINT mapping[gcvSURF_NUM_TYPES]; @@ -1114,7 +1113,7 @@ typedef struct _gcsVIDMEM_NODE /* Pool from which node is allocated. */ gcePOOL pool; - gcsFENCE_SYNC sync[gcvENGINE_COUNT]; + gcsFENCE_SYNC sync[gcvENGINE_GPU_ENGINE_COUNT]; } gcsVIDMEM_NODE; @@ -1334,8 +1333,6 @@ struct _gckMMU gctUINT32 mtlbEntries; gctPOINTER staticSTLB; - /*Track all static STLB allocations */ - gctPOINTER staticStlbAllocs; gctBOOL enabled; #if gcdPROCESS_ADDRESS_SPACE @@ -1348,8 +1345,9 @@ struct _gckMMU gctUINT32 safeAddress; gctSIZE_T safePageSize; - gctUINT32 flatMappingStart; - gctUINT32 flatMappingEnd; + /* physBase,physSize flat mapping area. */ + gctUINT32 flatMappingRangeCount; + gcsFLAT_MAPPING_RANGE flatMappingRanges[gcdMAX_FLAT_MAPPING_COUNT]; /* List of hardware which uses this MMU. */ gcsLISTHEAD hardwareList; 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 index f52b0d369632..12bbbb005da9 100644 --- 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 @@ -245,12 +245,13 @@ gckASYNC_COMMAND_Commit( gctUINT commandBufferSize; gctUINT32 commandBufferAddress; gcsFEDescriptor descriptor; - gctUINT32 pipeBytes; + gctUINT32 skipFlushBytes; gctUINT32 fenceBytes; gctBOOL needCopy; - gcmkHEADER(); + gctUINT32 oldValue; + gctUINT32 flushBytes; - gckHARDWARE_PipeSelect(Command->hardware, gcvNULL, gcvPIPE_3D, &pipeBytes); + gcmkHEADER(); gckOS_QueryNeedCopy(Command->os, 0, &needCopy); @@ -268,17 +269,39 @@ gckASYNC_COMMAND_Commit( gcmkVERIFY_OBJECT(commandBufferObject, gcvOBJ_COMMANDBUFFER); + gckHARDWARE_FlushAsyncMMU(Command->hardware, gcvNULL, &flushBytes); + + gcmkONERROR(gckOS_AtomicExchange(Command->os, + Command->hardware->pageTableDirty[gcvENGINE_BLT], + 0, + &oldValue)); + + if (oldValue) + { + commandBufferLogical + = (gctUINT8_PTR) gcmUINT64_TO_PTR(commandBufferObject->logical) + + commandBufferObject->startOffset; + + gckHARDWARE_FlushAsyncMMU(Command->hardware, commandBufferLogical, &flushBytes); + + skipFlushBytes = 0; + } + else + { + skipFlushBytes = flushBytes; + } + /* Compute the command buffer entry and the size. */ commandBufferLogical = (gctUINT8_PTR) gcmUINT64_TO_PTR(commandBufferObject->logical) + commandBufferObject->startOffset - + pipeBytes; + + skipFlushBytes; commandBufferSize = commandBufferObject->offset + Command->reservedTail - commandBufferObject->startOffset - - pipeBytes; + - skipFlushBytes; commandBufferTail = commandBufferLogical @@ -331,7 +354,7 @@ gckASYNC_COMMAND_Commit( Command->os, commandBufferLogical, commandBufferSize, - gceDUMP_BUFFER_USER, + gcvDUMP_BUFFER_USER, gcvFALSE ); 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 2a364b6b8369..1dc58f3c8e27 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 @@ -73,6 +73,9 @@ ** gckCOMMAND Command ** Pointer to an gckCOMMAND object. ** +** gctBOOL Stalled +** Indicate if hardware is stalled already. +** ** OUTPUT: ** ** gckCOMMAND Command @@ -80,7 +83,8 @@ */ static gceSTATUS _NewQueue( - IN OUT gckCOMMAND Command + IN OUT gckCOMMAND Command, + IN gctBOOL Stalled ) { gceSTATUS status; @@ -151,12 +155,23 @@ _NewQueue( if (currentIndex != -1) { - /* Mark the command queue as available. */ - gcmkONERROR(gckEVENT_Signal( - Command->kernel->eventObj, - Command->queues[currentIndex].signal, - gcvKERNEL_COMMAND - )); + if (Stalled) + { + gckOS_Signal( + Command->os, + Command->queues[currentIndex].signal, + gcvTRUE + ); + } + else + { + /* Mark the command queue as available. */ + gcmkONERROR(gckEVENT_Signal( + Command->kernel->eventObj, + Command->queues[currentIndex].signal, + gcvKERNEL_COMMAND + )); + } } /* Success. */ @@ -379,7 +394,7 @@ _FlushMMU( gctUINT32 waitLinkBytes; gcmkONERROR(gckOS_AtomicExchange(Command->os, - hardware->pageTableDirty, + hardware->pageTableDirty[gcvENGINE_RENDER], 0, &oldValue)); @@ -788,7 +803,7 @@ _ParseCMDBUFTail( _GetCMDBUFTail(CommandBuffer, &tail); - if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_FENCE)) + if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_FENCE_64BIT)) { *Fence = tail; *Link = tail + gcdRENDER_FENCE_LENGTH; @@ -1069,10 +1084,8 @@ gckCOMMAND_Construct( /* Create the context switching mutex. */ gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContext)); -#if VIVANTE_PROFILER_CONTEXT /* Create the context switching mutex. */ gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContextSeq)); -#endif /* Create the power management semaphore. */ gcmkONERROR(gckOS_CreateSemaphore(os, &command->powerSemaphore)); @@ -1271,10 +1284,8 @@ gckCOMMAND_Destroy( gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContext)); } -#if VIVANTE_PROFILER_CONTEXT if (Command->mutexContextSeq != gcvNULL) gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContextSeq)); -#endif if (Command->mutexQueue) { @@ -1530,7 +1541,7 @@ gckCOMMAND_Start( ) { /* Start at beginning of a new queue. */ - gcmkONERROR(_NewQueue(Command)); + gcmkONERROR(_NewQueue(Command, gcvTRUE)); } logical = (gctUINT8_PTR) Command->logical + Command->offset; @@ -2011,7 +2022,7 @@ gckCOMMAND_Commit( gcmkONERROR(_DummyDraw(Command)); } - if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_FENCE) && asyncCommandStamp != 0) + if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_FENCE_64BIT) && asyncCommandStamp != 0) { gcmkONERROR(_WaitForAsyncCommandStamp(Command, asyncCommandStamp)); } @@ -2037,7 +2048,7 @@ gckCOMMAND_Commit( if (bytes < waitLinkBytes) { /* No, create a new one. */ - gcmkONERROR(_NewQueue(Command)); + gcmkONERROR(_NewQueue(Command, gcvFALSE)); /* Get the new current offset. */ offset = Command->offset; @@ -2298,7 +2309,7 @@ gckCOMMAND_Commit( + commandBufferSize - commandBufferObject->reservedTail; - if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_FENCE)) + if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_FENCE_64BIT)) { /* Determine the location of the FENCE command in the command buffer. */ commandBufferFence = commandBufferTail; @@ -2471,7 +2482,7 @@ gckCOMMAND_Commit( Command->os, Command->waitLogical, Command->waitSize, - gceDUMP_BUFFER_LINK, + gcvDUMP_BUFFER_LINK, gcvFALSE ); @@ -2479,7 +2490,7 @@ gckCOMMAND_Commit( Command->os, contextDumpLogical, contextDumpBytes, - gceDUMP_BUFFER_CONTEXT, + gcvDUMP_BUFFER_CONTEXT, gcvFALSE ); @@ -2487,7 +2498,7 @@ gckCOMMAND_Commit( Command->os, bufferDumpLogical, bufferDumpBytes, - gceDUMP_BUFFER_USER, + gcvDUMP_BUFFER_USER, gcvFALSE ); @@ -2495,7 +2506,7 @@ gckCOMMAND_Commit( Command->os, waitLinkLogical, waitLinkBytes, - gceDUMP_BUFFER_WAITLINK, + gcvDUMP_BUFFER_WAITLINK, gcvFALSE ); @@ -2803,7 +2814,7 @@ gckCOMMAND_Reserve( if (bytes < requiredBytes) { /* Create a new command queue. */ - gcmkONERROR(_NewQueue(Command)); + gcmkONERROR(_NewQueue(Command, gcvFALSE)); /* Recompute the number of bytes in the new kernel command queue. */ bytes = Command->pageSize - Command->offset; @@ -2992,7 +3003,7 @@ gckCOMMAND_Execute( Command->os, Command->waitLogical, Command->waitSize, - gceDUMP_BUFFER_LINK, + gcvDUMP_BUFFER_LINK, gcvFALSE ); @@ -3000,7 +3011,7 @@ gckCOMMAND_Execute( Command->os, execLogical, execBytes, - gceDUMP_BUFFER_KERNEL, + gcvDUMP_BUFFER_KERNEL, gcvFALSE ); 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 3faa3896975c..f33f650cd89e 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 @@ -1467,7 +1467,8 @@ gckKERNEL_DestroyProcessDB( status = gckKERNEL_UnmapMemory(record->kernel, record->physical, record->bytes, - record->data); + record->data, + ProcessID); gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, "DB: MAP MEMORY %d (status=%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 dbf00f00fa73..73480296ee7d 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 @@ -668,11 +668,11 @@ _PrintBuffer( switch (Type) { - case gceDUMP_BUFFER_CONTEXT: - case gceDUMP_BUFFER_USER: - case gceDUMP_BUFFER_KERNEL: - case gceDUMP_BUFFER_LINK: - case gceDUMP_BUFFER_WAITLINK: + case gcvDUMP_BUFFER_CONTEXT: + case gcvDUMP_BUFFER_USER: + case gcvDUMP_BUFFER_KERNEL: + case gcvDUMP_BUFFER_LINK: + case gcvDUMP_BUFFER_WAITLINK: /* Form and print the title string. */ gcmkSPRINTF2( buffer + indent, gcmSIZEOF(buffer) - indent, @@ -690,7 +690,7 @@ _PrintBuffer( command = gcvTRUE; break; - case gceDUMP_BUFFER_FROM_USER: + case gcvDUMP_BUFFER_FROM_USER: /* This is not a command buffer. */ command = gcvFALSE; @@ -1750,9 +1750,9 @@ _Print( ) { gcsBUFFERED_OUTPUT_PTR outputBuffer; - gcmkDECLARE_LOCK(lockHandle); + static gcmkDECLARE_MUTEX(lockHandle); - gcmkLOCKSECTION(lockHandle); + gcmkMUTEX_LOCK(lockHandle); /* Initialize output buffer list. */ _InitBuffers(); @@ -1811,7 +1811,7 @@ _Print( outputBuffer->indent += 2; } - gcmkUNLOCKSECTION(lockHandle); + gcmkMUTEX_UNLOCK(lockHandle); } @@ -1978,32 +1978,28 @@ gckOS_DumpBuffer( gctPHYS_ADDR_T physical; gctUINT32 address = 0; gcsBUFFERED_OUTPUT_PTR outputBuffer = gcvNULL; - static gctBOOL userLocked; gctCHAR *buffer = (gctCHAR*)Buffer; + gctPOINTER pAllocated = gcvNULL; + gctPOINTER pMapped = gcvNULL; + gceSTATUS status = gcvSTATUS_OK; - gcmkDECLARE_LOCK(lockHandle); + static gcmkDECLARE_MUTEX(lockHandle); + + gcmkMUTEX_LOCK(lockHandle); /* Request lock when not coming from user, or coming from user and not yet locked and message is starting with @[. */ - if (Type == gceDUMP_BUFFER_FROM_USER) + if (Type == gcvDUMP_BUFFER_FROM_USER) { - if ((Size > 2) - && (!strncmp(buffer, "@[", 2) || !strncmp(buffer, "#[", 2)) - ) - { - /* 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] != '[') ) { + gcmkMUTEX_UNLOCK(lockHandle); + /* No error tolerence in parser, so we stop on error to make noise. */ for (;;) { @@ -2017,11 +2013,6 @@ gckOS_DumpBuffer( } } } - else - { - gcmkLOCKSECTION(lockHandle); - userLocked = gcvFALSE; - } if (Buffer != gcvNULL) { @@ -2037,7 +2028,7 @@ gckOS_DumpBuffer( #endif /* Get the physical address of the buffer. */ - if (Type != gceDUMP_BUFFER_FROM_USER) + if (Type != gcvDUMP_BUFFER_FROM_USER) { gcmkVERIFY_OK(gckOS_GetPhysicalAddress(Os, Buffer, &physical)); gcmkSAFECASTPHYSADDRT(address, physical); @@ -2047,6 +2038,42 @@ gckOS_DumpBuffer( address = 0; } + if (Type == gcvDUMP_BUFFER_USER) + { + gctBOOL needCopy = gcvTRUE; + + gcmkONERROR(gckOS_QueryNeedCopy(Os, 0, &needCopy)); + + if (needCopy) + { + gcmkONERROR(gckOS_Allocate( + Os, + Size, + &pAllocated + )); + + gcmkONERROR(gckOS_CopyFromUserData( + Os, + pAllocated, + Buffer, + Size + )); + + Buffer = pAllocated; + } + else + { + gcmkONERROR(gckOS_MapUserPointer( + Os, + Buffer, + Size, + &pMapped + )); + + Buffer = pMapped; + } + } + #if gcdHAVEPREFIX { gctUINT8_PTR alignedPrefixData; @@ -2067,7 +2094,7 @@ gckOS_DumpBuffer( } #else /* Print/schedule the buffer. */ - if (Type == gceDUMP_BUFFER_FROM_USER) + if (Type == gcvDUMP_BUFFER_FROM_USER) { gckOS_CopyPrint(Buffer); } @@ -2081,30 +2108,16 @@ gckOS_DumpBuffer( #endif } - /* Unlock when not coming from user, - or coming from user and not yet locked. */ - if (userLocked) - { - gctUINT i = 0; - - while (i < Size && buffer[i]) - { - if (buffer[i] == ']') - { - /* End of a user dump. */ - userLocked = gcvFALSE; - gcmkUNLOCKSECTION(lockHandle); +OnError: + gcmkMUTEX_UNLOCK(lockHandle); - break; - } - - i++; - } - /* Else, let it pass through, don't unlock. */ + if (pAllocated) + { + gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Os, pAllocated)); } - else + else if (pMapped) { - gcmkUNLOCKSECTION(lockHandle); + gckOS_UnmapUserPointer(Os, buffer, Size, pMapped); } } 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 a848eb3743ca..a23c48eaf3fd 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 @@ -1624,7 +1624,7 @@ gckEVENT_SubmitAsync( Event->os, startLogical, end - start, - gceDUMP_BUFFER_KERNEL, + gcvDUMP_BUFFER_KERNEL, gcvFALSE ); @@ -2047,125 +2047,6 @@ OnError: return status; } -/******************************************************************************* -** -** gckEVENT_Compose -** -** Schedule a composition event and start a composition. -** -** INPUT: -** -** gckEVENT Event -** Pointer to an gckEVENT object. -** -** gcsHAL_COMPOSE_PTR Info -** Pointer to the composition structure. -** -** OUTPUT: -** -** Nothing. -*/ -gceSTATUS -gckEVENT_Compose( - IN gckEVENT Event, - IN gcsHAL_COMPOSE_PTR Info - ) -{ - gceSTATUS status; - gcsEVENT_PTR headRecord; - gcsEVENT_PTR tailRecord; - gcsEVENT_PTR tempRecord = gcvNULL; - gctUINT8 id = 0xFF; - gctUINT32 processID; - - gcmkHEADER_ARG("Event=0x%x Info=0x%x", Event, Info); - - /* Verify the arguments. */ - gcmkVERIFY_OBJECT(Event, gcvOBJ_EVENT); - gcmkVERIFY_ARGUMENT(Info != gcvNULL); - - /* Allocate an event ID. */ - gcmkONERROR(gckEVENT_GetEvent(Event, gcvTRUE, &id, gcvKERNEL_PIXEL)); - - /* Get process ID. */ - gcmkONERROR(gckOS_GetProcessID(&processID)); - - /* Allocate a record. */ - gcmkONERROR(gckEVENT_AllocateRecord(Event, gcvTRUE, &tempRecord)); - headRecord = tailRecord = tempRecord; - - /* Initialize the record. */ - tempRecord->info.command = gcvHAL_SIGNAL; - tempRecord->info.u.Signal.process = Info->process; -#ifdef __QNXNTO__ - tempRecord->info.u.Signal.coid = Info->coid; - tempRecord->info.u.Signal.rcvid = Info->rcvid; -#endif - tempRecord->info.u.Signal.signal = Info->signal; - tempRecord->info.u.Signal.auxSignal = 0; - tempRecord->next = gcvNULL; - tempRecord->processID = processID; - - /* Allocate another record for user signal #1. */ - if (gcmUINT64_TO_PTR(Info->userSignal1) != gcvNULL) - { - /* Allocate a record. */ - gcmkONERROR(gckEVENT_AllocateRecord(Event, gcvTRUE, &tempRecord)); - tailRecord->next = tempRecord; - tailRecord = tempRecord; - - /* Initialize the record. */ - tempRecord->info.command = gcvHAL_SIGNAL; - tempRecord->info.u.Signal.process = Info->userProcess; -#ifdef __QNXNTO__ - tempRecord->info.u.Signal.coid = Info->coid; - tempRecord->info.u.Signal.rcvid = Info->rcvid; -#endif - tempRecord->info.u.Signal.signal = Info->userSignal1; - tempRecord->info.u.Signal.auxSignal = 0; - tempRecord->next = gcvNULL; - tempRecord->processID = processID; - } - - /* Allocate another record for user signal #2. */ - if (gcmUINT64_TO_PTR(Info->userSignal2) != gcvNULL) - { - /* Allocate a record. */ - gcmkONERROR(gckEVENT_AllocateRecord(Event, gcvTRUE, &tempRecord)); - tailRecord->next = tempRecord; - - /* Initialize the record. */ - tempRecord->info.command = gcvHAL_SIGNAL; - tempRecord->info.u.Signal.process = Info->userProcess; -#ifdef __QNXNTO__ - tempRecord->info.u.Signal.coid = Info->coid; - tempRecord->info.u.Signal.rcvid = Info->rcvid; -#endif - tempRecord->info.u.Signal.signal = Info->userSignal2; - tempRecord->info.u.Signal.auxSignal = 0; - tempRecord->next = gcvNULL; - tempRecord->processID = processID; - } - - /* Set the event list. */ - Event->queues[id].head = headRecord; - - /* Start composition. */ - gcmkONERROR(gckHARDWARE_Compose( - Event->kernel->hardware, processID, - gcmUINT64_TO_PTR(Info->physical), gcmUINT64_TO_PTR(Info->logical), Info->offset, Info->size, id - )); - - /* Success. */ - gcmkFOOTER_NO(); - return gcvSTATUS_OK; - -OnError: - /* Return the status. */ - gcmkFOOTER(); - return status; -} - /******************************************************************************* ** ** gckEVENT_Interrupt @@ -2482,7 +2363,7 @@ gckEVENT_Notify( gckOS_AtomClearMask(Event->pending, mask); - if (!gckHARDWARE_IsFeatureAvailable(Event->kernel->hardware, gcvFEATURE_FENCE)) + if (!gckHARDWARE_IsFeatureAvailable(Event->kernel->hardware, gcvFEATURE_FENCE_64BIT)) { /* Write out commit stamp.*/ *(gctUINT64 *)(Event->kernel->command->fence->logical) = queue->commitStamp; 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 71ef299a8f8a..6aa793643298 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 @@ -73,9 +73,9 @@ gceMMU_TYPE; #define gcdVERTEX_START (128 << 10) -typedef struct _gcsMMU_STLB *gcsMMU_STLB_PTR; +typedef struct _gcsMMU_STLB_CHUNK *gcsMMU_STLB_CHUNK_PTR; -typedef struct _gcsMMU_STLB +typedef struct _gcsMMU_STLB_CHUNK { gctPHYS_ADDR physical; gctUINT32_PTR logical; @@ -84,18 +84,8 @@ typedef struct _gcsMMU_STLB gctSIZE_T pageCount; gctUINT32 mtlbIndex; gctUINT32 mtlbEntryNum; - gcsMMU_STLB_PTR next; -} gcsMMU_STLB; - -typedef struct _gcsMMU_STLB_ALLOC *gcsMMU_STLB_ALLOC_PTR; - -typedef struct _gcsMMU_STLB_ALLOC -{ - gctPHYS_ADDR physical; - gctUINT32_PTR logical; - gctSIZE_T size; - gcsMMU_STLB_ALLOC_PTR next; -} gcsMMU_STLB_ALLOC; + gcsMMU_STLB_CHUNK_PTR next; +} gcsMMU_STLB_CHUNK; #if gcdSHARED_PAGETABLE typedef struct _gcsSharedPageTable * gcsSharedPageTable_PTR; @@ -123,42 +113,23 @@ typedef struct _gcsDynamicSpaceNode } gcsDynamicSpaceNode; -static void -_WritePageEntry( - IN gctUINT32_PTR PageEntry, - IN gctUINT32 EntryValue - ) -{ - static gctUINT16 data = 0xff00; +#if gcdENDIAN_BIG - if (*(gctUINT8 *)&data == 0xff) - { - *PageEntry = gcmSWAB32(EntryValue); - } - else - { - *PageEntry = EntryValue; - } -} +# define _WritePageEntry(pageEntry, entryValue) \ + *(gctUINT32_PTR)(pageEntry) = gcmBSWAP32((gctUINT32)(entryValue)) -static gctUINT32 -_ReadPageEntry( - IN gctUINT32_PTR PageEntry - ) -{ - static gctUINT16 data = 0xff00; - gctUINT32 entryValue; +# define _ReadPageEntry(pageEntry) \ + gcmBSWAP32(*(gctUINT32_PTR)(pageEntry)) - if (*(gctUINT8 *)&data == 0xff) - { - entryValue = *PageEntry; - return gcmSWAB32(entryValue); - } - else - { - return *PageEntry; - } -} +#else + +# define _WritePageEntry(pageEntry, entryValue) \ + *(gctUINT32_PTR)(pageEntry) = (gctUINT32)(entryValue) + +# define _ReadPageEntry(pageEntry) \ + *(gctUINT32_PTR)(pageEntry) + +#endif static gceSTATUS _FillPageTable( @@ -591,27 +562,60 @@ _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 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; - gctPHYS_ADDR_T physical; - gctUINT32 size; - gctUINT32 mtlbEntries = 0; - gctUINT32 mtlbCountStart = mStart; - gctUINT32 stlbCount = 0; - gctSIZE_T stlbTotalSize = 0; - gctPHYS_ADDR stlbPhysical = gcvNULL; - gctUINT32_PTR stlbLogical = gcvNULL; - gcsMMU_STLB_ALLOC_PTR stlbAlloc = gcvNULL; + gctUINT32 mtlb; + gcsADDRESS_AREA_PTR area = &Mmu->area[0]; + /************************ look up existing flat mapping ranges. ****************/ + gctUINT64 flatBase = (gctUINT64)PhysBase; + gctUINT32 flatSize = (gctUINT32)Size; + gctUINT64 base = flatBase; + gctUINT32 size = flatSize; + gctUINT64 end = base + size; + gctUINT32 i; + end = gcmMIN(end, 0x100000000ull); - gctUINT32 mtlb = _MtlbOffset(PhysBase); - gcsADDRESS_AREA_PTR area = &Mmu->area[0]; + for (i = 0; i < Mmu->flatMappingRangeCount; i++) + { + if (base < Mmu->flatMappingRanges[i].start) + { + end = gcmMIN(end, Mmu->flatMappingRanges[i].start); + flatSize = (gctUINT32) (end - base); + } + else if (end > Mmu->flatMappingRanges[i].end) + { + base = gcmMAX(base, Mmu->flatMappingRanges[i].end); + + flatBase = (gctUINT32) base; + flatSize = (gctUINT32) (end - base); + + if (base > 0xFFFFFFFF) + { + flatSize = 0; + } + } + else + { + /* it is already inside existing flat mapping ranges. */ + flatSize = 0; + } + + if (flatSize == 0) + { + return gcvSTATUS_OK; + } + } + + Mmu->flatMappingRanges[Mmu->flatMappingRangeCount].start = flatBase; + Mmu->flatMappingRanges[Mmu->flatMappingRangeCount].end = flatBase + flatSize; + Mmu->flatMappingRangeCount++; + + gcmkASSERT(Mmu->flatMappingRangeCount <= gcdMAX_FLAT_MAPPING_COUNT); + + /* overwrite the orignal parameters */ + PhysBase = (gctUINT32)flatBase; + Size = (gctSIZE_T)flatSize; + + mtlb = _MtlbOffset(PhysBase); /************************ Setup flat mapping in dynamic range. ****************/ @@ -641,251 +645,260 @@ _FillFlatMapping( } /************************ Setup flat mapping in non dynamic range. **************/ - /* Grab the mutex. */ - gcmkONERROR(gckOS_AcquireMutex(Mmu->os, Mmu->pageTableMutex, gcvINFINITE)); - mutex = gcvTRUE; - - /* Calculate How many STLB should we allocate: depending on - * number of non-valid mtlb entries for the requested - * adress range */ - while (mtlbCountStart <= mEnd) { - gcmkASSERT(mtlbCountStart < gcdMMU_MTLB_ENTRY_NUM); - - /*If the mtlb exists , the stlb already exists and it - * will be overwritten anyway: Allocate only when non-valid - * mtlb entry */ - if (*(Mmu->mtlbLogical + mtlbCountStart) == 0) - { - mtlbEntries++; - } - ++mtlbCountStart; - } - - if(mtlbEntries) - { - /*First Allocate the staticStlbAlloc stuct to track this allocation*/ - gctPOINTER stlbAllocPtr = gcvNULL; - gcmkONERROR(gckOS_Allocate(Mmu->os, sizeof(struct _gcsMMU_STLB_ALLOC), &stlbAllocPtr)); - stlbAlloc = stlbAllocPtr; - stlbTotalSize = gcdMMU_STLB_64K_SIZE * mtlbEntries; - - /*Allocate all STLBs in one contiguous chunk*/ - gcmkONERROR( - gckOS_AllocateContiguous(Mmu->os, - gcvFALSE, - &stlbTotalSize, - &stlbPhysical, - (gctPOINTER)&stlbLogical)); - - /*Save the allocation*/ - stlbAlloc->physical = stlbPhysical; - stlbAlloc->logical = stlbLogical; - stlbAlloc->size = stlbTotalSize; - stlbAlloc->next = gcvNULL; - } - - 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) + gctBOOL mutex = gcvFALSE; + gctUINT32 start = PhysBase & ~gcdMMU_PAGE_64K_MASK; + gctUINT32 end = (gctUINT32) (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; + gctPHYS_ADDR_T physical; + gcsMMU_STLB_CHUNK_PTR newStlbChunk = gcvNULL; + gctUINT32 stlbIndex = 0; + gctUINT32 totalNewStlbs = 0; + gctINT32 firstMtlbEntry = -1; + gctUINT32 mtlbCurEntry = mStart; + gcsMMU_STLB_CHUNK_PTR curStlbChunk = gcvNULL; + gctUINT32 seqs[2] = {0, 0}; + gctUINT32 seqIdx = 0; + /* Grab the mutex. */ + gcmkONERROR(gckOS_AcquireMutex(Mmu->os, Mmu->pageTableMutex, gcvINFINITE)); + mutex = gcvTRUE; + + /* find all new stlbs, part of new flat mapping range may already have stlbs*/ + while (mtlbCurEntry <= mEnd) { - gctPOINTER pointer = gcvNULL; - - gctUINT32 mtlbEntry; - - gcmkONERROR(gckOS_Allocate(Mmu->os, sizeof(struct _gcsMMU_STLB), &pointer)); - stlb = pointer; - - stlb->mtlbEntryNum = 0; - stlb->next = gcvNULL; - stlb->physical = gcvNULL; - stlb->logical = gcvNULL; - stlb->size = gcdMMU_STLB_64K_SIZE; - stlb->pageCount = 0; - - gcmkASSERT(stlbLogical); - - stlb->logical = (gctUINT32_PTR)(((gctPOINTER)stlbLogical) + stlb->size * stlbCount); - stlb->physical = (gctPHYS_ADDR)(((gctPOINTER)stlbPhysical) + stlb->size * stlbCount); - - if (pre == gcvNULL) + if (*(Mmu->mtlbLogical + mtlbCurEntry) == 0) { - pre = head = stlb; + if (seqIdx < 2) + { + if (seqs[seqIdx] != 2) + { + seqs[seqIdx] = 1; + } + else if (seqIdx < 1) + { + seqs[++seqIdx] = 1; + } + else + { + gcmkASSERT(gcvFALSE); + } + } + else if (seqs[1] != 1) + { + gcmkPRINT("There is a hole in new flat mapping range, which is not correct"); + } + totalNewStlbs++; + if (-1 == firstMtlbEntry) + { + firstMtlbEntry = mtlbCurEntry; + } } else { - gcmkASSERT(pre->next == gcvNULL); - pre->next = stlb; - pre = stlb; + if (seqIdx < 2) + { + if (seqs[seqIdx] != 1) + { + seqs[seqIdx] = 2; + } + else if (seqIdx < 1) + { + seqs[++seqIdx] = 2; + } + else + { + gcmkASSERT(gcvFALSE); + } + } + else if (seqs[1] != 2) + { + gcmkPRINT("There is a hole in new flat mapping range, which is not correct"); + } } + mtlbCurEntry++; + } + + /* Need allocate a new chunk of stlbs */ + if (totalNewStlbs) + { + gcmkONERROR( + gckOS_Allocate(Mmu->os, + sizeof(struct _gcsMMU_STLB_CHUNK), + (gctPOINTER *)&newStlbChunk)); + + newStlbChunk->mtlbEntryNum = totalNewStlbs; + newStlbChunk->next = gcvNULL; + newStlbChunk->physical = gcvNULL; + newStlbChunk->logical = gcvNULL; + newStlbChunk->size = gcdMMU_STLB_64K_SIZE * newStlbChunk->mtlbEntryNum; + newStlbChunk->pageCount = 0; + newStlbChunk->mtlbIndex = firstMtlbEntry; + gcmkONERROR( + gckOS_AllocateContiguous(Mmu->os, + gcvFALSE, + &newStlbChunk->size, + &newStlbChunk->physical, + (gctPOINTER)&newStlbChunk->logical)); + gcmkONERROR(gckOS_ZeroMemory(newStlbChunk->logical, newStlbChunk->size)); gcmkONERROR(gckOS_GetPhysicalAddress( Mmu->os, - stlb->logical, + newStlbChunk->logical, &physical)); - gcmkSAFECASTPHYSADDRT(stlb->physBase, physical); + gcmkSAFECASTPHYSADDRT(newStlbChunk->physBase, physical); - if (stlb->physBase & (gcdMMU_STLB_64K_SIZE - 1)) + if (newStlbChunk->physBase & (gcdMMU_STLB_64K_SIZE - 1)) { gcmkONERROR(gcvSTATUS_NOT_ALIGNED); } + } - physical = stlb->physBase - /* 64KB page size */ - | (1 << 2) - /* Ignore exception */ - | (0 << 1) - /* Present */ - | (1 << 0); + while (mStart <= mEnd) + { + gctUINT32 last = (mStart == mEnd) ? sEnd : (gcdMMU_STLB_64K_ENTRY_NUM - 1); + gctPHYS_ADDR_T stlbPhyBase; + gctUINT32_PTR stlbLogical; - gcmkSAFECASTPHYSADDRT(mtlbEntry, physical); + gcmkASSERT(mStart < gcdMMU_MTLB_ENTRY_NUM); - _WritePageEntry(Mmu->mtlbLogical + mStart, mtlbEntry); + if (*(Mmu->mtlbLogical + mStart) == 0) + { + gctUINT32 mtlbEntry; + curStlbChunk = newStlbChunk; + stlbPhyBase = curStlbChunk->physBase + (stlbIndex * gcdMMU_STLB_64K_SIZE); + stlbLogical = (gctUINT32_PTR)((gctUINT8_PTR)curStlbChunk->logical + (stlbIndex * gcdMMU_STLB_64K_SIZE)); + physical = stlbPhyBase + /* 64KB page size */ + | (1 << 2) + /* Ignore exception */ + | (0 << 1) + /* Present */ + | (1 << 0); + + gcmkSAFECASTPHYSADDRT(mtlbEntry, physical); + + _WritePageEntry(Mmu->mtlbLogical + mStart, mtlbEntry); #if gcdMMU_TABLE_DUMP - gckOS_Print("%s(%d): insert MTLB[%d]: %08x\n", - __FUNCTION__, __LINE__, - mStart, - _ReadPageEntry(Mmu->mtlbLogical + mStart)); + gckOS_Print("%s(%d): insert MTLB[%d]: %08x\n", + __FUNCTION__, __LINE__, + mStart, + _ReadPageEntry(Mmu->mtlbLogical + mStart)); #endif - stlb->mtlbIndex = mStart; - stlb->mtlbEntryNum = 1; #if gcdMMU_TABLE_DUMP - gckOS_Print("%s(%d): STLB: logical:%08x -> physical:%08x\n", - __FUNCTION__, __LINE__, - stlb->logical, - stlb->physBase); + gckOS_Print("%s(%d): STLB: logical:%08x -> physical:%08x\n", + __FUNCTION__, __LINE__, + stlbLogical, + stlbPhyBase); #endif - - /*Increment STLB allocs count*/ - ++stlbCount; - } - else - { - stlb = Mmu->staticSTLB; - - while (stlb) + ++stlbIndex; + } + else { gctUINT32 mtlbEntry = _ReadPageEntry(Mmu->mtlbLogical + mStart); + gctUINT stlbOffset; - if (stlb->physBase == (mtlbEntry & gcdMMU_MTLB_ENTRY_STLB_MASK)) + curStlbChunk = (gcsMMU_STLB_CHUNK_PTR)Mmu->staticSTLB; + + while (curStlbChunk) { - break; + if ((mStart >= curStlbChunk->mtlbIndex) && + (mStart < (curStlbChunk->mtlbIndex + curStlbChunk->mtlbEntryNum))) + { + break; + } + curStlbChunk = curStlbChunk->next; } + gcmkASSERT(curStlbChunk); + stlbOffset = mStart - curStlbChunk->mtlbIndex; - stlb = stlb->next; + stlbPhyBase = curStlbChunk->physBase + (stlbOffset * gcdMMU_STLB_64K_SIZE); + stlbLogical = (gctUINT32_PTR)((gctUINT8_PTR)curStlbChunk->logical + (stlbOffset * gcdMMU_STLB_64K_SIZE)); + if (stlbPhyBase != (mtlbEntry & gcdMMU_MTLB_ENTRY_STLB_MASK)) + { + gcmkASSERT(0); + } } - } + /* Fill STLB. */ + sStart = (start & gcdMMU_STLB_64K_MASK) >> gcdMMU_STLB_64K_SHIFT; - /* 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)); + while (sStart <= last) + { + gcmkASSERT(!(start & gcdMMU_PAGE_64K_MASK)); + _WritePageEntry(stlbLogical + sStart, _SetPage(start, 0, gcvTRUE)); #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(stlbLogical + sStart)); #endif - /* next page. */ - start += gcdMMU_PAGE_64K_SIZE; - sStart++; - stlb->pageCount++; - } - - ++mStart; - } + /* next page. */ + start += gcdMMU_PAGE_64K_SIZE; + sStart++; + curStlbChunk->pageCount++; + } - if (pre) - { - /* Insert the stlb into staticSTLB. */ - if (Mmu->staticSTLB == gcvNULL) - { - Mmu->staticSTLB = head; - } - else - { - gcmkASSERT(pre != gcvNULL); - gcmkASSERT(pre->next == gcvNULL); - pre->next = Mmu->staticSTLB; - Mmu->staticSTLB = head; + ++mStart; } - } - if(stlbAlloc) - { - /*Insert the stlb Allocation*/ - if (Mmu->staticStlbAllocs == gcvNULL) - { - Mmu->staticStlbAllocs = stlbAlloc; - } - else + gcmkASSERT(totalNewStlbs == stlbIndex); + + if (newStlbChunk) { - gcmkASSERT(stlbAlloc->next == gcvNULL); - stlbAlloc->next = Mmu->staticStlbAllocs; - Mmu->staticStlbAllocs = stlbAlloc; + /* Insert the stlbChunk into staticSTLB. */ + if (Mmu->staticSTLB == gcvNULL) + { + Mmu->staticSTLB = newStlbChunk; + } + else + { + gcmkASSERT(newStlbChunk != gcvNULL); + gcmkASSERT(newStlbChunk->next == gcvNULL); + newStlbChunk->next = Mmu->staticSTLB; + Mmu->staticSTLB = newStlbChunk; + } } - } - /* Release the mutex. */ - gcmkVERIFY_OK(gckOS_ReleaseMutex(Mmu->os, Mmu->pageTableMutex)); + /* Release the mutex. */ + gcmkVERIFY_OK(gckOS_ReleaseMutex(Mmu->os, Mmu->pageTableMutex)); #if gcdENABLE_TRUST_APPLICATION - if (Mmu->hardware->secureMode == gcvSECURE_IN_TA) - { - gckKERNEL_SecurityMapMemory(Mmu->hardware->kernel, gcvNULL, PhysBase, (gctUINT32)Size/4096, &PhysBase); - } + if (Mmu->hardware->secureMode == gcvSECURE_IN_TA) + { + gckKERNEL_SecurityMapMemory(Mmu->hardware->kernel, gcvNULL, PhysBase, (gctUINT32)Size/4096, &PhysBase); + } #endif - return gcvSTATUS_OK; - + return gcvSTATUS_OK; OnError: - - /* Roll back. */ - while (head != gcvNULL) - { - pre = head; - head = head->next; - - if (pre->mtlbEntryNum != 0) + /* Roll back the allocation. + ** We don't need roll back mtlb programming as gckmONERROR + ** is only used during allocation time. + */ + if (newStlbChunk) { - gcmkASSERT(pre->mtlbEntryNum == 1); - _WritePageEntry(Mmu->mtlbLogical + pre->mtlbIndex, 0); + if (newStlbChunk->physical) + { + gcmkVERIFY_OK( + gckOS_FreeContiguous(Mmu->os, + newStlbChunk->physical, + newStlbChunk->logical, + newStlbChunk->size)); + } + gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Mmu->os, newStlbChunk)); } - - gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Mmu->os, pre)); - } - - /*Free the STLBs in one shot*/ - if(stlbAlloc) - { - if(stlbLogical) + if (mutex) { - gcmkVERIFY_OK( - gckOS_FreeContiguous(Mmu->os, - stlbPhysical, - stlbLogical, - stlbTotalSize)); + /* Release the mutex. */ + gcmkVERIFY_OK(gckOS_ReleaseMutex(Mmu->os, Mmu->pageTableMutex)); } - - gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Mmu->os, stlbAlloc)); - } - - if (mutex) - { - /* Release the mutex. */ - gcmkVERIFY_OK(gckOS_ReleaseMutex(Mmu->os, Mmu->pageTableMutex)); + return status; } - - return status; } static gceSTATUS @@ -1211,7 +1224,7 @@ _Construct( gctUINT32 physBase; gctUINT32 physSize; gctUINT32 contiguousBase; - gctUINT32 contiguousSize; + gctUINT32 contiguousSize = 0; gctUINT32 gpuAddress; gctPHYS_ADDR_T gpuPhysical; gcsADDRESS_AREA_PTR area = gcvNULL; @@ -1245,7 +1258,6 @@ _Construct( mmu->pageTableMutex = gcvNULL; mmu->mtlbLogical = gcvNULL; mmu->staticSTLB = gcvNULL; - mmu->staticStlbAllocs = gcvNULL; mmu->enabled = gcvFALSE; gcsLIST_Init(&mmu->hardwareList); @@ -1350,14 +1362,6 @@ _Construct( gcmkSAFECASTPHYSADDRT(gpuAddress, gpuPhysical); - mmu->flatMappingStart = gpuAddress; - mmu->flatMappingEnd = gpuAddress + physSize; - - if ( mmu->flatMappingEnd < mmu->flatMappingStart) - { - mmu->flatMappingEnd = gcvMAXUINT32; - } - if (physSize) { /* Setup user specified flat mapping. */ @@ -1369,15 +1373,12 @@ _Construct( if (gcmIS_SUCCESS(status)) { status = gckOS_QueryOption(mmu->os, "contiguousSize", &contiguousSize); + } - if (gcmIS_SUCCESS(status)) - { - if (contiguousSize && (contiguousBase < mmu->flatMappingStart || contiguousBase + contiguousSize > mmu->flatMappingEnd)) - { - /* Setup flat mapping for reserved memory (VIDMEM). */ - gcmkONERROR(_FillFlatMapping(mmu, contiguousBase, contiguousSize)); - } - } + if (gcmIS_SUCCESS(status) && contiguousSize) + { + /* Setup flat mapping for reserved memory (VIDMEM). */ + gcmkONERROR(_FillFlatMapping(mmu, contiguousBase, contiguousSize)); } gcmkONERROR(_SetupDynamicSpace(mmu)); @@ -1487,38 +1488,34 @@ _Destroy( while (Mmu->staticSTLB != gcvNULL) { - gcsMMU_STLB_PTR pre = Mmu->staticSTLB; + gcsMMU_STLB_CHUNK_PTR pre = Mmu->staticSTLB; Mmu->staticSTLB = pre->next; + if (pre->physical != gcvNULL) + { + gcmkVERIFY_OK( + gckOS_FreeContiguous(Mmu->os, + pre->physical, + pre->logical, + pre->size)); + } + if (pre->mtlbEntryNum != 0) { - gcmkASSERT(pre->mtlbEntryNum == 1); - _WritePageEntry(Mmu->mtlbLogical + pre->mtlbIndex, 0); + gctUINT i; + for (i = 0; i < pre->mtlbEntryNum; ++i) + { + _WritePageEntry(Mmu->mtlbLogical + pre->mtlbIndex + i, 0); #if gcdMMU_TABLE_DUMP - gckOS_Print("%s(%d): clean MTLB[%d]\n", - __FUNCTION__, __LINE__, - pre->mtlbIndex); + gckOS_Print("%s(%d): clean MTLB[%d]\n", + __FUNCTION__, __LINE__, + pre->mtlbIndex + i); #endif + } } gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Mmu->os, pre)); } - /*Walk through all the static STLB allocations and free them*/ - while (Mmu->staticStlbAllocs != gcvNULL) - { - gcsMMU_STLB_ALLOC_PTR stlbAlloc = Mmu->staticStlbAllocs; - Mmu->staticStlbAllocs = stlbAlloc->next; - - if(stlbAlloc->logical != gcvNULL) - { - gcmkVERIFY_OK( - gckOS_FreeContiguous(Mmu->os, - stlbAlloc->physical, - stlbAlloc->logical, - stlbAlloc->size)); - } - gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Mmu->os, stlbAlloc)); - } if (Mmu->hardware->mmuVersion != 0) { @@ -1557,7 +1554,7 @@ _Destroy( #if gcdPROCESS_ADDRESS_SPACE for (i = 0; i < Mmu->mtlbSize / 4; i++) { - struct _gcsMMU_STLB *stlb = ((struct _gcsMMU_STLB **)Mmu->stlbs)[i]; + struct _gcsMMU_STLB_CHUNK *stlb = ((struct _gcsMMU_STLB_CHUNK **)Mmu->stlbs)[i]; if (stlb) { @@ -2230,8 +2227,8 @@ gckMMU_GetPageEntry( ) { gceSTATUS status; - struct _gcsMMU_STLB *stlb; - struct _gcsMMU_STLB **stlbs = Mmu->stlbs; + struct _gcsMMU_STLB_CHUNK *stlb; + struct _gcsMMU_STLB_CHUNK **stlbs = Mmu->stlbs; gctUINT32 offset = _MtlbOffset(Address); gctUINT32 mtlbEntry; gctBOOL ace = gckHARDWARE_IsFeatureAvailable(Mmu->hardware, gcvFEATURE_ACE); @@ -2348,8 +2345,8 @@ gckMMU_FreePagesEx( #if gcdUSE_MMU_EXCEPTION gctUINT32 i; - struct _gcsMMU_STLB *stlb; - struct _gcsMMU_STLB **stlbs = Mmu->stlbs; + struct _gcsMMU_STLB_CHUNK *stlb; + struct _gcsMMU_STLB_CHUNK **stlbs = Mmu->stlbs; #endif gcmkHEADER_ARG("Mmu=0x%x Address=0x%x PageCount=%lu", @@ -2414,6 +2411,7 @@ gckMMU_Flush( #endif gctUINT32 mask; gctINT i; + gctUINT j; if (Type == gcvSURF_VERTEX || Type == gcvSURF_INDEX) { @@ -2439,13 +2437,20 @@ gckMMU_Flush( hardware = sharedPageTable->hardwares[i]; if (hardware) { - gcmkVERIFY_OK(gckOS_AtomSetMask(hardware->pageTableDirty, mask)); + for (j = 0; j < gcvENGINE_GPU_ENGINE_COUNT; j++) + { + gcmkVERIFY_OK(gckOS_AtomSetMask(hardware->pageTableDirty[j], mask)); + } } } #else hardware = Mmu->hardware; - gcmkVERIFY_OK( - gckOS_AtomSetMask(hardware->pageTableDirty, mask)); + + for (j = 0 ; j < gcvENGINE_GPU_ENGINE_COUNT; j++) + { + gcmkVERIFY_OK( + gckOS_AtomSetMask(hardware->pageTableDirty[j], mask)); + } { gcsLISTHEAD_PTR hardwareHead; @@ -2455,8 +2460,11 @@ gckMMU_Flush( if (hardware != Mmu->hardware) { - gcmkVERIFY_OK( - gckOS_AtomSetMask(hardware->pageTableDirty, mask)); + for (j = 0 ; j < gcvENGINE_GPU_ENGINE_COUNT; j++) + { + gcmkVERIFY_OK( + gckOS_AtomSetMask(hardware->pageTableDirty[j], mask)); + } } } } @@ -2514,23 +2522,32 @@ gckMMU_DumpPageTableEntry( } else { - gcsMMU_STLB_PTR stlbObj = Mmu->staticSTLB; + gcsMMU_STLB_CHUNK_PTR stlbChunkObj = Mmu->staticSTLB; gctUINT32 entry = Mmu->mtlbLogical[mtlb]; stlb = (Address & gcdMMU_STLB_64K_MASK) >> gcdMMU_STLB_64K_SHIFT; entry &= 0xFFFFFFF0; - while (stlbObj) + while (stlbChunkObj) { - - if (entry == stlbObj->physBase) + gctUINT i; + gctBOOL found = gcvFALSE; + for (i = 0; i < stlbChunkObj->mtlbEntryNum; ++i) { - gcmkPRINT(" Page table entry = 0x%08X", stlbObj->logical[stlb]); - break; + gctPHYS_ADDR_T stlbPhysBase = stlbChunkObj->physBase + (i * gcdMMU_STLB_64K_SIZE); + gctUINT32_PTR stlbLogical = + (gctUINT32_PTR)((gctUINT8_PTR)stlbChunkObj->logical + (i * gcdMMU_STLB_64K_SIZE)); + if (entry == stlbPhysBase) + { + gcmkPRINT(" Page table entry = 0x%08X", stlbLogical[stlb]); + found = gcvTRUE; + break; + } } - - stlbObj = stlbObj->next; + if (found) + break; + stlbChunkObj = stlbChunkObj->next; } } #endif @@ -2671,7 +2688,8 @@ gckMMU_IsFlatMapped( ) { gceSTATUS status; - + gctUINT32 i; + gctBOOL inFlatmapping = gcvFALSE; gcmkHEADER(); gcmkVERIFY_ARGUMENT(In != gcvNULL); @@ -2681,9 +2699,17 @@ gckMMU_IsFlatMapped( gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); } - *In = (Physical >= Mmu->flatMappingStart) && (Physical < Mmu->flatMappingEnd) - ? gcvTRUE - : gcvFALSE; + for (i = 0; i < Mmu->flatMappingRangeCount; i++) + { + if ((Physical >= Mmu->flatMappingRanges[i].start) && + (Physical < Mmu->flatMappingRanges[i].end)) + { + inFlatmapping = gcvTRUE; + break; + } + } + + *In = inFlatmapping; gcmkFOOTER_NO(); return gcvSTATUS_OK; 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 f99923e169cc..c6423d1e3bad 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 @@ -284,6 +284,7 @@ gceSTATUS gckVGKERNEL_Dispatch( gctPHYS_ADDR physical = gcvNULL; gctPOINTER logical = gcvNULL; gctSIZE_T bytes = 0; + gctBOOL powerMutexAcquired = gcvFALSE; gcmkHEADER_ARG("Kernel=0x%x Interface=0x%x ", Kernel, Interface); @@ -414,7 +415,8 @@ gceSTATUS gckVGKERNEL_Dispatch( Kernel, gcmINT2PTR(kernelInterface->u.MapMemory.physical), (gctSIZE_T) kernelInterface->u.MapMemory.bytes, - gcmUINT64_TO_PTR(kernelInterface->u.MapMemory.logical) + gcmUINT64_TO_PTR(kernelInterface->u.MapMemory.logical), + processID )); break; @@ -515,7 +517,72 @@ gceSTATUS gckVGKERNEL_Dispatch( case gcvHAL_EVENT_COMMIT: gcmkERR_BREAK(gcvSTATUS_NOT_SUPPORTED); break; + case gcvHAL_READ_REGISTER: +#if gcdREGISTER_ACCESS_FROM_USER + { + gceCHIPPOWERSTATE power; + + gcmkONERROR(gckOS_AcquireMutex(Kernel->os, Kernel->vg->hardware->powerMutex, gcvINFINITE)); + powerMutexAcquired = gcvTRUE; + gcmkONERROR(gckVGHARDWARE_QueryPowerManagementState(Kernel->vg->hardware, + &power)); + if (power == gcvPOWER_ON) + { + /* Read a register. */ + gcmkONERROR(gckOS_ReadRegisterEx( + Kernel->os, + Kernel->core, + Interface->u.ReadRegisterData.address, + &Interface->u.ReadRegisterData.data)); + } + else + { + /* Chip is in power-state. */ + Interface->u.ReadRegisterData.data = 0; + status = gcvSTATUS_CHIP_NOT_READY; + } + gcmkONERROR(gckOS_ReleaseMutex(Kernel->os, Kernel->vg->hardware->powerMutex)); + powerMutexAcquired = gcvFALSE; + } +#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 + { + gceCHIPPOWERSTATE power; + + gcmkONERROR(gckOS_AcquireMutex(Kernel->os, Kernel->vg->hardware->powerMutex, gcvINFINITE)); + powerMutexAcquired = gcvTRUE; + gcmkONERROR(gckVGHARDWARE_QueryPowerManagementState(Kernel->vg->hardware, + &power)); + if (power == gcvPOWER_ON) + { + /* Write a register. */ + gcmkONERROR( + gckOS_WriteRegisterEx(Kernel->os, + Kernel->core, + Interface->u.WriteRegisterData.address, + Interface->u.WriteRegisterData.data)); + } + else + { + /* Chip is in power-state. */ + Interface->u.WriteRegisterData.data = 0; + status = gcvSTATUS_CHIP_NOT_READY; + } + gcmkONERROR(gckOS_ReleaseMutex(Kernel->os, Kernel->vg->hardware->powerMutex)); + powerMutexAcquired = gcvFALSE; + } +#else + /* No access from user land to write registers. */ + status = gcvSTATUS_NOT_SUPPORTED; +#endif + break; default: /* Invalid command, try gckKERNEL_Dispatch */ status = gckKERNEL_Dispatch(Kernel, gcvNULL, gcvTRUE, Interface); @@ -524,6 +591,10 @@ gceSTATUS gckVGKERNEL_Dispatch( OnError: /* Save status. */ kernelInterface->status = status; + if (powerMutexAcquired == gcvTRUE) + { + gcmkVERIFY_OK(gckOS_ReleaseMutex(Kernel->os, Kernel->vg->hardware->powerMutex)); + } gcmkFOOTER(); 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 543c727f7c20..1f9924789d00 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 @@ -430,11 +430,12 @@ gckVIDMEM_Construct( memory->os = Os; /* Set video memory heap information. */ - memory->baseAddress = BaseAddress; - memory->bytes = heapBytes; - memory->freeBytes = heapBytes; - memory->threshold = Threshold; - memory->mutex = gcvNULL; + memory->baseAddress = BaseAddress; + memory->bytes = heapBytes; + memory->freeBytes = heapBytes; + memory->minFreeBytes = heapBytes; + memory->threshold = Threshold; + memory->mutex = gcvNULL; BaseAddress = 0; @@ -1045,7 +1046,12 @@ gckVIDMEM_AllocateLinear( #endif /* Adjust the number of free bytes. */ - Memory->freeBytes -= node->VidMem.bytes; + Memory->freeBytes -= node->VidMem.bytes; + + if (Memory->freeBytes < Memory->minFreeBytes) + { + Memory->minFreeBytes = Memory->freeBytes; + } #if gcdENABLE_VG node->VidMem.kernelVirtual = gcvNULL; @@ -2632,7 +2638,7 @@ gckVIDMEM_NODE_Allocate( gcmkONERROR(gckOS_CreateMutex(os, &node->mutex)); - for (i = 0; i < gcvENGINE_COUNT; i++) + for (i = 0; i < gcvENGINE_GPU_ENGINE_COUNT; i++) { gcmkONERROR(gckOS_CreateSignal(os, gcvFALSE, &node->sync[i].signal)); } @@ -2668,7 +2674,7 @@ OnError: gcmkVERIFY_OK(gckOS_AtomDestroy(os, node->reference)); } - for (i = 0; i < gcvENGINE_COUNT; i++) + for (i = 0; i < gcvENGINE_GPU_ENGINE_COUNT; i++) { if (node->sync[i].signal != gcvNULL) { @@ -2718,7 +2724,7 @@ gckVIDMEM_NODE_Dereference( #endif gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Node->mutex)); - for (i = 0; i < gcvENGINE_COUNT; i++) + for (i = 0; i < gcvENGINE_GPU_ENGINE_COUNT; i++) { if (Node->sync[i].signal != gcvNULL) { 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 index 29923b0247a2..0e929401fffd 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_feature_database.h +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_feature_database.h @@ -53,7 +53,7 @@ *****************************************************************************/ -/*Auto created on 2017-03-27 17:24*/ +/*Auto created on 2017-07-28 05:38*/ #ifndef _gc_feature_database_h_ #define _gc_feature_database_h_ @@ -93,6 +93,8 @@ typedef struct gctUINT32 ClusterAliveMask; gctUINT32 TPEngine_PwlLUTCount; gctUINT32 TPEngine_PwlLUTSize; + gctUINT32 VIP_SRAM_SIZE; + gctUINT32 TPEngine_CoreCount; gctUINT32 REG_FastClear:1; gctUINT32 REG_SpecialAntiAliasing:1; gctUINT32 REG_Pipe3D:1; @@ -442,6 +444,13 @@ typedef struct gctUINT32 MC_FCCACHE_BYTEMASK:1; gctUINT32 SH_MULTI_WG_PACK_FIX:1; gctUINT32 DC_OVERLAY_SCALING:1; + gctUINT32 DC_SOURCE_ROTATION:1; + gctUINT32 DC_TILED:1; + gctUINT32 DC_YUV_L1:1; + gctUINT32 DC_D30_OUTPUT:1; + gctUINT32 DC_MMU:1; + gctUINT32 DC_COMPRESSION:1; + gctUINT32 DC_QOS:1; gctUINT32 PE_ADVANCE_BLEND_PART0:1; gctUINT32 FE_PATCHLIST_FETCH_FIX:1; gctUINT32 RA_CG_FIX:1; @@ -462,6 +471,14 @@ typedef struct gctUINT32 SH_GM_USC_UNALLOC:1; gctUINT32 SH_END_OF_BB:1; gctUINT32 VIP_V7:1; + gctUINT32 TX_BORDER_CLAMP_FIX:1; + gctUINT32 SH_IMG_LD_LASTPIXEL_FIX:1; + gctUINT32 ASYNC_BLT:1; + gctUINT32 ASYNC_FE_FENCE_FIX:1; + gctUINT32 PSCS_THROTTLE:1; + gctUINT32 SEPARATE_LS:1; + gctUINT32 MCFE:1; + gctUINT32 WIDELINE_TRIANGLE_EMU:1; } gcsFEATURE_DATABASE; static gcsFEATURE_DATABASE gChipInfo[] = { @@ -500,6 +517,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -849,6 +868,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x1, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x1, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x1, /* gcFEATURE_BIT_DC_MMU */ + 0x1, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x1, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -869,15 +895,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc200_4650 */ + /* dc0000_5560 */ { - 0x200, /* ChipID */ - 0x4650, /* ChipRevision */ - 0x0, /* ProductID */ + 0x0, /* ChipID */ + 0x5560, /* ChipRevision */ + 0x2000002, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ + 0x302, /* CustomerID */ + 0x3, /* PatchVersion */ 0x0, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -905,6 +939,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -1254,6 +1290,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x1, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x1, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x1, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -1274,11 +1317,19 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc200_4621 */ + /* gc200_4650 */ { 0x200, /* ChipID */ - 0x4621, /* ChipRevision */ + 0x4650, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ @@ -1310,6 +1361,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -1394,18 +1447,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ 0x0, /* gcFEATURE_BIT_REG_New2D */ 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ - 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */ - 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */ - 0x0, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ + 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ + 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ + 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ 0x0, /* gcFEATURE_BIT_REG_MMU */ - 0x0, /* gcFEATURE_BIT_REG_WideLine */ + 0x1, /* gcFEATURE_BIT_REG_WideLine */ 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */ - 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */ + 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */ 0x0, /* gcFEATURE_BIT_REG_LineLoop */ 0x0, /* gcFEATURE_BIT_REG_LogicOp */ 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ @@ -1422,23 +1475,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ - 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ - 0x0, /* gcFEATURE_BIT_REG_TileFiller */ - 0x0, /* gcFEATURE_BIT_REG_YUVStandard */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_MixedStreams */ - 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */ - 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */ + 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 */ @@ -1465,20 +1518,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */ 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ 0x0, /* gcFEATURE_BIT_REG_NewHZ */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */ + 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 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */ @@ -1487,7 +1540,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_Halti2 */ - 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */ 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */ 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */ @@ -1499,7 +1552,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ - 0x0, /* gcFEATURE_BIT_REG_DESupertile */ + 0x1, /* gcFEATURE_BIT_REG_DESupertile */ 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */ @@ -1509,7 +1562,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_EEZ */ 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ - 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ + 0x1, /* gcFEATURE_BIT_REG_MultiSrcV15 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */ 0x0, /* gcFEATURE_BIT_REG_Halti3 */ 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ @@ -1659,6 +1712,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -1679,17 +1739,25 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc300_4650 */ + /* gc200_4621 */ { - 0x300, /* ChipID */ - 0x4650, /* ChipRevision */ - 0x5203, /* ProductID */ + 0x200, /* ChipID */ + 0x4621, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x5, /* PatchVersion */ - 0x1, /* FormalRelease */ - 0x4, /* gcFEATURE_VALUE_Streams */ + 0x0, /* PatchVersion */ + 0x0, /* FormalRelease */ + 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ @@ -1698,7 +1766,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ 0x100, /* gcFEATURE_VALUE_InstructionCount */ - 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ + 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x8, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ @@ -1715,18 +1783,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 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 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_FastScaler */ + 0x0, /* gcFEATURE_BIT_REG_FastScaler */ 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ @@ -1799,18 +1869,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ 0x0, /* gcFEATURE_BIT_REG_New2D */ 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ - 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ - 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ - 0x1, /* gcFEATURE_BIT_REG_MMU */ - 0x1, /* gcFEATURE_BIT_REG_WideLine */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */ + 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */ 0x0, /* gcFEATURE_BIT_REG_LineLoop */ 0x0, /* gcFEATURE_BIT_REG_LogicOp */ 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ @@ -1827,23 +1897,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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_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 */ - 0x1, /* gcFEATURE_BIT_REG_MixedStreams */ - 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */ - 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ + 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 */ @@ -1870,20 +1940,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */ 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ 0x0, /* gcFEATURE_BIT_REG_NewHZ */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */ @@ -1892,7 +1962,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_Halti2 */ - 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */ 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */ @@ -1904,7 +1974,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ - 0x1, /* gcFEATURE_BIT_REG_DESupertile */ + 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */ @@ -1914,7 +1984,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_EEZ */ 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ - 0x1, /* gcFEATURE_BIT_REG_MultiSrcV15 */ + 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */ 0x0, /* gcFEATURE_BIT_REG_Halti3 */ 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ @@ -1924,7 +1994,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -2064,6 +2134,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -2084,15 +2161,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc300_4650_guoke */ + /* gc300_4650 */ { 0x300, /* ChipID */ 0x4650, /* ChipRevision */ - 0x0, /* ProductID */ + 0x5203, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x4, /* PatchVersion */ + 0x5, /* PatchVersion */ 0x1, /* FormalRelease */ 0x4, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -2120,6 +2205,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -2469,6 +2556,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -2489,16 +2583,24 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc300_4_6_6_rc0 */ + /* gc300_4650_guoke */ { 0x300, /* ChipID */ - 0x4660, /* ChipRevision */ - 0x5203, /* ProductID */ + 0x4650, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ - 0x0, /* FormalRelease */ + 0x4, /* PatchVersion */ + 0x1, /* FormalRelease */ 0x4, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ @@ -2525,6 +2627,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -2734,7 +2838,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -2852,7 +2956,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ - 0x1, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ + 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 */ @@ -2874,6 +2978,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -2894,33 +3005,41 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc320_5007 */ + /* gc300_4_6_6_rc0 */ { - 0x320, /* ChipID */ - 0x5007, /* ChipRevision */ - 0x0, /* ProductID */ + 0x300, /* ChipID */ + 0x4660, /* ChipRevision */ + 0x5203, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ - 0x1, /* FormalRelease */ - 0x1, /* gcFEATURE_VALUE_Streams */ + 0x0, /* FormalRelease */ + 0x4, /* 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_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 */ - 0x100, /* gcFEATURE_VALUE_NumberOfConstants */ + 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 */ - 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ @@ -2930,6 +3049,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -2970,7 +3091,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */ 0x1, /* gcFEATURE_BIT_REG_2DPE20 */ - 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable */ 0x1, /* gcFEATURE_BIT_REG_Render8K */ 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */ 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */ @@ -2991,17 +3112,17 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ - 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ + 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_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_BugFixes3 */ + 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ 0x0, /* gcFEATURE_BIT_REG_L2Windowing */ @@ -3012,20 +3133,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */ - 0x0, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ - 0x0, /* gcFEATURE_BIT_REG_MMU */ - 0x0, /* gcFEATURE_BIT_REG_WideLine */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */ + 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */ 0x0, /* gcFEATURE_BIT_REG_LineLoop */ 0x0, /* gcFEATURE_BIT_REG_LogicOp */ 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ @@ -3042,23 +3163,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ - 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ - 0x0, /* gcFEATURE_BIT_REG_TileFiller */ - 0x0, /* gcFEATURE_BIT_REG_YUVStandard */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_MixedStreams */ - 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */ - 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */ + 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 */ @@ -3085,20 +3206,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */ 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ 0x0, /* gcFEATURE_BIT_REG_NewHZ */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */ + 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 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */ @@ -3107,7 +3228,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_Halti2 */ - 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */ 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */ 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */ @@ -3119,7 +3240,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ - 0x0, /* gcFEATURE_BIT_REG_DESupertile */ + 0x1, /* gcFEATURE_BIT_REG_DESupertile */ 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */ @@ -3129,7 +3250,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_EEZ */ 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ - 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ + 0x1, /* gcFEATURE_BIT_REG_MultiSrcV15 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */ 0x0, /* gcFEATURE_BIT_REG_Halti3 */ 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ @@ -3188,7 +3309,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_RS_NEW_BASEADDR */ 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */ 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ @@ -3257,7 +3378,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ - 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ + 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 */ @@ -3279,6 +3400,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -3299,11 +3427,19 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc320_5220 */ + /* gc320_5007 */ { 0x320, /* ChipID */ - 0x5220, /* ChipRevision */ + 0x5007, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ @@ -3311,21 +3447,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ - 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */ + 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 */ - 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ @@ -3335,6 +3471,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -3394,7 +3532,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ 0x0, /* gcFEATURE_BIT_REG_VAA */ 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ - 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ @@ -3419,18 +3557,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ 0x1, /* gcFEATURE_BIT_REG_New2D */ 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ - 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ + 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 */ - 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_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 */ @@ -3438,25 +3576,25 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_LinearPE */ 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ - 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ + 0x0, /* 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_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 */ - 0x1, /* gcFEATURE_BIT_REG_MixedStreams */ + 0x0, /* gcFEATURE_BIT_REG_MixedStreams */ 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */ 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */ @@ -3593,7 +3731,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_RS_NEW_BASEADDR */ 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */ 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ @@ -3603,7 +3741,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_SUPPORT_MOVAI */ 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */ 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */ 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */ @@ -3684,6 +3822,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -3704,11 +3849,19 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc320_5303 */ + /* gc320_5220 */ { 0x320, /* ChipID */ - 0x5303, /* ChipRevision */ + 0x5220, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ @@ -3740,6 +3893,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -3801,7 +3956,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ - 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */ + 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ @@ -3850,9 +4005,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti1 */ 0x0, /* gcFEATURE_BIT_REG_RGB888 */ 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ - 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ + 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ - 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */ 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */ 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ 0x1, /* gcFEATURE_BIT_REG_TileFiller */ @@ -3862,15 +4017,15 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_L2CacheFor2D420 */ + 0x0, /* 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_DecompressZ16 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */ + 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */ 0x0, /* gcFEATURE_BIT_REG_OclOnly */ - 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ + 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */ 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ @@ -3896,7 +4051,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ 0x0, /* gcFEATURE_BIT_REG_NewHZ */ 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */ @@ -4089,6 +4244,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -4109,15 +4271,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc320_5303_1 */ + /* gc320_5303 */ { 0x320, /* ChipID */ 0x5303, /* ChipRevision */ - 0x5202, /* ProductID */ - 0x1, /* EcoID */ + 0x0, /* ProductID */ + 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x4, /* PatchVersion */ + 0x0, /* PatchVersion */ 0x1, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -4145,6 +4315,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -4354,7 +4526,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -4494,6 +4666,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -4514,13 +4693,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc320_5340 */ + /* gc320_5303_1 */ { 0x320, /* ChipID */ - 0x5340, /* ChipRevision */ - 0x0, /* ProductID */ - 0x0, /* EcoID */ + 0x5303, /* ChipRevision */ + 0x5202, /* ProductID */ + 0x1, /* EcoID */ 0x0, /* CustomerID */ 0x4, /* PatchVersion */ 0x1, /* FormalRelease */ @@ -4550,6 +4737,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -4736,7 +4925,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_CSCV2 */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */ - 0x1, /* gcFEATURE_BIT_REG_Compression2D */ + 0x0, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ @@ -4759,7 +4948,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -4899,6 +5088,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -4919,16 +5115,24 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc320c_5341 */ + /* gc320_5340 */ { 0x320, /* ChipID */ - 0x5341, /* ChipRevision */ + 0x5340, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ - 0x0, /* FormalRelease */ + 0x4, /* PatchVersion */ + 0x1, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ @@ -4940,7 +5144,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x100, /* gcFEATURE_VALUE_InstructionCount */ 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0xc, /* gcFEATURE_VALUE_VaryingCount */ + 0x8, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ 0x0, /* gcFEATURE_VALUE_L1CacheSize */ 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ @@ -4955,25 +5159,27 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x1, /* gcFEATURE_BIT_REG_FastClear */ - 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ - 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_ZCompression */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ + 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_BufferInterleaving */ 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */ 0x0, /* gcFEATURE_BIT_REG_NoScaler */ 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */ @@ -5009,10 +5215,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */ 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ - 0x1, /* gcFEATURE_BIT_REG_MC20 */ + 0x0, /* gcFEATURE_BIT_REG_MC20 */ 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ - 0x1, /* gcFEATURE_BIT_REG_VAA */ + 0x0, /* gcFEATURE_BIT_REG_VAA */ 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ @@ -5024,7 +5230,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ - 0x1, /* gcFEATURE_BIT_REG_TextureStride */ + 0x0, /* gcFEATURE_BIT_REG_TextureStride */ 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */ 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ @@ -5033,59 +5239,59 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */ 0x1, /* gcFEATURE_BIT_REG_PixelDither */ 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ - 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */ - 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */ - 0x1, /* gcFEATURE_BIT_REG_Halti0 */ - 0x1, /* gcFEATURE_BIT_REG_CorrectOverflowVG */ + 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_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_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 */ - 0x1, /* gcFEATURE_BIT_REG_PESwizzle */ - 0x1, /* gcFEATURE_BIT_REG_EndEvent */ - 0x1, /* gcFEATURE_BIT_REG_S1S8 */ - 0x1, /* gcFEATURE_BIT_REG_Halti1 */ + 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_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ - 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x1, /* 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_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 */ + 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */ 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */ - 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */ + 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */ 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */ - 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */ + 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ 0x0, /* gcFEATURE_BIT_REG_OclOnly */ - 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */ + 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ @@ -5111,7 +5317,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ 0x0, /* gcFEATURE_BIT_REG_NewHZ */ 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */ - 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */ @@ -5141,7 +5347,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_CSCV2 */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */ - 0x0, /* gcFEATURE_BIT_REG_Compression2D */ + 0x1, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ @@ -5188,14 +5394,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */ - 0x1, /* gcFEATURE_BIT_VMSAA */ + 0x0, /* 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_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_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 */ @@ -5304,6 +5510,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -5324,12 +5537,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc320_5341 */ + /* gc320c_5341 */ { 0x320, /* ChipID */ 0x5341, /* ChipRevision */ - 0x3202, /* ProductID */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ @@ -5345,7 +5566,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x100, /* gcFEATURE_VALUE_InstructionCount */ 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x8, /* gcFEATURE_VALUE_VaryingCount */ + 0xc, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ 0x0, /* gcFEATURE_VALUE_L1CacheSize */ 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ @@ -5360,25 +5581,27 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x0, /* gcFEATURE_BIT_REG_FastClear */ - 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ - 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 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 */ + 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 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */ + 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */ 0x0, /* gcFEATURE_BIT_REG_NoScaler */ 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */ @@ -5414,10 +5637,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */ 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ - 0x0, /* gcFEATURE_BIT_REG_MC20 */ + 0x1, /* gcFEATURE_BIT_REG_MC20 */ 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ - 0x0, /* gcFEATURE_BIT_REG_VAA */ + 0x1, /* gcFEATURE_BIT_REG_VAA */ 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ @@ -5429,7 +5652,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ - 0x0, /* gcFEATURE_BIT_REG_TextureStride */ + 0x1, /* gcFEATURE_BIT_REG_TextureStride */ 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */ 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ @@ -5438,59 +5661,59 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */ 0x1, /* gcFEATURE_BIT_REG_PixelDither */ 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ - 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */ - 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */ - 0x0, /* gcFEATURE_BIT_REG_Halti0 */ - 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */ + 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ - 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */ - 0x0, /* gcFEATURE_BIT_REG_LinearPE */ - 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ - 0x0, /* gcFEATURE_BIT_REG_EndEvent */ - 0x0, /* gcFEATURE_BIT_REG_S1S8 */ - 0x0, /* gcFEATURE_BIT_REG_Halti1 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ + 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ - 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ + 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_ThreadWalkerInPS */ + 0x0, /* gcFEATURE_BIT_REG_TileFiller */ + 0x0, /* gcFEATURE_BIT_REG_YUVStandard */ 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */ - 0x1, /* gcFEATURE_BIT_REG_YUVConversion */ + 0x0, /* gcFEATURE_BIT_REG_YUVConversion */ 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */ 0x0, /* gcFEATURE_BIT_REG_Interleaver */ 0x1, /* gcFEATURE_BIT_REG_MixedStreams */ - 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ + 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */ 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */ - 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */ + 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */ 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */ - 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ + 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */ 0x0, /* gcFEATURE_BIT_REG_OclOnly */ - 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ + 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */ 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ @@ -5516,7 +5739,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ 0x0, /* gcFEATURE_BIT_REG_NewHZ */ 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */ @@ -5559,7 +5782,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_EEZ */ 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ - 0x1, /* gcFEATURE_BIT_REG_MultiSrcV15 */ + 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */ 0x0, /* gcFEATURE_BIT_REG_Halti3 */ 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ @@ -5569,7 +5792,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -5593,14 +5816,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */ - 0x0, /* gcFEATURE_BIT_VMSAA */ + 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_MULTI_SRC_BLT_1_5_ENHANCEMENT */ + 0x1, /* 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 */ + 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 */ @@ -5709,6 +5932,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -5729,14 +5959,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc520l_5_3_5_rc0 */ + /* gc320_5341 */ { 0x320, /* ChipID */ - 0x5350, /* ChipRevision */ - 0x5202, /* ProductID */ + 0x5341, /* ChipRevision */ + 0x3202, /* ProductID */ 0x0, /* EcoID */ - 0x206, /* CustomerID */ + 0x0, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ @@ -5765,6 +6003,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -5882,7 +6122,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ 0x1, /* gcFEATURE_BIT_REG_TileFiller */ 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ - 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */ + 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */ 0x1, /* gcFEATURE_BIT_REG_YUVConversion */ 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */ 0x0, /* gcFEATURE_BIT_REG_Interleaver */ @@ -5964,7 +6204,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_EEZ */ 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ - 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ + 0x1, /* gcFEATURE_BIT_REG_MultiSrcV15 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */ 0x0, /* gcFEATURE_BIT_REG_Halti3 */ 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ @@ -6114,6 +6354,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -6134,14 +6381,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc355_v121_rc5 */ + /* gc520l_5_3_5_rc0 */ { - 0x355, /* ChipID */ - 0x1215, /* ChipRevision */ - 0x0, /* ProductID */ + 0x320, /* ChipID */ + 0x5350, /* ChipRevision */ + 0x5202, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ + 0x206, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ @@ -6170,8 +6425,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ - 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ + 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ 0x0, /* gcFEATURE_BIT_REG_DebugMode */ @@ -6179,7 +6436,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */ 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ - 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ + 0x1, /* gcFEATURE_BIT_REG_Pipe2D */ 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ @@ -6195,13 +6452,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -6209,63 +6466,63 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */ - 0x0, /* gcFEATURE_BIT_REG_2DPE20 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_VG20 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ - 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ + 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ 0x0, /* gcFEATURE_BIT_REG_VGFilter */ - 0x1, /* gcFEATURE_BIT_REG_VG21 */ - 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */ - 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ 0x0, /* gcFEATURE_BIT_REG_VAA */ 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ - 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 0x1, /* 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */ - 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ - 0x1, /* gcFEATURE_BIT_REG_AutoRestartTS */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_PixelDither */ - 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */ + 0x1, /* gcFEATURE_BIT_REG_PixelDither */ + 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ - 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ + 0x1, /* 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 */ + 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 */ - 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 */ + 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 */ @@ -6273,7 +6530,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_LinearPE */ 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ - 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ 0x0, /* gcFEATURE_BIT_REG_EndEvent */ 0x0, /* gcFEATURE_BIT_REG_S1S8 */ @@ -6282,25 +6539,25 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_MixedStreams */ - 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */ - 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */ + 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_NewFeatures0 */ 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ @@ -6326,7 +6583,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ 0x0, /* gcFEATURE_BIT_REG_NewHZ */ 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */ - 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */ @@ -6379,7 +6636,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -6438,7 +6695,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -6519,6 +6776,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -6539,12 +6803,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc355_v121x */ + /* gc355_v121_rc5 */ { 0x355, /* ChipID */ - 0x1217, /* ChipRevision */ - 0x3003550, /* ProductID */ + 0x1215, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ @@ -6575,6 +6847,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -6663,7 +6937,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */ 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */ 0x0, /* gcFEATURE_BIT_REG_Halti0 */ - 0x1, /* gcFEATURE_BIT_REG_CorrectOverflowVG */ + 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */ 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */ 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */ 0x0, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ @@ -6691,7 +6965,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ 0x0, /* gcFEATURE_BIT_REG_TileFiller */ - 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ + 0x0, /* gcFEATURE_BIT_REG_YUVStandard */ 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */ 0x0, /* gcFEATURE_BIT_REG_YUVConversion */ 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */ @@ -6876,9 +7150,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ @@ -6891,11 +7165,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ @@ -6924,6 +7198,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -6944,23 +7225,31 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc400_4633 */ + /* gc355_v121x */ { - 0x400, /* ChipID */ - 0x4633, /* ChipRevision */ - 0x0, /* ProductID */ + 0x355, /* ChipID */ + 0x1217, /* ChipRevision */ + 0x3003550, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ - 0x1, /* FormalRelease */ - 0x4, /* gcFEATURE_VALUE_Streams */ - 0x20, /* gcFEATURE_VALUE_TempRegisters */ - 0x40, /* gcFEATURE_VALUE_ThreadCount */ + 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 */ - 0x80, /* gcFEATURE_VALUE_VertexOutputBufferSize */ + 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ 0x100, /* gcFEATURE_VALUE_InstructionCount */ 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */ @@ -6980,38 +7269,40 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ - 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_MSAA */ + 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */ + 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ - 0x1, /* gcFEATURE_BIT_REG_Pipe2D */ + 0x0, /* 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_FastScaler */ + 0x1, /* 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_MinArea */ + 0x0, /* gcFEATURE_BIT_REG_NoEZ */ 0x0, /* gcFEATURE_BIT_REG_No422Texture */ - 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_HalfTXCache */ + 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_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 */ - 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ + 0x0, /* gcFEATURE_BIT_REG_FE20BitIndex */ 0x1, /* gcFEATURE_BIT_REG_FlipY */ 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ @@ -7019,61 +7310,61 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ - 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ + 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ + 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ 0x0, /* gcFEATURE_BIT_REG_VGFilter */ - 0x0, /* gcFEATURE_BIT_REG_VG21 */ - 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ - 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ - 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ + 0x1, /* gcFEATURE_BIT_REG_AutoRestartTS */ + 0x0, /* 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_PixelDither */ + 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */ 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ - 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ + 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */ 0x0, /* gcFEATURE_BIT_REG_New2D */ 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ - 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ - 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_WideLine */ + 0x0, /* gcFEATURE_BIT_REG_WideLine */ 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */ 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */ 0x0, /* gcFEATURE_BIT_REG_LineLoop */ @@ -7096,7 +7387,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ 0x0, /* gcFEATURE_BIT_REG_TileFiller */ - 0x0, /* gcFEATURE_BIT_REG_YUVStandard */ + 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */ 0x0, /* gcFEATURE_BIT_REG_YUVConversion */ 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */ @@ -7281,9 +7572,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -7296,11 +7587,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -7329,6 +7620,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -7349,15 +7647,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc400_4645 */ + /* gc400_4633 */ { 0x400, /* ChipID */ - 0x4645, /* ChipRevision */ + 0x4633, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x4, /* PatchVersion */ + 0x0, /* PatchVersion */ 0x1, /* FormalRelease */ 0x4, /* gcFEATURE_VALUE_Streams */ 0x20, /* gcFEATURE_VALUE_TempRegisters */ @@ -7368,7 +7674,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x80, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ 0x100, /* gcFEATURE_VALUE_InstructionCount */ - 0x240, /* gcFEATURE_VALUE_NumberOfConstants */ + 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x8, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ @@ -7385,23 +7691,25 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x1, /* gcFEATURE_BIT_REG_FastClear */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_ZCompression */ - 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */ - 0x1, /* gcFEATURE_BIT_REG_MSAA */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ + 0x0, /* gcFEATURE_BIT_REG_YUV420Tiler */ 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ 0x1, /* gcFEATURE_BIT_REG_MinArea */ - 0x0, /* gcFEATURE_BIT_REG_NoEZ */ + 0x1, /* gcFEATURE_BIT_REG_NoEZ */ 0x0, /* gcFEATURE_BIT_REG_No422Texture */ 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */ @@ -7480,7 +7788,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_MMU */ 0x1, /* gcFEATURE_BIT_REG_WideLine */ 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */ - 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */ + 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */ 0x0, /* gcFEATURE_BIT_REG_LineLoop */ 0x0, /* gcFEATURE_BIT_REG_LogicOp */ 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ @@ -7497,23 +7805,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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_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_MixedStreams */ 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */ + 0x0, /* 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_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 */ @@ -7540,13 +7848,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */ 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ 0x0, /* gcFEATURE_BIT_REG_NewHZ */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */ + 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_DENoGamma */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ @@ -7711,7 +8019,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */ 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ - 0x1, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ + 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 */ @@ -7734,6 +8042,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -7754,16 +8069,24 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc400L_0x465x */ + /* gc400_4645 */ { 0x400, /* ChipID */ - 0x4652, /* ChipRevision */ - 0x70001, /* ProductID */ + 0x4645, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x7, /* PatchVersion */ - 0x0, /* FormalRelease */ + 0x4, /* PatchVersion */ + 0x1, /* FormalRelease */ 0x4, /* gcFEATURE_VALUE_Streams */ 0x20, /* gcFEATURE_VALUE_TempRegisters */ 0x40, /* gcFEATURE_VALUE_ThreadCount */ @@ -7773,7 +8096,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x80, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ 0x100, /* gcFEATURE_VALUE_InstructionCount */ - 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x240, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x8, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ @@ -7790,29 +8113,31 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x0, /* gcFEATURE_BIT_REG_FastClear */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ - 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_ZCompression */ + 0x1, /* 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_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_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 */ + 0x0, /* gcFEATURE_BIT_REG_HalfPECache */ 0x1, /* gcFEATURE_BIT_REG_HalfTXCache */ 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */ 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */ @@ -7882,7 +8207,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ - 0x1, /* gcFEATURE_BIT_REG_MMU */ + 0x0, /* gcFEATURE_BIT_REG_MMU */ 0x1, /* gcFEATURE_BIT_REG_WideLine */ 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */ 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */ @@ -7890,7 +8215,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_LogicOp */ 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */ - 0x1, /* gcFEATURE_BIT_REG_LinearPE */ + 0x0, /* gcFEATURE_BIT_REG_LinearPE */ 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ @@ -7912,7 +8237,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */ 0x0, /* gcFEATURE_BIT_REG_Interleaver */ 0x1, /* gcFEATURE_BIT_REG_MixedStreams */ - 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ + 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */ 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */ 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */ @@ -7958,7 +8283,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */ - 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */ @@ -7967,7 +8292,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_Halti2 */ - 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */ 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */ @@ -7999,7 +8324,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -8116,7 +8441,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */ 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ - 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ + 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 */ @@ -8139,6 +8464,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -8159,8 +8491,16 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000nano_0x4652 */ + /* gc400L_0x465x */ { 0x400, /* ChipID */ 0x4652, /* ChipRevision */ @@ -8168,7 +8508,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x7, /* PatchVersion */ - 0x1, /* FormalRelease */ + 0x0, /* FormalRelease */ 0x4, /* gcFEATURE_VALUE_Streams */ 0x20, /* gcFEATURE_VALUE_TempRegisters */ 0x40, /* gcFEATURE_VALUE_ThreadCount */ @@ -8195,6 +8535,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -8544,6 +8886,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -8564,6 +8913,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000nano_0x4652 */ { @@ -8571,8 +8928,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x4652, /* ChipRevision */ 0x70001, /* ProductID */ 0x0, /* EcoID */ - 0x100, /* CustomerID */ - 0x9, /* PatchVersion */ + 0x0, /* CustomerID */ + 0x7, /* PatchVersion */ 0x1, /* FormalRelease */ 0x4, /* gcFEATURE_VALUE_Streams */ 0x20, /* gcFEATURE_VALUE_TempRegisters */ @@ -8600,6 +8957,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -8943,12 +9302,19 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -8969,26 +9335,34 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc420_5325 */ + /* gc7000nano_0x4652 */ { - 0x420, /* ChipID */ - 0x5325, /* ChipRevision */ - 0x0, /* ProductID */ + 0x400, /* ChipID */ + 0x4652, /* ChipRevision */ + 0x70001, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ - 0x2, /* PatchVersion */ + 0x100, /* CustomerID */ + 0x9, /* PatchVersion */ 0x1, /* FormalRelease */ - 0x1, /* gcFEATURE_VALUE_Streams */ - 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x100, /* gcFEATURE_VALUE_ThreadCount */ + 0x4, /* gcFEATURE_VALUE_Streams */ + 0x20, /* gcFEATURE_VALUE_TempRegisters */ + 0x40, /* gcFEATURE_VALUE_ThreadCount */ 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ 0x1, /* gcFEATURE_VALUE_NumShaderCores */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ - 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ + 0x80, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ 0x100, /* gcFEATURE_VALUE_InstructionCount */ - 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x8, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ @@ -9005,47 +9379,49 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x1, /* gcFEATURE_BIT_REG_FastClear */ - 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ - 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ - 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_ZCompression */ - 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */ - 0x1, /* gcFEATURE_BIT_REG_MSAA */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_FastScaler */ - 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_MinArea */ - 0x0, /* gcFEATURE_BIT_REG_NoEZ */ + 0x1, /* gcFEATURE_BIT_REG_MinArea */ + 0x1, /* gcFEATURE_BIT_REG_NoEZ */ 0x0, /* gcFEATURE_BIT_REG_No422Texture */ - 0x1, /* gcFEATURE_BIT_REG_BufferInterleaving */ + 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 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */ + 0x0, /* 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_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_CorrectAutoDisable */ 0x1, /* gcFEATURE_BIT_REG_Render8K */ 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */ 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */ @@ -9057,26 +9433,26 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_VGFilter */ 0x0, /* gcFEATURE_BIT_REG_VG21 */ 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */ - 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_V2Compression */ + 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_BugFixes3 */ + 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ 0x0, /* gcFEATURE_BIT_REG_L2Windowing */ @@ -9087,8 +9463,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_New2D */ + 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */ 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */ @@ -9099,16 +9475,16 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ 0x1, /* gcFEATURE_BIT_REG_MMU */ 0x1, /* gcFEATURE_BIT_REG_WideLine */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_LinearPE */ 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ - 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ 0x0, /* gcFEATURE_BIT_REG_EndEvent */ 0x0, /* gcFEATURE_BIT_REG_S1S8 */ @@ -9118,13 +9494,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x0, /* 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_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 */ @@ -9135,33 +9511,33 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */ 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ 0x0, /* gcFEATURE_BIT_REG_OclOnly */ - 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ + 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */ 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ - 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ + 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ 0x0, /* gcFEATURE_BIT_REG_Generics */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ + 0x0, /* 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_WClip */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */ + 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */ + 0x0, /* 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_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 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */ @@ -9170,19 +9546,19 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_DENoGamma */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */ - 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_Halti2 */ - 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */ 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */ 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */ @@ -9214,7 +9590,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -9273,7 +9649,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_SUPPORT_MOVAI */ 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */ 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */ 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */ @@ -9348,12 +9724,19 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -9374,15 +9757,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc420_5336 */ + /* gc420_5325 */ { 0x420, /* ChipID */ - 0x5336, /* ChipRevision */ + 0x5325, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x3, /* PatchVersion */ + 0x2, /* PatchVersion */ 0x1, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -9410,6 +9801,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -9525,7 +9918,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */ 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ - 0x0, /* gcFEATURE_BIT_REG_TileFiller */ + 0x1, /* gcFEATURE_BIT_REG_TileFiller */ 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */ 0x1, /* gcFEATURE_BIT_REG_YUVConversion */ @@ -9596,7 +9989,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_CSCV2 */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */ - 0x1, /* gcFEATURE_BIT_REG_Compression2D */ + 0x0, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ @@ -9604,8 +9997,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_DEAddress40 */ + 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */ 0x0, /* gcFEATURE_BIT_REG_EEZ */ 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ @@ -9759,6 +10152,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -9779,16 +10179,24 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc420cpd_533rc7a */ + /* gc420_5336 */ { 0x420, /* ChipID */ - 0x5337, /* ChipRevision */ + 0x5336, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x1, /* PatchVersion */ - 0x0, /* FormalRelease */ + 0x3, /* PatchVersion */ + 0x1, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ @@ -9815,6 +10223,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -9996,7 +10406,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */ 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */ - 0x1, /* gcFEATURE_BIT_REG_DualPipeOPF */ + 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */ 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */ 0x0, /* gcFEATURE_BIT_REG_CSCV2 */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */ @@ -10164,6 +10574,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -10184,16 +10601,24 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc428_5421 */ + /* gc420cpd_533rc7a */ { - 0x428, /* ChipID */ - 0x5421, /* ChipRevision */ + 0x420, /* ChipID */ + 0x5337, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x1, /* PatchVersion */ - 0x1, /* FormalRelease */ + 0x0, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ @@ -10220,28 +10645,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ - 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ + 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ - 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ 0x0, /* gcFEATURE_BIT_REG_DebugMode */ - 0x0, /* gcFEATURE_BIT_REG_ZCompression */ + 0x1, /* gcFEATURE_BIT_REG_ZCompression */ 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */ - 0x0, /* gcFEATURE_BIT_REG_MSAA */ + 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ 0x1, /* gcFEATURE_BIT_REG_Pipe2D */ - 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ - 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ - 0x0, /* gcFEATURE_BIT_REG_YUV420Tiler */ + 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ + 0x1, /* 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_YUY2Averaging */ + 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */ 0x0, /* gcFEATURE_BIT_REG_HalfPECache */ 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */ 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */ @@ -10249,73 +10676,73 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_Render8K */ - 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */ - 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */ - 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ - 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ + 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ + 0x1, /* 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_ShaderGetsW */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ - 0x1, /* gcFEATURE_BIT_REG_MC20 */ + 0x0, /* gcFEATURE_BIT_REG_MC20 */ 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ 0x0, /* gcFEATURE_BIT_REG_VAA */ 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ - 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */ - 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */ + 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ - 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */ - 0x0, /* gcFEATURE_BIT_REG_V2Compression */ + 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ + 0x1, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ 0x0, /* gcFEATURE_BIT_REG_L2Windowing */ 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */ - 0x0, /* gcFEATURE_BIT_REG_PixelDither */ - 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */ + 0x1, /* gcFEATURE_BIT_REG_PixelDither */ + 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ - 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ + 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ 0x1, /* gcFEATURE_BIT_REG_New2D */ - 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ - 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */ - 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */ + 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ + 0x1, /* 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 */ + 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 */ @@ -10323,7 +10750,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_LinearPE */ 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ - 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ 0x0, /* gcFEATURE_BIT_REG_EndEvent */ 0x0, /* gcFEATURE_BIT_REG_S1S8 */ @@ -10334,54 +10761,54 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_TXFilter */ 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */ - 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_MixedStreams */ + 0x1, /* gcFEATURE_BIT_REG_MixedStreams */ 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */ + 0x1, /* 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_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 */ + 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ 0x0, /* gcFEATURE_BIT_REG_Generics */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */ + 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */ - 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */ - 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */ 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ 0x0, /* gcFEATURE_BIT_REG_NewHZ */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */ - 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_DENoGamma */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ @@ -10392,7 +10819,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements5 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ @@ -10402,11 +10829,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */ 0x1, /* gcFEATURE_BIT_REG_DualPipeOPF */ - 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ @@ -10414,8 +10841,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_DEAddress40 */ + 0x1, /* gcFEATURE_BIT_REG_MiniMMUFix */ 0x0, /* gcFEATURE_BIT_REG_EEZ */ 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ @@ -10569,6 +10996,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -10589,16 +11023,24 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc428c_5_4_2_rc3a */ + /* gc428_5421 */ { 0x428, /* ChipID */ - 0x5423, /* ChipRevision */ + 0x5421, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x1, /* PatchVersion */ - 0x0, /* FormalRelease */ + 0x1, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ @@ -10625,6 +11067,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -10802,34 +11246,34 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_Halti2 */ - 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_CSCV2 */ + 0x0, /* gcFEATURE_BIT_REG_CSCV2 */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */ - 0x1, /* gcFEATURE_BIT_REG_Compression2D */ + 0x0, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ - 0x1, /* gcFEATURE_BIT_REG_DESupertile */ + 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_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_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_MultiSrcV2StrQuad */ 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ @@ -10974,6 +11418,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -10994,15 +11445,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc520_5341 */ + /* gc428c_5_4_2_rc3a */ { - 0x520, /* ChipID */ - 0x5341, /* ChipRevision */ + 0x428, /* ChipID */ + 0x5423, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ + 0x1, /* PatchVersion */ 0x0, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -11030,28 +11489,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x0, /* gcFEATURE_BIT_REG_FastClear */ - 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x1, /* gcFEATURE_BIT_REG_FastClear */ + 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ - 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 0x0, /* 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_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ 0x1, /* gcFEATURE_BIT_REG_Pipe2D */ - 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ - 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ - 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ + 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ + 0x0, /* 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_NoEZ */ + 0x1, /* 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_YUY2Averaging */ 0x0, /* gcFEATURE_BIT_REG_HalfPECache */ 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */ 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */ @@ -11059,73 +11520,73 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x1, /* gcFEATURE_BIT_REG_Texture8K */ - 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ - 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ - 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_Render8K */ - 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */ - 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */ - 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ - 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ + 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ + 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ 0x0, /* gcFEATURE_BIT_REG_VGFilter */ 0x0, /* gcFEATURE_BIT_REG_VG21 */ - 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */ - 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ + 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */ + 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ - 0x0, /* gcFEATURE_BIT_REG_MC20 */ + 0x1, /* gcFEATURE_BIT_REG_MC20 */ 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */ 0x0, /* gcFEATURE_BIT_REG_VAA */ 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ - 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */ - 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ + 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ - 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ - 0x1, /* gcFEATURE_BIT_REG_V2Compression */ + 0x0, /* 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_BugFixes1 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */ 0x0, /* gcFEATURE_BIT_REG_TextureStride */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */ - 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */ + 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ + 0x0, /* 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_PixelDither */ + 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */ 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ - 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ + 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */ 0x1, /* gcFEATURE_BIT_REG_New2D */ - 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ - 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ - 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ + 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */ + 0x0, /* 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_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 */ @@ -11133,7 +11594,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_LinearPE */ 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ - 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ 0x0, /* gcFEATURE_BIT_REG_EndEvent */ 0x0, /* gcFEATURE_BIT_REG_S1S8 */ @@ -11144,20 +11605,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ + 0x0, /* gcFEATURE_BIT_REG_TileFiller */ 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ - 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */ + 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_MixedStreams */ 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */ 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */ 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */ - 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */ + 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 */ @@ -11175,18 +11636,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */ @@ -11195,37 +11656,37 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_DENoGamma */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ - 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ - 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_Halti2 */ - 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 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 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ - 0x0, /* gcFEATURE_BIT_REG_DESupertile */ + 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 */ + 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 */ @@ -11234,12 +11695,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti3 */ 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ - 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -11379,6 +11840,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -11399,12 +11867,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc520_5540_rc0 */ + /* gc520_5341 */ { 0x520, /* ChipID */ - 0x5540, /* ChipRevision */ - 0x5200, /* ProductID */ + 0x5341, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ @@ -11435,28 +11911,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x1, /* gcFEATURE_BIT_REG_FastClear */ - 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x0, /* gcFEATURE_BIT_REG_FastClear */ + 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ - 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ 0x0, /* gcFEATURE_BIT_REG_DebugMode */ 0x0, /* gcFEATURE_BIT_REG_ZCompression */ 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */ - 0x0, /* gcFEATURE_BIT_REG_MSAA */ + 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ 0x1, /* gcFEATURE_BIT_REG_Pipe2D */ - 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ - 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ - 0x0, /* gcFEATURE_BIT_REG_YUV420Tiler */ + 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ + 0x1, /* 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_YUY2Averaging */ + 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */ 0x0, /* gcFEATURE_BIT_REG_HalfPECache */ 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */ 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */ @@ -11464,73 +11942,73 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_Render8K */ - 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */ - 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */ - 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ - 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ + 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ + 0x1, /* 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_ShaderGetsW */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ - 0x1, /* gcFEATURE_BIT_REG_MC20 */ + 0x0, /* gcFEATURE_BIT_REG_MC20 */ 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ 0x0, /* gcFEATURE_BIT_REG_VAA */ 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ - 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */ - 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */ + 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ - 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */ - 0x0, /* gcFEATURE_BIT_REG_V2Compression */ + 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ + 0x1, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ 0x0, /* gcFEATURE_BIT_REG_L2Windowing */ 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */ - 0x0, /* gcFEATURE_BIT_REG_PixelDither */ - 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */ + 0x1, /* gcFEATURE_BIT_REG_PixelDither */ + 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ - 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ + 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ 0x1, /* gcFEATURE_BIT_REG_New2D */ - 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ - 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */ - 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */ + 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ + 0x1, /* 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 */ + 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 */ @@ -11538,7 +12016,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_LinearPE */ 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ - 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ 0x0, /* gcFEATURE_BIT_REG_EndEvent */ 0x0, /* gcFEATURE_BIT_REG_S1S8 */ @@ -11549,20 +12027,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_ThreadWalkerInPS */ + 0x1, /* gcFEATURE_BIT_REG_TileFiller */ 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ - 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */ + 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_MixedStreams */ 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */ - 0x1, /* gcFEATURE_BIT_REG_NoIndexPattern */ + 0x1, /* 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_DecompressZ16 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */ 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ 0x0, /* gcFEATURE_BIT_REG_OclOnly */ 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ @@ -11580,18 +12058,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */ @@ -11600,50 +12078,50 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_DENoGamma */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements5 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ - 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_Halti2 */ - 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 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_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_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_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 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ + 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */ + 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ - 0x1, /* gcFEATURE_BIT_REG_AndroidOnly */ + 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ @@ -11661,8 +12139,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_DEC */ + 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ 0x0, /* gcFEATURE_BIT_RenderTarget8 */ 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ @@ -11784,6 +12262,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -11804,15 +12289,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc520l_5_3_4_rc2b */ + /* gc520_5540_rc0 */ { 0x520, /* ChipID */ - 0x5342, /* ChipRevision */ - 0x5202, /* ProductID */ + 0x5540, /* ChipRevision */ + 0x5200, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x2, /* PatchVersion */ + 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -11840,28 +12333,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x0, /* gcFEATURE_BIT_REG_FastClear */ - 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x1, /* gcFEATURE_BIT_REG_FastClear */ + 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ - 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 0x0, /* 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_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ 0x1, /* gcFEATURE_BIT_REG_Pipe2D */ - 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ - 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ - 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ + 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ + 0x0, /* 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_NoEZ */ + 0x1, /* 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_NoScaler */ + 0x0, /* gcFEATURE_BIT_REG_YUY2Averaging */ 0x0, /* gcFEATURE_BIT_REG_HalfPECache */ 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */ 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */ @@ -11869,73 +12364,73 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_Render8K */ - 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */ - 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */ - 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ - 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ + 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ + 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ 0x0, /* gcFEATURE_BIT_REG_VGFilter */ 0x0, /* gcFEATURE_BIT_REG_VG21 */ - 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */ - 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ + 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */ + 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ - 0x0, /* gcFEATURE_BIT_REG_MC20 */ + 0x1, /* gcFEATURE_BIT_REG_MC20 */ 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */ 0x0, /* gcFEATURE_BIT_REG_VAA */ 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ - 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */ - 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ + 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ - 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ - 0x1, /* gcFEATURE_BIT_REG_V2Compression */ + 0x0, /* 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_BugFixes1 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */ 0x0, /* gcFEATURE_BIT_REG_TextureStride */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */ - 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes3 */ + 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ + 0x0, /* 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_PixelDither */ + 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */ 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ - 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ + 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */ 0x1, /* gcFEATURE_BIT_REG_New2D */ - 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ - 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ - 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ + 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */ + 0x0, /* 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_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 */ @@ -11943,7 +12438,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_LinearPE */ 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ - 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ 0x0, /* gcFEATURE_BIT_REG_EndEvent */ 0x0, /* gcFEATURE_BIT_REG_S1S8 */ @@ -11954,20 +12449,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ + 0x0, /* gcFEATURE_BIT_REG_TileFiller */ 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ - 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */ + 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_MixedStreams */ 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */ - 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */ + 0x1, /* gcFEATURE_BIT_REG_NoIndexPattern */ 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */ - 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */ + 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 */ @@ -11985,18 +12480,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */ @@ -12005,37 +12500,37 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_DENoGamma */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ - 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ - 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_Halti2 */ - 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 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 */ + 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 */ + 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 */ + 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 */ @@ -12044,11 +12539,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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_AndroidOnly */ 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ @@ -12066,21 +12561,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ - 0x1, /* gcFEATURE_BIT_VMSAA */ + 0x0, /* gcFEATURE_BIT_VMSAA */ 0x0, /* gcFEATURE_BIT_ChipEnableLink */ - 0x1, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */ + 0x0, /* 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_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 */ @@ -12189,6 +12684,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -12209,6 +12711,436 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + }, + /* 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_VALUE_NNMadPerCore */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount */ + 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0x0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ + 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ + 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 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 */ + 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_SH_CLOCK_GATE_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 */ + 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ + 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ + 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ + 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT */ + 0x0, /* gcFEATURE_BIT_DEC400 */ + 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x0, /* gcFEATURE_BIT_TP_ENGINE */ + 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ + 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ + 0x0, /* gcFEATURE_BIT_SECURITY_AHB */ + 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ + 0x0, /* gcFEATURE_BIT_SMALLBATCH */ + 0x0, /* gcFEATURE_BIT_SH_CMPLX */ + 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ + 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ + 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ + 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ + 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ + 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc520c_5_5_0 */ { @@ -12245,6 +13177,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -12594,6 +13528,2545 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ + 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ + 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ + 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT */ + 0x0, /* gcFEATURE_BIT_DEC400 */ + 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x0, /* gcFEATURE_BIT_TP_ENGINE */ + 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ + 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ + 0x0, /* gcFEATURE_BIT_SECURITY_AHB */ + 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ + 0x0, /* gcFEATURE_BIT_SMALLBATCH */ + 0x0, /* gcFEATURE_BIT_SH_CMPLX */ + 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ + 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ + 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ + 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ + 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ + 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + }, + /* gc520c_5_5_4_rc1 */ + { + 0x520, /* ChipID */ + 0x5541, /* ChipRevision */ + 0x5200, /* ProductID */ + 0x0, /* EcoID */ + 0x202, /* 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_VALUE_NNMadPerCore */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount */ + 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0x0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ + 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ + 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 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 */ + 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 */ + 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 */ + 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_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_SH_CLOCK_GATE_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 */ + 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ + 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ + 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ + 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT */ + 0x0, /* gcFEATURE_BIT_DEC400 */ + 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x0, /* gcFEATURE_BIT_TP_ENGINE */ + 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ + 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ + 0x0, /* gcFEATURE_BIT_SECURITY_AHB */ + 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ + 0x0, /* gcFEATURE_BIT_SMALLBATCH */ + 0x0, /* gcFEATURE_BIT_SH_CMPLX */ + 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ + 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ + 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ + 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ + 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ + 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + }, + /* 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_VALUE_NNMadPerCore */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount */ + 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0x0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ + 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ + 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 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 */ + 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_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_SH_CLOCK_GATE_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 */ + 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ + 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ + 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ + 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT */ + 0x0, /* gcFEATURE_BIT_DEC400 */ + 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x0, /* gcFEATURE_BIT_TP_ENGINE */ + 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ + 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ + 0x0, /* gcFEATURE_BIT_SECURITY_AHB */ + 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ + 0x0, /* gcFEATURE_BIT_SMALLBATCH */ + 0x0, /* gcFEATURE_BIT_SH_CMPLX */ + 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ + 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ + 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ + 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ + 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ + 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + }, + /* gc520_v552_rc1 */ + { + 0x520, /* ChipID */ + 0x5521, /* 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_VALUE_NNMadPerCore */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount */ + 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0x0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ + 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ + 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 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 */ + 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_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_SH_CLOCK_GATE_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 */ + 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ + 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ + 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ + 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT */ + 0x0, /* gcFEATURE_BIT_DEC400 */ + 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x0, /* gcFEATURE_BIT_TP_ENGINE */ + 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ + 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ + 0x0, /* gcFEATURE_BIT_SECURITY_AHB */ + 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ + 0x0, /* gcFEATURE_BIT_SMALLBATCH */ + 0x0, /* gcFEATURE_BIT_SH_CMPLX */ + 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ + 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ + 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ + 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ + 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ + 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + }, + /* 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 */ + 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount */ + 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0x0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ + 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ + 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 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_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_SH_CLOCK_GATE_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 */ + 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ + 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ + 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ + 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT */ + 0x0, /* gcFEATURE_BIT_DEC400 */ + 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x0, /* gcFEATURE_BIT_TP_ENGINE */ + 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ + 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ + 0x0, /* gcFEATURE_BIT_SECURITY_AHB */ + 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ + 0x0, /* gcFEATURE_BIT_SMALLBATCH */ + 0x0, /* gcFEATURE_BIT_SH_CMPLX */ + 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ + 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ + 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ + 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ + 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ + 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + }, + /* 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_VALUE_NNMadPerCore */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount */ + 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0x0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ + 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ + 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 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_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_SH_CLOCK_GATE_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 */ + 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ + 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ + 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ + 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT */ + 0x0, /* gcFEATURE_BIT_DEC400 */ + 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x0, /* gcFEATURE_BIT_TP_ENGINE */ + 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ + 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ + 0x0, /* gcFEATURE_BIT_SECURITY_AHB */ + 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ + 0x0, /* gcFEATURE_BIT_SMALLBATCH */ + 0x0, /* gcFEATURE_BIT_SH_CMPLX */ + 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ + 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ + 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ + 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ + 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ + 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + }, + /* 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 */ + 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount */ + 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0x0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ + 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ + 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 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_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_SH_CLOCK_GATE_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 */ + 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -12609,22 +16082,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SMALLBATCH */ 0x0, /* gcFEATURE_BIT_SH_CMPLX */ 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ - 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ + 0x1, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc520c_5_5_4_rc1 */ + /* gc7000nanoultra_4_6_5_rc3b */ { - 0x520, /* ChipID */ - 0x5541, /* ChipRevision */ - 0x5200, /* ProductID */ + 0x600, /* ChipID */ + 0x4653, /* ChipRevision */ + 0x70005, /* ProductID */ 0x0, /* EcoID */ - 0x202, /* CustomerID */ - 0x0, /* PatchVersion */ - 0x0, /* FormalRelease */ - 0x1, /* gcFEATURE_VALUE_Streams */ + 0x101, /* CustomerID */ + 0x2, /* PatchVersion */ + 0x1, /* FormalRelease */ + 0x4, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ @@ -12633,7 +16114,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ 0x100, /* gcFEATURE_VALUE_InstructionCount */ - 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x8, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ @@ -12650,107 +16131,109 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x0, /* gcFEATURE_BIT_REG_FastClear */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ - 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ - 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ + 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ 0x0, /* gcFEATURE_BIT_REG_DebugMode */ - 0x0, /* gcFEATURE_BIT_REG_ZCompression */ - 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */ - 0x0, /* gcFEATURE_BIT_REG_MSAA */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ - 0x1, /* gcFEATURE_BIT_REG_FastScaler */ + 0x0, /* 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_YUV420Tiler */ 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ - 0x0, /* gcFEATURE_BIT_REG_MinArea */ + 0x1, /* gcFEATURE_BIT_REG_MinArea */ 0x1, /* gcFEATURE_BIT_REG_NoEZ */ - 0x1, /* gcFEATURE_BIT_REG_No422Texture */ + 0x0, /* 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_ByteWrite3D */ + 0x1, /* 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_Render8K */ - 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */ - 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */ - 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ - 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ + 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ 0x0, /* gcFEATURE_BIT_REG_VGFilter */ 0x0, /* gcFEATURE_BIT_REG_VG21 */ - 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */ + 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */ 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ - 0x1, /* gcFEATURE_BIT_REG_MC20 */ + 0x0, /* gcFEATURE_BIT_REG_MC20 */ 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */ + 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ - 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */ + 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ 0x0, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ 0x0, /* gcFEATURE_BIT_REG_L2Windowing */ 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */ - 0x0, /* gcFEATURE_BIT_REG_PixelDither */ - 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */ + 0x1, /* gcFEATURE_BIT_REG_PixelDither */ + 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ - 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ + 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */ - 0x1, /* gcFEATURE_BIT_REG_New2D */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ + 0x0, /* gcFEATURE_BIT_REG_New2D */ 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ - 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */ - 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */ + 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ + 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ 0x1, /* gcFEATURE_BIT_REG_MMU */ - 0x0, /* gcFEATURE_BIT_REG_WideLine */ + 0x1, /* gcFEATURE_BIT_REG_WideLine */ 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */ - 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_LinearPE */ 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ @@ -12763,24 +16246,24 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ - 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */ + 0x0, /* 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_MultiSourceBlt */ + 0x0, /* gcFEATURE_BIT_REG_YUVConversion */ + 0x0, /* 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */ + 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_NewFeatures0 */ 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ @@ -12795,8 +16278,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_DEEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_ACE */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */ @@ -12805,47 +16288,47 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */ 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ 0x0, /* gcFEATURE_BIT_REG_NewHZ */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */ + 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 */ + 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_DEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */ - 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */ + 0x1, /* 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_DEEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ - 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_DualPipeOPF */ - 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2 */ + 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_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_DEAddress40 */ + 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */ 0x0, /* gcFEATURE_BIT_REG_EEZ */ 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ @@ -12854,11 +16337,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_MultiSrcV2StrQuad */ + 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ - 0x1, /* gcFEATURE_BIT_REG_AndroidOnly */ + 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ @@ -12876,8 +16359,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_DEC */ + 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ 0x0, /* gcFEATURE_BIT_RenderTarget8 */ 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ @@ -12918,7 +16401,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_SUPPORT_MOVAI */ 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */ 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */ 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */ @@ -12993,12 +16476,19 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -13014,22 +16504,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SMALLBATCH */ 0x0, /* gcFEATURE_BIT_SH_CMPLX */ 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ - 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ + 0x1, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc520sp_5_5_2_rc0a */ + /* gc7000nanoultra_4_6_5_rc3e */ { - 0x520, /* ChipID */ - 0x5520, /* ChipRevision */ - 0x5200, /* ProductID */ + 0x600, /* ChipID */ + 0x4653, /* ChipRevision */ + 0x70005, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ - 0x1, /* PatchVersion */ + 0x102, /* CustomerID */ + 0x5, /* PatchVersion */ 0x1, /* FormalRelease */ - 0x1, /* gcFEATURE_VALUE_Streams */ + 0x4, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ @@ -13038,7 +16536,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ 0x100, /* gcFEATURE_VALUE_InstructionCount */ - 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x8, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ @@ -13055,107 +16553,109 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x0, /* gcFEATURE_BIT_REG_FastClear */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ - 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ - 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ + 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ 0x0, /* gcFEATURE_BIT_REG_DebugMode */ - 0x0, /* gcFEATURE_BIT_REG_ZCompression */ - 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */ - 0x0, /* gcFEATURE_BIT_REG_MSAA */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ - 0x1, /* gcFEATURE_BIT_REG_FastScaler */ + 0x0, /* 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_YUV420Tiler */ 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ - 0x0, /* gcFEATURE_BIT_REG_MinArea */ + 0x1, /* gcFEATURE_BIT_REG_MinArea */ 0x1, /* gcFEATURE_BIT_REG_NoEZ */ - 0x1, /* gcFEATURE_BIT_REG_No422Texture */ + 0x0, /* 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_ByteWrite3D */ + 0x1, /* 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_Render8K */ - 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */ - 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */ - 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ - 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ + 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ 0x0, /* gcFEATURE_BIT_REG_VGFilter */ 0x0, /* gcFEATURE_BIT_REG_VG21 */ - 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */ + 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */ 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ - 0x1, /* gcFEATURE_BIT_REG_MC20 */ + 0x0, /* gcFEATURE_BIT_REG_MC20 */ 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */ + 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ - 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */ + 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ 0x0, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ 0x0, /* gcFEATURE_BIT_REG_L2Windowing */ 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */ - 0x0, /* gcFEATURE_BIT_REG_PixelDither */ - 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */ + 0x1, /* gcFEATURE_BIT_REG_PixelDither */ + 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ - 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ + 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */ - 0x1, /* gcFEATURE_BIT_REG_New2D */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ + 0x0, /* gcFEATURE_BIT_REG_New2D */ 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ - 0x0, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */ - 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */ + 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ + 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ 0x1, /* gcFEATURE_BIT_REG_MMU */ - 0x0, /* gcFEATURE_BIT_REG_WideLine */ + 0x1, /* gcFEATURE_BIT_REG_WideLine */ 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */ - 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_LinearPE */ 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ @@ -13168,24 +16668,24 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ - 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */ + 0x0, /* 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_MultiSourceBlt */ + 0x0, /* gcFEATURE_BIT_REG_YUVConversion */ + 0x0, /* 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */ + 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_NewFeatures0 */ 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ @@ -13200,8 +16700,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_DEEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_ACE */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */ @@ -13210,47 +16710,47 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */ 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ 0x0, /* gcFEATURE_BIT_REG_NewHZ */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */ + 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 */ + 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_DEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */ - 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */ + 0x1, /* 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_DEEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ - 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_DualPipeOPF */ - 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2 */ + 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_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_DEAddress40 */ + 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */ 0x0, /* gcFEATURE_BIT_REG_EEZ */ 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ @@ -13259,11 +16759,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_MultiSrcV2StrQuad */ + 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ - 0x1, /* gcFEATURE_BIT_REG_AndroidOnly */ + 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ @@ -13273,7 +16773,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */ 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */ 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ - 0x1, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ + 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ 0x0, /* gcFEATURE_BIT_REG_RSS8 */ 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x0, /* gcFEATURE_BIT_REG_Halti5 */ @@ -13398,12 +16898,19 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -13424,16 +16931,24 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc520_v552_rc1 */ + /* gc620_5_5_3_rc0 */ { - 0x520, /* ChipID */ - 0x5521, /* ChipRevision */ - 0x5200, /* ProductID */ + 0x620, /* ChipID */ + 0x5530, /* ChipRevision */ + 0x6200, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ - 0x1, /* PatchVersion */ - 0x1, /* FormalRelease */ + 0x200, /* CustomerID */ + 0x0, /* PatchVersion */ + 0x0, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ @@ -13460,6 +16975,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -13480,7 +16997,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_No422Texture */ 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */ - 0x1, /* gcFEATURE_BIT_REG_NoScaler */ + 0x0, /* gcFEATURE_BIT_REG_NoScaler */ 0x0, /* gcFEATURE_BIT_REG_YUY2Averaging */ 0x0, /* gcFEATURE_BIT_REG_HalfPECache */ 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */ @@ -13668,7 +17185,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ - 0x1, /* gcFEATURE_BIT_REG_AndroidOnly */ + 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ @@ -13678,7 +17195,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */ 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */ 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ - 0x1, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ + 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ 0x0, /* gcFEATURE_BIT_REG_RSS8 */ 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x0, /* gcFEATURE_BIT_REG_Halti5 */ @@ -13728,7 +17245,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -13787,8 +17304,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ - 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ - 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */ + 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 */ @@ -13804,11 +17321,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -13829,15 +17353,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc520_5_5_3_rc2a */ + /* gc620_5_5_5_rc0d */ { - 0x520, /* ChipID */ - 0x5532, /* ChipRevision */ - 0x5200, /* ProductID */ + 0x620, /* ChipID */ + 0x5550, /* ChipRevision */ + 0x6200, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ - 0x1, /* PatchVersion */ + 0x201, /* CustomerID */ + 0x4, /* PatchVersion */ 0x0, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -13865,7 +17397,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x1, /* gcFEATURE_BIT_REG_FastClear */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */ @@ -13885,7 +17419,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_No422Texture */ 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */ - 0x0, /* gcFEATURE_BIT_REG_NoScaler */ + 0x1, /* gcFEATURE_BIT_REG_NoScaler */ 0x0, /* gcFEATURE_BIT_REG_YUY2Averaging */ 0x0, /* gcFEATURE_BIT_REG_HalfPECache */ 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */ @@ -13989,7 +17523,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_MixedStreams */ 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */ - 0x1, /* gcFEATURE_BIT_REG_NoIndexPattern */ + 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */ 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */ 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */ @@ -14016,7 +17550,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */ 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ 0x0, /* gcFEATURE_BIT_REG_NewHZ */ @@ -14091,8 +17625,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_DEC */ + 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ 0x0, /* gcFEATURE_BIT_RenderTarget8 */ 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ @@ -14133,7 +17667,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -14192,8 +17726,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ - 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ - 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */ + 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 */ @@ -14209,11 +17743,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -14234,17 +17775,25 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc600L_0x465x */ + /* gc620tpc_5_5_6_rc0a */ { - 0x600, /* ChipID */ - 0x4652, /* ChipRevision */ - 0x70005, /* ProductID */ + 0x620, /* ChipID */ + 0x5560, /* ChipRevision */ + 0x6200, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ - 0x7, /* PatchVersion */ + 0x200, /* CustomerID */ + 0x1, /* PatchVersion */ 0x0, /* FormalRelease */ - 0x4, /* gcFEATURE_VALUE_Streams */ + 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ @@ -14253,7 +17802,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ 0x100, /* gcFEATURE_VALUE_InstructionCount */ - 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ + 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x8, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ @@ -14270,107 +17819,109 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ - 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ - 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ + 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */ 0x0, /* gcFEATURE_BIT_REG_DebugMode */ 0x0, /* gcFEATURE_BIT_REG_ZCompression */ - 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */ + 0x1, /* 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 */ + 0x1, /* gcFEATURE_BIT_REG_Pipe2D */ + 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_FastScaler */ 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ - 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ + 0x0, /* gcFEATURE_BIT_REG_YUV420Tiler */ 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ - 0x1, /* gcFEATURE_BIT_REG_MinArea */ + 0x0, /* gcFEATURE_BIT_REG_MinArea */ 0x1, /* gcFEATURE_BIT_REG_NoEZ */ - 0x0, /* gcFEATURE_BIT_REG_No422Texture */ + 0x1, /* 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 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */ + 0x0, /* 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 */ + 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 */ - 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_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 */ - 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ - 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ + 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ + 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ 0x0, /* gcFEATURE_BIT_REG_VGFilter */ 0x0, /* gcFEATURE_BIT_REG_VG21 */ - 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */ + 0x0, /* gcFEATURE_BIT_REG_ShaderGetsW */ 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ - 0x0, /* gcFEATURE_BIT_REG_MC20 */ + 0x1, /* gcFEATURE_BIT_REG_MC20 */ 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ + 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ - 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ + 0x0, /* 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_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 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ + 0x0, /* 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_PixelDither */ + 0x0, /* gcFEATURE_BIT_REG_TwoStencilReference */ 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ - 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ + 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ - 0x0, /* gcFEATURE_BIT_REG_New2D */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes5 */ + 0x1, /* gcFEATURE_BIT_REG_New2D */ 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ - 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ + 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */ + 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */ 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ 0x1, /* gcFEATURE_BIT_REG_MMU */ - 0x1, /* gcFEATURE_BIT_REG_WideLine */ + 0x0, /* gcFEATURE_BIT_REG_WideLine */ 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */ - 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_LinearPE */ + 0x0, /* gcFEATURE_BIT_REG_LinearPE */ 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ @@ -14383,24 +17934,24 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ - 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_YUVConversion */ - 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */ + 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */ 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ 0x0, /* gcFEATURE_BIT_REG_OclOnly */ - 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */ + 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ @@ -14415,8 +17966,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -14425,47 +17976,47 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */ 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ 0x0, /* gcFEATURE_BIT_REG_NewHZ */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */ - 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ - 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */ - 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */ + 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 */ + 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 */ + 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 */ @@ -14474,11 +18025,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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_AndroidOnly */ 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ @@ -14538,7 +18089,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -14597,8 +18148,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ - 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ - 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */ + 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 */ @@ -14611,7 +18162,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -14619,6 +18170,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -14639,16 +18197,24 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000nanoultra_4_6_5_rc3a */ + /* gc860L_0x464x */ { - 0x600, /* ChipID */ - 0x4653, /* ChipRevision */ - 0x70005, /* ProductID */ + 0x860, /* ChipID */ + 0x4647, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x1, /* PatchVersion */ - 0x1, /* FormalRelease */ + 0x4, /* PatchVersion */ + 0x0, /* FormalRelease */ 0x4, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ @@ -14675,6 +18241,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -14682,30 +18250,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DebugMode */ 0x1, /* gcFEATURE_BIT_REG_ZCompression */ 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */ - 0x1, /* gcFEATURE_BIT_REG_MSAA */ + 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 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_NoEZ */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_HalfPECache */ - 0x1, /* gcFEATURE_BIT_REG_HalfTXCache */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */ + 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */ 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ 0x1, /* gcFEATURE_BIT_REG_FlipY */ 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ @@ -14727,9 +18295,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_VGFilter */ 0x0, /* gcFEATURE_BIT_REG_VG21 */ 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */ - 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ - 0x0, /* gcFEATURE_BIT_REG_MC20 */ + 0x1, /* gcFEATURE_BIT_REG_MC20 */ 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ 0x0, /* gcFEATURE_BIT_REG_VAA */ @@ -14775,7 +18343,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_LogicOp */ 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */ - 0x1, /* gcFEATURE_BIT_REG_LinearPE */ + 0x0, /* gcFEATURE_BIT_REG_LinearPE */ 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ @@ -14790,7 +18358,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ - 0x0, /* gcFEATURE_BIT_REG_TileFiller */ + 0x1, /* gcFEATURE_BIT_REG_TileFiller */ 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */ 0x0, /* gcFEATURE_BIT_REG_YUVConversion */ @@ -14843,7 +18411,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */ - 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */ @@ -14884,7 +18452,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -15024,6 +18592,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -15039,22 +18614,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SMALLBATCH */ 0x0, /* gcFEATURE_BIT_SH_CMPLX */ 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ - 0x1, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ + 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000nanoultra_4_6_5_rc3b */ + /* gc880_5106 */ { - 0x600, /* ChipID */ - 0x4653, /* ChipRevision */ - 0x70005, /* ProductID */ + 0x880, /* ChipID */ + 0x5106, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ - 0x101, /* CustomerID */ - 0x2, /* PatchVersion */ + 0x0, /* CustomerID */ + 0x0, /* PatchVersion */ 0x1, /* FormalRelease */ - 0x4, /* gcFEATURE_VALUE_Streams */ + 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ @@ -15062,10 +18645,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ - 0x100, /* gcFEATURE_VALUE_InstructionCount */ - 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x200, /* gcFEATURE_VALUE_InstructionCount */ + 0x100, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x8, /* gcFEATURE_VALUE_VaryingCount */ + 0xb, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ 0x0, /* gcFEATURE_VALUE_L1CacheSize */ 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ @@ -15080,6 +18663,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -15095,22 +18680,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x1, /* gcFEATURE_BIT_REG_HalfPECache */ - 0x1, /* gcFEATURE_BIT_REG_HalfTXCache */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_RsYuvTarget */ + 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */ 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ 0x1, /* gcFEATURE_BIT_REG_FlipY */ 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ @@ -15120,7 +18705,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */ 0x1, /* gcFEATURE_BIT_REG_2DPE20 */ - 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable */ + 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */ 0x1, /* gcFEATURE_BIT_REG_Render8K */ 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */ 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */ @@ -15132,16 +18717,16 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_VGFilter */ 0x0, /* gcFEATURE_BIT_REG_VG21 */ 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */ - 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ - 0x0, /* gcFEATURE_BIT_REG_MC20 */ - 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ - 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */ + 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ @@ -15150,49 +18735,49 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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_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_NewFloatingPointArithmetic */ 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ - 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */ - 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */ - 0x0, /* gcFEATURE_BIT_REG_Halti0 */ + 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 */ + 0x0, /* gcFEATURE_BIT_REG_MMU */ 0x1, /* gcFEATURE_BIT_REG_WideLine */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */ - 0x1, /* gcFEATURE_BIT_REG_LinearPE */ - 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ + 0x0, /* gcFEATURE_BIT_REG_LinearPE */ + 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ - 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ - 0x0, /* gcFEATURE_BIT_REG_EndEvent */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */ 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ 0x0, /* gcFEATURE_BIT_REG_TileFiller */ @@ -15203,12 +18788,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Interleaver */ 0x1, /* gcFEATURE_BIT_REG_MixedStreams */ 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */ + 0x0, /* 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_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 */ @@ -15235,20 +18820,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */ 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ 0x0, /* gcFEATURE_BIT_REG_NewHZ */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */ @@ -15257,7 +18842,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_Halti2 */ - 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */ 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */ @@ -15289,7 +18874,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -15348,7 +18933,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -15423,12 +19008,19 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -15444,22 +19036,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SMALLBATCH */ 0x0, /* gcFEATURE_BIT_SH_CMPLX */ 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ - 0x1, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ + 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc620_5_5_3_rc0 */ + /* gc880_5122 */ { - 0x620, /* ChipID */ - 0x5530, /* ChipRevision */ - 0x6200, /* ProductID */ + 0x880, /* ChipID */ + 0x5122, /* ChipRevision */ + 0x70007, /* ProductID */ 0x0, /* EcoID */ - 0x200, /* CustomerID */ + 0x0, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ - 0x1, /* gcFEATURE_VALUE_Streams */ + 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ @@ -15467,10 +19067,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ - 0x100, /* gcFEATURE_VALUE_InstructionCount */ - 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x200, /* gcFEATURE_VALUE_InstructionCount */ + 0x240, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x8, /* gcFEATURE_VALUE_VaryingCount */ + 0xc, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ 0x0, /* gcFEATURE_VALUE_L1CacheSize */ 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ @@ -15485,28 +19085,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x0, /* gcFEATURE_BIT_REG_FastClear */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ - 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ - 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ + 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ 0x0, /* gcFEATURE_BIT_REG_DebugMode */ - 0x0, /* gcFEATURE_BIT_REG_ZCompression */ - 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */ - 0x0, /* gcFEATURE_BIT_REG_MSAA */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ - 0x1, /* gcFEATURE_BIT_REG_FastScaler */ + 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x0, /* gcFEATURE_BIT_REG_FastScaler */ 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ - 0x0, /* gcFEATURE_BIT_REG_YUV420Tiler */ + 0x1, /* 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_NoEZ */ + 0x0, /* gcFEATURE_BIT_REG_No422Texture */ 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */ - 0x0, /* gcFEATURE_BIT_REG_NoScaler */ - 0x0, /* gcFEATURE_BIT_REG_YUY2Averaging */ + 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 */ @@ -15514,108 +19116,108 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_Texture8K */ - 0x0, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ - 0x0, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ - 0x0, /* gcFEATURE_BIT_REG_FastClearFlush */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_Render8K */ - 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */ - 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */ - 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ - 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ + 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ + 0x1, /* 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_ShaderGetsW */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ 0x1, /* gcFEATURE_BIT_REG_MC20 */ - 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */ - 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */ + 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ + 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ - 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */ + 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ 0x0, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */ + 0x1, /* 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_PixelDither */ + 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ + 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ + 0x1, /* 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */ - 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */ + 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ + 0x1, /* 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ - 0x0, /* gcFEATURE_BIT_REG_EndEvent */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ - 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_MultiSourceBlt */ - 0x1, /* gcFEATURE_BIT_REG_YUVConversion */ - 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */ + 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_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_NewFeatures0 */ 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ @@ -15630,8 +19232,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_DEEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_ACE */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */ @@ -15650,37 +19252,37 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_DENoGamma */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements5 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ - 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_Halti2 */ - 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 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_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_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_DEAddress40 */ + 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */ 0x0, /* gcFEATURE_BIT_REG_EEZ */ 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ @@ -15689,8 +19291,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_MultiSrcV2StrQuad */ + 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ @@ -15812,8 +19414,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ - 0x1, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ - 0x1, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */ + 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 */ @@ -15829,11 +19431,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_G2D_DEC400 */ 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */ 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -15854,17 +19463,25 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc620_5_5_5_rc0d */ + /* gc880TM_0x512x */ { - 0x620, /* ChipID */ - 0x5550, /* ChipRevision */ - 0x6200, /* ProductID */ + 0x880, /* ChipID */ + 0x5124, /* ChipRevision */ + 0x70007, /* ProductID */ 0x0, /* EcoID */ - 0x201, /* CustomerID */ - 0x4, /* PatchVersion */ + 0x0, /* CustomerID */ + 0x2, /* PatchVersion */ 0x0, /* FormalRelease */ - 0x1, /* gcFEATURE_VALUE_Streams */ + 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ @@ -15872,10 +19489,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ - 0x100, /* gcFEATURE_VALUE_InstructionCount */ - 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x200, /* gcFEATURE_VALUE_InstructionCount */ + 0x240, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x8, /* gcFEATURE_VALUE_VaryingCount */ + 0xc, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ 0x0, /* gcFEATURE_VALUE_L1CacheSize */ 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ @@ -15890,28 +19507,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x0, /* gcFEATURE_BIT_REG_FastClear */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ - 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ + 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */ 0x0, /* gcFEATURE_BIT_REG_DebugMode */ - 0x0, /* gcFEATURE_BIT_REG_ZCompression */ + 0x1, /* gcFEATURE_BIT_REG_ZCompression */ 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */ - 0x0, /* gcFEATURE_BIT_REG_MSAA */ + 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ 0x1, /* gcFEATURE_BIT_REG_Pipe2D */ - 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ - 0x1, /* gcFEATURE_BIT_REG_FastScaler */ + 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x0, /* gcFEATURE_BIT_REG_FastScaler */ 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ - 0x0, /* gcFEATURE_BIT_REG_YUV420Tiler */ + 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ - 0x0, /* gcFEATURE_BIT_REG_MinArea */ - 0x1, /* gcFEATURE_BIT_REG_NoEZ */ - 0x1, /* gcFEATURE_BIT_REG_No422Texture */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_NoScaler */ - 0x0, /* gcFEATURE_BIT_REG_YUY2Averaging */ + 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 */ @@ -15919,108 +19538,108 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_Texture8K */ - 0x0, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ - 0x0, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ - 0x0, /* gcFEATURE_BIT_REG_FastClearFlush */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_Render8K */ - 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */ - 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */ - 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ - 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ + 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ + 0x1, /* 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_ShaderGetsW */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ 0x1, /* gcFEATURE_BIT_REG_MC20 */ - 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */ - 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */ - 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ - 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */ + 0x1, /* 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_PixelDither */ + 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ + 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ + 0x1, /* 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */ - 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */ + 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ + 0x1, /* 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ - 0x0, /* gcFEATURE_BIT_REG_EndEvent */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ - 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */ + 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ - 0x0, /* gcFEATURE_BIT_REG_TileFiller */ + 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_MultiSourceBlt */ + 0x0, /* gcFEATURE_BIT_REG_YUVConversion */ + 0x0, /* 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_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_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_NewFeatures0 */ 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ @@ -16035,8 +19654,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_DEEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_ACE */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */ @@ -16055,37 +19674,37 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_DENoGamma */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements5 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ - 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_Halti2 */ - 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 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_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_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_DEAddress40 */ + 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */ 0x0, /* gcFEATURE_BIT_REG_EEZ */ 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ @@ -16094,11 +19713,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_MultiSrcV2StrQuad */ + 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ - 0x1, /* gcFEATURE_BIT_REG_AndroidOnly */ + 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ @@ -16217,8 +19836,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ - 0x1, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ - 0x1, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */ + 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 */ @@ -16234,11 +19853,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_G2D_DEC400 */ 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */ 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -16259,30 +19885,38 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc620tpc_5_5_6_rc0a */ + /* gc900_5250 */ { - 0x620, /* ChipID */ - 0x5560, /* ChipRevision */ - 0x6200, /* ProductID */ + 0x900, /* ChipID */ + 0x5250, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ - 0x200, /* CustomerID */ - 0x1, /* PatchVersion */ + 0x0, /* CustomerID */ + 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ - 0x1, /* gcFEATURE_VALUE_Streams */ - 0x40, /* gcFEATURE_VALUE_TempRegisters */ + 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 */ - 0x100, /* gcFEATURE_VALUE_InstructionCount */ - 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x200, /* gcFEATURE_VALUE_InstructionCount */ + 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x8, /* gcFEATURE_VALUE_VaryingCount */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x0, /* gcFEATURE_VALUE_L1CacheSize */ + 0x2, /* gcFEATURE_VALUE_L1CacheSize */ 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x0, /* gcFEATURE_VALUE_ShaderPCLength */ 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ @@ -16295,28 +19929,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x0, /* gcFEATURE_BIT_REG_FastClear */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ - 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ - 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ + 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ 0x0, /* gcFEATURE_BIT_REG_DebugMode */ - 0x0, /* gcFEATURE_BIT_REG_ZCompression */ - 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */ - 0x0, /* gcFEATURE_BIT_REG_MSAA */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ + 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ - 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ - 0x0, /* gcFEATURE_BIT_REG_YUV420Tiler */ + 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ + 0x1, /* 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_NoEZ */ + 0x0, /* 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_NoScaler */ + 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */ 0x0, /* gcFEATURE_BIT_REG_HalfPECache */ 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */ 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */ @@ -16324,187 +19960,187 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_Texture8K */ - 0x0, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ - 0x0, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ - 0x0, /* gcFEATURE_BIT_REG_FastClearFlush */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_Render8K */ - 0x0, /* gcFEATURE_BIT_REG_TileStatus2Bits */ - 0x0, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */ - 0x0, /* gcFEATURE_BIT_REG_SuperTiled32x32 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ - 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ + 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ + 0x1, /* 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_ShaderGetsW */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ 0x1, /* gcFEATURE_BIT_REG_MC20 */ 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes0 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_CorrectStencil */ + 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ + 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ - 0x0, /* gcFEATURE_BIT_REG_RSUVSwizzle */ + 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ 0x0, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes1 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes2 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes4 */ + 0x1, /* 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_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 */ - 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_NegativeLogFix */ - 0x0, /* gcFEATURE_BIT_REG_ResolveOffset */ + 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ + 0x1, /* 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ - 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ - 0x0, /* gcFEATURE_BIT_REG_EndEvent */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x1, /* gcFEATURE_BIT_REG_PESwizzle */ + 0x1, /* gcFEATURE_BIT_REG_EndEvent */ 0x0, /* gcFEATURE_BIT_REG_S1S8 */ - 0x0, /* gcFEATURE_BIT_REG_Halti1 */ + 0x1, /* gcFEATURE_BIT_REG_Halti1 */ 0x0, /* gcFEATURE_BIT_REG_RGB888 */ 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ - 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ + 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ - 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */ 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */ - 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ - 0x0, /* gcFEATURE_BIT_REG_TileFiller */ + 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 */ + 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */ + 0x0, /* 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */ + 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_NewFeatures0 */ + 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ - 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ + 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ 0x0, /* gcFEATURE_BIT_REG_Generics */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */ + 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 */ + 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 */ - 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */ 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ - 0x0, /* gcFEATURE_BIT_REG_NewHZ */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */ + 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 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_DEEnhancements5 */ + 0x1, /* 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_MCEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_Halti2 */ - 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 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_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_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_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_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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */ + 0x1, /* 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_MultiSrcV2StrQuad */ + 0x0, /* 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_AndroidOnly */ + 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -16622,8 +20258,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ - 0x1, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ - 0x1, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */ + 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 */ @@ -16636,7 +20272,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_G2D_3rd_PARTY_COMPRESSION_1_1 */ 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */ 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */ 0x0, /* gcFEATURE_BIT_G2D_DEC400 */ @@ -16644,6 +20280,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -16664,26 +20307,34 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc860L_0x464x */ + /* gc1000_5036 */ { - 0x860, /* ChipID */ - 0x4647, /* ChipRevision */ + 0x1000, /* ChipID */ + 0x5036, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x4, /* PatchVersion */ - 0x0, /* FormalRelease */ + 0x0, /* PatchVersion */ + 0x1, /* FormalRelease */ 0x4, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x100, /* gcFEATURE_VALUE_ThreadCount */ + 0x200, /* gcFEATURE_VALUE_ThreadCount */ 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x1, /* gcFEATURE_VALUE_NumShaderCores */ + 0x2, /* gcFEATURE_VALUE_NumShaderCores */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ 0x100, /* gcFEATURE_VALUE_InstructionCount */ - 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x240, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x8, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ @@ -16700,16 +20351,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 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 */ + 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */ + 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ - 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ + 0x1, /* gcFEATURE_BIT_REG_Pipe2D */ 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ @@ -16740,7 +20393,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */ 0x1, /* gcFEATURE_BIT_REG_2DPE20 */ - 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable */ + 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */ 0x1, /* gcFEATURE_BIT_REG_Render8K */ 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */ 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */ @@ -16759,7 +20412,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ 0x0, /* gcFEATURE_BIT_REG_VAA */ 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ - 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */ 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ @@ -16770,8 +20423,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -16803,19 +20456,19 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_LinearPE */ 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ - 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 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 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_TileFiller */ + 0x0, /* gcFEATURE_BIT_REG_TileFiller */ 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */ 0x0, /* gcFEATURE_BIT_REG_YUVConversion */ @@ -16833,9 +20486,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */ 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ - 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ + 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ 0x0, /* gcFEATURE_BIT_REG_Generics */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ 0x0, /* gcFEATURE_BIT_REG_FastMSAA */ 0x0, /* gcFEATURE_BIT_REG_WClip */ 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */ @@ -16844,7 +20497,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_ACE */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */ @@ -16853,15 +20506,15 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ + 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_DENoGamma */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ @@ -16877,7 +20530,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_Halti2 */ - 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */ 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */ @@ -17049,6 +20702,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -17069,28 +20729,36 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc880_5106 */ + /* gc1000_5037 */ { - 0x880, /* ChipID */ - 0x5106, /* ChipRevision */ + 0x1000, /* ChipID */ + 0x5037, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ 0x1, /* FormalRelease */ - 0x8, /* gcFEATURE_VALUE_Streams */ + 0x4, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x100, /* gcFEATURE_VALUE_ThreadCount */ + 0x200, /* gcFEATURE_VALUE_ThreadCount */ 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x1, /* gcFEATURE_VALUE_NumShaderCores */ + 0x2, /* gcFEATURE_VALUE_NumShaderCores */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ - 0x200, /* gcFEATURE_VALUE_InstructionCount */ - 0x100, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x100, /* gcFEATURE_VALUE_InstructionCount */ + 0x240, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0xb, /* gcFEATURE_VALUE_VaryingCount */ + 0x8, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ 0x0, /* gcFEATURE_VALUE_L1CacheSize */ 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ @@ -17105,18 +20773,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 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_YUV420Filter */ 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ - 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ + 0x1, /* gcFEATURE_BIT_REG_Pipe2D */ 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ - 0x0, /* gcFEATURE_BIT_REG_FastScaler */ + 0x1, /* gcFEATURE_BIT_REG_FastScaler */ 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ @@ -17160,13 +20830,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ 0x1, /* gcFEATURE_BIT_REG_MC20 */ - 0x1, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ + 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_A8TargetSupport */ 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ @@ -17183,41 +20853,41 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */ 0x1, /* gcFEATURE_BIT_REG_PixelDither */ 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ - 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ + 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 */ + 0x0, /* 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_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_MMU */ 0x1, /* gcFEATURE_BIT_REG_WideLine */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */ + 0x0, /* 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_SeamlessCubeMap */ 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */ 0x0, /* gcFEATURE_BIT_REG_LinearPE */ - 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */ + 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_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 */ + 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ - 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ 0x0, /* gcFEATURE_BIT_REG_TileFiller */ @@ -17228,19 +20898,19 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Interleaver */ 0x1, /* gcFEATURE_BIT_REG_MixedStreams */ 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */ + 0x1, /* 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 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ 0x0, /* gcFEATURE_BIT_REG_Generics */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ 0x0, /* gcFEATURE_BIT_REG_FastMSAA */ 0x0, /* gcFEATURE_BIT_REG_WClip */ 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */ @@ -17249,7 +20919,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_ACE */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */ @@ -17258,9 +20928,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ @@ -17373,7 +21043,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_SUPPORT_MOVAI */ 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */ 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */ 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */ @@ -17454,6 +21124,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -17474,28 +21151,36 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc880_5122 */ + /* gc1000_5037_1 */ { - 0x880, /* ChipID */ - 0x5122, /* ChipRevision */ - 0x70007, /* ProductID */ - 0x0, /* EcoID */ + 0x1000, /* ChipID */ + 0x5037, /* ChipRevision */ + 0x0, /* ProductID */ + 0x1, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ - 0x0, /* FormalRelease */ - 0x10, /* gcFEATURE_VALUE_Streams */ + 0x1, /* FormalRelease */ + 0x4, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x100, /* gcFEATURE_VALUE_ThreadCount */ + 0x200, /* gcFEATURE_VALUE_ThreadCount */ 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x1, /* gcFEATURE_VALUE_NumShaderCores */ + 0x2, /* gcFEATURE_VALUE_NumShaderCores */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ - 0x200, /* gcFEATURE_VALUE_InstructionCount */ + 0x100, /* gcFEATURE_VALUE_InstructionCount */ 0x240, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0xc, /* gcFEATURE_VALUE_VaryingCount */ + 0x8, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ 0x0, /* gcFEATURE_VALUE_L1CacheSize */ 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ @@ -17510,6 +21195,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -17519,9 +21206,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */ 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ - 0x1, /* gcFEATURE_BIT_REG_Pipe2D */ + 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ - 0x0, /* gcFEATURE_BIT_REG_FastScaler */ + 0x1, /* gcFEATURE_BIT_REG_FastScaler */ 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ @@ -17530,7 +21217,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_No422Texture */ 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */ - 0x1, /* gcFEATURE_BIT_REG_NoScaler */ + 0x0, /* gcFEATURE_BIT_REG_NoScaler */ 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */ 0x0, /* gcFEATURE_BIT_REG_HalfPECache */ 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */ @@ -17544,7 +21231,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ 0x1, /* gcFEATURE_BIT_REG_FlipY */ 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ - 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ 0x1, /* gcFEATURE_BIT_REG_Texture8K */ 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ @@ -17565,13 +21252,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ 0x1, /* gcFEATURE_BIT_REG_MC20 */ - 0x1, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ - 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ + 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */ 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ @@ -17588,41 +21275,41 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */ 0x1, /* gcFEATURE_BIT_REG_PixelDither */ 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ - 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ + 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 */ + 0x0, /* 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_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 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */ 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */ - 0x1, /* gcFEATURE_BIT_REG_LineLoop */ + 0x0, /* gcFEATURE_BIT_REG_LineLoop */ 0x0, /* gcFEATURE_BIT_REG_LogicOp */ - 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_EndEvent */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ - 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ 0x0, /* gcFEATURE_BIT_REG_TileFiller */ @@ -17637,15 +21324,15 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */ 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */ 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ 0x0, /* gcFEATURE_BIT_REG_Generics */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ 0x0, /* gcFEATURE_BIT_REG_FastMSAA */ 0x0, /* gcFEATURE_BIT_REG_WClip */ 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */ @@ -17654,7 +21341,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_ACE */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */ @@ -17663,9 +21350,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ @@ -17719,7 +21406,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -17778,7 +21465,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_SUPPORT_MOVAI */ 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */ 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */ 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */ @@ -17859,6 +21546,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -17879,28 +21573,36 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc880TM_0x512x */ + /* gc1000_5039 */ { - 0x880, /* ChipID */ - 0x5124, /* ChipRevision */ - 0x70007, /* ProductID */ + 0x1000, /* ChipID */ + 0x5039, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x2, /* PatchVersion */ - 0x0, /* FormalRelease */ - 0x8, /* gcFEATURE_VALUE_Streams */ + 0x11, /* PatchVersion */ + 0x1, /* FormalRelease */ + 0x4, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x100, /* gcFEATURE_VALUE_ThreadCount */ + 0x200, /* gcFEATURE_VALUE_ThreadCount */ 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x1, /* gcFEATURE_VALUE_NumShaderCores */ + 0x2, /* gcFEATURE_VALUE_NumShaderCores */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ - 0x200, /* gcFEATURE_VALUE_InstructionCount */ + 0x100, /* gcFEATURE_VALUE_InstructionCount */ 0x240, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0xc, /* gcFEATURE_VALUE_VaryingCount */ + 0x8, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ 0x0, /* gcFEATURE_VALUE_L1CacheSize */ 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ @@ -17915,22 +21617,24 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ - 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ 0x0, /* gcFEATURE_BIT_REG_DebugMode */ 0x1, /* gcFEATURE_BIT_REG_ZCompression */ - 0x1, /* gcFEATURE_BIT_REG_YUV420Filter */ + 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */ 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ - 0x1, /* gcFEATURE_BIT_REG_Pipe2D */ + 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ - 0x0, /* gcFEATURE_BIT_REG_FastScaler */ + 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_MinArea */ 0x0, /* gcFEATURE_BIT_REG_NoEZ */ 0x0, /* gcFEATURE_BIT_REG_No422Texture */ 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ @@ -17949,7 +21653,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ 0x1, /* gcFEATURE_BIT_REG_FlipY */ 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ - 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ 0x1, /* gcFEATURE_BIT_REG_Texture8K */ 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ @@ -17970,15 +21674,15 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ 0x1, /* gcFEATURE_BIT_REG_MC20 */ - 0x1, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ - 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ + 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */ 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ - 0x0, /* gcFEATURE_BIT_REG_EnhanceVR */ + 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ 0x0, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ @@ -17993,44 +21697,44 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */ 0x1, /* gcFEATURE_BIT_REG_PixelDither */ 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ - 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ + 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 */ + 0x0, /* 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_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_BugFixes6 */ 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */ - 0x1, /* gcFEATURE_BIT_REG_LineLoop */ + 0x0, /* gcFEATURE_BIT_REG_LineLoop */ 0x0, /* gcFEATURE_BIT_REG_LogicOp */ - 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ + 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */ - 0x0, /* gcFEATURE_BIT_REG_LinearPE */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_EndEvent */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ - 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ - 0x1, /* gcFEATURE_BIT_REG_TileFiller */ + 0x0, /* gcFEATURE_BIT_REG_TileFiller */ 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */ 0x0, /* gcFEATURE_BIT_REG_YUVConversion */ @@ -18042,15 +21746,15 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */ 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */ 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ 0x0, /* gcFEATURE_BIT_REG_Generics */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ 0x0, /* gcFEATURE_BIT_REG_FastMSAA */ 0x0, /* gcFEATURE_BIT_REG_WClip */ 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */ @@ -18059,7 +21763,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_ACE */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */ @@ -18068,9 +21772,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ @@ -18124,7 +21828,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -18183,7 +21887,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_SUPPORT_MOVAI */ 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */ 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */ 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */ @@ -18264,6 +21968,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -18284,28 +21995,36 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc900_5250 */ + /* gc1500_5246 */ { - 0x900, /* ChipID */ - 0x5250, /* ChipRevision */ - 0x0, /* ProductID */ + 0x1500, /* ChipID */ + 0x5246, /* ChipRevision */ + 0x70003, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ - 0x0, /* FormalRelease */ + 0x6, /* PatchVersion */ + 0x1, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ - 0x200, /* gcFEATURE_VALUE_TempRegisters */ - 0x100, /* gcFEATURE_VALUE_ThreadCount */ - 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x1, /* gcFEATURE_VALUE_NumShaderCores */ + 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 */ - 0x200, /* gcFEATURE_VALUE_InstructionCount */ + 0x400, /* gcFEATURE_VALUE_InstructionCount */ 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x10, /* gcFEATURE_VALUE_VaryingCount */ + 0xf, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ 0x2, /* gcFEATURE_VALUE_L1CacheSize */ 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ @@ -18320,6 +22039,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -18451,7 +22172,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ 0x0, /* gcFEATURE_BIT_REG_OclOnly */ 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */ - 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ + 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ 0x0, /* gcFEATURE_BIT_REG_Generics */ @@ -18462,14 +22183,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */ 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */ 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ - 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */ - 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */ - 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */ + 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 */ @@ -18529,7 +22250,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -18578,7 +22299,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_RS_NEW_BASEADDR */ 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */ 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ @@ -18669,6 +22390,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -18689,33 +22417,41 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc1000_5036 */ + /* gc2000_5108 */ { - 0x1000, /* ChipID */ - 0x5036, /* ChipRevision */ + 0x2000, /* ChipID */ + 0x5108, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ 0x1, /* FormalRelease */ - 0x4, /* gcFEATURE_VALUE_Streams */ + 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x200, /* gcFEATURE_VALUE_ThreadCount */ - 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x2, /* gcFEATURE_VALUE_NumShaderCores */ - 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ + 0x400, /* gcFEATURE_VALUE_ThreadCount */ + 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ + 0x4, /* gcFEATURE_VALUE_NumShaderCores */ + 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ - 0x100, /* gcFEATURE_VALUE_InstructionCount */ - 0x240, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x200, /* gcFEATURE_VALUE_InstructionCount */ + 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x8, /* gcFEATURE_VALUE_VaryingCount */ + 0xb, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ 0x0, /* gcFEATURE_VALUE_L1CacheSize */ 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x0, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ @@ -18725,23 +22461,25 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 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 */ + 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */ 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ - 0x1, /* gcFEATURE_BIT_REG_Pipe2D */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_NoEZ */ 0x0, /* gcFEATURE_BIT_REG_No422Texture */ 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */ @@ -18786,7 +22524,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ - 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */ + 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ @@ -18803,24 +22541,24 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */ 0x1, /* gcFEATURE_BIT_REG_PixelDither */ 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ - 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ + 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 */ + 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 */ + 0x0, /* gcFEATURE_BIT_REG_MMU */ 0x1, /* gcFEATURE_BIT_REG_WideLine */ 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */ - 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */ + 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */ 0x0, /* gcFEATURE_BIT_REG_LineLoop */ 0x0, /* gcFEATURE_BIT_REG_LogicOp */ 0x0, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ @@ -18828,39 +22566,39 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_LinearPE */ 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ - 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ + 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ - 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ + 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_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_MixedStreams */ 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */ + 0x0, /* 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_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 */ - 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ + 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ 0x0, /* gcFEATURE_BIT_REG_Generics */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */ 0x0, /* gcFEATURE_BIT_REG_FastMSAA */ 0x0, /* gcFEATURE_BIT_REG_WClip */ 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */ @@ -18869,7 +22607,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_ACE */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */ @@ -18878,9 +22616,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ @@ -18983,7 +22721,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_RS_NEW_BASEADDR */ 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */ 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ @@ -18993,7 +22731,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -19074,6 +22812,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -19094,33 +22839,41 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc1000_5037 */ + /* gc2000_5140 */ { - 0x1000, /* ChipID */ - 0x5037, /* ChipRevision */ + 0x2000, /* ChipID */ + 0x5140, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ - 0x1, /* FormalRelease */ - 0x4, /* gcFEATURE_VALUE_Streams */ + 0x5, /* PatchVersion */ + 0x0, /* FormalRelease */ + 0x8, /* 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 */ + 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 */ - 0x240, /* gcFEATURE_VALUE_NumberOfConstants */ + 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 */ - 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ @@ -19130,22 +22883,24 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 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 */ + 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */ 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ - 0x1, /* gcFEATURE_BIT_REG_Pipe2D */ + 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_MinArea */ 0x0, /* gcFEATURE_BIT_REG_NoEZ */ 0x0, /* gcFEATURE_BIT_REG_No422Texture */ 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ @@ -19164,7 +22919,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ 0x1, /* gcFEATURE_BIT_REG_FlipY */ 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ - 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */ 0x1, /* gcFEATURE_BIT_REG_Texture8K */ 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ @@ -19191,7 +22946,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ - 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */ + 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ @@ -19213,10 +22968,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ 0x0, /* gcFEATURE_BIT_REG_New2D */ - 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ + 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ - 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */ - 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */ + 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 */ @@ -19224,41 +22979,41 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ - 0x0, /* gcFEATURE_BIT_REG_EndEvent */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */ 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ - 0x0, /* gcFEATURE_BIT_REG_TileFiller */ + 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_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_DecompressZ16 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */ - 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ + 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */ 0x0, /* gcFEATURE_BIT_REG_OclOnly */ 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */ 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ @@ -19268,13 +23023,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ 0x0, /* gcFEATURE_BIT_REG_FastMSAA */ 0x0, /* gcFEATURE_BIT_REG_WClip */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ + 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 */ @@ -19283,7 +23038,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */ - 0x1, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ + 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ 0x1, /* gcFEATURE_BIT_REG_NewHZ */ 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */ @@ -19291,8 +23046,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -19388,7 +23143,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_RS_NEW_BASEADDR */ 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */ 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ @@ -19398,7 +23153,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -19479,6 +23234,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -19499,33 +23261,41 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc1000_5037_1 */ + /* gc2000w_5_1_4_rc0e */ { - 0x1000, /* ChipID */ - 0x5037, /* ChipRevision */ - 0x0, /* ProductID */ - 0x1, /* EcoID */ + 0x2000, /* ChipID */ + 0x5140, /* ChipRevision */ + 0x20000, /* ProductID */ + 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ + 0x5, /* PatchVersion */ 0x1, /* FormalRelease */ - 0x4, /* gcFEATURE_VALUE_Streams */ + 0x8, /* 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 */ + 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 */ - 0x240, /* gcFEATURE_VALUE_NumberOfConstants */ + 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 */ - 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ @@ -19535,6 +23305,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -19550,7 +23322,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ - 0x0, /* gcFEATURE_BIT_REG_MinArea */ + 0x1, /* gcFEATURE_BIT_REG_MinArea */ 0x0, /* gcFEATURE_BIT_REG_NoEZ */ 0x0, /* gcFEATURE_BIT_REG_No422Texture */ 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ @@ -19569,7 +23341,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ 0x1, /* gcFEATURE_BIT_REG_FlipY */ 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ - 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */ 0x1, /* gcFEATURE_BIT_REG_Texture8K */ 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ @@ -19596,7 +23368,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ - 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */ + 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ @@ -19618,10 +23390,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ 0x0, /* gcFEATURE_BIT_REG_New2D */ - 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ + 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ - 0x0, /* gcFEATURE_BIT_REG_NonPowerOfTwo */ - 0x0, /* gcFEATURE_BIT_REG_LinearTextureSupport */ + 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 */ @@ -19629,41 +23401,41 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ - 0x0, /* gcFEATURE_BIT_REG_EndEvent */ + 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_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ - 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */ 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ - 0x0, /* gcFEATURE_BIT_REG_TileFiller */ + 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_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_DecompressZ16 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */ - 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ + 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */ 0x0, /* gcFEATURE_BIT_REG_OclOnly */ 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */ 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ @@ -19673,13 +23445,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ 0x0, /* gcFEATURE_BIT_REG_FastMSAA */ 0x0, /* gcFEATURE_BIT_REG_WClip */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ + 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 */ @@ -19688,7 +23460,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */ - 0x1, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ + 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ 0x1, /* gcFEATURE_BIT_REG_NewHZ */ 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */ @@ -19696,8 +23468,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -19744,7 +23516,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -19793,7 +23565,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_RS_NEW_BASEADDR */ 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */ 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ @@ -19803,7 +23575,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -19884,6 +23656,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -19904,33 +23683,41 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc1000_5039 */ + /* gc2500_5422 */ { - 0x1000, /* ChipID */ - 0x5039, /* ChipRevision */ + 0x2500, /* ChipID */ + 0x5422, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x11, /* PatchVersion */ + 0x12, /* PatchVersion */ 0x1, /* FormalRelease */ - 0x4, /* gcFEATURE_VALUE_Streams */ + 0x10, /* 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 */ + 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 */ - 0x240, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x200, /* gcFEATURE_VALUE_InstructionCount */ + 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x8, /* gcFEATURE_VALUE_VaryingCount */ + 0xf, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x0, /* gcFEATURE_VALUE_L1CacheSize */ - 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ - 0x0, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ + 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 */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ @@ -19940,6 +23727,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -19952,7 +23741,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ - 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ + 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ 0x0, /* gcFEATURE_BIT_REG_MinArea */ @@ -19974,7 +23763,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ 0x1, /* gcFEATURE_BIT_REG_FlipY */ 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ - 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */ 0x1, /* gcFEATURE_BIT_REG_Texture8K */ 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ @@ -20001,11 +23790,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ - 0x1, /* gcFEATURE_BIT_REG_A8TargetSupport */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ @@ -20015,129 +23804,129 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ 0x0, /* gcFEATURE_BIT_REG_L2Windowing */ - 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */ + 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */ 0x1, /* gcFEATURE_BIT_REG_PixelDither */ 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ - 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ + 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes6 */ + 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 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ - 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ - 0x0, /* gcFEATURE_BIT_REG_EndEvent */ + 0x1, /* gcFEATURE_BIT_REG_PESwizzle */ + 0x1, /* gcFEATURE_BIT_REG_EndEvent */ 0x0, /* gcFEATURE_BIT_REG_S1S8 */ - 0x0, /* gcFEATURE_BIT_REG_Halti1 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ - 0x0, /* gcFEATURE_BIT_REG_TileFiller */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */ - 0x0, /* gcFEATURE_BIT_REG_Interleaver */ + 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_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 */ + 0x1, /* 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_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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */ + 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 */ - 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_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 */ - 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 */ + 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 */ + 0x1, /* 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_TXEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */ + 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ - 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ - 0x0, /* gcFEATURE_BIT_REG_Halti2 */ + 0x1, /* gcFEATURE_BIT_REG_Halti2 */ 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ - 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */ + 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ - 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ + 0x1, /* 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */ 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */ @@ -20160,7 +23949,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ 0x0, /* gcFEATURE_BIT_REG_RSS8 */ - 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ + 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x0, /* gcFEATURE_BIT_REG_Halti5 */ 0x0, /* gcFEATURE_BIT_REG_Evis */ 0x0, /* gcFEATURE_BIT_REG_BltEngine */ @@ -20198,7 +23987,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_RS_NEW_BASEADDR */ 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */ 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ @@ -20208,7 +23997,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -20289,6 +24078,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -20309,33 +24105,41 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc1500_5246 */ + /* gc6400_5422 */ { - 0x1500, /* ChipID */ - 0x5246, /* ChipRevision */ - 0x70003, /* ProductID */ + 0x6400, /* ChipID */ + 0x5422, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x6, /* PatchVersion */ + 0x16, /* PatchVersion */ 0x1, /* FormalRelease */ - 0x8, /* gcFEATURE_VALUE_Streams */ + 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x200, /* gcFEATURE_VALUE_ThreadCount */ + 0x800, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x2, /* gcFEATURE_VALUE_NumShaderCores */ - 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ - 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ + 0x8, /* gcFEATURE_VALUE_NumShaderCores */ + 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ + 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ - 0x400, /* gcFEATURE_VALUE_InstructionCount */ + 0x200, /* 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 */ + 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 */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ @@ -20345,6 +24149,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -20404,13 +24210,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ 0x0, /* gcFEATURE_BIT_REG_VAA */ 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ - 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ @@ -20457,29 +24263,29 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_Interleaver */ + 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_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 */ + 0x1, /* 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_Generics */ 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ 0x0, /* gcFEATURE_BIT_REG_FastMSAA */ 0x0, /* gcFEATURE_BIT_REG_WClip */ @@ -20487,16 +24293,16 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */ 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */ 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ - 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ + 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 */ - 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_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 */ @@ -20511,41 +24317,41 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DENoGamma */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */ - 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */ + 0x1, /* 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_TXEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */ + 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ - 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ - 0x0, /* gcFEATURE_BIT_REG_Halti2 */ + 0x1, /* gcFEATURE_BIT_REG_Halti2 */ 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ - 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ - 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ + 0x1, /* 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ + 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 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */ 0x0, /* gcFEATURE_BIT_REG_Halti3 */ 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ @@ -20554,7 +24360,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -20565,7 +24371,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ 0x0, /* gcFEATURE_BIT_REG_RSS8 */ - 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ + 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x0, /* gcFEATURE_BIT_REG_Halti5 */ 0x0, /* gcFEATURE_BIT_REG_Evis */ 0x0, /* gcFEATURE_BIT_REG_BltEngine */ @@ -20694,6 +24500,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -20714,32 +24527,40 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc2000_5108 */ + /* gc3000_5435 */ { - 0x2000, /* ChipID */ - 0x5108, /* ChipRevision */ + 0x3000, /* ChipID */ + 0x5435, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ 0x1, /* FormalRelease */ - 0x8, /* gcFEATURE_VALUE_Streams */ + 0x10, /* 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 */ + 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ 0x200, /* gcFEATURE_VALUE_InstructionCount */ - 0xa8, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0xb, /* gcFEATURE_VALUE_VaryingCount */ + 0xf, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x0, /* gcFEATURE_VALUE_L1CacheSize */ - 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ - 0x0, /* gcFEATURE_VALUE_ShaderPCLength */ + 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 */ @@ -20750,6 +24571,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -20762,11 +24585,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ - 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ + 0x1, /* 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_NoEZ */ 0x0, /* gcFEATURE_BIT_REG_No422Texture */ 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */ @@ -20784,7 +24607,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ 0x1, /* gcFEATURE_BIT_REG_FlipY */ 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ - 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */ 0x1, /* gcFEATURE_BIT_REG_Texture8K */ 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ @@ -20815,7 +24638,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ - 0x0, /* gcFEATURE_BIT_REG_V2Compression */ + 0x1, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ @@ -20825,7 +24648,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ 0x0, /* gcFEATURE_BIT_REG_L2Windowing */ - 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */ + 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */ 0x1, /* gcFEATURE_BIT_REG_PixelDither */ 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ @@ -20842,112 +24665,112 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ - 0x0, /* gcFEATURE_BIT_REG_MMU */ + 0x1, /* 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ - 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ - 0x0, /* gcFEATURE_BIT_REG_EndEvent */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x1, /* gcFEATURE_BIT_REG_PESwizzle */ + 0x1, /* gcFEATURE_BIT_REG_EndEvent */ 0x0, /* gcFEATURE_BIT_REG_S1S8 */ - 0x0, /* gcFEATURE_BIT_REG_Halti1 */ + 0x1, /* gcFEATURE_BIT_REG_Halti1 */ 0x0, /* gcFEATURE_BIT_REG_RGB888 */ 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ - 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ + 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ - 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ - 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ - 0x0, /* gcFEATURE_BIT_REG_TileFiller */ - 0x0, /* gcFEATURE_BIT_REG_YUVStandard */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */ - 0x0, /* gcFEATURE_BIT_REG_Interleaver */ - 0x0, /* gcFEATURE_BIT_REG_MixedStreams */ + 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */ + 0x1, /* gcFEATURE_BIT_REG_Interleaver */ + 0x1, /* gcFEATURE_BIT_REG_MixedStreams */ 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */ + 0x1, /* 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 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ + 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ - 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ - 0x0, /* gcFEATURE_BIT_REG_Generics */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */ - 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */ + 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 */ - 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_NewHZ */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */ + 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 */ + 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 */ + 0x1, /* 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_TXEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */ + 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ - 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ - 0x0, /* gcFEATURE_BIT_REG_Halti2 */ + 0x1, /* gcFEATURE_BIT_REG_Halti2 */ 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ - 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */ + 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ - 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ + 0x1, /* 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ + 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 */ @@ -21003,7 +24826,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -21099,13 +24922,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ 0x0, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ - 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x1, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ 0x0, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ @@ -21119,17 +24949,25 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc2000_5140 */ + /* gc2000_ffff5450 */ { 0x2000, /* ChipID */ - 0x5140, /* ChipRevision */ + 0xffff5450, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x5, /* PatchVersion */ - 0x0, /* FormalRelease */ - 0x8, /* gcFEATURE_VALUE_Streams */ + 0x8, /* PatchVersion */ + 0x1, /* FormalRelease */ + 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x400, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ @@ -21137,14 +24975,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ - 0x100, /* gcFEATURE_VALUE_InstructionCount */ - 0x100, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x200, /* gcFEATURE_VALUE_InstructionCount */ + 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x8, /* gcFEATURE_VALUE_VaryingCount */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x0, /* gcFEATURE_VALUE_L1CacheSize */ - 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ - 0x0, /* gcFEATURE_VALUE_ShaderPCLength */ + 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 */ @@ -21155,6 +24993,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -21167,10 +25007,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ - 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ + 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ - 0x1, /* gcFEATURE_BIT_REG_MinArea */ + 0x0, /* gcFEATURE_BIT_REG_MinArea */ 0x0, /* gcFEATURE_BIT_REG_NoEZ */ 0x0, /* gcFEATURE_BIT_REG_No422Texture */ 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ @@ -21220,7 +25060,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ - 0x0, /* gcFEATURE_BIT_REG_V2Compression */ + 0x1, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ @@ -21230,10 +25070,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ 0x0, /* gcFEATURE_BIT_REG_L2Windowing */ - 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */ + 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */ 0x1, /* gcFEATURE_BIT_REG_PixelDither */ 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ - 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ + 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ @@ -21242,7 +25082,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */ 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */ - 0x0, /* gcFEATURE_BIT_REG_Halti0 */ + 0x1, /* gcFEATURE_BIT_REG_Halti0 */ 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */ 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ @@ -21250,112 +25090,112 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_MMU */ 0x1, /* gcFEATURE_BIT_REG_WideLine */ 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */ - 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ + 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ - 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ - 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x1, /* gcFEATURE_BIT_REG_PESwizzle */ 0x1, /* gcFEATURE_BIT_REG_EndEvent */ 0x0, /* gcFEATURE_BIT_REG_S1S8 */ - 0x0, /* gcFEATURE_BIT_REG_Halti1 */ + 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_FullDirectFB */ 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ - 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */ + 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */ + 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */ - 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */ + 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ 0x0, /* gcFEATURE_BIT_REG_OclOnly */ - 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */ - 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ + 0x1, /* 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_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 */ + 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */ 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ - 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ + 0x1, /* 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */ - 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */ - 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */ - 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */ + 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 */ + 0x1, /* 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_TXEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */ + 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ - 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ - 0x0, /* gcFEATURE_BIT_REG_Halti2 */ + 0x1, /* gcFEATURE_BIT_REG_Halti2 */ 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ - 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */ + 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ - 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ + 0x1, /* 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */ 0x0, /* gcFEATURE_BIT_REG_Halti3 */ 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ @@ -21375,7 +25215,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ 0x0, /* gcFEATURE_BIT_REG_RSS8 */ - 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ + 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x0, /* gcFEATURE_BIT_REG_Halti5 */ 0x0, /* gcFEATURE_BIT_REG_Evis */ 0x0, /* gcFEATURE_BIT_REG_BltEngine */ @@ -21408,7 +25248,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -21466,7 +25306,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_SH_ICACHE_PREFETCH */ 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */ @@ -21504,6 +25344,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -21524,17 +25371,25 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc2000w_5_1_4_rc0e */ + /* gc3000_5450 */ { - 0x2000, /* ChipID */ - 0x5140, /* ChipRevision */ - 0x20000, /* ProductID */ + 0x3000, /* ChipID */ + 0x5450, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x5, /* PatchVersion */ + 0x8, /* PatchVersion */ 0x1, /* FormalRelease */ - 0x8, /* gcFEATURE_VALUE_Streams */ + 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x400, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ @@ -21542,14 +25397,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ - 0x100, /* gcFEATURE_VALUE_InstructionCount */ - 0x100, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x200, /* gcFEATURE_VALUE_InstructionCount */ + 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x8, /* gcFEATURE_VALUE_VaryingCount */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x0, /* gcFEATURE_VALUE_L1CacheSize */ - 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ - 0x0, /* gcFEATURE_VALUE_ShaderPCLength */ + 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 */ @@ -21560,6 +25415,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -21572,10 +25429,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ - 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ + 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ - 0x1, /* gcFEATURE_BIT_REG_MinArea */ + 0x0, /* gcFEATURE_BIT_REG_MinArea */ 0x0, /* gcFEATURE_BIT_REG_NoEZ */ 0x0, /* gcFEATURE_BIT_REG_No422Texture */ 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ @@ -21625,7 +25482,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ - 0x0, /* gcFEATURE_BIT_REG_V2Compression */ + 0x1, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ @@ -21635,10 +25492,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ 0x0, /* gcFEATURE_BIT_REG_L2Windowing */ - 0x0, /* gcFEATURE_BIT_REG_HalfFloatPipe */ + 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */ 0x1, /* gcFEATURE_BIT_REG_PixelDither */ 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ - 0x0, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ + 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ @@ -21647,7 +25504,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */ 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */ - 0x0, /* gcFEATURE_BIT_REG_Halti0 */ + 0x1, /* gcFEATURE_BIT_REG_Halti0 */ 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */ 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ @@ -21655,112 +25512,112 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_MMU */ 0x1, /* gcFEATURE_BIT_REG_WideLine */ 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */ - 0x0, /* gcFEATURE_BIT_REG_FcFlushStall */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ + 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */ 0x0, /* gcFEATURE_BIT_REG_Composition */ - 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ - 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x1, /* gcFEATURE_BIT_REG_PESwizzle */ 0x1, /* gcFEATURE_BIT_REG_EndEvent */ 0x0, /* gcFEATURE_BIT_REG_S1S8 */ - 0x0, /* gcFEATURE_BIT_REG_Halti1 */ + 0x1, /* gcFEATURE_BIT_REG_Halti1 */ 0x0, /* gcFEATURE_BIT_REG_RGB888 */ 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ - 0x0, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ + 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ - 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ - 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */ + 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */ + 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */ - 0x0, /* gcFEATURE_BIT_REG_DERotationStallFix */ + 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ 0x0, /* gcFEATURE_BIT_REG_OclOnly */ - 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */ - 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ + 0x1, /* 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_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 */ + 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */ 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ - 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ + 0x1, /* 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */ - 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */ - 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */ - 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */ + 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 */ + 0x1, /* 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_TXEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */ + 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ - 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ - 0x0, /* gcFEATURE_BIT_REG_Halti2 */ + 0x1, /* gcFEATURE_BIT_REG_Halti2 */ 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ - 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */ + 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ - 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ + 0x1, /* 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */ 0x0, /* gcFEATURE_BIT_REG_Halti3 */ 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ @@ -21769,7 +25626,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ @@ -21780,7 +25637,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ 0x0, /* gcFEATURE_BIT_REG_RSS8 */ - 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ + 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x0, /* gcFEATURE_BIT_REG_Halti5 */ 0x0, /* gcFEATURE_BIT_REG_Evis */ 0x0, /* gcFEATURE_BIT_REG_BltEngine */ @@ -21813,7 +25670,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -21871,7 +25728,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_SH_ICACHE_PREFETCH */ 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */ @@ -21909,6 +25766,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -21929,15 +25793,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc2500_5422 */ + /* gc3000_5451 */ { - 0x2500, /* ChipID */ - 0x5422, /* ChipRevision */ + 0x3000, /* ChipID */ + 0x5451, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x12, /* PatchVersion */ + 0x4, /* PatchVersion */ 0x1, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -21950,7 +25822,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x200, /* gcFEATURE_VALUE_InstructionCount */ 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0xf, /* gcFEATURE_VALUE_VaryingCount */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ 0x4, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ @@ -21965,6 +25837,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -22161,11 +26035,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */ 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */ 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */ - 0x0, /* gcFEATURE_BIT_REG_EEZ */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */ 0x0, /* gcFEATURE_BIT_REG_Halti3 */ 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ @@ -22175,16 +26049,16 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ - 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ + 0x1, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */ - 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_RSS8 */ + 0x1, /* gcFEATURE_BIT_REG_RSS8 */ 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x0, /* gcFEATURE_BIT_REG_Halti5 */ 0x0, /* gcFEATURE_BIT_REG_Evis */ @@ -22218,7 +26092,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -22314,6 +26188,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -22334,30 +26215,38 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc6400_5422 */ + /* gc7000L_551x */ { - 0x6400, /* ChipID */ - 0x5422, /* ChipRevision */ - 0x0, /* ProductID */ + 0x3000, /* ChipID */ + 0x5512, /* ChipRevision */ + 0x70002, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x16, /* PatchVersion */ - 0x1, /* FormalRelease */ + 0x3, /* PatchVersion */ + 0x0, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x800, /* gcFEATURE_VALUE_ThreadCount */ + 0x400, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x8, /* gcFEATURE_VALUE_NumShaderCores */ + 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 */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x8, /* gcFEATURE_VALUE_L1CacheSize */ + 0x4, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ @@ -22370,6 +26259,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -22404,7 +26295,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ 0x1, /* gcFEATURE_BIT_REG_FlipY */ 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ - 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ 0x1, /* gcFEATURE_BIT_REG_Texture8K */ 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ @@ -22476,7 +26367,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x1, /* gcFEATURE_BIT_REG_PESwizzle */ 0x1, /* gcFEATURE_BIT_REG_EndEvent */ - 0x0, /* gcFEATURE_BIT_REG_S1S8 */ + 0x1, /* gcFEATURE_BIT_REG_S1S8 */ 0x1, /* gcFEATURE_BIT_REG_Halti1 */ 0x0, /* gcFEATURE_BIT_REG_RGB888 */ 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ @@ -22511,7 +26402,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */ 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */ 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */ - 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ + 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */ 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ @@ -22557,7 +26448,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x0, /* gcFEATURE_BIT_REG_Probe */ + 0x1, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -22566,30 +26457,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */ 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */ 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */ - 0x0, /* gcFEATURE_BIT_REG_EEZ */ + 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_Halti4 */ + 0x1, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */ + 0x1, /* gcFEATURE_BIT_REG_L2CacheRemove */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */ - 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */ - 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ + 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ - 0x0, /* gcFEATURE_BIT_REG_RSS8 */ + 0x1, /* gcFEATURE_BIT_REG_RSS8 */ 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x0, /* gcFEATURE_BIT_REG_Halti5 */ 0x0, /* gcFEATURE_BIT_REG_Evis */ @@ -22623,7 +26514,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -22666,7 +26557,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -22677,11 +26568,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* 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_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 */ @@ -22692,7 +26583,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */ 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */ 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ @@ -22713,19 +26604,26 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ 0x0, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ - 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x1, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ 0x0, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ @@ -22739,15 +26637,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc3000_5435 */ + /* gc7000L_5512 */ { 0x3000, /* ChipID */ - 0x5435, /* ChipRevision */ - 0x0, /* ProductID */ + 0x5512, /* ChipRevision */ + 0x70002, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ + 0x3, /* PatchVersion */ 0x1, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -22760,7 +26666,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x200, /* gcFEATURE_VALUE_InstructionCount */ 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0xf, /* gcFEATURE_VALUE_VaryingCount */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ 0x4, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ @@ -22775,6 +26681,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -22809,7 +26717,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ 0x1, /* gcFEATURE_BIT_REG_FlipY */ 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ - 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ 0x1, /* gcFEATURE_BIT_REG_Texture8K */ 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ @@ -22881,7 +26789,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x1, /* gcFEATURE_BIT_REG_PESwizzle */ 0x1, /* gcFEATURE_BIT_REG_EndEvent */ - 0x0, /* gcFEATURE_BIT_REG_S1S8 */ + 0x1, /* gcFEATURE_BIT_REG_S1S8 */ 0x1, /* gcFEATURE_BIT_REG_Halti1 */ 0x0, /* gcFEATURE_BIT_REG_RGB888 */ 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ @@ -22916,7 +26824,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */ 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */ 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */ - 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ + 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */ 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ @@ -22962,7 +26870,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x0, /* gcFEATURE_BIT_REG_Probe */ + 0x1, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -22975,27 +26883,27 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_Halti4 */ + 0x1, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */ + 0x1, /* gcFEATURE_BIT_REG_L2CacheRemove */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */ - 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */ - 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ + 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ - 0x0, /* gcFEATURE_BIT_REG_RSS8 */ - 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ + 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 */ @@ -23071,7 +26979,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -23082,11 +26990,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* 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_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 */ @@ -23097,7 +27005,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */ 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */ 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ @@ -23118,12 +27026,19 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -23144,15 +27059,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc2000_ffff5450 */ + /* gc7000L_5514 */ { - 0x2000, /* ChipID */ - 0xffff5450, /* ChipRevision */ - 0x0, /* ProductID */ + 0x3000, /* ChipID */ + 0x5514, /* ChipRevision */ + 0x70002, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x8, /* PatchVersion */ + 0x0, /* PatchVersion */ 0x1, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -23180,6 +27103,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -23214,7 +27139,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ 0x1, /* gcFEATURE_BIT_REG_FlipY */ 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ - 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ 0x1, /* gcFEATURE_BIT_REG_Texture8K */ 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ @@ -23286,7 +27211,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x1, /* gcFEATURE_BIT_REG_PESwizzle */ 0x1, /* gcFEATURE_BIT_REG_EndEvent */ - 0x0, /* gcFEATURE_BIT_REG_S1S8 */ + 0x1, /* gcFEATURE_BIT_REG_S1S8 */ 0x1, /* gcFEATURE_BIT_REG_Halti1 */ 0x0, /* gcFEATURE_BIT_REG_RGB888 */ 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ @@ -23321,7 +27246,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */ 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */ 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */ - 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ + 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */ 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ @@ -23367,7 +27292,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x0, /* gcFEATURE_BIT_REG_Probe */ + 0x1, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -23381,25 +27306,25 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */ - 0x0, /* gcFEATURE_BIT_REG_Halti3 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_Halti4 */ + 0x1, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */ + 0x1, /* gcFEATURE_BIT_REG_L2CacheRemove */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */ - 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */ - 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ + 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ - 0x0, /* gcFEATURE_BIT_REG_RSS8 */ + 0x1, /* gcFEATURE_BIT_REG_RSS8 */ 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x0, /* gcFEATURE_BIT_REG_Halti5 */ 0x0, /* gcFEATURE_BIT_REG_Evis */ @@ -23475,8 +27400,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* 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 */ @@ -23487,10 +27412,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* 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_ALLOC_COUNT_FIX */ 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */ 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -23502,8 +27427,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */ + 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */ 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ @@ -23519,23 +27444,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */ 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */ 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */ - 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */ + 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 */ - 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */ + 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 */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ 0x0, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ - 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x1, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ 0x0, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ @@ -23549,32 +27481,40 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc3000_5450 */ + /* gc4000_5222 */ { - 0x3000, /* ChipID */ - 0x5450, /* ChipRevision */ + 0x4000, /* ChipID */ + 0x5222, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x8, /* PatchVersion */ + 0x0, /* PatchVersion */ 0x1, /* FormalRelease */ - 0x10, /* gcFEATURE_VALUE_Streams */ + 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x400, /* gcFEATURE_VALUE_ThreadCount */ + 0x800, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x4, /* gcFEATURE_VALUE_NumShaderCores */ + 0x8, /* gcFEATURE_VALUE_NumShaderCores */ 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ - 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ + 0x800, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ - 0x200, /* gcFEATURE_VALUE_InstructionCount */ - 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x800, /* gcFEATURE_VALUE_InstructionCount */ + 0x200, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x10, /* gcFEATURE_VALUE_VaryingCount */ + 0xb, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x4, /* gcFEATURE_VALUE_L1CacheSize */ - 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ - 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ + 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 */ @@ -23585,6 +27525,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -23650,7 +27592,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ - 0x1, /* gcFEATURE_BIT_REG_V2Compression */ + 0x0, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ @@ -23687,7 +27629,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */ 0x1, /* gcFEATURE_BIT_REG_LinearPE */ 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */ - 0x0, /* gcFEATURE_BIT_REG_Composition */ + 0x1, /* gcFEATURE_BIT_REG_Composition */ 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x1, /* gcFEATURE_BIT_REG_PESwizzle */ 0x1, /* gcFEATURE_BIT_REG_EndEvent */ @@ -23697,8 +27639,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_FullDirectFB */ + 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */ 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ 0x1, /* gcFEATURE_BIT_REG_TileFiller */ 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ @@ -23710,82 +27652,82 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */ 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */ - 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ + 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */ + 0x0, /* 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_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 */ - 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */ + 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */ + 0x0, /* 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_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 */ - 0x1, /* gcFEATURE_BIT_REG_NewHZ */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */ + 0x0, /* gcFEATURE_BIT_REG_NewHZ */ + 0x0, /* 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_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 */ - 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */ + 0x0, /* 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_TXEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */ + 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ - 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */ + 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ - 0x1, /* gcFEATURE_BIT_REG_Halti2 */ + 0x0, /* gcFEATURE_BIT_REG_Halti2 */ 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ - 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ + 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ - 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ + 0x0, /* 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_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 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */ + 0x0, /* 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_BugFixes22 */ 0x0, /* gcFEATURE_BIT_REG_Halti3 */ 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ @@ -23805,7 +27747,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ 0x0, /* gcFEATURE_BIT_REG_RSS8 */ - 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ + 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x0, /* gcFEATURE_BIT_REG_Halti5 */ 0x0, /* gcFEATURE_BIT_REG_Evis */ 0x0, /* gcFEATURE_BIT_REG_BltEngine */ @@ -23838,7 +27780,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_SH_HALFDEPENDENCY_FIX */ 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */ 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */ 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */ @@ -23896,7 +27838,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_SH_ICACHE_PREFETCH */ 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */ @@ -23934,6 +27876,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -23954,32 +27903,40 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc3000_5451 */ + /* gc4000_5245 */ { - 0x3000, /* ChipID */ - 0x5451, /* ChipRevision */ + 0x4000, /* ChipID */ + 0x5245, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x4, /* PatchVersion */ + 0x0, /* PatchVersion */ 0x1, /* FormalRelease */ - 0x10, /* gcFEATURE_VALUE_Streams */ + 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x400, /* gcFEATURE_VALUE_ThreadCount */ + 0x800, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x4, /* gcFEATURE_VALUE_NumShaderCores */ + 0x8, /* gcFEATURE_VALUE_NumShaderCores */ 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ - 0x200, /* gcFEATURE_VALUE_InstructionCount */ + 0x400, /* gcFEATURE_VALUE_InstructionCount */ 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x10, /* gcFEATURE_VALUE_VaryingCount */ + 0xf, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x4, /* gcFEATURE_VALUE_L1CacheSize */ - 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ - 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ + 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 */ @@ -23990,6 +27947,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -24055,7 +28014,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ - 0x1, /* gcFEATURE_BIT_REG_V2Compression */ + 0x0, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ @@ -24102,8 +28061,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_FullDirectFB */ + 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */ 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ 0x1, /* gcFEATURE_BIT_REG_TileFiller */ 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ @@ -24120,11 +28079,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_NewFeatures0 */ + 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ - 0x1, /* gcFEATURE_BIT_REG_Generics */ + 0x0, /* gcFEATURE_BIT_REG_Generics */ 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ 0x0, /* gcFEATURE_BIT_REG_FastMSAA */ 0x0, /* gcFEATURE_BIT_REG_WClip */ @@ -24132,16 +28091,16 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */ 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */ 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ - 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ + 0x0, /* 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 */ + 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 */ @@ -24156,41 +28115,41 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DENoGamma */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */ - 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */ - 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */ - 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */ - 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */ + 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ - 0x1, /* gcFEATURE_BIT_REG_Halti2 */ + 0x0, /* gcFEATURE_BIT_REG_Halti2 */ 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ - 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ + 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ - 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ + 0x0, /* 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_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 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */ + 0x0, /* 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_BugFixes22 */ 0x0, /* gcFEATURE_BIT_REG_Halti3 */ 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ @@ -24200,17 +28159,17 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ - 0x1, /* gcFEATURE_BIT_REG_TXSupportDEC */ + 0x0, /* 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_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_RSS8 */ + 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x0, /* gcFEATURE_BIT_REG_Halti5 */ 0x0, /* gcFEATURE_BIT_REG_Evis */ 0x0, /* gcFEATURE_BIT_REG_BltEngine */ @@ -24243,7 +28202,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_SH_HALFDEPENDENCY_FIX */ 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */ 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */ 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */ @@ -24339,6 +28298,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -24359,30 +28325,38 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000L_551x */ + /* gc5000_5434 */ { - 0x3000, /* ChipID */ - 0x5512, /* ChipRevision */ - 0x70002, /* ProductID */ + 0x5000, /* ChipID */ + 0x5434, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x3, /* PatchVersion */ - 0x0, /* FormalRelease */ + 0x0, /* PatchVersion */ + 0x1, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x400, /* gcFEATURE_VALUE_ThreadCount */ + 0x800, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x4, /* gcFEATURE_VALUE_NumShaderCores */ + 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 */ + 0xf, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x4, /* gcFEATURE_VALUE_L1CacheSize */ + 0x8, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ @@ -24395,6 +28369,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -24429,7 +28405,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ 0x1, /* gcFEATURE_BIT_REG_FlipY */ 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ - 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */ 0x1, /* gcFEATURE_BIT_REG_Texture8K */ 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ @@ -24501,7 +28477,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x1, /* gcFEATURE_BIT_REG_PESwizzle */ 0x1, /* gcFEATURE_BIT_REG_EndEvent */ - 0x1, /* gcFEATURE_BIT_REG_S1S8 */ + 0x0, /* gcFEATURE_BIT_REG_S1S8 */ 0x1, /* gcFEATURE_BIT_REG_Halti1 */ 0x0, /* gcFEATURE_BIT_REG_RGB888 */ 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ @@ -24536,7 +28512,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */ 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */ 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */ - 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */ + 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ @@ -24582,7 +28558,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x1, /* gcFEATURE_BIT_REG_Probe */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -24591,31 +28567,31 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */ 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */ 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */ - 0x1, /* gcFEATURE_BIT_REG_EEZ */ + 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 */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_Halti4 */ + 0x0, /* gcFEATURE_BIT_REG_Halti4 */ 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x0, /* 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_BugFixesIn544 */ + 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */ + 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */ - 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */ - 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ + 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_RSS8 */ + 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x0, /* gcFEATURE_BIT_REG_Halti5 */ 0x0, /* gcFEATURE_BIT_REG_Evis */ 0x0, /* gcFEATURE_BIT_REG_BltEngine */ @@ -24691,7 +28667,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_TX_INTEGER_COORDINATE */ 0x0, /* gcFEATURE_BIT_DRAWID */ 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */ 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */ @@ -24702,11 +28678,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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_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 */ @@ -24717,7 +28693,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_PE_MSAA_OQ_FIX */ 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */ 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ @@ -24738,19 +28714,26 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ 0x0, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ - 0x1, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ 0x0, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ @@ -24764,21 +28747,29 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000L_5512 */ + /* gc7000_551x */ { - 0x3000, /* ChipID */ - 0x5512, /* ChipRevision */ - 0x70002, /* ProductID */ + 0x5000, /* ChipID */ + 0x5513, /* ChipRevision */ + 0x70000, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x3, /* PatchVersion */ - 0x1, /* FormalRelease */ + 0x1, /* PatchVersion */ + 0x0, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x400, /* gcFEATURE_VALUE_ThreadCount */ + 0x800, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x4, /* gcFEATURE_VALUE_NumShaderCores */ + 0x8, /* gcFEATURE_VALUE_NumShaderCores */ 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ @@ -24787,7 +28778,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x4, /* gcFEATURE_VALUE_L1CacheSize */ + 0x8, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ @@ -24800,6 +28791,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -25149,6 +29142,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -25169,21 +29169,29 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000L_5514 */ + /* gc7000_5513 */ { - 0x3000, /* ChipID */ - 0x5514, /* ChipRevision */ - 0x70002, /* ProductID */ + 0x5000, /* ChipID */ + 0x5513, /* ChipRevision */ + 0x70000, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ + 0x1, /* PatchVersion */ 0x1, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x400, /* gcFEATURE_VALUE_ThreadCount */ + 0x800, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x4, /* gcFEATURE_VALUE_NumShaderCores */ + 0x8, /* gcFEATURE_VALUE_NumShaderCores */ 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ @@ -25192,7 +29200,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x4, /* gcFEATURE_VALUE_L1CacheSize */ + 0x8, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ @@ -25205,6 +29213,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -25500,7 +29510,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_RSBLT_MSAA_DECOMPRESSION */ 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */ 0x0, /* gcFEATURE_BIT_DRAWID */ 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */ @@ -25528,7 +29538,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */ 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ @@ -25544,7 +29554,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_PA_WIDELINE_FIX */ 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */ 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */ 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */ @@ -25554,6 +29564,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -25574,35 +29591,43 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc4000_5222 */ + /* gcXAQ2_CMODEL */ { - 0x4000, /* ChipID */ - 0x5222, /* ChipRevision */ + 0x7000, /* ChipID */ + 0x0, /* 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 */ + 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 */ - 0x800, /* gcFEATURE_VALUE_VertexOutputBufferSize */ + 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ - 0x800, /* gcFEATURE_VALUE_InstructionCount */ - 0x200, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x200, /* gcFEATURE_VALUE_InstructionCount */ + 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0xb, /* gcFEATURE_VALUE_VaryingCount */ + 0x1f, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ 0x0, /* gcFEATURE_VALUE_L1CacheSize */ - 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ - 0x0, /* gcFEATURE_VALUE_ShaderPCLength */ + 0x100, /* gcFEATURE_VALUE_InstructionMemorySize */ + 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */ - 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ + 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ @@ -25610,16 +29635,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 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_YUV420Filter */ 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ - 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ + 0x1, /* gcFEATURE_BIT_REG_Pipe2D */ 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ @@ -25644,7 +29671,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ 0x1, /* gcFEATURE_BIT_REG_FlipY */ 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ - 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ 0x1, /* gcFEATURE_BIT_REG_Texture8K */ 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ @@ -25667,7 +29694,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_MC20 */ 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ - 0x0, /* gcFEATURE_BIT_REG_VAA */ + 0x1, /* gcFEATURE_BIT_REG_VAA */ 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ @@ -25675,11 +29702,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ - 0x0, /* gcFEATURE_BIT_REG_V2Compression */ + 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_TextureStride */ 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */ 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ @@ -25689,7 +29716,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PixelDither */ 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ - 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ + 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ 0x0, /* gcFEATURE_BIT_REG_New2D */ @@ -25698,7 +29725,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */ 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */ 0x1, /* gcFEATURE_BIT_REG_Halti0 */ - 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */ + 0x1, /* gcFEATURE_BIT_REG_CorrectOverflowVG */ 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ @@ -25712,128 +29739,128 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */ 0x1, /* gcFEATURE_BIT_REG_LinearPE */ 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */ - 0x1, /* gcFEATURE_BIT_REG_Composition */ + 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_S1S8 */ 0x1, /* gcFEATURE_BIT_REG_Halti1 */ - 0x0, /* gcFEATURE_BIT_REG_RGB888 */ + 0x1, /* 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_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_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 */ - 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ - 0x0, /* gcFEATURE_BIT_REG_Generics */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */ + 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 */ - 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 */ + 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 */ - 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_NewHZ */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */ + 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ - 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ - 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ - 0x0, /* gcFEATURE_BIT_REG_Halti2 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */ + 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x0, /* gcFEATURE_BIT_REG_Probe */ - 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ + 0x1, /* gcFEATURE_BIT_REG_Probe */ + 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */ + 0x1, /* 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_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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_Halti4 */ - 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ + 0x1, /* 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 */ + 0x1, /* gcFEATURE_BIT_REG_CubeMapFL28 */ + 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */ 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ - 0x0, /* gcFEATURE_BIT_REG_RSS8 */ + 0x1, /* gcFEATURE_BIT_REG_RSS8 */ 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ - 0x0, /* gcFEATURE_BIT_REG_Halti5 */ - 0x0, /* gcFEATURE_BIT_REG_Evis */ - 0x0, /* gcFEATURE_BIT_REG_BltEngine */ + 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 */ @@ -25853,8 +29880,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -25863,7 +29890,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -25878,7 +29905,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_SUPPORT_MOVAI */ 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */ 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */ 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */ @@ -25919,9 +29946,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ @@ -25932,10 +29959,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */ 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */ - 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ - 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ + 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ + 0x1, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */ @@ -25949,23 +29976,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */ 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */ 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */ - 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */ + 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 */ - 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */ + 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 */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ 0x0, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ - 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x1, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ 0x0, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ @@ -25979,17 +30013,25 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc4000_5245 */ + /* gc7000XS_600x */ { - 0x4000, /* ChipID */ - 0x5245, /* ChipRevision */ - 0x0, /* ProductID */ + 0x7000, /* ChipID */ + 0x6008, /* ChipRevision */ + 0x70004, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ - 0x1, /* FormalRelease */ - 0x8, /* gcFEATURE_VALUE_Streams */ + 0xb, /* PatchVersion */ + 0x0, /* FormalRelease */ + 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x800, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ @@ -25997,17 +30039,17 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ - 0x400, /* gcFEATURE_VALUE_InstructionCount */ + 0x200, /* 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 */ + 0x1f, /* gcFEATURE_VALUE_VaryingCount */ + 0x40, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x40, /* 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 */ + 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ @@ -26015,6 +30057,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -26049,7 +30093,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ 0x1, /* gcFEATURE_BIT_REG_FlipY */ 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ - 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ 0x1, /* gcFEATURE_BIT_REG_Texture8K */ 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ @@ -26080,7 +30124,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ - 0x0, /* gcFEATURE_BIT_REG_V2Compression */ + 0x1, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ @@ -26121,14 +30165,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x1, /* gcFEATURE_BIT_REG_PESwizzle */ 0x1, /* gcFEATURE_BIT_REG_EndEvent */ - 0x0, /* gcFEATURE_BIT_REG_S1S8 */ + 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 */ + 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 */ @@ -26145,28 +30189,28 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_NewFeatures0 */ + 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ + 0x1, /* gcFEATURE_BIT_REG_GeometryShader */ 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ - 0x0, /* gcFEATURE_BIT_REG_Generics */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ + 0x1, /* 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 */ - 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_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 */ @@ -26181,65 +30225,65 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ - 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ - 0x0, /* gcFEATURE_BIT_REG_Halti2 */ + 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_Halti2 */ 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ - 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */ + 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x0, /* gcFEATURE_BIT_REG_Probe */ - 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ + 0x1, /* gcFEATURE_BIT_REG_Probe */ + 0x1, /* 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ + 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_Halti4 */ - 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ + 0x1, /* gcFEATURE_BIT_REG_Halti4 */ + 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ - 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ - 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ + 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */ + 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */ 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */ - 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */ - 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */ - 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ + 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ - 0x0, /* gcFEATURE_BIT_REG_RSS8 */ - 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ - 0x0, /* gcFEATURE_BIT_REG_Halti5 */ + 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 */ + 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 */ @@ -26252,19 +30296,19 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_HWTFB */ + 0x1, /* gcFEATURE_BIT_HWTFB */ 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */ 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */ 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */ @@ -26275,7 +30319,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -26310,23 +30354,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_RSBLT_MSAA_DECOMPRESSION */ 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */ - 0x0, /* gcFEATURE_BIT_DRAWID */ + 0x1, /* gcFEATURE_BIT_DRAWID */ 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */ - 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */ + 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_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_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 */ @@ -26337,10 +30381,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */ 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */ 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ - 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ + 0x1, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */ @@ -26354,19 +30398,26 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */ 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */ 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */ - 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */ + 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 */ - 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */ + 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 */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ - 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ + 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ 0x0, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ @@ -26384,15 +30435,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc5000_5434 */ + /* gc7000XS_6008 */ { - 0x5000, /* ChipID */ - 0x5434, /* ChipRevision */ - 0x0, /* ProductID */ + 0x7000, /* ChipID */ + 0x6008, /* ChipRevision */ + 0x70004, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ + 0xb, /* PatchVersion */ 0x1, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -26405,14 +30464,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x200, /* gcFEATURE_VALUE_InstructionCount */ 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0xf, /* gcFEATURE_VALUE_VaryingCount */ - 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x8, /* gcFEATURE_VALUE_L1CacheSize */ + 0x1f, /* gcFEATURE_VALUE_VaryingCount */ + 0x40, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x40, /* 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 */ + 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ @@ -26420,6 +30479,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -26454,7 +30515,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ 0x1, /* gcFEATURE_BIT_REG_FlipY */ 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ - 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ 0x1, /* gcFEATURE_BIT_REG_Texture8K */ 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ @@ -26526,7 +30587,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ 0x1, /* gcFEATURE_BIT_REG_PESwizzle */ 0x1, /* gcFEATURE_BIT_REG_EndEvent */ - 0x0, /* gcFEATURE_BIT_REG_S1S8 */ + 0x1, /* gcFEATURE_BIT_REG_S1S8 */ 0x1, /* gcFEATURE_BIT_REG_Halti1 */ 0x0, /* gcFEATURE_BIT_REG_RGB888 */ 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ @@ -26552,7 +30613,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_OclOnly */ 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ - 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ + 0x1, /* gcFEATURE_BIT_REG_GeometryShader */ 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ 0x1, /* gcFEATURE_BIT_REG_Generics */ 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ @@ -26561,7 +30622,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */ 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */ 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */ - 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ + 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */ 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ @@ -26587,7 +30648,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */ 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */ - 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */ 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */ 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */ @@ -26595,7 +30656,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ - 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ 0x1, /* gcFEATURE_BIT_REG_Halti2 */ 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */ @@ -26607,44 +30668,44 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x0, /* gcFEATURE_BIT_REG_Probe */ + 0x1, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_EEZ */ + 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_Halti4 */ - 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ + 0x1, /* gcFEATURE_BIT_REG_Halti4 */ + 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ - 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ - 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ + 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */ + 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */ 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */ - 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */ - 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */ - 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ + 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ - 0x0, /* gcFEATURE_BIT_REG_RSS8 */ - 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ - 0x0, /* gcFEATURE_BIT_REG_Halti5 */ + 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 */ + 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 */ @@ -26657,30 +30718,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_HWTFB */ + 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_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 */ + 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 */ @@ -26715,23 +30776,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_RSBLT_MSAA_DECOMPRESSION */ 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */ - 0x0, /* gcFEATURE_BIT_DRAWID */ + 0x1, /* gcFEATURE_BIT_DRAWID */ 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */ - 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */ + 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_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_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 */ @@ -26742,10 +30803,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */ 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */ 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ - 0x0, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ + 0x1, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */ @@ -26759,19 +30820,26 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */ 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */ 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */ - 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */ + 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 */ - 0x0, /* gcFEATURE_BIT_PE_DITHER_FIX2 */ + 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 */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ - 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ + 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ 0x0, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ @@ -26789,15 +30857,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x1, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000_551x */ + /* gc7000XSVX_600x */ { - 0x5000, /* ChipID */ - 0x5513, /* ChipRevision */ - 0x70000, /* ProductID */ + 0x7000, /* ChipID */ + 0x6008, /* ChipRevision */ + 0x70008, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x1, /* PatchVersion */ + 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -26810,14 +30886,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x200, /* gcFEATURE_VALUE_InstructionCount */ 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x10, /* gcFEATURE_VALUE_VaryingCount */ - 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x8, /* gcFEATURE_VALUE_L1CacheSize */ + 0x1f, /* gcFEATURE_VALUE_VaryingCount */ + 0x40, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x40, /* 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 */ + 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ @@ -26825,6 +30901,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -26957,7 +31035,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_OclOnly */ 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ - 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ + 0x1, /* gcFEATURE_BIT_REG_GeometryShader */ 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ 0x1, /* gcFEATURE_BIT_REG_Generics */ 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ @@ -26992,7 +31070,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */ 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */ - 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */ 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */ 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */ @@ -27000,7 +31078,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ - 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ 0x1, /* gcFEATURE_BIT_REG_Halti2 */ 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */ @@ -27015,7 +31093,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */ 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */ @@ -27027,18 +31105,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */ 0x1, /* gcFEATURE_BIT_REG_Halti3 */ - 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ + 0x1, /* 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_S8MSAACompression */ 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */ - 0x1, /* gcFEATURE_BIT_REG_L2CacheRemove */ + 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */ 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */ 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */ @@ -27046,9 +31124,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -27062,30 +31140,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_HWTFB */ + 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_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 */ + 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 */ @@ -27106,7 +31184,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_ROBUSTNESS */ 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */ 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */ - 0x0, /* gcFEATURE_BIT_USC_VX_PERF_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 */ @@ -27120,21 +31198,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */ + 0x0, /* 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_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_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_SH_IMG_LDST_ON_TEMP */ 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */ - 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */ + 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 */ @@ -27164,7 +31242,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */ 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */ 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */ - 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */ + 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 */ @@ -27174,13 +31252,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ 0x0, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ - 0x1, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ 0x0, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ @@ -27194,15 +31279,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x1, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000_5513 */ + /* gc7000XSVX_6008 */ { - 0x5000, /* ChipID */ - 0x5513, /* ChipRevision */ - 0x70000, /* ProductID */ + 0x7000, /* ChipID */ + 0x6008, /* ChipRevision */ + 0x70008, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x1, /* PatchVersion */ + 0x7, /* PatchVersion */ 0x1, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -27215,14 +31308,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x200, /* gcFEATURE_VALUE_InstructionCount */ 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x10, /* gcFEATURE_VALUE_VaryingCount */ - 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x8, /* gcFEATURE_VALUE_L1CacheSize */ + 0x1f, /* gcFEATURE_VALUE_VaryingCount */ + 0x40, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x40, /* 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 */ + 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ @@ -27230,6 +31323,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -27362,7 +31457,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_OclOnly */ 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ - 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ + 0x1, /* gcFEATURE_BIT_REG_GeometryShader */ 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ 0x1, /* gcFEATURE_BIT_REG_Generics */ 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ @@ -27397,7 +31492,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */ 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */ - 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */ 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */ 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */ @@ -27405,7 +31500,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ - 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ 0x1, /* gcFEATURE_BIT_REG_Halti2 */ 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */ @@ -27420,7 +31515,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */ 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */ @@ -27432,18 +31527,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */ 0x1, /* gcFEATURE_BIT_REG_Halti3 */ - 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ + 0x1, /* 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_S8MSAACompression */ 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */ - 0x1, /* gcFEATURE_BIT_REG_L2CacheRemove */ + 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */ 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */ 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */ @@ -27451,9 +31546,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -27467,30 +31562,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_HWTFB */ + 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_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 */ + 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 */ @@ -27511,7 +31606,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_ROBUSTNESS */ 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */ 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */ - 0x0, /* gcFEATURE_BIT_USC_VX_PERF_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 */ @@ -27525,21 +31620,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */ + 0x0, /* 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_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_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_SH_IMG_LDST_ON_TEMP */ 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */ - 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */ + 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 */ @@ -27569,7 +31664,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */ 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */ 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */ - 0x0, /* gcFEATURE_BIT_PA_WIDELINE_FIX */ + 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 */ @@ -27579,13 +31674,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ 0x0, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ - 0x1, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ 0x0, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ @@ -27599,34 +31701,42 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x1, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gcXAQ2_CMODEL */ + /* gc7000XSVX_6009 */ { 0x7000, /* ChipID */ - 0x0, /* ChipRevision */ - 0x0, /* ProductID */ + 0x6009, /* ChipRevision */ + 0x70008, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ - 0x0, /* FormalRelease */ + 0x9, /* PatchVersion */ + 0x1, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ - 0x200, /* gcFEATURE_VALUE_TempRegisters */ - 0x100, /* gcFEATURE_VALUE_ThreadCount */ - 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ + 0x40, /* gcFEATURE_VALUE_TempRegisters */ + 0x800, /* gcFEATURE_VALUE_ThreadCount */ + 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ 0x8, /* gcFEATURE_VALUE_NumShaderCores */ 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ - 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ + 0x400, /* 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 */ + 0x40, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x40, /* gcFEATURE_VALUE_L1CacheSize */ + 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ @@ -27635,16 +31745,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 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 */ + 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */ 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ - 0x1, /* gcFEATURE_BIT_REG_Pipe2D */ + 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ @@ -27692,7 +31804,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_MC20 */ 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ - 0x1, /* gcFEATURE_BIT_REG_VAA */ + 0x0, /* gcFEATURE_BIT_REG_VAA */ 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ @@ -27704,7 +31816,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ - 0x1, /* gcFEATURE_BIT_REG_TextureStride */ + 0x0, /* gcFEATURE_BIT_REG_TextureStride */ 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */ 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ @@ -27714,7 +31826,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PixelDither */ 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ - 0x0, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ + 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ 0x0, /* gcFEATURE_BIT_REG_New2D */ @@ -27723,7 +31835,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */ 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */ 0x1, /* gcFEATURE_BIT_REG_Halti0 */ - 0x1, /* gcFEATURE_BIT_REG_CorrectOverflowVG */ + 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */ 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ @@ -27743,7 +31855,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_EndEvent */ 0x1, /* gcFEATURE_BIT_REG_S1S8 */ 0x1, /* gcFEATURE_BIT_REG_Halti1 */ - 0x1, /* gcFEATURE_BIT_REG_RGB888 */ + 0x0, /* gcFEATURE_BIT_REG_RGB888 */ 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ @@ -27752,8 +31864,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -27765,7 +31877,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */ 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ 0x0, /* gcFEATURE_BIT_REG_OclOnly */ - 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */ + 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ 0x1, /* gcFEATURE_BIT_REG_GeometryShader */ 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ @@ -27781,7 +31893,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */ - 0x0, /* gcFEATURE_BIT_REG_ACE */ + 0x1, /* gcFEATURE_BIT_REG_ACE */ 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */ 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */ 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */ @@ -27809,12 +31921,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */ - 0x1, /* gcFEATURE_BIT_REG_PEEnhancements4 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */ 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */ 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */ 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */ @@ -27826,12 +31938,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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_EEZ */ 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */ 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ @@ -27844,22 +31956,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_Halti4 */ 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ - 0x0, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */ - 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */ 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */ - 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ - 0x1, /* gcFEATURE_BIT_REG_CubeMapFL28 */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ + 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */ 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */ - 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ 0x1, /* gcFEATURE_BIT_REG_RSS8 */ - 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ + 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 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ 0x0, /* gcFEATURE_BIT_REG_DEC */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ @@ -27872,7 +31984,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */ 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ 0x0, /* gcFEATURE_BIT_V4Compression */ 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */ @@ -27880,11 +31992,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */ 0x1, /* gcFEATURE_BIT_NEW_GPIPE */ 0x1, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */ - 0x0, /* gcFEATURE_BIT_MSAA_SHADING */ + 0x1, /* gcFEATURE_BIT_MSAA_SHADING */ 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ 0x0, /* gcFEATURE_BIT_NO_ASTC */ 0x0, /* gcFEATURE_BIT_NO_DXT */ - 0x0, /* gcFEATURE_BIT_HWTFB */ + 0x1, /* gcFEATURE_BIT_HWTFB */ 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */ 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */ 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */ @@ -27894,8 +32006,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -27903,7 +32015,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -27914,9 +32026,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -27930,16 +32042,16 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_RSBLT_MSAA_DECOMPRESSION */ 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */ - 0x0, /* gcFEATURE_BIT_DRAWID */ + 0x1, /* gcFEATURE_BIT_DRAWID */ 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */ - 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */ + 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_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 */ @@ -27984,13 +32096,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ - 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ - 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ + 0x1, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ + 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ 0x0, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ - 0x1, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ 0x0, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ @@ -28004,15 +32123,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x1, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000XS_600x */ + /* gc7000_6100 */ { 0x7000, /* ChipID */ - 0x6008, /* ChipRevision */ - 0x70004, /* ProductID */ + 0x6100, /* ChipRevision */ + 0x70000, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0xb, /* PatchVersion */ + 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -28025,13 +32152,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x200, /* gcFEATURE_VALUE_InstructionCount */ 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x1f, /* gcFEATURE_VALUE_VaryingCount */ - 0x40, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x40, /* gcFEATURE_VALUE_L1CacheSize */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ + 0x20, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x20, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x20, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ @@ -28040,6 +32167,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -28050,7 +32179,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ - 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ @@ -28172,7 +32301,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_OclOnly */ 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ - 0x1, /* gcFEATURE_BIT_REG_GeometryShader */ + 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ 0x1, /* gcFEATURE_BIT_REG_Generics */ 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ @@ -28242,7 +32371,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */ 0x1, /* gcFEATURE_BIT_REG_Halti3 */ - 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */ + 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */ 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ @@ -28263,7 +32392,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x1, /* gcFEATURE_BIT_REG_Halti5 */ 0x0, /* gcFEATURE_BIT_REG_Evis */ - 0x1, /* gcFEATURE_BIT_REG_BltEngine */ + 0x0, /* gcFEATURE_BIT_REG_BltEngine */ 0x1, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ 0x0, /* gcFEATURE_BIT_REG_DEC */ @@ -28284,30 +32413,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_PIPELINE_32_ATTRIBUTES */ + 0x0, /* gcFEATURE_BIT_MSAA_SHADING */ 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ - 0x0, /* gcFEATURE_BIT_NO_ASTC */ + 0x1, /* 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 */ + 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 */ - 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */ + 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */ 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */ 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */ 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */ @@ -28316,12 +32445,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_USC_VX_PERF_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 */ @@ -28364,7 +32493,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x1, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ @@ -28389,6 +32518,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -28409,34 +32545,42 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000XS_6008 */ + /* gc7000L_6100 */ { 0x7000, /* ChipID */ - 0x6008, /* ChipRevision */ - 0x70004, /* ProductID */ + 0x6100, /* ChipRevision */ + 0x70002, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0xb, /* PatchVersion */ - 0x1, /* FormalRelease */ + 0x0, /* PatchVersion */ + 0x0, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x800, /* gcFEATURE_VALUE_ThreadCount */ + 0x400, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x8, /* gcFEATURE_VALUE_NumShaderCores */ + 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 */ - 0x40, /* gcFEATURE_VALUE_L1CacheSize */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ + 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x10, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ @@ -28445,6 +32589,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -28455,7 +32601,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ - 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ @@ -28577,7 +32723,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_OclOnly */ 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ - 0x1, /* gcFEATURE_BIT_REG_GeometryShader */ + 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ 0x1, /* gcFEATURE_BIT_REG_Generics */ 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ @@ -28647,7 +32793,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */ 0x1, /* gcFEATURE_BIT_REG_Halti3 */ - 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */ + 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */ 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ @@ -28668,7 +32814,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x1, /* gcFEATURE_BIT_REG_Halti5 */ 0x0, /* gcFEATURE_BIT_REG_Evis */ - 0x1, /* gcFEATURE_BIT_REG_BltEngine */ + 0x0, /* gcFEATURE_BIT_REG_BltEngine */ 0x1, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ 0x0, /* gcFEATURE_BIT_REG_DEC */ @@ -28689,30 +32835,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_PIPELINE_32_ATTRIBUTES */ + 0x0, /* gcFEATURE_BIT_MSAA_SHADING */ 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ - 0x0, /* gcFEATURE_BIT_NO_ASTC */ + 0x1, /* 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 */ + 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 */ - 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */ + 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */ 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */ 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */ 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */ @@ -28721,12 +32867,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_USC_VX_PERF_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 */ @@ -28769,7 +32915,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x1, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ @@ -28794,6 +32940,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -28814,12 +32967,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000XSVX_600x */ + /* gc7000XS_6100 */ { 0x7000, /* ChipID */ - 0x6008, /* ChipRevision */ - 0x70008, /* ProductID */ + 0x6100, /* ChipRevision */ + 0x70004, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ @@ -28850,6 +33011,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -28860,7 +33023,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ - 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ @@ -29072,9 +33235,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_RSS8 */ 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x1, /* gcFEATURE_BIT_REG_Halti5 */ - 0x1, /* gcFEATURE_BIT_REG_Evis */ + 0x0, /* gcFEATURE_BIT_REG_Evis */ 0x1, /* gcFEATURE_BIT_REG_BltEngine */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ 0x0, /* gcFEATURE_BIT_REG_DEC */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ @@ -29100,24 +33263,24 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */ + 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */ + 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */ 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */ 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */ 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */ @@ -29126,7 +33289,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */ 0x0, /* gcFEATURE_BIT_SECURITY */ 0x0, /* gcFEATURE_BIT_ROBUSTNESS */ 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */ @@ -29174,8 +33337,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_SH_CLOCK_GATE_FIX */ + 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ + 0x1, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */ @@ -29199,9 +33362,16 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ - 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ + 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ 0x0, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ @@ -29219,34 +33389,42 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000XSVX_6008 */ + /* vip7000UL_6100 */ { 0x7000, /* ChipID */ - 0x6008, /* ChipRevision */ - 0x70008, /* ProductID */ + 0x6100, /* ChipRevision */ + 0x5070003, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x7, /* PatchVersion */ - 0x1, /* FormalRelease */ - 0x10, /* gcFEATURE_VALUE_Streams */ + 0x0, /* PatchVersion */ + 0x0, /* FormalRelease */ + 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x800, /* gcFEATURE_VALUE_ThreadCount */ + 0x200, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x8, /* gcFEATURE_VALUE_NumShaderCores */ - 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ + 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 */ - 0x1f, /* gcFEATURE_VALUE_VaryingCount */ - 0x40, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x40, /* gcFEATURE_VALUE_L1CacheSize */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ + 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x10, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ @@ -29255,6 +33433,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -29314,7 +33494,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ 0x0, /* gcFEATURE_BIT_REG_VAA */ 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ - 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ @@ -29364,7 +33544,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_TX_YUVAssembler */ 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ @@ -29387,7 +33567,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_OclOnly */ 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ - 0x1, /* gcFEATURE_BIT_REG_GeometryShader */ + 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ 0x1, /* gcFEATURE_BIT_REG_Generics */ 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ @@ -29457,7 +33637,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */ 0x1, /* gcFEATURE_BIT_REG_Halti3 */ - 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */ + 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */ 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ @@ -29478,7 +33658,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x1, /* gcFEATURE_BIT_REG_Halti5 */ 0x1, /* gcFEATURE_BIT_REG_Evis */ - 0x1, /* gcFEATURE_BIT_REG_BltEngine */ + 0x0, /* gcFEATURE_BIT_REG_BltEngine */ 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ 0x0, /* gcFEATURE_BIT_REG_DEC */ @@ -29508,13 +33688,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_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 */ @@ -29563,7 +33743,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_COMPUTE_ONLY */ 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */ 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */ 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */ @@ -29578,9 +33758,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_SH_CLOCK_GATE_FIX */ + 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */ + 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ + 0x1, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */ @@ -29604,9 +33784,16 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ - 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ + 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ 0x0, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ @@ -29624,34 +33811,42 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000XSVX_6009 */ + /* gc7000_6200 */ { 0x7000, /* ChipID */ - 0x6009, /* ChipRevision */ - 0x70008, /* ProductID */ + 0x6200, /* ChipRevision */ + 0x70000, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x9, /* PatchVersion */ - 0x1, /* FormalRelease */ + 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 */ + 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 */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ + 0x28, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x20, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x28, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ @@ -29660,6 +33855,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -29719,13 +33916,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ 0x0, /* gcFEATURE_BIT_REG_VAA */ 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ - 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 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_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ @@ -29792,7 +33989,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_OclOnly */ 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ - 0x1, /* gcFEATURE_BIT_REG_GeometryShader */ + 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ 0x1, /* gcFEATURE_BIT_REG_Generics */ 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ @@ -29862,7 +34059,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */ 0x1, /* gcFEATURE_BIT_REG_Halti3 */ - 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */ + 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */ 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ @@ -29882,9 +34079,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ @@ -29893,52 +34090,52 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */ - 0x0, /* gcFEATURE_BIT_VMSAA */ + 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 */ - 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ - 0x0, /* gcFEATURE_BIT_V4Compression */ + 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ + 0x1, /* 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_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_PIPELINE_32_ATTRIBUTES */ + 0x0, /* gcFEATURE_BIT_MSAA_SHADING */ 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ - 0x0, /* gcFEATURE_BIT_NO_ASTC */ + 0x1, /* 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_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 */ - 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_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 */ - 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ - 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_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 */ + 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */ 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */ - 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */ + 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 */ - 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */ - 0x0, /* gcFEATURE_BIT_SECURITY */ - 0x0, /* gcFEATURE_BIT_ROBUSTNESS */ + 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 */ @@ -29952,13 +34149,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */ + 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 */ @@ -29983,7 +34180,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_PSIO_MSAA_CL_FIX */ 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x1, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ @@ -30009,8 +34206,15 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ - 0x1, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ + 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ 0x0, /* gcFEATURE_BIT_NN_FLOAT */ @@ -30019,7 +34223,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ - 0x0, /* gcFEATURE_BIT_SECURITY_AHB */ + 0x1, /* gcFEATURE_BIT_SECURITY_AHB */ 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ 0x0, /* gcFEATURE_BIT_SMALLBATCH */ 0x0, /* gcFEATURE_BIT_SH_CMPLX */ @@ -30029,35 +34233,43 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000_6100 */ + /* gc7000UL_6200 */ { 0x7000, /* ChipID */ - 0x6100, /* ChipRevision */ - 0x70000, /* ProductID */ + 0x6200, /* ChipRevision */ + 0x70003, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ - 0x10, /* gcFEATURE_VALUE_Streams */ + 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x800, /* gcFEATURE_VALUE_ThreadCount */ + 0x200, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x8, /* gcFEATURE_VALUE_NumShaderCores */ - 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ + 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 */ - 0x20, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x20, /* gcFEATURE_VALUE_L1CacheSize */ + 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x10, /* 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 */ + 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x10, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ @@ -30065,6 +34277,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -30075,7 +34289,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ - 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ @@ -30124,13 +34338,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ 0x0, /* gcFEATURE_BIT_REG_VAA */ 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ - 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 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_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ @@ -30298,20 +34512,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */ - 0x0, /* gcFEATURE_BIT_VMSAA */ + 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 */ - 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ - 0x0, /* gcFEATURE_BIT_V4Compression */ + 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ + 0x1, /* 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_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_ANISTRO_FILTER */ 0x1, /* gcFEATURE_BIT_NO_ASTC */ 0x0, /* gcFEATURE_BIT_NO_DXT */ 0x0, /* gcFEATURE_BIT_HWTFB */ @@ -30330,22 +34544,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ - 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_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 */ - 0x0, /* gcFEATURE_BIT_SECURITY */ - 0x0, /* gcFEATURE_BIT_ROBUSTNESS */ - 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */ - 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_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 */ @@ -30357,13 +34571,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */ + 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 */ @@ -30388,7 +34602,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_PSIO_MSAA_CL_FIX */ 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x1, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ @@ -30414,6 +34628,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -30424,7 +34645,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ - 0x0, /* gcFEATURE_BIT_SECURITY_AHB */ + 0x1, /* gcFEATURE_BIT_SECURITY_AHB */ 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ 0x0, /* gcFEATURE_BIT_SMALLBATCH */ 0x0, /* gcFEATURE_BIT_SH_CMPLX */ @@ -30434,22 +34655,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000L_6100 */ + /* gc7000ULVX_6200 */ { 0x7000, /* ChipID */ - 0x6100, /* ChipRevision */ - 0x70002, /* ProductID */ + 0x6200, /* ChipRevision */ + 0x7000f, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ - 0x10, /* gcFEATURE_VALUE_Streams */ + 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x400, /* gcFEATURE_VALUE_ThreadCount */ + 0x200, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x4, /* gcFEATURE_VALUE_NumShaderCores */ - 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ + 0x2, /* gcFEATURE_VALUE_NumShaderCores */ + 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ 0x200, /* gcFEATURE_VALUE_InstructionCount */ @@ -30457,12 +34686,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x10, /* gcFEATURE_VALUE_L1CacheSize */ + 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 */ + 0x10, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ @@ -30470,6 +34699,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -30480,7 +34711,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ - 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ @@ -30529,13 +34760,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ 0x0, /* gcFEATURE_BIT_REG_VAA */ 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ - 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 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_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ @@ -30579,7 +34810,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_TX_YUVAssembler */ 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ @@ -30692,9 +34923,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_RSS8 */ 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x1, /* gcFEATURE_BIT_REG_Halti5 */ - 0x0, /* gcFEATURE_BIT_REG_Evis */ + 0x1, /* gcFEATURE_BIT_REG_Evis */ 0x0, /* gcFEATURE_BIT_REG_BltEngine */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes23 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ 0x0, /* gcFEATURE_BIT_REG_DEC */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ @@ -30703,20 +34934,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */ - 0x0, /* gcFEATURE_BIT_VMSAA */ + 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 */ - 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ - 0x0, /* gcFEATURE_BIT_V4Compression */ + 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ + 0x1, /* 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_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_ANISTRO_FILTER */ 0x1, /* gcFEATURE_BIT_NO_ASTC */ 0x0, /* gcFEATURE_BIT_NO_DXT */ 0x0, /* gcFEATURE_BIT_HWTFB */ @@ -30735,40 +34966,40 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ - 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_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 */ - 0x0, /* gcFEATURE_BIT_SECURITY */ - 0x0, /* gcFEATURE_BIT_ROBUSTNESS */ - 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */ - 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_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 */ - 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */ - 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */ - 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_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 */ - 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */ + 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 */ @@ -30793,7 +35024,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_PSIO_MSAA_CL_FIX */ 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x1, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ @@ -30819,6 +35050,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -30829,7 +35067,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ - 0x0, /* gcFEATURE_BIT_SECURITY_AHB */ + 0x1, /* gcFEATURE_BIT_SECURITY_AHB */ 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ 0x0, /* gcFEATURE_BIT_SMALLBATCH */ 0x0, /* gcFEATURE_BIT_SH_CMPLX */ @@ -30839,34 +35077,42 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000XS_6100 */ + /* vip7000L_6200 */ { 0x7000, /* ChipID */ - 0x6100, /* ChipRevision */ - 0x70004, /* ProductID */ + 0x6200, /* ChipRevision */ + 0x5070002, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ - 0x10, /* gcFEATURE_VALUE_Streams */ + 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x800, /* gcFEATURE_VALUE_ThreadCount */ + 0x400, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x8, /* gcFEATURE_VALUE_NumShaderCores */ - 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ + 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 */ - 0x1f, /* gcFEATURE_VALUE_VaryingCount */ - 0x40, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x40, /* gcFEATURE_VALUE_L1CacheSize */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ + 0x20, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x20, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x20, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ @@ -30875,6 +35121,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -30885,7 +35133,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ - 0x0, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ @@ -30934,7 +35182,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ 0x0, /* gcFEATURE_BIT_REG_VAA */ 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ - 0x1, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */ 0x0, /* gcFEATURE_BIT_REG_NewTexture */ 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ @@ -30984,7 +35232,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_TX_YUVAssembler */ 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ @@ -31007,7 +35255,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_OclOnly */ 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ - 0x1, /* gcFEATURE_BIT_REG_GeometryShader */ + 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ 0x1, /* gcFEATURE_BIT_REG_Generics */ 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ @@ -31062,7 +35310,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x1, /* gcFEATURE_BIT_REG_Probe */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -31077,7 +35325,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */ 0x1, /* gcFEATURE_BIT_REG_Halti3 */ - 0x1, /* gcFEATURE_BIT_REG_TessellationShaders */ + 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */ 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ @@ -31097,9 +35345,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -31108,23 +35356,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */ - 0x0, /* gcFEATURE_BIT_VMSAA */ + 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 */ - 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ - 0x0, /* gcFEATURE_BIT_V4Compression */ + 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ + 0x1, /* 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_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_PIPELINE_32_ATTRIBUTES */ + 0x0, /* gcFEATURE_BIT_MSAA_SHADING */ 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ - 0x0, /* gcFEATURE_BIT_NO_ASTC */ + 0x1, /* gcFEATURE_BIT_NO_ASTC */ 0x0, /* gcFEATURE_BIT_NO_DXT */ - 0x1, /* gcFEATURE_BIT_HWTFB */ + 0x0, /* gcFEATURE_BIT_HWTFB */ 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */ 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */ 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */ @@ -31135,27 +35383,27 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ + 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 */ - 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_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 */ - 0x0, /* gcFEATURE_BIT_SECURITY */ - 0x0, /* gcFEATURE_BIT_ROBUSTNESS */ - 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */ - 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_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 */ @@ -31167,23 +35415,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */ + 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 */ + 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 */ @@ -31198,7 +35446,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_PSIO_MSAA_CL_FIX */ 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ 0x1, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ @@ -31224,6 +35472,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -31234,7 +35489,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ - 0x0, /* gcFEATURE_BIT_SECURITY_AHB */ + 0x1, /* gcFEATURE_BIT_SECURITY_AHB */ 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ 0x0, /* gcFEATURE_BIT_SMALLBATCH */ 0x0, /* gcFEATURE_BIT_SH_CMPLX */ @@ -31244,16 +35499,24 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* vip7000UL_6100 */ + /* vip7000UL_6200 */ { 0x7000, /* ChipID */ - 0x6100, /* ChipRevision */ + 0x6201, /* ChipRevision */ 0x5070003, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ - 0x0, /* FormalRelease */ + 0x1, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x200, /* gcFEATURE_VALUE_ThreadCount */ @@ -31280,6 +35543,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -31467,7 +35732,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x1, /* gcFEATURE_BIT_REG_Probe */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -31513,54 +35778,54 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */ - 0x0, /* gcFEATURE_BIT_VMSAA */ + 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 */ - 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ - 0x0, /* gcFEATURE_BIT_V4Compression */ + 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ + 0x1, /* 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_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_PIPELINE_32_ATTRIBUTES */ + 0x0, /* gcFEATURE_BIT_MSAA_SHADING */ 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ - 0x0, /* gcFEATURE_BIT_NO_ASTC */ + 0x1, /* 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_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 */ - 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_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 */ - 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ - 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_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 */ + 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */ 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */ - 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */ + 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 */ - 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_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 */ @@ -31572,22 +35837,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */ + 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_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 */ @@ -31629,6 +35894,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -31639,7 +35911,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ - 0x0, /* gcFEATURE_BIT_SECURITY_AHB */ + 0x1, /* gcFEATURE_BIT_SECURITY_AHB */ 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ 0x0, /* gcFEATURE_BIT_SMALLBATCH */ 0x0, /* gcFEATURE_BIT_SH_CMPLX */ @@ -31649,21 +35921,29 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000_6200 */ + /* vip7000UL_6211 */ { 0x7000, /* ChipID */ - 0x6200, /* ChipRevision */ - 0x70000, /* ProductID */ + 0x6211, /* ChipRevision */ + 0x5070003, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ + 0x21, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ - 0x10, /* gcFEATURE_VALUE_Streams */ + 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x800, /* gcFEATURE_VALUE_ThreadCount */ + 0x200, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x8, /* gcFEATURE_VALUE_NumShaderCores */ + 0x2, /* gcFEATURE_VALUE_NumShaderCores */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ @@ -31671,20 +35951,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ - 0x28, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x20, /* gcFEATURE_VALUE_L1CacheSize */ + 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x10, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x28, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ - 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ - 0x0, /* gcFEATURE_VALUE_NNCoreCount */ - 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ - 0x0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ + 0x1, /* gcFEATURE_VALUE_NNCoreCount */ + 0x6, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0xe0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -31750,7 +36032,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ - 0x0, /* gcFEATURE_BIT_REG_V2Compression */ + 0x1, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ @@ -31794,7 +36076,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_TX_YUVAssembler */ 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ @@ -31872,7 +36154,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x1, /* gcFEATURE_BIT_REG_Probe */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -31907,7 +36189,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_RSS8 */ 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x1, /* gcFEATURE_BIT_REG_Halti5 */ - 0x0, /* gcFEATURE_BIT_REG_Evis */ + 0x1, /* gcFEATURE_BIT_REG_Evis */ 0x0, /* gcFEATURE_BIT_REG_BltEngine */ 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ @@ -31989,11 +36271,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -32034,11 +36316,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ - 0x0, /* gcFEATURE_BIT_NN_FLOAT */ + 0x1, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ 0x0, /* gcFEATURE_BIT_TP_ENGINE */ @@ -32054,14 +36343,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000UL_6200 */ + /* vip8000UL_6211 */ { - 0x7000, /* ChipID */ - 0x6200, /* ChipRevision */ - 0x70003, /* ProductID */ + 0x8000, /* ChipID */ + 0x6212, /* ChipRevision */ + 0x5080003, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ + 0x21, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ @@ -32082,14 +36379,16 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ - 0x10, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ - 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ - 0x0, /* gcFEATURE_VALUE_NNCoreCount */ - 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ - 0x0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ + 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ + 0x1, /* gcFEATURE_VALUE_NNCoreCount */ + 0x6, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0xe0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ - 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ - 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x400, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ + 0x10, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -32155,7 +36454,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ - 0x0, /* gcFEATURE_BIT_REG_V2Compression */ + 0x1, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ @@ -32199,7 +36498,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_TX_YUVAssembler */ 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ @@ -32277,7 +36576,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x1, /* gcFEATURE_BIT_REG_Probe */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -32312,9 +36611,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_RSS8 */ 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x1, /* gcFEATURE_BIT_REG_Halti5 */ - 0x0, /* gcFEATURE_BIT_REG_Evis */ + 0x1, /* gcFEATURE_BIT_REG_Evis */ 0x0, /* gcFEATURE_BIT_REG_BltEngine */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes23 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ 0x0, /* gcFEATURE_BIT_REG_DEC */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ @@ -32336,7 +36635,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_ANISTRO_FILTER */ 0x1, /* gcFEATURE_BIT_NO_ASTC */ 0x0, /* gcFEATURE_BIT_NO_DXT */ 0x0, /* gcFEATURE_BIT_HWTFB */ @@ -32394,11 +36693,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -32439,11 +36738,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ - 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ - 0x0, /* gcFEATURE_BIT_NN_FLOAT */ + 0x1, /* gcFEATURE_BIT_EVIS_VX2 */ + 0x1, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ 0x0, /* gcFEATURE_BIT_TP_ENGINE */ @@ -32459,14 +36765,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* gc7000ULVX_6200 */ + /* vip8000ULFN_6211 */ { - 0x7000, /* ChipID */ - 0x6200, /* ChipRevision */ - 0x7000f, /* ProductID */ + 0x8000, /* ChipID */ + 0x6211, /* ChipRevision */ + 0x5080003, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ + 0x22, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ @@ -32482,19 +36796,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x8, /* gcFEATURE_VALUE_L1CacheSize */ + 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 */ - 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ - 0x0, /* gcFEATURE_VALUE_NNCoreCount */ - 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ - 0x0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ + 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ + 0x1, /* gcFEATURE_VALUE_NNCoreCount */ + 0x6, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0xe0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ - 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ - 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x400, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ + 0x10, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -32560,7 +36876,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ - 0x0, /* gcFEATURE_BIT_REG_V2Compression */ + 0x1, /* gcFEATURE_BIT_REG_V2Compression */ 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ @@ -32682,7 +36998,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x1, /* gcFEATURE_BIT_REG_Probe */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -32741,7 +37057,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_ANISTRO_FILTER */ 0x1, /* gcFEATURE_BIT_NO_ASTC */ 0x0, /* gcFEATURE_BIT_NO_DXT */ 0x0, /* gcFEATURE_BIT_HWTFB */ @@ -32777,16 +37093,16 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -32799,11 +37115,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -32844,11 +37160,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ - 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ - 0x0, /* gcFEATURE_BIT_NN_FLOAT */ + 0x1, /* gcFEATURE_BIT_EVIS_VX2 */ + 0x1, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ 0x0, /* gcFEATURE_BIT_TP_ENGINE */ @@ -32864,21 +37187,29 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* vip7000L_6200 */ + /* vip8000UL_6211 */ { - 0x7000, /* ChipID */ - 0x6200, /* ChipRevision */ - 0x5070002, /* ProductID */ + 0x8000, /* ChipID */ + 0x6211, /* ChipRevision */ + 0x5080003, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x400, /* gcFEATURE_VALUE_ThreadCount */ + 0x200, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x4, /* gcFEATURE_VALUE_NumShaderCores */ + 0x2, /* gcFEATURE_VALUE_NumShaderCores */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ @@ -32886,20 +37217,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ - 0x20, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x20, /* gcFEATURE_VALUE_L1CacheSize */ + 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x10, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x20, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ - 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ - 0x0, /* gcFEATURE_VALUE_NNCoreCount */ - 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ - 0x0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ + 0x1, /* gcFEATURE_VALUE_NNCoreCount */ + 0x6, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0xe0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ - 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ - 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x400, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ + 0x10, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -33087,7 +37420,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x1, /* gcFEATURE_BIT_REG_Probe */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -33249,11 +37582,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ - 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ - 0x0, /* gcFEATURE_BIT_NN_FLOAT */ + 0x1, /* gcFEATURE_BIT_EVIS_VX2 */ + 0x1, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ 0x0, /* gcFEATURE_BIT_TP_ENGINE */ @@ -33268,22 +37608,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ - 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x1, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x1, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* vip7000UL_6200 */ + /* vipnano */ { - 0x7000, /* ChipID */ - 0x6200, /* ChipRevision */ - 0x5070003, /* ProductID */ + 0x8000, /* ChipID */ + 0x7000, /* ChipRevision */ + 0x5080001, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ + 0x23, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x200, /* gcFEATURE_VALUE_ThreadCount */ + 0x100, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x2, /* gcFEATURE_VALUE_NumShaderCores */ + 0x1, /* gcFEATURE_VALUE_NumShaderCores */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ @@ -33292,19 +37640,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x10, /* gcFEATURE_VALUE_L1CacheSize */ + 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 */ - 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ - 0x0, /* gcFEATURE_VALUE_NNCoreCount */ - 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ - 0x0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ + 0x1, /* gcFEATURE_VALUE_NNCoreCount */ + 0x6, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0xe0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ - 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ - 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x400, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ + 0x10, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x1, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -33492,7 +37842,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x1, /* gcFEATURE_BIT_REG_Probe */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -33654,14 +38004,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ - 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ - 0x0, /* gcFEATURE_BIT_NN_FLOAT */ + 0x1, /* gcFEATURE_BIT_EVIS_VX2 */ + 0x1, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ - 0x0, /* gcFEATURE_BIT_TP_ENGINE */ + 0x1, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ 0x1, /* gcFEATURE_BIT_SECURITY_AHB */ @@ -33673,22 +38030,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ - 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x1, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x1, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* vip7000UL_6211 */ + /* gcnanovip */ { - 0x7000, /* ChipID */ - 0x6211, /* ChipRevision */ - 0x5070003, /* ProductID */ + 0x8000, /* ChipID */ + 0x7000, /* ChipRevision */ + 0x424f5343, /* ProductID */ 0x0, /* EcoID */ - 0x21, /* CustomerID */ + 0x0, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x200, /* gcFEATURE_VALUE_ThreadCount */ + 0x100, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x2, /* gcFEATURE_VALUE_NumShaderCores */ + 0x1, /* gcFEATURE_VALUE_NumShaderCores */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ @@ -33697,19 +38062,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x10, /* gcFEATURE_VALUE_L1CacheSize */ + 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 */ - 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ - 0x1, /* gcFEATURE_VALUE_NNCoreCount */ - 0x6, /* gcFEATURE_VALUE_NNInputBufferDepth */ - 0xe0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount */ + 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0x0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -33897,7 +38264,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x1, /* gcFEATURE_BIT_REG_Probe */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -34018,7 +38385,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -34059,10 +38426,17 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ - 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ + 0x1, /* gcFEATURE_BIT_EVIS_VX2 */ 0x1, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ @@ -34078,22 +38452,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ - 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x1, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x1, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* vip8000UL_6211 */ + /* vipnano-q */ { 0x8000, /* ChipID */ - 0x6211, /* ChipRevision */ - 0x5080003, /* ProductID */ + 0x7000, /* ChipRevision */ + 0x45080001, /* ProductID */ 0x0, /* EcoID */ - 0x21, /* CustomerID */ + 0x24, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x200, /* gcFEATURE_VALUE_ThreadCount */ + 0x100, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x2, /* gcFEATURE_VALUE_NumShaderCores */ + 0x1, /* gcFEATURE_VALUE_NumShaderCores */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ @@ -34109,12 +38491,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ - 0x1, /* gcFEATURE_VALUE_NNCoreCount */ + 0x8, /* gcFEATURE_VALUE_NNCoreCount */ 0x6, /* gcFEATURE_VALUE_NNInputBufferDepth */ - 0xe0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x40, /* gcFEATURE_VALUE_NNAccumBufferDepth */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x400, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x10, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x200, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x2, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -34302,7 +38686,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x1, /* gcFEATURE_BIT_REG_Probe */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -34464,6 +38848,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -34471,7 +38862,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ - 0x0, /* gcFEATURE_BIT_TP_ENGINE */ + 0x1, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ 0x1, /* gcFEATURE_BIT_SECURITY_AHB */ @@ -34483,15 +38874,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ - 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x1, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x1, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* vip8000ULFN_6211 */ + /* vip8000UL-s */ { 0x8000, /* ChipID */ - 0x6211, /* ChipRevision */ - 0x5080003, /* ProductID */ + 0x7000, /* ChipRevision */ + 0x15080003, /* ProductID */ 0x0, /* EcoID */ - 0x22, /* CustomerID */ + 0x25, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ @@ -34506,20 +38905,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ - 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x18, /* 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 */ + 0x18, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ - 0x1, /* gcFEATURE_VALUE_NNCoreCount */ + 0x2, /* gcFEATURE_VALUE_NNCoreCount */ 0x6, /* gcFEATURE_VALUE_NNInputBufferDepth */ 0xe0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x400, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x10, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x80, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x1, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -34707,7 +39108,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x1, /* gcFEATURE_BIT_REG_Probe */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -34869,6 +39270,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -34876,7 +39284,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ - 0x0, /* gcFEATURE_BIT_TP_ENGINE */ + 0x1, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ 0x1, /* gcFEATURE_BIT_SECURITY_AHB */ @@ -34888,15 +39296,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ - 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x1, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x1, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, - /* vip8000UL_6211 */ + /* vip8000UL-q */ { 0x8000, /* ChipID */ - 0x6211, /* ChipRevision */ - 0x5080003, /* ProductID */ + 0x7000, /* ChipRevision */ + 0x45080003, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ + 0x26, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ @@ -34911,20 +39327,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ - 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x18, /* 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 */ + 0x18, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ - 0x1, /* gcFEATURE_VALUE_NNCoreCount */ + 0x8, /* gcFEATURE_VALUE_NNCoreCount */ 0x6, /* gcFEATURE_VALUE_NNInputBufferDepth */ - 0xe0, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x40, /* gcFEATURE_VALUE_NNAccumBufferDepth */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x400, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x10, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x200, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x2, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -35112,7 +39530,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x1, /* gcFEATURE_BIT_REG_Probe */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -35274,6 +39692,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -35281,7 +39706,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ - 0x0, /* gcFEATURE_BIT_TP_ENGINE */ + 0x1, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ 0x1, /* gcFEATURE_BIT_SECURITY_AHB */ @@ -35294,6 +39719,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x1, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x1, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7400_551x */ { @@ -35330,6 +39763,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -35679,6 +40114,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -35699,6 +40141,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc8000UL_6200 */ { @@ -35735,6 +40185,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -36084,6 +40536,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -36104,6 +40563,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* v630 */ { @@ -36140,6 +40607,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -36489,6 +40958,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -36509,6 +40985,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000XS_6200 */ { @@ -36545,6 +41029,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -36894,6 +41380,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -36914,6 +41407,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000L_6200 */ { @@ -36950,6 +41451,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -37299,6 +41802,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -37319,6 +41829,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000LXS_6200 */ { @@ -37355,6 +41873,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -37704,6 +42224,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -37724,6 +42251,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* vip7000_6200 */ { @@ -37760,6 +42295,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -37947,7 +42484,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x1, /* gcFEATURE_BIT_REG_Probe */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -38109,6 +42646,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -38129,6 +42673,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000ULVX_V11_6200 */ { @@ -38165,6 +42717,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -38514,6 +43068,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -38534,6 +43095,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000ULVX_V12_6200 */ { @@ -38570,6 +43139,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -38919,6 +43490,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x0, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -38939,6 +43517,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000ULVX_6200_pid0x60 */ { @@ -38975,6 +43561,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -39324,6 +43912,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -39344,6 +43939,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000XS_6FFF */ { @@ -39380,6 +43983,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -39729,6 +44334,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -39749,6 +44361,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000_6210 */ { @@ -39785,6 +44405,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -40134,6 +44756,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -40154,6 +44783,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000_6210 */ { @@ -40190,6 +44827,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -40539,6 +45178,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x1, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -40559,6 +45205,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x1, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000XS_6210 */ { @@ -40595,6 +45249,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -40944,6 +45600,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x1, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -40964,6 +45627,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x1, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000XS_6210 */ { @@ -41000,6 +45671,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -41349,6 +46022,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x1, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x1, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -41369,6 +46049,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x1, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000L_6210 */ { @@ -41405,6 +46093,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -41754,6 +46444,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -41774,6 +46471,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000L_6210 */ { @@ -41810,6 +46515,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -42159,6 +46866,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x1, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -42179,6 +46893,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x1, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000LXS_6210 */ { @@ -42215,6 +46937,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -42564,6 +47288,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -42584,6 +47315,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x1, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000XSVX_6210 */ { @@ -42620,6 +47359,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -42969,6 +47710,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x1, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -42989,6 +47737,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x1, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000XSVX_6210 */ { @@ -43025,6 +47781,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -43374,6 +48132,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x1, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x1, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -43394,6 +48159,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x1, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7000L_DEC400 */ { @@ -43430,6 +48203,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -43779,6 +48554,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x1, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -43799,6 +48581,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x1, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7400_0002 */ { @@ -43835,6 +48625,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -44184,6 +48976,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x1, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x1, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -44204,6 +49003,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc7400_0003 */ { @@ -44240,6 +49047,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -44589,6 +49398,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x1, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x1, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -44609,14 +49425,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc8400_6300 */ { 0x8400, /* ChipID */ 0x6300, /* ChipRevision */ - 0x0, /* ProductID */ + 0x84004, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ + 0x41, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ @@ -44645,6 +49469,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0xf, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -44994,6 +49820,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x1, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x1, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -45006,7 +49839,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ 0x1, /* gcFEATURE_BIT_SECURITY_AHB */ 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ - 0x0, /* gcFEATURE_BIT_SMALLBATCH */ + 0x1, /* gcFEATURE_BIT_SMALLBATCH */ 0x0, /* gcFEATURE_BIT_SH_CMPLX */ 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ @@ -45014,6 +49847,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc8100_6300_pid0x43 */ { @@ -45050,6 +49891,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -45399,6 +50242,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x1, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x1, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -45411,7 +50261,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ 0x1, /* gcFEATURE_BIT_SECURITY_AHB */ 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ - 0x0, /* gcFEATURE_BIT_SMALLBATCH */ + 0x1, /* gcFEATURE_BIT_SMALLBATCH */ 0x0, /* gcFEATURE_BIT_SH_CMPLX */ 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ @@ -45419,6 +50269,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* gc8200_6300_pid0x46 */ { @@ -45455,6 +50313,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x3, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -45804,6 +50664,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x1, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x1, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -45816,7 +50683,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ 0x1, /* gcFEATURE_BIT_SECURITY_AHB */ 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ - 0x0, /* gcFEATURE_BIT_SMALLBATCH */ + 0x1, /* gcFEATURE_BIT_SMALLBATCH */ 0x0, /* gcFEATURE_BIT_SH_CMPLX */ 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ @@ -45824,6 +50691,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* cc8000_6220 */ { @@ -45860,6 +50735,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -46047,7 +50924,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x1, /* gcFEATURE_BIT_REG_Probe */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -46083,7 +50960,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x1, /* gcFEATURE_BIT_REG_Halti5 */ 0x0, /* gcFEATURE_BIT_REG_Evis */ - 0x0, /* gcFEATURE_BIT_REG_BltEngine */ + 0x1, /* gcFEATURE_BIT_REG_BltEngine */ 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ 0x0, /* gcFEATURE_BIT_REG_DEC */ @@ -46209,6 +51086,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -46229,6 +51113,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, /* cc8000_6330 */ { @@ -46251,12 +51143,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x1f, /* gcFEATURE_VALUE_VaryingCount */ - 0x40, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x40, /* gcFEATURE_VALUE_L1CacheSize */ + 0x20, /* 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 */ + 0x20, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ @@ -46265,6 +51157,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x0, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -46452,7 +51346,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ - 0x1, /* gcFEATURE_BIT_REG_Probe */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -46488,7 +51382,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x1, /* gcFEATURE_BIT_REG_Halti5 */ 0x0, /* gcFEATURE_BIT_REG_Evis */ - 0x0, /* gcFEATURE_BIT_REG_BltEngine */ + 0x1, /* gcFEATURE_BIT_REG_BltEngine */ 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ 0x0, /* gcFEATURE_BIT_REG_DEC */ @@ -46614,6 +51508,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ @@ -46634,6 +51535,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x1, /* gcFEATURE_BIT_SH_END_OF_BB */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x1, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x1, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x1, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ }, }; 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 bb181768bab5..84c8492a6a8d 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h @@ -141,8 +141,10 @@ extern "C" { ******************************** Useful Macro ********************************* \******************************************************************************/ -#define gcvINVALID_ADDRESS ~0U -#define gcvINVALID_VALUE 0xCCCCCCCC +#define gcvINVALID_ADDRESS ~0U +#define gcvINVALID_VALUE 0xCCCCCCCC + +#define gcvINVALID_PHYSICAL_ADDRESS ~0U #define gcmGET_PRE_ROTATION(rotate) \ ((rotate) & (~(gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y))) @@ -1882,7 +1884,8 @@ gckKERNEL_UnmapMemory( IN gckKERNEL Kernel, IN gctPHYS_ADDR Physical, IN gctSIZE_T Bytes, - IN gctPOINTER Logical + IN gctPOINTER Logical, + IN gctUINT32 ProcessID ); /* Notification of events. */ @@ -2166,6 +2169,13 @@ gckHARDWARE_FlushMMU( IN gckHARDWARE Hardware ); +gceSTATUS +gckHARDWARE_FlushAsyncMMU( + IN gckHARDWARE Hardware, + IN gctPOINTER Logical, + IN OUT gctUINT32 * Bytes + ); + /* Set the page table base address. */ gceSTATUS gckHARDWARE_SetMMUv2( @@ -2310,18 +2320,6 @@ gckHARDWARE_SetIsrManager( IN gctPOINTER Context ); -/* Start a composition. */ -gceSTATUS -gckHARDWARE_Compose( - IN gckHARDWARE Hardware, - IN gctUINT32 ProcessID, - IN gctPHYS_ADDR Physical, - IN gctPOINTER Logical, - IN gctSIZE_T Offset, - IN gctSIZE_T Size, - IN gctUINT8 EventID - ); - /* Check for Hardware features. */ gceSTATUS gckHARDWARE_IsFeatureAvailable( @@ -2545,13 +2543,6 @@ gckEVENT_Commit( IN gcsQUEUE_PTR Queue ); -/* Schedule a composition event. */ -gceSTATUS -gckEVENT_Compose( - IN gckEVENT Event, - IN gcsHAL_COMPOSE_PTR Info - ); - /* Event callback routine. */ gceSTATUS gckEVENT_Notify( @@ -2775,7 +2766,6 @@ gckHARDWARE_QueryProfileRegisters( ); #endif -#if VIVANTE_PROFILER_CONTEXT gceSTATUS gckHARDWARE_QueryContextProfile( IN gckHARDWARE Hardware, @@ -2789,7 +2779,6 @@ gckHARDWARE_UpdateContextProfile( IN gckHARDWARE Hardware, IN gckCONTEXT Context ); -#endif gceSTATUS gckHARDWARE_QueryContextNewProfile( 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 50e8ce500544..0bd63e16fc8c 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 @@ -105,13 +105,13 @@ typedef enum { gcvFENCE_TYPE_READ = 0x1, gcvFENCE_TYPE_WRITE = 0x2, gcvFENCE_TYPE_ALL = gcvFENCE_TYPE_READ | gcvFENCE_TYPE_WRITE, + gcvFNECE_TYPE_INVALID = 0x10000, } gceFENCE_TYPE; typedef struct _gcsUSER_MEMORY_DESC * gcsUSER_MEMORY_DESC_PTR; - /******************************************************************************\ ********************* Share obj lock/unlock macros. **************************** \******************************************************************************/ @@ -142,6 +142,7 @@ gcsSystemInfo; #if gcdENABLE_3D +#if gcdSYNC #define gcPLS_INITIALIZER \ { \ gcvNULL, /* gcoOS object. */ \ @@ -166,10 +167,41 @@ gcsSystemInfo; gcvNULL, /* destructor */ \ gcvNULL, /* accessLock */ \ gcvNULL, /* GL FE compiler lock*/ \ + gcvNULL, /* CL FE compiler lock*/ \ gcvPATCH_NOTINIT,/* global patchID */ \ + gcvNULL, /* global fenceID*/ \ } #else #define gcPLS_INITIALIZER \ +{ \ + gcvNULL, /* gcoOS object. */ \ + gcvNULL, /* gcoHAL object. */ \ + 0, /* internalSize */ \ + gcvNULL, /* internalPhysical */ \ + gcvNULL, /* internalLogical */ \ + 0, /* externalSize */ \ + gcvNULL, /* externalPhysical */ \ + gcvNULL, /* externalLogical */ \ + 0, /* contiguousSize */ \ + gcvNULL, /* contiguousPhysical */ \ + gcvNULL, /* contiguousLogical */ \ + gcvNULL, /* eglDisplayInfo */ \ + gcvNULL, /* eglSurfaceInfo */ \ + gcvSURF_A8R8G8B8,/* eglConfigFormat */ \ + gcvNULL, /* reference */ \ + 0, /* processID */ \ + 0, /* threadID */ \ + gcvFALSE, /* exiting */ \ + gcvFALSE, /* Special flag for NP2 texture. */ \ + gcvNULL, /* destructor */ \ + gcvNULL, /* accessLock */ \ + gcvNULL, /* GL FE compiler lock*/ \ + gcvNULL, /* CL FE compiler lock*/ \ + gcvPATCH_NOTINIT,/* global patchID */ \ +} +#endif +#else +#define gcPLS_INITIALIZER \ { \ gcvNULL, /* gcoOS object. */ \ gcvNULL, /* gcoHAL object. */ \ @@ -434,68 +466,6 @@ typedef struct _gcsEXTERNAL_MEMORY_INFO } gcsEXTERNAL_MEMORY_INFO; -/******************************************************************************\ -*********** Generic Memory Allocation Optimization Using Containers ************ -\******************************************************************************/ - -/* Generic container definition. */ -typedef struct _gcsCONTAINER_LINK * gcsCONTAINER_LINK_PTR; -typedef struct _gcsCONTAINER_LINK -{ - /* Points to the next container. */ - gcsCONTAINER_LINK_PTR next; -} -gcsCONTAINER_LINK; - -typedef struct _gcsCONTAINER_RECORD * gcsCONTAINER_RECORD_PTR; -typedef struct _gcsCONTAINER_RECORD -{ - gcsCONTAINER_RECORD_PTR prev; - gcsCONTAINER_RECORD_PTR next; -} -gcsCONTAINER_RECORD; - -typedef struct _gcsCONTAINER * gcsCONTAINER_PTR; -typedef struct _gcsCONTAINER -{ - gctUINT containerSize; - gctUINT recordSize; - gctUINT recordCount; - gcsCONTAINER_LINK_PTR containers; - gcsCONTAINER_RECORD freeList; - gcsCONTAINER_RECORD allocList; -} -gcsCONTAINER; - -gceSTATUS -gcsCONTAINER_Construct( - IN gcsCONTAINER_PTR Container, - gctUINT RecordsPerContainer, - gctUINT RecordSize - ); - -gceSTATUS -gcsCONTAINER_Destroy( - IN gcsCONTAINER_PTR Container - ); - -gceSTATUS -gcsCONTAINER_AllocateRecord( - IN gcsCONTAINER_PTR Container, - OUT gctPOINTER * Record - ); - -gceSTATUS -gcsCONTAINER_FreeRecord( - IN gcsCONTAINER_PTR Container, - IN gctPOINTER Record - ); - -gceSTATUS -gcsCONTAINER_FreeAll( - IN gcsCONTAINER_PTR Container - ); - /******************************************************************************\ ********************************* gcoHAL Object ********************************* \******************************************************************************/ @@ -659,6 +629,11 @@ gcoHAL_QuerySuperTileMode( OUT gctUINT32_PTR SuperTileMode ); +gceSTATUS +gcoHAL_QueryChipAxiBusWidth( + OUT gctBOOL * AXI128Bits + ); + gceSTATUS gcoHAL_QueryMultiGPUAffinityConfig( IN gceHARDWARE_TYPE Type, @@ -1016,6 +991,7 @@ gceSTATUS gcoHAL_LockVideoMemory( IN gctUINT32 Node, IN gctBOOL Cacheable, + IN gceENGINE engine, OUT gctUINT32 * Physical, OUT gctPOINTER * Logical ); @@ -1023,7 +999,8 @@ gcoHAL_LockVideoMemory( gceSTATUS gcoHAL_UnlockVideoMemory( IN gctUINT32 Node, - IN gceSURF_TYPE Type + IN gceSURF_TYPE Type, + IN gceENGINE engine ); gceSTATUS @@ -1133,6 +1110,18 @@ gcoOS_UnLockGLFECompiler( void ); +/* Lock CL FE compiler access */ +gceSTATUS +gcoOS_LockCLFECompiler( + void + ); + +/* Unlock CL FE compiler access */ +gceSTATUS +gcoOS_UnLockCLFECompiler( + void + ); + gceSTATUS gcoOS_GetTLS( OUT gcsTLS_PTR * TLS @@ -1999,7 +1988,6 @@ gcoOS_QuerySystemInfo( OUT gcsSystemInfo *Info ); - /*----------------------------------------------------------------------------*/ /*----- Profile --------------------------------------------------------------*/ @@ -4009,12 +3997,12 @@ gcoOS_Print( typedef enum _gceDUMP_BUFFER { - gceDUMP_BUFFER_CONTEXT, - gceDUMP_BUFFER_USER, - gceDUMP_BUFFER_KERNEL, - gceDUMP_BUFFER_LINK, - gceDUMP_BUFFER_WAITLINK, - gceDUMP_BUFFER_FROM_USER, + gcvDUMP_BUFFER_CONTEXT, + gcvDUMP_BUFFER_USER, + gcvDUMP_BUFFER_KERNEL, + gcvDUMP_BUFFER_LINK, + gcvDUMP_BUFFER_WAITLINK, + gcvDUMP_BUFFER_FROM_USER, } gceDUMP_BUFFER; 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 a4042ca6e38d..628f13cf5a4f 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 @@ -128,9 +128,6 @@ typedef enum _gceHAL_COMMAND_CODES gcvHAL_READ_ALL_PROFILE_REGISTERS, gcvHAL_PROFILE_REGISTERS_2D, -#if VIVANTE_PROFILER_PERDRAW - gcvHAL_READ_PROFILER_REGISTER_SETTING, -#endif gcvHAL_READ_ALL_PROFILE_NEW_REGISTERS_PART1, gcvHAL_READ_ALL_PROFILE_NEW_REGISTERS_PART2, gcvHAL_READ_PROFILER_NEW_REGISTER_SETTING, @@ -174,9 +171,6 @@ typedef enum _gceHAL_COMMAND_CODES gcvHAL_ATTACH, gcvHAL_DETACH, - /* Composition. */ - gcvHAL_COMPOSE, - /* Set timeOut value */ gcvHAL_SET_TIMEOUT, @@ -281,6 +275,16 @@ typedef struct _gcsUSER_MEMORY_DESC } gcsUSER_MEMORY_DESC; + +#define gcdMAX_FLAT_MAPPING_COUNT 16 + +typedef struct _gcsFLAT_MAPPING_RANGE +{ + gctUINT64 start; + gctUINT64 end; +} +gcsFLAT_MAPPING_RANGE; + /* gcvHAL_QUERY_CHIP_IDENTITY */ typedef struct _gcsHAL_QUERY_CHIP_IDENTITY * gcsHAL_QUERY_CHIP_IDENTITY_PTR; typedef struct _gcsHAL_QUERY_CHIP_IDENTITY @@ -356,36 +360,6 @@ typedef struct _gcsHAL_QUERY_CHIP_IDENTITY } gcsHAL_QUERY_CHIP_IDENTITY; -/* gcvHAL_COMPOSE. */ -typedef struct _gcsHAL_COMPOSE * gcsHAL_COMPOSE_PTR; -typedef struct _gcsHAL_COMPOSE -{ - /* Composition state buffer. */ - gctUINT64 physical; - gctUINT64 logical; - gctUINT offset; - gctUINT size; - - /* Composition end signal. */ - gctUINT64 process; - gctUINT64 signal; - - /* User signals. */ - gctUINT64 userProcess; - gctUINT64 userSignal1; - gctUINT64 userSignal2; - -#if defined(__QNXNTO__) - /* Client pulse side-channel connection ID. */ - gctINT32 coid; - - /* Set by server. */ - gctINT32 rcvid; -#endif -} -gcsHAL_COMPOSE; - - typedef struct _gcsHAL_INTERFACE { /* Command code. */ @@ -421,11 +395,9 @@ typedef struct _gcsHAL_INTERFACE /* Physical memory address of internal memory. */ OUT gctUINT32 baseAddress; - /* Start of flat mapping range. */ - OUT gctUINT32 flatMappingStart; + OUT gctUINT32 flatMappingRangeCount; - /* End of flat mapping range. */ - OUT gctUINT32 flatMappingEnd; + OUT gcsFLAT_MAPPING_RANGE flatMappingRanges[gcdMAX_FLAT_MAPPING_COUNT]; } GetBaseAddress; @@ -648,8 +620,6 @@ typedef struct _gcsHAL_INTERFACE { /* Event queue in gcsQUEUE. */ IN gctUINT64 queue; - - IN gceENGINE engine; } Event; @@ -676,7 +646,7 @@ typedef struct _gcsHAL_INTERFACE IN gctUINT64 queue; /* Used to distinguish different FE. */ - IN gceENGINE engine; + IN gceENGINE engine1; /* The command buffer is linked to multiple command queue. */ IN gctBOOL shared; @@ -887,15 +857,6 @@ typedef struct _gcsHAL_INTERFACE } SetProfileSetting; -#if VIVANTE_PROFILER_PERDRAW - /* gcvHAL_READ_PROFILER_REGISTER_SETTING */ - struct _gcsHAL_READ_PROFILER_REGISTER_SETTING - { - /*Should Clear Register*/ - IN gctBOOL bclear; - } - SetProfilerRegisterClear; -#endif /* gcvHAL_READ_PROFILER_REGISTER_SETTING */ struct _gcsHAL_READ_PROFILER_REGISTER_SETTING { @@ -907,10 +868,8 @@ typedef struct _gcsHAL_INTERFACE /* gcvHAL_READ_ALL_PROFILE_REGISTERS */ struct _gcsHAL_READ_ALL_PROFILE_REGISTERS { -#if VIVANTE_PROFILER_CONTEXT /* Context buffer object gckCONTEXT. Just a name. */ IN gctUINT32 context; -#endif /* Data read. */ OUT gcsPROFILER_COUNTERS counters; @@ -919,10 +878,8 @@ typedef struct _gcsHAL_INTERFACE struct _gcsHAL_READ_ALL_PROFILE_NEW_REGISTERS_PART1 { -#if VIVANTE_PROFILER_CONTEXT /* Context buffer object gckCONTEXT. Just a name. */ IN gctUINT32 context; -#endif /* Data read. */ OUT gcsPROFILER_NEW_COUNTERS_PART1 newCounters; @@ -931,10 +888,8 @@ typedef struct _gcsHAL_INTERFACE struct _gcsHAL_READ_ALL_PROFILE_NEW_REGISTERS_PART2 { -#if VIVANTE_PROFILER_CONTEXT /* Context buffer object gckCONTEXT. Just a name. */ IN gctUINT32 context; -#endif /* Data read. */ OUT gcsPROFILER_NEW_COUNTERS_PART2 newCounters; @@ -1118,9 +1073,6 @@ typedef struct _gcsHAL_INTERFACE } Detach; - /* gcvHAL_COMPOSE. */ - gcsHAL_COMPOSE Compose; - /* gcvHAL_GET_FRAME_INFO. */ struct _gcsHAL_GET_FRAME_INFO { 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 3ea2d70c300a..b7629819c31a 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 @@ -123,6 +123,7 @@ typedef struct _gcoVERTEXARRAY * gcoVERTEXARRAY; typedef struct _gcoBUFOBJ * gcoBUFOBJ; #define gcdATTRIBUTE_COUNT 32 +#define gcdVERTEXARRAY_POOL_CAPACITY 32 typedef enum _gcePROGRAM_STAGE { @@ -323,6 +324,7 @@ typedef enum _gceSPLIT_DRAW_TYPE gcvSPLIT_DRAW_XFB, gcvSPLIT_DRAW_INDEX_FETCH, gcvSPLIT_DRAW_TCS, + gcvSPLIT_DRAW_WIDE_LINE, gcvSPLIT_DRAW_LAST } gceSPLIT_DRAW_TYPE; @@ -1679,6 +1681,10 @@ typedef struct _gcsVX_THREAD_WALKER_PARAMETERS gctUINT32 globalOffsetY; gctUINT32 globalScaleY; + +#if gcdVX_OPTIMIZER > 1 + gctBOOL tileMode; +#endif } gcsVX_THREAD_WALKER_PARAMETERS; @@ -1690,6 +1696,11 @@ typedef struct _gcsVX_IMAGE_INFO gctUINT32 rect[4]; gctUINT32 width; gctUINT32 height; + + /*arraySize, sliceSize is for imageArray / image3D */ + gctUINT32 arraySize; + gctUINT32 sliceSize; + gctUINT32 bpp; gctUINT32 planes; gctUINT32 componentCount; @@ -1712,6 +1723,7 @@ typedef struct _gcsVX_IMAGE_INFO gcsSURF_NODE_PTR nodes[3]; + gctBOOL isVXC; #if gcdVX_OPTIMIZER gctUINT32 uniformData[3][4]; #endif @@ -2439,6 +2451,11 @@ gcoSTREAM_Upload( IN gctBOOL Dynamic ); +gceSTATUS +gcoSTREAM_ReAllocBufNode( + IN gcoSTREAM Stream + ); + gceSTATUS gcoSTREAM_SetStride( IN gcoSTREAM Stream, @@ -2794,84 +2811,6 @@ gcoVERTEXARRAY_Bind( #endif ); -/******************************************************************************* -***** Composition *************************************************************/ - -typedef enum _gceCOMPOSITION -{ - gcvCOMPOSE_CLEAR = 1, - gcvCOMPOSE_BLUR, - gcvCOMPOSE_DIM, - gcvCOMPOSE_LAYER -} -gceCOMPOSITION; - -typedef struct _gcsCOMPOSITION * gcsCOMPOSITION_PTR; -typedef struct _gcsCOMPOSITION -{ - /* Structure size. */ - gctUINT structSize; - - /* Composition operation. */ - gceCOMPOSITION operation; - - /* Layer to be composed. */ - gcoSURF layer; - - /* Source and target coordinates. */ - gcsRECT srcRect; - gcsRECT trgRect; - - /* Target rectangle */ - gcsPOINT v0; - gcsPOINT v1; - gcsPOINT v2; - - /* Blending parameters. */ - gctBOOL enableBlending; - gctBOOL premultiplied; - gctUINT8 alphaValue; - - /* Clear color. */ - gctFLOAT r; - gctFLOAT g; - gctFLOAT b; - gctFLOAT a; -} -gcsCOMPOSITION; - -gceSTATUS -gco3D_ProbeComposition( - IN gcoHARDWARE Hardware, - IN gctBOOL ResetIfEmpty - ); - -gceSTATUS -gco3D_CompositionBegin( - IN gcoHARDWARE Hardware - ); - -gceSTATUS -gco3D_ComposeLayer( - IN gcoHARDWARE Hardware, - IN gcsCOMPOSITION_PTR Layer - ); - -gceSTATUS -gco3D_CompositionSignals( - IN gcoHARDWARE Hardware, - IN gctHANDLE Process, - IN gctSIGNAL Signal1, - IN gctSIGNAL Signal2 - ); - -gceSTATUS -gco3D_CompositionEnd( - IN gcoHARDWARE Hardware, - IN gcoSURF Target, - IN gctBOOL Synchronous - ); - /* Frame Database */ gceSTATUS gcoHAL_AddFrameDB( @@ -3038,6 +2977,11 @@ gcoBUFOBJ_GetNode( OUT gcsSURF_NODE_PTR * Node ); +gceSTATUS +gcoBUFOBJ_ReAllocBufNode( + IN gcoBUFOBJ BufObj + ); + /* Handle GPU cache operations */ gceSTATUS gcoBUFOBJ_GPUCacheOperation( 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 ad9f8e1e8ae1..08a651dfa79c 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 @@ -169,7 +169,6 @@ typedef enum _gceFEATURE gcvFEATURE_TEXTURE_ARRAY, gcvFEATURE_TILE_FILLER, gcvFEATURE_LOGIC_OP, - gcvFEATURE_COMPOSITION, gcvFEATURE_MIXED_STREAMS, gcvFEATURE_2D_MULTI_SOURCE_BLT, gcvFEATURE_END_EVENT, @@ -367,7 +366,8 @@ typedef enum _gceFEATURE gcvFEATURE_TX_8BPP_TS_FIX, gcvFEATURE_HW_TFB, gcvFEATURE_COMPRESSION_V4, - gcvFEATURE_FENCE, + gcvFEATURE_FENCE_32BIT, + gcvFEATURE_FENCE_64BIT, gcvFEATURE_R8_UNORM, gcvFEATURE_TX_DEFAULT_VALUE_FIX, gcvFEATURE_TX_8bit_UVFrac, @@ -505,6 +505,11 @@ typedef enum _gceFEATURE gcvFEATURE_PE_VMSAA_COVERAGE_CACHE_FIX, gcvFEATURE_SECURITY_AHB, gcvFEATURE_TX_LERP_LESS_BIT, + gcvFEATURE_VIP_V7, + gcvFEATURE_ASYNC_BLIT, + gcvFEATURE_ASYNC_FE_FENCE_FIX, + gcvFEATURE_PSCS_THROTTLE, + gcvFEATURE_WIDELINE_TRIANGLE_EMU, /* Insert features above this comment only. */ gcvFEATURE_COUNT /* Not a feature. */ } @@ -542,6 +547,7 @@ typedef enum _gceOPTION gcvOPTION_PREFER_TPG_TRIVIALMODEL = 3, gcvOPTION_PREFER_RA_DEPTH_WRITE = 4, gcvOPTION_PREFER_USC_RECONFIG = 5, + gcvOPTION_PREFER_DISALBE_HZ = 6, /* SW options */ gcvOPTION_HW_NULL = 50, @@ -551,6 +557,8 @@ typedef enum _gceOPTION gcvOPTION_FBO_PREFER_MEM = 54, gcvOPTION_GPU_TEX_UPLOAD = 55, gcvOPTION_GPU_BUFOBJ_UPLOAD = 56, + gcvOPTION_OCL_ASYNC_BLT = 57, + gcvOPTION_OCL_IN_THREAD = 58, /* Insert option above this comment only */ gcvOPTION_COUNT /* Not a OPTION*/ @@ -911,6 +919,8 @@ typedef enum _gceSURF_FORMAT gcvSURF_A32, gcvSURF_A1, + gcvSURF_A8_1_A8R8G8B8, + /* Luminance formats. */ gcvSURF_L4 = 800, gcvSURF_L8, @@ -2005,14 +2015,21 @@ typedef enum _gceCHIP_FLAG { gcvCHIP_FLAG_MSAA_COHERENCEY_ECO_FIX = 1 << 0, gcvCHIP_FLAG_GC2000_R2 = 1 << 1, + gcvCHIP_AXI_BUS128_BITS = 1 << 2, } gceCHIP_FLAG; +/* If different, choose render engine */ +#define PRIORITY_ENGINE(a, b) gcmMIN(a,b) + typedef enum { - gcvENGINE_RENDER = 0, - gcvENGINE_BLT = 1, - gcvENGINE_COUNT = 2, + gcvENGINE_RENDER = 0, + gcvENGINE_BLT = 1, + gcvENGINE_GPU_ENGINE_COUNT = 2, + gcvENGINE_CPU = gcvENGINE_GPU_ENGINE_COUNT, + gcvENGINE_ALL_COUNT = gcvENGINE_CPU + 1, + gcvENGINE_INVALID = gcvENGINE_ALL_COUNT + 0x100 } gceENGINE; @@ -2063,45 +2080,36 @@ typedef enum _gceSECURE_MODE } gceSECURE_MODE; -/* -* Bit of a requirement is 1 means requirement is a must, 0 means requirement can -* be ignored. -*/ -#define gcvALLOC_FLAG_CONTIGUOUS_BIT 0 -#define gcvALLOC_FLAG_CACHEABLE_BIT 1 -#define gcvALLOC_FLAG_SECURITY_BIT 2 -#define gcvALLOC_FLAG_NON_CONTIGUOUS_BIT 3 -#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 -#define gcvALLOC_FLAG_ALLOC_ON_FAULT_BIT 8 -#define gcvALLOC_FLAG_CMA_LIMIT_BIT 9 /* No special needs. */ -#define gcvALLOC_FLAG_NONE (0) +#define gcvALLOC_FLAG_NONE 0x00000000 + /* Physical contiguous. */ -#define gcvALLOC_FLAG_CONTIGUOUS (1 << gcvALLOC_FLAG_CONTIGUOUS_BIT) +#define gcvALLOC_FLAG_CONTIGUOUS 0x00000001 /* Can be remapped as cacheable. */ -#define gcvALLOC_FLAG_CACHEABLE (1 << gcvALLOC_FLAG_CACHEABLE_BIT) +#define gcvALLOC_FLAG_CACHEABLE 0x00000002 /* Secure buffer. */ -#define gcvALLOC_FLAG_SECURITY (1 << gcvALLOC_FLAG_SECURITY_BIT) +#define gcvALLOC_FLAG_SECURITY 0x00000004 /* Physical non contiguous. */ -#define gcvALLOC_FLAG_NON_CONTIGUOUS (1 << gcvALLOC_FLAG_NON_CONTIGUOUS_BIT) -#define gcvALLOC_FLAG_MEMLIMIT (1 << gcvALLOC_FLAG_MEMLIMIT_BIT) +#define gcvALLOC_FLAG_NON_CONTIGUOUS 0x00000008 /* Import DMABUF. */ -#define gcvALLOC_FLAG_DMABUF (1 << gcvALLOC_FLAG_DMABUF_BIT) +#define gcvALLOC_FLAG_DMABUF 0x00001000 /* Import USERMEMORY. */ -#define gcvALLOC_FLAG_USERMEMORY (1 << gcvALLOC_FLAG_USERMEMORY_BIT) +#define gcvALLOC_FLAG_USERMEMORY 0x00002000 /* Import an External Buffer. */ -#define gcvALLOC_FLAG_EXTERNAL_MEMORY (1 << gcvALLOC_FLAG_EXTERNAL_MEMORY_BIT) +#define gcvALLOC_FLAG_EXTERNAL_MEMORY 0x00004000 +/* Import linux reserved memory. */ +#define gcvALLOC_FLAG_LINUX_RESERVED_MEM 0x00008000 /* Real allocation happens when GPU page fault. */ -#define gcvALLOC_FLAG_ALLOC_ON_FAULT (1 << gcvALLOC_FLAG_ALLOC_ON_FAULT_BIT) +#define gcvALLOC_FLAG_ALLOC_ON_FAULT 0x01000000 +/* Alloc with memory limit. */ +#define gcvALLOC_FLAG_MEMLIMIT 0x02000000 /* CMA allocator only */ -#define gcvALLOC_FLAG_CMA_LIMIT (1 << gcvALLOC_FLAG_CMA_LIMIT_BIT) +#define gcvALLOC_FLAG_CMA_LIMIT 0x04000000 + /* GL_VIV internal usage */ #ifndef GL_MAP_BUFFER_OBJ_VIV 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 1c62781528e9..dc018f961fdd 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 @@ -74,7 +74,8 @@ extern "C" { #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 gcdRESERVED_HW_FENCE_32BIT (4 * gcmSIZEOF(gctUINT32)) +#define gcdRESERVED_HW_FENCE_64BIT (6 * gcmSIZEOF(gctUINT32)) #define gcdRESERVED_PAUSE_PROBE_LENGTH (TOTAL_PROBE_NUMBER * 2 * gcmSIZEOF(gctUINT32)) #define gcdRESUME_OQ_LENGTH (2 * gcmSIZEOF(gctUINT32)) @@ -166,6 +167,33 @@ typedef struct _gcsPATCH_LIST } gcsPATCH_LIST; +#define FENCE_NODE_LIST_INIT_COUNT 100 + +typedef struct _gcsFENCE_APPEND_NODE +{ + gcsSURF_NODE_PTR node; + gceFENCE_TYPE type; + +}gcsFENCE_APPEND_NODE; + +typedef gcsFENCE_APPEND_NODE * gcsFENCE_APPEND_NODE_PTR; + +typedef struct _gcsFENCE_LIST * gcsFENCE_LIST_PTR; + +typedef struct _gcsFENCE_LIST +{ + /* Resource that need get fence, but command used this resource not generated */ + gcsFENCE_APPEND_NODE_PTR pendingList; + gctUINT pendingCount; + gctUINT pendingAllocCount; + + /* Resoure that already generated command in this command buffer but not get fence */ + gcsFENCE_APPEND_NODE_PTR onIssueList; + gctUINT onIssueCount; + gctUINT onIssueAllocCount; +} +gcsFENCE_LIST; + /* Command buffer object. */ struct _gcoCMDBUF { 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 c293202553ef..ae36961c6507 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 @@ -82,7 +82,7 @@ This define enables the use of VM for gckCommand and fence buffers. #if defined(UNDER_CE) # define USE_KERNEL_VIRTUAL_BUFFERS 1 #else -# define USE_KERNEL_VIRTUAL_BUFFERS 0 +# define USE_KERNEL_VIRTUAL_BUFFERS 1 #endif #endif @@ -96,42 +96,21 @@ This define enables the use of VM for gckCommand and fence buffers. #endif /* - VIVANTE_PROFILER + USE_LINUX_PCIE - This define enables the profiler. + This define enables galcore as a Linux PCIE driver. */ -#ifndef VIVANTE_PROFILER -# define VIVANTE_PROFILER 1 +#ifndef USE_LINUX_PCIE +# define USE_LINUX_PCIE 0 #endif /* - VIVANTE_PROFILER_CONTEXT + VIVANTE_PROFILER - This define enables the profiler according each context. + This define enables the profiler. */ -#ifndef VIVANTE_PROFILER_CONTEXT -# define VIVANTE_PROFILER_CONTEXT 1 -#endif - -#ifndef VIVANTE_PROFILER_PERDRAW -# 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 -#endif - -#ifndef VIVANTE_PROFILER_PM -# define VIVANTE_PROFILER_PM 1 +#ifndef VIVANTE_PROFILER +# define VIVANTE_PROFILER 1 #endif /* @@ -582,11 +561,7 @@ This define enables the use of VM for gckCommand and fence buffers. If the value is 0, no timeout will be checked for. */ #ifndef gcdGPU_TIMEOUT -#if gcdFPGA_BUILD -# define gcdGPU_TIMEOUT (3600 * 1000) -# else -# define gcdGPU_TIMEOUT 20000 -# endif +# define gcdGPU_TIMEOUT 20000 #endif /* @@ -599,11 +574,7 @@ This define enables the use of VM for gckCommand and fence buffers. If the value is 0, no timeout will be checked for. */ #ifndef gcdGPU_2D_TIMEOUT -#if gcdFPGA_BUILD -# define gcdGPU_2D_TIMEOUT (gcdGPU_TIMEOUT / 5) -# else -# define gcdGPU_2D_TIMEOUT 4000 -# endif +# define gcdGPU_2D_TIMEOUT 4000 #endif @@ -899,6 +870,9 @@ This define enables the use of VM for gckCommand and fence buffers. #endif +#ifndef gcdPRINT_SWAP_TIME +# define gcdPRINT_SWAP_TIME 0 +#endif /* gcdDVFS @@ -1237,7 +1211,7 @@ This define enables the use of VM for gckCommand and fence buffers. #endif #ifndef gcdENABLE_VG -# define gcdENABLE_VG 1 +# define gcdENABLE_VG 0 #endif #ifndef gcdVG_ONLY @@ -1404,10 +1378,6 @@ VIV:gcdUSE_MMU_EXCEPTION # define gcdDISABLE_GPU_VIRTUAL_ADDRESS 0 #endif -#ifndef gcdCOMPILER_DEBUGOUTPUT -# define gcdCOMPILER_DEBUGOUTPUT 0 -#endif - /* gcd2D_COMPRESSION_DEC400_ALIGN_MODE 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 031c0c84a767..3415e040cecc 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 @@ -78,9 +78,6 @@ extern "C" { #define gcmPROFILE_GC(Enum, Value) do { } while (gcvFALSE) #endif -#ifndef gcdNEW_PROFILER_FILE -#define gcdNEW_PROFILER_FILE 1 -#endif #define ES11_CALLS 151 #define ES11_DRAWCALLS (ES11_CALLS + 1) @@ -231,7 +228,6 @@ extern "C" { #define PPS_SOURCE (PPS_FUNCTIONCOUNT + 1) /* End of MISC Counter IDs. */ -#ifdef gcdNEW_PROFILER_FILE /* Category Constants. */ #define VPHEADER 0x010000 @@ -276,6 +272,7 @@ extern "C" { #define VPNG_MCZ 0x2e0000 #define VPNG_HI 0x2f0000 #define VPNG_L2 0x300000 +#define VPG_FINISH 0x310000 #define VPG_END 0xff0000 /* Info. */ @@ -639,54 +636,6 @@ 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 #define MODULE_FRONT_END_COUNTER_NUM 0x5 @@ -1044,19 +993,6 @@ typedef struct _gcsPROFILER_COUNTERS 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; @@ -1068,7 +1004,8 @@ typedef enum _gceCOUNTER_OPTYPE gcvCOUNTER_OP_BLT = 1, gcvCOUNTER_OP_COMPUTE = 2, gcvCOUNTER_OP_RS = 3, - gcvCOUNTER_OP_NONE = 4 + gcvCOUNTER_OP_FINISH = 4, + gcvCOUNTER_OP_NONE = 5 } gceCOUNTER_OPTYPE; @@ -1183,12 +1120,6 @@ typedef struct _gcsPROFILER gctUINT32 drawVertexCount; gctUINT32 redundantStateChangeCalls; #endif - -#if VIVANTE_PROFILER_PROBE - gcsPROBEBUFFER probeBuffer; - gctFILE probeFile; -#endif - } gcsPROFILER; @@ -1244,12 +1175,14 @@ gcoPROFILER_NEW_Begin( gceSTATUS gcoPROFILER_NEW_End( IN gcoPROFILER Profiler, - IN gctUINT32 DrawID + IN gctUINT32 DrawID, + IN gceCOUNTER_OPTYPE Type ); gceSTATUS gcoPROFILER_NEW_EndFrame( - IN gcoPROFILER Profiler + IN gcoPROFILER Profiler, + IN gceCOUNTER_OPTYPE Type ); gceSTATUS @@ -1262,7 +1195,7 @@ gceSTATUS gcoPROFILER_NEW_WriteCounters( IN gcoPROFILER Profiler, IN gcsPROFILER_NEW_COUNTERS Counters, - IN gctBOOL IsFrameEnd + IN gceCOUNTER_OPTYPE opType ); gceSTATUS @@ -1272,6 +1205,19 @@ gcoPROFILER_NEW_Write( IN gctCONST_POINTER Data ); +gceSTATUS +gcoPROFILER_NEW_GetPos( + IN gcoPROFILER Profiler, + OUT gctUINT32 * Position + ); + +gceSTATUS +gcoPROFILER_NEW_Seek( + IN gcoPROFILER Profiler, + IN gctUINT32 Offset, + IN gceFILE_WHENCE Whence + ); + gceSTATUS gcoPROFILER_NEW_Flush( IN gcoPROFILER Profiler 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 6677e711d55b..600f039099e4 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 @@ -852,15 +852,19 @@ gceSTATUS; /******************************************************************************* ** -** gcmSWAB32 +** gcmBSWAP32 ** ** Return a value with all bytes in the 32 bit argument swapped. */ -#define gcmSWAB32(x) ((gctUINT32)( \ +#if defined(__GNUC__) && !defined(__KERNEL__) +# define gcmBSWAP32(x) __builtin_bswap32(x) +#else +# define gcmBSWAP32(x) ((gctUINT32)( \ (((gctUINT32)(x) & (gctUINT32)0x000000FFUL) << 24) | \ (((gctUINT32)(x) & (gctUINT32)0x0000FF00UL) << 8) | \ (((gctUINT32)(x) & (gctUINT32)0x00FF0000UL) >> 8) | \ (((gctUINT32)(x) & (gctUINT32)0xFF000000UL) >> 24))) +#endif /******************************************************************************* ***** Database ****************************************************************/ @@ -1013,6 +1017,16 @@ gcsLISTHEAD; # define gcvFEATURE_DATABASE_DATE_MASK (~0U) #endif +#if defined(__GNUC__) +#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +#define gcdENDIAN_BIG 1 +#else +#define gcdENDIAN_BIG 0 +#endif +#else +#define gcdENDIAN_BIG 0 +#endif + #ifdef __cplusplus } #endif 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 e88b675c96f4..f5237cbb935e 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 @@ -60,10 +60,10 @@ #define gcvVERSION_MINOR 2 -#define gcvVERSION_PATCH 2 +#define gcvVERSION_PATCH 3 -#define gcvVERSION_BUILD 93313 +#define gcvVERSION_BUILD 129602 -#define gcvVERSION_STRING "6.2.2.93313" +#define gcvVERSION_STRING "6.2.3.129602" #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 1953eae2c5fa..5914d159c030 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 @@ -384,7 +384,8 @@ gckKERNEL_UnmapMemory( IN gckKERNEL Kernel, IN gctPHYS_ADDR Physical, IN gctSIZE_T Bytes, - IN gctPOINTER Logical + IN gctPOINTER Logical, + IN gctUINT32 ProcessID ); /* Dispatch a user-level command. */ 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 efb3d67b4d4e..e78bf20b6dfa 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 @@ -57,14 +57,23 @@ #define __gc_hal_kernel_allocator_array_h_ extern gceSTATUS -_DefaultAlloctorInit( +_GFPAlloctorInit( IN gckOS Os, + IN gcsDEBUGFS_DIR *Parent, OUT gckALLOCATOR * Allocator ); extern gceSTATUS _UserMemoryAlloctorInit( IN gckOS Os, + IN gcsDEBUGFS_DIR *Parent, + OUT gckALLOCATOR * Allocator + ); + +extern gceSTATUS +_ReservedMemoryAllocatorInit( + IN gckOS Os, + IN gcsDEBUGFS_DIR *Parent, OUT gckALLOCATOR * Allocator ); @@ -72,6 +81,7 @@ _UserMemoryAlloctorInit( extern gceSTATUS _DmabufAlloctorInit( IN gckOS Os, + IN gcsDEBUGFS_DIR *Parent, OUT gckALLOCATOR * Allocator ); #endif @@ -80,6 +90,7 @@ _DmabufAlloctorInit( extern gceSTATUS _DmaAlloctorInit( IN gckOS Os, + IN gcsDEBUGFS_DIR *Parent, OUT gckALLOCATOR * Allocator ); #endif @@ -87,8 +98,8 @@ _DmaAlloctorInit( /* Default allocator entry. */ gcsALLOCATOR_DESC allocatorArray[] = { - /* Default allocator. */ - gcmkDEFINE_ALLOCATOR_DESC("default", _DefaultAlloctorInit), + /* GFP allocator. */ + gcmkDEFINE_ALLOCATOR_DESC("gfp", _GFPAlloctorInit), /* User memory importer. */ gcmkDEFINE_ALLOCATOR_DESC("user", _UserMemoryAlloctorInit), @@ -101,6 +112,8 @@ gcsALLOCATOR_DESC allocatorArray[] = #ifndef NO_DMA_COHERENT gcmkDEFINE_ALLOCATOR_DESC("dma", _DmaAlloctorInit), #endif + + gcmkDEFINE_ALLOCATOR_DESC("reserved-mem", _ReservedMemoryAllocatorInit), }; #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 index 034df66d5196..8d456e98d212 100644 --- 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 @@ -68,7 +68,7 @@ typedef struct _gcsDMA_PRIV * gcsDMA_PRIV_PTR; typedef struct _gcsDMA_PRIV { - gctUINT32 size; + atomic_t usage; } gcsDMA_PRIV; @@ -80,13 +80,15 @@ struct mdl_dma_priv { /* * Debugfs support. */ -int gc_dma_usage_show(struct seq_file* m, void* data) +static 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; + long long usage = (long long)atomic_read(&priv->usage); - seq_printf(m, "dma: %u bytes\n", priv->size); + seq_printf(m, "type n pages bytes\n"); + seq_printf(m, "normal %10llu %12llu\n", usage, usage * PAGE_SIZE); return 0; } @@ -164,7 +166,7 @@ _DmaAlloc( struct device *dev = _GetDevice(os); #endif - gcmkHEADER_ARG("Mdl=%p NumPages=%d", Mdl, NumPages); + gcmkHEADER_ARG("Mdl=%p NumPages=0x%zx Flags=0x%x", Mdl, NumPages, Flags); #if defined CONFIG_ARM64 gcmkVERIFY_ARGUMENT(dev); @@ -175,7 +177,7 @@ _DmaAlloc( mdlPriv->kvaddr #if defined CONFIG_ARM64 = dma_alloc_coherent(dev, NumPages * PAGE_SIZE, &mdlPriv->dmaHandle, GFP_KERNEL | gcdNOWARN); -#elif defined CONFIG_MIPS +#elif defined CONFIG_MIPS || defined CONFIG_CPU_CSKYV2 || defined CONFIG_PPC = 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); @@ -199,13 +201,13 @@ _DmaAlloc( Mdl->dmaHandle = mdlPriv->dmaHandle; /* Statistic. */ - allocatorPriv->size += NumPages * PAGE_SIZE; + atomic_add(NumPages, &allocatorPriv->usage); gcmkFOOTER_NO(); return gcvSTATUS_OK; OnError: - if(mdlPriv) + if (mdlPriv) { gckOS_Free(os, mdlPriv); } @@ -223,9 +225,10 @@ _DmaFree( 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 dma_free_coherent(_GetDevice(os), Mdl->numPages * PAGE_SIZE, mdlPriv->kvaddr, mdlPriv->dmaHandle); -#elif defined CONFIG_MIPS +#elif defined CONFIG_MIPS || defined CONFIG_CPU_CSKYV2 || defined CONFIG_PPC 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); @@ -234,10 +237,10 @@ _DmaFree( gckOS_Free(os, mdlPriv); /* Statistic. */ - allocatorPriv->size -= Mdl->numPages * PAGE_SIZE; + atomic_sub(Mdl->numPages, &allocatorPriv->usage); } -gctINT +static gctINT _DmaMapUser( gckALLOCATOR Allocator, PLINUX_MDL Mdl, @@ -251,7 +254,7 @@ _DmaMapUser( 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 Cacheable=%d", Allocator, Mdl, Cacheable); #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0) userLogical = (gctSTRING)vm_mmap(gcvNULL, @@ -275,10 +278,8 @@ _DmaMapUser( 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 + "%s(%d): vmaAddr->%p for phys_addr->%p", + __FUNCTION__, __LINE__, userLogical, mdl ); if (IS_ERR(userLogical)) @@ -312,7 +313,7 @@ _DmaMapUser( } /* map kernel memory to user space.. */ -#if defined CONFIG_MIPS +#if defined CONFIG_MIPS || defined CONFIG_CPU_CSKYV2 || defined CONFIG_PPC if (remap_pfn_range( vma, vma->vm_start, @@ -348,9 +349,10 @@ _DmaMapUser( return gcvSTATUS_OK; } -void +static void _DmaUnmapUser( IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, IN gctPOINTER Logical, IN gctUINT32 Size ) @@ -384,7 +386,7 @@ _DmaUnmapUser( #endif } -gceSTATUS +static gceSTATUS _DmaMapKernel( IN gckALLOCATOR Allocator, IN PLINUX_MDL Mdl, @@ -396,7 +398,7 @@ _DmaMapKernel( return gcvSTATUS_OK; } -gceSTATUS +static gceSTATUS _DmaUnmapKernel( IN gckALLOCATOR Allocator, IN PLINUX_MDL Mdl, @@ -406,17 +408,20 @@ _DmaUnmapKernel( return gcvSTATUS_OK; } -extern gceSTATUS -_DefaultCache( +static gceSTATUS +_DmaCache( IN gckALLOCATOR Allocator, IN PLINUX_MDL Mdl, IN gctPOINTER Logical, IN gctUINT32 Physical, IN gctUINT32 Bytes, IN gceCACHEOPERATION Operation - ); + ) +{ + return gcvSTATUS_OK; +} -gceSTATUS +static gceSTATUS _DmaPhysical( IN gckALLOCATOR Allocator, IN PLINUX_MDL Mdl, @@ -431,10 +436,20 @@ _DmaPhysical( return gcvSTATUS_OK; } -extern void -_DefaultAllocatorDestructor( - IN void* PrivateData - ); +static void +_DmaAllocatorDestructor( + gcsALLOCATOR *Allocator + ) +{ + _DebugfsCleanup(Allocator); + + if (Allocator->privateData) + { + kfree(Allocator->privateData); + } + + kfree(Allocator); +} /* Default allocator operations. */ gcsALLOCATOR_OPERATIONS DmaAllocatorOperations = { @@ -444,7 +459,7 @@ gcsALLOCATOR_OPERATIONS DmaAllocatorOperations = { .UnmapUser = _DmaUnmapUser, .MapKernel = _DmaMapKernel, .UnmapKernel = _DmaUnmapKernel, - .Cache = _DefaultCache, + .Cache = _DmaCache, .Physical = _DmaPhysical, }; @@ -452,6 +467,7 @@ gcsALLOCATOR_OPERATIONS DmaAllocatorOperations = { gceSTATUS _DmaAlloctorInit( IN gckOS Os, + IN gcsDEBUGFS_DIR *Parent, OUT gckALLOCATOR * Allocator ) { @@ -468,13 +484,13 @@ _DmaAlloctorInit( gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); } + atomic_set(&priv->usage, 0); + /* Register private data. */ allocator->privateData = priv; - allocator->privateDataDestructor = _DefaultAllocatorDestructor; + allocator->destructor = _DmaAllocatorDestructor; - /* Register debugfs callbacks. */ - allocator->debugfsInit = _DebugfsInit; - allocator->debugfsCleanup = _DebugfsCleanup; + _DebugfsInit(allocator, Parent); /* * DMA allocator is only used for NonPaged memory @@ -489,7 +505,7 @@ _DmaAlloctorInit( OnError: if (allocator) { - gcmkOS_SAFE_FREE(Os, allocator); + kfree(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 3463eb990441..7eb2a84d4b40 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 @@ -93,7 +93,7 @@ struct allocator_priv /* * Debugfs support. */ -int dma_buf_info_show(struct seq_file* m, void* data) +static int dma_buf_info_show(struct seq_file* m, void* data) { int ret; gcsDMABUF *buf_desc; @@ -204,7 +204,7 @@ _DmabufAttach( gckOS os = Allocator->os; - int fd = (int) Desc->handle; + int fd = (int) Desc->dmaBuf.fd; struct dma_buf *dmabuf = NULL; struct sg_table *sgt = NULL; @@ -367,6 +367,7 @@ OnError: static void _DmabufUnmapUser( IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, IN gctPOINTER Logical, IN gctUINT32 Size ) @@ -448,15 +449,26 @@ static gcsALLOCATOR_OPERATIONS DmabufAllocatorOperations = .Physical = _DmabufPhysical, }; -extern void -_DefaultAllocatorDestructor( - IN void* PrivateData - ); +static void +_DmabufAllocatorDestructor( + gcsALLOCATOR *Allocator + ) +{ + _DebugfsCleanup(Allocator); + + if (Allocator->privateData) + { + kfree(Allocator->privateData); + } + + kfree(Allocator); +} /* Default allocator entry. */ gceSTATUS _DmabufAlloctorInit( IN gckOS Os, + IN gcsDEBUGFS_DIR *Parent, OUT gckALLOCATOR * Allocator ) { @@ -480,12 +492,10 @@ _DmabufAlloctorInit( allocator->capability = gcvALLOC_FLAG_DMABUF; /* Register private data. */ - allocator->privateData = priv; - allocator->privateDataDestructor = _DefaultAllocatorDestructor; + allocator->privateData = priv; + allocator->destructor = _DmabufAllocatorDestructor; - /* Register debugfs callbacks. */ - allocator->debugfsInit = _DebugfsInit; - allocator->debugfsCleanup = _DebugfsCleanup; + _DebugfsInit(allocator, Parent); *Allocator = allocator; diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_gfp.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_gfp.c new file mode 100644 index 000000000000..7242e20fb223 --- /dev/null +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_gfp.c @@ -0,0 +1,929 @@ +/**************************************************************************** +* +* The MIT License (MIT) +* +* Copyright (c) 2014 - 2017 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 - 2017 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 +#include +#include +#include +#include +#include + +#include "gc_hal_kernel_platform.h" + +#define _GC_OBJ_ZONE gcvZONE_OS + +#define gcdDISCRETE_PAGES 0 + +struct gfp_priv +{ + atomic_t low; + atomic_t high; +}; + +struct gfp_mdl_priv +{ + union + { + /* Pointer to a array of pages. */ + struct page * contiguousPages; + /* Pointer to a array of pointers to page. */ + struct page ** nonContiguousPages; + }; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) + gctBOOL exact; +#endif + + gctBOOL cacheable; + + gcsPLATFORM * platform; + + gctBOOL contiguous; +}; + +/******************************************************************************\ +************************** GFP Allocator Debugfs *************************** +\******************************************************************************/ + +static int gc_usage_show(struct seq_file* m, void* data) +{ + gcsINFO_NODE *node = m->private; + gckALLOCATOR Allocator = node->device; + struct gfp_priv *priv = Allocator->privateData; + long long low = (long long)atomic_read(&priv->low); + long long high = (long long)atomic_read(&priv->high); + + seq_printf(m, "type n pages bytes\n"); + seq_printf(m, "normal %10llu %12llu\n", low, low * PAGE_SIZE); + seq_printf(m, "HighMem %10llu %12llu\n", high, high * PAGE_SIZE); + + return 0; +} + +static gcsINFO InfoList[] = +{ + {"usage", gc_usage_show}, +}; + +static void +_GFPAllocatorDebugfsInit( + IN gckALLOCATOR Allocator, + IN gckDEBUGFS_DIR Root + ) +{ + gcmkVERIFY_OK( + gckDEBUGFS_DIR_Init(&Allocator->debugfsDir, Root->root, "gfp")); + + gcmkVERIFY_OK(gckDEBUGFS_DIR_CreateFiles( + &Allocator->debugfsDir, + InfoList, + gcmCOUNTOF(InfoList), + Allocator + )); +} + +static void +_GFPAllocatorDebugfsCleanup( + IN gckALLOCATOR Allocator + ) +{ + gcmkVERIFY_OK(gckDEBUGFS_DIR_RemoveFiles( + &Allocator->debugfsDir, + InfoList, + gcmCOUNTOF(InfoList) + )); + + gckDEBUGFS_DIR_Deinit(&Allocator->debugfsDir); +} + +static void +_NonContiguousFree( + IN struct page ** Pages, + IN gctUINT32 NumPages + ) +{ + gctINT i; + + gcmkHEADER_ARG("Pages=%p, NumPages=%u", Pages, NumPages); + + gcmkASSERT(Pages != gcvNULL); + + for (i = 0; i < NumPages; i++) + { + __free_page(Pages[i]); + } + + if (is_vmalloc_addr(Pages)) + { + vfree(Pages); + } + else + { + kfree(Pages); + } + + gcmkFOOTER_NO(); +} + +static struct page ** +_NonContiguousAlloc( + IN gctUINT32 NumPages + ) +{ + struct page ** pages; + struct page *p; +#if gcdDISCRETE_PAGES + struct page *l; +#endif + gctINT i, size; + + gcmkHEADER_ARG("NumPages=%u", NumPages); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) + if (NumPages > totalram_pages) +#else + if (NumPages > num_physpages) +#endif + { + gcmkFOOTER_NO(); + return gcvNULL; + } + + size = NumPages * sizeof(struct page *); + + pages = kmalloc(size, GFP_KERNEL | gcdNOWARN); + + if (!pages) + { + pages = vmalloc(size); + + if (!pages) + { + gcmkFOOTER_NO(); + return gcvNULL; + } + } + + for (i = 0; i < NumPages; i++) + { + p = alloc_page(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN); + + if (!p) + { + _NonContiguousFree(pages, i); + gcmkFOOTER_NO(); + 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; + } + + gcmkFOOTER_ARG("pages=0x%X", pages); + return pages; +} + +static gceSTATUS +gfp_mmap_internal( + IN struct gfp_mdl_priv *MdlPriv, + IN struct vm_area_struct *vma + ) +{ + gcsPLATFORM * platform = MdlPriv->platform; + gctUINT32 numPages; + unsigned long start; + unsigned long pfn; + gctINT i; + + gcmkHEADER_ARG("MdlPriv=%p vma=%p", MdlPriv, vma); + + vma->vm_flags |= gcdVM_FLAGS; + + if (MdlPriv->cacheable == gcvFALSE) + { + vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); + } + + if (platform && platform->ops->adjustProt) + { + platform->ops->adjustProt(vma); + } + + numPages = (vma->vm_end - vma->vm_start) / PAGE_SIZE; + + /* 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->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 + { + start = vma->vm_start; + + for (i = 0; i < numPages; i++) + { + pfn = page_to_pfn(MdlPriv->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; +} + +/***************************************************************************\ +************************ GFP Allocator ********************************** +\***************************************************************************/ +static gceSTATUS +_GFPAlloc( + IN gckALLOCATOR Allocator, + INOUT PLINUX_MDL Mdl, + IN gctSIZE_T NumPages, + IN gctUINT32 Flags + ) +{ + gceSTATUS status; + gctUINT i; + gctBOOL contiguous = Flags & gcvALLOC_FLAG_CONTIGUOUS; +#ifdef gcdSYS_FREE_MEMORY_LIMIT + struct sysinfo temsysinfo; +#endif + + struct gfp_priv *priv = (struct gfp_priv *)Allocator->privateData; + struct gfp_mdl_priv *mdlPriv = gcvNULL; + int low = 0; + int high = 0; + + gcmkHEADER_ARG("Allocator=%p Mdl=%p NumPages=%zu Flags=0x%x", Allocator, Mdl, NumPages, Flags); + +#ifdef gcdSYS_FREE_MEMORY_LIMIT + si_meminfo(&temsysinfo); + + if (Flags & gcvALLOC_FLAG_MEMLIMIT) + { + if ( (temsysinfo.freeram < NumPages) || ((temsysinfo.freeram-NumPages) < gcdSYS_FREE_MEMORY_LIMIT) ) + { + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + } +#endif + + gcmkONERROR(gckOS_Allocate(Allocator->os, sizeof(struct gfp_mdl_priv), (gctPOINTER *)&mdlPriv)); + + memset(mdlPriv, 0, sizeof(struct gfp_mdl_priv)); + + if (contiguous) + { + size_t bytes = NumPages << PAGE_SHIFT; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) + void *addr = NULL; + + addr = alloc_pages_exact(bytes, GFP_KERNEL | gcdNOWARN | __GFP_NORETRY); + + mdlPriv->contiguousPages = addr ? virt_to_page(addr) : gcvNULL; + + mdlPriv->exact = gcvTRUE; +#endif + + if (mdlPriv->contiguousPages == gcvNULL) + { + int order = get_order(bytes); + + if (order >= MAX_ORDER) + { + status = gcvSTATUS_OUT_OF_MEMORY; + goto OnError; + } + + mdlPriv->contiguousPages = + alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, order); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) + mdlPriv->exact = gcvFALSE; +#endif + } + + if (mdlPriv->contiguousPages == gcvNULL) + { + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + +#if defined(CONFIG_X86) + if (!PageHighMem(mdlPriv->contiguousPages)) + { + if (set_memory_wc((unsigned long)page_address(mdlPriv->contiguousPages), NumPages) != 0) + { + printk("%s(%d): failed to set_memory_wc\n", __func__, __LINE__); + } + } +#endif + } + else + { + mdlPriv->nonContiguousPages = _NonContiguousAlloc(NumPages); + + if (mdlPriv->nonContiguousPages == gcvNULL) + { + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + +#if defined(CONFIG_X86) + if (set_pages_array_wc(mdlPriv->nonContiguousPages, NumPages)) + { + printk("%s(%d): failed to set_pages_array_wc\n", __func__, __LINE__); + } +#endif + } + + for (i = 0; i < NumPages; i++) + { + struct page *page; + gctPHYS_ADDR_T phys = 0U; + + if (contiguous) + { + page = nth_page(mdlPriv->contiguousPages, i); + } + else + { + page = mdlPriv->nonContiguousPages[i]; + } + + SetPageReserved(page); + + phys = page_to_phys(page); + + BUG_ON(!phys); + + if (PageHighMem(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 + high++; + } + else + { + gcmkVERIFY_OK(gckOS_CacheFlush( + Allocator->os, _GetProcessID(), gcvNULL, phys, page_address(page), PAGE_SIZE + )); + low++; + } + } + + mdlPriv->platform = Allocator->os->device->platform; + mdlPriv->contiguous = contiguous; + atomic_add(low, &priv->low); + atomic_add(high, &priv->high); + + Mdl->priv = mdlPriv; + + gcmkFOOTER_NO(); + return gcvSTATUS_OK; + +OnError: + if (mdlPriv) + { + gcmkOS_SAFE_FREE(Allocator->os, mdlPriv); + } + + gcmkFOOTER(); + return status; +} + +static void +_GFPFree( + IN gckALLOCATOR Allocator, + IN OUT PLINUX_MDL Mdl + ) +{ + gctINT i; + struct page * page; + struct gfp_priv *priv = (struct gfp_priv *)Allocator->privateData; + struct gfp_mdl_priv *mdlPriv = Mdl->priv; + int low = 0; + int high = 0; + + for (i = 0; i < Mdl->numPages; i++) + { + if (Mdl->contiguous) + { + page = nth_page(mdlPriv->contiguousPages, i); + } + else + { + page = mdlPriv->nonContiguousPages[i]; + } + + ClearPageReserved(page); + + if (PageHighMem(page)) + { + high++; + } + else + { + low++; + } + } + + atomic_sub(low, &priv->low); + atomic_sub(high, &priv->high); + + if (Mdl->contiguous) + { +#if defined(CONFIG_X86) + if (!PageHighMem(mdlPriv->contiguousPages)) + { + set_memory_wb((unsigned long)page_address(mdlPriv->contiguousPages), Mdl->numPages); + } +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) + if (mdlPriv->exact == gcvTRUE) + { + free_pages_exact(page_address(mdlPriv->contiguousPages), Mdl->numPages * PAGE_SIZE); + } + else +#endif + { + __free_pages(mdlPriv->contiguousPages, get_order(Mdl->numPages * PAGE_SIZE)); + } + } + else + { +#if defined(CONFIG_X86) + set_pages_array_wb(mdlPriv->nonContiguousPages, Mdl->numPages); +#endif + + _NonContiguousFree(mdlPriv->nonContiguousPages, Mdl->numPages); + } + + gcmkOS_SAFE_FREE(Allocator->os, Mdl->priv); +} + +static gctINT +_GFPMapUser( + gckALLOCATOR Allocator, + PLINUX_MDL Mdl, + gctBOOL Cacheable, + OUT gctPOINTER * UserLogical + ) +{ + gckOS os = Allocator->os; + + PLINUX_MDL mdl = Mdl; + gctPOINTER userLogical = gcvNULL; + struct vm_area_struct * vma; + struct gfp_mdl_priv *mdlPriv = Mdl->priv; + + gcmkHEADER_ARG("Allocator=%p Mdl=%p Cacheable=%d", Allocator, Mdl, Cacheable); + + /* mdlPriv->cacheable must be used under protection of mdl->mapMutex. */ + mdlPriv->cacheable = Cacheable; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0) + userLogical = (void *)vm_mmap(NULL, + 0L, + mdl->numPages * PAGE_SIZE, + PROT_READ | PROT_WRITE, + MAP_SHARED, + 0); +#else + down_write(¤t->mm->mmap_sem); + + userLogical = (void *)do_mmap_pgoff(NULL, + 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->%p for phys_addr->%p", + __FUNCTION__, __LINE__, + userLogical, + mdl + ); + + if (IS_ERR(userLogical)) + { + gcmkTRACE_ZONE( + gcvLEVEL_INFO, gcvZONE_OS, + "%s(%d): do_mmap_pgoff error", + __FUNCTION__, __LINE__ + ); + + userLogical = gcvNULL; + + gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY); + return gcvSTATUS_OUT_OF_MEMORY; + } + + /* Remap here since there is no file and ops->mmap(). */ + 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; + } + + if (gcmIS_ERROR(gfp_mmap_internal(mdlPriv, vma))) + { + up_write(¤t->mm->mmap_sem); + + gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY); + return gcvSTATUS_OUT_OF_MEMORY; + } + + up_write(¤t->mm->mmap_sem); + + gcmkVERIFY_OK(gckOS_CacheFlush( + os, + _GetProcessID(), + mdl, + gcvINVALID_ADDRESS, + userLogical, + mdl->numPages * PAGE_SIZE + )); + + *UserLogical = userLogical; + + gcmkFOOTER_NO(); + return gcvSTATUS_OK; +} + +static void +_GFPUnmapUser( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + 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,5,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 +} + +static gceSTATUS +_GFPMapKernel( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + OUT gctPOINTER *Logical + ) +{ + void *addr = 0; + gctINT numPages = Mdl->numPages; + struct gfp_mdl_priv *mdlPriv = Mdl->priv; + +#if gcdNONPAGED_MEMORY_CACHEABLE + if (Mdl->contiguous) + { + addr = page_address(mdlPriv->contiguousPages); + } + else + { + addr = vmap(mdlPriv->nonContiguousPages, + numPages, + 0, + PAGE_KERNEL); + + /* Trigger a page fault. */ + memset(addr, 0, numPages * PAGE_SIZE); + } +#else + struct page ** pages; + gctBOOL free = gcvFALSE; + gctINT i; + + if (Mdl->contiguous) + { + pages = kmalloc(sizeof(struct page *) * numPages, GFP_KERNEL | gcdNOWARN); + + if (!pages) + { + return gcvSTATUS_OUT_OF_MEMORY; + } + + for (i = 0; i < numPages; i++) + { + pages[i] = nth_page(mdlPriv->contiguousPages, i); + } + + free = gcvTRUE; + } + else + { + pages = mdlPriv->nonContiguousPages; + } + + addr = vmap(pages, numPages, 0, pgprot_writecombine(PAGE_KERNEL)); + + if (free) + { + kfree(pages); + } +#endif + + if (addr) + { + *Logical = addr; + return gcvSTATUS_OK; + } + else + { + return gcvSTATUS_OUT_OF_MEMORY; + } +} + +static gceSTATUS +_GFPUnmapKernel( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctPOINTER Logical + ) +{ + +#if !gcdNONPAGED_MEMORY_CACHEABLE + vunmap(Logical); +#endif + + return gcvSTATUS_OK; +} + +static gceSTATUS +_GFPCache( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctPOINTER Logical, + IN gctUINT32 Physical, + IN gctUINT32 Bytes, + IN gceCACHEOPERATION Operation + ) +{ + return gcvSTATUS_OK; +} + +static gceSTATUS +_GFPPhysical( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctUINT32 Offset, + OUT gctPHYS_ADDR_T * Physical + ) +{ + struct gfp_mdl_priv *mdlPriv = Mdl->priv; + gctUINT32 offsetInPage = Offset & ~PAGE_MASK; + gctUINT32 index = Offset / PAGE_SIZE; + + if (Mdl->contiguous) + { + *Physical = page_to_phys(nth_page(mdlPriv->contiguousPages, index)); + } + else + { + *Physical = page_to_phys(mdlPriv->nonContiguousPages[index]); + } + + *Physical += offsetInPage; + + return gcvSTATUS_OK; +} + +static void +_GFPAllocatorDestructor( + gcsALLOCATOR *Allocator + ) +{ + _GFPAllocatorDebugfsCleanup(Allocator); + + if (Allocator->privateData) + { + kfree(Allocator->privateData); + } + + kfree(Allocator); +} + +/* GFP allocator operations. */ +static gcsALLOCATOR_OPERATIONS GFPAllocatorOperations = { + .Alloc = _GFPAlloc, + .Free = _GFPFree, + .MapUser = _GFPMapUser, + .UnmapUser = _GFPUnmapUser, + .MapKernel = _GFPMapKernel, + .UnmapKernel = _GFPUnmapKernel, + .Cache = _GFPCache, + .Physical = _GFPPhysical, +}; + +/* GFP allocator entry. */ +gceSTATUS +_GFPAlloctorInit( + IN gckOS Os, + IN gcsDEBUGFS_DIR *Parent, + OUT gckALLOCATOR * Allocator + ) +{ + gceSTATUS status; + gckALLOCATOR allocator = gcvNULL; + struct gfp_priv *priv = gcvNULL; + + gcmkONERROR( + gckALLOCATOR_Construct(Os, &GFPAllocatorOperations, &allocator)); + + priv = kzalloc(sizeof(struct gfp_priv), GFP_KERNEL | gcdNOWARN); + + if (!priv) + { + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + + atomic_set(&priv->low, 0); + atomic_set(&priv->high, 0); + + /* Register private data. */ + allocator->privateData = priv; + allocator->destructor = _GFPAllocatorDestructor; + + _GFPAllocatorDebugfsInit(allocator, Parent); + + allocator->capability = gcvALLOC_FLAG_CONTIGUOUS + | gcvALLOC_FLAG_NON_CONTIGUOUS + | gcvALLOC_FLAG_CACHEABLE + | gcvALLOC_FLAG_MEMLIMIT + | gcvALLOC_FLAG_ALLOC_ON_FAULT + ; + +#if defined(gcdEMULATE_SECURE_ALLOCATOR) + allocator->capability |= gcvALLOC_FLAG_SECURITY; +#endif + + *Allocator = allocator; + + return gcvSTATUS_OK; + +OnError: + if (allocator) + { + kfree(allocator); + } + return status; +} + diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_reserved_mem.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_reserved_mem.c new file mode 100644 index 000000000000..d788df2545ac --- /dev/null +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_reserved_mem.c @@ -0,0 +1,475 @@ +/**************************************************************************** +* +* The MIT License (MIT) +* +* Copyright (c) 2014 - 2017 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 - 2017 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 +#include +#include +#include +#include +#include +#include +#include + +#define _GC_OBJ_ZONE gcvZONE_OS + +/* + * reserved_mem is for contiguous pool, internal pool and external pool, etc. + */ + +/* mdl private. */ +struct reserved_mem +{ + unsigned long start; + unsigned long size; + char name[32]; + int release; + + /* Link together. */ + struct list_head link; +}; + +/* allocator info. */ +struct reserved_mem_alloc +{ + /* Record allocated reserved memory regions. */ + struct list_head region; + struct mutex lock; +}; + +static int reserved_mem_show(struct seq_file* m, void* data) +{ + struct list_head *pos; + gcsINFO_NODE *node = m->private; + gckALLOCATOR Allocator = node->device; + struct reserved_mem_alloc *alloc = Allocator->privateData; + + list_for_each(pos, &alloc->region) + { + struct reserved_mem * res= list_entry(pos, struct reserved_mem, link); + + seq_printf(m, "0x%08lx-0x%08lx : %s\n", + res->start, res->start + res->size -1, res->name); + } + + return 0; +} + +static gcsINFO info_list[] = +{ + {"reserved-mem", reserved_mem_show}, +}; + +static void +reserved_mem_debugfs_init( + IN gckALLOCATOR Allocator, + IN gckDEBUGFS_DIR Root + ) +{ + gcmkVERIFY_OK( + gckDEBUGFS_DIR_Init(&Allocator->debugfsDir, Root->root, "reserved-mem")); + + gcmkVERIFY_OK(gckDEBUGFS_DIR_CreateFiles( + &Allocator->debugfsDir, + info_list, + gcmCOUNTOF(info_list), + Allocator + )); +} + +static void +reserved_mem_debugfs_cleanup( + IN gckALLOCATOR Allocator + ) +{ + gcmkVERIFY_OK(gckDEBUGFS_DIR_RemoveFiles( + &Allocator->debugfsDir, + info_list, + gcmCOUNTOF(info_list) + )); + + gckDEBUGFS_DIR_Deinit(&Allocator->debugfsDir); +} + +static gceSTATUS +reserved_mem_attach( + IN gckALLOCATOR Allocator, + IN gcsATTACH_DESC_PTR Desc, + IN PLINUX_MDL Mdl + ) +{ + struct reserved_mem_alloc *alloc = Allocator->privateData; + struct reserved_mem *res; + struct resource *region = NULL; + + res = kzalloc(sizeof(struct reserved_mem), GFP_KERNEL | gcdNOWARN); + + if (!res) + return gcvSTATUS_OUT_OF_MEMORY; + + res->start = Desc->reservedMem.start; + res->size = Desc->reservedMem.size; + strncpy(res->name, Desc->reservedMem.name, sizeof(res->name)-1); + res->release = 1; + + if (!Desc->reservedMem.requested) + { + region = request_mem_region(res->start, res->size, res->name); + + if (!region) + { + printk("request mem %s(0x%lx - 0x%lx) failed\n", + res->name, res->start, res->start + res->size - 1); + + kfree(res); + return gcvSTATUS_OUT_OF_RESOURCES; + } + + res->release = 1; + } + + mutex_lock(&alloc->lock); + list_add(&res->link, &alloc->region); + mutex_unlock(&alloc->lock); + + Mdl->priv = res; + + return gcvSTATUS_OK; +} + +static void +reserved_mem_detach( + IN gckALLOCATOR Allocator, + IN OUT PLINUX_MDL Mdl + ) +{ + struct reserved_mem_alloc *alloc = Allocator->privateData; + struct reserved_mem *res = Mdl->priv; + + /* unlink from region list. */ + mutex_lock(&alloc->lock); + list_del_init(&res->link); + mutex_unlock(&alloc->lock); + + if (res->release) + { + release_mem_region(res->start, res->size); + } + + kfree(res); +} + +static void +munmap_user(unsigned long vaddr, unsigned long size) +{ + if (unlikely(!current->mm)) + return; + +#if defined(CONFIG_X86) + if (set_memory_wb(vaddr, size >> PAGE_SHIFT)) + { + printk("%s: failed to set_memory_wb\n", __func__); + } +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0) + if (vm_munmap(vaddr, size) < 0) + { + printk("%s: vm_munmap failed\n", __func__); + } +#else + down_write(¤t->mm->mmap_sem); + if (do_munmap(current->mm, vaddr, size) < 0) + { + printk("%s: do_munmap failed\n", __func__); + } + up_write(¤t->mm->mmap_sem); +#endif +} + +static gctINT +reserved_mem_map_user( + gckALLOCATOR Allocator, + PLINUX_MDL Mdl, + gctBOOL Cacheable, + OUT gctPOINTER *UserLogical + ) +{ + struct reserved_mem *res = Mdl->priv; + unsigned long vaddr; + struct vm_area_struct *vma; + unsigned int npages; + unsigned long pfn; + + gcmkHEADER_ARG("Allocator=%p Mdl=%p Cacheable=%d", Allocator, Mdl, Cacheable); + + npages = res->size >> PAGE_SHIFT; + pfn = res->start >> PAGE_SHIFT; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0) + vaddr = vm_mmap(NULL, 0L, res->size, + PROT_READ | PROT_WRITE, MAP_SHARED, 0); +#else + down_write(¤t->mm->mmap_sem); + + vaddr = do_mmap_pgoff(NULL, 0L, res->size, + PROT_READ | PROT_WRITE, MAP_SHARED, 0); + + up_write(¤t->mm->mmap_sem); +#endif + + if (IS_ERR_VALUE(vaddr)) + { + vaddr = 0; + gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY); + return gcvSTATUS_OUT_OF_MEMORY; + } + + /* Remap here since there is no file and ops->mmap(). */ + down_write(¤t->mm->mmap_sem); + + vma = find_vma(current->mm, vaddr); + + if (!vma) + { + up_write(¤t->mm->mmap_sem); + + gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_RESOURCES); + return gcvSTATUS_OUT_OF_RESOURCES; + } + + /* Make this mapping non-cached. */ + vma->vm_flags |= gcdVM_FLAGS; + vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); + +#if defined(CONFIG_X86) + if (set_memory_wc(vma->vm_start, npages)) + { + printk("%s: failed to set_memory_wc\n", __func__); + } +#endif + + if (remap_pfn_range(vma, vma->vm_start, + pfn, res->size, vma->vm_page_prot) < 0) + { + up_write(¤t->mm->mmap_sem); + + munmap_user(vaddr, res->size); + + gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY); + return gcvSTATUS_OUT_OF_MEMORY; + } + + up_write(¤t->mm->mmap_sem); + + *UserLogical = (void *)vaddr; + gcmkFOOTER_NO(); + return gcvSTATUS_OK; +} + +static void +reserved_mem_unmap_user( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctPOINTER Logical, + IN gctUINT32 Size + ) +{ + munmap_user((unsigned long)Logical, (unsigned long)Size); +} + +static gceSTATUS +reserved_mem_map_kernel( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + OUT gctPOINTER *Logical + ) +{ + struct reserved_mem *res = Mdl->priv; + void *vaddr; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0) + vaddr = memremap(res->start, res->size, MEMREMAP_WC); +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0) + vaddr = memremap(res->start, res->size, MEMREMAP_WT); +#else + vaddr = ioremap_nocache(res->start, res->size); +#endif + + if (!vaddr) + { + return gcvSTATUS_OUT_OF_MEMORY; + } + + *Logical = vaddr; + return gcvSTATUS_OK;; +} + +static gceSTATUS +reserved_mem_unmap_kernel( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctPOINTER Logical + ) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0) + memunmap((void *)Logical); +#else + iounmap((void *)Logical); +#endif + return gcvSTATUS_OK; +} + +static gceSTATUS +reserved_mem_cache_op( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctPOINTER Logical, + IN gctUINT32 Physical, + IN gctUINT32 Bytes, + IN gceCACHEOPERATION Operation + ) +{ + return gcvSTATUS_OK; +} + +static gceSTATUS +reserved_mem_get_physical( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctUINT32 Offset, + OUT gctPHYS_ADDR_T * Physical + ) +{ + struct reserved_mem *res = Mdl->priv; + *Physical = res->start + Offset; + + return gcvSTATUS_OK; +} + +static void +reserved_mem_dtor( + gcsALLOCATOR *Allocator + ) +{ + reserved_mem_debugfs_cleanup(Allocator); + + if (Allocator->privateData) + { + kfree(Allocator->privateData); + } + + kfree(Allocator); +} + +/* GFP allocator operations. */ +static gcsALLOCATOR_OPERATIONS reserved_mem_ops = { + .Alloc = NULL, + .Attach = reserved_mem_attach, + .Free = reserved_mem_detach, + .MapUser = reserved_mem_map_user, + .UnmapUser = reserved_mem_unmap_user, + .MapKernel = reserved_mem_map_kernel, + .UnmapKernel = reserved_mem_unmap_kernel, + .Cache = reserved_mem_cache_op, + .Physical = reserved_mem_get_physical, +}; + +/* GFP allocator entry. */ +gceSTATUS +_ReservedMemoryAllocatorInit( + IN gckOS Os, + IN gcsDEBUGFS_DIR *Parent, + OUT gckALLOCATOR * Allocator + ) +{ + gceSTATUS status; + gckALLOCATOR allocator = gcvNULL; + struct reserved_mem_alloc *alloc = NULL; + + gcmkONERROR( + gckALLOCATOR_Construct(Os, &reserved_mem_ops, &allocator)); + + alloc = kzalloc(sizeof(*alloc), GFP_KERNEL | gcdNOWARN); + + if (!alloc) + { + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + + INIT_LIST_HEAD(&alloc->region); + mutex_init(&alloc->lock); + + /* Register private data. */ + allocator->privateData = alloc; + allocator->destructor = reserved_mem_dtor; + + reserved_mem_debugfs_init(allocator, Parent); + + allocator->capability = gcvALLOC_FLAG_LINUX_RESERVED_MEM; + + *Allocator = allocator; + + return gcvSTATUS_OK; + +OnError: + if (allocator) + { + kfree(allocator); + } + return status; +} + 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 index 966d25545221..ef5c8125ea1f 100644 --- 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 @@ -61,20 +61,217 @@ #define _GC_OBJ_ZONE gcvZONE_ALLOCATOR +enum um_desc_type +{ + UM_PHYSICAL_MAP, + UM_PAGE_MAP, + UM_PFN_MAP, +}; + /* Descriptor of a user memory imported. */ -typedef struct _gcsUserMemory +struct um_desc +{ + int type; + + union + { + /* UM_PHYSICAL_MAP. */ + unsigned long physical; + + /* UM_PAGE_MAP. */ + struct page **pages; + + /* UM_PFN_MAP. */ + struct + { + unsigned long *pfns; + int *refs; + }; + }; + + /* contiguous chunks, does not include padding pages. */ + int chunk_count; + + unsigned long user_vaddr; + size_t size; + unsigned long offset; + + size_t pageCount; + size_t extraPage; +}; + +static int import_physical_map(struct um_desc *um, unsigned long phys) { - gctPHYS_ADDR_T physical; - struct page ** pages; - gctUINT32 extraPage; - gctPOINTER logical; - gctSIZE_T pageCount; - gctUINT32 offset; - gctBOOL contiguous; - gctBOOL userPages; - gctBOOL *ref; + um->type = UM_PHYSICAL_MAP; + um->physical = phys & PAGE_MASK; + um->chunk_count = 1; + return 0; +} + +static int import_page_map(struct um_desc *um, + unsigned long addr, size_t page_count) +{ + int i; + int result; + struct page **pages; + + pages = kzalloc(page_count * sizeof(void *), GFP_KERNEL | gcdNOWARN); + if (!pages) + return -ENOMEM; + + down_read(¤t->mm->mmap_sem); + + result = get_user_pages( +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0) + current, + current->mm, +#endif + addr & PAGE_MASK, + page_count, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0) + FOLL_WRITE, +#else + 1, + 0, +#endif + pages, + NULL); + + up_read(¤t->mm->mmap_sem); + + if (result < page_count) + { + for (i = 0; i < result; i++) + { + if (pages[i]) + { + put_page(pages[i]); + } + } + + kfree(pages); + return -ENODEV; + } + + um->chunk_count = 1; + for (i = 1; i < page_count; i++) + { + if (page_to_pfn(pages[i]) != page_to_pfn(pages[i - 1]) + 1) + { + ++um->chunk_count; + } + } + + um->type = UM_PAGE_MAP; + um->pages = pages; + + return 0; +} + + +static int import_pfn_map(struct um_desc *um, + unsigned long addr, size_t pfn_count) +{ + int i; + struct vm_area_struct *vma; + unsigned long *pfns; + int *refs; + + if (!current->mm) + return -ENOTTY; + + down_read(¤t->mm->mmap_sem); + vma = find_vma(current->mm, addr); + up_read(¤t->mm->mmap_sem); + + if (!vma) + return -ENOTTY; + + pfns = kzalloc(pfn_count * sizeof(unsigned long), GFP_KERNEL | gcdNOWARN); + + if (!pfns) + return -ENOMEM; + + refs = kzalloc(pfn_count * sizeof(int), GFP_KERNEL | gcdNOWARN); + + if (!refs) + { + kfree(pfns); + return -ENOMEM; + } + + for (i = 0; i < pfn_count; i++) + { + spinlock_t *ptl; + pgd_t *pgd; + pud_t *pud; + pmd_t *pmd; + pte_t *pte; + + pgd = pgd_offset(current->mm, addr); + if (pgd_none(*pgd) || pgd_bad(*pgd)) + goto err; + + pud = pud_offset(pgd, addr); + if (pud_none(*pud) || pud_bad(*pud)) + goto err; + + pmd = pmd_offset(pud, addr); + if (pmd_none(*pmd) || pmd_bad(*pmd)) + goto err; + + pte = pte_offset_map_lock(current->mm, pmd, addr, &ptl); + if (!pte) + { + spin_unlock(ptl); + goto err; + } + + if (!pte_present(*pte)) + { + pte_unmap_unlock(pte, ptl); + goto err; + } + + pfns[i] = pte_pfn(*pte); + pte_unmap_unlock(pte, ptl); + + /* Advance to next. */ + addr += PAGE_SIZE; + } + + for (i = 0; i < pfn_count; i++) + { + if (pfn_valid(pfns[i])) + { + struct page *page = pfn_to_page(pfns[i]); + refs[i] = get_page_unless_zero(page); + } + } + + um->chunk_count = 1; + for (i = 1; i < pfn_count; i++) + { + if (pfns[i] != pfns[i - 1] + 1) + { + ++um->chunk_count; + } + } + + um->type = UM_PFN_MAP; + um->pfns = pfns; + um->refs = refs; + return 0; + +err: + if (pfns) + kfree(pfns); + + if (refs) + kfree(refs); + + return -ENOTTY; } -gcsUserMemory; static gceSTATUS _Import( @@ -82,27 +279,25 @@ _Import( IN gctPOINTER Memory, IN gctUINT32 Physical, IN gctSIZE_T Size, - IN gcsUserMemory * UserMemory + IN struct um_desc * UserMemory ) { gceSTATUS status = gcvSTATUS_OK; + int pfn_map = 0; + unsigned long start, end, memory; + int result = 0; - 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); + gcmkHEADER_ARG("Os=0x%p Memory=%p 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; + memory = (unsigned long)Memory; /* Get the number of required pages. */ end = (memory + Size + PAGE_SIZE - 1) >> PAGE_SHIFT; @@ -130,329 +325,113 @@ _Import( 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) + if (memory) { - status = gcvSTATUS_OUT_OF_MEMORY; - goto OnError; - } + struct vm_area_struct *vma = NULL; + unsigned long vaddr = memory; - ref = (gctBOOL *)kzalloc((pageCount + extraPage) * sizeof(gctBOOL), GFP_KERNEL | gcdNOWARN); + vma = find_vma(current->mm, vaddr); - 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 + if (!vma) { - /* Free pages array since there is no struct page for this memory. */ - kfree(pages); - pages = gcvNULL; + /* No such memory, or across vmas. */ + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); } - } - else - { - UserMemory->contiguous = gcvFALSE; - UserMemory->userPages = gcvTRUE; - - /* Get the user pages. */ - down_read(¤t->mm->mmap_sem); - result = get_user_pages( -#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0) - current, - current->mm, -#endif - memory & PAGE_MASK, - pageCount, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0) - FOLL_WRITE, -#else - 1, - 0, -#endif - pages, - gcvNULL - ); - - up_read(¤t->mm->mmap_sem); + pfn_map = !!(vma->vm_flags & VM_PFNMAP); + vaddr = vma->vm_end; - if (result <=0 || result < pageCount) + while (vaddr < memory + Size) { - struct vm_area_struct *vma; + vma = find_vma(current->mm, vaddr); - /* Release the pages if any. */ - if (result > 0) + if (!vma) { - for (i = 0; i < result; i++) - { - if (pages[i] == gcvNULL) - { - break; - } - - put_page(pages[i]); - pages[i] = gcvNULL; - } - - result = 0; + /* No such memory. */ + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); } - vma = find_vma(current->mm, memory); - - if (vma && (vma->vm_flags & VM_PFNMAP)) + if (!!(vma->vm_flags & VM_PFNMAP) != pfn_map) { - 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; - } + /* Can not support different map type: both PFN and PAGE detected. */ + gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); } - 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; - } + vaddr = vma->vm_end; } } - if (UserMemory->userPages) + if (Physical != gcvINVALID_PHYSICAL_ADDRESS) { - 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)); - } - } + result = import_physical_map(UserMemory, Physical); } - - if (extraPage) + else { - if (pages) + if (pfn_map) { - for (i = 0; i < extraPage; i++) - { - pages[pageCount++] = Os->paddingPage; - } + result = import_pfn_map(UserMemory, memory, pageCount); } - - /* 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++) + else { - if (pages[i] == gcvNULL) - { - break; - } - - put_page(pages[i]); + result = import_page_map(UserMemory, memory, pageCount); } } - if (pages != gcvNULL) + if (result == -EINVAL) { - gcmkTRACE( - gcvLEVEL_ERROR, - "%s(%d): error: pages is freed.", - __FUNCTION__, __LINE__ - ); - - /* Free the page table. */ - kfree(pages); + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); } - - if (ref != gcvNULL) + else if (result == -ENOMEM) { - /* Free the ref table. */ - kfree(ref); + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); } - - 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) + else if (result < 0) { - gcmkFOOTER_NO(); - return gcvSTATUS_OK; + gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES); } - pageCount = UserMemory->pageCount; - if (UserMemory->extraPage) +#ifdef CONFIG_ARM + if (memory) { - pageCount -= UserMemory->extraPage; + for (i = 0; i < pageCount; i++) + { + u32 data; + get_user(data, (u32 *)((memory & PAGE_MASK) + PAGE_SIZE * i)); + } } +#endif - ref = UserMemory->ref; - - if (UserMemory->userPages) + if (UserMemory->type == UM_PAGE_MAP) { - /* Release the page cache. */ - if (pages) + for (i = 0; i < pageCount; i++) { - for (i = 0; i < pageCount; i++) - { - if (!PageReserved(pages[i])) - { - SetPageDirty(pages[i]); - } - - if (pfn_valid(page_to_pfn(pages[i])) && ref[i]) - { - put_page(pages[i]); - } - } + gctUINT32 phys = page_to_phys(UserMemory->pages[i]); + + /* Flush(clean) the data cache. */ + gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL, + phys, + (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE, + PAGE_SIZE); } } - kfree(ref); - kfree(pages); + UserMemory->user_vaddr = (unsigned long)Memory; + UserMemory->size = Size; + UserMemory->offset = (Physical != gcvINVALID_PHYSICAL_ADDRESS) + ? (Physical & ~PAGE_MASK) + : (memory & ~PAGE_MASK); - gcmkFOOTER_NO(); + UserMemory->pageCount = pageCount; + UserMemory->extraPage = extraPage; + + /* Success. */ + gcmkFOOTER(); return gcvSTATUS_OK; + +OnError: + gcmkFOOTER(); + return status; } static gceSTATUS @@ -463,7 +442,7 @@ _UserMemoryAttach( ) { gceSTATUS status; - gcsUserMemory * userMemory = gcvNULL; + struct um_desc * userMemory = gcvNULL; gckOS os = Allocator->os; @@ -472,26 +451,75 @@ _UserMemoryAttach( /* Handle is meangless for this importer. */ gcmkVERIFY_ARGUMENT(Desc != gcvNULL); - gcmkONERROR(gckOS_Allocate(os, gcmSIZEOF(gcsUserMemory), (gctPOINTER *)&userMemory)); + gcmkONERROR(gckOS_Allocate(os, gcmSIZEOF(struct um_desc), (gctPOINTER *)&userMemory)); - gckOS_ZeroMemory(userMemory, gcmSIZEOF(gcsUserMemory)); + gckOS_ZeroMemory(userMemory, gcmSIZEOF(struct um_desc)); - gcmkONERROR(_Import(os, Desc->memory, Desc->physical, Desc->size, userMemory)); + gcmkONERROR(_Import(os, Desc->userMem.memory, Desc->userMem.physical, Desc->userMem.size, userMemory)); Mdl->priv = userMemory; - Mdl->numPages = userMemory->pageCount; - Mdl->contiguous = userMemory->contiguous; + Mdl->numPages = userMemory->pageCount + userMemory->extraPage; + Mdl->contiguous = (userMemory->chunk_count == 1); gcmkFOOTER_NO(); return gcvSTATUS_OK; OnError: - if(userMemory != gcvNULL) + if (userMemory != gcvNULL) + { gckOS_Free(os,(gctPOINTER)userMemory); + } gcmkFOOTER(); return status; } +static void release_physical_map(struct um_desc *um) +{ +} + +static void release_page_map(struct um_desc *um) +{ + int i; + + for (i = 0; i < um->pageCount; i++) + { + if (!PageReserved(um->pages[i])) + { + SetPageDirty(um->pages[i]); + } + + put_page(um->pages[i]); + } + + kfree(um->pages); +} + +static void release_pfn_map(struct um_desc *um) +{ + + int i; + + for (i = 0; i < um->pageCount; i++) + { + if (pfn_valid(um->pfns[i])) + { + struct page *page = pfn_to_page(um->pfns[i]); + if (!PageReserved(page)) + { + SetPageDirty(page); + } + + if (um->refs[i]) + { + put_page(page); + } + } + } + + kfree(um->pfns); + kfree(um->refs); +} + static void _UserMemoryFree( IN gckALLOCATOR Allocator, @@ -499,13 +527,24 @@ _UserMemoryFree( ) { gckOS os = Allocator->os; - gcsUserMemory *userMemory = Mdl->priv; + struct um_desc *userMemory = Mdl->priv; gcmkHEADER(); if (userMemory) { - gcmkVERIFY_OK(_Free(os, userMemory)); + switch (userMemory->type) + { + case UM_PHYSICAL_MAP: + release_physical_map(userMemory); + break; + case UM_PAGE_MAP: + release_page_map(userMemory); + break; + case UM_PFN_MAP: + release_pfn_map(userMemory); + break; + } gcmkOS_SAFE_FREE(os, userMemory); } @@ -521,9 +560,9 @@ _UserMemoryMapUser( OUT gctPOINTER * UserLogical ) { - gcsUserMemory *userMemory = Mdl->priv; + struct um_desc *userMemory = Mdl->priv; - *UserLogical = userMemory->logical; + *UserLogical = (gctPOINTER)userMemory->user_vaddr; return 0; } @@ -531,6 +570,7 @@ _UserMemoryMapUser( static void _UserMemoryUnmapUser( IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, IN gctPOINTER Logical, IN gctUINT32 Size ) @@ -583,24 +623,36 @@ _UserMemoryPhysical( ) { gckOS os = Allocator->os; - gcsUserMemory *userMemory = Mdl->priv; - gctUINT32 offsetInPage = Offset & ~PAGE_MASK; - gctUINT32 index = Offset / PAGE_SIZE; + struct um_desc *userMemory = Mdl->priv; + unsigned long offset = Offset + userMemory->offset; + gctUINT32 offsetInPage = offset & ~PAGE_MASK; + gctUINT32 index = offset / PAGE_SIZE; - if (userMemory->pages) + if (index >= userMemory->pageCount) { - if (index == userMemory->pageCount - 1 && userMemory->extraPage) + if (index < userMemory->pageCount + userMemory->extraPage) { *Physical = page_to_phys(os->paddingPage); } else { - *Physical = page_to_phys(userMemory->pages[index]); + return gcvSTATUS_INVALID_ARGUMENT; } } else { - *Physical = userMemory->physical + index * PAGE_SIZE; + switch (userMemory->type) + { + case UM_PHYSICAL_MAP: + *Physical = userMemory->physical + index * PAGE_SIZE; + break; + case UM_PAGE_MAP: + *Physical = page_to_phys(userMemory->pages[index]); + break; + case UM_PFN_MAP: + *Physical = userMemory->pfns[index] << PAGE_SHIFT; + break; + } } *Physical += offsetInPage; @@ -608,6 +660,19 @@ _UserMemoryPhysical( return gcvSTATUS_OK; } +static void +_UserMemoryAllocatorDestructor( + gcsALLOCATOR *Allocator + ) +{ + if (Allocator->privateData) + { + kfree(Allocator->privateData); + } + + kfree(Allocator); +} + /* User memory allocator (importer) operations. */ static gcsALLOCATOR_OPERATIONS UserMemoryAllocatorOperations = { @@ -625,6 +690,7 @@ static gcsALLOCATOR_OPERATIONS UserMemoryAllocatorOperations = gceSTATUS _UserMemoryAlloctorInit( IN gckOS Os, + IN gcsDEBUGFS_DIR *Parent, OUT gckALLOCATOR * Allocator ) { @@ -634,6 +700,8 @@ _UserMemoryAlloctorInit( gcmkONERROR( gckALLOCATOR_Construct(Os, &UserMemoryAllocatorOperations, &allocator)); + allocator->destructor = _UserMemoryAllocatorDestructor; + allocator->capability = gcvALLOC_FLAG_USERMEMORY; *Allocator = allocator; 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 2a1c3c478cdd..12bdd6ef9235 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 @@ -57,14 +57,23 @@ #define __gc_hal_kernel_allocator_array_h_ extern gceSTATUS -_DefaultAlloctorInit( +_GFPAlloctorInit( IN gckOS Os, + IN gcsDEBUGFS_DIR *Parent, OUT gckALLOCATOR * Allocator ); extern gceSTATUS _UserMemoryAlloctorInit( IN gckOS Os, + IN gcsDEBUGFS_DIR *Parent, + OUT gckALLOCATOR * Allocator + ); + +extern gceSTATUS +_ReservedMemoryAllocatorInit( + IN gckOS Os, + IN gcsDEBUGFS_DIR *Parent, OUT gckALLOCATOR * Allocator ); @@ -72,6 +81,7 @@ _UserMemoryAlloctorInit( extern gceSTATUS _CMAFSLAlloctorInit( IN gckOS Os, + IN gcsDEBUGFS_DIR *Parent, OUT gckALLOCATOR * Allocator ); #endif @@ -80,6 +90,7 @@ _CMAFSLAlloctorInit( extern gceSTATUS _DmabufAlloctorInit( IN gckOS Os, + IN gcsDEBUGFS_DIR *Parent, OUT gckALLOCATOR * Allocator ); #endif @@ -88,6 +99,7 @@ _DmabufAlloctorInit( extern gceSTATUS _DmaAlloctorInit( IN gckOS Os, + IN gcsDEBUGFS_DIR *Parent, OUT gckALLOCATOR * Allocator ); #endif @@ -97,8 +109,8 @@ gcsALLOCATOR_DESC allocatorArray[] = #if LINUX_CMA_FSL gcmkDEFINE_ALLOCATOR_DESC("cmafsl", _CMAFSLAlloctorInit), #endif - /* Default allocator. */ - gcmkDEFINE_ALLOCATOR_DESC("default", _DefaultAlloctorInit), + /* GFP allocator. */ + gcmkDEFINE_ALLOCATOR_DESC("gfp", _GFPAlloctorInit), /* User memory importer. */ gcmkDEFINE_ALLOCATOR_DESC("user", _UserMemoryAlloctorInit), @@ -111,6 +123,8 @@ gcsALLOCATOR_DESC allocatorArray[] = #ifndef NO_DMA_COHERENT gcmkDEFINE_ALLOCATOR_DESC("dma", _DmaAlloctorInit), #endif + + gcmkDEFINE_ALLOCATOR_DESC("reserved-mem", _ReservedMemoryAllocatorInit), }; #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 fb25e2a7d698..9a17b8c8b9ef 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 @@ -69,7 +69,7 @@ typedef struct _gcsCMA_PRIV * gcsCMA_PRIV_PTR; typedef struct _gcsCMA_PRIV { - gctUINT32 cmasize; + atomic_t cmasize; gctBOOL cmaLimitRequest; } gcsCMA_PRIV; @@ -79,13 +79,15 @@ struct mdl_cma_priv { dma_addr_t physical; }; -int gc_cma_usage_show(struct seq_file* m, void* data) +static int gc_cma_usage_show(struct seq_file* m, void* data) { gcsINFO_NODE *node = m->private; gckALLOCATOR Allocator = node->device; gcsCMA_PRIV_PTR priv = Allocator->privateData; + long long size = (long long)atomic_read(&priv->cmasize); - seq_printf(m, "cma: %u bytes\n", priv->cmasize); + seq_printf(m, "type n pages bytes\n"); + seq_printf(m, "cma %10llu %12llu\n", size, size * PAGE_SIZE); return 0; } @@ -96,7 +98,7 @@ static gcsINFO InfoList[] = }; static void -_DefaultAllocatorDebugfsInit( +_CMAAllocatorDebugfsInit( IN gckALLOCATOR Allocator, IN gckDEBUGFS_DIR Root ) @@ -113,7 +115,7 @@ _DefaultAllocatorDebugfsInit( } static void -_DefaultAllocatorDebugfsCleanup( +_CMAAllocatorDebugfsCleanup( IN gckALLOCATOR Allocator ) { @@ -140,7 +142,7 @@ _CMAFSLAlloc( struct mdl_cma_priv *mdl_priv=gcvNULL; gckOS os = Allocator->os; - gcmkHEADER_ARG("Mdl=%p NumPages=%d", Mdl, NumPages); + gcmkHEADER_ARG("Mdl=%p NumPages=0x%zx", Mdl, NumPages); if (os->allocatorLimitMarker) { @@ -169,14 +171,16 @@ _CMAFSLAlloc( Mdl->priv = mdl_priv; Mdl->dmaHandle = mdl_priv->physical; - priv->cmasize += NumPages * PAGE_SIZE; + atomic_add(NumPages, &priv->cmasize); gcmkFOOTER_NO(); return gcvSTATUS_OK; OnError: - if(mdl_priv) + if (mdl_priv) + { gckOS_Free(os, mdl_priv); + } gcmkFOOTER(); return status; } @@ -195,7 +199,7 @@ _CMAFSLFree( mdl_priv->kvaddr, mdl_priv->physical); gckOS_Free(os, mdl_priv); - priv->cmasize -= Mdl->numPages * PAGE_SIZE; + atomic_sub(Mdl->numPages, &priv->cmasize); } static gctINT @@ -206,14 +210,13 @@ _CMAFSLMapUser( OUT gctPOINTER * UserLogical ) { - PLINUX_MDL mdl = Mdl; 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 Cacheable=%d", Allocator, Mdl, Cacheable); #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0) userLogical = (gctSTRING)vm_mmap(gcvNULL, @@ -237,10 +240,8 @@ _CMAFSLMapUser( 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 + "%s(%d): vmaAddr->%p for phys_addr->%p", + __FUNCTION__, __LINE__, userLogical, mdl ); if (IS_ERR(userLogical)) @@ -317,9 +318,10 @@ _CMAFSLMapUser( return gcvSTATUS_OK; } -void +static void _CMAUnmapUser( IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, IN gctPOINTER Logical, IN gctUINT32 Size ) @@ -353,7 +355,7 @@ _CMAUnmapUser( #endif } -gceSTATUS +static gceSTATUS _CMAMapKernel( IN gckALLOCATOR Allocator, IN PLINUX_MDL Mdl, @@ -365,7 +367,7 @@ _CMAMapKernel( return gcvSTATUS_OK; } -gceSTATUS +static gceSTATUS _CMAUnmapKernel( IN gckALLOCATOR Allocator, IN PLINUX_MDL Mdl, @@ -375,17 +377,20 @@ _CMAUnmapKernel( return gcvSTATUS_OK; } -extern gceSTATUS -_DefaultCache( +static gceSTATUS +_CMACache( IN gckALLOCATOR Allocator, IN PLINUX_MDL Mdl, IN gctPOINTER Logical, IN gctUINT32 Physical, IN gctUINT32 Bytes, IN gceCACHEOPERATION Operation - ); + ) +{ + return gcvSTATUS_OK; +} -gceSTATUS +static gceSTATUS _CMAPhysical( IN gckALLOCATOR Allocator, IN PLINUX_MDL Mdl, @@ -400,20 +405,31 @@ _CMAPhysical( return gcvSTATUS_OK; } -extern void -_DefaultAllocatorDestructor( - IN void* PrivateData - ); +static void +_CMAAllocatorDestructor( + gcsALLOCATOR *Allocator + ) +{ + _CMAAllocatorDebugfsCleanup(Allocator); + + if (Allocator->privateData) + { + kfree(Allocator->privateData); + } + + kfree(Allocator); +} /* Default allocator operations. */ -gcsALLOCATOR_OPERATIONS CMAFSLAllocatorOperations = { +static gcsALLOCATOR_OPERATIONS CMAFSLAllocatorOperations = +{ .Alloc = _CMAFSLAlloc, .Free = _CMAFSLFree, .MapUser = _CMAFSLMapUser, .UnmapUser = _CMAUnmapUser, .MapKernel = _CMAMapKernel, .UnmapKernel = _CMAUnmapKernel, - .Cache = _DefaultCache, + .Cache = _CMACache, .Physical = _CMAPhysical, }; @@ -421,6 +437,7 @@ gcsALLOCATOR_OPERATIONS CMAFSLAllocatorOperations = { gceSTATUS _CMAFSLAlloctorInit( IN gckOS Os, + IN gcsDEBUGFS_DIR *Parent, OUT gckALLOCATOR * Allocator ) { @@ -438,12 +455,13 @@ _CMAFSLAlloctorInit( gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); } + atomic_set(&priv->cmasize, 0); + /* Register private data. */ allocator->privateData = priv; - allocator->privateDataDestructor = _DefaultAllocatorDestructor; + allocator->destructor = _CMAAllocatorDestructor; - allocator->debugfsInit = _DefaultAllocatorDebugfsInit; - allocator->debugfsCleanup = _DefaultAllocatorDebugfsCleanup; + _CMAAllocatorDebugfsInit(allocator, Parent); allocator->capability = gcvALLOC_FLAG_CONTIGUOUS; @@ -466,7 +484,7 @@ _CMAFSLAlloctorInit( OnError: if (allocator) { - gcmkOS_SAFE_FREE(Os, allocator); + kfree(allocator); } return status; } 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 1e62d8742079..160a7f85970f 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 @@ -71,959 +71,6 @@ #define _GC_OBJ_ZONE gcvZONE_OS -#define gcdDISCRETE_PAGES 0 - -typedef struct _gcsDEFAULT_PRIV * gcsDEFAULT_PRIV_PTR; -typedef struct _gcsDEFAULT_PRIV -{ - gctUINT32 low; - gctUINT32 high; -} -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 *************************** -\******************************************************************************/ - -int gc_usage_show(struct seq_file* m, void* data) -{ - gcsINFO_NODE *node = m->private; - gckALLOCATOR Allocator = node->device; - gcsDEFAULT_PRIV_PTR priv = Allocator->privateData; - - seq_printf(m, "lowMem: %u bytes\n", priv->low); - seq_printf(m, "highMem: %u bytes\n", priv->high); - - return 0; -} - -static gcsINFO InfoList[] = -{ - {"lowHighUsage", gc_usage_show}, -}; - -static void -_DefaultAllocatorDebugfsInit( - IN gckALLOCATOR Allocator, - IN gckDEBUGFS_DIR Root - ) -{ - gcmkVERIFY_OK( - gckDEBUGFS_DIR_Init(&Allocator->debugfsDir, Root->root, "default")); - - gcmkVERIFY_OK(gckDEBUGFS_DIR_CreateFiles( - &Allocator->debugfsDir, - InfoList, - gcmCOUNTOF(InfoList), - Allocator - )); -} - -static void -_DefaultAllocatorDebugfsCleanup( - IN gckALLOCATOR Allocator - ) -{ - gcmkVERIFY_OK(gckDEBUGFS_DIR_RemoveFiles( - &Allocator->debugfsDir, - InfoList, - gcmCOUNTOF(InfoList) - )); - - 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( - IN struct page ** Pages, - IN gctUINT32 NumPages - ) -{ - gctINT i; - - gcmkHEADER_ARG("Pages=0x%X, NumPages=%d", Pages, NumPages); - - gcmkASSERT(Pages != gcvNULL); - - for (i = 0; i < NumPages; i++) - { - __free_page(Pages[i]); - } - - if (is_vmalloc_addr(Pages)) - { - vfree(Pages); - } - else - { - kfree(Pages); - } - - gcmkFOOTER_NO(); -} - -static struct page ** -_NonContiguousAlloc( - IN gctUINT32 NumPages - ) -{ - struct page ** pages; - struct page *p; -#if gcdDISCRETE_PAGES - struct page *l; -#endif - gctINT i, size; - - gcmkHEADER_ARG("NumPages=%lu", NumPages); - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) - if (NumPages > totalram_pages) -#else - if (NumPages > num_physpages) -#endif - { - gcmkFOOTER_NO(); - return gcvNULL; - } - - size = NumPages * sizeof(struct page *); - - pages = kmalloc(size, GFP_KERNEL | gcdNOWARN); - - if (!pages) - { - pages = vmalloc(size); - - if (!pages) - { - gcmkFOOTER_NO(); - return gcvNULL; - } - } - - for (i = 0; i < NumPages; i++) - { - p = alloc_page(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN); - - if (!p) - { - _NonContiguousFree(pages, i); - gcmkFOOTER_NO(); - 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; - } - - gcmkFOOTER_ARG("pages=0x%X", pages); - return pages; -} - -static 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); - } - else - { - addr = vmap(mdlPriv->u.nonContiguousPages, - numPages, - 0, - PAGE_KERNEL); - - /* Trigger a page fault. */ - memset(addr, 0, numPages * PAGE_SIZE); - } -#else - struct page ** pages; - gctBOOL free = gcvFALSE; - gctINT i; - - if (Mdl->contiguous) - { - pages = kmalloc(sizeof(struct page *) * numPages, GFP_KERNEL | gcdNOWARN); - - if (!pages) - { - return gcvNULL; - } - - for (i = 0; i < numPages; i++) - { - pages[i] = nth_page(mdlPriv->u.contiguousPages, i); - } - - free = gcvTRUE; - } - else - { - pages = mdlPriv->u.nonContiguousPages; - } - - /* ioremap() can't work on system memory since 2.6.38. */ - addr = vmap(pages, numPages, 0, gcmkNONPAGED_MEMROY_PROT(PAGE_KERNEL)); - - if (free) - { - kfree(pages); - } - -#endif - - return addr; -} - -static void -_DestoryKernelVirtualMapping( - IN gctSTRING Addr - ) -{ -#if !gcdNONPAGED_MEMORY_CACHEABLE - vunmap(Addr); -#endif -} - -void -_UnmapUserLogical( - 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,5,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 -} - -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 ********************************** -\***************************************************************************/ -static gceSTATUS -_DefaultAlloc( - IN gckALLOCATOR Allocator, - INOUT PLINUX_MDL Mdl, - IN gctSIZE_T NumPages, - IN gctUINT32 Flags - ) -{ - gceSTATUS status; - gctUINT i; - gctBOOL contiguous = Flags & gcvALLOC_FLAG_CONTIGUOUS; -#ifdef gcdSYS_FREE_MEMORY_LIMIT - struct sysinfo temsysinfo; -#endif - - gcsDEFAULT_PRIV_PTR priv = (gcsDEFAULT_PRIV_PTR)Allocator->privateData; - gcsDEFAULT_MDL_PRIV_PTR mdlPriv = gcvNULL; - - gcmkHEADER_ARG("Mdl=%p NumPages=%zu Flags=0x%x", Mdl, NumPages, Flags); - -#ifdef gcdSYS_FREE_MEMORY_LIMIT - si_meminfo(&temsysinfo); - - if (Flags & gcvALLOC_FLAG_MEMLIMIT) - { - if ( (temsysinfo.freeram < NumPages) || ((temsysinfo.freeram-NumPages) < gcdSYS_FREE_MEMORY_LIMIT) ) - { - gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); - } - } -#endif - - gcmkONERROR(gckOS_Allocate(Allocator->os, gcmSIZEOF(gcsDEFAULT_MDL_PRIV), (gctPOINTER *)&mdlPriv)); - - gckOS_ZeroMemory(mdlPriv, gcmSIZEOF(gcsDEFAULT_MDL_PRIV)); - - if (contiguous) - { - size_t bytes = NumPages << PAGE_SHIFT; - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) - void *addr = NULL; - - addr = alloc_pages_exact(bytes, GFP_KERNEL | gcdNOWARN | __GFP_NORETRY); - - mdlPriv->u.contiguousPages = addr ? virt_to_page(addr) : gcvNULL; - - mdlPriv->exact = gcvTRUE; -#endif - - if (mdlPriv->u.contiguousPages == gcvNULL) - { - int order = get_order(bytes); - - if (order >= MAX_ORDER) - { - status = gcvSTATUS_OUT_OF_MEMORY; - goto OnError; - } - - mdlPriv->u.contiguousPages = - alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, order); - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) - mdlPriv->exact = gcvFALSE; -#endif - } - - if (mdlPriv->u.contiguousPages == gcvNULL) - { - gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); - } - } - else - { - mdlPriv->u.nonContiguousPages = _NonContiguousAlloc(NumPages); - - if (mdlPriv->u.nonContiguousPages == gcvNULL) - { - gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); - } - } - - for (i = 0; i < NumPages; i++) - { - struct page *page; - gctPHYS_ADDR_T phys = 0U; - - if (contiguous) - { - page = nth_page(mdlPriv->u.contiguousPages, i); - } - else - { - page = _NonContiguousToPage(mdlPriv->u.nonContiguousPages, i); - } - - SetPageReserved(page); - - phys = page_to_phys(page); - - BUG_ON(!phys); - - if (PageHighMem(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 - - priv->high += PAGE_SIZE; - } - else - { - gcmkVERIFY_OK(gckOS_CacheFlush( - Allocator->os, _GetProcessID(), gcvNULL, phys, page_address(page), PAGE_SIZE - )); - - priv->low += PAGE_SIZE; - } - } - -#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); - } -#endif - - mdlPriv->platform = Allocator->os->device->platform; - mdlPriv->contiguous = contiguous; - - Mdl->priv = mdlPriv; - - gcmkFOOTER_NO(); - return gcvSTATUS_OK; - -OnError: - if (mdlPriv) - { - gcmkOS_SAFE_FREE(Allocator->os, mdlPriv); - } - - gcmkFOOTER(); - return status; -} - -static void -_DefaultFree( - IN gckALLOCATOR Allocator, - IN OUT PLINUX_MDL Mdl - ) -{ - 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); - } - else - { - page = _NonContiguousToPage(mdlPriv->u.nonContiguousPages, i); - } - - ClearPageReserved(page); - - if (PageHighMem(page)) - { - priv->high -= PAGE_SIZE; - } - else - { - priv->low -= PAGE_SIZE; - } - } - - if (Mdl->contiguous) - { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) - if (mdlPriv->exact == gcvTRUE) - { - free_pages_exact(page_address(mdlPriv->u.contiguousPages), Mdl->numPages * PAGE_SIZE); - } - else -#endif - { - __free_pages(mdlPriv->u.contiguousPages, get_order(Mdl->numPages * PAGE_SIZE)); - } - } - else - { - _NonContiguousFree(mdlPriv->u.nonContiguousPages, Mdl->numPages); - } - - if (mdlPriv->file != gcvNULL) - { - fput(mdlPriv->file); - } - - gcmkOS_SAFE_FREE(Allocator->os, Mdl->priv); -} - -gctINT -_DefaultMapUser( - gckALLOCATOR Allocator, - PLINUX_MDL Mdl, - gctBOOL Cacheable, - OUT gctPOINTER * UserLogical - ) -{ - gckOS os = Allocator->os; - - PLINUX_MDL mdl = Mdl; - gctPOINTER userLogical = gcvNULL; - struct vm_area_struct * vma; - gcsDEFAULT_MDL_PRIV_PTR mdlPriv = Mdl->priv; - - gcmkHEADER_ARG("Allocator=%p Mdl=%p gctBOOL=%d", Allocator, Mdl, Cacheable); - - /* mdlPriv->cacheable must be used under protection of mdl->mapMutex. */ - mdlPriv->cacheable = Cacheable; - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0) - userLogical = (gctSTRING)vm_mmap(mdlPriv->file, - 0L, - mdl->numPages * PAGE_SIZE, - PROT_READ | PROT_WRITE, - MAP_SHARED, - 0); -#else - down_write(¤t->mm->mmap_sem); - - userLogical = (gctSTRING)do_mmap_pgoff(mdlPriv->file, - 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__ - ); - - userLogical = gcvNULL; - - gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY); - return gcvSTATUS_OUT_OF_MEMORY; - } - - if (mdlPriv->file == gcvNULL) - { - /* Remap here since there is no file and ops->mmap(). */ - 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; - } - - if (gcmIS_ERROR(default_mmap_internal(mdlPriv, vma))) - { - up_write(¤t->mm->mmap_sem); - - gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY); - return gcvSTATUS_OUT_OF_MEMORY; - } - - up_write(¤t->mm->mmap_sem); - } - - gcmkVERIFY_OK(gckOS_CacheFlush( - os, - _GetProcessID(), - mdl, - gcvINVALID_ADDRESS, - userLogical, - mdl->numPages * PAGE_SIZE - )); - - *UserLogical = userLogical; - - gcmkFOOTER_NO(); - return gcvSTATUS_OK; -} - -void -_DefaultUnmapUser( - IN gckALLOCATOR Allocator, - IN gctPOINTER Logical, - IN gctUINT32 Size - ) -{ - _UnmapUserLogical(Logical, Size); -} - -gceSTATUS -_DefaultMapKernel( - IN gckALLOCATOR Allocator, - IN PLINUX_MDL Mdl, - OUT gctPOINTER *Logical - ) -{ - *Logical = _CreateKernelVirtualMapping(Mdl); - return gcvSTATUS_OK; -} - -gceSTATUS -_DefaultUnmapKernel( - IN gckALLOCATOR Allocator, - IN PLINUX_MDL Mdl, - IN gctPOINTER Logical - ) -{ - _DestoryKernelVirtualMapping(Logical); - return gcvSTATUS_OK; -} - -gceSTATUS -_DefaultCache( - IN gckALLOCATOR Allocator, - IN PLINUX_MDL Mdl, - IN gctPOINTER Logical, - IN gctUINT32 Physical, - IN gctUINT32 Bytes, - IN gceCACHEOPERATION Operation - ) -{ - return gcvSTATUS_OK; -} - -gceSTATUS -_DefaultPhysical( - IN gckALLOCATOR Allocator, - IN PLINUX_MDL Mdl, - IN gctUINT32 Offset, - OUT gctPHYS_ADDR_T * Physical - ) -{ - gcsDEFAULT_MDL_PRIV_PTR mdlPriv = Mdl->priv; - gctUINT32 offsetInPage = Offset & ~PAGE_MASK; - gctUINT32 index = Offset / PAGE_SIZE; - - if (Mdl->contiguous) - { - *Physical = page_to_phys(nth_page(mdlPriv->u.contiguousPages, index)); - } - else - { - *Physical = _NonContiguousToPhys(mdlPriv->u.nonContiguousPages, index); - } - - *Physical += offsetInPage; - - return gcvSTATUS_OK; -} - -void -_DefaultAllocatorDestructor( - IN void* PrivateData - ) -{ - kfree(PrivateData); -} - -/* Default allocator operations. */ -gcsALLOCATOR_OPERATIONS DefaultAllocatorOperations = { - .Alloc = _DefaultAlloc, - .Free = _DefaultFree, - .MapUser = _DefaultMapUser, - .UnmapUser = _DefaultUnmapUser, - .MapKernel = _DefaultMapKernel, - .UnmapKernel = _DefaultUnmapKernel, - .Cache = _DefaultCache, - .Physical = _DefaultPhysical, -}; - -/* Default allocator entry. */ -gceSTATUS -_DefaultAlloctorInit( - IN gckOS Os, - OUT gckALLOCATOR * Allocator - ) -{ - gceSTATUS status; - gckALLOCATOR allocator = gcvNULL; - gcsDEFAULT_PRIV_PTR priv = gcvNULL; - - gcmkONERROR( - gckALLOCATOR_Construct(Os, &DefaultAllocatorOperations, &allocator)); - - priv = kzalloc(gcmSIZEOF(gcsDEFAULT_PRIV), GFP_KERNEL | gcdNOWARN); - - if (!priv) - { - gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); - } - - /* Register private data. */ - allocator->privateData = priv; - allocator->privateDataDestructor = _DefaultAllocatorDestructor; - - allocator->debugfsInit = _DefaultAllocatorDebugfsInit; - allocator->debugfsCleanup = _DefaultAllocatorDebugfsCleanup; - - allocator->capability = gcvALLOC_FLAG_CONTIGUOUS - | gcvALLOC_FLAG_NON_CONTIGUOUS - | gcvALLOC_FLAG_CACHEABLE - | gcvALLOC_FLAG_MEMLIMIT - | gcvALLOC_FLAG_ALLOC_ON_FAULT - ; - -#if defined(gcdEMULATE_SECURE_ALLOCATOR) - allocator->capability |= gcvALLOC_FLAG_SECURITY; -#endif - - *Allocator = allocator; - - return gcvSTATUS_OK; - -OnError: - if (allocator) - { - gcmkOS_SAFE_FREE(Os, allocator); - } - return status; -} - -/***************************************************************************\ -************************ Allocator helper *********************************** -\***************************************************************************/ - -gceSTATUS -gckALLOCATOR_Construct( - IN gckOS Os, - IN gcsALLOCATOR_OPERATIONS * Operations, - OUT gckALLOCATOR * Allocator - ) -{ - gceSTATUS status; - gckALLOCATOR allocator; - - gcmkHEADER_ARG("Os=%p, Operations=%p, Allocator=%p", - Os, Operations, Allocator); - - gcmkVERIFY_OBJECT(Os, gcvOBJ_OS); - gcmkVERIFY_ARGUMENT(Allocator != gcvNULL); - gcmkVERIFY_ARGUMENT - ( Operations - && (Operations->Alloc || Operations->Attach) - && (Operations->Free) - && Operations->MapUser - && Operations->UnmapUser - && Operations->MapKernel - && Operations->UnmapKernel - && Operations->Cache - && Operations->Physical - ); - - gcmkONERROR( - gckOS_Allocate(Os, gcmSIZEOF(gcsALLOCATOR), (gctPOINTER *)&allocator)); - - gckOS_ZeroMemory(allocator, gcmSIZEOF(gcsALLOCATOR)); - - /* Record os. */ - allocator->os = Os; - - /* Set operations. */ - allocator->ops = Operations; - - *Allocator = allocator; - - gcmkFOOTER_NO(); - return gcvSTATUS_OK; - -OnError: - gcmkFOOTER(); - return status; -} /******************************************************************************\ ******************************** Debugfs Support ******************************* @@ -1079,7 +126,7 @@ gckOS_ImportAllocators( if (allocatorArray[i].construct) { /* Construct allocator. */ - status = allocatorArray[i].construct(Os, &allocator); + status = allocatorArray[i].construct(Os, &Os->allocatorDebugfsDir, &allocator); if (gcmIS_ERROR(status)) { @@ -1091,18 +138,12 @@ gckOS_ImportAllocators( allocator->name = allocatorArray[i].name; - if (allocator->debugfsInit) - { - /* Init allocator's debugfs. */ - allocator->debugfsInit(allocator, &Os->allocatorDebugfsDir); - } - - list_add_tail(&allocator->head, &Os->allocatorList); + list_add_tail(&allocator->link, &Os->allocatorList); } } #if gcdDEBUG - list_for_each_entry(allocator, &Os->allocatorList, head) + list_for_each_entry(allocator, &Os->allocatorList, link) { gcmkTRACE_ZONE( gcvLEVEL_WARNING, gcvZONE_OS, @@ -1124,23 +165,12 @@ gckOS_FreeAllocators( gckALLOCATOR allocator; gckALLOCATOR temp; - list_for_each_entry_safe(allocator, temp, &Os->allocatorList, head) + list_for_each_entry_safe(allocator, temp, &Os->allocatorList, link) { - list_del(&allocator->head); - - if (allocator->debugfsCleanup) - { - /* Clean up allocator's debugfs. */ - allocator->debugfsCleanup(allocator); - } - - /* Free private data. */ - if (allocator->privateDataDestructor && allocator->privateData) - { - allocator->privateDataDestructor(allocator->privateData); - } + list_del(&allocator->link); - gckOS_Free(Os, allocator); + /* Destroy allocator. */ + allocator->destructor(allocator); } _AllocatorDebugfsCleanup(Os); 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 f1dc7c772bac..59a582dd9db9 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 @@ -57,9 +57,10 @@ #define __gc_hal_kernel_allocator_h_ #include "gc_hal_kernel_linux.h" +#include typedef struct _gcsALLOCATOR * gckALLOCATOR; -typedef struct _gcsATTACH_DESC * gcsATTACH_DESC_PTR; +typedef union _gcsATTACH_DESC * gcsATTACH_DESC_PTR; typedef struct _gcsALLOCATOR_OPERATIONS { @@ -178,6 +179,7 @@ typedef struct _gcsALLOCATOR_OPERATIONS void (*UnmapUser)( IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, IN gctPOINTER Logical, IN gctUINT32 Size ); @@ -335,27 +337,21 @@ typedef struct _gcsALLOCATOR gctSTRING name; /* Operations. */ - gcsALLOCATOR_OPERATIONS* ops; + gcsALLOCATOR_OPERATIONS * ops; /* Capability of this allocator. */ gctUINT32 capability; - struct list_head head; - /* Debugfs entry of this allocator. */ gcsDEBUGFS_DIR debugfsDir; - /* Init allocator debugfs. */ - void (*debugfsInit)(gckALLOCATOR, gckDEBUGFS_DIR); - - /* Cleanup allocator debugfs. */ - void (*debugfsCleanup)(gckALLOCATOR); - /* Private data used by customer allocator. */ void * privateData; - /* Private data destructor. */ - void (*privateDataDestructor)(void *); + /* Allocator destructor. */ + void (*destructor)(struct _gcsALLOCATOR *); + + struct list_head link; } gcsALLOCATOR; @@ -365,21 +361,44 @@ typedef struct _gcsALLOCATOR_DESC char * name; /* Entry function to construct a allocator. */ - gceSTATUS (*construct)(gckOS, gckALLOCATOR *); + gceSTATUS (*construct)(gckOS, gcsDEBUGFS_DIR *, gckALLOCATOR *); } gcsALLOCATOR_DESC; -typedef struct _gcsATTACH_DESC +typedef union _gcsATTACH_DESC { /* gcvALLOC_FLAG_DMABUF */ - gctUINT32 handle; + struct + { + gctINT fd; + } + dmaBuf; /* gcvALLOC_FLAG_USERMEMORY */ - gctPOINTER memory; - gctUINT32 physical; - gctSIZE_T size; + struct + { + gctPOINTER memory; + gctPHYS_ADDR_T physical; + gctSIZE_T size; + } + userMem; - gcsEXTERNAL_MEMORY_INFO info; + /* gcvALLOC_FLAG_EXTERNAL_MEMORY */ + struct + { + gcsEXTERNAL_MEMORY_INFO info; + } + externalMem; + + /* Reserved memory. */ + struct + { + unsigned long start; + unsigned long size; + const char * name; + int requested; + } + reservedMem; } gcsATTACH_DESC; @@ -395,12 +414,48 @@ gcsATTACH_DESC; } /* Construct a allocator. */ -gceSTATUS +static inline gceSTATUS gckALLOCATOR_Construct( IN gckOS Os, IN gcsALLOCATOR_OPERATIONS * Operations, OUT gckALLOCATOR * Allocator - ); + ) +{ + gceSTATUS status; + gckALLOCATOR allocator; + + gcmkASSERT(Allocator != gcvNULL); + gcmkASSERT + ( Operations + && (Operations->Alloc || Operations->Attach) + && (Operations->Free) + && Operations->MapUser + && Operations->UnmapUser + && Operations->MapKernel + && Operations->UnmapKernel + && Operations->Cache + && Operations->Physical + ); + + allocator = kzalloc(sizeof(gcsALLOCATOR), GFP_KERNEL | gcdNOWARN); + if (unlikely(!allocator)) + { + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + + /* Record os. */ + allocator->os = Os; + + /* Set operations. */ + allocator->ops = Operations; + + *Allocator = allocator; + + return gcvSTATUS_OK; + +OnError: + return status; +} /* How to implement customer allocator 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 afbd7b49f209..5cf45d5ef5eb 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,31 +80,14 @@ 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__) \ +#define gcmkDECLARE_MUTEX(__mutex__) \ + DEFINE_MUTEX(__mutex__); \ + +#define gcmkMUTEX_LOCK(__mutex__) \ mutex_lock(&__mutex__); -#define gcmkUNLOCKSECTION(__mutex__) \ +#define gcmkMUTEX_UNLOCK(__mutex__) \ mutex_unlock(&__mutex__); -#else -#define gcmkDECLARE_LOCK(__spinLock__) \ - static DEFINE_SPINLOCK(__spinLock__); \ - unsigned long __spinLock__##flags = 0; - -#define gcmkLOCKSECTION(__spinLock__) \ - spin_lock_irqsave(&__spinLock__, __spinLock__##flags) - -#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 3ad0f5ebc689..622df619a60f 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 @@ -141,7 +141,7 @@ typedef va_list gctDBGARGS ; } -gcmkDECLARE_LOCK(traceLock); +static DEFINE_SPINLOCK(traceLock); /* Debug File System Node Struct. */ struct _gcsDEBUGFS_Node @@ -215,14 +215,7 @@ gc_debugfs_write( if (info->write) { - char tmpbuf[256] = {0}; - - if (count >= sizeof(tmpbuf) || copy_from_user(tmpbuf, buf, count) > 0) - { - return 0; - } - - info->write(tmpbuf, count, node); + info->write(buf, count, node); } return count; @@ -270,14 +263,19 @@ gckDEBUGFS_DIR_CreateFiles( for (i = 0; i < count; i++) { + umode_t mode = 0; + /* Create a node. */ node = (gcsINFO_NODE *)kzalloc(sizeof(gcsINFO_NODE), GFP_KERNEL); node->info = &List[i]; node->device = Data; + mode |= List[i].show ? S_IRUGO : 0; + mode |= List[i].write ? S_IWUSR : 0; + node->entry = debugfs_create_file( - List[i].name, S_IRUGO|S_IWUSR, Dir->root, node, &gc_debugfs_operations); + List[i].name, mode, Dir->root, node, &gc_debugfs_operations); if (!node->entry) { @@ -481,24 +479,25 @@ _GetArgumentSize ( *******************************************************************************/ static ssize_t _AppendString ( - IN gcsDEBUGFS_Node* Node , - IN gctCONST_STRING String , - IN int Length - ) + IN gcsDEBUGFS_Node* Node, + IN gctCONST_STRING String, + IN int Length + ) { - int n ; + int n; + unsigned long flags; /* if the message is longer than the buffer, just take the beginning * of it, in hopes that the reader (if any) will have time to read * before we wrap around and obliterate it */ - n = gcmkMIN ( Length , Node->size - 1 ) ; + n = gcmkMIN ( Length , Node->size - 1 ); - gcmkLOCKSECTION(traceLock); + spin_lock_irqsave(&traceLock, flags); /* now copy it into the circular buffer and free our temp copy */ _WriteToNode ( Node , (caddr_t)String , n ) ; - gcmkUNLOCKSECTION(traceLock); + spin_unlock_irqrestore(&traceLock, flags); return n ; } @@ -562,62 +561,64 @@ _DebugFSOpen ( *******************************************************************************/ static ssize_t _DebugFSRead ( - struct file *file , - char __user * buffer , - size_t length , - loff_t * offset - ) + struct file *file, + char __user * buffer, + size_t length, + loff_t * offset + ) { - int retval ; - caddr_t data_to_return ; + int retval; + caddr_t data_to_return; + unsigned long flags; gcsDEBUGFS_Node* node = file->private_data; if (node == NULL) { - printk ( "debugfs_read: record not found\n" ) ; + printk ( "debugfs_read: record not found\n" ); return - EIO ; } - gcmkLOCKSECTION(traceLock); + spin_lock_irqsave(&traceLock, flags); /* wait until there's data available (unless we do nonblocking reads) */ while (!gcmkNODE_QLEN(node)) { - gcmkUNLOCKSECTION(traceLock); + spin_unlock_irqrestore(&traceLock, flags); - if ( file->f_flags & O_NONBLOCK ) + if (file->f_flags & O_NONBLOCK) { return - EAGAIN ; } - if ( wait_event_interruptible ( ( *( gcmkNODE_READQ ( node ) ) ) , ( *offset < gcmkNODE_FIRST_EMPTY_BYTE ( node ) ) ) ) + if (wait_event_interruptible((*(gcmkNODE_READQ(node))) , (*offset < gcmkNODE_FIRST_EMPTY_BYTE(node)))) { return - ERESTARTSYS ; /* signal: tell the fs layer to handle it */ } - gcmkLOCKSECTION(traceLock); + spin_lock_irqsave(&traceLock, flags); } - data_to_return = _ReadFromNode ( node , &length , offset ) ; + data_to_return = _ReadFromNode(node , &length , offset); - gcmkUNLOCKSECTION(traceLock); + spin_unlock_irqrestore(&traceLock, flags); - if ( data_to_return == NULL ) + if (data_to_return == NULL) { - retval = 0 ; - goto unlock ; + retval = 0; + goto unlock; } - if ( copy_to_user ( buffer , data_to_return , length ) > 0 ) + + if (copy_to_user(buffer, data_to_return, length) > 0) { - retval = - EFAULT ; + retval = - EFAULT; } else { - retval = length ; + retval = length; } unlock: - wake_up_interruptible ( gcmkNODE_WRITEQ ( node ) ) ; + wake_up_interruptible(gcmkNODE_WRITEQ(node)); return retval ; } 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 1a29fe19461a..26a974ae14a4 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 @@ -195,7 +195,7 @@ int gc_meminfo_show(struct seq_file* m, void* data) gcsDATABASE_PTR database; gctUINT32 i; - gctUINT32 free = 0, used = 0, total = 0; + gctUINT32 free = 0, used = 0, total = 0, minFree = 0, maxUsed = 0; gcsDATABASE_COUNTERS contiguousCounter = {0, 0, 0}; gcsDATABASE_COUNTERS virtualCounter = {0, 0, 0}; @@ -208,9 +208,11 @@ int gc_meminfo_show(struct seq_file* m, void* data) gcmkVERIFY_OK( gckOS_AcquireMutex(memory->os, memory->mutex, gcvINFINITE)); - free = memory->freeBytes; - used = memory->bytes - memory->freeBytes; - total = memory->bytes; + free = memory->freeBytes; + minFree = memory->minFreeBytes; + used = memory->bytes - memory->freeBytes; + maxUsed = memory->bytes - memory->minFreeBytes; + total = memory->bytes; gcmkVERIFY_OK(gckOS_ReleaseMutex(memory->os, memory->mutex)); } @@ -219,6 +221,8 @@ int gc_meminfo_show(struct seq_file* m, void* data) seq_printf(m, " gcvPOOL_SYSTEM:\n"); seq_printf(m, " Free : %10u B\n", free); seq_printf(m, " Used : %10u B\n", used); + seq_printf(m, " MinFree : %10u B\n", minFree); + seq_printf(m, " MaxUsed : %10u B\n", maxUsed); seq_printf(m, " Total : %10u B\n", total); /* Acquire the database mutex. */ @@ -498,14 +502,12 @@ gc_version_show(struct seq_file *m, void *data) gcsINFO_NODE *node = m->private; gckGALDEVICE device = node->device; gcsPLATFORM * platform = device->platform; - gctCONST_STRING name; seq_printf(m, "%s built at %s\n", gcvVERSION_STRING, HOST); - if (platform->ops->name) + if (platform->name) { - platform->ops->name(platform, &name); - seq_printf(m, "Platform path: %s\n", name); + seq_printf(m, "Platform path: %s\n", platform->name); } else { @@ -661,16 +663,37 @@ static int gc_vidmem_show(struct seq_file *m, void *unused) return 0; } -static int gc_vidmem_write(const char __user *buf, size_t count, void* data) +static inline int strtoint_from_user(const char __user *s, + size_t count, int *res) { - dumpProcess = simple_strtol(buf, NULL, 0); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) + int ret = kstrtoint_from_user(s, count, 10, res); + + return ret < 0 ? ret : count; +#else + /* sign, base 2 representation, newline, terminator */ + char buf[1 + sizeof(long) * 8 + 1 + 1]; + + size_t len = min(count, sizeof(buf) - 1); + + if (copy_from_user(buf, s, len)) + return -EFAULT; + buf[len] = '\0'; + + *res = (int) simple_strtol(buf, NULL, 0); + return count; +#endif +} + +static int gc_vidmem_write(const char __user *buf, size_t count, void* data) +{ + return strtoint_from_user(buf, count, &dumpProcess); } static int gc_dump_trigger_write(const char __user *buf, size_t count, void* data) { - dumpCore = simple_strtol(buf, NULL, 0); - return count; + return strtoint_from_user(buf, count, &dumpCore); } static gcsINFO InfoList[] = @@ -800,9 +823,9 @@ _SetupVidMem( gceSTATUS status; gctUINT32 physAddr = ~0U; gckGALDEVICE device = Device; - struct resource* mem_region; /* set up the contiguous memory */ + device->contiguousBase = ContiguousBase; device->contiguousSize = ContiguousSize; if (ContiguousSize > 0) @@ -815,7 +838,7 @@ _SetupVidMem( status = _AllocateMemory( device, device->contiguousSize, - &device->contiguousBase, + &device->contiguousLogical, &device->contiguousPhysical, &physAddr ); @@ -833,18 +856,17 @@ _SetupVidMem( if (gcmIS_SUCCESS(status)) { - device->contiguousRequested = gcvTRUE; - device->requestedContiguousBase = physAddr; + device->contiguousBase = physAddr; break; } gcmkONERROR(_FreeMemory( device, - device->contiguousBase, + device->contiguousLogical, device->contiguousPhysical )); - device->contiguousBase = gcvNULL; + device->contiguousLogical = gcvNULL; device->contiguousPhysical = gcvNULL; } @@ -877,33 +899,18 @@ _SetupVidMem( } 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); - } - } + gcmkONERROR(gckOS_RequestReservedMemory( + device->os, ContiguousBase, ContiguousSize, + "galcore contiguous memory", + Args->contiguousRequested, + &device->contiguousPhysical + )); - device->requestedContiguousBase = ContiguousBase; - device->requestedContiguousSize = ContiguousSize; - device->contiguousRequested = Args->contiguousRequested; + device->requestedContiguousBase = ContiguousBase; + device->requestedContiguousSize = ContiguousSize; - device->contiguousPhysical = gcvNULL; device->contiguousPhysicalName = 0; device->contiguousSize = ContiguousSize; - device->contiguousMapped = gcvTRUE; } } } @@ -1115,7 +1122,6 @@ gckGALDEVICE_Construct( gctUINT32 internalBaseAddress = 0, internalAlignment = 0; gctUINT32 externalBaseAddress = 0, externalAlignment = 0; gctUINT32 horizontalTileSize, verticalTileSize; - struct resource* mem_region; gctUINT32 physical; gckGALDEVICE device; gceSTATUS status; @@ -1245,34 +1251,34 @@ gckGALDEVICE_Construct( physical = device->requestedRegisterMemBases[i]; /* Set up register memory region. */ - if ( physical != 0) + if (physical != 0) { - - if ( Args->registerMemMapped ) + if (Args->registerMemMapped) { 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) + } + else + { +#if USE_LINUX_PCIE + device->registerBases[i] = (gctPOINTER) pci_iomap(device->platform->device, 1, + device->requestedRegisterMemSizes[i]); +#else + if (!request_mem_region(physical, device->requestedRegisterMemSizes[i], "galcore register region")) { gcmkTRACE_ZONE( gcvLEVEL_ERROR, gcvZONE_DRIVER, - "%s(%d): Failed to claim %lu bytes @ 0x%08X\n", + "%s(%d): Failed to claim %lu bytes @ 0x%zx\n", __FUNCTION__, __LINE__, physical, device->requestedRegisterMemSizes[i] ); - gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES); + gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES); } - - device->registerBases[i] = (gctPOINTER) ioremap_nocache( + device->registerBases[i] = (gctPOINTER)ioremap_nocache( physical, device->requestedRegisterMemSizes[i]); +#endif if (device->registerBases[i] == gcvNULL) { @@ -1627,7 +1633,6 @@ gckGALDEVICE_Destroy( Device->contiguousPhysicalName = 0; } - for (i = 0; i < gcdMAX_GPU_COUNT; i++) { if (Device->kernels[i] != gcvNULL) @@ -1664,28 +1669,31 @@ gckGALDEVICE_Destroy( Device->externalVidMem = gcvNULL; } - if (Device->contiguousBase != gcvNULL) + if (Device->contiguousPhysical != gcvNULL) { - if (Device->contiguousMapped == gcvFALSE) + if (Device->requestedContiguousBase == 0) { gcmkVERIFY_OK(_FreeMemory( Device, - Device->contiguousBase, + Device->contiguousLogical, Device->contiguousPhysical )); } +#if !USE_LINUX_PCIE + else + { + gckOS_ReleaseReservedMemory( + Device->os, + Device->contiguousPhysical + ); - Device->contiguousBase = gcvNULL; - Device->contiguousPhysical = gcvNULL; - } + Device->requestedContiguousBase = 0; + Device->requestedContiguousSize = 0; + } +#endif - if (Device->requestedContiguousBase != 0 - && Device->contiguousRequested == gcvFALSE - ) - { - release_mem_region(Device->requestedContiguousBase, Device->requestedContiguousSize); - Device->requestedContiguousBase = 0; - Device->requestedContiguousSize = 0; + Device->contiguousLogical = gcvNULL; + Device->contiguousPhysical = gcvNULL; } if (Device->contiguousVidMem != gcvNULL) @@ -1697,16 +1705,19 @@ gckGALDEVICE_Destroy( for (i = 0; i < gcdMAX_GPU_COUNT; i++) { - if (Device->registerBases[i] != gcvNULL) + if (Device->registerBases[i]) { /* Unmap register memory. */ - if ( Device->requestedRegisterMemBases[i] != 0 ) - iounmap(Device->registerBases[i]); - if (Device->requestedRegisterMemBases[i] != 0) { +#if USE_LINUX_PCIE + pci_iounmap(Device->platform->device, Device->registerBases[i]); +#else + + iounmap(Device->registerBases[i]); release_mem_region(Device->requestedRegisterMemBases[i], Device->requestedRegisterMemSizes[i]); +#endif } Device->registerBases[i] = 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 f7b1e0d6010e..f5470d8cf494 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 @@ -106,23 +106,29 @@ typedef struct _gckGALDEVICE gctUINT32 externalPhysicalName; gctPOINTER externalLogical; gckVIDMEM externalVidMem; + + gctPHYS_ADDR_T contiguousBase; + gctSIZE_T contiguousSize; + gckVIDMEM contiguousVidMem; - gctPOINTER contiguousBase; + gctPOINTER contiguousLogical; gctPHYS_ADDR contiguousPhysical; gctUINT32 contiguousPhysicalName; - gctSIZE_T contiguousSize; - gctBOOL contiguousMapped; - gctPOINTER contiguousMappedUser; - gctBOOL contiguousRequested; + gctSIZE_T systemMemorySize; gctUINT32 systemMemoryBaseAddress; gctPOINTER registerBases[gcdMAX_GPU_COUNT]; gctSIZE_T registerSizes[gcdMAX_GPU_COUNT]; + gctUINT32 baseAddress; gctUINT32 physBase; gctUINT32 physSize; + + /* By request_mem_region. */ gctUINT32 requestedRegisterMemBases[gcdMAX_GPU_COUNT]; gctSIZE_T requestedRegisterMemSizes[gcdMAX_GPU_COUNT]; + + /* By request_mem_region. */ gctUINT32 requestedContiguousBase; gctSIZE_T requestedContiguousSize; @@ -159,9 +165,11 @@ typedef struct _gckGALDEVICE typedef struct _gcsHAL_PRIVATE_DATA { gckGALDEVICE device; - gctPOINTER mappedMemory; - gctPOINTER contiguousLogical; - /* The process opening the device may not be the same as the one that closes it. */ + /* + * 'fput' schedules actual work in '__fput' in a different thread. + * So the process opens the device may not be the same as the one that + * closes it. + */ gctUINT32 pidOpen; } gcsHAL_PRIVATE_DATA, * gcsHAL_PRIVATE_DATA_PTR; 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 index 816aae07190f..27f960796ef3 100644 --- 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 @@ -61,7 +61,6 @@ #include "gc_hal_driver.h" #include -#include /* Zone used for header/footer. */ #define _GC_OBJ_ZONE gcvZONE_DRIVER @@ -69,9 +68,16 @@ MODULE_DESCRIPTION("Vivante Graphics Driver"); MODULE_LICENSE("Dual MIT/GPL"); +/* Disable MSI for internal FPGA build except PPC */ +#if gcdFPGA_BUILD && !defined(CONFIG_PPC) +#define USE_MSI 0 +#else +#define USE_MIS 1 +#endif + static struct class* gpuClass; -static gcsPLATFORM platform; +static gcsPLATFORM *platform; static gckGALDEVICE galDevice; @@ -368,8 +374,6 @@ static int drv_open( } data->device = galDevice; - data->mappedMemory = gcvNULL; - data->contiguousLogical = gcvNULL; data->pidOpen = _GetProcessID(); /* Attached the process. */ @@ -382,19 +386,6 @@ static int drv_open( } 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. */ @@ -404,16 +395,6 @@ static int drv_open( OnError: if (data != gcvNULL) { - if (data->contiguousLogical != gcvNULL) - { - gcmkVERIFY_OK(gckOS_UnmapMemory( - galDevice->os, - galDevice->contiguousPhysical, - galDevice->contiguousSize, - data->contiguousLogical - )); - } - kfree(data); } @@ -481,22 +462,6 @@ static int drv_release( 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++) { @@ -530,8 +495,6 @@ static long drv_ioctl( 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", @@ -643,43 +606,6 @@ static long drv_ioctl( return -ERESTARTSYS; } - if (gcmIS_SUCCESS(status) && (iface.command == gcvHAL_LOCK_VIDEO_MEMORY)) - { - gcuVIDMEM_NODE_PTR node; - - for (i = 0; i < gcvCORE_COUNT; i++) - { - if (device->kernels[i] != gcvNULL) - { - break; - } - } - - if(i == gcvCORE_COUNT) - goto OnError; - - gcmkONERROR(gckVIDMEM_HANDLE_Lookup(device->kernels[i], - _GetProcessID(), - (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) @@ -705,110 +631,6 @@ OnError: 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 struct file_operations driver_fops = { .owner = THIS_MODULE, @@ -818,7 +640,6 @@ static struct file_operations driver_fops = #ifdef HAVE_COMPAT_IOCTL .compat_ioctl = drv_ioctl, #endif - .mmap = drv_mmap, }; static struct miscdevice gal_device = { @@ -840,7 +661,7 @@ static int drv_init(void) .stuckDump = stuckDump, .gpu3DMinClock = gpu3DMinClock, .contiguousRequested = contiguousRequested, - .platform = &platform, + .platform = platform, .mmu = mmu, .registerMemMapped = registerMemMapped, .registerMemAddress = registerMemAddress, @@ -860,14 +681,6 @@ static int drv_init(void) 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; @@ -1037,40 +850,16 @@ static void drv_exit(void) gcmkFOOTER_NO(); } -static int gpu_platform_bind(struct device *dev) -{ - int ret; - - ret = component_bind_all(dev, 0); - if (ret < 0) { - return ret; - } - - ret = drv_init(); - if (!ret) { - platform_set_drvdata(to_platform_device(dev), galDevice); - - return ret; - } - component_unbind_all(dev, 0); - return ret; -} -static void gpu_platform_unbind(struct device *dev) -{ - component_unbind_all(dev, 0); -} - -extern struct component_match *match; -static const struct component_master_ops gpu_platform_master_ops = { - .bind = gpu_platform_bind, - .unbind = gpu_platform_unbind, -}; +#if USE_LINUX_PCIE +static int gpu_probe(struct pci_dev *pdev, const struct pci_device_id *ent) +#else /* USE_LINUX_PCIE */ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0) -static int gpu_probe(struct platform_device *pdev) + static int gpu_probe(struct platform_device *pdev) #else -static int __devinit gpu_probe(struct platform_device *pdev) + static int __devinit gpu_probe(struct platform_device *pdev) #endif +#endif /* USE_LINUX_PCIE */ { int ret = -ENODEV; gcsMODULE_PARAMETERS moduleParam = { @@ -1101,7 +890,6 @@ static int __devinit gpu_probe(struct platform_device *pdev) .registerMemMapped = registerMemMapped, }; - gcmkHEADER(); memcpy(moduleParam.irqs, irqs, gcmSIZEOF(gctINT) * gcvCORE_COUNT); @@ -1109,66 +897,98 @@ static int __devinit gpu_probe(struct platform_device *pdev) memcpy(moduleParam.registerSizes, registerSizes, gcmSIZEOF(gctUINT) * gcvCORE_COUNT); memcpy(moduleParam.chipIDs, chipIDs, gcmSIZEOF(gctUINT) * gcvCORE_COUNT); - platform.device = pdev; + platform->device = pdev; +#if USE_LINUX_PCIE + if (pci_enable_device(pdev)) { + printk(KERN_ERR "galcore: pci_enable_device() failed.\n"); + } + + if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) { + printk(KERN_ERR "galcore: Failed to set DMA mask.\n"); + } - if (platform.ops->getPower) + pci_set_master(pdev); + + if (pci_request_regions(pdev, "galcore")) { + printk(KERN_ERR "galcore: Failed to get ownership of BAR region.\n"); + } + +#if USE_MSI + if (pci_enable_msi(pdev)) { + printk(KERN_ERR "galcore: Failed to enable MSI.\n"); + } +#endif +#endif + + if (platform->ops->getPower) { - if (gcmIS_ERROR(platform.ops->getPower(&platform))) + if (gcmIS_ERROR(platform->ops->getPower(platform))) { gcmkFOOTER_NO(); return ret; } } - if (platform.ops->adjustParam) + if (platform->ops->adjustParam) { /* Override default module param. */ - platform.ops->adjustParam(&platform, &moduleParam); + platform->ops->adjustParam(platform, &moduleParam); /* Update module param because drv_init() uses them directly. */ _UpdateModuleParam(&moduleParam); } - if (platform.ops->registerDevice) { - /*drv_init() will be called during binding*/ - ret = component_master_add_with_match(&pdev->dev, &gpu_platform_master_ops, match); - if(ret !=0) - { - gcmkFOOTER_NO(); - return ret; - } - } - else { - ret = drv_init(); - if (!ret) { - platform_set_drvdata(pdev, galDevice); - gcmkFOOTER_NO(); - return ret; - } + + ret = drv_init(); + + if (!ret) + { +#if USE_LINUX_PCIE + pci_set_drvdata(pdev, galDevice); +#else + platform_set_drvdata(pdev, galDevice); +#endif + + gcmkFOOTER_NO(); + return ret; } gcmkFOOTER_ARG(KERN_INFO "Failed to register gpu driver: %d\n", ret); return ret; } +#if USE_LINUX_PCIE +static void gpu_remove(struct pci_dev *pdev) +#else /* USE_LINUX_PCIE */ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0) -static int gpu_remove(struct platform_device *pdev) + static int gpu_remove(struct platform_device *pdev) #else -static int __devexit gpu_remove(struct platform_device *pdev) + static int __devexit gpu_remove(struct platform_device *pdev) #endif +#endif /* USE_LINUX_PCIE */ { gcmkHEADER(); drv_exit(); - if (platform.ops->putPower) + if (platform->ops->putPower) { - platform.ops->putPower(&platform); - } - if (platform.ops->registerDevice) { - component_master_del(&pdev->dev, &gpu_platform_master_ops); + platform->ops->putPower(platform); } + +#if USE_LINUX_PCIE + pci_set_drvdata(pdev, NULL); +#if USE_MSI + pci_disable_msi(pdev); +#endif + pci_clear_master(pdev); + pci_release_regions(pdev); + pci_disable_device(pdev); + gcmkFOOTER_NO(); + return; +#else gcmkFOOTER_NO(); return 0; +#endif } static int gpu_suspend(struct platform_device *dev, pm_message_t state) @@ -1205,17 +1025,6 @@ static int gpu_suspend(struct platform_device *dev, pm_message_t state) return -1; } -#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 gcdENABLE_VG if (i == gcvCORE_VG) { @@ -1333,6 +1142,30 @@ static const struct dev_pm_ops gpu_pm_ops = { }; #endif +#if USE_LINUX_PCIE +static const struct pci_device_id vivpci_ids[] = { + { + .class = 0x000000, + .class_mask = 0x000000, + .vendor = 0x10ee, + .device = 0x7012, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = 0 + }, { /* End: all zeroes */ } +}; + +MODULE_DEVICE_TABLE(pci, vivpci_ids); + +static struct pci_driver gpu_driver = { + .name = DEVICE_NAME, + .id_table = vivpci_ids, + .probe = gpu_probe, + .remove = gpu_remove +}; + +#else /* USE_LINUX_PCIE */ + static struct platform_driver gpu_driver = { .probe = gpu_probe, #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0) @@ -1352,103 +1185,49 @@ static struct platform_driver gpu_driver = { #endif } }; +#endif /* USE_LINUX_PCIE */ 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; - } - } + ret = soc_platform_init(&gpu_driver, &platform); - platform.driver = &gpu_driver; - - if (platform.ops->adjustDriver) - { - /* Override default platform_driver struct. */ - platform.ops->adjustDriver(&platform); - } - - if (platform.ops->registerDevice) + if (ret || !platform) { - ret = platform.ops->registerDevice(&platform); - if (ret != 0) { - goto out; - } + printk(KERN_ERR "galcore: Soc platform init failed.\n"); + return -ENODEV; } +#if USE_LINUX_PCIE + ret = pci_register_driver(&gpu_driver); +#else /* USE_LINUX_PCIE */ ret = platform_driver_register(&gpu_driver); - if (!ret) +#endif /* USE_LINUX_PCIE */ + + if (ret) { - goto out; + printk(KERN_ERR "galcore: gpu_init() failed to register driver!\n"); + soc_platform_terminate(platform); + platform = NULL; + return ret; } - platform_device_del(platform.device); -put_dev: - platform_device_put(platform.device); + platform->driver = &gpu_driver; -out: - return ret; + return 0; } static void __exit gpu_exit(void) { +#if USE_LINUX_PCIE + pci_unregister_driver(&gpu_driver); +#else platform_driver_unregister(&gpu_driver); +#endif /* USE_LINUX_PCIE */ - if (platform.ops->unRegisterDevice) - { - platform.ops->unRegisterDevice(&platform); - } - - if (platform.ops->needAddDevice - && platform.ops->needAddDevice(&platform)) - { - platform_device_unregister(platform.device); - } - - if (platform.priv) - { - /* Free platform private data. */ - platform.ops->freePriv(&platform); - } + soc_platform_terminate(platform); + platform = NULL; } module_init(gpu_init); 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 67c9cbfe20f1..0578656e4f8e 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 @@ -248,13 +248,14 @@ gckKERNEL_UnmapMemory( IN gckKERNEL Kernel, IN gctPHYS_ADDR Physical, IN gctSIZE_T Bytes, - IN gctPOINTER Logical + IN gctPOINTER Logical, + IN gctUINT32 ProcessID ) { gckKERNEL kernel = Kernel; gctPHYS_ADDR physical = gcmNAME_TO_PTR(Physical); - return gckOS_UnmapMemory(Kernel->os, physical, Bytes, Logical); + return gckOS_UnmapMemoryEx(Kernel->os, physical, Bytes, Logical, ProcessID); } /******************************************************************************* @@ -330,20 +331,19 @@ gckKERNEL_MapVideoMemoryEx( case gcvPOOL_LOCAL_INTERNAL: /* Internal memory. */ logical = device->internalLogical; + /* Impossible to use per device logical for all user processes. */ + BUG_ON("Incorrect path"); break; case gcvPOOL_LOCAL_EXTERNAL: /* External memory. */ logical = device->externalLogical; + /* Impossible to use per device logical for all user processes. */ + BUG_ON("Incorrect path"); break; case gcvPOOL_SYSTEM: /* System memory. */ - if (device->contiguousMapped) - { - logical = device->contiguousBase; - } - else { PLINUX_MDL mdl; PLINUX_MDL_MAP mdlMap; @@ -354,8 +354,15 @@ gckKERNEL_MapVideoMemoryEx( mdlMap = FindMdlMap(mdl, _GetProcessID()); mutex_unlock(&mdl->mapsMutex); + if (!mdlMap) + { + gcmkPRINT("%s: SYSTEM pool is not mapped", __func__); + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + logical = (gctPOINTER) mdlMap->vmaAddr; } + #if gcdENABLE_VG if (Core == gcvCORE_VG) { 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 32233cc3418e..df78aad26ae3 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 @@ -56,8 +56,6 @@ #ifndef __gc_hal_kernel_linux_h_ #define __gc_hal_kernel_linux_h_ -/* VIV: Latest kernel version supported: 4.1.0. */ - #include #include #include @@ -248,7 +246,10 @@ typedef struct _gcsSIGNAL * gcsSIGNAL_PTR; typedef struct _gcsSIGNAL { /* Kernel sync primitive. */ - struct completion obj; + volatile unsigned int done; + spinlock_t lock; + + wait_queue_head_t wait; /* Manual reset flag. */ gctBOOL manualReset; @@ -291,6 +292,23 @@ gckOS_FreeAllocators( gckOS Os ); +/* Reserved memory. */ +gceSTATUS +gckOS_RequestReservedMemory( + gckOS Os, + unsigned long Start, + unsigned long Size, + const char * Name, + gctBOOL Requested, + void ** MemoryHandle + ); + +void +gckOS_ReleaseReservedMemory( + gckOS Os, + void * MemoryHandle + ); + gceSTATUS _ConvertLogical2Physical( IN gckOS Os, @@ -300,12 +318,6 @@ _ConvertLogical2Physical( OUT gctPHYS_ADDR_T * Physical ); -void -_UnmapUserLogical( - IN gctPOINTER Logical, - IN gctUINT32 Size - ); - gctBOOL _QuerySignal( IN gckOS Os, 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 e63d7a87de02..2c8cc4b928fd 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 @@ -86,19 +86,12 @@ #include "gc_hal_kernel_allocator.h" -#define gcmkBUG_ON(x, func, line) \ +#define gcmkBUG_ON(x) \ do { \ - if (unlikely(x)) \ + 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; \ - } \ + gcmkPRINT("[galcore]: BUG ON @ %s(%d)", __func__, __LINE__); \ + dump_stack(); \ } \ } while (0) @@ -359,73 +352,78 @@ _DestroyIntegerId( return gcvSTATUS_OK; } -gceSTATUS +static inline gceSTATUS _QueryProcessPageTable( IN gctPOINTER Logical, OUT gctPHYS_ADDR_T * Address ) { - gctUINTPTR_T logical = (gctUINTPTR_T)Logical; - pgd_t *pgd; - pud_t *pud; - pmd_t *pmd; - pte_t *pte; - gctUINT32 offset = logical & ~PAGE_MASK; + unsigned long logical = (unsigned long)Logical; + unsigned long offset = logical & ~PAGE_MASK; if (is_vmalloc_addr(Logical)) { - *Address = page_to_phys(vmalloc_to_page(Logical)) + offset; - + /* vmalloc area. */ + *Address = page_to_phys(vmalloc_to_page(Logical)) | offset; return gcvSTATUS_OK; } - - if (!current->mm) + else if (virt_addr_valid(logical)) { - return gcvSTATUS_NOT_FOUND; + /* Kernel logical address. */ + *Address = virt_to_phys(Logical); + return gcvSTATUS_OK; } - - pgd = pgd_offset(current->mm, logical); - if (pgd_none(*pgd) || pgd_bad(*pgd)) + else { - return gcvSTATUS_NOT_FOUND; - } + /* Try user VM area. */ + struct vm_area_struct *vma; + spinlock_t *ptl; + pgd_t *pgd; + pud_t *pud; + pmd_t *pmd; + pte_t *pte; - pud = pud_offset(pgd, logical); - if (pud_none(*pud) || pud_bad(*pud)) - { - return gcvSTATUS_NOT_FOUND; - } + if (!current->mm) + return gcvSTATUS_NOT_FOUND; - pmd = pmd_offset(pud, logical); - if (pmd_none(*pmd) || pmd_bad(*pmd)) - { - return gcvSTATUS_NOT_FOUND; - } + down_read(¤t->mm->mmap_sem); + vma = find_vma(current->mm, logical); + up_read(¤t->mm->mmap_sem); - spin_lock(¤t->mm->page_table_lock); - pte = pte_offset_map(pmd, logical); + /* To check if mapped to user. */ + if (!vma) + return gcvSTATUS_NOT_FOUND; - if (!pte) - { - spin_unlock(¤t->mm->page_table_lock); + pgd = pgd_offset(current->mm, logical); + if (pgd_none(*pgd) || pgd_bad(*pgd)) + return gcvSTATUS_NOT_FOUND; - return gcvSTATUS_NOT_FOUND; - } + pud = pud_offset(pgd, logical); + if (pud_none(*pud) || pud_bad(*pud)) + return gcvSTATUS_NOT_FOUND; - if (!pte_present(*pte)) - { - pte_unmap(pte); - spin_unlock(¤t->mm->page_table_lock); + pmd = pmd_offset(pud, logical); + if (pmd_none(*pmd) || pmd_bad(*pmd)) + return gcvSTATUS_NOT_FOUND; - return gcvSTATUS_NOT_FOUND; - } + pte = pte_offset_map_lock(current->mm, pmd, logical, &ptl); + if (!pte) + { + spin_unlock(ptl); + return gcvSTATUS_NOT_FOUND; + } - *Address = (pte_pfn(*pte) << PAGE_SHIFT) | offset; + if (!pte_present(*pte)) + { + pte_unmap_unlock(pte, ptl); + return gcvSTATUS_NOT_FOUND; + } - pte_unmap(pte); - spin_unlock(¤t->mm->page_table_lock); + *Address = (pte_pfn(*pte) << PAGE_SHIFT) | offset; + pte_unmap_unlock(pte, ptl); - return gcvSTATUS_OK; + return gcvSTATUS_OK; + } } #if !gcdCACHE_FUNCTION_UNIMPLEMENTED && defined(CONFIG_OUTER_CACHE) @@ -533,7 +531,7 @@ OnError: } #endif -gctBOOL +static inline gceSTATUS _AllowAccess( IN gckOS Os, IN gceCORE Core, @@ -546,13 +544,13 @@ _AllowAccess( if (Os->clockStates[Core] == gcvFALSE) { gcmkPRINT("[galcore]: %s(%d) GPU[%d] External clock off", __FUNCTION__, __LINE__, Core); - return gcvFALSE; + return gcvSTATUS_NOT_SUPPORTED; } /* Check internal clock state. */ if (Address == 0) { - return gcvTRUE; + return gcvSTATUS_OK; } data = readl((gctUINT8 *)Os->device->registerBases[Core] + 0x0); @@ -560,10 +558,10 @@ _AllowAccess( if ((data & 0x3) == 0x3) { gcmkPRINT("[galcore]: %s(%d) GPU[%d] Internal clock off", __FUNCTION__, __LINE__, Core); - return gcvFALSE; + return gcvSTATUS_NOT_SUPPORTED; } - return gcvTRUE; + return gcvSTATUS_OK; } static gceSTATUS @@ -1248,6 +1246,8 @@ gckOS_UnmapMemoryEx( if (Logical) { + gckALLOCATOR allocator = mdl->allocator; + mutex_lock(&mdl->mapsMutex); mdlMap = FindMdlMap(mdl, PID); @@ -1260,7 +1260,10 @@ gckOS_UnmapMemoryEx( return gcvSTATUS_INVALID_ARGUMENT; } - _UnmapUserLogical(mdlMap->vmaAddr, mdl->numPages * PAGE_SIZE); + BUG_ON(!allocator || !allocator->ops->UnmapUser); + + allocator->ops->UnmapUser(allocator, mdl, + mdlMap->vmaAddr, mdl->numPages * PAGE_SIZE); gcmkVERIFY_OK(_DestroyMdlMap(mdl, mdlMap)); @@ -1398,7 +1401,7 @@ gckOS_AllocateNonPagedMemory( } /* Walk all allocators. */ - list_for_each_entry(allocator, &Os->allocatorList, head) + list_for_each_entry(allocator, &Os->allocatorList, link) { gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_OS, "%s(%d) flag = %x allocator->capability = %x", @@ -1575,6 +1578,118 @@ gceSTATUS gckOS_FreeNonPagedMemory( return gcvSTATUS_OK; } +static inline gckALLOCATOR +_FindAllocator( + gckOS Os, + gctUINT Flag + ) +{ + gckALLOCATOR allocator; + + list_for_each_entry(allocator, &Os->allocatorList, link) + { + if ((allocator->capability & Flag) == Flag) + { + return allocator; + } + } + + return gcvNULL; +} + +gceSTATUS +gckOS_RequestReservedMemory( + gckOS Os, + unsigned long Start, + unsigned long Size, + const char * Name, + gctBOOL Requested, + void ** MemoryHandle + ) +{ + PLINUX_MDL mdl = gcvNULL; + gceSTATUS status; + gckALLOCATOR allocator; + gcsATTACH_DESC desc; + + gcmkHEADER_ARG("start=0x%lx size=0x%lx name=%s", Start, Size, Name); + + /* Round up to page size. */ + Size = (Size + ~PAGE_MASK) & PAGE_MASK; + + mdl = _CreateMdl(); + + if (!mdl) + { + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + + desc.reservedMem.start = Start; + desc.reservedMem.size = Size; + desc.reservedMem.name = Name; + desc.reservedMem.requested = Requested; + + allocator = _FindAllocator(Os, gcvALLOC_FLAG_LINUX_RESERVED_MEM); + if (!allocator) + { + gcmkPRINT("reserved-mem allocator not integrated!"); + gcmkONERROR(gcvSTATUS_GENERIC_IO); + } + + /* Call attach. */ + gcmkONERROR(allocator->ops->Attach(allocator, &desc, mdl)); + + /* Assign alloator. */ + mdl->allocator = allocator; + mdl->numPages = Size >> PAGE_SHIFT; + mdl->contiguous = gcvTRUE; + mdl->addr = gcvNULL; + mdl->dmaHandle = Start; + mdl->gid = 0; + + mutex_lock(&Os->mdlMutex); + + /* + * Add this to a global list. + * Will be used by get physical address + * and mapuser pointer functions. + */ + list_add_tail(&mdl->link, &Os->mdlHead); + + mutex_unlock(&Os->mdlMutex); + + *MemoryHandle = (void *)mdl; + + gcmkFOOTER_NO(); + return gcvSTATUS_OK; + +OnError: + if (mdl) + { + gcmkVERIFY_OK(_DestroyMdl(mdl)); + } + + gcmkFOOTER(); + return status; +} + +void +gckOS_ReleaseReservedMemory( + gckOS Os, + void * MemoryHandle + ) +{ + gckALLOCATOR allocator; + PLINUX_MDL mdl = (PLINUX_MDL)MemoryHandle; + + allocator = _FindAllocator(Os, gcvALLOC_FLAG_LINUX_RESERVED_MEM); + + /* If no allocator, how comes the memory? */ + BUG_ON(!allocator); + + allocator->ops->Free(allocator, mdl); +} + /******************************************************************************* ** ** gckOS_ReadRegister @@ -1626,7 +1741,7 @@ gckOS_ReadRegisterEx( mutex_lock(&Os->registerAccessLocks[Core]); } - gcmkBUG_ON(!_AllowAccess(Os, Core, Address), __FUNCTION__, __LINE__); + gcmkBUG_ON(gcvSTATUS_OK != _AllowAccess(Os, Core, Address)); *Data = readl((gctUINT8 *)Os->device->registerBases[Core] + Address); @@ -1636,7 +1751,11 @@ gckOS_ReadRegisterEx( } #if gcdDUMP_AHB_ACCESS - gcmkPRINT("@[RD %d] %08x %08x", Core, Address, *Data); + if (!in_irq()) + { + /* Dangerous to print in interrupt context, skip. */ + gcmkPRINT("@[RD %d] %08x %08x", Core, Address, *Data); + } #endif /* Success. */ @@ -1692,7 +1811,7 @@ gckOS_WriteRegisterEx( mutex_lock(&Os->registerAccessLocks[Core]); } - gcmkBUG_ON(!_AllowAccess(Os, Core, Address), __FUNCTION__, __LINE__); + gcmkBUG_ON(gcvSTATUS_OK != _AllowAccess(Os, Core, Address)); writel(Data, (gctUINT8 *)Os->device->registerBases[Core] + Address); @@ -1702,7 +1821,11 @@ gckOS_WriteRegisterEx( } #if gcdDUMP_AHB_ACCESS - gcmkPRINT("@[WR %d] %08x %08x", Core, Address, Data); + if (!in_interrupt()) + { + /* Dangerous to print in interrupt context, skip. */ + gcmkPRINT("@[WR %d] %08x %08x", Core, Address, Data); + } #endif /* Success. */ @@ -1768,7 +1891,7 @@ gceSTATUS gckOS_GetPageSize( ** gctUINT32 * Address ** Poinetr to a variable that receives the 32-bit physical adress. */ -gceSTATUS +static gceSTATUS _GetPhysicalAddressProcess( IN gckOS Os, IN gctPOINTER Logical, @@ -1777,7 +1900,6 @@ _GetPhysicalAddressProcess( ) { PLINUX_MDL mdl; - gctINT8_PTR base; gceSTATUS status = gcvSTATUS_INVALID_ADDRESS; gcmkHEADER_ARG("Os=0x%X Logical=0x%X ProcessID=%d", Os, Logical, ProcessID); @@ -1788,22 +1910,7 @@ _GetPhysicalAddressProcess( mutex_lock(&Os->mdlMutex); - /* First try the contiguous memory pool. */ - if (Os->device->contiguousMapped) - { - base = (gctINT8_PTR) Os->device->contiguousBase; - - if (((gctINT8_PTR) Logical >= base) - && ((gctINT8_PTR) Logical < base + Os->device->contiguousSize) - ) - { - /* Convert logical address into physical. */ - *Address = Os->device->contiguousVidMem->baseAddress - + (gctINT8_PTR) Logical - base; - status = gcvSTATUS_OK; - } - } - else + if (Os->device->contiguousPhysical) { /* Try the contiguous memory pool. */ mdl = (PLINUX_MDL) Os->device->contiguousPhysical; @@ -3145,7 +3252,7 @@ gckOS_AllocatePagedMemoryEx( } /* Walk all allocators. */ - list_for_each_entry(allocator, &Os->allocatorList, head) + list_for_each_entry(allocator, &Os->allocatorList, link) { gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_OS, "%s(%d) flag = %x allocator->capability = %x", @@ -3475,7 +3582,7 @@ gckOS_MapPagesEx( { platform->ops->getPolicyID(platform, Type, &policyID, &axiConfig); - gcmkBUG_ON(policyID > 0x1F, __FUNCTION__, __LINE__); + gcmkBUG_ON(policyID > 0x1F); /* ID[3:0] is used in STLB. */ policyID &= 0xF; @@ -3498,7 +3605,7 @@ gckOS_MapPagesEx( if (policyID) { /* AxUSER must not used for address currently. */ - gcmkBUG_ON((phys >> 32) & 0xF, __FUNCTION__, __LINE__); + gcmkBUG_ON((phys >> 32) & 0xF); /* Merge policyID to AxUSER[7:4].*/ phys |= ((gctPHYS_ADDR_T)policyID << 36); @@ -3507,6 +3614,9 @@ gckOS_MapPagesEx( #ifdef CONFIG_IOMMU_SUPPORT if (Os->iommu) { + /* remove LSB. */ + phys &= PAGE_MASK; + gcmkTRACE_ZONE( gcvLEVEL_INFO, gcvZONE_OS, "%s(%d): Setup mapping in IOMMU %x => %x", @@ -3521,6 +3631,8 @@ gckOS_MapPagesEx( else #endif { + /* remove LSB. */ + phys &= ~(4096ul - 1); #if gcdENABLE_VG if (Core == gcvCORE_VG) @@ -3656,6 +3768,7 @@ gckOS_UnlockPages( { allocator->ops->UnmapUser( allocator, + mdl, mdlMap->vmaAddr, mdl->numPages * PAGE_SIZE); @@ -3884,7 +3997,7 @@ gckOS_GetKernelLogicalEx( case gcvPOOL_SYSTEM: /* System memory. */ - logical = device->contiguousBase; + logical = device->contiguousLogical; break; default: @@ -4561,11 +4674,9 @@ gckOS_CacheClean( #endif #elif defined(CONFIG_MIPS) - dma_cache_wback((unsigned long) Logical, Bytes); - #elif defined(CONFIG_PPC) - + flush_dcache_range((unsigned long)Logical, (unsigned long)Logical + Bytes); #else dma_sync_single_for_device( gcvNULL, @@ -4665,6 +4776,7 @@ gckOS_CacheInvalidate( #elif defined(CONFIG_MIPS) dma_cache_inv((unsigned long) Logical, Bytes); #elif defined(CONFIG_PPC) + flush_dcache_range((unsigned long)Logical, (unsigned long)Logical + Bytes); #else dma_sync_single_for_device( gcvNULL, @@ -4763,6 +4875,9 @@ gckOS_CacheFlush( #elif defined(CONFIG_MIPS) dma_cache_wback_inv((unsigned long) Logical, Bytes); #elif defined(CONFIG_PPC) + flush_dcache_range((unsigned long)Logical, (unsigned long)Logical + Bytes); +#elif defined(CONFIG_X86) + wbinvd_on_all_cpus(); #else dma_sync_single_for_device( gcvNULL, @@ -5665,8 +5780,12 @@ gckOS_CreateSignal( /* Save the process ID. */ signal->process = (gctHANDLE)(gctUINTPTR_T) _GetProcessID(); + + signal->done = 0; + init_waitqueue_head(&signal->wait); + spin_lock_init(&signal->lock); signal->manualReset = ManualReset; - init_completion(&signal->obj); + atomic_set(&signal->ref, 1); #if gcdANDROID_NATIVE_FENCE_SYNC @@ -5792,7 +5911,6 @@ gckOS_Signal( { gceSTATUS status; gcsSIGNAL_PTR signal; - gctBOOL acquired = gcvFALSE; #if gcdANDROID_NATIVE_FENCE_SYNC #if LINUX_VERSION_CODE < KERNEL_VERSION(4,9,0) struct sync_timeline * timeline = gcvNULL; @@ -5808,16 +5926,37 @@ gckOS_Signal( gcmkVERIFY_ARGUMENT(Signal != gcvNULL); mutex_lock(&Os->signalMutex); - acquired = gcvTRUE; - gcmkONERROR(_QueryIntegerId(&Os->signalDB, (gctUINT32)(gctUINTPTR_T)Signal, (gctPOINTER)&signal)); + status = _QueryIntegerId(&Os->signalDB, + (gctUINT32)(gctUINTPTR_T)Signal, + (gctPOINTER)&signal); + + if (gcmIS_ERROR(status)) + { + mutex_unlock(&Os->signalMutex); + gcmkONERROR(status); + } + + /* + * Signal saved in event is not referenced. Inc reference here to avoid + * concurrent issue: signaling the signal while another thread is destroying + * it. + */ + atomic_inc(&signal->ref); + + mutex_unlock(&Os->signalMutex); + + gcmkONERROR(status); gcmkASSERT(signal->id == (gctUINT32)(gctUINTPTR_T)Signal); + spin_lock(&signal->lock); + if (State) { - /* Set the event to a signaled state. */ - complete(&signal->obj); + signal->done = 1; + + wake_up(&signal->wait); #if gcdANDROID_NATIVE_FENCE_SYNC #if LINUX_VERSION_CODE < KERNEL_VERSION(4,9,0) @@ -5830,16 +5969,10 @@ gckOS_Signal( } else { - /* Set the event to an unsignaled state. */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0) - reinit_completion(&signal->obj); -#else - INIT_COMPLETION(signal->obj); -#endif + signal->done = 0; } - mutex_unlock(&Os->signalMutex); - acquired = gcvFALSE; + spin_unlock(&signal->lock); #if gcdANDROID_NATIVE_FENCE_SYNC #if LINUX_VERSION_CODE < KERNEL_VERSION(4,9,0) @@ -5857,17 +5990,23 @@ gckOS_Signal( # endif #endif + mutex_lock(&Os->signalMutex); + + if (atomic_dec_and_test(&signal->ref)) + { + gcmkVERIFY_OK(_DestroyIntegerId(&Os->signalDB, signal->id)); + + /* Free the sgianl. */ + kfree(signal); + } + + mutex_unlock(&Os->signalMutex); + /* Success. */ gcmkFOOTER_NO(); return gcvSTATUS_OK; OnError: - if (acquired) - { - /* Release the mutex. */ - mutex_unlock(&Os->signalMutex); - } - gcmkFOOTER(); return status; } @@ -6002,8 +6141,9 @@ gckOS_WaitSignal( IN gctUINT32 Wait ) { - gceSTATUS status = gcvSTATUS_OK; + gceSTATUS status; gcsSIGNAL_PTR signal; + int done; gcmkHEADER_ARG("Os=0x%X Signal=0x%X Wait=0x%08X", Os, Signal, Wait); @@ -6015,21 +6155,28 @@ gckOS_WaitSignal( gcmkASSERT(signal->id == (gctUINT32)(gctUINTPTR_T)Signal); - might_sleep(); + spin_lock(&signal->lock); + done = signal->done; + spin_unlock(&signal->lock); -#ifdef gcdRT_KERNEL - raw_spin_lock_irq(&signal->obj.wait.lock); -#else - spin_lock_irq(&signal->obj.wait.lock); -#endif - if (signal->obj.done) + /* + * Do not need to lock below: + * 1. If signal already done, return immediately. + * 2. If signal not done, wait_event_xxx will handle correctly even read of + * signal->done is not atomic. + * + * Rest signal->done do not require lock either: + * No other thread can query/wait auto-reseted signal, because that is + * logic error. + */ + if (done) { + status = gcvSTATUS_OK; + if (!signal->manualReset) { - signal->obj.done = 0; + signal->done = 0; } - - status = gcvSTATUS_OK; } else if (Wait == 0) { @@ -6039,84 +6186,40 @@ gckOS_WaitSignal( { /* Convert wait to milliseconds. */ long timeout = (Wait == gcvINFINITE) - ? MAX_SCHEDULE_TIMEOUT - : msecs_to_jiffies(Wait); + ? MAX_SCHEDULE_TIMEOUT + : msecs_to_jiffies(Wait); -#ifdef gcdRT_KERNEL - DEFINE_SWAITER(wait); -#else - DECLARE_WAITQUEUE(wait, current); - wait.flags |= WQ_FLAG_EXCLUSIVE; -#endif + long ret; -#ifdef gcdRT_KERNEL -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,4,0) - __prepare_to_swait(&signal->obj.wait, &wait); -#else - swait_prepare_locked(&signal->obj.wait, &wait); -#endif -#else - __add_wait_queue_tail(&signal->obj.wait, &wait); -#endif - while (gcvTRUE) + if (Interruptable) { - if (Interruptable && signal_pending(current)) - { - /* Interrupt received. */ - status = gcvSTATUS_INTERRUPTED; - break; - } - - __set_current_state(TASK_INTERRUPTIBLE); -#ifdef gcdRT_KERNEL - raw_spin_unlock_irq(&signal->obj.wait.lock); -#else - spin_unlock_irq(&signal->obj.wait.lock); -#endif - timeout = schedule_timeout(timeout); -#ifdef gcdRT_KERNEL - raw_spin_lock_irq(&signal->obj.wait.lock); -#else - spin_lock_irq(&signal->obj.wait.lock); -#endif - if (signal->obj.done) - { - if (!signal->manualReset) - { - signal->obj.done = 0; - } + ret = wait_event_interruptible_timeout(signal->wait, signal->done, timeout); + } + else + { + ret = wait_event_timeout(signal->wait, signal->done, timeout); + } - status = gcvSTATUS_OK; - break; - } + if (likely(ret > 0)) + { + status = gcvSTATUS_OK; - if (timeout == 0) + if (!signal->manualReset) { - - status = gcvSTATUS_TIMEOUT; - break; + /* Auto reset. */ + signal->done = 0; } } - -#ifdef gcdRT_KERNEL -#if LINUX_VERSION_CODE > KERNEL_VERSION(4,4,0) - __finish_swait(&signal->obj.wait, &wait); -#else - swait_finish_locked(&signal->obj.wait, &wait); -#endif -#else - __remove_wait_queue(&signal->obj.wait, &wait); -#endif + else + { + status = (ret == -ERESTARTSYS) ? gcvSTATUS_INTERRUPTED + : gcvSTATUS_TIMEOUT; + } } -#ifdef gcdRT_KERNEL - raw_spin_unlock_irq(&signal->obj.wait.lock); -#else - spin_unlock_irq(&signal->obj.wait.lock); -#endif OnError: /* Return status. */ - gcmkFOOTER_ARG("Signal=0x%X status=%d", Signal, status); + gcmkFOOTER_ARG("Signal=0x%lX status=%d", Signal, status); return status; } @@ -6142,14 +6245,9 @@ _QuerySignal( if (gcmIS_SUCCESS(status)) { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0) - status = completion_done(&signal->obj) - ? gcvSTATUS_TRUE : gcvSTATUS_FALSE; -#else - spin_lock(&signal->obj.wait.lock); - status = signal->obj.done ? gcvSTATUS_TRUE : gcvSTATUS_FALSE; - spin_unlock(&signal->obj.wait.lock); -#endif + spin_lock(&signal->lock); + status = signal->done ? gcvSTATUS_TRUE : gcvSTATUS_FALSE; + spin_unlock(&signal->lock); } return status; @@ -7269,7 +7367,7 @@ gckOS_CreateNativeFence( if (!fence) { - gcmONERROR(gcvSTATUS_OUT_OF_MEMORY); + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); } /* Create sync_file. */ @@ -7277,7 +7375,7 @@ gckOS_CreateNativeFence( if (!sync) { - gcmONERROR(gcvSTATUS_OUT_OF_MEMORY); + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); } /* Get a unused fd. */ @@ -7285,7 +7383,7 @@ gckOS_CreateNativeFence( if (fd < 0) { - gcmONERROR(gcvSTATUS_OUT_OF_RESOURCES); + gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES); } fd_install(fd, sync->file); @@ -7335,7 +7433,7 @@ gckOS_WaitNativeFence( if (!fence) { - gcmONERROR(gcvSTATUS_GENERIC_IO); + gcmkONERROR(gcvSTATUS_GENERIC_IO); } if (fence_is_array(fence)) @@ -7448,7 +7546,7 @@ gckOS_AllocatePageArray( phys = (unsigned long)phys_addr; - table[offset] = phys; + table[offset] = phys & PAGE_MASK; offset += 1; } @@ -7605,7 +7703,7 @@ gckOS_QueryOption( } else if (!strcmp(Option, "contiguousBase")) { - *Value = device->requestedContiguousBase; + *Value = (gctUINT32)device->contiguousBase; return gcvSTATUS_OK; } else if (!strcmp(Option, "recovery")) @@ -7625,7 +7723,11 @@ gckOS_QueryOption( } else if (!strcmp(Option, "TA")) { +#if USE_LINUX_PCIE *Value = 0; +#else + *Value = 0; +#endif return gcvSTATUS_OK; } else if (!strcmp(Option, "gpuProfiler")) @@ -7673,7 +7775,6 @@ gckOS_WrapMemory( gceSTATUS status = gcvSTATUS_OUT_OF_MEMORY; gckALLOCATOR allocator; gcsATTACH_DESC desc; - gctUINT32 flag; gcmkHEADER_ARG("Os=0x%X ", Os); @@ -7687,31 +7788,43 @@ gckOS_WrapMemory( gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); } - desc.handle = Desc->handle; - desc.memory = gcmUINT64_TO_PTR(Desc->logical); - desc.physical = Desc->physical; - desc.size = Desc->size; - flag = Desc->flag; - - desc.info = Desc->externalMemoryInfo; + if (Desc->flag & gcvALLOC_FLAG_DMABUF) + { + desc.dmaBuf.fd = (gctINT) Desc->handle; + } + else if (Desc->flag & gcvALLOC_FLAG_USERMEMORY) + { + desc.userMem.memory = gcmUINT64_TO_PTR(Desc->logical); + desc.userMem.physical = Desc->physical; + desc.userMem.size = Desc->size; + } + else if (Desc->flag & gcvALLOC_FLAG_EXTERNAL_MEMORY) + { + desc.externalMem.info = Desc->externalMemoryInfo; + } + else + { + gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); + } /* Walk all allocators. */ - list_for_each_entry(allocator, &Os->allocatorList, head) + list_for_each_entry(allocator, &Os->allocatorList, link) { gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_OS, "%s(%d) Flag = %x allocator->capability = %x", - __FUNCTION__, __LINE__, flag, allocator->capability); + __FUNCTION__, __LINE__, Desc->flag, allocator->capability); - if ((flag & allocator->capability) != flag) + if ((Desc->flag & allocator->capability) != Desc->flag) { status = gcvSTATUS_NOT_SUPPORTED; continue; } - if (flag == gcvALLOC_FLAG_EXTERNAL_MEMORY) + if (Desc->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)) + if (!strncmp(Desc->externalMemoryInfo.allocatorName, + allocator->name, gcdEXTERNAL_MEMORY_NAME_MAX)) { status = gcvSTATUS_NOT_SUPPORTED; continue; 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 f8a1e31bbb65..1d2773893390 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 @@ -56,6 +56,10 @@ #ifndef _gc_hal_kernel_platform_h_ #define _gc_hal_kernel_platform_h_ #include +#include +#if USE_LINUX_PCIE +#include +#endif typedef struct _gcsMODULE_PARAMETERS { @@ -93,43 +97,10 @@ typedef struct _gcsMODULE_PARAMETERS } gcsMODULE_PARAMETERS; -typedef struct _gcsPLATFORM * gckPLATFORM; +typedef struct soc_platform gcsPLATFORM; -typedef struct _gcsPLATFORM_OPERATIONS +typedef struct soc_platform_ops { - /******************************************************************************* - ** - ** needAddDevice - ** - ** Determine whether platform_device is created by initialization code. - ** If platform_device is created by BSP, return gcvFLASE here. - */ - gctBOOL - (*needAddDevice)( - IN gckPLATFORM Platform - ); - - /******************************************************************************* - ** - ** registerDevice - ** - ** Determine whether platform device need to be registered - */ - gceSTATUS - (*registerDevice)( - IN gckPLATFORM Platform - ); - - /******************************************************************************* - ** - ** runRegisterDevice - ** - ** Unregister platform device - */ - gceSTATUS - (*unRegisterDevice)( - IN gckPLATFORM Platform - ); /******************************************************************************* ** @@ -140,21 +111,10 @@ typedef struct _gcsPLATFORM_OPERATIONS */ gceSTATUS (*adjustParam)( - IN gckPLATFORM Platform, + IN gcsPLATFORM * Platform, OUT gcsMODULE_PARAMETERS *Args ); - /******************************************************************************* - ** - ** adjustDriver - ** - ** Override content of platform_driver which will be registered. - */ - gceSTATUS - (*adjustDriver)( - IN gckPLATFORM Platform - ); - /******************************************************************************* ** ** getPower @@ -163,7 +123,7 @@ typedef struct _gcsPLATFORM_OPERATIONS */ gceSTATUS (*getPower)( - IN gckPLATFORM Platform + IN gcsPLATFORM * Platform ); /******************************************************************************* @@ -174,29 +134,7 @@ typedef struct _gcsPLATFORM_OPERATIONS */ gceSTATUS (*putPower)( - IN gckPLATFORM Platform - ); - - /******************************************************************************* - ** - ** allocPriv - ** - ** Construct platform private data. - */ - gceSTATUS - (*allocPriv)( - IN gckPLATFORM Platform - ); - - /******************************************************************************* - ** - ** freePriv - ** - ** free platform private data. - */ - gceSTATUS - (*freePriv)( - IN gckPLATFORM Platform + IN gcsPLATFORM * Platform ); /******************************************************************************* @@ -215,7 +153,7 @@ typedef struct _gcsPLATFORM_OPERATIONS */ gceSTATUS (*setPower)( - IN gckPLATFORM Platform, + IN gcsPLATFORM * Platform, IN gceCORE GPU, IN gctBOOL Enable ); @@ -236,7 +174,7 @@ typedef struct _gcsPLATFORM_OPERATIONS */ gceSTATUS (*setClock)( - IN gckPLATFORM Platform, + IN gcsPLATFORM * Platform, IN gceCORE GPU, IN gctBOOL Enable ); @@ -254,7 +192,7 @@ typedef struct _gcsPLATFORM_OPERATIONS */ gceSTATUS (*reset)( - IN gckPLATFORM Platform, + IN gcsPLATFORM * Platform, IN gceCORE GPU ); @@ -267,7 +205,7 @@ typedef struct _gcsPLATFORM_OPERATIONS */ gceSTATUS (*getGPUPhysical)( - IN gckPLATFORM Platform, + IN gcsPLATFORM * Platform, IN gctPHYS_ADDR_T CPUPhysical, OUT gctPHYS_ADDR_T * GPUPhysical ); @@ -281,7 +219,7 @@ typedef struct _gcsPLATFORM_OPERATIONS */ gceSTATUS (*getCPUPhysical)( - IN gckPLATFORM Platform, + IN gcsPLATFORM * Platform, IN gctUINT32 GPUPhysical, OUT gctPHYS_ADDR_T * CPUPhysical ); @@ -305,7 +243,7 @@ typedef struct _gcsPLATFORM_OPERATIONS */ gceSTATUS (*shrinkMemory)( - IN gckPLATFORM Platform + IN gcsPLATFORM * Platform ); /******************************************************************************* @@ -316,7 +254,7 @@ typedef struct _gcsPLATFORM_OPERATIONS */ gceSTATUS (*cache)( - IN gckPLATFORM Platform, + IN gcsPLATFORM * Platform, IN gctUINT32 ProcessID, IN gctPHYS_ADDR Handle, IN gctUINT32 Physical, @@ -325,21 +263,6 @@ typedef struct _gcsPLATFORM_OPERATIONS IN gceCACHEOPERATION Operation ); - /******************************************************************************* - ** - ** name - ** - ** Get name of platform code. - ** - ** There is a helper macro gcmkPLATFORM_Name which defines a default callback - ** function _Name() which uses code path as name. - */ - gceSTATUS - (*name)( - IN gckPLATFORM Platform, - IN gctCONST_STRING * Name - ); - /******************************************************************************* ** ** getPolicyID @@ -348,7 +271,7 @@ typedef struct _gcsPLATFORM_OPERATIONS */ gceSTATUS (*getPolicyID)( - IN gckPLATFORM Platform, + IN gcsPLATFORM * Platform, IN gceSURF_TYPE Type, OUT gctUINT32_PTR PolicyID, OUT gctUINT32_PTR AXIConfig @@ -356,31 +279,25 @@ typedef struct _gcsPLATFORM_OPERATIONS } gcsPLATFORM_OPERATIONS; -typedef struct _gcsPLATFORM +struct soc_platform { +#if USE_LINUX_PCIE + struct pci_dev* device; + struct pci_driver* driver; +#else struct platform_device* device; struct platform_driver* driver; +#endif + const char *name; gcsPLATFORM_OPERATIONS* ops; +}; - void* priv; -} -gcsPLATFORM; - -void -gckPLATFORM_QueryOperations( - IN gcsPLATFORM_OPERATIONS ** Operations - ); - -#define gcmkPLATFROM_Name \ -static gceSTATUS \ -_Name( \ - IN gckPLATFORM Platform, \ - IN gctCONST_STRING * Name \ - ) \ -{ \ - * Name = __FILE__; \ - return gcvSTATUS_OK; \ -} \ +#if USE_LINUX_PCIE +int soc_platform_init(struct pci_driver *pdrv, gcsPLATFORM **platform); +#else +int soc_platform_init(struct platform_driver *pdrv, gcsPLATFORM **platform); +#endif +int soc_platform_terminate(gcsPLATFORM *platform); #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 66da1dcf3a6e..0d56683c39c9 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 @@ -340,28 +340,20 @@ struct fence * viv_fence_create(struct viv_sync_timeline *timeline, * Reference fence in signal. * Be aware of recursive reference!! */ -#ifdef gcdRT_KERNEL - raw_spin_lock_irq(&signal->obj.wait.lock); -#else - spin_lock_irq(&signal->obj.wait.lock); -#endif + spin_lock(&signal->lock); if (signal->fence) { old_fence = signal->fence; signal->fence = NULL; } -#ifdef gcdRT_KERNEL - raw_spin_unlock_irq(&signal->obj.wait.lock); -#else - spin_unlock_irq(&signal->obj.wait.lock); -#endif - - if (!completion_done(&signal->obj)) { + if (!signal->done) { signal->fence = (struct fence*)fence; fence_get((struct fence*)fence); } + spin_unlock(&signal->lock); + if (old_fence) fence_put(old_fence); diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/default/gc_hal_kernel_platform_default.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/default/gc_hal_kernel_platform_default.c index 8d1a85447a72..882cd75bf600 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/default/gc_hal_kernel_platform_default.c +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/default/gc_hal_kernel_platform_default.c @@ -56,26 +56,91 @@ #include "gc_hal_kernel_linux.h" #include "gc_hal_kernel_platform.h" -gctBOOL -_NeedAddDevice( - IN gckPLATFORM Platform + +gceSTATUS +_AdjustParam( + IN gcsPLATFORM *Platform, + OUT gcsMODULE_PARAMETERS *Args ) { - return gcvTRUE; +#if USE_LINUX_PCIE + struct pci_dev *pdev = Platform->device; + unsigned char irqline = pdev->irq; + + if ((Args->irqLine2D != -1) && (Args->irqLine2D != irqline)) + { + Args->irqLine2D = irqline; + } + if ((Args->irqLine != -1) && (Args->irqLine != irqline)) + { + Args->irqLine = irqline; + } +#endif + return gcvSTATUS_OK; } -gcmkPLATFROM_Name +static struct soc_platform_ops default_ops = +{ + .adjustParam = _AdjustParam, +}; -gcsPLATFORM_OPERATIONS platformOperations = +static struct soc_platform default_platform = { - .needAddDevice = _NeedAddDevice, - .name = _Name, + .name = __FILE__, + .ops = &default_ops, }; -void -gckPLATFORM_QueryOperations( - IN gcsPLATFORM_OPERATIONS ** Operations - ) +#if USE_LINUX_PCIE + +int soc_platform_init(struct pci_driver *pdrv, + struct soc_platform **platform) +{ + *platform = &default_platform; + return 0; +} + +int soc_platform_terminate(struct soc_platform *platform) +{ + return 0; +} + +#else +static struct platform_device *default_dev; + +int soc_platform_init(struct platform_driver *pdrv, + struct soc_platform **platform) { - *Operations = &platformOperations; + int ret; + default_dev = platform_device_alloc(pdrv->driver.name, -1); + + if (!default_dev) { + printk(KERN_ERR "galcore: platform_device_alloc failed.\n"); + return -ENOMEM; + } + + /* Add device */ + ret = platform_device_add(default_dev); + if (ret) { + printk(KERN_ERR "galcore: platform_device_add failed.\n"); + goto put_dev; + } + + *platform = &default_platform; + return 0; + +put_dev: + platform_device_put(default_dev); + + return ret; +} + +int soc_platform_terminate(struct soc_platform *platform) +{ + if (default_dev) { + platform_device_unregister(default_dev); + default_dev = NULL; + } + + return 0; } +#endif diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6.c index 7db5f4667bd7..ee7f0a0654be 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6.c +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6.c @@ -58,69 +58,68 @@ #include "gc_hal_kernel_device.h" #include "gc_hal_driver.h" #include + #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) -#include -#include -#include +# include +# include +# include #endif #if USE_PLATFORM_DRIVER # include #endif -#include #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,9,0)) || defined(IMX8_SCU_CONTROL) -#define IMX_GPU_SUBSYSTEM 1 -#else -#define IMX_GPU_SUBSYSTEM 0 +# define IMX_GPU_SUBSYSTEM 1 +# include #endif #if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) -#include +# include #else -#include +# include #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0) -#include -#elif LINUX_VERSION_CODE < KERNEL_VERSION(3, 14, 29) -#include -#include -#else +# include +# elif LINUX_VERSION_CODE < KERNEL_VERSION(3, 14, 29) +# include +# include +# else #if !defined(IMX8_SCU_CONTROL) -#include -#endif -#include -#endif +# include +# endif +# include +# endif #endif #include #if defined(IMX8_SCU_CONTROL) -#include +# include static sc_ipc_t gpu_ipcHandle; #endif #if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) -#include +# include #endif -#include +#include #include #ifdef CONFIG_DEVICE_THERMAL #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) -#include -#define REG_THERMAL_NOTIFIER(a) register_devfreq_cooling_notifier(a); -#define UNREG_THERMAL_NOTIFIER(a) unregister_devfreq_cooling_notifier(a); -#else +# include +# define REG_THERMAL_NOTIFIER(a) register_devfreq_cooling_notifier(a); +# define UNREG_THERMAL_NOTIFIER(a) unregister_devfreq_cooling_notifier(a); +# else extern int register_thermal_notifier(struct notifier_block *nb); extern int unregister_thermal_notifier(struct notifier_block *nb); -#define REG_THERMAL_NOTIFIER(a) register_thermal_notifier(a); -#define UNREG_THERMAL_NOTIFIER(a) unregister_thermal_notifier(a); -#endif +# define REG_THERMAL_NOTIFIER(a) register_thermal_notifier(a); +# define UNREG_THERMAL_NOTIFIER(a) unregister_thermal_notifier(a); +# endif #endif #ifndef gcdFSL_CONTIGUOUS_SIZE -#define gcdFSL_CONTIGUOUS_SIZE (4 << 20) +# define gcdFSL_CONTIGUOUS_SIZE (4 << 20) #endif static int initgpu3DMinClock = 1; @@ -129,116 +128,99 @@ module_param(initgpu3DMinClock, int, 0644); struct platform_device *pdevice; #ifdef CONFIG_GPU_LOW_MEMORY_KILLER -# include -# include -# include -# include -# include +# include +# include +# include +# include +# include -struct task_struct *lowmem_deathpending; +static unsigned long timeout; +struct task_struct *almostfail; 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, -}; - -static int -task_notify_func(struct notifier_block *self, unsigned long val, void *data) +notif_func(struct notifier_block *self, unsigned long val, void *data) { struct task_struct *task = data; - if (task == lowmem_deathpending) - lowmem_deathpending = NULL; + if (task == almostfail) + almostfail = NULL; return NOTIFY_DONE; } -extern struct task_struct *lowmem_deathpending; -static unsigned long lowmem_deathpending_timeout; +static struct notifier_block task_nb = { + .notifier_call = notif_func, +}; -static int force_contiguous_lowmem_shrink(IN gckKERNEL Kernel) +static int force_shrink_mem(IN gckKERNEL Kernel) { - struct task_struct *p; + struct task_struct *p = NULL; 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)) + int cur_size = 0; + int set_size = 0; + int oom_val = 0; + int mem_adj = 0; + int retVal = -1; + + if (almostfail && time_before_eq(jiffies, timeout)) return 0; - selected_oom_adj = min_adj; - rcu_read_lock(); + rcu_read_lock(); + for_each_process(p) { + gcuDATABASE_INFO info; struct mm_struct *mm; struct signal_struct *sig; - gcuDATABASE_INFO info; - int oom_adj; + + cur_size = 0; task_lock(p); - mm = p->mm; sig = p->signal; - if (!mm || !sig) { + mm = p->mm; + if (!sig || !mm) { task_unlock(p); continue; } - oom_adj = sig->oom_score_adj; - if (oom_adj < min_adj) { + oom_val = sig->oom_score_adj; + if (oom_val < 0) { task_unlock(p); continue; } - - tasksize = 0; task_unlock(p); - rcu_read_unlock(); + rcu_read_unlock(); if (gckKERNEL_QueryProcessDB(Kernel, p->pid, gcvFALSE, gcvDB_VIDEO_MEMORY, &info) == gcvSTATUS_OK){ - tasksize += info.counters.bytes / PAGE_SIZE; + cur_size += info.counters.bytes / PAGE_SIZE; } if (gckKERNEL_QueryProcessDB(Kernel, p->pid, gcvFALSE, gcvDB_CONTIGUOUS, &info) == gcvSTATUS_OK){ - tasksize += info.counters.bytes / PAGE_SIZE; + cur_size += info.counters.bytes / PAGE_SIZE; } + rcu_read_lock(); - rcu_read_lock(); - - if (tasksize <= 0) - continue; + if (cur_size <= 0) continue; - gckOS_Print(" pid %d (%s), adj %d, size %d \n", p->pid, p->comm, oom_adj, tasksize); + printk(" pid %d (%s), adj %d, size %d\n", p->pid, p->comm, oom_val, cur_size); if (selected) { - if (oom_adj < selected_oom_adj) - continue; - if (oom_adj == selected_oom_adj && - tasksize <= selected_tasksize) - continue; + if ((oom_val < mem_adj) || (oom_val == mem_adj && cur_size <= set_size)) continue; } + set_size = cur_size; + mem_adj = oom_val; selected = p; - selected_tasksize = tasksize; - selected_oom_adj = oom_adj; } - if (selected && selected_oom_adj > 0) { - gckOS_Print(" 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; + + if (selected && mem_adj > 0) { + printk(" send sigkill to %d (%s), adj %d, size %d\n", + selected->pid, selected->comm, mem_adj, set_size); + almostfail = selected; + timeout = jiffies + HZ; force_sig(SIGKILL, selected); - ret = 0; + retVal = 0; } - rcu_read_unlock(); - return ret; + + rcu_read_unlock(); + + return retVal; } extern gckKERNEL @@ -246,9 +228,9 @@ _GetValidKernel( gckGALDEVICE Device ); -gceSTATUS +static gceSTATUS _ShrinkMemory( - IN gckPLATFORM Platform + IN gcsPLATFORM * Platform ) { struct platform_device *pdev; @@ -264,12 +246,12 @@ _ShrinkMemory( if (kernel != gcvNULL) { - if (force_contiguous_lowmem_shrink(kernel) != 0) + if (force_shrink_mem(kernel) != 0) status = gcvSTATUS_OUT_OF_MEMORY; } else { - gcmkPRINT("%s(%d) can't find kernel! ", __FUNCTION__, __LINE__); + printk("%s: can't find kernel!\n", __FUNCTION__); } return status; @@ -308,18 +290,19 @@ static int thermal_hot_pm_notify(struct notifier_block *nb, unsigned long event, gckHARDWARE_GetFscaleValue(hardware,&orgFscale,&minFscale, &maxFscale); gckHARDWARE_SetFscaleValue(hardware, minFscale); bAlreadyTooHot = gcvTRUE; - gckOS_Print("System is too hot. GPU3D will work at %d/64 clock.\n", minFscale); + printk("System is too hot. GPU3D will work at %d/64 clock.\n", minFscale); } else if (!event && bAlreadyTooHot) { gckHARDWARE_SetFscaleValue(hardware, orgFscale); - gckOS_Print("Hot alarm is canceled. GPU3D clock will return to %d/64\n", orgFscale); + printk("Hot alarm is canceled. GPU3D clock will return to %d/64\n", orgFscale); bAlreadyTooHot = gcvFALSE; } return NOTIFY_OK; } -static struct notifier_block thermal_hot_pm_notifier = { +static struct notifier_block thermal_hot_pm_notifier = +{ .notifier_call = thermal_hot_pm_notify, - }; +}; static ssize_t show_gpu3DMinClock(struct device_driver *dev, char *buf) { @@ -327,11 +310,13 @@ static ssize_t show_gpu3DMinClock(struct device_driver *dev, char *buf) gckGALDEVICE galDevice; galDevice = platform_get_drvdata(pdevice); - if(galDevice->kernels[gcvCORE_MAJOR]) + + if (galDevice->kernels[gcvCORE_MAJOR]) { gckHARDWARE_GetFscaleValue(galDevice->kernels[gcvCORE_MAJOR]->hardware, ¤tf, &minf, &maxf); } + snprintf(buf, PAGE_SIZE, "%d\n", minf); return strlen(buf); } @@ -344,9 +329,11 @@ static ssize_t update_gpu3DMinClock(struct device_driver *dev, const char *buf, gckGALDEVICE galDevice; galDevice = platform_get_drvdata(pdevice); - if(galDevice->kernels[gcvCORE_MAJOR]) + + if (galDevice->kernels[gcvCORE_MAJOR]) { fields = sscanf(buf, "%d", &MinFscaleValue); + if (fields < 1) return -EINVAL; @@ -359,12 +346,9 @@ static ssize_t update_gpu3DMinClock(struct device_driver *dev, const char *buf, static DRIVER_ATTR(gpu3DMinClock, S_IRUGO | S_IWUSR, show_gpu3DMinClock, update_gpu3DMinClock); #endif - - - #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0) static const struct of_device_id mxs_gpu_dt_ids[] = { -#if IMX_GPU_SUBSYSTEM +#ifdef IMX_GPU_SUBSYSTEM { .compatible = "fsl,imx8-gpu-ss", }, #endif { .compatible = "fsl,imx6q-gpu", }, /*Backward Compatiblity */ @@ -373,25 +357,26 @@ static const struct of_device_id mxs_gpu_dt_ids[] = { MODULE_DEVICE_TABLE(of, mxs_gpu_dt_ids); #endif -struct gpu_clk { - struct clk *clk_core; - struct clk *clk_shader; - struct clk *clk_axi; - struct clk *clk_ahb; +struct gpu_clk +{ + struct clk *clk_core; + struct clk *clk_shader; + struct clk *clk_axi; + struct clk *clk_ahb; }; -struct imx_priv { - - struct gpu_clk imx_gpu_clks[gcdMAX_GPU_COUNT]; +struct imx_priv +{ + struct gpu_clk imx_gpu_clks[gcdMAX_GPU_COUNT]; #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.*/ - struct regulator *gpu_regulator; -#endif + struct regulator *gpu_regulator; +# endif #endif - /*Run time pm*/ - struct device *pmdev[gcdMAX_GPU_COUNT]; + /*Run time pm*/ + struct device *pmdev[gcdMAX_GPU_COUNT]; #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) struct reset_control *rstc[gcdMAX_GPU_COUNT]; @@ -406,82 +391,240 @@ struct imx_priv { static struct imx_priv imxPriv; -#if IMX_GPU_SUBSYSTEM -static int gpu_device_bind(struct device *dev, struct device *master, - void *data) +#ifdef IMX_GPU_SUBSYSTEM +static int use_imx_gpu_subsystem; + +/* sub device component ops. */ +static int mxc_gpu_sub_bind(struct device *dev, + struct device *master, void *data) { return 0; } -static void gpu_device_unbind(struct device *dev, struct device *master, - void *data) +static void mxc_gpu_sub_unbind(struct device *dev, struct device *master, + void *data) { } -static const struct component_ops gpu_ops = { - .bind = gpu_device_bind, - .unbind = gpu_device_unbind, +static const struct component_ops mxc_gpu_sub_ops = +{ + .bind = mxc_gpu_sub_bind, + .unbind = mxc_gpu_sub_unbind, }; -static const struct of_device_id gpu_match[] = { +/* sub device driver. */ +static const struct of_device_id gpu_sub_match[] = +{ { .compatible = "fsl,imx8-gpu"}, { /* sentinel */ } }; -static int gpu_device_probe(struct platform_device *pdev) +static int mxc_gpu_sub_probe(struct platform_device *pdev) { - return component_add(&pdev->dev, &gpu_ops); + return component_add(&pdev->dev, &mxc_gpu_sub_ops); } -static int gpu_device_remove(struct platform_device *pdev) +static int mxc_gpu_sub_remove(struct platform_device *pdev) { - component_del(&pdev->dev, &gpu_ops); + component_del(&pdev->dev, &mxc_gpu_sub_ops); return 0; } -struct platform_driver mxc_gpu_driver = { + +struct platform_driver mxc_gpu_sub_driver = +{ .driver = { - .name = "mxc-gpu", + .name = "mxc-gpu", .owner = THIS_MODULE, - .of_match_table = gpu_match, + .of_match_table = gpu_sub_match, }, - .probe = gpu_device_probe, - .remove = gpu_device_remove, + + .probe = mxc_gpu_sub_probe, + .remove = mxc_gpu_sub_remove, }; -gceSTATUS -gckPLATFORM_RegisterDevice( - IN gckPLATFORM Platform - ) + +static int register_imx_gpu_sub_driver(void) { - return platform_driver_register(&mxc_gpu_driver); + if (use_imx_gpu_subsystem) + return platform_driver_register(&mxc_gpu_sub_driver); + + return 0; } -gceSTATUS -gckPLATFORM_UnRegisterDevice( - IN gckPLATFORM Platform - ) +static void unregister_imx_gpu_sub_driver(void) { - platform_driver_unregister(&mxc_gpu_driver); - return gcvSTATUS_OK; + if (use_imx_gpu_subsystem) + platform_driver_unregister(&mxc_gpu_sub_driver); +} + +/* master device component ops. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0) +static int (* gpu_probe_real)(struct platform_device *pdev); +static int (* gpu_remove_real)(struct platform_device *pdev); +#else +static int __devinit (* gpu_probe_real)(struct platform_device *pdev); +static int __devexit (* gpu_remove_real)(struct platform_device *pdev); +#endif + +static int mxc_gpu_master_bind(struct device *dev) +{ + int ret; + + ret = component_bind_all(dev, 0); + if (ret < 0) + return ret; + + /* Call real probe. */ + ret = gpu_probe_real(to_platform_device(dev)); + if (!ret) + return 0; + + /* error. */ + component_unbind_all(dev, 0); + return ret; } -static int compare_of(struct device *dev, void *data) +static void mxc_gpu_master_unbind(struct device *dev) +{ + /* Call real remove. */ + gpu_remove_real(to_platform_device(dev)); + component_unbind_all(dev, 0); +} + +static const struct component_master_ops mxc_gpu_master_ops = +{ + .bind = mxc_gpu_master_bind, + .unbind = mxc_gpu_master_unbind, +}; + +static int compare_dev(struct device *dev, void *data) { struct device_node *np = data; return dev->of_node == np; } + +/* master device probe and remove. */ +static int mxc_gpu_master_probe(struct platform_device *pdev) +{ + struct component_match *match = NULL; + struct device_node * node = pdev->dev.of_node; + struct device_node *core_node; + int i = 0; + + while ((core_node = of_parse_phandle(node, "cores", i++)) != NULL) { + if (of_device_is_available(core_node)) + component_match_add(&pdev->dev, &match, compare_dev, core_node); + + of_node_put(core_node); + } + + return component_master_add_with_match(&pdev->dev, &mxc_gpu_master_ops, match); +} + +static int mxc_gpu_master_remove(struct platform_device *pdev) +{ + component_master_del(&pdev->dev, &mxc_gpu_master_ops); + + return 0; +} + +static int patch_param_imx8_subsystem(struct platform_device *pdev, + gcsMODULE_PARAMETERS *args) +{ + int i = 0; + struct resource* res; + struct device_node *node = pdev->dev.of_node; + struct device_node *core_node; + int core = gcvCORE_MAJOR; + + while ((core_node = of_parse_phandle(node, "cores", i++)) != NULL) { + struct platform_device *pdev_gpu; + int irqLine = -1; + + if (!of_device_is_available(core_node)) { + of_node_put(core_node); + continue; + } + + pdev_gpu = of_find_device_by_node(core_node); + + if (!pdev_gpu) + break; + + irqLine = platform_get_irq(pdev_gpu, 0); + + if (irqLine < 0) + break; + + res = platform_get_resource(pdev_gpu, IORESOURCE_MEM, 0); + + if (!res) + break; + + args->irqs[core] = irqLine; + args->registerBases[core] = res->start; + args->registerSizes[core] = res->end - res->start + 1; + + of_node_put(core_node); + ++core; + } + + if (core_node) + of_node_put(core_node); + + return 0; +} #endif -/*TODO: Fix */ -struct component_match *match = NULL; -gceSTATUS -gckPLATFORM_AdjustParam( - IN gckPLATFORM Platform, - OUT gcsMODULE_PARAMETERS *Args - ) +static int patch_param_imx6(struct platform_device *pdev, + gcsMODULE_PARAMETERS *args) { struct resource* res; - struct platform_device* pdev = Platform->device; + + res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "irq_3d"); + + if (res) + args->irqLine = res->start; + + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "iobase_3d"); + + if (res) { + args->registerMemBase = res->start; + args->registerMemSize = res->end - res->start + 1; + } + + res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "irq_2d"); + + if (res) + args->irqLine2D = res->start; + + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "iobase_2d"); + + if (res) { + args->registerMemBase2D = res->start; + args->registerMemSize2D = res->end - res->start + 1; + } + + res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "irq_vg"); + + if (res) + args->irqLineVG = res->start; + + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "iobase_vg"); + + if (res) { + args->registerMemBaseVG = res->start; + args->registerMemSizeVG = res->end - res->start + 1; + } + + return 0; +} + +static int patch_param(struct platform_device *pdev, + gcsMODULE_PARAMETERS *args) +{ + struct resource* res; + #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) #elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0) struct device_node *dn =pdev->dev.of_node; @@ -489,183 +632,109 @@ gckPLATFORM_AdjustParam( #else struct viv_gpu_platform_data *pdata; #endif -#if IMX_GPU_SUBSYSTEM - struct device_node *node =pdev->dev.of_node; - if (node && Platform->ops->registerDevice) { - int i=0; - struct device_node *core_node; - gctINT core = gcvCORE_MAJOR; - while ((core_node = of_parse_phandle(node, "cores", i++)) != NULL) { - struct platform_device *pdev_gpu; - gctINT irqLine = -1; - - if(!of_device_is_available(core_node)){ - of_node_put(core_node); - continue; - } - component_match_add(&pdev->dev, &match, compare_of, core_node); - pdev_gpu = of_find_device_by_node(core_node); - if (!pdev_gpu) { - break; - } - irqLine = platform_get_irq(pdev_gpu, 0); - if (irqLine < 0) { - break; - } - res = platform_get_resource(pdev_gpu, IORESOURCE_MEM, 0); - if (!res) { - break; - } + pdevice = pdev; - Args->irqs[core] = irqLine; - Args->registerBases[core] = res->start; - Args->registerSizes[core] = res->end - res->start + 1; - - of_node_put(core_node); - ++core; - } - if(core_node) { - of_node_put(core_node); - } - } +#ifdef IMX_GPU_SUBSYSTEM + if (pdev->dev.of_node && use_imx_gpu_subsystem) + patch_param_imx8_subsystem(pdev, args); else #endif - { - res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "irq_3d"); - if (res) - Args->irqLine = res->start; - - res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "iobase_3d"); - if (res) - { - Args->registerMemBase = res->start; - Args->registerMemSize = res->end - res->start + 1; - } - - res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "irq_2d"); - if (res) - Args->irqLine2D = res->start; - - res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "iobase_2d"); - if (res) - { - Args->registerMemBase2D = res->start; - Args->registerMemSize2D = res->end - res->start + 1; - } - - res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "irq_vg"); - if (res) - Args->irqLineVG = res->start; - - res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "iobase_vg"); - if (res) - { - Args->registerMemBaseVG = res->start; - Args->registerMemSizeVG = res->end - res->start + 1; - } - } + patch_param_imx6(pdev, args); res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "phys_baseaddr"); - if (res && !Args->baseAddress && !Args->physSize) - { - Args->baseAddress = res->start; - Args->physSize = res->end - res->start + 1; + + if (res && !args->baseAddress && !args->physSize) { + args->baseAddress = res->start; + args->physSize = res->end - res->start + 1; } #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "contiguous_mem"); - if (res) - { - if( Args->contiguousBase == 0 ) - Args->contiguousBase = res->start; - if( Args->contiguousSize == ~0U ) - Args->contiguousSize = res->end - res->start + 1; + + if (res) { + if (args->contiguousBase == 0) + args->contiguousBase = res->start; + + if (args->contiguousSize == ~0U) + args->contiguousSize = res->end - res->start + 1; } + #elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) - Args->contiguousBase = 0; + args->contiguousBase = 0; #elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0) - prop = of_get_property(dn, "contiguousbase", NULL); - if(prop) - Args->contiguousBase = *prop; - of_property_read_u32(dn,"contiguoussize", (u32 *)&contiguousSize); + prop = of_get_property(dn, "contiguousbase", NULL); + + if (prop) + args->contiguousBase = *prop; + + of_property_read_u32(dn,"contiguoussize", (u32 *)&contiguousSize); #else + pdata = pdev->dev.platform_data; + if (pdata) { - Args->contiguousBase = pdata->reserved_mem_base; - Args->contiguousSize = pdata->reserved_mem_size; - } + args->contiguousBase = pdata->reserved_mem_base; + args->contiguousSize = pdata->reserved_mem_size; + } + #endif - if (Args->contiguousSize == ~0U) - { - gckOS_Print("Warning: No contiguous memory is reserverd for gpu.!\n "); - gckOS_Print("Warning: Will use default value(%d) for the reserved memory!\n ",gcdFSL_CONTIGUOUS_SIZE); - Args->contiguousSize = gcdFSL_CONTIGUOUS_SIZE; + + if (args->contiguousSize == ~0U) { + printk("Warning: No contiguous memory is reserverd for gpu.!\n"); + printk("Warning: Will use default value(%d) for the reserved memory!\n", gcdFSL_CONTIGUOUS_SIZE); + + args->contiguousSize = gcdFSL_CONTIGUOUS_SIZE; } - Args->gpu3DMinClock = initgpu3DMinClock; + args->gpu3DMinClock = initgpu3DMinClock; - if(Args->physSize == 0) - { + if (args->physSize == 0) { #if defined(IMX8_PHYS_BASE) - Args->baseAddress = IMX8_PHYS_BASE; + args->baseAddress = IMX8_PHYS_BASE; #endif #if defined(IMX8_PHYS_SIZE) - Args->physSize = IMX8_PHYS_SIZE; + args->physSize = IMX8_PHYS_SIZE; #else - Args->physSize = 0x80000000; + args->physSize = 0x80000000; #endif } - return gcvSTATUS_OK; + return 0; } -gceSTATUS -_AllocPriv( - IN gckPLATFORM Platform - ) +int init_priv(void) { - Platform->priv = &imxPriv; - - gckOS_ZeroMemory(Platform->priv, sizeof(imxPriv)); + memset(&imxPriv, 0, sizeof(imxPriv)); #ifdef CONFIG_GPU_LOW_MEMORY_KILLER #if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0) task_free_register(&task_nb); -#else +# else task_handoff_register(&task_nb); -#endif +# endif #endif - return gcvSTATUS_OK; + return 0; } -gceSTATUS -_FreePriv( - IN gckPLATFORM Platform - ) +void +free_priv(void) { #ifdef CONFIG_GPU_LOW_MEMORY_KILLER #if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0) task_free_unregister(&task_nb); -#else +# else task_handoff_unregister(&task_nb); +# endif #endif -#endif - - return gcvSTATUS_OK; } -gceSTATUS -_SetClock( - IN gckPLATFORM Platform, - IN gceCORE GPU, - IN gctBOOL Enable - ); +static int set_clock(int gpu, int enable); #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) -static void imx6sx_optimize_qosc_for_GPU(IN gckPLATFORM Platform) +static void imx6sx_optimize_qosc_for_GPU(void) { struct device_node *np; void __iomem *src_base; @@ -676,257 +745,292 @@ static void imx6sx_optimize_qosc_for_GPU(IN gckPLATFORM Platform) src_base = of_iomap(np, 0); WARN_ON(!src_base); - _SetClock(Platform, gcvCORE_MAJOR, gcvTRUE); + + set_clock(gcvCORE_MAJOR, 1); + 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); + + set_clock(gcvCORE_MAJOR, 0); return; } #endif -gceSTATUS -_GetPower( - IN gckPLATFORM Platform - ) +#ifdef IMX_GPU_SUBSYSTEM +static inline int get_power_imx8_subsystem(struct device *pdev) { - struct device* pdev = &Platform->device->dev; - struct imx_priv *priv = Platform->priv; -#if IMX_GPU_SUBSYSTEM - struct device_node *node = pdev->of_node; -#endif + struct imx_priv *priv = &imxPriv; struct clk *clk_core = NULL; struct clk *clk_shader = NULL; struct clk *clk_axi = NULL; - struct clk *clk_ahb = NULL; - /*Initialize the clock structure*/ -#if IMX_GPU_SUBSYSTEM - if (node && Platform->ops->registerDevice) { - int i=0; - struct device_node *core_node; - gctINT core = gcvCORE_MAJOR; + /* Initialize the clock structure */ + int i = 0; + struct device_node *node = pdev->of_node; + struct device_node *core_node; + int core = gcvCORE_MAJOR; + #if defined(IMX8_SCU_CONTROL) - sc_err_t sciErr; - uint32_t mu_id; + 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_getMuID(&mu_id); + + if (sciErr != SC_ERR_NONE) { + printk("galcore; cannot obtain mu id\n"); + return -EINVAL; + } - 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; - }; + sciErr = sc_ipc_open(&gpu_ipcHandle, mu_id); + + if (sciErr != SC_ERR_NONE) { + printk("galcore: cannot open MU channel to SCU\n"); + return -EINVAL; + } #endif - while ((core_node = of_parse_phandle(node, "cores", i++)) != NULL) { - struct platform_device *pdev_gpu = NULL; - clk_shader = NULL; - clk_core = NULL; - clk_axi = NULL; - if(!of_device_is_available(core_node)){ - of_node_put(core_node); - continue; - } + while ((core_node = of_parse_phandle(node, "cores", i++)) != NULL) { + struct platform_device *pdev_gpu = NULL; + clk_shader = NULL; + clk_core = NULL; + clk_axi = NULL; - pdev_gpu = of_find_device_by_node(core_node); - if (!pdev_gpu) { - break; - } - clk_core = clk_get(&pdev_gpu->dev, "core"); - if (IS_ERR(clk_core)) { - gckOS_Print("galcore: clk_get clk_core failed\n"); - break; - } - clk_axi = clk_get(&pdev_gpu->dev, "bus"); - if (IS_ERR(clk_axi)) { - clk_axi = NULL; - } + if (!of_device_is_available(core_node)) { + of_node_put(core_node); + continue; + } - clk_shader = clk_get(&pdev_gpu->dev, "shader"); - if (IS_ERR(clk_shader)) { - gckOS_Print("galcore: clk_get clk_3d_shader failed\n"); - continue; - } + pdev_gpu = of_find_device_by_node(core_node); - priv->imx_gpu_clks[core].clk_shader = clk_shader; - priv->imx_gpu_clks[core].clk_core = clk_core; - priv->imx_gpu_clks[core].clk_axi = clk_axi; + if (!pdev_gpu) + break; -#if defined(IMX8_SCU_CONTROL) - if(of_property_read_u32(core_node, "fsl,sc_gpu_pid", &priv->sc_gpu_pid[core])){ - priv->sc_gpu_pid[core] = 0; - } -#endif + clk_core = clk_get(&pdev_gpu->dev, "core"); -#ifdef CONFIG_PM - pm_runtime_enable(&pdev_gpu->dev); - priv->pmdev[core] = &pdev_gpu->dev; -#endif - of_node_put(core_node); - core++; + if (IS_ERR(clk_core)) { + printk("galcore: clk_get clk_core failed\n"); + break; } - priv->gpu3dCount = core; - if(core_node) { - of_node_put(core_node); + clk_axi = clk_get(&pdev_gpu->dev, "bus"); + + if (IS_ERR(clk_axi)) + clk_axi = NULL; + + clk_shader = clk_get(&pdev_gpu->dev, "shader"); + + if (IS_ERR(clk_shader)) { + printk("galcore: clk_get clk_3d_shader failed\n"); + continue; + } + + priv->imx_gpu_clks[core].clk_shader = clk_shader; + priv->imx_gpu_clks[core].clk_core = clk_core; + priv->imx_gpu_clks[core].clk_axi = clk_axi; + +#if defined(IMX8_SCU_CONTROL) + if (of_property_read_u32(core_node, "fsl,sc_gpu_pid", &priv->sc_gpu_pid[core])) { + priv->sc_gpu_pid[core] = 0; } +#endif + +#ifdef CONFIG_PM + pm_runtime_get_noresume(&pdev_gpu->dev); + pm_runtime_set_active(&pdev_gpu->dev); + pm_runtime_enable(&pdev_gpu->dev); + pm_runtime_put_sync(&pdev_gpu->dev); + priv->pmdev[core] = &pdev_gpu->dev; +#endif + of_node_put(core_node); + core++; } - else + + priv->gpu3dCount = core; + + if (core_node) + of_node_put(core_node); + + return 0; +} #endif - { + +static inline int get_power_imx6(struct device *pdev) +{ + struct imx_priv *priv = &imxPriv; + struct clk *clk_core = NULL; + struct clk *clk_shader = NULL; + struct clk *clk_axi = NULL; + struct clk *clk_ahb = NULL; + #ifdef CONFIG_RESET_CONTROLLER #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) - struct reset_control *rstc; - rstc = devm_reset_control_get(pdev, "gpu3d"); - priv->rstc[gcvCORE_MAJOR] = IS_ERR(rstc) ? NULL : rstc; + struct reset_control *rstc; + + rstc = devm_reset_control_get(pdev, "gpu3d"); + priv->rstc[gcvCORE_MAJOR] = IS_ERR(rstc) ? NULL : rstc; #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,9,0) - rstc = devm_reset_control_get_shared(pdev, "gpu2d"); - priv->rstc[gcvCORE_2D] = IS_ERR(rstc) ? NULL : rstc; - rstc = devm_reset_control_get_shared(pdev, "gpuvg"); -#else - rstc = devm_reset_control_get(pdev, "gpu2d"); - priv->rstc[gcvCORE_2D] = IS_ERR(rstc) ? NULL : rstc; - rstc = devm_reset_control_get(pdev, "gpuvg"); -#endif - priv->rstc[gcvCORE_VG] = IS_ERR(rstc) ? NULL : rstc; -#endif + rstc = devm_reset_control_get_shared(pdev, "gpu2d"); + priv->rstc[gcvCORE_2D] = IS_ERR(rstc) ? NULL : rstc; + rstc = devm_reset_control_get_shared(pdev, "gpuvg"); +# else + rstc = devm_reset_control_get(pdev, "gpu2d"); + priv->rstc[gcvCORE_2D] = IS_ERR(rstc) ? NULL : rstc; + rstc = devm_reset_control_get(pdev, "gpuvg"); +# endif + 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) - /*get gpu regulator*/ - priv->gpu_regulator = regulator_get(pdev, "cpu_vddgpu"); -#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) - priv->gpu_regulator = devm_regulator_get(pdev, "pu"); -#endif + /* Get gpu regulator */ + priv->gpu_regulator = regulator_get(pdev, "cpu_vddgpu"); +# elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) + priv->gpu_regulator = devm_regulator_get(pdev, "pu"); +# endif + #if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) - if (IS_ERR(priv->gpu_regulator)) { - gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DRIVER, - "%s(%d): Failed to get gpu regulator \n", - __FUNCTION__, __LINE__); - return gcvSTATUS_NOT_FOUND; - } -#endif + if (IS_ERR(priv->gpu_regulator)) { + printk("%s: Failed to get gpu regulator\n", __FUNCTION__); + return -ENXIO; + } +# endif #endif - clk_core = clk_get(pdev, "gpu3d_clk"); - if (!IS_ERR(clk_core)) { - clk_axi = clk_get(pdev, "gpu3d_axi_clk"); - clk_shader = clk_get(pdev, "gpu3d_shader_clk"); - if (IS_ERR(clk_shader)) { - clk_put(clk_core); - clk_core = NULL; - clk_shader = NULL; - gckOS_Print("galcore: clk_get gpu3d_shader_clk failed, disable 3d!\n"); - } - clk_ahb = clk_get(pdev, "gpu3d_ahb_clk"); - if (IS_ERR(clk_ahb)) { - clk_ahb = NULL; - } - } else { + + clk_core = clk_get(pdev, "gpu3d_clk"); + + if (!IS_ERR(clk_core)) { + clk_axi = clk_get(pdev, "gpu3d_axi_clk"); + clk_shader = clk_get(pdev, "gpu3d_shader_clk"); + + if (IS_ERR(clk_shader)) { + clk_put(clk_core); clk_core = NULL; - gckOS_Print("galcore: clk_get gpu3d_clk failed, disable 3d!\n"); + clk_shader = NULL; + printk("galcore: clk_get gpu3d_shader_clk failed, disable 3d!\n"); } - priv->imx_gpu_clks[gcvCORE_MAJOR].clk_core = clk_core; - priv->imx_gpu_clks[gcvCORE_MAJOR].clk_shader = clk_shader; - priv->imx_gpu_clks[gcvCORE_MAJOR].clk_axi = clk_axi; - priv->imx_gpu_clks[gcvCORE_MAJOR].clk_ahb = clk_ahb; + clk_ahb = clk_get(pdev, "gpu3d_ahb_clk"); + if (IS_ERR(clk_ahb)) { + clk_ahb = NULL; + } + } else { + clk_core = NULL; + printk("galcore: clk_get gpu3d_clk failed, disable 3d!\n"); + } - clk_core = clk_get(pdev, "gpu2d_clk"); - if (IS_ERR(clk_core)) { - clk_core = NULL; - gckOS_Print("galcore: clk_get 2d core clock failed, disable 2d/vg!\n"); - } else { - clk_axi = clk_get(pdev, "gpu2d_axi_clk"); - if (IS_ERR(clk_axi)) { - clk_axi = NULL; - gckOS_Print("galcore: clk_get 2d axi clock failed, disable 2d\n"); - } + priv->imx_gpu_clks[gcvCORE_MAJOR].clk_core = clk_core; + priv->imx_gpu_clks[gcvCORE_MAJOR].clk_shader = clk_shader; + priv->imx_gpu_clks[gcvCORE_MAJOR].clk_axi = clk_axi; + priv->imx_gpu_clks[gcvCORE_MAJOR].clk_ahb = clk_ahb; - priv->imx_gpu_clks[gcvCORE_2D].clk_core = clk_core; - priv->imx_gpu_clks[gcvCORE_2D].clk_axi = clk_axi; + clk_core = clk_get(pdev, "gpu2d_clk"); - clk_axi = clk_get(pdev, "openvg_axi_clk"); - if (IS_ERR(clk_axi)) { - clk_axi = NULL; - gckOS_Print("galcore: clk_get vg clock failed, disable vg!\n"); - } + if (IS_ERR(clk_core)) { + clk_core = NULL; + printk("galcore: clk_get 2d core clock failed, disable 2d/vg!\n"); + } else { + clk_axi = clk_get(pdev, "gpu2d_axi_clk"); + if (IS_ERR(clk_axi)) { + clk_axi = NULL; + printk("galcore: clk_get 2d axi clock failed, disable 2d\n"); + } - priv->imx_gpu_clks[gcvCORE_VG].clk_core = clk_core; - priv->imx_gpu_clks[gcvCORE_VG].clk_axi = clk_axi; + priv->imx_gpu_clks[gcvCORE_2D].clk_core = clk_core; + priv->imx_gpu_clks[gcvCORE_2D].clk_axi = clk_axi; + + clk_axi = clk_get(pdev, "openvg_axi_clk"); + + if (IS_ERR(clk_axi)) { + clk_axi = NULL; + printk("galcore: clk_get vg clock failed, disable vg!\n"); } + priv->imx_gpu_clks[gcvCORE_VG].clk_core = clk_core; + priv->imx_gpu_clks[gcvCORE_VG].clk_axi = clk_axi; + } + #ifdef CONFIG_PM - pm_runtime_enable(pdev); - priv->pmdev[gcvCORE_MAJOR] = pdev; - priv->pmdev[gcvCORE_2D] = pdev; - priv->pmdev[gcvCORE_VG] = pdev; + pm_runtime_enable(pdev); + + priv->pmdev[gcvCORE_MAJOR] = pdev; + priv->pmdev[gcvCORE_2D] = pdev; + priv->pmdev[gcvCORE_VG] = pdev; #endif - } + + return 0; +} + +static inline int get_power(struct device *pdev) +{ + int ret; + + /*Initialize the clock structure*/ +#ifdef IMX_GPU_SUBSYSTEM + struct device_node *node = pdev->of_node; + + if (node && use_imx_gpu_subsystem) + ret = get_power_imx8_subsystem(pdev); + else +#endif + ret = get_power_imx6(pdev); + + if (ret) + return ret; #if gcdENABLE_FSCALE_VAL_ADJUST && (defined(CONFIG_DEVICE_THERMAL) || defined(CONFIG_DEVICE_THERMAL_MODULE)) - 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); - } + + ret = driver_create_file(pdev->driver, &driver_attr_gpu3DMinClock); + + if (ret) + dev_err(pdev, "create gpu3DMinClock attr failed (%d)\n", ret); #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) - imx6sx_optimize_qosc_for_GPU(Platform); + imx6sx_optimize_qosc_for_GPU(); #endif - return gcvSTATUS_OK; + return 0; } -gceSTATUS -_PutPower( - IN gckPLATFORM Platform - ) +static inline void put_power(void) { - int core=0; + int core = 0; struct gpu_clk *imx_clk = NULL; - struct imx_priv *priv = Platform->priv; + struct imx_priv *priv = &imxPriv; struct device *pmdev_last = NULL;/*legacy gpu device entry for imx6*/ struct clk *clk_core_last = NULL;/*vg has same core clk as 2d */ - for (core =0; core < gcdMAX_GPU_COUNT; core++) - { + for (core = 0; core < gcdMAX_GPU_COUNT; core++) { imx_clk = &priv->imx_gpu_clks[core]; - if(imx_clk->clk_core && imx_clk->clk_core != clk_core_last) { + if (imx_clk->clk_core && imx_clk->clk_core != clk_core_last) { clk_put(imx_clk->clk_core); clk_core_last = imx_clk->clk_core; imx_clk->clk_core = NULL; } - if(imx_clk->clk_shader) { + if (imx_clk->clk_shader) { clk_put(imx_clk->clk_shader); imx_clk->clk_shader = NULL; } - if(imx_clk->clk_axi) { + if (imx_clk->clk_axi) { clk_put(imx_clk->clk_axi); imx_clk->clk_axi = NULL; } - if(imx_clk->clk_ahb) { + if (imx_clk->clk_ahb) { clk_put(imx_clk->clk_ahb); imx_clk->clk_ahb = NULL; } #ifdef CONFIG_PM - if(priv->pmdev[core] && priv->pmdev[core] != pmdev_last){ + if (priv->pmdev[core] && priv->pmdev[core] != pmdev_last){ pm_runtime_disable(priv->pmdev[core]); pmdev_last = priv->pmdev[core]; } @@ -950,119 +1054,125 @@ _PutPower( if (gpu_ipcHandle) sc_ipc_close(gpu_ipcHandle); #endif - - return gcvSTATUS_OK; } -gceSTATUS -_SetPower( - IN gckPLATFORM Platform, - IN gceCORE GPU, - IN gctBOOL Enable - ) +static inline int set_power(int gpu, int enable) { #ifdef CONFIG_PM - struct imx_priv* priv = Platform->priv; + struct imx_priv* priv = &imxPriv; #endif + if (enable) { #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; -#endif -#endif + if (!IS_ERR(priv->gpu_regulator)) { + int ret = regulator_enable(priv->gpu_regulator); - if (Enable) - { -#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) - if(!IS_ERR(priv->gpu_regulator)) { - ret = regulator_enable(priv->gpu_regulator); - if (ret != 0) - gckOS_Print("%s(%d): fail to enable pu regulator %d!\n", - __FUNCTION__, __LINE__, ret); + if (ret) + printk("%s: fail to enable pu regulator %d!\n", __FUNCTION__, ret); } -#else +# else imx_gpc_power_up_pu(true); -#endif +# endif #endif #ifdef CONFIG_PM - pm_runtime_get_sync(priv->pmdev[GPU]); + pm_runtime_get_sync(priv->pmdev[gpu]); #endif #if defined(IMX8_SCU_CONTROL) - if(priv->sc_gpu_pid[GPU]) { - sc_err_t sciErr = sc_misc_set_control(gpu_ipcHandle, priv->sc_gpu_pid[GPU], SC_C_ID, GPU); + if (priv->sc_gpu_pid[gpu]) { + sc_err_t sciErr = sc_misc_set_control(gpu_ipcHandle, priv->sc_gpu_pid[gpu], SC_C_ID, gpu); if (sciErr != SC_ERR_NONE) - gckOS_Print("galcore: failed to set gpu id for 3d_%d\n", GPU); + printk("galcore: failed to set gpu id for 3d_%d\n", gpu); - if(priv->gpu3dCount > 1) { - sciErr = sc_misc_set_control(gpu_ipcHandle, priv->sc_gpu_pid[GPU], SC_C_SINGLE_MODE, 0); + if (priv->gpu3dCount > 1) { + sciErr = sc_misc_set_control(gpu_ipcHandle, priv->sc_gpu_pid[gpu], SC_C_SINGLE_MODE, 0); if (sciErr != SC_ERR_NONE) - gckOS_Print("galcore: failed to set gpu dual mode for 3d_%d\n", GPU); - } - else { - sciErr = sc_misc_set_control(gpu_ipcHandle, priv->sc_gpu_pid[GPU], SC_C_SINGLE_MODE, 1); + printk("galcore: failed to set gpu dual mode for 3d_%d\n", gpu); + } else { + sciErr = sc_misc_set_control(gpu_ipcHandle, priv->sc_gpu_pid[gpu], SC_C_SINGLE_MODE, 1); if (sciErr != SC_ERR_NONE) - gckOS_Print("galcore: failed to set gpu single mode for 3d_%d\n", GPU); + printk("galcore: failed to set gpu single mode for 3d_%d\n", gpu); } } #endif - } - else - { + } else { #ifdef CONFIG_PM - pm_runtime_put_sync(priv->pmdev[GPU]); + pm_runtime_put_sync(priv->pmdev[gpu]); #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) - if(!IS_ERR(priv->gpu_regulator)) + if (!IS_ERR(priv->gpu_regulator)) regulator_disable(priv->gpu_regulator); -#else +# else imx_gpc_power_up_pu(false); +# endif #endif -#endif - } - return gcvSTATUS_OK; + return 0; } -gceSTATUS -_SetClock( - IN gckPLATFORM Platform, - IN gceCORE GPU, - IN gctBOOL Enable - ) +int set_clock(int gpu, int enable) { - struct imx_priv* priv = Platform->priv; - struct clk *clk_core = priv->imx_gpu_clks[GPU].clk_core; - struct clk *clk_shader = priv->imx_gpu_clks[GPU].clk_shader; - struct clk *clk_axi = priv->imx_gpu_clks[GPU].clk_axi; - struct clk *clk_ahb = priv->imx_gpu_clks[GPU].clk_ahb; + struct imx_priv* priv = &imxPriv; + struct clk *clk_core = priv->imx_gpu_clks[gpu].clk_core; + struct clk *clk_shader = priv->imx_gpu_clks[gpu].clk_shader; + struct clk *clk_axi = priv->imx_gpu_clks[gpu].clk_axi; + struct clk *clk_ahb = priv->imx_gpu_clks[gpu].clk_ahb; - if (Enable) { + if (enable) { #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0) - if(clk_core) clk_prepare(clk_core); - if(clk_shader) clk_prepare(clk_shader); - if(clk_axi) clk_prepare(clk_axi); - if(clk_ahb) clk_prepare(clk_ahb); + if (clk_core) + clk_prepare(clk_core); + + if (clk_shader) + clk_prepare(clk_shader); + + if (clk_axi) + clk_prepare(clk_axi); + + if (clk_ahb) + clk_prepare(clk_ahb); #endif - if(clk_core) clk_enable(clk_core); - if(clk_shader) clk_enable(clk_shader); - if(clk_axi) clk_enable(clk_axi); - if(clk_ahb) clk_enable(clk_ahb); + if (clk_core) + clk_enable(clk_core); + + if (clk_shader) + clk_enable(clk_shader); + + if (clk_axi) + clk_enable(clk_axi); + + if (clk_ahb) + clk_enable(clk_ahb); } else { - if(clk_core) clk_disable(clk_core); - if(clk_shader) clk_disable(clk_shader); - if(clk_axi) clk_disable(clk_axi); - if(clk_ahb) clk_disable(clk_ahb); - #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0) - if(clk_core) clk_unprepare(clk_core); - if(clk_shader) clk_unprepare(clk_shader); - if(clk_axi) clk_unprepare(clk_axi); - if(clk_ahb) clk_unprepare(clk_ahb); + if (clk_core) + clk_disable(clk_core); + + if (clk_shader) + clk_disable(clk_shader); + + if (clk_axi) + clk_disable(clk_axi); + + if (clk_ahb) + clk_disable(clk_ahb); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0) + if (clk_core) + clk_unprepare(clk_core); + + if (clk_shader) + clk_unprepare(clk_shader); + + if (clk_axi) + clk_unprepare(clk_axi); + + if (clk_ahb) + clk_unprepare(clk_ahb); #endif } @@ -1089,15 +1199,9 @@ static struct dev_pm_ops gpu_pm_ops; #endif #endif -gceSTATUS -_AdjustDriver( - IN gckPLATFORM Platform - ) -{ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0) - struct platform_driver * driver = Platform->driver; -#endif +static int adjust_platform_driver(struct platform_driver *driver) +{ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0) driver->driver.of_match_table = mxs_gpu_dt_ids; #endif @@ -1120,85 +1224,182 @@ _AdjustDriver( #endif #endif - return gcvSTATUS_OK; +#ifdef IMX_GPU_SUBSYSTEM + if (use_imx_gpu_subsystem) { + /* Save old probe and remove. */ + gpu_probe_real = driver->probe; + gpu_remove_real = driver->remove; + + driver->probe = mxc_gpu_master_probe; + driver->remove = mxc_gpu_master_remove; + } +#endif + + return 0; } -gceSTATUS -_Reset( - IN gckPLATFORM Platform, - gceCORE GPU - ) -{ -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) #define SRC_SCR_OFFSET 0 #define BP_SRC_SCR_GPU3D_RST 1 #define BP_SRC_SCR_GPU2D_RST 4 + +static inline int reset_gpu(int gpu) +{ +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) void __iomem *src_base = IO_ADDRESS(SRC_BASE_ADDR); - gctUINT32 bit_offset,val; + uint32_t bit_offset, val; - if(GPU == gcvCORE_MAJOR) { + if (gpu == gcvCORE_MAJOR) bit_offset = BP_SRC_SCR_GPU3D_RST; - } else if((GPU == gcvCORE_VG) - ||(GPU == gcvCORE_2D)) { + else if ((gpu == gcvCORE_VG) ||(gpu == gcvCORE_2D)) bit_offset = BP_SRC_SCR_GPU2D_RST; - } else { - return gcvSTATUS_INVALID_CONFIG; - } + else + return -ENXIO; + val = __raw_readl(src_base + SRC_SCR_OFFSET); val &= ~(1 << (bit_offset)); val |= (1 << (bit_offset)); __raw_writel(val, src_base + SRC_SCR_OFFSET); - while ((__raw_readl(src_base + SRC_SCR_OFFSET) & - (1 << (bit_offset))) != 0) { - } + while ((__raw_readl(src_base + SRC_SCR_OFFSET) & (1 << (bit_offset))) != 0); + + return -ENODEV; - return gcvSTATUS_NOT_SUPPORTED; #elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) - struct imx_priv* priv = Platform->priv; - struct reset_control *rstc = priv->rstc[GPU]; + struct imx_priv* priv = &imxPriv; + struct reset_control *rstc = priv->rstc[gpu]; + if (rstc) reset_control_reset(rstc); #else - imx_src_reset_gpu((int)GPU); + imx_src_reset_gpu((int)gpu); #endif + + return 0; +} + +static gceSTATUS +_AdjustParam( + gcsPLATFORM * Platform, + gcsMODULE_PARAMETERS *Args + ) +{ + patch_param(Platform->device, Args); return gcvSTATUS_OK; } -gcmkPLATFROM_Name +static gceSTATUS +_GetPower( + gcsPLATFORM * Platform + ) +{ + int ret = get_power(&Platform->device->dev); + + if (ret) + return gcvSTATUS_GENERIC_IO; + + return gcvSTATUS_OK; +} + +static gceSTATUS +_PutPower( + gcsPLATFORM * Platform + ) +{ + put_power(); + return gcvSTATUS_OK; +} + + +static gceSTATUS +_SetPower( + gcsPLATFORM * Platform, + gceCORE GPU, + gctBOOL Enable + ) +{ + return set_power((int)GPU, Enable) ? gcvSTATUS_GENERIC_IO + : gcvSTATUS_OK; +} + +static gceSTATUS +_SetClock( + gcsPLATFORM * Platform, + gceCORE GPU, + gctBOOL Enable + ) +{ + set_clock((int)GPU, Enable); + return gcvSTATUS_OK; +} + +static gceSTATUS +_Reset( + gcsPLATFORM * Platform, + gceCORE GPU + ) +{ + int ret; + + ret = reset_gpu((int)GPU); -gcsPLATFORM_OPERATIONS platformOperations = { - .adjustParam = gckPLATFORM_AdjustParam, - .allocPriv = _AllocPriv, - .freePriv = _FreePriv, + if (!ret) + return gcvSTATUS_OK; + else if (ret == -ENODEV) + return gcvSTATUS_NOT_SUPPORTED; + else + return gcvSTATUS_INVALID_CONFIG; +} + +struct soc_platform_ops imx_platform_ops = +{ + .adjustParam = _AdjustParam, .getPower = _GetPower, .putPower = _PutPower, .setPower = _SetPower, .setClock = _SetClock, .reset = _Reset, - .adjustDriver = _AdjustDriver, #ifdef CONFIG_GPU_LOW_MEMORY_KILLER .shrinkMemory = _ShrinkMemory, #endif -#if IMX_GPU_SUBSYSTEM - .registerDevice = gckPLATFORM_RegisterDevice, - .unRegisterDevice = gckPLATFORM_UnRegisterDevice, -#endif - .name = _Name, }; -void -gckPLATFORM_QueryOperations( - IN gcsPLATFORM_OPERATIONS ** Operations - ) +static struct soc_platform imx_platform = +{ + .name = __FILE__, + .ops = &imx_platform_ops, +}; + +int soc_platform_init(struct platform_driver *pdrv, + struct soc_platform **platform) { -#if IMX_GPU_SUBSYSTEM - if (!of_find_compatible_node(NULL, NULL, "fsl,imx8-gpu-ss")) { - platformOperations.registerDevice = NULL; - platformOperations.unRegisterDevice = NULL; +#ifdef IMX_GPU_SUBSYSTEM + if (of_find_compatible_node(NULL, NULL, "fsl,imx8-gpu-ss")) + use_imx_gpu_subsystem = 1; + + if (of_find_compatible_node(NULL, NULL, "fsl,imx8x-gpu")) { + printk(KERN_ERR "Incorrect device-tree, please update dtb."); + return -EINVAL; } #endif - *Operations = &platformOperations; + adjust_platform_driver(pdrv); + init_priv(); + +#ifdef IMX_GPU_SUBSYSTEM + register_imx_gpu_sub_driver(); +#endif + + *platform = &imx_platform; + return 0; +} + +int soc_platform_terminate(struct soc_platform *platform) +{ +#ifdef IMX_GPU_SUBSYSTEM + unregister_imx_gpu_sub_driver(); +#endif + + free_priv(); + return 0; } diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6.config b/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6.config index edbabab4dfe3..396ae1de8741 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6.config +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6.config @@ -22,6 +22,6 @@ CUSTOMER_ALLOCATOR_OBJS := $(ALLOCATOR_ARRAY_H_LOCATION)/gc_hal_kernel_allocator EXTRA_CFLAGS += -DCLASS_NAME=\"gpu_class\" EXTRA_CFLAGS += -DgcdGPU_2D_TIMEOUT=20000 +EXTRA_CFLAGS += -DNO_DMA_COHERENT=1 EXTRA_CFLAGS += -DgcdSYS_FREE_MEMORY_LIMIT=51200 -EXTRA_CFLAGS += -DNO_DMA_COHERENT=1 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 index a8e1a0ec4ba5..db1a26be0b79 100644 --- 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 @@ -214,8 +214,8 @@ gctaHARDWARE_SetMMUStates( ) { gceSTATUS status; - gctUINT32 config, address; - gctUINT32 extMtlb, extSafeAddrss; + gctUINT32 config; + gctUINT32 extMtlb; gctPHYS_ADDR_T physical; gctUINT32_PTR buffer; gctUINT32 reserveBytes = 2 * 4; @@ -231,16 +231,10 @@ gctaHARDWARE_SetMMUStates( 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) + /* more than 40bit physical address */ + if (extMtlb & 0xFFFFFF00) { - gcmkONERROR(gcvSTATUS_NOT_ALIGNED); + gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); } switch (Mode) @@ -281,7 +275,7 @@ gctaHARDWARE_SetMMUStates( /* Setup page table array entry. */ entry->low = config; - entry->high = physical >> 32; + entry->high = extMtlb; /* Setup command buffer to load index 0 of page table array. */ *buffer++ @@ -551,6 +545,13 @@ gctaHARDWARE_SetMMU( gctaOS_GetPhysicalAddress(Hardware->ta->os, Hardware->ta->mmu->nonSecureSafePageLogical, &nonSecureSafeAddress); + /* not support more than 40bit physical address */ + if ((secureSafeAddress & 0xFFFFFF0000000000ULL) || + (nonSecureSafeAddress & 0xFFFFFF0000000000ULL)) + { + return (gcvSTATUS_NOT_SUPPORTED); + } + /* Fill entry 0 of page table array. */ entry = (gcsMMU_TABLE_ARRAY_ENTRY *)Hardware->pagetableArray.logical; @@ -567,15 +568,13 @@ gctaHARDWARE_SetMMU( /* Set page table base. */ gctaOS_WriteRegister( Hardware->ta->os, Hardware->ta->core, - 0x0038C -, + 0x0038C, (gctUINT32)(Hardware->pagetableArray.address & 0xFFFFFFFF) ); gctaOS_WriteRegister( Hardware->ta->os, Hardware->ta->core, - 0x00390 -, + 0x00390, (gctUINT32)((Hardware->pagetableArray.address >> 32) & 0xFFFFFFFF) ); @@ -588,22 +587,19 @@ gctaHARDWARE_SetMMU( gctaOS_WriteRegister( Hardware->ta->os, Hardware->ta->core, - 0x0039C -, + 0x0039C, (gctUINT32)(secureSafeAddress & 0xFFFFFFFF) ); gctaOS_WriteRegister( Hardware->ta->os, Hardware->ta->core, - 0x00398 -, + 0x00398, (gctUINT32)(nonSecureSafeAddress & 0xFFFFFFFF) ); gctaOS_WriteRegister( Hardware->ta->os, Hardware->ta->core, - 0x003A0 -, + 0x003A0, (((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) ((gctUINT32)((secureSafeAddress >> 32) & 0xFFFFFFFF)) & ((gctUINT32) ((((1 ? @@ -648,8 +644,7 @@ gctaHARDWARE_SetMMU( /* Enable MMU. */ gctaOS_WriteRegister( Hardware->os, Hardware->ta->core, - 0x00388 -, + 0x00388, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? -- 2.17.1