From 5b62f5059a2fe41ac9f990edff036e28b2a1944c Mon Sep 17 00:00:00 2001 From: Xianzhong Date: Fri, 13 Oct 2017 19:15:34 +0800 Subject: MGS-3214 gpu-viv: integrate 6.2.4 driver add dmabuf/gem feature through drm galcore, include more bug-fixing in gpu kernel driver. Signed-off-by: Xianzhong --- drivers/mxc/gpu-viv/Kbuild | 10 +- drivers/mxc/gpu-viv/config | 1 + .../hal/kernel/arch/gc_hal_kernel_context.c | 15 +- .../hal/kernel/arch/gc_hal_kernel_context.h | 15 +- .../hal/kernel/arch/gc_hal_kernel_hardware.c | 2670 +---- .../hal/kernel/arch/gc_hal_kernel_hardware.h | 14 +- .../hal/kernel/archvg/gc_hal_kernel_hardware_vg.c | 27 +- .../hal/kernel/archvg/gc_hal_kernel_hardware_vg.h | 3 +- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c | 545 +- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h | 50 +- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c | 143 +- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c | 852 +- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c | 65 +- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c | 377 +- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c | 1 + .../hal/kernel/gc_hal_kernel_video_memory.c | 443 +- .../gpu-viv/hal/kernel/inc/gc_feature_database.h | 10492 ++++++++++++------- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h | 84 +- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h | 20 +- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h | 99 +- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_drm.h | 132 + drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h | 49 +- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h | 26 + .../gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer.h | 3 + .../mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h | 10 +- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h | 490 +- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h | 6 +- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h | 1 + .../default/gc_hal_kernel_allocator_dma.c | 249 +- .../default/gc_hal_kernel_allocator_dmabuf.c | 76 +- .../default/gc_hal_kernel_allocator_gfp.c | 394 +- .../default/gc_hal_kernel_allocator_reserved_mem.c | 157 +- .../default/gc_hal_kernel_allocator_user_memory.c | 4 +- .../freescale/gc_hal_kernel_allocator_cma.c | 279 +- .../hal/os/linux/kernel/gc_hal_kernel_allocator.h | 71 +- .../hal/os/linux/kernel/gc_hal_kernel_device.c | 77 +- .../hal/os/linux/kernel/gc_hal_kernel_device.h | 8 + .../hal/os/linux/kernel/gc_hal_kernel_driver.c | 45 +- .../hal/os/linux/kernel/gc_hal_kernel_drm.c | 493 + .../hal/os/linux/kernel/gc_hal_kernel_linux.c | 86 +- .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c | 208 +- .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h | 7 + .../hal/os/linux/kernel/gc_hal_kernel_platform.h | 6 +- .../freescale/gc_hal_kernel_platform_imx6.c | 11 + .../gpu-viv/hal/security_v1/gc_hal_ta_hardware.c | 10 +- 45 files changed, 10970 insertions(+), 7854 deletions(-) create mode 100644 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_drm.h create mode 100644 drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_drm.c diff --git a/drivers/mxc/gpu-viv/Kbuild b/drivers/mxc/gpu-viv/Kbuild index 8ba72e790eb2..84f0225bf3fe 100644 --- a/drivers/mxc/gpu-viv/Kbuild +++ b/drivers/mxc/gpu-viv/Kbuild @@ -102,6 +102,10 @@ ifneq ($(CONFIG_IOMMU_SUPPORT),) OBJS += $(OS_KERNEL_DIR)/gc_hal_kernel_iommu.o endif +ifneq ($(CONFIG_DRM),) +OBJS += $(OS_KERNEL_DIR)/gc_hal_kernel_drm.o +endif + OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \ $(HAL_KERNEL_DIR)/gc_hal_kernel_command.o \ $(HAL_KERNEL_DIR)/gc_hal_kernel_async_command.o \ @@ -289,6 +293,10 @@ ifeq ($(SECURITY), 1) EXTRA_CFLAGS += -DgcdSECURITY=1 endif +ifneq ($(CONFIG_DRM),) +EXTRA_CFLAGS += -DgcdENABLE_DRM=$(VIVANTE_ENABLE_DRM) +endif + EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel/inc EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel/arch @@ -307,7 +315,7 @@ endif EXTRA_CFLAGS += -DHOST=\"$(HOST)\" -EXTRA_CFLAGS += -DgcdENABLE_TRUST_APPLICATION=0 +EXTRA_CFLAGS += -DgcdENABLE_TRUST_APPLICATION=1 obj-$(CONFIG_MXC_GPU_VIV) = $(MODULE_NAME).o diff --git a/drivers/mxc/gpu-viv/config b/drivers/mxc/gpu-viv/config index fa3287a9dd21..a4fe0590f57a 100644 --- a/drivers/mxc/gpu-viv/config +++ b/drivers/mxc/gpu-viv/config @@ -58,6 +58,7 @@ SDK_DIR ?= $(AQROOT)/build/sdk VIVANTE_ENABLE_3D ?= 1 VIVANTE_ENABLE_2D ?= 1 VIVANTE_ENABLE_VG ?= 1 +VIVANTE_ENABLE_DRM ?= 1 NO_DMA_COHERENT ?= 0 USE_PLATFORM_DRIVER ?= 1 ENABLE_GPU_CLOCK_BY_DRIVER ?= 0 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 69574f61298a..b20aaf5a60c2 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 @@ -1223,13 +1223,14 @@ if (halti5){ vsConstBase = 0xD000; index += _State(Context, index, 0x038C0 >> 2, 0x00000000, 16, gcvFALSE, gcvFALSE); index += _State(Context, index, 0x03884 >> 2, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:0) - (0 ? 2:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 2:0) - (0 ? 2:0) + 1))))))) << (0 ? - 2:0))) | (((gctUINT32) (0x2 & ((gctUINT32) ((((1 ? 2:0) - (0 ? 2:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 2:0) - (0 ? 2:0) + 1))))))) << (0 ? 2:0))) | ((((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) (2) & ((gctUINT32) ((((1 ? - 20:16) - (0 ? 20:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 20:16) - (0 ? - 20:16) + 1))))))) << (0 ? 20:16))), 1, gcvFALSE, gcvFALSE); - } + 2:0))) | (((gctUINT32) ((gctUINT32) (hardware->options.uscL1CacheRatio) & ((gctUINT32) ((((1 ? + 2:0) - (0 ? 2:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 2:0) - (0 ? 2:0) + 1))))))) << (0 ? + 2:0))) | ((((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) (2) & ((gctUINT32) ((((1 ? 20:16) - (0 ? + 20:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 20:16) - (0 ? 20:16) + 1))))))) << (0 ? + 20:16))), 1, gcvFALSE, gcvFALSE); + } else { index += _State(Context, index, 0x03820 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE); 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 2614ee92d9ea..6a9092683d37 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,15 +178,12 @@ struct _gckCONTEXT gctBOOL_PTR hint; #endif - gcsPROFILER_COUNTERS latestProfiler; - gcsPROFILER_COUNTERS histroyProfiler; - gcsPROFILER_COUNTERS preProfiler; - gcsPROFILER_NEW_COUNTERS_PART1 latestNewProfiler_part1; - gcsPROFILER_NEW_COUNTERS_PART1 histroyNewProfiler_part1; - gcsPROFILER_NEW_COUNTERS_PART1 preNewProfiler_part1; - gcsPROFILER_NEW_COUNTERS_PART2 latestNewProfiler_part2; - gcsPROFILER_NEW_COUNTERS_PART2 histroyNewProfiler_part2; - gcsPROFILER_NEW_COUNTERS_PART2 preNewProfiler_part2; + gcsPROFILER_COUNTERS_PART1 latestProfiler_part1; + gcsPROFILER_COUNTERS_PART1 histroyProfiler_part1; + gcsPROFILER_COUNTERS_PART1 preProfiler_part1; + gcsPROFILER_COUNTERS_PART2 latestProfiler_part2; + gcsPROFILER_COUNTERS_PART2 histroyProfiler_part2; + gcsPROFILER_COUNTERS_PART2 preProfiler_part2; }; #ifdef __cplusplus 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 c9512765ec54..ebec019f9972 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 @@ -1070,6 +1070,9 @@ _QueryFeatureDatabase( { available = gcvFALSE; } +#if !gcdDVFS + available = gcvFALSE; +#endif break; case gcvFEATURE_ACE: @@ -1113,7 +1116,7 @@ _QueryFeatureDatabase( break; case gcvFEATURE_FENCE_64BIT: - available = database->REG_Halti5; + available = database->FENCE_64BIT; break; case gcvFEATURE_TEX_BASELOD: @@ -1251,7 +1254,7 @@ _QueryFeatureDatabase( break; case gcvFEATURE_SECURITY: - available = gcvFALSE; + available = database->SECURITY; break; case gcvFEATURE_TX_DESCRIPTOR: @@ -1338,6 +1341,14 @@ _QueryFeatureDatabase( available = database->ASYNC_BLT; break; + case gcvFEATURE_COMPUTE_ONLY: + available = database->COMPUTE_ONLY; + break; + + case gcvFEATURE_USC_FULLCACHE_FIX: + available = database->USC_FULL_CACHE_FIX; + break; + default: gcmkFATAL("Invalid feature has been requested."); available = gcvFALSE; @@ -1435,6 +1446,122 @@ _ConfigurePolicyID( )); } } +/**************************** +** Initialise hardware options +*/ +static void +_SetHardwareOptions( + IN gckHARDWARE Hardware + ) +{ + gceSTATUS status; + gcsHAL_QUERY_CHIP_OPTIONS *options = &Hardware->options; + + status = gckOS_QueryOption(Hardware->os, "powerManagement", (gctUINT32*)&options->powerManagement); + + if (status == gcvSTATUS_NOT_SUPPORTED) + { + /* Enable power management by default. */ + Hardware->options.powerManagement = gcvTRUE; + } + + /* Disable profiler by default */ + status = gckOS_QueryOption(Hardware->os, "gpuProfiler", (gctUINT32*)&options->gpuProfiler); + if (status == gcvSTATUS_NOT_SUPPORTED) + { + /* Disable profiler by default */ + Hardware->options.gpuProfiler= gcvFALSE; + } + gckOS_QueryOption(Hardware->os, "mmu", (gctUINT32_PTR)&options->enableMMU); + + if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_USC)) + { + gctUINT L1cacheSize; + gcsFEATURE_DATABASE *database = Hardware->featureDatabase; + + if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_COMPUTE_ONLY)) + { + L1cacheSize = database->L1CacheSize; + } + else + { + gctUINT attribBufSizeInKB; + if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_TESSELLATION)) + { + /* GS/TS must be bundled. */ + gcmkASSERT(gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_GEOMETRY_SHADER)); + attribBufSizeInKB = 42; + } + else + { + gcmkASSERT(!gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_GEOMETRY_SHADER)); + attribBufSizeInKB = 8; + } + L1cacheSize = database->USC_MAX_PAGES - attribBufSizeInKB; + } + gcmkASSERT(L1cacheSize); + if (L1cacheSize >= database->L1CacheSize) + { + Hardware->options.uscL1CacheRatio = 0x0; + gcmkASSERT(gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_USC_FULLCACHE_FIX)); + } + else + { + static const gctINT s_uscCacheRatio[] = + { + 100000,/* 1.0f */ + 50000, /* 0.5f */ + 25000, /* 0.25f */ + 12500, /* 0.125f */ + 62500, /* 0.0625f */ + 3125, /* 0.03125f */ + 75000, /* 0.75f */ + 0, /*0.0f */ + }; + gctINT maxL1cacheSize = L1cacheSize * 100000; + gctINT delta = 2147483647; /* start with very big delta */ + gctINT i = 0; + gctINT curIndex = -1; + for (; i < gcmCOUNTOF(s_uscCacheRatio); ++i) + { + gctINT curL1cacheSize = database->L1CacheSize * s_uscCacheRatio[i]; + + if ((maxL1cacheSize >= curL1cacheSize) && + ((maxL1cacheSize - curL1cacheSize) < delta)) + { + curIndex = i; + delta = maxL1cacheSize - curL1cacheSize; + } + } + gcmkASSERT(-1 != curIndex); + Hardware->options.uscL1CacheRatio = curIndex; + } + } + + options->secureMode = gcvSECURE_NONE; + + if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_SECURITY)) + { + gctUINT32 ta = 0; + + gcmkASSERT(gcvSTATUS_TRUE == gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_SECURITY_AHB)); + + options->secureMode = gcvSECURE_IN_NORMAL; + + status = gckOS_QueryOption(Hardware->os, "TA", &ta); + + if (gcmIS_SUCCESS(status) && ta) + { + options->secureMode = gcvSECURE_IN_TA; + } + } + else if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_SECURITY_AHB)) + { + options->secureMode = gcvSECURE_IN_NORMAL; + } + + return; +} /* * State timer helper must be called with powerMutex held. @@ -1575,6 +1702,8 @@ gckHARDWARE_Construct( /* Identify the hardware. */ gcmkONERROR(_IdentifyHardwareByDatabase(hardware, Os, Core, &hardware->identity)); + _SetHardwareOptions(hardware); + hardware->mmuVersion = gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_MMU); /* Get the system's physical base address for old MMU */ @@ -1707,23 +1836,6 @@ gckHARDWARE_Construct( gcmkONERROR(gckOS_AtomConstruct(Os, &hardware->pendingEvent)); - status = gckOS_QueryOption(Os, "powerManagement", (gctUINT32*)&hardware->powerManagement); - - if (status == gcvSTATUS_NOT_SUPPORTED) - { - /* Enable power management by default. */ - hardware->powerManagement = gcvTRUE; - } - - /* Disable profiler by default */ - hardware->gpuProfiler = gcvFALSE; - status = gckOS_QueryOption(Os, "gpuProfiler", (gctUINT32*)&hardware->gpuProfiler); - if (status == gcvSTATUS_NOT_SUPPORTED) - { - /* Enable power management by default. */ - hardware->gpuProfiler= gcvFALSE; - } - #if defined(LINUX) || defined(__QNXNTO__) || defined(UNDER_CE) if (hardware->mmuVersion) { @@ -1736,8 +1848,6 @@ gckHARDWARE_Construct( hardware->stallFEPrefetch = gcvTRUE; } - gcmkONERROR(gckOS_QueryOption(Os, "mmu", (gctUINT32_PTR)&hardware->enableMMU)); - hardware->minFscaleValue = 1; hardware->waitCount = 200; @@ -1747,25 +1857,7 @@ gckHARDWARE_Construct( gcmkONERROR(gckQUEUE_Allocate(hardware->os, &hardware->linkQueue, gcdLINK_QUEUE_SIZE)); #endif - if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_SECURITY)) - { - gctUINT32 ta = 0; - - gcmkASSERT(gcvSTATUS_TRUE == gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_SECURITY_AHB)); - - status = gckOS_QueryOption(Os, "TA", &ta); - - if (gcmIS_SUCCESS(status)) - { - hardware->secureMode = ta ? gcvSECURE_IN_TA : gcvSECURE_IN_NORMAL; - } - } - else if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_SECURITY_AHB)) - { - hardware->secureMode = gcvSECURE_IN_NORMAL; - } - - if (hardware->secureMode == gcvSECURE_IN_NORMAL) + if (hardware->options.secureMode == gcvSECURE_IN_NORMAL) { hardware->pagetableArray.size = 4096; @@ -2012,6 +2104,24 @@ gckHARDWARE_InitializeHardware( 11:11) - (0 ? 11:11) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ? 11:11))))); + if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_SECURITY_AHB) && + (Hardware->options.secureMode == gcvSECURE_IN_NORMAL)) + { + gctUINT32 ahbControl = 0; + + gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, + Hardware->core, + 0x003A8, + &ahbControl)); + gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, + Hardware->core, + 0x003A8, + ((((gctUINT32) (ahbControl)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 1:1) - (0 ? 1:1) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? + 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))))); + } + /* Reset memory counters. */ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, @@ -2426,6 +2536,7 @@ gckHARDWARE_InitializeHardware( 0x0010C, &data)); +#if gcdDVFS /* Disable internal DFS. */ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 18:18) - (0 ? 18:18) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 18:18) - (0 ? @@ -2433,6 +2544,11 @@ gckHARDWARE_InitializeHardware( 18:18) - (0 ? 18:18) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 18:18) - (0 ? 18:18) + 1))))))) << (0 ? 18:18))); +#else + /* Disable externl DVFS and auto-gating*/ + data &= ~0x50000; + data |= 0x20000; +#endif gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0010C, @@ -2616,6 +2732,43 @@ gckHARDWARE_QueryChipIdentity( return gcvSTATUS_OK; } +/******************************************************************************* +** +** gckHARDWARE_QueryChipOptions +** +** Query the options of the hardware. +** +** INPUT: +** +** gckHARDWARE Hardware +** Pointer to the gckHARDWARE object. +** +** OUTPUT: +** +** gcsHAL_QUERY_CHIP_OPTIONS_PTR Options +** Pointer to the identity structure. +** +*/ +gceSTATUS +gckHARDWARE_QueryChipOptions( + IN gckHARDWARE Hardware, + OUT gcsHAL_QUERY_CHIP_OPTIONS_PTR Options + ) +{ + gcmkHEADER_ARG("Hardware=0x%x", Hardware); + + /* Verify the arguments. */ + gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE); + gcmkVERIFY_ARGUMENT(Options != gcvNULL); + + *Options = Hardware->options; + + /* Success. */ + gcmkFOOTER_NO(); + return gcvSTATUS_OK; +} + + /******************************************************************************* ** ** gckHARDWARE_SplitMemory @@ -2760,7 +2913,7 @@ gckHARDWARE_Execute( gcmkONERROR(gckOS_MemoryBarrier(Hardware->os, gcvNULL)); /* Write control register. */ - switch (Hardware->secureMode) + switch (Hardware->options.secureMode) { case gcvSECURE_NONE: gcmkONERROR( @@ -4308,13 +4461,14 @@ gckHARDWARE_Interrupt( &dataEx )); - if (dataEx & 0x80000000) - { - /* Descriptor fetched, update counter. */ - gckFE_UpdateAvaiable(Hardware, &Hardware->kernel->asyncCommand->fe); + /* this bit looks useless now, we can use this check if this interrupt is from FE */ + dataEx &= ~0x80000000; - dataEx &= ~0x80000000; - } + /* Descriptor fetched, update counter. + We can't do this at dataEx != 0 only, as read HW acknowledge register will overwrite + 0x007E4. At one interrupt we don't read it, we will miss it. + */ + gckFE_UpdateAvaiable(Hardware, &Hardware->kernel->asyncCommand->fe); if (dataEx) { @@ -4657,12 +4811,13 @@ gckHARDWARE_SetMMU( 0x0040C, address)); } - else if (Hardware->enableMMU == gcvTRUE && Hardware->secureMode != gcvSECURE_IN_TA) + else if (Hardware->options.enableMMU && + (Hardware->options.secureMode != gcvSECURE_IN_TA)) { gctBOOL hwMmuDisabled = gcvTRUE; /* Force Disable MMU to guarantee setup command be read from physical addr */ - if (Hardware->secureMode == gcvSECURE_IN_NORMAL) + if (Hardware->options.secureMode == gcvSECURE_IN_NORMAL) { gctUINT32 regMmuCtrl = 0; gcmkONERROR(gckOS_ReadRegisterEx( @@ -4704,7 +4859,7 @@ gckHARDWARE_SetMMU( *(endLogical + 1) = Hardware->executeCount + 1; - if (Hardware->secureMode == gcvSECURE_IN_NORMAL) + if (Hardware->options.secureMode == gcvSECURE_IN_NORMAL) { gctUINT32_PTR safeLogical = Hardware->kernel->mmu->safePageLogical; gctUINT32 extSafeAddress; @@ -4838,7 +4993,7 @@ gckHARDWARE_SetMMU( 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) + if (Hardware->options.secureMode == gcvSECURE_IN_NORMAL) { gcmkONERROR(gckOS_WriteRegisterEx( Hardware->os, @@ -4885,6 +5040,7 @@ gckHARDWARE_FlushAsyncMMU( { gctUINT32 semaphore, stall; gctUINT32_PTR buffer; + gceSTATUS status; gcmkHEADER_ARG("Hardware=0x%x Logical=0x%x *Bytes=%lu", Hardware, Logical, gcmOPT_VALUE(Bytes)); @@ -4897,7 +5053,9 @@ gckHARDWARE_FlushAsyncMMU( { buffer = (gctUINT32_PTR) Logical; - *buffer++ = + gcmkONERROR(gckOS_WriteMemory( + Hardware->os, + 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) ? @@ -4911,15 +5069,21 @@ gckHARDWARE_FlushAsyncMMU( 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))); + 25:16))) + )); - *buffer++ = + gcmkONERROR(gckOS_WriteMemory( + Hardware->os, + buffer + 1, ((((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))); + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) + )); - *buffer++ = + gcmkONERROR(gckOS_WriteMemory( + Hardware->os, + buffer + 2, ((((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) ? @@ -4933,18 +5097,24 @@ gckHARDWARE_FlushAsyncMMU( 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))); + 25:16))) + )); - *buffer++ = + gcmkONERROR(gckOS_WriteMemory( + Hardware->os, + buffer + 3, (((((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)))); + ~0U : (~(~0U << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7)))) + )); - *buffer++ = + gcmkONERROR(gckOS_WriteMemory( + Hardware->os, + buffer + 4, ((((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) ? @@ -4958,7 +5128,8 @@ gckHARDWARE_FlushAsyncMMU( 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))); + 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 ? @@ -4978,14 +5149,19 @@ gckHARDWARE_FlushAsyncMMU( 29:28) + 1))))))) << (0 ? 29:28))); } - *buffer++ = - semaphore; + gcmkONERROR(gckOS_WriteMemory( + Hardware->os, + buffer + 5, + semaphore)); - *buffer++ = + gcmkONERROR(gckOS_WriteMemory( + Hardware->os, + buffer + 6, ((((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))); + ~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 ? @@ -5005,10 +5181,14 @@ gckHARDWARE_FlushAsyncMMU( 29:28) + 1))))))) << (0 ? 29:28))); } - *buffer++ = - stall; + gcmkONERROR(gckOS_WriteMemory( + Hardware->os, + buffer + 7, + stall)); - *buffer++ = + gcmkONERROR(gckOS_WriteMemory( + Hardware->os, + buffer + 8, ((((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) ? @@ -5022,13 +5202,17 @@ gckHARDWARE_FlushAsyncMMU( 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))); + 25:16))) + )); - *buffer++ = + gcmkONERROR(gckOS_WriteMemory( + Hardware->os, + buffer + 9, ((((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))); + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) + )); } if (Bytes != gcvNULL) @@ -5040,6 +5224,11 @@ gckHARDWARE_FlushAsyncMMU( /* Success. */ gcmkFOOTER_ARG("*Bytes=%lu", gcmOPT_VALUE(Bytes)); return gcvSTATUS_OK; + +OnError: + /* Success. */ + gcmkFOOTER_ARG("*Bytes=%lu", gcmOPT_VALUE(Bytes)); + return status; } /******************************************************************************* @@ -5402,7 +5591,7 @@ gckHARDWARE_SetMMUStates( ace = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_ACE); - switch (Hardware->secureMode) + switch (Hardware->options.secureMode) { case gcvSECURE_IN_NORMAL: reserveBytes = 8 + 4 * 4; @@ -5520,7 +5709,7 @@ gckHARDWARE_SetMMUStates( { buffer = Logical; - if (Hardware->secureMode == gcvSECURE_IN_NORMAL) + if (Hardware->options.secureMode == gcvSECURE_IN_NORMAL) { /* Setup page table array entry. */ if (Hardware->bigEndian) @@ -5564,7 +5753,7 @@ gckHARDWARE_SetMMUStates( } else { - gcmkASSERT(Hardware->secureMode == gcvSECURE_NONE); + gcmkASSERT(Hardware->options.secureMode == gcvSECURE_NONE); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? @@ -7058,6 +7247,7 @@ gckHARDWARE_SetFastClear( #if gcdENABLE_3D gctUINT32 debug; gceSTATUS status; + gceCOMPRESSION_OPTION compression = (Compression == -1) ? gcvCOMPRESSION_OPTION_DEFAULT : (gceCOMPRESSION_OPTION)Compression; gcmkHEADER_ARG("Hardware=0x%x Enable=%d Compression=%d", Hardware, Enable, Compression); @@ -7073,10 +7263,20 @@ gckHARDWARE_SetFastClear( ) ? 1 : 0; } - if (Compression == -1) + if (compression == gcvCOMPRESSION_OPTION_DEFAULT) { /* Determine automatic value for compression. */ - Compression = Enable & gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_ZCOMPRESSION); + if (Enable) + { + if (gcvSTATUS_FALSE == gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_ZCOMPRESSION)) + { + compression &= ~gcvCOMPRESSION_OPTION_DEPTH; + } + } + else + { + compression = gcvCOMPRESSION_OPTION_NONE; + } } /* Read AQMemoryDebug register. */ @@ -7096,9 +7296,9 @@ gckHARDWARE_SetFastClear( /* Set compression bypass. */ debug = ((((gctUINT32) (debug)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 21:21) - (0 ? - 21:21) + 1))))))) << (0 ? 21:21))) | (((gctUINT32) ((gctUINT32) (Compression == 0) & ((gctUINT32) ((((1 ? - 21:21) - (0 ? 21:21) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 21:21) - (0 ? - 21:21) + 1))))))) << (0 ? 21:21))); + 21:21) + 1))))))) << (0 ? 21:21))) | (((gctUINT32) ((gctUINT32) ((gcvCOMPRESSION_OPTION_NONE == compression) ? + 1 : 0) & ((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0U : (~(~0U << ((1 ? + 21:21) - (0 ? 21:21) + 1))))))) << (0 ? 21:21))); } /* Write back AQMemoryDebug register. */ @@ -7109,8 +7309,8 @@ gckHARDWARE_SetFastClear( debug)); /* Store fast clear and comprersison flags. */ - Hardware->allowFastClear = Enable; - Hardware->allowCompression = Compression; + Hardware->options.allowFastClear = Enable; + Hardware->options.allowCompression = compression; gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE, "FastClear=%d Compression=%d", Enable, Compression); @@ -7456,7 +7656,7 @@ gckHARDWARE_SetPowerManagementState( break; } - if (Hardware->powerManagement == gcvFALSE + if (Hardware->options.powerManagement == gcvFALSE && State != gcvPOWER_ON ) { @@ -7927,8 +8127,8 @@ gckHARDWARE_SetPowerManagementState( gcmkONERROR(gckHARDWARE_InitializeHardware(Hardware)); gcmkONERROR(gckHARDWARE_SetFastClear(Hardware, - Hardware->allowFastClear, - Hardware->allowCompression)); + Hardware->options.allowFastClear, + Hardware->options.allowCompression)); /* Force the command queue to reload the next context. */ command->currContext = gcvNULL; @@ -8160,7 +8360,7 @@ gckHARDWARE_SetPowerManagement( gcmkVERIFY_OK( gckOS_AcquireMutex(Hardware->os, Hardware->powerMutex, gcvINFINITE)); - Hardware->powerManagement = PowerManagement; + Hardware->options.powerManagement = PowerManagement; gcmkVERIFY_OK(gckOS_ReleaseMutex(Hardware->os, Hardware->powerMutex)); @@ -8223,7 +8423,7 @@ gckHARDWARE_SetGpuProfiler( data)); } - Hardware->gpuProfiler = GpuProfiler; + Hardware->options.gpuProfiler= GpuProfiler; if (GpuProfiler == gcvTRUE) { @@ -8551,22 +8751,6 @@ OnError: /******************************************************************************* ** Handy macros that will help in reading those debug registers. */ - -#define gcmkREAD_DEBUG_REGISTER(control, block, index, data) \ - gcmkONERROR(\ - gckOS_WriteRegisterEx(Hardware->os, \ - Hardware->core, \ - GC_DEBUG_CONTROL##control##_Address, \ - gcmSETFIELD(0, \ - GC_DEBUG_CONTROL##control, \ - block, \ - index))); \ - gcmkONERROR(\ - gckOS_ReadRegisterEx(Hardware->os, \ - Hardware->core, \ - GC_DEBUG_SIGNALS_##block##_Address, \ - &profiler->data)) - #define gcmkREAD_DEBUG_REGISTER_PART1(control, block, index, data) \ gcmkONERROR(\ gckOS_WriteRegisterEx(Hardware->os, \ @@ -8596,18 +8780,6 @@ OnError: Hardware->core, \ GC_DEBUG_SIGNALS_##block##_Address, \ &profiler_part2->data)) -#if USE_SW_RESET -#define gcmkREAD_DEBUG_REGISTER_Q(control, block, index, data) \ - gcmkREAD_DEBUG_REGISTER(control, block, index, data); \ - tempCounterValue = profiler->data; \ - profiler->data = CalcDelta(profiler->data, profilerHistory.data); \ - profilerHistory.data = tempCounterValue - -#else -#define gcmkREAD_DEBUG_REGISTER_Q(control, block, index, data) \ - gcmkREAD_DEBUG_REGISTER(control, block, index, data) - -#endif #define gcmkREAD_DEBUG_REGISTER_N(control, block, index, data) \ gcmkONERROR(\ @@ -8642,2005 +8814,50 @@ OnError: block, \ 0))) +static gctUINT32 +CalcDelta( + IN gctUINT32 new, + IN gctUINT32 old + ) +{ + if (new >= old) + { + return new - old; + } + else + { + return (gctUINT32)((gctUINT64)new + 0x100000000ll - old); + } +} + + +#if USE_SW_RESET +#define gcmkRESET_PROFILE_DATA_PART1(counterName) \ + temp = profiler_part1->counterName; \ + profiler_part1->counterName = CalcDelta(temp, Context->preProfiler_part1.counterName); \ + Context->preProfiler_part1.counterName = temp +#endif + +#define gcmkUPDATE_PROFILE_DATA_PART1(data) \ + profilerHistroy_part1->data += profiler_part1->data +#define gcmkUPDATE_PROFILE_DATA_PART2(data) \ + profilerHistroy_part2->data += profiler_part2->data -/******************************************************************************* -** -** gckHARDWARE_ProfileEngine2D -** -** Read the profile registers available in the 2D engine and sets them in the -** profile. The function will also reset the pixelsRendered counter every time. -** -** INPUT: -** -** gckHARDWARE Hardware -** Pointer to an gckHARDWARE object. -** -** OPTIONAL gcs2D_PROFILE_PTR Profile -** Pointer to a gcs2D_Profile structure. -** -** OUTPUT: -** -** Nothing. -*/ gceSTATUS -gckHARDWARE_ProfileEngine2D( +gckHARDWARE_QueryContextProfile( IN gckHARDWARE Hardware, - OPTIONAL gcs2D_PROFILE_PTR Profile - ) + IN gctBOOL Reset, + IN gckCONTEXT Context, + OUT gcsPROFILER_COUNTERS_PART1 * Counters_part1, + OUT gcsPROFILER_COUNTERS_PART2 * Counters_part2 +) { gceSTATUS status; - gcs2D_PROFILE_PTR profiler = Profile; + gckCOMMAND command = Hardware->kernel->command; + gcsPROFILER_COUNTERS_PART1 * profiler_part1 = Counters_part1; + gcsPROFILER_COUNTERS_PART2 * profiler_part2 = Counters_part2; - gcmkHEADER_ARG("Hardware=0x%x", Hardware); - - /* Verify the arguments. */ - gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE); - - if (Profile != gcvNULL) - { - /* Read the cycle count. */ - gcmkONERROR( - gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x00438, - &Profile->cycleCount)); - - /* Read pixels rendered by 2D engine. */ - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (11) & ((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->pixelsRendered)); - - /* Reset counter. */ - 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) (15) & ((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))) -)); - } - - /* Success. */ - gcmkFOOTER_NO(); - return gcvSTATUS_OK; - -OnError: - /* Return the status. */ - gcmkFOOTER(); - return status; -} - -#if VIVANTE_PROFILER - -static gctUINT32 -CalcDelta( - IN gctUINT32 new, - IN gctUINT32 old - ) -{ - if (new >= old) - { - return new - old; - } - else - { - return (gctUINT32)((gctUINT64)new + 0x100000000ll - old); - } -} - - -#if USE_SW_RESET -#define gcmkRESET_PROFILE_DATA(counterName, preCounters) \ - temp = profiler->counterName; \ - profiler->counterName = CalcDelta(temp, Context->preCounters.counterName); \ - Context->preCounters.counterName = temp - -#define gcmkRESET_PROFILE_DATA_PART1(counterName, preCounters) \ - temp = profiler_part1->counterName; \ - profiler_part1->counterName = CalcDelta(temp, Context->preCounters.counterName); \ - Context->preCounters.counterName = temp -#endif - -gceSTATUS -gckHARDWARE_QueryProfileRegisters( - IN gckHARDWARE Hardware, - IN gctBOOL Reset, - OUT gcsPROFILER_COUNTERS * Counters - ) -{ - gceSTATUS status; - gcsPROFILER_COUNTERS * profiler = Counters; - gctUINT i, clock; - gctUINT32 colorKilled, colorDrawn, depthKilled, depthDrawn; - gctUINT32 totalRead, totalWrite; - gceCHIPMODEL chipModel; - gctUINT32 chipRevision; - gctUINT32 resetValue = 0xF; - gctBOOL hasNewCounters = gcvFALSE; - gctUINT32 mc_axi_max_min_latency; - static gcsPROFILER_COUNTERS profilerHistory; - static gctBOOL isFirstFrame = gcvTRUE; - gctUINT32 tempCounterValue; - gctUINT32 totalColorKilled = 0; - gctUINT32 totalDepthKilled = 0; - gctUINT32 totalColorDrawn = 0; - gctUINT32 totalDepthDrawn = 0; - - gcmkHEADER_ARG("Hardware=0x%x Counters=0x%x", Hardware, Counters); - - /* Verify the arguments. */ - gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE); - if (isFirstFrame) - { - gckOS_ZeroMemory(&profilerHistory, sizeof(gcsPROFILER_COUNTERS)); - isFirstFrame = gcvFALSE; - } - - chipModel = Hardware->identity.chipModel; - chipRevision = Hardware->identity.chipRevision; - if ((chipModel == gcv5000 && chipRevision == 0x5434) || (chipModel == gcv3000 && chipRevision == 0x5435)) - { - resetValue = 0xFF; - hasNewCounters = gcvTRUE; - } - - /* Read the counters. */ - gcmkONERROR( - gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x00438, - &profiler->gpuCyclesCounter)); - - /* This counter should be equal to 0x00438. Currently it's not displayed in vAnalyzer */ - gcmkONERROR( - gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x00078, - &profiler->gpuTotalCyclesCounter)); - - if (chipModel == gcv2100 || chipModel == gcv2000 || chipModel == gcv880) - { - gcmkONERROR( - gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x00078, - &profiler->gpuIdleCyclesCounter)); - } - else - { - gcmkONERROR( - gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x0007C, - &profiler->gpuIdleCyclesCounter)); - } - - /* Read clock control register. */ - gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x00000, - &clock)); - - profiler->gpuTotalRead64BytesPerFrame = 0; - profiler->gpuTotalWrite64BytesPerFrame = 0; - profiler->pe_pixel_count_killed_by_color_pipe = 0; - profiler->pe_pixel_count_killed_by_depth_pipe = 0; - profiler->pe_pixel_count_drawn_by_color_pipe = 0; - profiler->pe_pixel_count_drawn_by_depth_pipe = 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; - - /* PE */ - 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)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, - &colorKilled)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((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, - &depthKilled)); - 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) (2) & ((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, - &colorDrawn)); - 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) (3) & ((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, - &depthDrawn)); - -#if USE_SW_RESET - totalColorKilled += colorKilled; - totalDepthKilled += depthKilled; - totalColorDrawn += colorDrawn; - totalDepthDrawn += depthDrawn; -#else - profiler->pe_pixel_count_killed_by_color_pipe += colorKilled; - profiler->pe_pixel_count_killed_by_depth_pipe += depthKilled; - profiler->pe_pixel_count_drawn_by_color_pipe += colorDrawn; - profiler->pe_pixel_count_drawn_by_depth_pipe += depthDrawn; -#endif - } - -#if USE_SW_RESET - profiler->pe_pixel_count_killed_by_color_pipe = CalcDelta(totalColorKilled, profilerHistory.pe_pixel_count_killed_by_color_pipe); - profiler->pe_pixel_count_killed_by_depth_pipe = CalcDelta(totalDepthKilled, profilerHistory.pe_pixel_count_killed_by_depth_pipe); - profiler->pe_pixel_count_drawn_by_color_pipe = CalcDelta(totalColorDrawn, profilerHistory.pe_pixel_count_drawn_by_color_pipe); - profiler->pe_pixel_count_drawn_by_depth_pipe = CalcDelta(totalDepthDrawn, profilerHistory.pe_pixel_count_drawn_by_depth_pipe); - profilerHistory.pe_pixel_count_killed_by_color_pipe = totalColorKilled; - profilerHistory.pe_pixel_count_killed_by_depth_pipe = totalDepthKilled; - profilerHistory.pe_pixel_count_drawn_by_color_pipe = totalColorDrawn; - profilerHistory.pe_pixel_count_drawn_by_depth_pipe = totalDepthDrawn; -#endif - - /* Reset clock control register. */ - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, - Hardware->core, - 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)); -#if !USE_SW_RESET - 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))) -)); -#endif - - /* SH */ - 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) (7) & ((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->ps_inst_counter)); tempCounterValue = profiler->ps_inst_counter; - profiler->ps_inst_counter = CalcDelta(profiler->ps_inst_counter, profilerHistory.ps_inst_counter); - profilerHistory.ps_inst_counter = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((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->rendered_pixel_counter)); tempCounterValue = profiler->rendered_pixel_counter; - profiler->rendered_pixel_counter = CalcDelta(profiler->rendered_pixel_counter, - profilerHistory.rendered_pixel_counter); profilerHistory.rendered_pixel_counter = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((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->vs_inst_counter)); tempCounterValue = profiler->vs_inst_counter; - profiler->vs_inst_counter = CalcDelta(profiler->vs_inst_counter, profilerHistory.vs_inst_counter); - profilerHistory.vs_inst_counter = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (10) & ((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->rendered_vertice_counter)); tempCounterValue = profiler->rendered_vertice_counter; - profiler->rendered_vertice_counter = CalcDelta(profiler->rendered_vertice_counter, - profilerHistory.rendered_vertice_counter); profilerHistory.rendered_vertice_counter = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (11) & ((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->vtx_branch_inst_counter)); tempCounterValue = profiler->vtx_branch_inst_counter; - profiler->vtx_branch_inst_counter = CalcDelta(profiler->vtx_branch_inst_counter, - profilerHistory.vtx_branch_inst_counter); profilerHistory.vtx_branch_inst_counter = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (12) & ((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->vtx_texld_inst_counter)); tempCounterValue = profiler->vtx_texld_inst_counter; - profiler->vtx_texld_inst_counter = CalcDelta(profiler->vtx_texld_inst_counter, - profilerHistory.vtx_texld_inst_counter); profilerHistory.vtx_texld_inst_counter = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (13) & ((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->pxl_branch_inst_counter)); tempCounterValue = profiler->pxl_branch_inst_counter; - profiler->pxl_branch_inst_counter = CalcDelta(profiler->pxl_branch_inst_counter, - profilerHistory.pxl_branch_inst_counter); profilerHistory.pxl_branch_inst_counter = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (14) & ((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->pxl_texld_inst_counter)); tempCounterValue = profiler->pxl_texld_inst_counter; - profiler->pxl_texld_inst_counter = CalcDelta(profiler->pxl_texld_inst_counter, - profilerHistory.pxl_texld_inst_counter); profilerHistory.pxl_texld_inst_counter = tempCounterValue; - - if (hasNewCounters) - { - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (19) & ((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->vs_non_idle_starve_count)); tempCounterValue = profiler->vs_non_idle_starve_count; - profiler->vs_non_idle_starve_count = CalcDelta(profiler->vs_non_idle_starve_count, - profilerHistory.vs_non_idle_starve_count); profilerHistory.vs_non_idle_starve_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((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->vs_starve_count)); tempCounterValue = profiler->vs_starve_count; - profiler->vs_starve_count = CalcDelta(profiler->vs_starve_count, profilerHistory.vs_starve_count); - profilerHistory.vs_starve_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (16) & ((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->vs_stall_count)); tempCounterValue = profiler->vs_stall_count; - profiler->vs_stall_count = CalcDelta(profiler->vs_stall_count, profilerHistory.vs_stall_count); - profilerHistory.vs_stall_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (21) & ((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->vs_process_count)); tempCounterValue = profiler->vs_process_count; - profiler->vs_process_count = CalcDelta(profiler->vs_process_count, profilerHistory.vs_process_count); - profilerHistory.vs_process_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (20) & ((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->ps_non_idle_starve_count)); tempCounterValue = profiler->ps_non_idle_starve_count; - profiler->ps_non_idle_starve_count = CalcDelta(profiler->ps_non_idle_starve_count, - profilerHistory.ps_non_idle_starve_count); profilerHistory.ps_non_idle_starve_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (17) & ((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->ps_starve_count)); tempCounterValue = profiler->ps_starve_count; - profiler->ps_starve_count = CalcDelta(profiler->ps_starve_count, profilerHistory.ps_starve_count); - profilerHistory.ps_starve_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (18) & ((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->ps_stall_count)); tempCounterValue = profiler->ps_stall_count; - profiler->ps_stall_count = CalcDelta(profiler->ps_stall_count, profilerHistory.ps_stall_count); - profilerHistory.ps_stall_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (22) & ((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->ps_process_count)); tempCounterValue = profiler->ps_process_count; - profiler->ps_process_count = CalcDelta(profiler->ps_process_count, profilerHistory.ps_process_count); - profilerHistory.ps_process_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (4) & ((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->shader_cycle_count)); tempCounterValue = profiler->shader_cycle_count; - profiler->shader_cycle_count = CalcDelta(profiler->shader_cycle_count, - profilerHistory.shader_cycle_count); profilerHistory.shader_cycle_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (23) & ((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->tx_non_idle_starve_count)); tempCounterValue = profiler->tx_non_idle_starve_count; - profiler->tx_non_idle_starve_count = CalcDelta(profiler->tx_non_idle_starve_count, - profilerHistory.tx_non_idle_starve_count); profilerHistory.tx_non_idle_starve_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (24) & ((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->tx_starve_count)); tempCounterValue = profiler->tx_starve_count; - profiler->tx_starve_count = CalcDelta(profiler->tx_starve_count, profilerHistory.tx_starve_count); - profilerHistory.tx_starve_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (25) & ((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->tx_stall_count)); tempCounterValue = profiler->tx_stall_count; - profiler->tx_stall_count = CalcDelta(profiler->tx_stall_count, profilerHistory.tx_stall_count); - profilerHistory.tx_stall_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (26) & ((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->tx_process_count)); tempCounterValue = profiler->tx_process_count; - profiler->tx_process_count = CalcDelta(profiler->tx_process_count, profilerHistory.tx_process_count); - profilerHistory.tx_process_count = tempCounterValue; - - } -#if !USE_SW_RESET - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~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))) -)); -#endif - - /* PA */ - 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) (3) & ((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->pa_input_vtx_counter)); tempCounterValue = profiler->pa_input_vtx_counter; - profiler->pa_input_vtx_counter = CalcDelta(profiler->pa_input_vtx_counter, - profilerHistory.pa_input_vtx_counter); profilerHistory.pa_input_vtx_counter = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (4) & ((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->pa_input_prim_counter)); tempCounterValue = profiler->pa_input_prim_counter; - profiler->pa_input_prim_counter = CalcDelta(profiler->pa_input_prim_counter, - profilerHistory.pa_input_prim_counter); profilerHistory.pa_input_prim_counter = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (5) & ((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->pa_output_prim_counter)); tempCounterValue = profiler->pa_output_prim_counter; - profiler->pa_output_prim_counter = CalcDelta(profiler->pa_output_prim_counter, - profilerHistory.pa_output_prim_counter); profilerHistory.pa_output_prim_counter = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (6) & ((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->pa_depth_clipped_counter)); tempCounterValue = profiler->pa_depth_clipped_counter; - profiler->pa_depth_clipped_counter = CalcDelta(profiler->pa_depth_clipped_counter, - profilerHistory.pa_depth_clipped_counter); profilerHistory.pa_depth_clipped_counter = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (7) & ((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->pa_trivial_rejected_counter)); tempCounterValue = profiler->pa_trivial_rejected_counter; - profiler->pa_trivial_rejected_counter = CalcDelta(profiler->pa_trivial_rejected_counter, - profilerHistory.pa_trivial_rejected_counter); profilerHistory.pa_trivial_rejected_counter = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (8) & ((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->pa_culled_counter)); tempCounterValue = profiler->pa_culled_counter; - profiler->pa_culled_counter = CalcDelta(profiler->pa_culled_counter, profilerHistory.pa_culled_counter); - profilerHistory.pa_culled_counter = tempCounterValue; - - if (hasNewCounters) - { - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (13) & ((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->pa_starve_count)); tempCounterValue = profiler->pa_starve_count; - profiler->pa_starve_count = CalcDelta(profiler->pa_starve_count, profilerHistory.pa_starve_count); - profilerHistory.pa_starve_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (14) & ((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->pa_stall_count)); tempCounterValue = profiler->pa_stall_count; - profiler->pa_stall_count = CalcDelta(profiler->pa_stall_count, profilerHistory.pa_stall_count); - profilerHistory.pa_stall_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((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->pa_process_count)); tempCounterValue = profiler->pa_process_count; - profiler->pa_process_count = CalcDelta(profiler->pa_process_count, profilerHistory.pa_process_count); - profilerHistory.pa_process_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (12) & ((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->pa_non_idle_starve_count)); tempCounterValue = profiler->pa_non_idle_starve_count; - profiler->pa_non_idle_starve_count = CalcDelta(profiler->pa_non_idle_starve_count, - profilerHistory.pa_non_idle_starve_count); profilerHistory.pa_non_idle_starve_count = tempCounterValue; - - } -#if !USE_SW_RESET - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~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))) -)); -#endif - - /* SE */ - 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))) )); -gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_triangle_count)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((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->se_culled_lines_count)); - if (hasNewCounters) - { - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (8) & ((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->se_starve_count)); - 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) (9) & ((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->se_stall_count)); - 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) (10) & ((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->se_receive_triangle_count)); - 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) (11) & ((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->se_send_triangle_count)); - 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) (12) & ((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->se_receive_lines_count)); - 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) (13) & ((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->se_send_lines_count)); - 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) (19) & ((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->se_process_count)); - 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) (20) & ((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->se_non_idle_starve_count)); - } - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~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 */ - 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))) ));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, - &profiler->ra_valid_pixel_count)); tempCounterValue = profiler->ra_valid_pixel_count; - profiler->ra_valid_pixel_count = CalcDelta(profiler->ra_valid_pixel_count, - profilerHistory.ra_valid_pixel_count); profilerHistory.ra_valid_pixel_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((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->ra_total_quad_count)); tempCounterValue = profiler->ra_total_quad_count; - profiler->ra_total_quad_count = CalcDelta(profiler->ra_total_quad_count, - profilerHistory.ra_total_quad_count); profilerHistory.ra_total_quad_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((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->ra_valid_quad_count_after_early_z)); tempCounterValue = profiler->ra_valid_quad_count_after_early_z; - profiler->ra_valid_quad_count_after_early_z = CalcDelta(profiler->ra_valid_quad_count_after_early_z, - profilerHistory.ra_valid_quad_count_after_early_z); profilerHistory.ra_valid_quad_count_after_early_z = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((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->ra_total_primitive_count)); tempCounterValue = profiler->ra_total_primitive_count; - profiler->ra_total_primitive_count = CalcDelta(profiler->ra_total_primitive_count, - profilerHistory.ra_total_primitive_count); profilerHistory.ra_total_primitive_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (9) & ((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->ra_pipe_cache_miss_counter)); tempCounterValue = profiler->ra_pipe_cache_miss_counter; - profiler->ra_pipe_cache_miss_counter = CalcDelta(profiler->ra_pipe_cache_miss_counter, - profilerHistory.ra_pipe_cache_miss_counter); profilerHistory.ra_pipe_cache_miss_counter = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (10) & ((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->ra_prefetch_cache_miss_counter)); tempCounterValue = profiler->ra_prefetch_cache_miss_counter; - profiler->ra_prefetch_cache_miss_counter = CalcDelta(profiler->ra_prefetch_cache_miss_counter, - profilerHistory.ra_prefetch_cache_miss_counter); profilerHistory.ra_prefetch_cache_miss_counter = tempCounterValue; - - if (hasNewCounters) - { - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (13) & ((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->ra_non_idle_starve_count)); tempCounterValue = profiler->ra_non_idle_starve_count; - profiler->ra_non_idle_starve_count = CalcDelta(profiler->ra_non_idle_starve_count, - profilerHistory.ra_non_idle_starve_count); profilerHistory.ra_non_idle_starve_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (14) & ((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->ra_starve_count)); tempCounterValue = profiler->ra_starve_count; - profiler->ra_starve_count = CalcDelta(profiler->ra_starve_count, profilerHistory.ra_starve_count); - profilerHistory.ra_starve_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((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->ra_stall_count)); tempCounterValue = profiler->ra_stall_count; - profiler->ra_stall_count = CalcDelta(profiler->ra_stall_count, profilerHistory.ra_stall_count); - profilerHistory.ra_stall_count = tempCounterValue; - - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (16) & ((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->ra_process_count)); tempCounterValue = profiler->ra_process_count; - profiler->ra_process_count = CalcDelta(profiler->ra_process_count, profilerHistory.ra_process_count); - profilerHistory.ra_process_count = tempCounterValue; - - } -#if !USE_SW_RESET - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~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))) -)); -#endif - - /* TX */ - 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))) )); -gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_bilinear_requests)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (1) & ((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->tx_total_trilinear_requests)); - 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) (2) & ((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->tx_total_discarded_texture_requests)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (3) & ((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->tx_total_texture_requests)); - 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) (5) & ((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->tx_mem_read_count)); - 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) (6) & ((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->tx_mem_read_in_8B_count)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((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->tx_cache_miss_count)); - 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) (8) & ((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->tx_cache_hit_texel_count)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((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->tx_cache_miss_texel_count)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~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))) -)); - - /* MC */ - 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) (1) & ((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->mc_total_read_req_8B_from_pipeline)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (2) & ((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->mc_total_read_req_8B_from_IP)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((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->mc_total_write_req_8B_from_pipeline)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~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 */ - 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))) )); -gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_read_request_stalled)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((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->hi_axi_cycles_write_request_stalled)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (2) & ((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->hi_axi_cycles_write_data_stalled)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~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))) -)); - - if (hasNewCounters) - { - /* latency */ - gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x0056C, - &mc_axi_max_min_latency)); - - gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x00570, - &profiler->mc_axi_total_latency)); - - gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x00574, - &profiler->mc_axi_sample_count)); - - /* Reset Latency counters */ - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, - Hardware->core, - 0x00568, - 0x10a)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, - Hardware->core, - 0x00568, - 0xa)); - - profiler->mc_axi_min_latency = (mc_axi_max_min_latency & 0x0fff0000) >> 16; - profiler->mc_axi_max_latency = (mc_axi_max_min_latency & 0x00000fff); - if (profiler->mc_axi_min_latency == 4095) - profiler->mc_axi_min_latency = 0; - - /* FE */ - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (10) & ((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->fe_draw_count)); - 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) (11) & ((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->fe_out_vertex_count)); - 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) (14) & ((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->fe_stall_count)); - 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) (15) & ((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->fe_starve_count)); - 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))) -)); - } - - /* Success. */ - gcmkFOOTER_NO(); - return gcvSTATUS_OK; - -OnError: - /* Return the status. */ - gcmkFOOTER(); - return status; -} -#endif - -#define gcmkUPDATE_PROFILE_DATA(data) \ - profilerHistroy->data += profiler->data - -#define gcmkUPDATE_PROFILE_DATA_PART1(data) \ - profilerHistroy_part1->data += profiler_part1->data -#define gcmkUPDATE_PROFILE_DATA_PART2(data) \ - profilerHistroy_part2->data += profiler_part2->data - -gceSTATUS -gckHARDWARE_QueryContextProfile( - IN gckHARDWARE Hardware, - IN gctBOOL Reset, - IN gckCONTEXT Context, - OUT gcsPROFILER_COUNTERS * Counters - ) -{ - gceSTATUS status; - gckCOMMAND command = Hardware->kernel->command; - gcsPROFILER_COUNTERS * profiler = Counters; - - gcmkHEADER_ARG("Hardware=0x%x Counters=0x%x", Hardware, Counters); - - /* Verify the arguments. */ - gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE); - - /* Acquire the context sequnence mutex. */ - gcmkONERROR(gckOS_AcquireMutex( - command->os, command->mutexContextSeq, gcvINFINITE - )); - - /* Read the counters. */ - gcmkVERIFY_OK(gckOS_MemCopy( - profiler, &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS) - )); - - /* Reset counters. */ - if (Reset) - { - gcmkVERIFY_OK(gckOS_ZeroMemory( - &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS) - )); - } - - gcmkVERIFY_OK(gckOS_ReleaseMutex( - command->os, command->mutexContextSeq - )); - - /* Success. */ - gcmkFOOTER_NO(); - return gcvSTATUS_OK; - -OnError: - /* Return the status. */ - gcmkFOOTER(); - return status; -} - -gceSTATUS -gckHARDWARE_UpdateContextProfile( - IN gckHARDWARE Hardware, - IN gckCONTEXT Context - ) -{ - gceSTATUS status; - gcsPROFILER_COUNTERS * profiler = &Context->latestProfiler; - gcsPROFILER_COUNTERS * profilerHistroy = &Context->histroyProfiler; - gceCHIPMODEL chipModel; - gctUINT32 chipRevision; - gctUINT32 i; - gctUINT32 resetValue = 0xF; - gctBOOL hasNewCounters = gcvFALSE; - - gcmkHEADER_ARG("Hardware=0x%x Context=0x%x", Hardware, Context); - - /* Verify the arguments. */ - gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE); - gcmkVERIFY_OBJECT(Context, gcvOBJ_CONTEXT); - - chipModel = Hardware->identity.chipModel; - chipRevision = Hardware->identity.chipRevision; - if ((chipModel == gcv5000 && chipRevision == 0x5434) || (chipModel == gcv3000 && chipRevision == 0x5435)) - { - resetValue = 0xFF; - hasNewCounters = gcvTRUE; - } - - /* Read the counters. */ - gcmkONERROR( - gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x00438, - &profiler->gpuCyclesCounter)); - gcmkUPDATE_PROFILE_DATA(gpuCyclesCounter); - - /* This counter should be equal to 0x00438. Currently it's not displayed in vAnalyzer */ - gcmkONERROR( - gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x00078, - &profiler->gpuTotalCyclesCounter)); - gcmkUPDATE_PROFILE_DATA(gpuTotalCyclesCounter); - - if (chipModel == gcv2100 || chipModel == gcv2000 || chipModel == gcv880) - { - gcmkONERROR( - gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x00078, - &profiler->gpuIdleCyclesCounter)); - } - else - { - gcmkONERROR( - gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x0007C, - &profiler->gpuIdleCyclesCounter)); - } - gcmkUPDATE_PROFILE_DATA(gpuIdleCyclesCounter); - - { - gctUINT clock; - gctUINT32 colorKilled = 0, colorDrawn = 0, depthKilled = 0, depthDrawn = 0; - gctUINT32 totalRead, totalWrite; - gctUINT32 mc_axi_max_min_latency; - - gctUINT32 temp; - - /* Read clock control register. */ - gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x00000, - &clock)); - - profiler->gpuTotalRead64BytesPerFrame = 0; - profiler->gpuTotalWrite64BytesPerFrame = 0; - profiler->pe_pixel_count_killed_by_color_pipe = 0; - profiler->pe_pixel_count_killed_by_depth_pipe = 0; - profiler->pe_pixel_count_drawn_by_color_pipe = 0; - profiler->pe_pixel_count_drawn_by_depth_pipe = 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; - - /* PE */ - 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)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, - &colorKilled)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((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, - &depthKilled)); - 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) (2) & ((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, - &colorDrawn)); - 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) (3) & ((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, - &depthDrawn)); - - profiler->pe_pixel_count_killed_by_color_pipe += colorKilled; - profiler->pe_pixel_count_killed_by_depth_pipe += depthKilled; - profiler->pe_pixel_count_drawn_by_color_pipe += colorDrawn; - profiler->pe_pixel_count_drawn_by_depth_pipe += depthDrawn; - } - - gcmkUPDATE_PROFILE_DATA(gpuTotalRead64BytesPerFrame); - gcmkUPDATE_PROFILE_DATA(gpuTotalWrite64BytesPerFrame); -#if USE_SW_RESET - gcmkRESET_PROFILE_DATA(pe_pixel_count_killed_by_color_pipe, preProfiler); - gcmkRESET_PROFILE_DATA(pe_pixel_count_killed_by_depth_pipe, preProfiler); - gcmkRESET_PROFILE_DATA(pe_pixel_count_drawn_by_color_pipe, preProfiler); - gcmkRESET_PROFILE_DATA(pe_pixel_count_drawn_by_depth_pipe, preProfiler); -#endif - gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_color_pipe); - gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_depth_pipe); - gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_color_pipe); - gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_depth_pipe); - - /* 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)); -#if !USE_SW_RESET - 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))) -)); -#endif - - /* SH */ - 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) (7) & ((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->ps_inst_counter)); - 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) (8) & ((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->rendered_pixel_counter)); - 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) (9) & ((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->vs_inst_counter)); - 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) (10) & ((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->rendered_vertice_counter)); - 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) (11) & ((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->vtx_branch_inst_counter)); - 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) (12) & ((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->vtx_texld_inst_counter)); - 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) (13) & ((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->pxl_branch_inst_counter)); - 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) (14) & ((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->pxl_texld_inst_counter)); - if (hasNewCounters) - { - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (19) & ((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->vs_non_idle_starve_count)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((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->vs_starve_count)); - 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) (16) & ((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->vs_stall_count)); - 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) (21) & ((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->vs_process_count)); - 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) (20) & ((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->ps_non_idle_starve_count)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (17) & ((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->ps_starve_count)); - 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) (18) & ((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->ps_stall_count)); - 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) (22) & ((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->ps_process_count)); - 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) (4) & ((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->shader_cycle_count)); - 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) (23) & ((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->tx_non_idle_starve_count)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (24) & ((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->tx_starve_count)); - 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) (25) & ((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->tx_stall_count)); - 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) (26) & ((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->tx_process_count)); - } -#if USE_SW_RESET - gcmkRESET_PROFILE_DATA(ps_inst_counter, preProfiler); - gcmkRESET_PROFILE_DATA(rendered_pixel_counter, preProfiler); - gcmkRESET_PROFILE_DATA(vs_inst_counter, preProfiler); - gcmkRESET_PROFILE_DATA(rendered_vertice_counter, preProfiler); - gcmkRESET_PROFILE_DATA(vtx_branch_inst_counter, preProfiler); - gcmkRESET_PROFILE_DATA(vtx_texld_inst_counter, preProfiler); - gcmkRESET_PROFILE_DATA(pxl_branch_inst_counter, preProfiler); - gcmkRESET_PROFILE_DATA(pxl_texld_inst_counter, preProfiler); - if (hasNewCounters) - { - gcmkRESET_PROFILE_DATA(vs_non_idle_starve_count, preProfiler); - gcmkRESET_PROFILE_DATA(vs_starve_count, preProfiler); - gcmkRESET_PROFILE_DATA(vs_stall_count, preProfiler); - gcmkRESET_PROFILE_DATA(vs_process_count, preProfiler); - gcmkRESET_PROFILE_DATA(ps_non_idle_starve_count, preProfiler); - gcmkRESET_PROFILE_DATA(ps_starve_count, preProfiler); - gcmkRESET_PROFILE_DATA(ps_stall_count, preProfiler); - gcmkRESET_PROFILE_DATA(ps_process_count, preProfiler); - gcmkRESET_PROFILE_DATA(shader_cycle_count, preProfiler); - gcmkRESET_PROFILE_DATA(tx_non_idle_starve_count, preProfiler); - gcmkRESET_PROFILE_DATA(tx_starve_count, preProfiler); - gcmkRESET_PROFILE_DATA(tx_stall_count, preProfiler); - gcmkRESET_PROFILE_DATA(tx_process_count, preProfiler); - } -#endif - gcmkUPDATE_PROFILE_DATA(ps_inst_counter); - gcmkUPDATE_PROFILE_DATA(rendered_pixel_counter); - gcmkUPDATE_PROFILE_DATA(vs_inst_counter); - gcmkUPDATE_PROFILE_DATA(rendered_vertice_counter); - gcmkUPDATE_PROFILE_DATA(vtx_branch_inst_counter); - gcmkUPDATE_PROFILE_DATA(vtx_texld_inst_counter); - gcmkUPDATE_PROFILE_DATA(pxl_branch_inst_counter); - gcmkUPDATE_PROFILE_DATA(pxl_texld_inst_counter); - if (hasNewCounters) - { - gcmkUPDATE_PROFILE_DATA(vs_non_idle_starve_count); - gcmkUPDATE_PROFILE_DATA(vs_starve_count); - gcmkUPDATE_PROFILE_DATA(vs_stall_count); - gcmkUPDATE_PROFILE_DATA(vs_process_count); - gcmkUPDATE_PROFILE_DATA(ps_non_idle_starve_count); - gcmkUPDATE_PROFILE_DATA(ps_starve_count); - gcmkUPDATE_PROFILE_DATA(ps_stall_count); - gcmkUPDATE_PROFILE_DATA(ps_process_count); - gcmkUPDATE_PROFILE_DATA(shader_cycle_count); - gcmkUPDATE_PROFILE_DATA(tx_non_idle_starve_count); - gcmkUPDATE_PROFILE_DATA(tx_starve_count); - gcmkUPDATE_PROFILE_DATA(tx_stall_count); - gcmkUPDATE_PROFILE_DATA(tx_process_count); - } -#if !USE_SW_RESET - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~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))) -)); -#endif - - /* PA */ - 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) (3) & ((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->pa_input_vtx_counter)); - 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) (4) & ((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->pa_input_prim_counter)); - 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) (5) & ((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->pa_output_prim_counter)); - 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) (6) & ((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->pa_depth_clipped_counter)); - 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) (7) & ((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->pa_trivial_rejected_counter)); - 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) (8) & ((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->pa_culled_counter)); - if (hasNewCounters) - { - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (12) & ((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->pa_non_idle_starve_count)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (13) & ((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->pa_starve_count)); - 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) (14) & ((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->pa_stall_count)); - 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) (15) & ((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->pa_process_count)); - } -#if USE_SW_RESET - gcmkRESET_PROFILE_DATA(pa_input_vtx_counter, preProfiler); - gcmkRESET_PROFILE_DATA(pa_input_prim_counter, preProfiler); - gcmkRESET_PROFILE_DATA(pa_output_prim_counter, preProfiler); - gcmkRESET_PROFILE_DATA(pa_depth_clipped_counter, preProfiler); - gcmkRESET_PROFILE_DATA(pa_trivial_rejected_counter, preProfiler); - gcmkRESET_PROFILE_DATA(pa_culled_counter, preProfiler); - if (hasNewCounters) - { - gcmkRESET_PROFILE_DATA(pa_non_idle_starve_count, preProfiler); - gcmkRESET_PROFILE_DATA(pa_starve_count, preProfiler); - gcmkRESET_PROFILE_DATA(pa_stall_count, preProfiler); - gcmkRESET_PROFILE_DATA(pa_process_count, preProfiler); - } -#endif - gcmkUPDATE_PROFILE_DATA(pa_input_vtx_counter); - gcmkUPDATE_PROFILE_DATA(pa_input_prim_counter); - gcmkUPDATE_PROFILE_DATA(pa_output_prim_counter); - gcmkUPDATE_PROFILE_DATA(pa_depth_clipped_counter); - gcmkUPDATE_PROFILE_DATA(pa_trivial_rejected_counter); - gcmkUPDATE_PROFILE_DATA(pa_culled_counter); - if (hasNewCounters) - { - gcmkUPDATE_PROFILE_DATA(pa_non_idle_starve_count); - gcmkUPDATE_PROFILE_DATA(pa_starve_count); - gcmkUPDATE_PROFILE_DATA(pa_stall_count); - gcmkUPDATE_PROFILE_DATA(pa_process_count); - } -#if !USE_SW_RESET - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~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))) -)); -#endif - - /* SE */ - 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))) )); -gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_triangle_count)); - gcmkUPDATE_PROFILE_DATA(se_culled_triangle_count); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((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->se_culled_lines_count)); - gcmkUPDATE_PROFILE_DATA(se_culled_lines_count); - if (hasNewCounters) - { - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (8) & ((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->se_starve_count)); - gcmkUPDATE_PROFILE_DATA(se_starve_count); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (9) & ((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->se_stall_count)); - gcmkUPDATE_PROFILE_DATA(se_stall_count); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (10) & ((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->se_receive_triangle_count)); - gcmkUPDATE_PROFILE_DATA(se_receive_triangle_count); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (11) & ((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->se_send_triangle_count)); - gcmkUPDATE_PROFILE_DATA(se_send_triangle_count); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (12) & ((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->se_receive_lines_count)); - gcmkUPDATE_PROFILE_DATA(se_receive_lines_count); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (13) & ((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->se_send_lines_count)); - gcmkUPDATE_PROFILE_DATA(se_send_lines_count); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (19) & ((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->se_process_count)); - gcmkUPDATE_PROFILE_DATA(se_process_count); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (20) & ((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->se_non_idle_starve_count)); - gcmkUPDATE_PROFILE_DATA(se_non_idle_starve_count); - } - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~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 */ - 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))) )); -gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_pixel_count)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((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->ra_total_quad_count)); - 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) (2) & ((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->ra_valid_quad_count_after_early_z)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((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->ra_total_primitive_count)); - 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) (9) & ((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->ra_pipe_cache_miss_counter)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (10) & ((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->ra_prefetch_cache_miss_counter)); - if (hasNewCounters) - { - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (13) & ((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->ra_non_idle_starve_count)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (14) & ((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->ra_starve_count)); - 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) (15) & ((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->ra_stall_count)); - 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) (16) & ((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->ra_process_count)); - } -#if USE_SW_RESET - gcmkRESET_PROFILE_DATA(ra_valid_pixel_count, preProfiler); - gcmkRESET_PROFILE_DATA(ra_total_quad_count, preProfiler); - gcmkRESET_PROFILE_DATA(ra_valid_quad_count_after_early_z, preProfiler); - gcmkRESET_PROFILE_DATA(ra_total_primitive_count, preProfiler); - gcmkRESET_PROFILE_DATA(ra_pipe_cache_miss_counter, preProfiler); - gcmkRESET_PROFILE_DATA(ra_prefetch_cache_miss_counter, preProfiler); - if (hasNewCounters) - { - gcmkRESET_PROFILE_DATA(ra_non_idle_starve_count, preProfiler); - gcmkRESET_PROFILE_DATA(ra_starve_count, preProfiler); - gcmkRESET_PROFILE_DATA(ra_stall_count, preProfiler); - gcmkRESET_PROFILE_DATA(ra_process_count, preProfiler); - } -#endif - gcmkUPDATE_PROFILE_DATA(ra_valid_pixel_count); - gcmkUPDATE_PROFILE_DATA(ra_total_quad_count); - gcmkUPDATE_PROFILE_DATA(ra_valid_quad_count_after_early_z); - gcmkUPDATE_PROFILE_DATA(ra_total_primitive_count); - gcmkUPDATE_PROFILE_DATA(ra_pipe_cache_miss_counter); - gcmkUPDATE_PROFILE_DATA(ra_prefetch_cache_miss_counter); - if (hasNewCounters) - { - gcmkUPDATE_PROFILE_DATA(ra_non_idle_starve_count); - gcmkUPDATE_PROFILE_DATA(ra_starve_count); - gcmkUPDATE_PROFILE_DATA(ra_stall_count); - gcmkUPDATE_PROFILE_DATA(ra_process_count); - } -#if !USE_SW_RESET - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? 23:16) + 1) == 32) ? ~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))) -)); -#endif - - /* TX */ - 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))) )); -gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_bilinear_requests)); - gcmkUPDATE_PROFILE_DATA(tx_total_bilinear_requests); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (1) & ((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->tx_total_trilinear_requests)); - gcmkUPDATE_PROFILE_DATA(tx_total_trilinear_requests); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (2) & ((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->tx_total_discarded_texture_requests)); - gcmkUPDATE_PROFILE_DATA(tx_total_discarded_texture_requests); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (3) & ((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->tx_total_texture_requests)); - gcmkUPDATE_PROFILE_DATA(tx_total_texture_requests); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (5) & ((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->tx_mem_read_count)); - gcmkUPDATE_PROFILE_DATA(tx_mem_read_count); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (6) & ((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->tx_mem_read_in_8B_count)); - gcmkUPDATE_PROFILE_DATA(tx_mem_read_in_8B_count); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((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->tx_cache_miss_count)); - gcmkUPDATE_PROFILE_DATA(tx_cache_miss_count); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((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->tx_cache_hit_texel_count)); - gcmkUPDATE_PROFILE_DATA(tx_cache_hit_texel_count); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:24) - (0 ? - 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((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->tx_cache_miss_texel_count)); - gcmkUPDATE_PROFILE_DATA(tx_cache_miss_texel_count); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:24) - (0 ? 31:24) + 1) == 32) ? ~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))) -)); - - /* MC */ - 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) (1) & ((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->mc_total_read_req_8B_from_pipeline)); - gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_pipeline); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (2) & ((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->mc_total_read_req_8B_from_IP)); - gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_IP); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((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->mc_total_write_req_8B_from_pipeline)); - gcmkUPDATE_PROFILE_DATA(mc_total_write_req_8B_from_pipeline); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~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))) -)); - - /* read latency counters */ - if (hasNewCounters) - { - /* latency */ - gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x0056C, - &mc_axi_max_min_latency)); - - gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x00570, - &profiler->mc_axi_total_latency)); - - gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x00574, - &profiler->mc_axi_sample_count)); - - /* Reset Latency counters */ - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, - Hardware->core, - 0x00568, - 0x10a)); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, - Hardware->core, - 0x00568, - 0xa)); - - profiler->mc_axi_min_latency = (mc_axi_max_min_latency & 0x0fff0000) >> 16; - profiler->mc_axi_max_latency = (mc_axi_max_min_latency & 0x00000fff); - if (profiler->mc_axi_min_latency == 4095) - profiler->mc_axi_min_latency = 0; - - gcmkUPDATE_PROFILE_DATA(mc_axi_min_latency); - gcmkUPDATE_PROFILE_DATA(mc_axi_max_latency); - gcmkUPDATE_PROFILE_DATA(mc_axi_total_latency); - gcmkUPDATE_PROFILE_DATA(mc_axi_sample_count); - - /* FE */ - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (10) & ((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->fe_draw_count)); - gcmkUPDATE_PROFILE_DATA(fe_draw_count); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (11) & ((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->fe_out_vertex_count)); - gcmkUPDATE_PROFILE_DATA(fe_draw_count); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (14) & ((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->fe_stall_count)); - gcmkUPDATE_PROFILE_DATA(fe_draw_count); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((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->fe_starve_count)); - gcmkUPDATE_PROFILE_DATA(fe_draw_count); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? 7:0) + 1) == 32) ? ~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))) -)); - } - - /* HI */ - 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))) )); -gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_read_request_stalled)); - gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_read_request_stalled); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((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->hi_axi_cycles_write_request_stalled)); - gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_request_stalled); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? - 15:8))) | (((gctUINT32) ((gctUINT32) (2) & ((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->hi_axi_cycles_write_data_stalled)); - gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_data_stalled); - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:8) - (0 ? 15:8) + 1) == 32) ? ~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))) -)); - } - - - - /* Success. */ - gcmkFOOTER_NO(); - return gcvSTATUS_OK; - -OnError: - /* Return the status. */ - gcmkFOOTER(); - return status; -} - - -gceSTATUS -gckHARDWARE_QueryContextNewProfile( - IN gckHARDWARE Hardware, - IN gctBOOL Reset, - IN gckCONTEXT Context, - OUT gcsPROFILER_NEW_COUNTERS_PART1 * Counters_part1, - OUT gcsPROFILER_NEW_COUNTERS_PART2 * Counters_part2 -) -{ - gceSTATUS status; - gckCOMMAND command = Hardware->kernel->command; - gcsPROFILER_NEW_COUNTERS_PART1 * profiler_part1 = Counters_part1; - gcsPROFILER_NEW_COUNTERS_PART2 * profiler_part2 = Counters_part2; - - gcmkHEADER_ARG("Hardware=0x%x Counters_part1=0x%x, Counters_part2=0x%x", Hardware, Counters_part1, Counters_part2); + gcmkHEADER_ARG("Hardware=0x%x Counters_part1=0x%x, Counters_part2=0x%x", Hardware, Counters_part1, Counters_part2); /* Verify the arguments. */ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE); @@ -10658,13 +8875,13 @@ gckHARDWARE_QueryContextNewProfile( if (Counters_part1) { gcmkVERIFY_OK(gckOS_MemCopy( - profiler_part1, &Context->histroyNewProfiler_part1, gcmSIZEOF(gcsPROFILER_NEW_COUNTERS_PART1) + profiler_part1, &Context->histroyProfiler_part1, gcmSIZEOF(gcsPROFILER_COUNTERS_PART1) )); } else if (Counters_part2) { gcmkVERIFY_OK(gckOS_MemCopy( - profiler_part2, &Context->histroyNewProfiler_part2, gcmSIZEOF(gcsPROFILER_NEW_COUNTERS_PART2) + profiler_part2, &Context->histroyProfiler_part2, gcmSIZEOF(gcsPROFILER_COUNTERS_PART2) )); } @@ -10674,13 +8891,13 @@ gckHARDWARE_QueryContextNewProfile( if (Counters_part1) { gcmkVERIFY_OK(gckOS_ZeroMemory( - &Context->histroyNewProfiler_part1, gcmSIZEOF(gcsPROFILER_NEW_COUNTERS_PART1) + &Context->histroyProfiler_part1, gcmSIZEOF(gcsPROFILER_COUNTERS_PART1) )); } else if (Counters_part2) { gcmkVERIFY_OK(gckOS_ZeroMemory( - &Context->histroyNewProfiler_part2, gcmSIZEOF(gcsPROFILER_NEW_COUNTERS_PART2) + &Context->histroyProfiler_part2, gcmSIZEOF(gcsPROFILER_COUNTERS_PART2) )); } } @@ -10700,16 +8917,16 @@ OnError: } gceSTATUS -gckHARDWARE_UpdateContextNewProfile( +gckHARDWARE_UpdateContextProfile( IN gckHARDWARE Hardware, IN gckCONTEXT Context ) { gceSTATUS status; - gcsPROFILER_NEW_COUNTERS_PART1 * profiler_part1 = &Context->latestNewProfiler_part1; - gcsPROFILER_NEW_COUNTERS_PART1 * profilerHistroy_part1 = &Context->histroyNewProfiler_part1; - gcsPROFILER_NEW_COUNTERS_PART2 * profiler_part2 = &Context->latestNewProfiler_part2; - gcsPROFILER_NEW_COUNTERS_PART2 * profilerHistroy_part2 = &Context->histroyNewProfiler_part2; + gcsPROFILER_COUNTERS_PART1 * profiler_part1 = &Context->latestProfiler_part1; + gcsPROFILER_COUNTERS_PART1 * profilerHistroy_part1 = &Context->histroyProfiler_part1; + gcsPROFILER_COUNTERS_PART2 * profiler_part2 = &Context->latestProfiler_part2; + gcsPROFILER_COUNTERS_PART2 * profilerHistroy_part2 = &Context->histroyProfiler_part2; gceCHIPMODEL chipModel; gctUINT32 chipRevision; gctUINT32 i; @@ -10864,14 +9081,14 @@ gckHARDWARE_UpdateContextNewProfile( gcmkUPDATE_PROFILE_DATA_PART2(hi_total_read_8B_count); gcmkUPDATE_PROFILE_DATA_PART2(hi_total_write_8B_count); #if USE_SW_RESET - gcmkRESET_PROFILE_DATA_PART1(pe0_pixel_count_killed_by_color_pipe, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(pe0_pixel_count_killed_by_depth_pipe, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(pe0_pixel_count_drawn_by_color_pipe, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(pe0_pixel_count_drawn_by_depth_pipe, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(pe1_pixel_count_killed_by_color_pipe, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(pe1_pixel_count_killed_by_depth_pipe, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(pe1_pixel_count_drawn_by_color_pipe, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(pe1_pixel_count_drawn_by_depth_pipe, preNewProfiler_part1); + gcmkRESET_PROFILE_DATA_PART1(pe0_pixel_count_killed_by_color_pipe); + gcmkRESET_PROFILE_DATA_PART1(pe0_pixel_count_killed_by_depth_pipe); + gcmkRESET_PROFILE_DATA_PART1(pe0_pixel_count_drawn_by_color_pipe); + gcmkRESET_PROFILE_DATA_PART1(pe0_pixel_count_drawn_by_depth_pipe); + gcmkRESET_PROFILE_DATA_PART1(pe1_pixel_count_killed_by_color_pipe); + gcmkRESET_PROFILE_DATA_PART1(pe1_pixel_count_killed_by_depth_pipe); + gcmkRESET_PROFILE_DATA_PART1(pe1_pixel_count_drawn_by_color_pipe); + gcmkRESET_PROFILE_DATA_PART1(pe1_pixel_count_drawn_by_depth_pipe); #endif gcmkUPDATE_PROFILE_DATA_PART1(pe0_pixel_count_killed_by_color_pipe); gcmkUPDATE_PROFILE_DATA_PART1(pe0_pixel_count_killed_by_depth_pipe); @@ -10888,15 +9105,11 @@ gckHARDWARE_UpdateContextNewProfile( 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)); + #if !USE_SW_RESET 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 ? @@ -11098,29 +9311,29 @@ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profile gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler_part1->tx_process_count)); } #if USE_SW_RESET - gcmkRESET_PROFILE_DATA_PART1(ps_inst_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ps_rendered_pixel_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(vs_inst_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(vs_rendered_vertice_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(vs_branch_inst_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(vs_texld_inst_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ps_branch_inst_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ps_texld_inst_counter, preNewProfiler_part1); + gcmkRESET_PROFILE_DATA_PART1(ps_inst_counter); + gcmkRESET_PROFILE_DATA_PART1(ps_rendered_pixel_counter); + gcmkRESET_PROFILE_DATA_PART1(vs_inst_counter); + gcmkRESET_PROFILE_DATA_PART1(vs_rendered_vertice_counter); + gcmkRESET_PROFILE_DATA_PART1(vs_branch_inst_counter); + gcmkRESET_PROFILE_DATA_PART1(vs_texld_inst_counter); + gcmkRESET_PROFILE_DATA_PART1(ps_branch_inst_counter); + gcmkRESET_PROFILE_DATA_PART1(ps_texld_inst_counter); if (hasNewCounters) { - gcmkRESET_PROFILE_DATA_PART1(vs_non_idle_starve_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(vs_starve_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(vs_stall_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(vs_process_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ps_non_idle_starve_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ps_starve_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ps_stall_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ps_process_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(shader_cycle_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(tx_non_idle_starve_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(tx_starve_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(tx_stall_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(tx_process_count, preNewProfiler_part1); + gcmkRESET_PROFILE_DATA_PART1(vs_non_idle_starve_count); + gcmkRESET_PROFILE_DATA_PART1(vs_starve_count); + gcmkRESET_PROFILE_DATA_PART1(vs_stall_count); + gcmkRESET_PROFILE_DATA_PART1(vs_process_count); + gcmkRESET_PROFILE_DATA_PART1(ps_non_idle_starve_count); + gcmkRESET_PROFILE_DATA_PART1(ps_starve_count); + gcmkRESET_PROFILE_DATA_PART1(ps_stall_count); + gcmkRESET_PROFILE_DATA_PART1(ps_process_count); + gcmkRESET_PROFILE_DATA_PART1(shader_cycle_count); + gcmkRESET_PROFILE_DATA_PART1(tx_non_idle_starve_count); + gcmkRESET_PROFILE_DATA_PART1(tx_starve_count); + gcmkRESET_PROFILE_DATA_PART1(tx_stall_count); + gcmkRESET_PROFILE_DATA_PART1(tx_process_count); } #endif gcmkUPDATE_PROFILE_DATA_PART1(ps_inst_counter); @@ -11238,20 +9451,20 @@ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profile gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler_part1->pa_process_count)); } #if USE_SW_RESET - gcmkRESET_PROFILE_DATA_PART1(pa_input_vtx_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(pa_input_prim_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(pa_output_prim_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(pa_depth_clipped_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(pa_trivial_rejected_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(pa_culled_prim_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(pa_droped_prim_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(pa_frustum_clipped_prim_counter, preNewProfiler_part1); + gcmkRESET_PROFILE_DATA_PART1(pa_input_vtx_counter); + gcmkRESET_PROFILE_DATA_PART1(pa_input_prim_counter); + gcmkRESET_PROFILE_DATA_PART1(pa_output_prim_counter); + gcmkRESET_PROFILE_DATA_PART1(pa_depth_clipped_counter); + gcmkRESET_PROFILE_DATA_PART1(pa_trivial_rejected_counter); + gcmkRESET_PROFILE_DATA_PART1(pa_culled_prim_counter); + gcmkRESET_PROFILE_DATA_PART1(pa_droped_prim_counter); + gcmkRESET_PROFILE_DATA_PART1(pa_frustum_clipped_prim_counter); if (hasNewCounters) { - gcmkRESET_PROFILE_DATA_PART1(pa_non_idle_starve_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(pa_starve_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(pa_stall_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(pa_process_count, preNewProfiler_part1); + gcmkRESET_PROFILE_DATA_PART1(pa_non_idle_starve_count); + gcmkRESET_PROFILE_DATA_PART1(pa_starve_count); + gcmkRESET_PROFILE_DATA_PART1(pa_stall_count); + gcmkRESET_PROFILE_DATA_PART1(pa_process_count); } #endif gcmkUPDATE_PROFILE_DATA_PART1(pa_input_vtx_counter); @@ -11476,21 +9689,21 @@ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profile gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler_part1->ra_process_count)); } #if USE_SW_RESET - gcmkRESET_PROFILE_DATA_PART1(ra_valid_pixel_count_to_render, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ra_total_quad_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ra_valid_quad_count_after_early_z, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ra_input_prim_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ra_pipe_cache_miss_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ra_prefetch_cache_miss_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ra_eez_culled_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ra_pipe_hz_cache_miss_counter, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ra_prefetch_hz_cache_miss_counter, preNewProfiler_part1); + gcmkRESET_PROFILE_DATA_PART1(ra_valid_pixel_count_to_render); + gcmkRESET_PROFILE_DATA_PART1(ra_total_quad_count); + gcmkRESET_PROFILE_DATA_PART1(ra_valid_quad_count_after_early_z); + gcmkRESET_PROFILE_DATA_PART1(ra_input_prim_count); + gcmkRESET_PROFILE_DATA_PART1(ra_pipe_cache_miss_counter); + gcmkRESET_PROFILE_DATA_PART1(ra_prefetch_cache_miss_counter); + gcmkRESET_PROFILE_DATA_PART1(ra_eez_culled_counter); + gcmkRESET_PROFILE_DATA_PART1(ra_pipe_hz_cache_miss_counter); + gcmkRESET_PROFILE_DATA_PART1(ra_prefetch_hz_cache_miss_counter); if (hasNewCounters) { - gcmkRESET_PROFILE_DATA_PART1(ra_non_idle_starve_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ra_starve_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ra_stall_count, preNewProfiler_part1); - gcmkRESET_PROFILE_DATA_PART1(ra_process_count, preNewProfiler_part1); + gcmkRESET_PROFILE_DATA_PART1(ra_non_idle_starve_count); + gcmkRESET_PROFILE_DATA_PART1(ra_starve_count); + gcmkRESET_PROFILE_DATA_PART1(ra_stall_count); + gcmkRESET_PROFILE_DATA_PART1(ra_process_count); } #endif gcmkUPDATE_PROFILE_DATA_PART1(ra_valid_pixel_count_to_render); @@ -11678,6 +9891,66 @@ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profile 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_part2->mcc_total_write_req_from_others)); + 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) (21) & ((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_part2->mc_fe_read_bandwidth)); + 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) (22) & ((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_part2->mc_mmu_read_bandwidth)); + 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) (23) & ((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_part2->mc_blt_read_bandwidth)); + 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) (24) & ((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_part2->mc_sh0_read_bandwidth)); + 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) (25) & ((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_part2->mc_sh1_read_bandwidth)); + 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) (26) & ((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_part2->mc_pe_write_bandwidth)); + 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) (27) & ((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_part2->mc_blt_write_bandwidth)); + 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) (28) & ((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_part2->mc_sh0_write_bandwidth)); + 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) (29) & ((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_part2->mc_sh1_write_bandwidth)); + + /* 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, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? @@ -11705,6 +9978,15 @@ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((g gcmkUPDATE_PROFILE_DATA_PART2(mcc_total_write_req_8B_from_others); gcmkUPDATE_PROFILE_DATA_PART2(mcc_total_read_req_from_others); gcmkUPDATE_PROFILE_DATA_PART2(mcc_total_write_req_from_others); + gcmkUPDATE_PROFILE_DATA_PART2(mc_fe_read_bandwidth); + gcmkUPDATE_PROFILE_DATA_PART2(mc_mmu_read_bandwidth); + gcmkUPDATE_PROFILE_DATA_PART2(mc_blt_read_bandwidth); + gcmkUPDATE_PROFILE_DATA_PART2(mc_sh0_read_bandwidth); + gcmkUPDATE_PROFILE_DATA_PART2(mc_sh1_read_bandwidth); + gcmkUPDATE_PROFILE_DATA_PART2(mc_pe_write_bandwidth); + gcmkUPDATE_PROFILE_DATA_PART2(mc_blt_write_bandwidth); + gcmkUPDATE_PROFILE_DATA_PART2(mc_sh0_write_bandwidth); + gcmkUPDATE_PROFILE_DATA_PART2(mc_sh1_write_bandwidth); /* read latency counters */ if (hasNewCounters) @@ -12020,15 +10302,29 @@ _ResetGPU( 0x00000, control)); - /* Set soft reset. */ - gcmkONERROR(gckOS_WriteRegisterEx(Os, - Core, - 0x00000, - ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_SECURITY_AHB) && + (Hardware->options.secureMode == gcvSECURE_IN_NORMAL)) + { + gcmkONERROR(gckOS_WriteRegisterEx(Os, + Core, + 0x003A8, + ((((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 + { + /* Set soft reset. */ + gcmkONERROR(gckOS_WriteRegisterEx(Os, + Core, + 0x00000, + ((((gctUINT32) (control)) & ~(((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))))); + } /* Wait for reset. */ gcmkONERROR(gckOS_Delay(Os, 1)); @@ -12327,7 +10623,7 @@ gckHARDWARE_DumpMMUException( gcmkHEADER_ARG("Hardware=0x%x", Hardware); #if gcdENABLE_TRUST_APPLICATION - if (Hardware->secureMode == gcvSECURE_IN_TA) + if (Hardware->options.secureMode == gcvSECURE_IN_TA) { gcmkVERIFY_OK(gckKERNEL_SecurityDumpMMUException(Hardware->kernel)); @@ -12338,7 +10634,7 @@ gckHARDWARE_DumpMMUException( } else #endif - if (Hardware->secureMode == gcvSECURE_NONE) + if (Hardware->options.secureMode == gcvSECURE_NONE) { mmuStatusRegAddress = 0x00188; mmuExceptionAddress = 0x00190; @@ -12465,7 +10761,7 @@ gckHARDWARE_HandleFault( gcmkHEADER_ARG("Hardware=0x%x", Hardware); - if (Hardware->secureMode == gcvSECURE_NONE) + if (Hardware->options.secureMode == gcvSECURE_NONE) { mmuStatusRegAddress = 0x00188; mmuExceptionAddress = 0x00190; @@ -12478,7 +10774,7 @@ gckHARDWARE_HandleFault( /* Get MMU exception address. */ #if gcdENABLE_TRUST_APPLICATION - if (Hardware->secureMode == gcvSECURE_IN_TA) + if (Hardware->options.secureMode == gcvSECURE_IN_TA) { gckKERNEL_ReadMMUException(Hardware->kernel, &mmuStatus, &address); } @@ -12522,7 +10818,7 @@ gckHARDWARE_HandleFault( gcmkONERROR(gckVIDMEM_FindVIDMEM(Hardware->kernel, address, &node, &entryValue)); #if gcdENABLE_TRUST_APPLICATION - if (Hardware->secureMode == gcvSECURE_IN_TA) + if (Hardware->options.secureMode == gcvSECURE_IN_TA) { gckKERNEL_HandleMMUException( Hardware->kernel, @@ -13555,7 +11851,9 @@ gckHARDWARE_PrepareFunctions( &endBytes )); - if (Hardware->mmuVersion > 0 && Hardware->enableMMU && Hardware->secureMode != gcvSECURE_IN_TA) + if ((Hardware->mmuVersion > 0) && + Hardware->options.enableMMU && + (Hardware->options.secureMode != gcvSECURE_IN_TA)) { gctUINT32 mmuBytes; gctPHYS_ADDR_T physical = 0; diff --git a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.h b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.h index 68a8f9bade71..8cc00eff4719 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 @@ -170,8 +170,7 @@ struct _gckHARDWARE /* Chip characteristics. */ gcsHAL_QUERY_CHIP_IDENTITY identity; - gctBOOL allowFastClear; - gctBOOL allowCompression; + gcsHAL_QUERY_CHIP_OPTIONS options; gctUINT32 powerBaseAddress; gctBOOL extraEventStates; @@ -198,11 +197,6 @@ struct _gckHARDWARE gctUINT32 mmuVersion; - /* Whether use new MMU. It is meaningless - ** for old MMU since old MMU is always enabled. - */ - gctBOOL enableMMU; - /* Type */ gceHARDWARE_TYPE type; @@ -220,10 +214,6 @@ struct _gckHARDWARE #if gcdLINK_QUEUE_SIZE struct _gckQUEUE linkQueue; #endif - - gctBOOL powerManagement; - gctBOOL gpuProfiler; - gctBOOL stallFEPrefetch; gctUINT32 minFscaleValue; @@ -258,8 +248,6 @@ struct _gckHARDWARE gcsHARDWARE_PAGETABLE_ARRAY pagetableArray; - gceSECURE_MODE secureMode; - gctUINT64 contextID; gctBOOL forcePowerOff; diff --git a/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.c b/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.c index a852913599c7..73eda6340796 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.c +++ b/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.c @@ -441,7 +441,7 @@ gckVGHARDWARE_Construct( gcmkERR_BREAK(gckOS_CreateMutex(Os, &hardware->powerMutex)); /* Enable power management by default. */ - hardware->powerManagement = gcvTRUE; + hardware->options.powerManagement = gcvTRUE; /* Return pointer to the gckVGHARDWARE object. */ *Hardware = hardware; @@ -669,6 +669,7 @@ gckVGHARDWARE_QueryChipIdentity( OUT gctUINT32 * ChipRevision, OUT gctUINT32 * ProductID, OUT gctUINT32 * EcoID, + OUT gctUINT32* CustomerID, OUT gctUINT32* ChipFeatures, OUT gctUINT32* ChipMinorFeatures, OUT gctUINT32* ChipMinorFeatures2 @@ -701,7 +702,7 @@ gckVGHARDWARE_QueryChipIdentity( { features = ((((gctUINT32) (features)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? - 0:0))) | (((gctUINT32) ((gctUINT32) (Hardware->allowFastClear) & ((gctUINT32) ((((1 ? + 0:0))) | (((gctUINT32) ((gctUINT32) (Hardware->options.allowFastClear) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))); } @@ -743,8 +744,20 @@ gckVGHARDWARE_QueryChipIdentity( *ChipMinorFeatures2 = Hardware->chipMinorFeatures2; } - *ProductID = Hardware->productID; - *EcoID = Hardware->ecoID; + if (ProductID != gcvNULL) + { + *ProductID = Hardware->productID; + } + + if (EcoID != gcvNULL) + { + *EcoID = Hardware->ecoID; + } + + if (CustomerID != gcvNULL) + { + *CustomerID = Hardware->customerID; + } gcmkFOOTER_NO(); /* Success. */ @@ -1574,7 +1587,7 @@ gckVGHARDWARE_SetFastClear( 0x00414, debug)); - Hardware->allowFastClear = Enable; + Hardware->options.allowFastClear = Enable; status = gcvFALSE; } @@ -1774,7 +1787,7 @@ gckVGHARDWARE_SetPowerManagementState( command = Hardware->kernel->command; gcmkVERIFY_OBJECT(command, gcvOBJ_COMMAND); - if (Hardware->powerManagement == gcvFALSE) + if (Hardware->options.powerManagement == gcvFALSE) { gcmkFOOTER_NO(); return gcvSTATUS_OK; @@ -2212,7 +2225,7 @@ gckVGHARDWARE_SetPowerManagement( /* Verify the arguments. */ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE); - Hardware->powerManagement = PowerManagement; + Hardware->options.powerManagement = PowerManagement; /* Success. */ gcmkFOOTER_NO(); diff --git a/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.h b/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.h index 18c50bc32dcf..c2d16cbe7128 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.h +++ b/drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.h @@ -77,7 +77,6 @@ struct _gckVGHARDWARE gctUINT32 chipFeatures; gctUINT32 chipMinorFeatures; gctUINT32 chipMinorFeatures2; - gctBOOL allowFastClear; /* Features. */ gctBOOL fe20; @@ -105,7 +104,7 @@ struct _gckVGHARDWARE gctPOINTER powerOffTimer; #endif - gctBOOL powerManagement; + gcsHAL_QUERY_CHIP_OPTIONS options; gctPOINTER featureDatabase; }; 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 9ee3a82baa04..6726a88695e9 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c @@ -105,10 +105,10 @@ gctCONST_STRING _DispatchText[] = gcmDEFINE2TEXT(gcvHAL_WRITE_REGISTER), gcmDEFINE2TEXT(gcvHAL_GET_PROFILE_SETTING), gcmDEFINE2TEXT(gcvHAL_SET_PROFILE_SETTING), - gcmDEFINE2TEXT(gcvHAL_READ_ALL_PROFILE_REGISTERS), gcmDEFINE2TEXT(gcvHAL_PROFILE_REGISTERS_2D), - gcmDEFINE2TEXT(gcvHAL_READ_ALL_PROFILE_NEW_REGISTERS), - gcmDEFINE2TEXT(gcvHAL_READ_PROFILER_NEW_REGISTER_SETTING), + gcmDEFINE2TEXT(gcvHAL_READ_ALL_PROFILE_REGISTERS_PART1), + gcmDEFINE2TEXT(gcvHAL_READ_ALL_PROFILE_REGISTERS_PART2), + gcmDEFINE2TEXT(gcvHAL_READ_PROFILER_REGISTER_SETTING), gcmDEFINE2TEXT(gcvHAL_SET_POWER_MANAGEMENT_STATE), gcmDEFINE2TEXT(gcvHAL_QUERY_POWER_MANAGEMENT_STATE), gcmDEFINE2TEXT(gcvHAL_GET_BASE_ADDRESS), @@ -135,20 +135,29 @@ gctCONST_STRING _DispatchText[] = gcmDEFINE2TEXT(gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER), gcmDEFINE2TEXT(gcvHAL_SET_FSCALE_VALUE), gcmDEFINE2TEXT(gcvHAL_GET_FSCALE_VALUE), + gcmDEFINE2TEXT(gcvHAL_EXPORT_VIDEO_MEMORY), gcmDEFINE2TEXT(gcvHAL_NAME_VIDEO_MEMORY), gcmDEFINE2TEXT(gcvHAL_IMPORT_VIDEO_MEMORY), gcmDEFINE2TEXT(gcvHAL_QUERY_RESET_TIME_STAMP), gcmDEFINE2TEXT(gcvHAL_READ_REGISTER_EX), gcmDEFINE2TEXT(gcvHAL_WRITE_REGISTER_EX), gcmDEFINE2TEXT(gcvHAL_CREATE_NATIVE_FENCE), + gcmDEFINE2TEXT(gcvHAL_WAIT_NATIVE_FENCE), gcmDEFINE2TEXT(gcvHAL_DESTROY_MMU), gcmDEFINE2TEXT(gcvHAL_SHBUF), + gcmDEFINE2TEXT(gcvHAL_GET_GRAPHIC_BUFFER_FD), gcmDEFINE2TEXT(gcvHAL_GET_VIDEO_MEMORY_FD), gcmDEFINE2TEXT(gcvHAL_CONFIG_POWER_MANAGEMENT), gcmDEFINE2TEXT(gcvHAL_WRAP_USER_MEMORY), gcmDEFINE2TEXT(gcvHAL_WAIT_FENCE), - gcmDEFINE2TEXT(gcvHAL_GET_VIDEO_MEMORY_FD), +#if gcdDEC_ENABLE_AHB + gcmDEFINE2TEXT(gcvHAL_DEC300_READ), + gcmDEFINE2TEXT(gcvHAL_DEC300_WRITE), + gcmDEFINE2TEXT(gcvHAL_DEC300_FLUSH), + gcmDEFINE2TEXT(gcvHAL_DEC300_FLUSH_WAIT), +#endif gcmDEFINE2TEXT(gcvHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY), + gcmDEFINE2TEXT(gcvHAL_QUERY_CHIP_OPTION), }; #endif @@ -545,11 +554,30 @@ gckKERNEL_Construct( if (Core == gcvCORE_VG) { + gctUINT32 contiguousBase; + gctUINT32 contiguousSize = 0; + /* Construct the gckMMU object. */ gcmkONERROR( gckVGKERNEL_Construct(Os, Context, kernel, &kernel->vg)); kernel->timeOut = gcdGPU_TIMEOUT; + + status = gckOS_QueryOption(Os, "contiguousBase", &contiguousBase); + + if (gcmIS_SUCCESS(status)) + { + status = gckOS_QueryOption(Os, "contiguousSize", &contiguousSize); + } + + if (gcmIS_SUCCESS(status) && contiguousSize) + { + gctUINT64 gpuContiguousBase; + + gcmkONERROR(gckOS_CPUPhysicalToGPUPhysical(Os, contiguousBase, &gpuContiguousBase)); + + gcmkSAFECASTPHYSADDRT(kernel->contiguousBaseAddress, gpuContiguousBase); + } } else #endif @@ -567,18 +595,10 @@ gckKERNEL_Construct( ; /* Initialize virtual command buffer. */ -#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 +#if gcdALLOC_CMD_FROM_RESERVE || gcdSECURITY || gcdDISABLE_GPU_VIRTUAL_ADDRESS || !USE_KERNEL_VIRTUAL_BUFFERS kernel->virtualCommandBuffer = gcvFALSE; +#else + kernel->virtualCommandBuffer = kernel->hardware->options.enableMMU; #endif #if gcdSHARED_PAGETABLE @@ -609,6 +629,9 @@ gckKERNEL_Construct( gcmkVERIFY_OK(gckMMU_AttachHardware(kernel->mmu, kernel->hardware)); #endif + kernel->contiguousBaseAddress = kernel->mmu->contiguousBaseAddress; + kernel->externalBaseAddress = kernel->mmu->externalBaseAddress; + /* Construct the gckCOMMAND object. */ gcmkONERROR( gckCOMMAND_Construct(kernel, &kernel->command)); @@ -657,7 +680,6 @@ gckKERNEL_Construct( /* Initialize profile setting */ kernel->profileEnable = gcvFALSE; kernel->profileCleanRegister = gcvTRUE; - kernel->profileSyncMode = gcvTRUE; #endif #if gcdANDROID_NATIVE_FENCE_SYNC @@ -973,6 +995,8 @@ gckKERNEL_AllocateLinearMemory( gctBOOL contiguous = gcvFALSE; gctBOOL cacheable = gcvFALSE; gctBOOL secure = gcvFALSE; + gctBOOL fastPools = gcvFALSE; + gctBOOL hasFastPools = gcvFALSE; gctSIZE_T bytes = Bytes; gctUINT32 handle = 0; gceDATABASE_TYPE type; @@ -990,6 +1014,11 @@ gckKERNEL_AllocateLinearMemory( contiguous = Flag & gcvALLOC_FLAG_CONTIGUOUS; cacheable = Flag & gcvALLOC_FLAG_CACHEABLE; secure = Flag & gcvALLOC_FLAG_SECURITY; + if (Flag & gcvALLOC_FLAG_FAST_POOLS) + { + fastPools = gcvTRUE; + Flag &= ~gcvALLOC_FLAG_FAST_POOLS; + } #if gcdALLOC_ON_FAULT if (Type == gcvSURF_RENDER_TARGET) @@ -1091,6 +1120,7 @@ AllocateMemory: else #endif { + hasFastPools = gcvTRUE; status = gckVIDMEM_AllocateLinear(Kernel, videoMemory, Bytes, @@ -1126,6 +1156,13 @@ AllocateMemory: else if (pool == gcvPOOL_SYSTEM) { + /* Do not go ahead to try relative slow pools */ + if (fastPools && hasFastPools) + { + status = gcvSTATUS_OUT_OF_MEMORY; + break; + } + /* Advance to contiguous memory. */ pool = gcvPOOL_CONTIGUOUS; } @@ -1208,6 +1245,7 @@ AllocateMemory: gcvNULL, bytes)); + /* Return status. */ gcmkFOOTER_ARG("*Pool=%d *Node=0x%x", *Pool, *Node); return gcvSTATUS_OK; @@ -1225,12 +1263,6 @@ OnError: gcmkVERIFY_OK(gckVIDMEM_Free(Kernel, node)); } - /* For some case like chrome with webgl test, it needs too much memory so that it invokes oom_killer - * And the case is killed by oom_killer, the user wants not to see the crash and hope the case iteself handles the condition - * So the patch reports the out_of_memory to the case */ - if ( status == gcvSTATUS_OUT_OF_MEMORY && (Flag & gcvALLOC_FLAG_MEMLIMIT) ) - gcmkPRINT("The running case is out_of_memory"); - /* Return the status. */ gcmkFOOTER(); return status; @@ -1385,6 +1417,7 @@ gckKERNEL_LockVideoMemory( Core, FromUser, Interface->u.LockVideoMemory.address, + node->VidMem.pool, &pointer)); Interface->u.LockVideoMemory.memory = gcmPTR_TO_UINT64(pointer); @@ -1486,35 +1519,25 @@ gckKERNEL_UnlockVideoMemory( { gceSTATUS status; gckVIDMEM_NODE nodeObject; -#if gcdSECURE_USER gcuVIDMEM_NODE_PTR node; -#endif + gctSIZE_T bytes; gcmkHEADER_ARG("Kernel=0x%08X ProcessID=%d", Kernel, ProcessID); + Interface->u.UnlockVideoMemory.pool = gcvPOOL_UNKNOWN; + Interface->u.UnlockVideoMemory.bytes = 0; + gcmkONERROR(gckVIDMEM_HANDLE_Lookup( Kernel, ProcessID, (gctUINT32)Interface->u.UnlockVideoMemory.node, &nodeObject)); -#if gcdSECURE_USER node = nodeObject->node; - - /* Unlock video memory. */ - /* Save node information before it disappears. */ - if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM) - { - logical = gcvNULL; - bytes = 0; - } - else - { - logical = node->Virtual.logical; - bytes = node->Virtual.bytes; - } -#endif + bytes = (node->VidMem.memory->object.type == gcvOBJ_VIDMEM) + ? node->VidMem.bytes + : node->Virtual.bytes; /* Unlock video memory. */ gcmkONERROR(gckVIDMEM_Unlock( @@ -1525,15 +1548,18 @@ gckKERNEL_UnlockVideoMemory( #if gcdSECURE_USER /* Flush the translation cache for virtual surfaces. */ - if (logical != gcvNULL) + if (node->VidMem.memory->object.type != gcvOBJ_VIDMEM) { gcmkVERIFY_OK(gckKERNEL_FlushTranslationCache(Kernel, cache, - logical, + node->Virtual.logical, bytes)); } #endif + Interface->u.UnlockVideoMemory.pool = nodeObject->pool; + Interface->u.UnlockVideoMemory.bytes = (gctUINT)bytes; + gcmkFOOTER_NO(); return gcvSTATUS_OK; @@ -1602,6 +1628,94 @@ gckKERNEL_BottomHalfUnlockVideoMemory( return gcvSTATUS_OK; } +/******************************************************************************* +** +** gckKERNEL_QueryVidMemPoolNodes +** +** Loop all databases to query used memory nodes of a specific pool. +** +** INPUT: +** +** Pool The memory pool for query. + +** TotalSize Total size of the used contiguous memory. +** +** MemoryBlocks Used contiguous memory block info. +** +** NumMaxBlock The count of memory blocks array provided by the caller. +** +** NumBlocks The actual number of memory blocks returned. +** +** OUTPUT: +** +** Error status. Should always be gcvSTATUS_SUCCESS since a query should always succeed. +*/ +gceSTATUS +gckKERNEL_QueryVidMemPoolNodes( + gckKERNEL Kernel, + gcePOOL Pool, + gctUINT32 * TotalSize, + gcsContiguousBlock * MemoryBlocks, + gctUINT32 NumMaxBlocks, + gctUINT32 * NumBlocks + ) +{ + gceSTATUS status = gcvSTATUS_OK; + gctINT i; + gctINT bcount; + gctUINT32 num_blocks = 0; + gctSIZE_T total_size = 0; + gckVIDMEM memory; + gcuVIDMEM_NODE_PTR nodes, node; + + do + { + /* Get the heap and nodes. */ + status = gckKERNEL_GetVideoMemoryPool(Kernel, Pool, &memory); + if (status != gcvSTATUS_OK) + break; + + status = gckVIDMEM_QueryNodes(Kernel, Pool, &bcount, &nodes); + if (status != gcvSTATUS_OK) + break; + + /* Iterate all nodes. */ + for (i = 0; i < bcount; i++) + { + node = nodes[i].VidMem.next; + do + { + if (node == gcvNULL) + { + break; + } + + /* Is it in the "free" list? */ + if (node->VidMem.nextFree == gcvNULL) + { + if (num_blocks < NumMaxBlocks) + { + MemoryBlocks[num_blocks].ptr = (gctUINT32)node->VidMem.offset + memory->baseAddress; + MemoryBlocks[num_blocks].size = node->VidMem.bytes; + } + total_size += node->VidMem.bytes; + num_blocks++; + } + + node = node->VidMem.next; + } while (node != &nodes[i]); + } + } + while (gcvFALSE); + + if (TotalSize != gcvNULL) + *TotalSize = (gctUINT32)total_size; + + if (NumBlocks != gcvNULL) + *NumBlocks = num_blocks; + + return status; +} gceSTATUS gckKERNEL_QueryDatabase( @@ -1702,66 +1816,6 @@ OnError: return status; } -gceSTATUS -gckKERNEL_WrapUserMemory( - IN gckKERNEL Kernel, - IN gctUINT32 ProcessID, - IN gcsUSER_MEMORY_DESC_PTR Desc, - OUT gctUINT32 * Node - ) -{ - gceSTATUS status; - gcuVIDMEM_NODE_PTR node = gcvNULL; - gctUINT32 handle; - gceDATABASE_TYPE databaseRecordType; - - gcmkHEADER_ARG("Kernel=0x%X Desc=%x", Kernel, Desc); - - gcmkONERROR(gckVIDMEM_ConstructVirtualFromUserMemory( - Kernel, - Desc, - &node - )); - - /* Allocate handle for this video memory. */ - gcmkONERROR(gckVIDMEM_NODE_Allocate( - Kernel, - node, - gcvSURF_BITMAP, - gcvPOOL_VIRTUAL, - &handle - )); - - /* Wrapped node is treated as gcvPOOL_VIRTUAL, but in statistic view, - * it is gcvPOOL_USER. - */ - databaseRecordType - = gcvDB_VIDEO_MEMORY - | (gcvSURF_BITMAP << gcdDB_VIDEO_MEMORY_TYPE_SHIFT) - | (gcvPOOL_VIRTUAL << gcdDB_VIDEO_MEMORY_POOL_SHIFT) - ; - - /* Record in process db. */ - gcmkONERROR(gckKERNEL_AddProcessDB( - Kernel, - ProcessID, - databaseRecordType, - gcmINT2PTR(handle), - gcvNULL, - node->Virtual.bytes - )); - - /* Return handle of the node. */ - *Node = handle; - - gcmkFOOTER_NO(); - return gcvSTATUS_OK; - -OnError: - gcmkFOOTER(); - return status; -} - gceSTATUS gckKERNEL_WaitFence( IN gckKERNEL Kernel, @@ -1835,6 +1889,127 @@ OnError: return status; } +#ifdef __linux__ + +typedef struct _gcsGRRAPHIC_BUFFER_PARCLE +{ + gcsFDPRIVATE base; + gckKERNEL kernel; + + gckVIDMEM_NODE node[3]; + gctSHBUF shBuf; + gctINT32 signal; +} +gcsGRAPHIC_BUFFER_PARCLE; + +static void +_ReleaseGraphicBuffer( + gckKERNEL Kernel, + gcsGRAPHIC_BUFFER_PARCLE * Parcle + ) +{ + gctUINT i; + + for (i = 0; i < 3; i++) + { + if (Parcle->node[i]) + { + gckVIDMEM_NODE_Dereference(Kernel, Parcle->node[i]); + } + } + + if (Parcle->shBuf) + { + gckKERNEL_DestroyShBuffer(Kernel, Parcle->shBuf); + } + + if (Parcle->signal) + { + gckOS_DestroyUserSignal(Kernel->os, Parcle->signal); + } + + gcmkOS_SAFE_FREE(Kernel->os, Parcle); +} + +static gctINT +_FdReleaseGraphicBuffer( + gcsFDPRIVATE_PTR Private + ) +{ + gcsGRAPHIC_BUFFER_PARCLE * parcle = (gcsGRAPHIC_BUFFER_PARCLE *) Private; + + _ReleaseGraphicBuffer(parcle->kernel, parcle); + return 0; +} + +static gceSTATUS +_GetGraphicBufferFd( + IN gckKERNEL Kernel, + IN gctUINT32 ProcessID, + IN gctUINT32 Node[3], + IN gctUINT64 ShBuf, + IN gctUINT64 Signal, + OUT gctINT32 * Fd + ) +{ + gceSTATUS status; + gctUINT i; + gcsGRAPHIC_BUFFER_PARCLE * parcle = gcvNULL; + + gcmkONERROR(gckOS_Allocate( + Kernel->os, + gcmSIZEOF(gcsGRAPHIC_BUFFER_PARCLE), + (gctPOINTER *)&parcle + )); + + gckOS_ZeroMemory(parcle, sizeof(gcsGRAPHIC_BUFFER_PARCLE)); + + parcle->base.release = _FdReleaseGraphicBuffer; + parcle->kernel = Kernel; + + for (i = 0; i < 3; i++) + { + if (Node[i] != 0) + { + gcmkONERROR( + gckVIDMEM_HANDLE_LookupAndReference(Kernel, Node[i], &parcle->node[i])); + } + } + + if (ShBuf) + { + gctSHBUF shBuf = gcmUINT64_TO_PTR(ShBuf); + + gcmkONERROR(gckKERNEL_MapShBuffer(Kernel, shBuf)); + parcle->shBuf = shBuf; + } + + if (Signal) + { + gctSIGNAL signal = gcmUINT64_TO_PTR(Signal); + + gcmkONERROR( + gckOS_MapSignal(Kernel->os, + signal, + (gctHANDLE)(gctUINTPTR_T)ProcessID, + &signal)); + + parcle->signal= (gctINT32)Signal; + } + + gcmkONERROR(gckOS_GetFd("viv-gr", &parcle->base, Fd)); + + return gcvSTATUS_OK; + +OnError: + if (parcle) + { + _ReleaseGraphicBuffer(Kernel, parcle); + } + return status; +} +#endif + /******************************************************************************* ** ** gckKERNEL_Dispatch @@ -2173,12 +2348,12 @@ gckKERNEL_Dispatch( } gcmkONERROR(gckEVENT_Commit( - Kernel->asyncEvent, gcmUINT64_TO_PTR(Interface->u.Event.queue))); + Kernel->asyncEvent, gcmUINT64_TO_PTR(Interface->u.Event.queue), gcvFALSE)); } else { gcmkONERROR(gckEVENT_Commit( - Kernel->eventObj, gcmUINT64_TO_PTR(Interface->u.Event.queue))); + Kernel->eventObj, gcmUINT64_TO_PTR(Interface->u.Event.queue), gcvFALSE)); } gcmkONERROR(gckOS_ReleaseMutex(Kernel->os, Kernel->device->commitMutex)); @@ -2210,12 +2385,12 @@ gckKERNEL_Dispatch( gcmkONERROR(gckEVENT_Commit( Kernel->asyncEvent, - gcmUINT64_TO_PTR(Interface->u.Commit.queue) + gcmUINT64_TO_PTR(Interface->u.Commit.queue), + gcvFALSE )); } else { - /* XXX: Workaround nxp dual GPU hang issue, bug #17898, Jira IMX-603. */ if (Interface->u.Commit.count > 1 && Interface->engine == gcvENGINE_RENDER) { gctUINT32 i; @@ -2236,7 +2411,6 @@ gckKERNEL_Dispatch( gcmNAME_TO_PTR(Interface->u.Commit.contexts[0]) : gcvNULL, gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffers[0]), gcmUINT64_TO_PTR(Interface->u.Commit.deltas[0]), - gcmUINT64_TO_PTR(Interface->u.Commit.queue), processID, Interface->u.Commit.shared, Interface->u.Commit.index, @@ -2249,6 +2423,16 @@ gckKERNEL_Dispatch( gcmkONERROR(status); } + /* Force an event if powerManagement is on. */ + status = gckEVENT_Commit(Kernel->eventObj, + gcmUINT64_TO_PTR(Interface->u.Commit.queue), + Kernel->hardware->options.powerManagement); + + if (status != gcvSTATUS_INTERRUPTED) + { + gcmkONERROR(status); + } + if (Interface->u.Commit.count > 1 && Interface->engine == gcvENGINE_RENDER) { gctUINT32 i; @@ -2264,7 +2448,6 @@ gckKERNEL_Dispatch( Interface->u.Commit.commandBuffers[i] ? gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffers[i]) : gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffers[0]), gcmUINT64_TO_PTR(Interface->u.Commit.deltas[i]), - gcvNULL, processID, Interface->u.Commit.shared, Interface->u.Commit.commandBuffers[i] ? @@ -2277,6 +2460,16 @@ gckKERNEL_Dispatch( { gcmkONERROR(status); } + + /* Force an event if powerManagement is on. */ + status = gckEVENT_Commit(kernel->eventObj, + gcvNULL, + kernel->hardware->options.powerManagement); + + if (status != gcvSTATUS_INTERRUPTED) + { + gcmkONERROR(status); + } } } } @@ -2474,71 +2667,31 @@ gckKERNEL_Dispatch( #endif break; - case gcvHAL_READ_ALL_PROFILE_REGISTERS: -#if VIVANTE_PROFILER - if (Kernel->profileSyncMode) - { - /* Read profile data according to the context. */ - gcmkONERROR( - gckHARDWARE_QueryContextProfile( - Kernel->hardware, - Kernel->profileCleanRegister, - gcmNAME_TO_PTR(Interface->u.RegisterProfileData.context), - &Interface->u.RegisterProfileData.counters)); - } - else - { - /* Read all 3D profile registers. */ - gcmkONERROR( - gckHARDWARE_QueryProfileRegisters( - Kernel->hardware, - Kernel->profileCleanRegister, - &Interface->u.RegisterProfileData.counters)); - } -#elif VIVANTE_PROFILER - /* Read all 3D profile registers. */ + case gcvHAL_READ_ALL_PROFILE_REGISTERS_PART1: + /* Read profile data according to the context. */ gcmkONERROR( - gckHARDWARE_QueryProfileRegisters( + gckHARDWARE_QueryContextProfile( Kernel->hardware, Kernel->profileCleanRegister, - &Interface->u.RegisterProfileData.counters)); -#else - status = gcvSTATUS_OK; -#endif - break; - - case gcvHAL_READ_ALL_PROFILE_NEW_REGISTERS_PART1: - if (Kernel->profileSyncMode) - { - /* Read profile data according to the context. */ - gcmkONERROR( - gckHARDWARE_QueryContextNewProfile( - Kernel->hardware, - Kernel->profileCleanRegister, - gcmNAME_TO_PTR(Interface->u.RegisterProfileNewData_part1.context), - &Interface->u.RegisterProfileNewData_part1.newCounters, - gcvNULL)); - } + gcmNAME_TO_PTR(Interface->u.RegisterProfileData_part1.context), + &Interface->u.RegisterProfileData_part1.Counters, + gcvNULL)); break; - case gcvHAL_READ_ALL_PROFILE_NEW_REGISTERS_PART2: - if (Kernel->profileSyncMode) - { - /* Read profile data according to the context. */ - gcmkONERROR( - gckHARDWARE_QueryContextNewProfile( - Kernel->hardware, - Kernel->profileCleanRegister, - gcmNAME_TO_PTR(Interface->u.RegisterProfileNewData_part2.context), - gcvNULL, - &Interface->u.RegisterProfileNewData_part2.newCounters)); - } + case gcvHAL_READ_ALL_PROFILE_REGISTERS_PART2: + /* Read profile data according to the context. */ + gcmkONERROR( + gckHARDWARE_QueryContextProfile( + Kernel->hardware, + Kernel->profileCleanRegister, + gcmNAME_TO_PTR(Interface->u.RegisterProfileData_part2.context), + gcvNULL, + &Interface->u.RegisterProfileData_part2.Counters)); break; case gcvHAL_GET_PROFILE_SETTING: #if VIVANTE_PROFILER /* Get profile setting */ Interface->u.GetProfileSetting.enable = Kernel->profileEnable; - Interface->u.GetProfileSetting.syncMode = Kernel->profileSyncMode; #endif status = gcvSTATUS_OK; @@ -2547,10 +2700,9 @@ gckKERNEL_Dispatch( case gcvHAL_SET_PROFILE_SETTING: #if VIVANTE_PROFILER /* Set profile setting */ - if(Kernel->hardware->gpuProfiler) + if(Kernel->hardware->options.gpuProfiler) { Kernel->profileEnable = Interface->u.SetProfileSetting.enable; - Kernel->profileSyncMode = Interface->u.SetProfileSetting.syncMode; if (Kernel->profileEnable) { @@ -2568,7 +2720,7 @@ gckKERNEL_Dispatch( status = gcvSTATUS_OK; break; - case gcvHAL_READ_PROFILER_NEW_REGISTER_SETTING: + case gcvHAL_READ_PROFILER_REGISTER_SETTING: Kernel->profileCleanRegister = Interface->u.SetProfilerRegisterClear.bclear; status = gcvSTATUS_OK; break; @@ -2825,6 +2977,15 @@ gckKERNEL_Dispatch( #endif break; + case gcvHAL_EXPORT_VIDEO_MEMORY: + /* Unlock video memory. */ + gcmkONERROR(gckVIDMEM_NODE_Export(Kernel, + Interface->u.ExportVideoMemory.node, + Interface->u.ExportVideoMemory.flags, + gcvNULL, + &Interface->u.ExportVideoMemory.fd)); + break; + case gcvHAL_NAME_VIDEO_MEMORY: gcmkONERROR(gckVIDMEM_NODE_Name(Kernel, Interface->u.NameVideoMemory.handle, @@ -3006,18 +3167,36 @@ gckKERNEL_Dispatch( } break; +#ifdef __linux__ + case gcvHAL_GET_GRAPHIC_BUFFER_FD: + gcmkONERROR(_GetGraphicBufferFd( + Kernel, + processID, + Interface->u.GetGraphicBufferFd.node, + Interface->u.GetGraphicBufferFd.shBuf, + Interface->u.GetGraphicBufferFd.signal, + &Interface->u.GetGraphicBufferFd.fd + )); + break; +#endif + case gcvHAL_CONFIG_POWER_MANAGEMENT: gcmkONERROR(gckKERNEL_ConfigPowerManagement(Kernel, Interface)); break; case gcvHAL_WRAP_USER_MEMORY: - gcmkONERROR(gckKERNEL_WrapUserMemory( - Kernel, - processID, - &Interface->u.WrapUserMemory.desc, - &Interface->u.WrapUserMemory.node - )); + gcmkONERROR(gckVIDMEM_NODE_WrapUserMemory(Kernel, + &Interface->u.WrapUserMemory.desc, + &Interface->u.WrapUserMemory.node)); + + gcmkONERROR( + gckKERNEL_AddProcessDB(Kernel, + processID, + gcvDB_VIDEO_MEMORY, + gcmINT2PTR(Interface->u.WrapUserMemory.node), + gcvNULL, + 0)); break; case gcvHAL_WAIT_FENCE: @@ -3066,6 +3245,14 @@ gckKERNEL_Dispatch( #endif + case gcvHAL_QUERY_CHIP_OPTION: + /* Query chip options. */ + gcmkONERROR( + gckHARDWARE_QueryChipOptions( + Kernel->hardware, + &Interface->u.QueryChipOptions)); + break; + default: /* Invalid command. */ gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); @@ -4323,7 +4510,7 @@ gckKERNEL_AllocateVirtualMemory( &buffer->gpuAddress)); #if gcdENABLE_TRUST_APPLICATION - if (Kernel->hardware->secureMode == gcvSECURE_IN_TA) + if (Kernel->hardware->options.secureMode == gcvSECURE_IN_TA) { gcmkONERROR(gckKERNEL_MapInTrustApplicaiton( Kernel, @@ -5709,6 +5896,7 @@ gckDEVICE_Construct( { device->coreInfoArray[i].type = gcvHARDWARE_INVALID; } + device->defaultHwType = gcvHARDWARE_INVALID; gckOS_ZeroMemory(device, gcmSIZEOF(gcsDEVICE)); @@ -5749,6 +5937,7 @@ gckDEVICE_AddCore( gctUINT32 i; gcsCORE_LIST *coreList; gceHARDWARE_TYPE kernelType; + gceHARDWARE_TYPE defaultHwType; gckKERNEL kernel; gcmkASSERT(Device->coreNum < gcvCORE_COUNT); @@ -5806,15 +5995,27 @@ gckDEVICE_AddCore( /* Setup gceHARDWARE_TYPE to gceCORE mapping. */ coreList->kernels[coreList->num++] = kernel; + defaultHwType = kernelType; if (kernelType == gcvHARDWARE_3D2D) { coreList = &Device->map[gcvHARDWARE_3D]; coreList->kernels[coreList->num++] = kernel; + defaultHwType = gcvHARDWARE_3D; } /* Advance total core number. */ Device->coreNum++; + /* Default HW type was chosen: 3D > 2D > VG */ + if (Device->defaultHwType == gcvHARDWARE_INVALID) + { + Device->defaultHwType = defaultHwType; + } + else if (Device->defaultHwType > defaultHwType) + { + Device->defaultHwType = defaultHwType; + } + return gcvSTATUS_OK; OnError: 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 fa0c29703b1e..55fcc8919ef4 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h @@ -255,6 +255,12 @@ typedef struct _gcsDATABASE /* Process ID. */ gctUINT32 processID; + /* Open-Close ref count */ + gctPOINTER refs; + + /* Already mark for delete and cannot reenter */ + gctBOOL deleted; + /* Sizes to query. */ gcsDATABASE_COUNTERS vidMem; gcsDATABASE_COUNTERS nonPaged; @@ -580,8 +586,6 @@ struct _gckKERNEL #if VIVANTE_PROFILER /* Enable profiling */ gctBOOL profileEnable; - /* profiling sync mode*/ - gctBOOL profileSyncMode; /* Clear profile register or not*/ gctBOOL profileCleanRegister; #endif @@ -641,7 +645,7 @@ struct _gckKERNEL gctUINT32 lastCommitStamp; gctUINT32 timer; gctUINT32 restoreAddress; - gctINT32 restoreMask; + gctINT32 restoreMask; /* 3DBLIT */ gckASYNC_COMMAND asyncCommand; @@ -651,6 +655,9 @@ struct _gckKERNEL gckDEVICE device; gctUINT chipID; + + gctUINT32 contiguousBaseAddress; + gctUINT32 externalBaseAddress; }; struct _FrequencyHistory @@ -1064,6 +1071,9 @@ struct _gckVIDMEM /* Pointer to gckOS object. */ gckOS os; + /* mdl record pointer... a kmalloc address. Process agnostic. */ + gctPHYS_ADDR physical; + /* Information for this video memory heap. */ gctUINT32 baseAddress; gctSIZE_T bytes; @@ -1088,6 +1098,9 @@ typedef struct _gcsVIDMEM_NODE /* Pointer to gcuVIDMEM_NODE. */ gcuVIDMEM_NODE_PTR node; + /* Pointer to gckKERNEL object. */ + gckKERNEL kernel; + /* Mutex to protect node. */ gctPOINTER mutex; @@ -1097,6 +1110,9 @@ typedef struct _gcsVIDMEM_NODE /* Name for client to import. */ gctUINT32 name; + /* dma_buf */ + gctPOINTER dmabuf; + #if gcdPROCESS_ADDRESS_SPACE /* Head of mapping list. */ gcsGPU_MAP_PTR mapHead; @@ -1170,6 +1186,7 @@ typedef struct _gcsDEVICE gcsCORE_INFO coreInfoArray[gcvCORE_COUNT]; gctUINT32 coreNum; gcsCORE_LIST map[gcvHARDWARE_NUM_TYPES]; + gceHARDWARE_TYPE defaultHwType; gckOS os; @@ -1230,18 +1247,27 @@ gckVIDMEM_NODE_Dereference( IN gckVIDMEM_NODE Node ); +gceSTATUS +gckVIDMEM_NODE_Export( + IN gckKERNEL Kernel, + IN gctUINT32 Handle, + IN gctINT32 Flags, + OUT gctPOINTER *DmaBuf, + OUT gctINT32 *FD + ); + gceSTATUS gckVIDMEM_NODE_Name( IN gckKERNEL Kernel, IN gctUINT32 Handle, - IN gctUINT32 * Name + OUT gctUINT32 * Name ); gceSTATUS gckVIDMEM_NODE_Import( IN gckKERNEL Kernel, IN gctUINT32 Name, - IN gctUINT32 * Handle + OUT gctUINT32 * Handle ); gceSTATUS @@ -1267,10 +1293,10 @@ gckVIDMEM_HANDLE_Lookup( ); gceSTATUS -gckVIDMEM_ConstructVirtualFromUserMemory( +gckVIDMEM_NODE_WrapUserMemory( IN gckKERNEL Kernel, IN gcsUSER_MEMORY_DESC_PTR Desc, - OUT gcuVIDMEM_NODE_PTR * Node + OUT gctUINT32 * Handle ); gceSTATUS @@ -1281,6 +1307,13 @@ gckVIDMEM_FindVIDMEM( OUT gctUINT32_PTR PageTableEntryValue ); +gceSTATUS +gckVIDMEM_QueryNodes( + IN gckKERNEL Kernel, + IN gcePOOL Pool, + OUT gctINT32 *Count, + OUT gcuVIDMEM_NODE_PTR *Nodes + ); #if gcdPROCESS_ADDRESS_SPACE gceSTATUS @@ -1355,6 +1388,9 @@ struct _gckMMU struct _gckQUEUE recentFreedAddresses; gcsADDRESS_AREA area[gcvADDRESS_AREA_COUNT]; + + gctUINT32 contiguousBaseAddress; + gctUINT32 externalBaseAddress; }; typedef struct _gcsASYNC_COMMAND 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 1dc58f3c8e27..2044cf1de7bb 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 @@ -1762,7 +1762,6 @@ gckCOMMAND_Commit( IN gckCONTEXT Context, IN gcoCMDBUF CommandBuffer, IN gcsSTATE_DELTA_PTR StateDelta, - IN gcsQUEUE_PTR EventQueue, IN gctUINT32 ProcessID, IN gctBOOL Shared, IN gctUINT32 Index, @@ -1775,8 +1774,6 @@ gckCOMMAND_Commit( gctBOOL contextAcquired = gcvFALSE; gckHARDWARE hardware; gctBOOL needCopy = gcvFALSE; - gcsQUEUE_PTR eventRecord = gcvNULL; - gcsQUEUE_PTR nextEventRecord; gctBOOL commandBufferMapped = gcvFALSE; gcoCMDBUF commandBufferObject = gcvNULL; gctBOOL stall = gcvFALSE; @@ -1784,12 +1781,11 @@ gckCOMMAND_Commit( #if !gcdNULL_DRIVER gcsCONTEXT_PTR contextBuffer; + struct _gcoCMDBUF _commandBufferObject; gctPHYS_ADDR_T commandBufferPhysical; gctUINT8_PTR commandBufferLogical = gcvNULL; gctUINT32 commandBufferAddress = 0; - gctUINT8_PTR commandBufferLink = gcvNULL; gctUINT8_PTR commandBufferTail = gcvNULL; - gctUINT8_PTR commandBufferFence = gcvNULL; gctUINT commandBufferSize; gctSIZE_T nopBytes; gctUINT32 pipeBytes; @@ -1812,9 +1808,6 @@ gckCOMMAND_Commit( gctPOINTER waitLinkLogical; gctUINT32 waitLinkAddress; gctUINT32 waitLinkBytes; - gctUINT32 waitPhysical; - gctPOINTER waitLogical; - gctUINT32 waitAddress; gctUINT32 waitOffset; gctUINT32 waitSize; @@ -1841,10 +1834,10 @@ gckCOMMAND_Commit( gckVIRTUAL_COMMAND_BUFFER_PTR virtualCommandBuffer = gcvNULL; gctUINT64 asyncCommandStamp = 0; gcoCMDBUF lastCommandBuffer = gcvNULL; -#endif - gctPOINTER pointer = gcvNULL; +#endif + gcmkHEADER_ARG( "Command=0x%x CommandBuffer=0x%x ProcessID=%d", Command, CommandBuffer, ProcessID @@ -1902,8 +1895,7 @@ gckCOMMAND_Commit( #else if (needCopy) { - gcmkONERROR(gckOS_Allocate(Command->os, gcmSIZEOF(struct _gcoCMDBUF), &pointer)); - commandBufferObject = pointer; + commandBufferObject = &_commandBufferObject; gcmkONERROR(gckOS_CopyFromUserData( Command->os, @@ -2286,11 +2278,6 @@ gckCOMMAND_Commit( &waitSize )); - /* Compute the location if WAIT command. */ - waitPhysical = waitLinkPhysical + waitOffset; - waitLogical = (gctUINT8_PTR) waitLinkLogical + waitOffset; - waitAddress = waitLinkAddress + waitOffset; - #if gcdNONPAGED_MEMORY_CACHEABLE /* Flush the command queue cache. */ gcmkONERROR(gckOS_CacheClean( @@ -2309,33 +2296,21 @@ gckCOMMAND_Commit( + commandBufferSize - commandBufferObject->reservedTail; - if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_FENCE_64BIT)) - { - /* Determine the location of the FENCE command in the command buffer. */ - commandBufferFence = commandBufferTail; - - /* Determine the location of the LINK command in the command buffer. */ - commandBufferLink = commandBufferTail + gcdRENDER_FENCE_LENGTH; - } - else - { - /* Determine the location of the LINK command in the command buffer. */ - commandBufferLink = commandBufferTail; - } - /* Generate command which writes out commit stamp. */ - if (commandBufferFence) + if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_FENCE_64BIT)) { gctUINT32 bytes; gcmkONERROR(gckHARDWARE_Fence( hardware, gcvENGINE_RENDER, - commandBufferFence, + commandBufferTail, Command->fence->address, Command->commitStamp, &bytes )); + + commandBufferTail += gcdRENDER_FENCE_LENGTH; } /* Generate a LINK from the end of the command buffer being scheduled @@ -2345,7 +2320,7 @@ gckCOMMAND_Commit( { gcmkONERROR(gckHARDWARE_Link( hardware, - commandBufferLink, + commandBufferTail, exitAddress, exitBytes, &linkBytes, @@ -2355,7 +2330,7 @@ gckCOMMAND_Commit( } else { - gctUINT8_PTR link = commandBufferLink + Index * 16; + gctUINT8_PTR link = commandBufferTail + Index * 16; gctSIZE_T bytes = 8; gcmkONERROR(gckHARDWARE_ChipEnable( @@ -2518,9 +2493,9 @@ gckCOMMAND_Commit( Command->newQueue = gcvFALSE; /* Update address of last WAIT. */ - Command->waitPhysical = waitPhysical; - Command->waitLogical = waitLogical; - Command->waitAddress = waitAddress; + Command->waitPhysical = waitLinkPhysical + waitOffset; + Command->waitLogical = (gctUINT8_PTR)waitLinkLogical + waitOffset; + Command->waitAddress = waitLinkAddress + waitOffset; Command->waitSize = waitSize; /* Update queue tail pointer. */ @@ -2563,82 +2538,19 @@ gckCOMMAND_Commit( gcmkONERROR(gckCOMMAND_ExitCommit(Command, gcvFALSE)); commitEntered = gcvFALSE; - if ((Command->kernel->hardware->gpuProfiler == gcvTRUE) && - (Command->kernel->profileEnable == gcvTRUE) && - (Command->kernel->profileSyncMode == gcvTRUE)) + if ((Command->kernel->hardware->options.gpuProfiler == gcvTRUE) && + (Command->kernel->profileEnable == gcvTRUE)) { gcmkONERROR(gckCOMMAND_Stall(Command, gcvTRUE)); if (Command->currContext) { - gcmkONERROR(gckHARDWARE_UpdateContextNewProfile( + gcmkONERROR(gckHARDWARE_UpdateContextProfile( hardware, Command->currContext)); } } - /* Loop while there are records in the queue. */ - while (EventQueue != gcvNULL) - { - if (needCopy) - { - gcmkONERROR(gckOS_Allocate(Command->os, gcmSIZEOF(gcsQUEUE), &pointer)); - - /* Point to stack record. */ - eventRecord = pointer; - - /* Copy the data from the client. */ - gcmkONERROR(gckOS_CopyFromUserData( - Command->os, eventRecord, EventQueue, gcmSIZEOF(gcsQUEUE) - )); - } - else - { - /* Map record into kernel memory. */ - gcmkONERROR(gckOS_MapUserPointer(Command->os, - EventQueue, - gcmSIZEOF(gcsQUEUE), - &pointer)); - - eventRecord = pointer; - } - - /* Append event record to event queue. */ - gcmkONERROR(gckEVENT_AddList( - Command->kernel->eventObj, &eventRecord->iface, gcvKERNEL_PIXEL, gcvTRUE, gcvFALSE - )); - - /* Next record in the queue. */ - nextEventRecord = gcmUINT64_TO_PTR(eventRecord->next); - - if (!needCopy) - { - /* Unmap record from kernel memory. */ - gcmkONERROR(gckOS_UnmapUserPointer( - Command->os, EventQueue, gcmSIZEOF(gcsQUEUE), (gctPOINTER *) eventRecord - )); - - eventRecord = gcvNULL; - } - else - { - gcmkONERROR(gckOS_Free(Command->os,eventRecord)); - eventRecord = gcvNULL; - } - - EventQueue = nextEventRecord; - } - - if (Command->kernel->eventObj->queueHead == gcvNULL - && Command->kernel->hardware->powerManagement == gcvTRUE) - { - /* Commit done event by which work thread knows all jobs done. */ - gcmkVERIFY_OK( - gckEVENT_CommitDone(Command->kernel->eventObj, gcvKERNEL_PIXEL, Command->currContext)); - } - - /* Submit events. */ - status = gckEVENT_Submit(Command->kernel->eventObj, gcvTRUE, gcvFALSE); if (status == gcvSTATUS_INTERRUPTED) { gcmkTRACE( @@ -2678,31 +2590,12 @@ gckCOMMAND_Commit( commandBufferMapped = gcvFALSE; } - else if (needCopy) - { - gcmkONERROR(gckOS_Free(Command->os, commandBufferObject)); - } /* Return status. */ gcmkFOOTER(); return gcvSTATUS_OK; OnError: - if ((eventRecord != gcvNULL) && !needCopy) - { - /* Roll back. */ - gcmkVERIFY_OK(gckOS_UnmapUserPointer( - Command->os, - EventQueue, - gcmSIZEOF(gcsQUEUE), - (gctPOINTER *) eventRecord - )); - } - else if ((eventRecord != gcvNULL) && needCopy) - { - gcmkVERIFY_OK(gckOS_Free(Command->os, eventRecord)); - } - if (contextAcquired) { /* Release the context switching mutex. */ @@ -2736,10 +2629,6 @@ OnError: commandBufferObject )); } - else if (needCopy) - { - gcmkVERIFY_OK(gckOS_Free(Command->os, commandBufferObject)); - } /* Return status. */ gcmkFOOTER(); 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 f33f650cd89e..765231be9e5e 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 @@ -63,114 +63,6 @@ #define _GetSlot(database, x) \ (gctUINT32)(gcmPTR_TO_UINT64(x) % gcmCOUNTOF(database->list)) -/******************************************************************************* -** gckKERNEL_NewDatabase -** -** Create a new database structure and insert it to the head of the hash list. -** -** INPUT: -** -** gckKERNEL Kernel -** Pointer to a gckKERNEL object. -** -** gctUINT32 ProcessID -** ProcessID that identifies the database. -** -** OUTPUT: -** -** gcsDATABASE_PTR * Database -** Pointer to a variable receiving the database structure pointer on -** success. -*/ -static gceSTATUS -gckKERNEL_NewDatabase( - IN gckKERNEL Kernel, - IN gctUINT32 ProcessID, - OUT gcsDATABASE_PTR * Database - ) -{ - gceSTATUS status; - gcsDATABASE_PTR database; - gctPOINTER pointer = gcvNULL; - gctBOOL acquired = gcvFALSE; - gctSIZE_T slot; - gcsDATABASE_PTR existingDatabase; - - gcmkHEADER_ARG("Kernel=0x%x ProcessID=%d", Kernel, ProcessID); - - /* Acquire the database mutex. */ - gcmkONERROR(gckOS_AcquireMutex(Kernel->os, Kernel->db->dbMutex, gcvINFINITE)); - acquired = gcvTRUE; - - /* Compute the hash for the database. */ - slot = ProcessID % gcmCOUNTOF(Kernel->db->db); - - /* Walk the hash list. */ - for (existingDatabase = Kernel->db->db[slot]; - existingDatabase != gcvNULL; - existingDatabase = existingDatabase->next) - { - if (existingDatabase->processID == ProcessID) - { - /* One process can't be added twice. */ - gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); - } - } - - if (Kernel->db->freeDatabase != gcvNULL) - { - /* Allocate a database from the free list. */ - database = Kernel->db->freeDatabase; - Kernel->db->freeDatabase = database->next; - } - else - { - /* Allocate a new database from the heap. */ - gcmkONERROR(gckOS_Allocate(Kernel->os, - gcmSIZEOF(gcsDATABASE), - &pointer)); - - gckOS_ZeroMemory(pointer, gcmSIZEOF(gcsDATABASE)); - - database = pointer; - - gcmkONERROR(gckOS_CreateMutex(Kernel->os, &database->counterMutex)); - } - - /* Insert the database into the hash. */ - database->next = Kernel->db->db[slot]; - Kernel->db->db[slot] = database; - - /* Save the hash slot. */ - database->slot = slot; - - /* Release the database mutex. */ - gcmkONERROR(gckOS_ReleaseMutex(Kernel->os, Kernel->db->dbMutex)); - - /* Return the database. */ - *Database = database; - - /* Success. */ - gcmkFOOTER_ARG("*Database=0x%x", *Database); - return gcvSTATUS_OK; - -OnError: - if (pointer) - { - gcmkOS_SAFE_FREE(Kernel->os, pointer); - } - - if (acquired) - { - /* Release the database mutex. */ - gcmkVERIFY_OK(gckOS_ReleaseMutex(Kernel->os, Kernel->db->dbMutex)); - } - - /* Return the status. */ - gcmkFOOTER(); - return status; -} - /******************************************************************************* ** gckKERNEL_FindDatabase ** @@ -286,9 +178,9 @@ OnError: } /******************************************************************************* -** gckKERNEL_DeleteDatabase +** gckKERNEL_DeinitDatabase ** -** Remove a database from the hash list and delete its structure. +** De-init a database structure. ** ** INPUT: ** @@ -296,104 +188,54 @@ OnError: ** Pointer to a gckKERNEL object. ** ** gcsDATABASE_PTR Database -** Pointer to the database structure to remove. +** Pointer to the database structure to deinit. ** ** OUTPUT: ** ** Nothing. */ static gceSTATUS -gckKERNEL_DeleteDatabase( +gckKERNEL_DeinitDatabase( IN gckKERNEL Kernel, IN gcsDATABASE_PTR Database ) { - gceSTATUS status; - gctBOOL acquired = gcvFALSE; - gcsDATABASE_PTR database; - gcmkHEADER_ARG("Kernel=0x%x Database=0x%x", Kernel, Database); - /* Acquire the database mutex. */ - gcmkONERROR( - gckOS_AcquireMutex(Kernel->os, Kernel->db->dbMutex, gcvINFINITE)); - acquired = gcvTRUE; - - /* Check slot value. */ - gcmkVERIFY_ARGUMENT(Database->slot < gcmCOUNTOF(Kernel->db->db)); - - if (Database->slot < gcmCOUNTOF(Kernel->db->db)) + if (Database) { - /* Check if database if the head of the hash list. */ - if (Kernel->db->db[Database->slot] == Database) + Database->deleted = gcvFALSE; + + /* Destory handle db. */ + if (Database->refs) { - /* Remove the database from the hash list. */ - Kernel->db->db[Database->slot] = Database->next; + gcmkVERIFY_OK(gckOS_AtomDestroy(Kernel->os, Database->refs)); + Database->refs = gcvNULL; } - else - { - /* Walk the has list to find the database. */ - for (database = Kernel->db->db[Database->slot]; - database != gcvNULL; - database = database->next - ) - { - /* Check if the next list entry is this database. */ - if (database->next == Database) - { - /* Remove the database from the hash list. */ - database->next = Database->next; - break; - } - } - if (database == gcvNULL) - { - /* Ouch! Something got corrupted. */ - gcmkONERROR(gcvSTATUS_INVALID_DATA); - } + if (Database->handleDatabase) + { + gcmkVERIFY_OK(gckKERNEL_DestroyIntegerDatabase(Kernel, Database->handleDatabase)); + Database->handleDatabase = gcvNULL; } - } - - if (Kernel->db->lastDatabase != gcvNULL) - { - /* Insert database to the free list. */ - Kernel->db->lastDatabase->next = Kernel->db->freeDatabase; - Kernel->db->freeDatabase = Kernel->db->lastDatabase; - } - - /* Keep database as the last database. */ - Kernel->db->lastDatabase = Database; - /* Destory handle db. */ - gcmkVERIFY_OK(gckKERNEL_DestroyIntegerDatabase(Kernel, Database->handleDatabase)); - Database->handleDatabase = gcvNULL; - gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Database->handleDatabaseMutex)); - Database->handleDatabaseMutex = gcvNULL; + if (Database->handleDatabaseMutex) + { + gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Database->handleDatabaseMutex)); + Database->handleDatabaseMutex = gcvNULL; + } #if gcdPROCESS_ADDRESS_SPACE - /* Destory process MMU. */ - gcmkVERIFY_OK(gckEVENT_DestroyMmu(Kernel->eventObj, Database->mmu, gcvKERNEL_PIXEL)); - Database->mmu = gcvNULL; + if (Database->mmu) + { + gcmkONERROR(gckEVENT_DestroyMmu(Kernel->eventObj, Database->mmu, gcvKERNEL_PIXEL)); + Database->mmu = gcvNULL; + } #endif + } - /* Release the database mutex. */ - gcmkONERROR(gckOS_ReleaseMutex(Kernel->os, Kernel->db->dbMutex)); - - /* Success. */ gcmkFOOTER_NO(); return gcvSTATUS_OK; - -OnError: - if (acquired) - { - /* Release the database mutex. */ - gcmkVERIFY_OK(gckOS_ReleaseMutex(Kernel->os, Kernel->db->dbMutex)); - } - - /* Return the status. */ - gcmkFOOTER(); - return status; } /******************************************************************************* @@ -712,39 +554,86 @@ gckKERNEL_CreateProcessDB( IN gctUINT32 ProcessID ) { - gceSTATUS status; + gceSTATUS status = gcvSTATUS_OK; gcsDATABASE_PTR database = gcvNULL; + gctPOINTER pointer = gcvNULL; + gctBOOL acquired = gcvFALSE; + gctSIZE_T slot; gctUINT32 i; gcmkHEADER_ARG("Kernel=0x%x ProcessID=%d", Kernel, ProcessID); - /* Verify the arguments. */ - gcmkVERIFY_OBJECT(Kernel, gcvOBJ_KERNEL); + /* Compute the hash for the database. */ + slot = ProcessID % gcmCOUNTOF(Kernel->db->db); + + /* Acquire the database mutex. */ + gcmkONERROR(gckOS_AcquireMutex(Kernel->os, Kernel->db->dbMutex, gcvINFINITE)); + acquired = gcvTRUE; + + /* Walk the hash list. */ + for (database = Kernel->db->db[slot]; + database != gcvNULL; + database = database->next) + { + if (database->processID == ProcessID) + { + gctINT32 oldVal = 0; + + if (database->deleted) + { + gcmkFATAL("%s(%d): DB of Process=0x%x cannot be reentered since it was in deletion\n", + __FUNCTION__, __LINE__, ProcessID); + gcmkONERROR(gcvSTATUS_INVALID_REQUEST); + } + + gcmkVERIFY_OK(gckOS_AtomIncrement(Kernel->os, database->refs, &oldVal)); + goto OnExit; + } + } - /* Create a new database. */ - gcmkONERROR(gckKERNEL_NewDatabase(Kernel, ProcessID, &database)); + if (Kernel->db->freeDatabase) + { + /* Allocate a database from the free list. */ + database = Kernel->db->freeDatabase; + Kernel->db->freeDatabase = database->next; + } + else + { + /* Allocate a new database from the heap. */ + gcmkONERROR(gckOS_Allocate(Kernel->os, + gcmSIZEOF(gcsDATABASE), + &pointer)); + + gckOS_ZeroMemory(pointer, gcmSIZEOF(gcsDATABASE)); + + database = pointer; + + gcmkONERROR(gckOS_CreateMutex(Kernel->os, &database->counterMutex)); + } /* Initialize the database. */ - database->processID = ProcessID; - database->vidMem.bytes = 0; - database->vidMem.maxBytes = 0; - database->vidMem.totalBytes = 0; - database->nonPaged.bytes = 0; - database->nonPaged.maxBytes = 0; - database->nonPaged.totalBytes = 0; - database->contiguous.bytes = 0; - database->contiguous.maxBytes = 0; - database->contiguous.totalBytes = 0; - database->mapMemory.bytes = 0; - database->mapMemory.maxBytes = 0; - database->mapMemory.totalBytes = 0; - database->mapUserMemory.bytes = 0; - database->mapUserMemory.maxBytes = 0; - database->mapUserMemory.totalBytes = 0; + /* Save the hash slot. */ + database->slot = slot; + database->processID = ProcessID; + database->vidMem.bytes = 0; + database->vidMem.maxBytes = 0; + database->vidMem.totalBytes = 0; + database->nonPaged.bytes = 0; + database->nonPaged.maxBytes = 0; + database->nonPaged.totalBytes = 0; + database->contiguous.bytes = 0; + database->contiguous.maxBytes = 0; + database->contiguous.totalBytes = 0; + database->mapMemory.bytes = 0; + database->mapMemory.maxBytes = 0; + database->mapMemory.totalBytes = 0; + database->mapUserMemory.bytes = 0; + database->mapUserMemory.maxBytes = 0; + database->mapUserMemory.totalBytes = 0; for (i = 0; i < gcmCOUNTOF(database->list); i++) { - database->list[i] = gcvNULL; + database->list[i] = gcvNULL; } for (i = 0; i < gcvSURF_NUM_TYPES; i++) @@ -761,37 +650,38 @@ gckKERNEL_CreateProcessDB( database->vidMemPool[i].totalBytes = 0; } + gcmkASSERT(database->refs == gcvNULL); + gcmkONERROR(gckOS_AtomConstruct(Kernel->os, &database->refs)); + gcmkONERROR(gckOS_AtomSet(Kernel->os, database->refs, 1)); + gcmkASSERT(database->handleDatabase == gcvNULL); - gcmkONERROR( - gckKERNEL_CreateIntegerDatabase(Kernel, &database->handleDatabase)); + gcmkONERROR(gckKERNEL_CreateIntegerDatabase(Kernel, &database->handleDatabase)); gcmkASSERT(database->handleDatabaseMutex == gcvNULL); - gcmkONERROR( - gckOS_CreateMutex(Kernel->os, &database->handleDatabaseMutex)); + gcmkONERROR(gckOS_CreateMutex(Kernel->os, &database->handleDatabaseMutex)); #if gcdPROCESS_ADDRESS_SPACE gcmkASSERT(database->mmu == gcvNULL); - gcmkONERROR( - gckMMU_Construct(Kernel, gcdMMU_SIZE, &database->mmu)); + gcmkONERROR(gckMMU_Construct(Kernel, gcdMMU_SIZE, &database->mmu)); #endif #if gcdSECURE_USER { - gctINT slot; + gctINT idx; gcskSECURE_CACHE * cache = &database->cache; /* Setup the linked list of cache nodes. */ - for (slot = 1; slot <= gcdSECURE_CACHE_SLOTS; ++slot) + for (idx = 1; idx <= gcdSECURE_CACHE_SLOTS; ++idx) { - cache->cache[slot].logical = gcvNULL; + cache->cache[idx].logical = gcvNULL; #if gcdSECURE_CACHE_METHOD != gcdSECURE_CACHE_TABLE - cache->cache[slot].prev = &cache->cache[slot - 1]; - cache->cache[slot].next = &cache->cache[slot + 1]; + cache->cache[idx].prev = &cache->cache[idx - 1]; + cache->cache[idx].next = &cache->cache[idx + 1]; # endif #if gcdSECURE_CACHE_METHOD == gcdSECURE_CACHE_HASH - cache->cache[slot].nextHash = gcvNULL; - cache->cache[slot].prevHash = gcvNULL; + cache->cache[idx].nextHash = gcvNULL; + cache->cache[idx].prevHash = gcvNULL; # endif } @@ -808,10 +698,10 @@ gckKERNEL_CreateProcessDB( #if gcdSECURE_CACHE_METHOD == gcdSECURE_CACHE_HASH /* Zero out the hash table. */ - for (slot = 0; slot < gcmCOUNTOF(cache->hash); ++slot) + for (idx = 0; idx < gcmCOUNTOF(cache->hash); ++idx) { - cache->hash[slot].logical = gcvNULL; - cache->hash[slot].nextHash = gcvNULL; + cache->hash[idx].logical = gcvNULL; + cache->hash[idx].nextHash = gcvNULL; } # endif @@ -822,14 +712,31 @@ gckKERNEL_CreateProcessDB( } #endif + /* Insert the database into the hash. */ + database->next = Kernel->db->db[slot]; + Kernel->db->db[slot] = database; + /* Reset idle timer. */ Kernel->db->lastIdle = 0; - /* Success. */ - gcmkFOOTER_NO(); - return gcvSTATUS_OK; - OnError: + if (gcmIS_ERROR(status)) + { + gcmkVERIFY_OK(gckKERNEL_DeinitDatabase(Kernel, database)); + + if (pointer) + { + gcmkOS_SAFE_FREE(Kernel->os, pointer); + } + } + +OnExit: + if (acquired) + { + /* Release the database mutex. */ + gcmkVERIFY_OK(gckOS_ReleaseMutex(Kernel->os, Kernel->db->dbMutex)); + } + /* Return the status. */ gcmkFOOTER(); return status; @@ -1245,14 +1152,13 @@ gckKERNEL_DestroyProcessDB( IN gctUINT32 ProcessID ) { - gceSTATUS status; - gcsDATABASE_PTR database; - gcsDATABASE_RECORD_PTR record, next; - gctBOOL asynchronous = gcvTRUE; - gckVIDMEM_NODE nodeObject; - gctPHYS_ADDR physical; + gceSTATUS status = gcvSTATUS_OK; gckKERNEL kernel = Kernel; - gctUINT32 handle; + gcsDATABASE_PTR previous = gcvNULL; + gcsDATABASE_PTR database = gcvNULL; + gcsDATABASE_PTR db = gcvNULL; + gctBOOL acquired = gcvFALSE; + gctSIZE_T slot; gctUINT32 i; gcmkHEADER_ARG("Kernel=0x%x ProcessID=%d", Kernel, ProcessID); @@ -1260,8 +1166,50 @@ gckKERNEL_DestroyProcessDB( /* Verify the arguments. */ gcmkVERIFY_OBJECT(Kernel, gcvOBJ_KERNEL); - /* Find the database. */ - gcmkONERROR(gckKERNEL_FindDatabase(Kernel, ProcessID, gcvFALSE, &database)); + /* Compute the hash for the database. */ + slot = ProcessID % gcmCOUNTOF(Kernel->db->db); + + /* Acquire the database mutex. */ + gcmkONERROR(gckOS_AcquireMutex(Kernel->os, Kernel->db->dbMutex, gcvINFINITE)); + acquired = gcvTRUE; + + /* Walk the hash list. */ + for (database = Kernel->db->db[slot]; + database != gcvNULL; + database = database->next) + { + if (database->processID == ProcessID) + { + break; + } + } + + if (database) + { + gctINT32 oldVal = 0; + gcmkONERROR(gckOS_AtomDecrement(Kernel->os, database->refs, &oldVal)); + if (oldVal != 1) + { + goto OnExit; + } + + /* Mark it for delete so disallow reenter until really delete it */ + gcmkASSERT(!database->deleted); + database->deleted = gcvTRUE; + } + else + { + gcmkFATAL("%s(%d): DB destroy of Process=0x%x cannot match with creation\n", + __FUNCTION__, __LINE__, ProcessID); + gcmkONERROR(gcvSTATUS_NOT_FOUND); + } + + /* Cannot remove the database from the hash list + ** since later records deinit need to access from the hash + */ + + gcmkONERROR(gckOS_ReleaseMutex(Kernel->os, Kernel->db->dbMutex)); + acquired = gcvFALSE; gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_DATABASE, "DB(%d): VidMem: total=%lu max=%lu", @@ -1294,236 +1242,286 @@ gckKERNEL_DestroyProcessDB( ProcessID); } - for(i = 0; i < gcmCOUNTOF(database->list); i++) - { - - /* Walk all records. */ - for (record = database->list[i]; record != gcvNULL; record = next) + for (i = 0; i < gcmCOUNTOF(database->list); i++) { - /* Next next record. */ - next = record->next; + gcsDATABASE_RECORD_PTR record, next; - /* Dispatch on record type. */ - switch (record->type) + /* Walk all records. */ + for (record = database->list[i]; record != gcvNULL; record = next) { - case gcvDB_VIDEO_MEMORY: - gcmkERR_BREAK(gckVIDMEM_HANDLE_Lookup(record->kernel, - ProcessID, - gcmPTR2INT32(record->data), - &nodeObject)); - - /* Free the video memory. */ - gcmkVERIFY_OK(gckVIDMEM_HANDLE_Dereference(record->kernel, - ProcessID, - gcmPTR2INT32(record->data))); - - gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference(record->kernel, - nodeObject)); - - gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, - "DB: VIDEO_MEMORY 0x%x (status=%d)", - record->data, status); - break; + gctBOOL asynchronous = gcvTRUE; + gckVIDMEM_NODE nodeObject; + gctPHYS_ADDR physical; + gctUINT32 handle; - case gcvDB_NON_PAGED: - physical = gcmNAME_TO_PTR(record->physical); - /* Unmap user logical memory first. */ - status = gckOS_UnmapUserLogical(Kernel->os, - physical, - record->bytes, - record->data); - - /* Free the non paged memory. */ - status = gckEVENT_FreeNonPagedMemory(record->kernel->eventObj, - record->bytes, - physical, - record->data, - gcvKERNEL_PIXEL); - gcmRELEASE_NAME(record->physical); - - gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, - "DB: NON_PAGED 0x%x, bytes=%lu (status=%d)", - record->data, record->bytes, status); - break; + /* Next next record. */ + next = record->next; - case gcvDB_COMMAND_BUFFER: - /* Free the command buffer. */ - status = gckEVENT_DestroyVirtualCommandBuffer(record->kernel->eventObj, - record->bytes, - gcmNAME_TO_PTR(record->physical), - record->data, - gcvKERNEL_PIXEL); - gcmRELEASE_NAME(record->physical); - - gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, - "DB: COMMAND_BUFFER 0x%x, bytes=%lu (status=%d)", - record->data, record->bytes, status); - break; + /* Dispatch on record type. */ + switch (record->type) + { + case gcvDB_VIDEO_MEMORY: + gcmkERR_BREAK(gckVIDMEM_HANDLE_Lookup(record->kernel, + ProcessID, + gcmPTR2INT32(record->data), + &nodeObject)); - case gcvDB_CONTIGUOUS: - physical = gcmNAME_TO_PTR(record->physical); - /* Unmap user logical memory first. */ - status = gckOS_UnmapUserLogical(Kernel->os, - physical, - record->bytes, - record->data); - - /* Free the contiguous memory. */ - status = gckEVENT_FreeContiguousMemory(record->kernel->eventObj, - record->bytes, - physical, - record->data, - gcvKERNEL_PIXEL); - gcmRELEASE_NAME(record->physical); - - gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, - "DB: CONTIGUOUS 0x%x bytes=%lu (status=%d)", - record->data, record->bytes, status); - break; + /* Free the video memory. */ + gcmkVERIFY_OK(gckVIDMEM_HANDLE_Dereference(record->kernel, + ProcessID, + gcmPTR2INT32(record->data))); + + gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference(record->kernel, + nodeObject)); + + gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, + "DB: VIDEO_MEMORY 0x%x (status=%d)", + record->data, status); + break; + + case gcvDB_NON_PAGED: + physical = gcmNAME_TO_PTR(record->physical); + /* Unmap user logical memory first. */ + status = gckOS_UnmapUserLogical(Kernel->os, + physical, + record->bytes, + record->data); + + /* Free the non paged memory. */ + status = gckEVENT_FreeNonPagedMemory(record->kernel->eventObj, + record->bytes, + physical, + record->data, + gcvKERNEL_PIXEL); + gcmRELEASE_NAME(record->physical); + + gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, + "DB: NON_PAGED 0x%x, bytes=%lu (status=%d)", + record->data, record->bytes, status); + break; + + case gcvDB_COMMAND_BUFFER: + /* Free the command buffer. */ + status = gckEVENT_DestroyVirtualCommandBuffer(record->kernel->eventObj, + record->bytes, + gcmNAME_TO_PTR(record->physical), + record->data, + gcvKERNEL_PIXEL); + gcmRELEASE_NAME(record->physical); + + gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, + "DB: COMMAND_BUFFER 0x%x, bytes=%lu (status=%d)", + record->data, record->bytes, status); + break; + + case gcvDB_CONTIGUOUS: + physical = gcmNAME_TO_PTR(record->physical); + /* Unmap user logical memory first. */ + status = gckOS_UnmapUserLogical(Kernel->os, + physical, + record->bytes, + record->data); + + /* Free the contiguous memory. */ + status = gckEVENT_FreeContiguousMemory(record->kernel->eventObj, + record->bytes, + physical, + record->data, + gcvKERNEL_PIXEL); + gcmRELEASE_NAME(record->physical); + + gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, + "DB: CONTIGUOUS 0x%x bytes=%lu (status=%d)", + record->data, record->bytes, status); + break; - case gcvDB_SIGNAL: + case gcvDB_SIGNAL: #if USE_NEW_LINUX_SIGNAL - status = gcvSTATUS_NOT_SUPPORTED; + status = gcvSTATUS_NOT_SUPPORTED; #else - /* Free the user signal. */ - status = gckOS_DestroyUserSignal(Kernel->os, - gcmPTR2INT32(record->data)); + /* Free the user signal. */ + status = gckOS_DestroyUserSignal(Kernel->os, + gcmPTR2INT32(record->data)); #endif /* USE_NEW_LINUX_SIGNAL */ - gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, - "DB: SIGNAL %d (status=%d)", - (gctINT)(gctUINTPTR_T)record->data, status); - break; + gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, + "DB: SIGNAL %d (status=%d)", + (gctINT)(gctUINTPTR_T)record->data, status); + break; - case gcvDB_VIDEO_MEMORY_LOCKED: - handle = gcmPTR2INT32(record->data); + case gcvDB_VIDEO_MEMORY_LOCKED: + handle = gcmPTR2INT32(record->data); - gcmkERR_BREAK(gckVIDMEM_HANDLE_Lookup(record->kernel, - ProcessID, - handle, - &nodeObject)); + gcmkERR_BREAK(gckVIDMEM_HANDLE_Lookup(record->kernel, + ProcessID, + handle, + &nodeObject)); - /* Unlock what we still locked */ - status = gckVIDMEM_Unlock(record->kernel, - nodeObject, - nodeObject->type, - &asynchronous); + /* Unlock what we still locked */ + status = gckVIDMEM_Unlock(record->kernel, + nodeObject, + nodeObject->type, + &asynchronous); #if gcdENABLE_VG - if (record->kernel->core == gcvCORE_VG) - { - if (gcmIS_SUCCESS(status) && (gcvTRUE == asynchronous)) + if (record->kernel->core == gcvCORE_VG) { - status = gckVIDMEM_Unlock(record->kernel, - nodeObject, - nodeObject->type, - gcvNULL); - } - - gcmkVERIFY_OK(gckVIDMEM_HANDLE_Dereference(record->kernel, - ProcessID, - handle)); + if (gcmIS_SUCCESS(status) && (gcvTRUE == asynchronous)) + { + status = gckVIDMEM_Unlock(record->kernel, + nodeObject, + nodeObject->type, + gcvNULL); + } + + gcmkVERIFY_OK(gckVIDMEM_HANDLE_Dereference(record->kernel, + ProcessID, + handle)); - gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference(record->kernel, - nodeObject)); - } - else -#endif - { - gcmkVERIFY_OK(gckVIDMEM_HANDLE_Dereference(record->kernel, - ProcessID, - handle)); - - if (gcmIS_SUCCESS(status) && (gcvTRUE == asynchronous)) - { - status = gckEVENT_Unlock(record->kernel->eventObj, - gcvKERNEL_PIXEL, - nodeObject, - nodeObject->type); + gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference(record->kernel, + nodeObject)); } else +#endif { - gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference(record->kernel, - nodeObject)); + gcmkVERIFY_OK(gckVIDMEM_HANDLE_Dereference(record->kernel, + ProcessID, + handle)); + + if (gcmIS_SUCCESS(status) && (gcvTRUE == asynchronous)) + { + status = gckEVENT_Unlock(record->kernel->eventObj, + gcvKERNEL_PIXEL, + nodeObject, + nodeObject->type); + } + else + { + gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference(record->kernel, + nodeObject)); + } } - } - gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, - "DB: VIDEO_MEMORY_LOCKED 0x%x (status=%d)", - record->data, status); - break; + gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, + "DB: VIDEO_MEMORY_LOCKED 0x%x (status=%d)", + record->data, status); + break; - case gcvDB_CONTEXT: - status = gckCOMMAND_Detach(record->kernel->command, gcmNAME_TO_PTR(record->data)); - gcmRELEASE_NAME(record->data); + case gcvDB_CONTEXT: + status = gckCOMMAND_Detach(record->kernel->command, gcmNAME_TO_PTR(record->data)); + gcmRELEASE_NAME(record->data); - gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, - "DB: CONTEXT 0x%x (status=%d)", - record->data, status); - break; + gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, + "DB: CONTEXT 0x%x (status=%d)", + record->data, status); + break; - case gcvDB_MAP_MEMORY: - /* Unmap memory. */ - status = gckKERNEL_UnmapMemory(record->kernel, - record->physical, - record->bytes, - record->data, - ProcessID); - - gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, - "DB: MAP MEMORY %d (status=%d)", - gcmPTR2INT32(record->data), status); - break; + case gcvDB_MAP_MEMORY: + /* Unmap memory. */ + status = gckKERNEL_UnmapMemory(record->kernel, + record->physical, + record->bytes, + record->data, + ProcessID); + + gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, + "DB: MAP MEMORY %d (status=%d)", + gcmPTR2INT32(record->data), status); + break; - case gcvDB_MAP_USER_MEMORY: - status = gckOS_UnmapUserMemory(Kernel->os, - Kernel->core, - record->physical, - record->bytes, - gcmNAME_TO_PTR(record->data), - 0); - gcmRELEASE_NAME(record->data); - - gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, - "DB: MAP USER MEMORY %d (status=%d)", - gcmPTR2INT32(record->data), status); - break; + case gcvDB_MAP_USER_MEMORY: + status = gckOS_UnmapUserMemory(Kernel->os, + Kernel->core, + record->physical, + record->bytes, + gcmNAME_TO_PTR(record->data), + 0); + gcmRELEASE_NAME(record->data); + + gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, + "DB: MAP USER MEMORY %d (status=%d)", + gcmPTR2INT32(record->data), status); + break; - case gcvDB_SHBUF: - /* Free shared buffer. */ - status = gckKERNEL_DestroyShBuffer(record->kernel, - (gctSHBUF) record->data); + case gcvDB_SHBUF: + /* Free shared buffer. */ + status = gckKERNEL_DestroyShBuffer(record->kernel, + (gctSHBUF) record->data); - gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, - "DB: SHBUF %u (status=%d)", - (gctUINT32)(gctUINTPTR_T) record->data, status); - break; + gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE, + "DB: SHBUF %u (status=%d)", + (gctUINT32)(gctUINTPTR_T) record->data, status); + break; + + default: + gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DATABASE, + "DB: Correcupted record=0x%08x type=%d", + record, record->type); + break; + } + + /* Delete the record. */ + gcmkONERROR(gckKERNEL_DeleteRecord(Kernel, + database, + record->type, + record->data, + gcvNULL)); + } + } + + /* Acquire the database mutex. */ + gcmkONERROR(gckOS_AcquireMutex(Kernel->os, Kernel->db->dbMutex, gcvINFINITE)); + acquired = gcvTRUE; - default: - gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DATABASE, - "DB: Correcupted record=0x%08x type=%d", - record, record->type); + /* Walk the hash list. */ + for (db = Kernel->db->db[slot]; + db != gcvNULL; + db = db->next) + { + if (db->processID == ProcessID) + { break; } + previous = db; + } - /* Delete the record. */ - gcmkONERROR(gckKERNEL_DeleteRecord(Kernel, - database, - record->type, - record->data, - gcvNULL)); + if (db != database || !db->deleted) + { + gcmkFATAL("%s(%d): DB of Process=0x%x corrupted after found in deletion\n", + __FUNCTION__, __LINE__, ProcessID); + gcmkONERROR(gcvSTATUS_NOT_FOUND); } + /* Remove the database from the hash list. */ + if (previous) + { + previous->next = database->next; + } + else + { + Kernel->db->db[slot] = database->next; } - /* Delete the database. */ - gcmkONERROR(gckKERNEL_DeleteDatabase(Kernel, database)); + /* Deinit current database. */ + gcmkVERIFY_OK(gckKERNEL_DeinitDatabase(Kernel, database)); - /* Success. */ - gcmkFOOTER_NO(); - return gcvSTATUS_OK; + if (Kernel->db->lastDatabase) + { + /* Insert last database to the free list. */ + Kernel->db->lastDatabase->next = Kernel->db->freeDatabase; + Kernel->db->freeDatabase = Kernel->db->lastDatabase; + } + + /* Update last database to current one. */ + Kernel->db->lastDatabase = database; OnError: +OnExit: + if (acquired) + { + /* Release the database mutex. */ + gcmkVERIFY_OK(gckOS_ReleaseMutex(Kernel->os, Kernel->db->dbMutex)); + } /* Return the status. */ gcmkFOOTER(); return status; @@ -1581,9 +1579,7 @@ gckKERNEL_QueryProcessDB( Type &= gcdDATABASE_TYPE_MASK; /* Find the database. */ - gcmkONERROR( - gckKERNEL_FindDatabase(Kernel, ProcessID, LastProcessID, &database)); - + gcmkONERROR(gckKERNEL_FindDatabase(Kernel, ProcessID, LastProcessID, &database)); gcmkVERIFY_OK(gckOS_AcquireMutex(Kernel->os, database->counterMutex, gcvINFINITE)); 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 9c556c47f4fe..c5f067a8db31 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 @@ -1459,56 +1459,6 @@ OnError: return status; } -/******************************************************************************* -** -** gckEVENT_CommitDone -** -** Schedule an event to wake up work thread when commit is done by GPU. -** -** INPUT: -** -** gckEVENT Event -** Pointer to an gckEVENT object. -** -** gceKERNEL_WHERE FromWhere -** Place in the pipe where the event needs to be generated. -** -** OUTPUT: -** -** Nothing. -*/ -gceSTATUS -gckEVENT_CommitDone( - IN gckEVENT Event, - IN gceKERNEL_WHERE FromWhere, - IN gckCONTEXT Context - ) -{ - gceSTATUS status; - gcsHAL_INTERFACE iface; - - gcmkHEADER_ARG("Event=0x%x FromWhere=%d", Event, FromWhere); - - /* Verify the arguments. */ - gcmkVERIFY_OBJECT(Event, gcvOBJ_EVENT); - - iface.command = gcvHAL_COMMIT_DONE; - - iface.u.CommitDone.context = gcmPTR_TO_UINT64(Context); - - /* Append it to the queue. */ - gcmkONERROR(gckEVENT_AddList(Event, &iface, FromWhere, gcvFALSE, gcvTRUE)); - - /* Success. */ - gcmkFOOTER_NO(); - return gcvSTATUS_OK; - -OnError: - /* Return the status. */ - gcmkFOOTER(); - return status; -} - #if gcdPROCESS_ADDRESS_SPACE gceSTATUS gckEVENT_DestroyMmu( @@ -1949,6 +1899,10 @@ OnError: ** gcsQUEUE_PTR Queue ** User event queue. ** +** gctBOOL Forced +** Force fire a event. There won't be interrupt if there's no events + queued. Force a event by append a dummy one if this parameter is on. +** ** OUTPUT: ** ** Nothing. @@ -1956,7 +1910,8 @@ OnError: gceSTATUS gckEVENT_Commit( IN gckEVENT Event, - IN gcsQUEUE_PTR Queue + IN gcsQUEUE_PTR Queue, + IN gctBOOL Forced ) { gceSTATUS status; @@ -2025,6 +1980,14 @@ gckEVENT_Commit( Queue = next; } + if (Forced && Event->queueHead == gcvNULL) + { + gcsHAL_INTERFACE iface; + iface.command = gcvHAL_COMMIT_DONE; + + gcmkONERROR(gckEVENT_AddList(Event, &iface, gcvKERNEL_PIXEL, gcvFALSE, gcvTRUE)); + } + /* Submit the event list. */ gcmkONERROR(gckEVENT_Submit(Event, gcvTRUE, gcvFALSE)); 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 6aa793643298..149cced61430 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 @@ -105,13 +105,13 @@ gcsSharedPageTable; static gcsSharedPageTable_PTR sharedPageTable = gcvNULL; #endif -typedef struct _gcsDynamicSpaceNode * gcsDynamicSpaceNode_PTR; -typedef struct _gcsDynamicSpaceNode +typedef struct _gcsFreeSpaceNode * gcsFreeSpaceNode_PTR; +typedef struct _gcsFreeSpaceNode { gctUINT32 start; gctINT32 entries; } -gcsDynamicSpaceNode; +gcsFreeSpaceNode; #if gcdENDIAN_BIG @@ -468,6 +468,140 @@ OnError: return status; } +static gceSTATUS +_CollectFreeSpace( + IN gckMMU Mmu, + OUT gcsFreeSpaceNode_PTR *Array, + OUT gctINT * Size + ) +{ + gceSTATUS status = gcvSTATUS_OK; + gctPOINTER pointer = gcvNULL; + gcsFreeSpaceNode_PTR array = gcvNULL; + gcsFreeSpaceNode_PTR node = gcvNULL; + gctINT size = 0; + gctINT i = 0; + + for (i = 0; i < gcdMMU_MTLB_ENTRY_NUM; i++) + { + if (!Mmu->mtlbLogical[i]) + { + if (!node) + { + /* This is the first entry of the free space. */ + node += 1; + size++; + + } + } + else if (node) + { + /* Reset the start. */ + node = gcvNULL; + } + } + + /* Allocate memory for the array. */ + gcmkONERROR(gckOS_Allocate(Mmu->os, + gcmSIZEOF(*array) * size, + &pointer)); + + array = (gcsFreeSpaceNode_PTR)pointer; + node = gcvNULL; + + for (i = 0, size = 0; i < gcdMMU_MTLB_ENTRY_NUM; i++) + { + if (!Mmu->mtlbLogical[i]) + { + if (!node) + { + /* This is the first entry of the free space. */ + node = &array[size++]; + + node->start = i; + node->entries = 0; + } + + node->entries++; + } + else if (node) + { + /* Reset the start. */ + node = gcvNULL; + } + } + +#if gcdMMU_TABLE_DUMP + for (i = 0; i < size; i++) + { + gckOS_Print("%s(%d): [%d]: start=%d, entries=%d.\n", + __FUNCTION__, __LINE__, + i, + array[i].start, + array[i].entries); + } +#endif + + *Array = array; + *Size = size; + + return gcvSTATUS_OK; + +OnError: + if (pointer != gcvNULL) + { + gckOS_Free(Mmu->os, pointer); + } + + return status; +} + +gceSTATUS +_GetMtlbFreeSpace( + IN gckMMU Mmu, + IN gctUINT32 NumEntries, + OUT gctUINT32 *MtlbStart, + OUT gctUINT32 *MtlbEnd + ) +{ + gceSTATUS status = gcvSTATUS_OK; + gcsFreeSpaceNode_PTR nodeArray = gcvNULL; + gctINT i, nodeArraySize = 0; + gctINT numEntries = gcdMMU_MTLB_ENTRY_NUM; + gctINT32 mStart = -1; + gctINT32 mEnd = -1; + + gcmkONERROR(_CollectFreeSpace(Mmu, &nodeArray, &nodeArraySize)); + + /* Find the smallest space for NumEntries */ + for (i = 0; i < nodeArraySize; i++) + { + if (nodeArray[i].entries < numEntries && NumEntries <= (gctUINT32)nodeArray[i].entries) + { + numEntries = nodeArray[i].entries; + + mStart = nodeArray[i].start; + mEnd = nodeArray[i].start + NumEntries - 1; + } + } + + if (mStart == -1 && mEnd == -1) + { + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + + *MtlbStart = (gctUINT32)mStart; + *MtlbEnd = (gctUINT32)mEnd; + +OnError: + if (nodeArray) + { + gckOS_Free(Mmu->os, (gctPOINTER)nodeArray); + } + + return status; +} + #if gcdPROCESS_ADDRESS_SPACE gctUINT32 _StlbOffset( @@ -557,22 +691,23 @@ OnError: static gceSTATUS _FillFlatMapping( IN gckMMU Mmu, - IN gctUINT32 PhysBase, - OUT gctSIZE_T Size + IN gctUINT64 PhysBase, + OUT gctSIZE_T Size, + OUT gctUINT32 *GpuBaseAddress ) { gceSTATUS status; gctUINT32 mtlb; + gctUINT32 physBase; gcsADDRESS_AREA_PTR area = &Mmu->area[0]; /************************ look up existing flat mapping ranges. ****************/ - gctUINT64 flatBase = (gctUINT64)PhysBase; + gctUINT64 flatBase = PhysBase; gctUINT32 flatSize = (gctUINT32)Size; gctUINT64 base = flatBase; gctUINT32 size = flatSize; gctUINT64 end = base + size; gctUINT32 i; - end = gcmMIN(end, 0x100000000ull); for (i = 0; i < Mmu->flatMappingRangeCount; i++) { @@ -585,13 +720,8 @@ _FillFlatMapping( { base = gcmMAX(base, Mmu->flatMappingRanges[i].end); - flatBase = (gctUINT32) base; + flatBase = base; flatSize = (gctUINT32) (end - base); - - if (base > 0xFFFFFFFF) - { - flatSize = 0; - } } else { @@ -601,6 +731,11 @@ _FillFlatMapping( if (flatSize == 0) { + if (GpuBaseAddress) + { + *GpuBaseAddress = (gctUINT32) PhysBase; + } + return gcvSTATUS_OK; } } @@ -612,10 +747,11 @@ _FillFlatMapping( gcmkASSERT(Mmu->flatMappingRangeCount <= gcdMAX_FLAT_MAPPING_COUNT); /* overwrite the orignal parameters */ - PhysBase = (gctUINT32)flatBase; + PhysBase = flatBase; + physBase = (gctUINT32)flatBase; Size = (gctSIZE_T)flatSize; - mtlb = _MtlbOffset(PhysBase); + mtlb = _MtlbOffset(physBase); /************************ Setup flat mapping in dynamic range. ****************/ @@ -625,7 +761,7 @@ _FillFlatMapping( gctUINT32_PTR stlbEntry; gctUINT i; - stlbEntry = _StlbEntry(area, PhysBase); + stlbEntry = _StlbEntry(area, physBase); /* Must be aligned to page. */ gcmkASSERT((Size & 0xFFF) == 0); @@ -633,13 +769,13 @@ _FillFlatMapping( for (i = 0; i < (Size / 4096); i++) { /* Flat mapping in page table. */ - _WritePageEntry(stlbEntry, _SetPage(PhysBase + i * 4096, 0, gcvTRUE)); + _WritePageEntry(stlbEntry, _SetPage(physBase + i * 4096, 0, gcvTRUE)); } gcmkSAFECASTSIZET(size, Size); /* Flat mapping in map. */ - _FillFlatMappingInMap(area, _AddressToIndex(area, PhysBase), size / 4096); + _FillFlatMappingInMap(area, _AddressToIndex(area, physBase), size / 4096); return gcvSTATUS_OK; } @@ -647,8 +783,9 @@ _FillFlatMapping( /************************ Setup flat mapping in non dynamic range. **************/ { gctBOOL mutex = gcvFALSE; - gctUINT32 start = PhysBase & ~gcdMMU_PAGE_64K_MASK; - gctUINT32 end = (gctUINT32) (PhysBase + Size - 1) & ~gcdMMU_PAGE_64K_MASK; + gctUINT32 physBaseExt = (gctUINT32) (PhysBase >> 32); + 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; @@ -658,14 +795,38 @@ _FillFlatMapping( gctUINT32 stlbIndex = 0; gctUINT32 totalNewStlbs = 0; gctINT32 firstMtlbEntry = -1; - gctUINT32 mtlbCurEntry = mStart; + gctUINT32 mtlbCurEntry; 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; + if (PhysBase + Size - 1 > 0xffffffff) + { + gctUINT32 mEntries; + gctUINT32 sEntries; + + mEntries = (gctUINT32)(Size + (1 << gcdMMU_MTLB_SHIFT) - 1) / (1 << gcdMMU_MTLB_SHIFT); + + gcmkONERROR(_GetMtlbFreeSpace(Mmu, mEntries, &mStart, &mEnd)); + + sStart = 0; + sEntries = (gctUINT32)(Size + gcdMMU_PAGE_64K_SIZE - 1) / gcdMMU_PAGE_64K_SIZE; + sEnd = (sEntries - 1) % gcdMMU_STLB_64K_ENTRY_NUM; + } + + if (GpuBaseAddress) + { + *GpuBaseAddress = (mStart << gcdMMU_MTLB_SHIFT) + | (sStart << gcdMMU_STLB_64K_SHIFT) + | (physBase & gcdMMU_PAGE_64K_MASK); + } + + mtlbCurEntry = mStart; + /* find all new stlbs, part of new flat mapping range may already have stlbs*/ while (mtlbCurEntry <= mEnd) { @@ -824,13 +985,13 @@ _FillFlatMapping( gcmkASSERT(0); } } - /* Fill STLB. */ - sStart = (start & gcdMMU_STLB_64K_MASK) >> gcdMMU_STLB_64K_SHIFT; while (sStart <= last) { gcmkASSERT(!(start & gcdMMU_PAGE_64K_MASK)); - _WritePageEntry(stlbLogical + sStart, _SetPage(start, 0, gcvTRUE)); + + _WritePageEntry(stlbLogical + sStart, _SetPage(start, physBaseExt, gcvTRUE)); + #if gcdMMU_TABLE_DUMP gckOS_Print("%s(%d): insert STLB[%d]: %08x\n", __FUNCTION__, __LINE__, @@ -839,10 +1000,15 @@ _FillFlatMapping( #endif /* next page. */ start += gcdMMU_PAGE_64K_SIZE; + if (start == 0) + { + physBaseExt++; + } sStart++; curStlbChunk->pageCount++; } + sStart = 0; ++mStart; } @@ -868,9 +1034,9 @@ _FillFlatMapping( gcmkVERIFY_OK(gckOS_ReleaseMutex(Mmu->os, Mmu->pageTableMutex)); #if gcdENABLE_TRUST_APPLICATION - if (Mmu->hardware->secureMode == gcvSECURE_IN_TA) + if (Mmu->hardware->options.secureMode == gcvSECURE_IN_TA) { - gckKERNEL_SecurityMapMemory(Mmu->hardware->kernel, gcvNULL, PhysBase, (gctUINT32)Size/4096, &PhysBase); + gckKERNEL_SecurityMapMemory(Mmu->hardware->kernel, gcvNULL, physBase, (gctUINT32)Size/4096, &physBase); } #endif @@ -901,91 +1067,6 @@ OnError: } } -static gceSTATUS -_FindDynamicSpace( - IN gckMMU Mmu, - OUT gcsDynamicSpaceNode_PTR *Array, - OUT gctINT * Size - ) -{ - gceSTATUS status = gcvSTATUS_OK; - gctPOINTER pointer = gcvNULL; - gcsDynamicSpaceNode_PTR array = gcvNULL; - gctINT size = 0; - gctINT i = 0, nodeStart = -1, nodeEntries = 0; - - /* Allocate memory for the array. */ - gcmkONERROR(gckOS_Allocate(Mmu->os, - gcmSIZEOF(*array) * (gcdMMU_MTLB_ENTRY_NUM / 2), - &pointer)); - - array = (gcsDynamicSpaceNode_PTR)pointer; - - /* Loop all the entries. */ - while (i < gcdMMU_MTLB_ENTRY_NUM) - { - if (!Mmu->mtlbLogical[i]) - { - if (nodeStart < 0) - { - /* This is the first entry of the dynamic space. */ - nodeStart = i; - nodeEntries = 1; - } - else - { - /* Other entries of the dynamic space. */ - nodeEntries++; - } - } - else if (nodeStart >= 0) - { - /* Save the previous node. */ - array[size].start = nodeStart; - array[size].entries = nodeEntries; - size++; - - /* Reset the start. */ - nodeStart = -1; - nodeEntries = 0; - } - - i++; - } - - /* Save the previous node. */ - if (nodeStart >= 0) - { - array[size].start = nodeStart; - array[size].entries = nodeEntries; - size++; - } - -#if gcdMMU_TABLE_DUMP - for (i = 0; i < size; i++) - { - gckOS_Print("%s(%d): [%d]: start=%d, entries=%d.\n", - __FUNCTION__, __LINE__, - i, - array[i].start, - array[i].entries); - } -#endif - - *Array = array; - *Size = size; - - return gcvSTATUS_OK; - -OnError: - if (pointer != gcvNULL) - { - gckOS_Free(Mmu->os, pointer); - } - - return status; -} - static gceSTATUS _SetupAddressArea( IN gckOS Os, @@ -1024,7 +1105,7 @@ _SetupDynamicSpace( ) { gceSTATUS status; - gcsDynamicSpaceNode_PTR nodeArray = gcvNULL; + gcsFreeSpaceNode_PTR nodeArray = gcvNULL; gctINT i, nodeArraySize = 0; gctPHYS_ADDR_T physical; gctUINT32 address; @@ -1035,8 +1116,8 @@ _SetupDynamicSpace( gcsADDRESS_AREA_PTR areaSecure = &Mmu->area[gcvADDRESS_AREA_SECURE]; gctUINT32 secureAreaSize = 0; - /* Find all the dynamic address space. */ - gcmkONERROR(_FindDynamicSpace(Mmu, &nodeArray, &nodeArraySize)); + /* Find all the free address space. */ + gcmkONERROR(_CollectFreeSpace(Mmu, &nodeArray, &nodeArraySize)); for (i = 0; i < nodeArraySize; i++) { @@ -1225,6 +1306,8 @@ _Construct( gctUINT32 physSize; gctUINT32 contiguousBase; gctUINT32 contiguousSize = 0; + gctUINT32 externalBase; + gctUINT32 externalSize = 0; gctUINT32 gpuAddress; gctPHYS_ADDR_T gpuPhysical; gcsADDRESS_AREA_PTR area = gcvNULL; @@ -1301,6 +1384,19 @@ _Construct( map[1] = ~0U; area->heapList = 0; area->freeNodes = gcvFALSE; + + status = gckOS_QueryOption(mmu->os, "contiguousBase", &contiguousBase); + + if (gcmIS_SUCCESS(status)) + { + status = gckOS_QueryOption(mmu->os, "contiguousSize", &contiguousSize); + } + + if (gcmIS_SUCCESS(status) && contiguousSize) + { + mmu->contiguousBaseAddress = contiguousBase - Kernel->hardware->baseAddress; + } + } else { @@ -1365,9 +1461,25 @@ _Construct( if (physSize) { /* Setup user specified flat mapping. */ - gcmkONERROR(_FillFlatMapping(mmu, gpuAddress, physSize)); + gcmkONERROR(_FillFlatMapping(mmu, gpuAddress, physSize, gcvNULL)); } +#ifndef EMULATOR + if (!_ReadPageEntry(mmu->mtlbLogical + 0)) + { + gctUINT32 mtlbEntry; + /* + * Reserved 0~4MB space. + * 64KB page size, Ingore exception, Not Present. + */ + mtlbEntry = (1 << 2) + | (0 << 1) + | (0 << 0); + + _WritePageEntry(mmu->mtlbLogical + 0, mtlbEntry); + } +#endif + status = gckOS_QueryOption(mmu->os, "contiguousBase", &contiguousBase); if (gcmIS_SUCCESS(status)) @@ -1377,8 +1489,35 @@ _Construct( if (gcmIS_SUCCESS(status) && contiguousSize) { + gctUINT64 gpuContiguousBase; + gctUINT32 contiguousBaseAddress; + + gcmkONERROR(gckOS_CPUPhysicalToGPUPhysical(mmu->os, contiguousBase, &gpuContiguousBase)); + /* Setup flat mapping for reserved memory (VIDMEM). */ - gcmkONERROR(_FillFlatMapping(mmu, contiguousBase, contiguousSize)); + gcmkONERROR(_FillFlatMapping(mmu, gpuContiguousBase, contiguousSize, &contiguousBaseAddress)); + + mmu->contiguousBaseAddress = contiguousBaseAddress; + } + + status = gckOS_QueryOption(mmu->os, "externalBase", &externalBase); + + if (gcmIS_SUCCESS(status)) + { + status = gckOS_QueryOption(mmu->os, "externalSize", &externalSize); + } + + if (gcmIS_SUCCESS(status) && externalSize) + { + gctUINT64 gpuExternalBase; + gctUINT32 externalBaseAddress; + + gcmkONERROR(gckOS_CPUPhysicalToGPUPhysical(mmu->os, externalBase, &gpuExternalBase)); + + /* Setup flat mapping for external memory. */ + gcmkONERROR(_FillFlatMapping(mmu, gpuExternalBase, externalSize, &externalBaseAddress)); + + mmu->externalBaseAddress = externalBaseAddress; } gcmkONERROR(_SetupDynamicSpace(mmu)); @@ -2119,7 +2258,7 @@ _FreePages( acquired = gcvFALSE; #if gcdENABLE_TRUST_APPLICATION - if (Mmu->hardware->secureMode == gcvSECURE_IN_TA) + if (Mmu->hardware->options.secureMode == gcvSECURE_IN_TA) { gckKERNEL_SecurityUnmapMemory(Mmu->hardware->kernel, Address, (gctUINT32)PageCount); } @@ -2323,7 +2462,7 @@ gckMMU_FlatMapping( _WritePageEntry(pageTable, _SetPage(Physical + i * 4096, 0)); } - gcmkONERROR(_FillFlatMappingInMap(Mmu, index, NumPages)); + gcmkONERROR(_FillFlatMapping(Mmu, PhysBase, Size, gcvNULL)); return gcvSTATUS_OK; @@ -2671,7 +2810,7 @@ gckMMU_FillFlatMapping( if (hardware->mmuVersion) { - gcmkONERROR(_FillFlatMapping(Mmu, PhysBase, Size)); + gcmkONERROR(_FillFlatMapping(Mmu, PhysBase, Size, gcvNULL)); } 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 c6423d1e3bad..167e65d37a85 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 @@ -305,6 +305,7 @@ gceSTATUS gckVGKERNEL_Dispatch( &kernelInterface->u.QueryChipIdentity.chipRevision, &kernelInterface->u.QueryChipIdentity.productID, &kernelInterface->u.QueryChipIdentity.ecoID, + &kernelInterface->u.QueryChipIdentity.customerID, &kernelInterface->u.QueryChipIdentity.chipFeatures, &kernelInterface->u.QueryChipIdentity.chipMinorFeatures, &kernelInterface->u.QueryChipIdentity.chipMinorFeatures2 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 2826a0a5ab35..18620175fe87 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 @@ -422,6 +422,7 @@ gckVIDMEM_Construct( /* Allocate the gckVIDMEM object. */ gcmkONERROR(gckOS_Allocate(Os, gcmSIZEOF(struct _gckVIDMEM), &pointer)); + gckOS_ZeroMemory(pointer, gcmSIZEOF(struct _gckVIDMEM)); memory = pointer; @@ -1532,9 +1533,8 @@ gckVIDMEM_Lock( #if !gcdPROCESS_ADDRESS_SPACE gctBOOL needMapping = gcvFALSE; #endif - gctUINT64 physicalAddress; + gctUINT64 physicalAddress = ~0ULL; gcuVIDMEM_NODE_PTR node = Node->node; - gctPHYS_ADDR_T physical; gctSIZE_T pageSize; gctUINT32 pageMask; @@ -1574,35 +1574,20 @@ gckVIDMEM_Lock( /* Increment the lock count. */ node->VidMem.locked ++; - /* Return the physical address of the node. */ gcmkSAFECASTSIZET(offset, node->VidMem.offset); + physicalAddress = node->VidMem.memory->baseAddress + + offset + + node->VidMem.alignment; - *Address = node->VidMem.memory->baseAddress - + offset - + node->VidMem.alignment; - - physicalAddress = *Address; - - /* Get hardware specific address. */ -#if gcdENABLE_VG - if (Kernel->vg == gcvNULL) -#endif + if (node->VidMem.pool == gcvPOOL_LOCAL_EXTERNAL) { - if (Kernel->hardware->mmuVersion == 0) - { - /* Convert physical to GPU address for old mmu. */ - gcmkASSERT(*Address > Kernel->hardware->baseAddress); - *Address -= Kernel->hardware->baseAddress; - } + *Address = Kernel->externalBaseAddress + offset; + } + else + { + gcmkASSERT(node->VidMem.pool == gcvPOOL_SYSTEM); + *Address = Kernel->contiguousBaseAddress + offset; } - - gcmkVERIFY_OK(gckOS_CPUPhysicalToGPUPhysical( - Kernel->os, - *Address, - &physical - )); - - gcmkSAFECASTSIZET(*Address, physical); gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_VIDMEM, "Locked node 0x%x (%d) @ 0x%08X", @@ -1726,9 +1711,9 @@ gckVIDMEM_Lock( { #if gcdENABLE_TRUST_APPLICATION #if gcdENABLE_VG - if (Kernel->core != gcvCORE_VG && Kernel->hardware->secureMode == gcvSECURE_IN_TA) + if (Kernel->core != gcvCORE_VG && Kernel->hardware->options.secureMode == gcvSECURE_IN_TA) #else - if (Kernel->hardware->secureMode == gcvSECURE_IN_TA) + if (Kernel->hardware->options.secureMode == gcvSECURE_IN_TA) #endif { gcmkONERROR(gckKERNEL_MapInTrustApplicaiton( @@ -2633,6 +2618,7 @@ gckVIDMEM_NODE_Allocate( node = pointer; node->node = VideoNode; + node->kernel = Kernel; node->type = Type; node->pool = Pool; @@ -2745,6 +2731,266 @@ gckVIDMEM_NODE_Dereference( return gcvSTATUS_OK; } +#if defined(CONFIG_DMA_SHARED_BUFFER) + +/******************************************************************************* +** +** +** Code for dma_buf ops +** +** +*******************************************************************************/ + +#include +#include +#include + +static struct sg_table *_dmabuf_map(struct dma_buf_attachment *attachment, + enum dma_data_direction direction) +{ + struct sg_table *sgt = gcvNULL; + struct dma_buf *dmabuf = attachment->dmabuf; + gckVIDMEM_NODE nodeObject = dmabuf->priv; + gceSTATUS status = gcvSTATUS_OK; + + do + { + gcuVIDMEM_NODE_PTR node = nodeObject->node; + gctPHYS_ADDR physical = gcvNULL; + gctSIZE_T offset = 0; + gctSIZE_T bytes = 0; + + if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM) + { + physical = node->VidMem.memory->physical; + offset = node->VidMem.offset; + bytes = node->VidMem.bytes; + } + else + { + physical = node->Virtual.physical; + offset = 0; + bytes = node->Virtual.bytes; + } + + gcmkERR_BREAK(gckOS_MemoryGetSGT(nodeObject->kernel->os, physical, offset, bytes, (gctPOINTER*)&sgt)); + + if (dma_map_sg(attachment->dev, sgt->sgl, sgt->nents, direction) == 0) + { + sg_free_table(sgt); + kfree(sgt); + sgt = gcvNULL; + gcmkERR_BREAK(gcvSTATUS_GENERIC_IO); + } + } + while (gcvFALSE); + + return sgt; +} + +static void _dmabuf_unmap(struct dma_buf_attachment *attachment, + struct sg_table *sgt, + enum dma_data_direction direction) +{ + dma_unmap_sg(attachment->dev, sgt->sgl, sgt->nents, direction); + + sg_free_table(sgt); + kfree(sgt); +} + +static int _dmabuf_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma) +{ + gckVIDMEM_NODE nodeObject = dmabuf->priv; + gcuVIDMEM_NODE_PTR node = nodeObject->node; + gctPHYS_ADDR physical = gcvNULL; + gctSIZE_T skipPages = vma->vm_pgoff; + gctSIZE_T numPages = PAGE_ALIGN(vma->vm_end - vma->vm_start) >> PAGE_SHIFT; + gceSTATUS status = gcvSTATUS_OK; + + if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM) + { + physical = node->VidMem.memory->physical; + skipPages += (node->VidMem.offset >> PAGE_SHIFT); + } + else + { + physical = node->Virtual.physical; + } + + gcmkONERROR(gckOS_MemoryMmap(nodeObject->kernel->os, physical, skipPages, numPages, vma)); + +OnError: + return gcmIS_ERROR(status) ? -EINVAL : 0; +} + +static void _dmabuf_release(struct dma_buf *dmabuf) +{ + gckVIDMEM_NODE nodeObject = dmabuf->priv; + + gcmkVERIFY_OK(gckVIDMEM_NODE_Reference(nodeObject->kernel, nodeObject)); +} + +static void *_dmabuf_kmap(struct dma_buf *dmabuf, unsigned long offset) +{ + gckVIDMEM_NODE nodeObject = dmabuf->priv; + gcuVIDMEM_NODE_PTR node = nodeObject->node; + gctINT8_PTR kvaddr = gcvNULL; + gctPHYS_ADDR physical = gcvNULL; + gctSIZE_T bytes = 0; + gctSIZE_T pageCount = 0; + + offset = (offset << PAGE_SHIFT); + if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM) + { + physical = node->VidMem.memory->physical; + offset += node->VidMem.offset; + bytes = node->VidMem.bytes; + } + else + { + physical = node->Virtual.physical; + bytes = node->Virtual.bytes; + } + + if (gcmIS_SUCCESS(gckOS_CreateKernelVirtualMapping( + nodeObject->kernel->os, physical, bytes, (gctPOINTER*)&kvaddr, &pageCount))) + { + kvaddr += offset; + } + + return (gctPOINTER)kvaddr; +} + +static void _dmabuf_kunmap(struct dma_buf *dmabuf, unsigned long offset, void *ptr) +{ + gckVIDMEM_NODE nodeObject = dmabuf->priv; + gcuVIDMEM_NODE_PTR node = nodeObject->node; + gctINT8_PTR kvaddr = (gctINT8_PTR)ptr - (offset << PAGE_SHIFT); + gctPHYS_ADDR physical = gcvNULL; + gctSIZE_T bytes = 0; + + if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM) + { + physical = node->VidMem.memory->physical; + kvaddr -= node->VidMem.offset; + bytes = node->VidMem.bytes; + } + else + { + physical = node->Virtual.physical; + bytes = node->Virtual.bytes; + } + + gcmkVERIFY_OK(gckOS_DestroyKernelVirtualMapping( + nodeObject->kernel->os, physical, bytes, (gctPOINTER*)&kvaddr)); +} + +static struct dma_buf_ops _dmabuf_ops = +{ + .map_dma_buf = _dmabuf_map, + .unmap_dma_buf = _dmabuf_unmap, + .mmap = _dmabuf_mmap, + .release = _dmabuf_release, + .kmap_atomic = _dmabuf_kmap, + .kunmap_atomic = _dmabuf_kunmap, + .kmap = _dmabuf_kmap, + .kunmap = _dmabuf_kunmap, +}; +#endif + +gceSTATUS +gckVIDMEM_NODE_Export( + IN gckKERNEL Kernel, + IN gctUINT32 Handle, + IN gctINT32 Flags, + OUT gctPOINTER *DmaBuf, + OUT gctINT32 *FD + ) +{ +#if defined(CONFIG_DMA_SHARED_BUFFER) + gceSTATUS status = gcvSTATUS_OK; + gckVIDMEM_NODE nodeObject = gcvNULL; + gctUINT32 processID = 0; + struct dma_buf *dmabuf = gcvNULL; + + gcmkHEADER_ARG("Kernel=%p Handle=0x%x", Kernel, Handle); + + gckOS_GetProcessID(&processID); + gcmkONERROR(gckVIDMEM_HANDLE_Lookup(Kernel, processID, Handle, &nodeObject)); + + dmabuf = nodeObject->dmabuf; + if (!dmabuf) + { + gctSIZE_T bytes = 0; + gctPHYS_ADDR physical = gcvNULL; + gcuVIDMEM_NODE_PTR node = nodeObject->node; + + if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM) + { + physical = node->VidMem.memory->physical; + bytes = node->VidMem.bytes; + } + else + { + physical = node->Virtual.physical; + bytes = node->Virtual.bytes; + } + + /* Donot really get SGT, just check if the allocator support GetSGT. */ + gcmkONERROR(gckOS_MemoryGetSGT(Kernel->os, physical, 0, 0, NULL)); + + { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); + exp_info.ops = &_dmabuf_ops; + exp_info.size = bytes; + exp_info.flags = Flags; + exp_info.priv = nodeObject; + dmabuf = dma_buf_export(&exp_info); +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0) + dmabuf = dma_buf_export(nodeObject, &_dmabuf_ops, bytes, Flags, NULL); +#else + dmabuf = dma_buf_export(nodeObject, &_dmabuf_ops, bytes, Flags); +#endif + } + + if (IS_ERR(dmabuf)) + { + gcmkONERROR(gcvSTATUS_GENERIC_IO); + } + + /* Reference this gckVIDMEM_NODE object. */ + gckVIDMEM_NODE_Reference(Kernel, nodeObject); + nodeObject->dmabuf = dmabuf; + } + + if (DmaBuf) + { + *DmaBuf = nodeObject->dmabuf; + } + + if (FD) + { + gctINT fd = dma_buf_fd(dmabuf, Flags); + + if (fd < 0) + { + gcmkONERROR(gcvSTATUS_GENERIC_IO); + } + + *FD = fd; + } + +OnError: + gcmkFOOTER_ARG("*DmaBuf=%p *FD=0x%x", gcmOPT_POINTER(DmaBuf), gcmOPT_VALUE(FD)); + return status; +#else + gcmkFATAL("The kernel did NOT support CONFIG_DMA_SHARED_BUFFER"); + return gcvSTATUS_NOT_SUPPORTED; +#endif +} + + /******************************************************************************* ** ** gckVIDMEM_NODE_Name @@ -2769,7 +3015,7 @@ gceSTATUS gckVIDMEM_NODE_Name( IN gckKERNEL Kernel, IN gctUINT32 Handle, - IN gctUINT32 * Name + OUT gctUINT32 * Name ) { gceSTATUS status; @@ -2852,7 +3098,7 @@ gceSTATUS gckVIDMEM_NODE_Import( IN gckKERNEL Kernel, IN gctUINT32 Name, - IN gctUINT32 * Handle + OUT gctUINT32 * Handle ) { gceSTATUS status; @@ -2992,54 +3238,101 @@ OnError: } gceSTATUS -gckVIDMEM_ConstructVirtualFromUserMemory( +gckVIDMEM_NODE_WrapUserMemory( IN gckKERNEL Kernel, IN gcsUSER_MEMORY_DESC_PTR Desc, - OUT gcuVIDMEM_NODE_PTR * Node + OUT gctUINT32 * Handle ) { - gckOS os; - gceSTATUS status; - gcuVIDMEM_NODE_PTR node = gcvNULL; - gctPOINTER pointer = gcvNULL; + gceSTATUS status = gcvSTATUS_OK; + gctBOOL found = gcvFALSE; gcmkHEADER_ARG("Kernel=0x%x", Kernel); /* Verify the arguments. */ gcmkVERIFY_OBJECT(Kernel, gcvOBJ_KERNEL); - gcmkVERIFY_ARGUMENT(Node != gcvNULL); + gcmkVERIFY_ARGUMENT(Desc); + gcmkVERIFY_ARGUMENT(Handle); - /* Extract the gckOS object pointer. */ - os = Kernel->os; - gcmkVERIFY_OBJECT(os, gcvOBJ_OS); - - /* Allocate an gcuVIDMEM_NODE union. */ - gcmkONERROR(gckOS_Allocate(os, gcmSIZEOF(gcuVIDMEM_NODE), &pointer)); +#if defined(CONFIG_DMA_SHARED_BUFFER) + if (Desc->flag & gcvALLOC_FLAG_DMABUF) + { + struct dma_buf *dmabuf; + int fd = (int)Desc->handle; - gckOS_ZeroMemory(pointer, gcmSIZEOF(gcuVIDMEM_NODE)); + if (fd >= 0) + { + /* Import dma buf handle. */ + dmabuf = dma_buf_get(fd); - node = pointer; + Desc->handle = -1; + Desc->dmabuf = gcmPTR_TO_UINT64(dmabuf); - /* Initialize gcuVIDMEM_NODE union for virtual memory. */ - node->Virtual.kernel = Kernel; + dma_buf_put(dmabuf); + } + else + { + dmabuf = gcmUINT64_TO_PTR(Desc->dmabuf); + } - /* Wrap Memory. */ - gcmkONERROR(gckOS_WrapMemory( - os, Desc, &node->Virtual.bytes, &node->Virtual.physical, &node->Virtual.contiguous)); + if (dmabuf->ops == &_dmabuf_ops) + { + gctBOOL referenced = gcvFALSE; + gckVIDMEM_NODE nodeObject = dmabuf->priv; - /* Return pointer to the gcuVIDMEM_NODE union. */ - *Node = node; + do + { + /* Reference the node. */ + gcmkERR_BREAK(gckVIDMEM_NODE_Reference(Kernel, nodeObject)); + /* Allocate a handle for current process. */ + gcmkERR_BREAK(gckVIDMEM_HANDLE_Allocate(Kernel, nodeObject, Handle)); + found = gcvTRUE; + } + while (gcvFALSE); - /* Success. */ - gcmkFOOTER_ARG("*Node=0x%x", *Node); - return gcvSTATUS_OK; + if (gcmIS_ERROR(status) && referenced) + { + gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference(Kernel, nodeObject)); + } + } + } +#endif -OnError: - /* Roll back. */ - if (node != gcvNULL) + if (!found) { - /* Free the structure. */ - gcmkVERIFY_OK(gcmkOS_SAFE_FREE(os, node)); + gckOS os = Kernel->os; + gcuVIDMEM_NODE_PTR node = gcvNULL; + + gcmkVERIFY_OBJECT(os, gcvOBJ_OS); + + do { + /* Allocate an gcuVIDMEM_NODE union. */ + gcmkERR_BREAK(gckOS_Allocate(os, gcmSIZEOF(gcuVIDMEM_NODE), (gctPOINTER*)&node)); + gckOS_ZeroMemory(node, gcmSIZEOF(gcuVIDMEM_NODE)); + + /* Initialize gcuVIDMEM_NODE union for virtual memory. */ + node->Virtual.kernel = Kernel; + + /* Wrap Memory. */ + gcmkERR_BREAK(gckOS_WrapMemory(os, Desc, &node->Virtual.bytes, + &node->Virtual.physical, &node->Virtual.contiguous)); + + /* Allocate handle for this video memory. */ + gcmkERR_BREAK(gckVIDMEM_NODE_Allocate( + Kernel, + node, + gcvSURF_BITMAP, + gcvPOOL_VIRTUAL, + Handle + )); + } + while (gcvFALSE); + + if (gcmIS_ERROR(status) && node) + { + /* Free the structure. */ + gcmkVERIFY_OK(gcmkOS_SAFE_FREE(os, node)); + } } /* Return the status. */ @@ -3142,3 +3435,31 @@ gckVIDMEM_FindVIDMEM( return status; } +/* Get the nodes of all banks. */ +gceSTATUS +gckVIDMEM_QueryNodes( + IN gckKERNEL Kernel, + IN gcePOOL Pool, + OUT gctINT32 *Count, + OUT gcuVIDMEM_NODE_PTR *Nodes + ) +{ + gceSTATUS status = gcvSTATUS_OK; + gckVIDMEM memory = gcvNULL; + + do + { + status = gckKERNEL_GetVideoMemoryPool(Kernel, Pool, &memory); + if (status != gcvSTATUS_OK) + break; + + if (memory != gcvNULL) + { + *Count = gcmCOUNTOF(memory->sentinel); + *Nodes = memory->sentinel; + } + } + while (gcvFALSE); + + return status; +} diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_feature_database.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_feature_database.h index 0e929401fffd..b64014be720a 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-07-28 05:38*/ +/*Auto created on 2017-09-29 05:51*/ #ifndef _gc_feature_database_h_ #define _gc_feature_database_h_ @@ -479,6 +479,12 @@ typedef struct gctUINT32 SEPARATE_LS:1; gctUINT32 MCFE:1; gctUINT32 WIDELINE_TRIANGLE_EMU:1; + gctUINT32 VG_RESOLUTION_8K:1; + gctUINT32 FENCE_32BIT:1; + gctUINT32 FENCE_64BIT:1; + gctUINT32 NN_INTERLEVE8:1; + gctUINT32 TP_REORDER:1; + gctUINT32 PE_DEPTH_ONLY_OQFIX:1; } gcsFEATURE_DATABASE; static gcsFEATURE_DATABASE gChipInfo[] = { @@ -903,6 +909,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* dc0000_5560 */ { @@ -1325,6 +1337,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc200_4650 */ { @@ -1747,6 +1765,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc200_4621 */ { @@ -2169,6 +2193,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc300_4650 */ { @@ -2591,6 +2621,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc300_4650_guoke */ { @@ -3013,6 +3049,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc300_4_6_6_rc0 */ { @@ -3435,6 +3477,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc320_5007 */ { @@ -3461,7 +3509,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -3857,6 +3905,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc320_5220 */ { @@ -4279,6 +4333,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc320_5303 */ { @@ -4701,6 +4761,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc320_5303_1 */ { @@ -5123,6 +5189,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc320_5340 */ { @@ -5545,6 +5617,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc320c_5341 */ { @@ -5967,6 +6045,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc320_5341 */ { @@ -6389,6 +6473,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc520l_5_3_5_rc0 */ { @@ -6811,6 +6901,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc355_v121_rc5 */ { @@ -7233,6 +7329,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc355_v121x */ { @@ -7655,23 +7757,29 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc400_4633 */ + /* gc355_8Kx8K */ { - 0x400, /* ChipID */ - 0x4633, /* ChipRevision */ - 0x0, /* ProductID */ + 0x355, /* ChipID */ + 0x1217, /* ChipRevision */ + 0x3003550, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ + 0x407, /* 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 */ @@ -7695,36 +7803,36 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -7732,61 +7840,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 */ @@ -7809,7 +7917,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 */ @@ -7994,9 +8102,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 */ @@ -8009,11 +8117,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 */ @@ -8077,15 +8185,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x1, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* 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 */ @@ -8096,7 +8210,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 */ @@ -8115,23 +8229,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ @@ -8210,7 +8324,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 */ @@ -8227,23 +8341,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 */ @@ -8270,13 +8384,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 */ @@ -8441,7 +8555,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 */ @@ -8499,16 +8613,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc400L_0x465x */ + /* gc600_4633 */ { - 0x400, /* ChipID */ - 0x4652, /* ChipRevision */ - 0x70001, /* ProductID */ + 0x600, /* ChipID */ + 0x4633, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x7, /* PatchVersion */ - 0x0, /* FormalRelease */ + 0x0, /* PatchVersion */ + 0x1, /* FormalRelease */ 0x4, /* gcFEATURE_VALUE_Streams */ 0x20, /* gcFEATURE_VALUE_TempRegisters */ 0x40, /* gcFEATURE_VALUE_ThreadCount */ @@ -8518,7 +8638,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x80, /* 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 */ @@ -8537,30 +8657,30 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x0, /* gcFEATURE_BIT_REG_FastScaler */ + 0x1, /* gcFEATURE_BIT_REG_Pipe2D */ + 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_FastScaler */ 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ - 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 */ @@ -8589,7 +8709,7 @@ 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 */ @@ -8629,15 +8749,15 @@ 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 */ + 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 */ @@ -8649,23 +8769,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 */ - 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 */ @@ -8692,20 +8812,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 */ @@ -8714,7 +8834,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 */ @@ -8746,7 +8866,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 */ @@ -8921,15 +9041,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000nano_0x4652 */ + /* gc400_4645 */ { 0x400, /* ChipID */ - 0x4652, /* ChipRevision */ - 0x70001, /* ProductID */ + 0x4645, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x7, /* PatchVersion */ + 0x4, /* PatchVersion */ 0x1, /* FormalRelease */ 0x4, /* gcFEATURE_VALUE_Streams */ 0x20, /* gcFEATURE_VALUE_TempRegisters */ @@ -8940,7 +9066,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 */ @@ -8959,29 +9085,29 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ @@ -9051,7 +9177,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 */ @@ -9059,7 +9185,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 */ @@ -9081,7 +9207,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 */ @@ -9127,7 +9253,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 */ @@ -9136,7 +9262,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 */ @@ -9168,7 +9294,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 */ @@ -9285,7 +9411,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 */ @@ -9343,16 +9469,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000nano_0x4652 */ + /* gc400L_0x465x */ { 0x400, /* ChipID */ 0x4652, /* ChipRevision */ 0x70001, /* ProductID */ 0x0, /* EcoID */ - 0x100, /* CustomerID */ - 0x9, /* PatchVersion */ - 0x1, /* FormalRelease */ + 0x0, /* CustomerID */ + 0x7, /* PatchVersion */ + 0x0, /* FormalRelease */ 0x4, /* gcFEATURE_VALUE_Streams */ 0x20, /* gcFEATURE_VALUE_TempRegisters */ 0x40, /* gcFEATURE_VALUE_ThreadCount */ @@ -9724,7 +9856,7 @@ 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 */ @@ -9765,26 +9897,32 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc420_5325 */ + /* gc7000nano_0x4652 */ { - 0x420, /* ChipID */ - 0x5325, /* ChipRevision */ - 0x0, /* ProductID */ + 0x400, /* ChipID */ + 0x4652, /* ChipRevision */ + 0x70001, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x2, /* PatchVersion */ + 0x7, /* 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 */ @@ -9803,47 +9941,47 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ - 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 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 */ @@ -9855,26 +9993,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 */ @@ -9885,8 +10023,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 */ @@ -9897,16 +10035,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 */ @@ -9916,13 +10054,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 */ @@ -9933,33 +10071,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 */ @@ -9968,19 +10106,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 */ @@ -10012,7 +10150,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 */ @@ -10071,7 +10209,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 */ @@ -10187,26 +10325,32 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc420_5336 */ + /* gc7000nano_0x4652 */ { - 0x420, /* ChipID */ - 0x5336, /* ChipRevision */ - 0x0, /* ProductID */ + 0x400, /* ChipID */ + 0x4652, /* ChipRevision */ + 0x70001, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ - 0x3, /* 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 */ @@ -10225,47 +10369,47 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ - 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 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 */ @@ -10277,26 +10421,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 */ @@ -10307,8 +10451,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 */ @@ -10319,16 +10463,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 */ @@ -10338,13 +10482,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 */ + 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 */ @@ -10355,33 +10499,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 */ @@ -10390,19 +10534,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 */ @@ -10411,7 +10555,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 */ @@ -10419,8 +10563,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 */ @@ -10434,7 +10578,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 */ @@ -10493,7 +10637,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 */ @@ -10568,7 +10712,7 @@ 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 */ @@ -10609,16 +10753,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc420cpd_533rc7a */ + /* gc420_5325 */ { 0x420, /* ChipID */ - 0x5337, /* ChipRevision */ + 0x5325, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x1, /* PatchVersion */ - 0x0, /* FormalRelease */ + 0x2, /* PatchVersion */ + 0x1, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ @@ -10762,7 +10912,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 */ @@ -10828,12 +10978,12 @@ 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 */ 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 */ @@ -10841,8 +10991,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 */ @@ -11031,15 +11181,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc428_5421 */ + /* gc420_5336 */ { - 0x428, /* ChipID */ - 0x5421, /* ChipRevision */ + 0x420, /* ChipID */ + 0x5336, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x1, /* PatchVersion */ + 0x3, /* PatchVersion */ 0x1, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -11070,27 +11226,27 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -11098,73 +11254,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 */ @@ -11172,7 +11328,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 */ @@ -11183,54 +11339,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 */ @@ -11241,7 +11397,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 */ @@ -11250,12 +11406,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ 0x0, /* gcFEATURE_BIT_REG_DESupertile */ @@ -11263,8 +11419,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 */ @@ -11453,11 +11609,17 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc428c_5_4_2_rc3a */ + /* gc420cpd_533rc7a */ { - 0x428, /* ChipID */ - 0x5423, /* ChipRevision */ + 0x420, /* ChipID */ + 0x5337, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ @@ -11492,27 +11654,27 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -11520,73 +11682,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 */ @@ -11594,7 +11756,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 */ @@ -11605,54 +11767,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 */ @@ -11663,24 +11825,24 @@ 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 */ 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_MultiSrcV2 */ + 0x0, /* gcFEATURE_BIT_REG_CSCV2 */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x1, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ - 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 */ @@ -11690,12 +11852,12 @@ 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 */ 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 */ @@ -11875,16 +12037,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc520_5341 */ + /* gc428_5421 */ { - 0x520, /* ChipID */ - 0x5341, /* ChipRevision */ + 0x428, /* ChipID */ + 0x5421, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ - 0x0, /* FormalRelease */ + 0x1, /* PatchVersion */ + 0x1, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ @@ -11913,28 +12081,28 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -11942,73 +12110,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 */ @@ -12016,7 +12184,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 */ @@ -12027,20 +12195,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 */ @@ -12058,18 +12226,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 */ @@ -12078,24 +12246,24 @@ 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 */ 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 */ @@ -12112,7 +12280,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 */ @@ -12122,7 +12290,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 */ @@ -12297,15 +12465,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc520_5540_rc0 */ + /* gc428c_5_4_2_rc3a */ { - 0x520, /* ChipID */ - 0x5540, /* ChipRevision */ - 0x5200, /* ProductID */ + 0x428, /* ChipID */ + 0x5423, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ + 0x1, /* PatchVersion */ 0x0, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -12369,7 +12543,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_FE20BitIndex */ 0x0, /* gcFEATURE_BIT_REG_FlipY */ 0x0, /* gcFEATURE_BIT_REG_DualReturnBus */ - 0x0, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ 0x0, /* gcFEATURE_BIT_REG_Texture8K */ 0x0, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ 0x0, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ @@ -12459,7 +12633,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 */ @@ -12518,10 +12692,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */ 0x1, /* gcFEATURE_BIT_REG_DualPipeOPF */ 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2 */ - 0x0, /* gcFEATURE_BIT_REG_CSCV2 */ + 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 */ 0x1, /* gcFEATURE_BIT_REG_DESupertile */ @@ -12534,17 +12708,17 @@ 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 */ 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */ - 0x1, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ + 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 */ @@ -12561,8 +12735,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 */ @@ -12719,15 +12893,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc520l_5_3_4_rc2b */ + /* gc520_5341 */ { 0x520, /* ChipID */ - 0x5342, /* ChipRevision */ - 0x5202, /* ProductID */ + 0x5341, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x2, /* PatchVersion */ + 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -12777,7 +12957,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_No422Texture */ 0x1, /* 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 */ @@ -12956,7 +13136,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 */ @@ -12990,14 +13170,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 */ + 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 */ @@ -13141,15 +13321,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc520c_5_5_0 */ + /* gc520_5540_rc0 */ { 0x520, /* ChipID */ - 0x5501, /* ChipRevision */ + 0x5540, /* ChipRevision */ 0x5200, /* ProductID */ 0x0, /* EcoID */ - 0x3, /* CustomerID */ - 0x2, /* PatchVersion */ + 0x0, /* CustomerID */ + 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -13199,7 +13385,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 */ @@ -13296,7 +13482,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -13362,7 +13548,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ @@ -13405,21 +13591,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 */ 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */ 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */ 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */ 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ - 0x1, /* gcFEATURE_BIT_V4Compression */ - 0x1, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */ + 0x0, /* gcFEATURE_BIT_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 */ @@ -13447,7 +13633,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 */ @@ -13491,7 +13677,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */ 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */ 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */ - 0x1, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */ + 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */ 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */ @@ -13563,15 +13749,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc520c_5_5_4_rc1 */ + /* gc520l_5_3_4_rc2b */ { 0x520, /* ChipID */ - 0x5541, /* ChipRevision */ - 0x5200, /* ProductID */ + 0x5342, /* ChipRevision */ + 0x5202, /* ProductID */ 0x0, /* EcoID */ - 0x202, /* CustomerID */ - 0x0, /* PatchVersion */ + 0x0, /* CustomerID */ + 0x2, /* PatchVersion */ 0x0, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -13602,27 +13794,27 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ - 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_NoScaler */ + 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */ 0x0, /* gcFEATURE_BIT_REG_HalfPECache */ 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */ 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */ @@ -13630,73 +13822,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 */ @@ -13704,7 +13896,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 */ @@ -13715,20 +13907,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 */ @@ -13746,8 +13938,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 */ @@ -13757,7 +13949,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 */ @@ -13766,37 +13958,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 */ @@ -13805,11 +13997,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 */ @@ -13827,21 +14019,21 @@ 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 */ 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 */ + 0x1, /* 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 */ + 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 */ @@ -13985,16 +14177,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc520sp_5_5_2_rc0a */ + /* gc520c_5_5_0 */ { 0x520, /* ChipID */ - 0x5520, /* ChipRevision */ + 0x5501, /* ChipRevision */ 0x5200, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ - 0x1, /* PatchVersion */ - 0x1, /* FormalRelease */ + 0x3, /* CustomerID */ + 0x2, /* PatchVersion */ + 0x0, /* FormalRelease */ 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ @@ -14023,7 +14221,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ 0x0, /* gcFEATURE_BIT_REG_DXTTextureCompression */ @@ -14140,6 +14338,434 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ 0x0, /* gcFEATURE_BIT_REG_TileFiller */ 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ + 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */ + 0x1, /* gcFEATURE_BIT_REG_YUVConversion */ + 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */ + 0x0, /* gcFEATURE_BIT_REG_Interleaver */ + 0x0, /* gcFEATURE_BIT_REG_MixedStreams */ + 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */ + 0x1, /* gcFEATURE_BIT_REG_NoIndexPattern */ + 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */ + 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */ + 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ + 0x0, /* gcFEATURE_BIT_REG_OclOnly */ + 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ + 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ + 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ + 0x0, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ + 0x0, /* gcFEATURE_BIT_REG_Generics */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes9 */ + 0x0, /* gcFEATURE_BIT_REG_FastMSAA */ + 0x0, /* gcFEATURE_BIT_REG_WClip */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes10 */ + 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */ + 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ + 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_ACE */ + 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */ + 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */ + 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ + 0x0, /* gcFEATURE_BIT_REG_NewHZ */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes15 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_SHEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_SHEnhancements4 */ + 0x0, /* gcFEATURE_BIT_REG_TXEnhancements2 */ + 0x0, /* gcFEATURE_BIT_REG_FEEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_PEEnhancements2 */ + 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_DENoGamma */ + 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements4 */ + 0x0, /* gcFEATURE_BIT_REG_PEEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */ + 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements5 */ + 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ + 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_Halti2 */ + 0x1, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ + 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */ + 0x1, /* gcFEATURE_BIT_REG_DualPipeOPF */ + 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2 */ + 0x1, /* gcFEATURE_BIT_REG_CSCV2 */ + 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */ + 0x0, /* gcFEATURE_BIT_REG_Compression2D */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ + 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ + 0x1, /* gcFEATURE_BIT_REG_DESupertile */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */ + 0x0, /* gcFEATURE_BIT_REG_SHEnhancements6 */ + 0x0, /* gcFEATURE_BIT_REG_SHEnhancements7 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */ + 0x1, /* gcFEATURE_BIT_REG_DEAddress40 */ + 0x1, /* gcFEATURE_BIT_REG_MiniMMUFix */ + 0x0, /* gcFEATURE_BIT_REG_EEZ */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes21 */ + 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ + 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */ + 0x0, /* gcFEATURE_BIT_REG_Halti3 */ + 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ + 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ + 0x1, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */ + 0x1, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ + 0x0, /* gcFEATURE_BIT_REG_Halti4 */ + 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ + 0x1, /* gcFEATURE_BIT_REG_AndroidOnly */ + 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ + 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ + 0x0, /* gcFEATURE_BIT_REG_BugFixesIn544 */ + 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */ + 0x0, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ + 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */ + 0x0, /* gcFEATURE_BIT_REG_TX6bitFrac */ + 0x0, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ + 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ + 0x0, /* gcFEATURE_BIT_REG_RSS8 */ + 0x0, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ + 0x0, /* gcFEATURE_BIT_REG_Halti5 */ + 0x0, /* gcFEATURE_BIT_REG_Evis */ + 0x0, /* gcFEATURE_BIT_REG_BltEngine */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ + 0x0, /* gcFEATURE_BIT_REG_DEC */ + 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ + 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ + 0x0, /* gcFEATURE_BIT_RenderTarget8 */ + 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ + 0x0, /* gcFEATURE_BIT_FaceLod */ + 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */ + 0x1, /* gcFEATURE_BIT_VMSAA */ + 0x0, /* gcFEATURE_BIT_ChipEnableLink */ + 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */ + 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */ + 0x0, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */ + 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ + 0x1, /* gcFEATURE_BIT_V4Compression */ + 0x1, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */ + 0x0, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */ + 0x0, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */ + 0x0, /* gcFEATURE_BIT_NEW_GPIPE */ + 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */ + 0x0, /* gcFEATURE_BIT_MSAA_SHADING */ + 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ + 0x0, /* gcFEATURE_BIT_NO_ASTC */ + 0x0, /* gcFEATURE_BIT_NO_DXT */ + 0x0, /* gcFEATURE_BIT_HWTFB */ + 0x0, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */ + 0x0, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */ + 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */ + 0x0, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */ + 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */ + 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */ + 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */ + 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */ + 0x0, /* gcFEATURE_BIT_RS_NEW_BASEADDR */ + 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */ + 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ + 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ + 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */ + 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */ + 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */ + 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */ + 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */ + 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */ + 0x0, /* gcFEATURE_BIT_SUPPORT_MOVAI */ + 0x0, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */ + 0x0, /* gcFEATURE_BIT_PE_RGBA16I_FIX */ + 0x0, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */ + 0x0, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */ + 0x0, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */ + 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */ + 0x0, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */ + 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */ + 0x0, /* gcFEATURE_BIT_SECURITY */ + 0x0, /* gcFEATURE_BIT_ROBUSTNESS */ + 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */ + 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */ + 0x0, /* gcFEATURE_BIT_USC_VX_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */ + 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */ + 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */ + 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */ + 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */ + 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */ + 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */ + 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */ + 0x0, /* gcFEATURE_BIT_DRAWID */ + 0x0, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */ + 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */ + 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */ + 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */ + 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */ + 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */ + 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */ + 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */ + 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */ + 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */ + 0x0, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */ + 0x0, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */ + 0x1, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */ + 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ + 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */ + 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */ + 0x0, /* gcFEATURE_BIT_VG_MMU */ + 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */ + 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */ + 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */ + 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */ + 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */ + 0x0, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */ + 0x0, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */ + 0x0, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ + 0x0, /* gcFEATURE_BIT_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 */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ + }, + /* 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 */ @@ -14147,7 +14773,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_MixedStreams */ 0x1, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */ - 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */ + 0x1, /* gcFEATURE_BIT_REG_NoIndexPattern */ 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */ 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */ @@ -14241,7 +14867,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 */ @@ -14249,8 +14875,8 @@ 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 */ @@ -14291,7 +14917,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 */ @@ -14407,11 +15033,17 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc520_v552_rc1 */ + /* gc520sp_5_5_2_rc0a */ { 0x520, /* ChipID */ - 0x5521, /* ChipRevision */ + 0x5520, /* ChipRevision */ 0x5200, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ @@ -14816,7 +15448,2147 @@ 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 */ + 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 */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ + }, + /* 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 */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ + }, + /* 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 */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ + }, + /* 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 */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ + }, + /* 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 */ + 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 */ + 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 */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ + }, + /* gc7000nanoultra_4_6_5_rc3b */ + { + 0x600, /* ChipID */ + 0x4653, /* ChipRevision */ + 0x70005, /* ProductID */ + 0x0, /* EcoID */ + 0x101, /* CustomerID */ + 0x2, /* PatchVersion */ + 0x1, /* FormalRelease */ + 0x4, /* gcFEATURE_VALUE_Streams */ + 0x40, /* gcFEATURE_VALUE_TempRegisters */ + 0x100, /* gcFEATURE_VALUE_ThreadCount */ + 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ + 0x1, /* gcFEATURE_VALUE_NumShaderCores */ + 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ + 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ + 0x0, /* gcFEATURE_VALUE_BufferSize */ + 0x100, /* gcFEATURE_VALUE_InstructionCount */ + 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x1, /* gcFEATURE_VALUE_CoreCount */ + 0x8, /* gcFEATURE_VALUE_VaryingCount */ + 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x0, /* gcFEATURE_VALUE_L1CacheSize */ + 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ + 0x0, /* gcFEATURE_VALUE_ShaderPCLength */ + 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ + 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 */ + 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 */ + 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 */ + 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 */ @@ -14829,17 +17601,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc520_5_5_3_rc2a */ + /* gc7000nanoultra_4_6_5_rc3e */ { - 0x520, /* ChipID */ - 0x5532, /* ChipRevision */ - 0x5200, /* ProductID */ + 0x600, /* ChipID */ + 0x4653, /* ChipRevision */ + 0x70005, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ - 0x1, /* PatchVersion */ - 0x0, /* FormalRelease */ - 0x1, /* gcFEATURE_VALUE_Streams */ + 0x102, /* CustomerID */ + 0x5, /* PatchVersion */ + 0x1, /* FormalRelease */ + 0x4, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ @@ -14848,7 +17626,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 */ @@ -14869,105 +17647,105 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -14980,24 +17758,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 */ @@ -15012,57 +17790,57 @@ 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 */ + 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 */ @@ -15071,11 +17849,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 */ @@ -15093,8 +17871,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 */ @@ -15210,7 +17988,7 @@ 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 */ @@ -15251,17 +18029,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc600L_0x465x */ + /* gc620_5_5_3_rc0 */ { - 0x600, /* ChipID */ - 0x4652, /* ChipRevision */ - 0x70005, /* ProductID */ + 0x620, /* ChipID */ + 0x5530, /* ChipRevision */ + 0x6200, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ - 0x7, /* PatchVersion */ + 0x200, /* CustomerID */ + 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ - 0x4, /* gcFEATURE_VALUE_Streams */ + 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ @@ -15270,7 +18054,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 */ @@ -15291,105 +18075,105 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ @@ -15402,24 +18186,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 */ @@ -15434,8 +18218,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 */ @@ -15444,47 +18228,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 */ @@ -15493,8 +18277,8 @@ 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 */ @@ -15557,7 +18341,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 */ @@ -15616,8 +18400,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 */ @@ -15633,7 +18417,7 @@ 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 */ @@ -15673,17 +18457,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000nanoultra_4_6_5_rc3a */ + /* gc620_5_5_5_rc0d */ { - 0x600, /* ChipID */ - 0x4653, /* ChipRevision */ - 0x70005, /* ProductID */ + 0x620, /* ChipID */ + 0x5550, /* ChipRevision */ + 0x6200, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ - 0x1, /* PatchVersion */ - 0x1, /* FormalRelease */ - 0x4, /* gcFEATURE_VALUE_Streams */ + 0x201, /* CustomerID */ + 0x4, /* PatchVersion */ + 0x0, /* FormalRelease */ + 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ @@ -15692,7 +18482,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 */ @@ -15711,107 +18501,107 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x1, /* gcFEATURE_BIT_REG_ZCompression */ - 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */ - 0x1, /* gcFEATURE_BIT_REG_MSAA */ + 0x0, /* gcFEATURE_BIT_REG_ZCompression */ + 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 */ @@ -15824,24 +18614,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 */ @@ -15856,8 +18646,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 */ @@ -15866,47 +18656,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 */ @@ -15915,11 +18705,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 */ @@ -15979,7 +18769,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 */ @@ -16038,8 +18828,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 */ @@ -16055,7 +18845,7 @@ 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 */ @@ -16082,7 +18872,7 @@ 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 */ @@ -16095,17 +18885,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000nanoultra_4_6_5_rc3b */ + /* gc620tpc_5_5_6_rc0a */ { - 0x600, /* ChipID */ - 0x4653, /* ChipRevision */ - 0x70005, /* ProductID */ + 0x620, /* ChipID */ + 0x5560, /* ChipRevision */ + 0x6200, /* ProductID */ 0x0, /* EcoID */ - 0x101, /* CustomerID */ - 0x2, /* PatchVersion */ - 0x1, /* FormalRelease */ - 0x4, /* gcFEATURE_VALUE_Streams */ + 0x200, /* CustomerID */ + 0x1, /* PatchVersion */ + 0x0, /* FormalRelease */ + 0x1, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ @@ -16114,7 +18910,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 */ @@ -16133,107 +18929,107 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ - 0x1, /* gcFEATURE_BIT_REG_ZCompression */ - 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */ - 0x1, /* gcFEATURE_BIT_REG_MSAA */ + 0x0, /* gcFEATURE_BIT_REG_ZCompression */ + 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 */ @@ -16246,24 +19042,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 */ @@ -16278,8 +19074,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 */ @@ -16288,47 +19084,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 */ @@ -16337,11 +19133,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 */ @@ -16401,7 +19197,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 */ @@ -16460,8 +19256,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 */ @@ -16474,9 +19270,9 @@ 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 */ - 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 */ @@ -16504,7 +19300,7 @@ 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 */ @@ -16517,16 +19313,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000nanoultra_4_6_5_rc3e */ + /* gc860L_0x464x */ { - 0x600, /* ChipID */ - 0x4653, /* ChipRevision */ - 0x70005, /* ProductID */ + 0x860, /* ChipID */ + 0x4647, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ - 0x102, /* CustomerID */ - 0x5, /* PatchVersion */ - 0x1, /* FormalRelease */ + 0x0, /* CustomerID */ + 0x4, /* PatchVersion */ + 0x0, /* FormalRelease */ 0x4, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ @@ -16562,30 +19364,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 */ @@ -16607,9 +19409,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 */ @@ -16655,7 +19457,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 */ @@ -16670,7 +19472,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 */ @@ -16723,7 +19525,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 */ @@ -16764,7 +19566,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 */ @@ -16898,7 +19700,7 @@ 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 */ @@ -16939,17 +19741,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc620_5_5_3_rc0 */ + /* gc880_5106 */ { - 0x620, /* ChipID */ - 0x5530, /* ChipRevision */ - 0x6200, /* ProductID */ + 0x880, /* ChipID */ + 0x5106, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ - 0x200, /* CustomerID */ + 0x0, /* CustomerID */ 0x0, /* PatchVersion */ - 0x0, /* FormalRelease */ - 0x1, /* gcFEATURE_VALUE_Streams */ + 0x1, /* FormalRelease */ + 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x100, /* gcFEATURE_VALUE_ThreadCount */ 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ @@ -16957,10 +19765,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 */ + 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 */ @@ -16977,28 +19785,28 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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_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_YUY2Averaging */ 0x0, /* gcFEATURE_BIT_REG_HalfPECache */ 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */ 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */ @@ -17006,108 +19814,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 */ - 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_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 */ + 0x1, /* 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_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 */ + 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ 0x0, /* gcFEATURE_BIT_REG_SuperTiledTexture */ 0x0, /* gcFEATURE_BIT_REG_LinearPE */ - 0x0, /* gcFEATURE_BIT_REG_RectPrimitive */ + 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 */ - 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 */ + 0x1, /* gcFEATURE_BIT_REG_MixedStreams */ + 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes7 */ 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */ 0x0, /* gcFEATURE_BIT_REG_TextureTileStatus */ 0x0, /* gcFEATURE_BIT_REG_DecompressZ16 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes8 */ - 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 */ @@ -17122,8 +19930,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 */ @@ -17142,37 +19950,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 */ @@ -17181,12 +19989,12 @@ 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 */ - 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 */ @@ -17304,8 +20112,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 */ @@ -17321,7 +20129,7 @@ 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 */ @@ -17361,17 +20169,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc620_5_5_5_rc0d */ + /* gc880_5122 */ { - 0x620, /* ChipID */ - 0x5550, /* ChipRevision */ - 0x6200, /* ProductID */ + 0x880, /* ChipID */ + 0x5122, /* ChipRevision */ + 0x70007, /* ProductID */ 0x0, /* EcoID */ - 0x201, /* CustomerID */ - 0x4, /* PatchVersion */ + 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 */ @@ -17379,10 +20193,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 */ @@ -17399,28 +20213,28 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ 0x1, /* 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 */ @@ -17428,108 +20242,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 */ @@ -17544,8 +20358,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 */ @@ -17564,37 +20378,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 */ @@ -17603,11 +20417,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 */ @@ -17726,8 +20540,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 */ @@ -17743,7 +20557,7 @@ 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 */ @@ -17783,17 +20597,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc620tpc_5_5_6_rc0a */ + /* gc880TM_0x512x */ { - 0x620, /* ChipID */ - 0x5560, /* ChipRevision */ - 0x6200, /* ProductID */ + 0x880, /* ChipID */ + 0x5124, /* ChipRevision */ + 0x70007, /* ProductID */ 0x0, /* EcoID */ - 0x200, /* CustomerID */ - 0x1, /* 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 */ @@ -17801,10 +20621,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 */ @@ -17821,28 +20641,28 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ @@ -17850,108 +20670,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 */ @@ -17966,8 +20786,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 */ @@ -17986,37 +20806,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 */ @@ -18025,11 +20845,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 */ @@ -18148,8 +20968,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 */ @@ -18162,7 +20982,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 */ @@ -18205,30 +21025,36 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc860L_0x464x */ + /* gc900_5250 */ { - 0x860, /* ChipID */ - 0x4647, /* ChipRevision */ + 0x900, /* ChipID */ + 0x5250, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x4, /* PatchVersion */ + 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ - 0x4, /* 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 */ + 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 */ @@ -18250,12 +21076,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DebugMode */ 0x1, /* gcFEATURE_BIT_REG_ZCompression */ 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */ - 0x0, /* gcFEATURE_BIT_REG_MSAA */ + 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ 0x1, /* gcFEATURE_BIT_REG_FastScaler */ - 0x0, /* gcFEATURE_BIT_REG_HighDynamicRange */ + 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ 0x0, /* gcFEATURE_BIT_REG_MinArea */ @@ -18277,13 +21103,13 @@ 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 */ 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 */ @@ -18304,7 +21130,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ 0x0, /* 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 */ @@ -18313,56 +21139,56 @@ 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_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 */ 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 */ - 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 */ - 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_OnePass2DFilter */ - 0x0, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ + 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */ + 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ 0x1, /* gcFEATURE_BIT_REG_TileFiller */ 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */ 0x0, /* gcFEATURE_BIT_REG_YUVConversion */ - 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */ + 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */ 0x0, /* gcFEATURE_BIT_REG_Interleaver */ 0x1, /* gcFEATURE_BIT_REG_MixedStreams */ 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ @@ -18374,38 +21200,38 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ 0x0, /* gcFEATURE_BIT_REG_OclOnly */ 0x0, /* gcFEATURE_BIT_REG_NewFeatures0 */ - 0x0, /* gcFEATURE_BIT_REG_InstructionCache */ + 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_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 */ + 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_REG_PAEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_DENoGamma */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */ @@ -18414,13 +21240,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */ + 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_DEMirrorRotate */ + 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ 0x0, /* gcFEATURE_BIT_REG_SmallMSAA */ 0x0, /* gcFEATURE_BIT_REG_BugFixes17 */ 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */ @@ -18428,7 +21254,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -18439,11 +21265,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */ 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */ 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */ - 0x0, /* gcFEATURE_BIT_REG_EEZ */ + 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 */ @@ -18511,7 +21337,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 */ @@ -18627,28 +21453,34 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc880_5106 */ + /* gc1000_5036 */ { - 0x880, /* ChipID */ - 0x5106, /* ChipRevision */ + 0x1000, /* ChipID */ + 0x5036, /* 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 */ @@ -18671,12 +21503,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -18720,13 +21552,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 */ @@ -18743,41 +21575,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 */ @@ -18788,19 +21620,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 */ @@ -18809,7 +21641,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 */ @@ -18818,9 +21650,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 */ @@ -18933,7 +21765,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 */ @@ -19049,28 +21881,34 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc880_5122 */ + /* gc1000_5037 */ { - 0x880, /* ChipID */ - 0x5122, /* ChipRevision */ - 0x70007, /* ProductID */ + 0x1000, /* ChipID */ + 0x5037, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* 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 */ @@ -19093,12 +21931,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ 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 */ @@ -19107,7 +21945,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 */ @@ -19121,7 +21959,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 */ @@ -19142,13 +21980,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 */ @@ -19165,41 +22003,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 */ @@ -19214,15 +22052,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 */ @@ -19231,7 +22069,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 */ @@ -19240,9 +22078,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 */ @@ -19296,7 +22134,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 */ @@ -19355,7 +22193,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 */ @@ -19471,28 +22309,34 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc880TM_0x512x */ + /* gc1000_5037_1 */ { - 0x880, /* ChipID */ - 0x5124, /* ChipRevision */ - 0x70007, /* ProductID */ - 0x0, /* EcoID */ + 0x1000, /* ChipID */ + 0x5037, /* ChipRevision */ + 0x0, /* ProductID */ + 0x1, /* EcoID */ 0x0, /* CustomerID */ - 0x2, /* PatchVersion */ - 0x0, /* FormalRelease */ - 0x8, /* gcFEATURE_VALUE_Streams */ + 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 */ - 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 */ @@ -19512,19 +22356,19 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -19543,7 +22387,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 */ @@ -19564,15 +22408,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 */ @@ -19587,44 +22431,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_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 */ - 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 */ @@ -19636,15 +22480,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 */ @@ -19653,7 +22497,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 */ @@ -19662,9 +22506,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 */ @@ -19718,7 +22562,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 */ @@ -19777,7 +22621,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 */ @@ -19893,30 +22737,36 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc900_5250 */ + /* gc1000_5039 */ { - 0x900, /* ChipID */ - 0x5250, /* ChipRevision */ + 0x1000, /* ChipID */ + 0x5039, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ - 0x0, /* FormalRelease */ - 0x8, /* gcFEATURE_VALUE_Streams */ - 0x200, /* gcFEATURE_VALUE_TempRegisters */ - 0x100, /* gcFEATURE_VALUE_ThreadCount */ + 0x11, /* PatchVersion */ + 0x1, /* FormalRelease */ + 0x4, /* gcFEATURE_VALUE_Streams */ + 0x40, /* gcFEATURE_VALUE_TempRegisters */ + 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 */ - 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x100, /* gcFEATURE_VALUE_InstructionCount */ + 0x240, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x10, /* gcFEATURE_VALUE_VaryingCount */ + 0x8, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x2, /* gcFEATURE_VALUE_L1CacheSize */ + 0x0, /* gcFEATURE_VALUE_L1CacheSize */ 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x0, /* gcFEATURE_VALUE_ShaderPCLength */ 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ @@ -19943,7 +22793,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* 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 */ @@ -19965,7 +22815,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 */ @@ -19990,9 +22840,9 @@ 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_A8TargetSupport */ 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ @@ -20006,51 +22856,51 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ 0x0, /* gcFEATURE_BIT_REG_L2Windowing */ - 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_LogicOp */ - 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ - 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */ + 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 */ - 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */ + 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 */ + 0x0, /* gcFEATURE_BIT_REG_PESwizzle */ + 0x0, /* gcFEATURE_BIT_REG_EndEvent */ 0x0, /* gcFEATURE_BIT_REG_S1S8 */ - 0x1, /* gcFEATURE_BIT_REG_Halti1 */ + 0x0, /* gcFEATURE_BIT_REG_Halti1 */ 0x0, /* gcFEATURE_BIT_REG_RGB888 */ 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ - 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */ - 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */ - 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ - 0x1, /* gcFEATURE_BIT_REG_TileFiller */ + 0x1, /* gcFEATURE_BIT_REG_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 */ - 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */ + 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */ 0x0, /* gcFEATURE_BIT_REG_Interleaver */ 0x1, /* gcFEATURE_BIT_REG_MixedStreams */ 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ @@ -20062,38 +22912,38 @@ 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 */ 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_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 */ + 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_ACE */ - 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 */ - 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */ + 0x1, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ 0x1, /* gcFEATURE_BIT_REG_NewHZ */ 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */ - 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 */ @@ -20102,7 +22952,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ @@ -20116,7 +22966,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */ 0x0, /* gcFEATURE_BIT_REG_CSCV2 */ 0x0, /* gcFEATURE_BIT_REG_PAEnhancements3 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes18 */ 0x0, /* gcFEATURE_BIT_REG_Compression2D */ 0x0, /* gcFEATURE_BIT_REG_Probe */ 0x0, /* gcFEATURE_BIT_REG_MediumPrecision */ @@ -20127,11 +22977,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */ 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */ 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */ - 0x1, /* gcFEATURE_BIT_REG_EEZ */ + 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 */ @@ -20199,7 +23049,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 */ @@ -20315,30 +23165,36 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc1000_5036 */ + /* gc1500_5246 */ { - 0x1000, /* ChipID */ - 0x5036, /* ChipRevision */ - 0x0, /* ProductID */ + 0x1500, /* ChipID */ + 0x5246, /* ChipRevision */ + 0x70003, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ + 0x6, /* PatchVersion */ 0x1, /* FormalRelease */ - 0x4, /* gcFEATURE_VALUE_Streams */ + 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x200, /* gcFEATURE_VALUE_ThreadCount */ - 0x8, /* gcFEATURE_VALUE_VertexCacheSize */ + 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ 0x2, /* gcFEATURE_VALUE_NumShaderCores */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ - 0x100, /* gcFEATURE_VALUE_InstructionCount */ - 0x240, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x400, /* 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 */ + 0x2, /* gcFEATURE_VALUE_L1CacheSize */ 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x0, /* gcFEATURE_VALUE_ShaderPCLength */ 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ @@ -20359,13 +23215,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_HighDynamicRange */ 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ 0x0, /* gcFEATURE_BIT_REG_MinArea */ @@ -20387,7 +23243,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 */ @@ -20412,9 +23268,9 @@ 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 */ - 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 */ @@ -20428,51 +23284,51 @@ 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 */ - 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 */ 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 */ - 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 */ + 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 */ + 0x0, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x1, /* gcFEATURE_BIT_REG_OnePass2DFilter */ + 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ + 0x1, /* gcFEATURE_BIT_REG_TileFiller */ 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */ 0x0, /* gcFEATURE_BIT_REG_YUVConversion */ - 0x0, /* gcFEATURE_BIT_REG_FlushFixed2D */ + 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */ 0x0, /* gcFEATURE_BIT_REG_Interleaver */ 0x1, /* gcFEATURE_BIT_REG_MixedStreams */ 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ @@ -20491,12 +23347,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_BugFixes12 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */ 0x0, /* gcFEATURE_BIT_REG_ACE */ @@ -20505,17 +23361,17 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ @@ -20524,7 +23380,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_TXEnhancements3 */ 0x0, /* gcFEATURE_BIT_REG_SHEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_FEEnhancements2 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes16 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ 0x0, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ @@ -20538,7 +23394,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -20549,11 +23405,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_BugFixes20 */ 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */ 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */ - 0x0, /* gcFEATURE_BIT_REG_EEZ */ + 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 */ @@ -20562,7 +23418,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 */ @@ -20611,7 +23467,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 */ @@ -20621,7 +23477,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 */ @@ -20737,33 +23593,39 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc1000_5037 */ + /* gc2000_5108 */ { - 0x1000, /* ChipID */ - 0x5037, /* 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 */ @@ -20781,17 +23643,17 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -20836,7 +23698,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 */ @@ -20853,24 +23715,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 */ @@ -20878,39 +23740,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 */ @@ -20919,7 +23781,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 */ @@ -20928,9 +23790,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 */ @@ -21033,7 +23895,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 */ @@ -21043,7 +23905,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 */ @@ -21159,33 +24021,39 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc1000_5037_1 */ + /* gc2000_5140 */ { - 0x1000, /* ChipID */ - 0x5037, /* ChipRevision */ + 0x2000, /* ChipID */ + 0x5140, /* ChipRevision */ 0x0, /* ProductID */ - 0x1, /* EcoID */ + 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 */ @@ -21212,7 +24080,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 */ @@ -21231,7 +24099,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 */ @@ -21258,7 +24126,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 */ @@ -21280,10 +24148,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 */ @@ -21291,41 +24159,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 */ @@ -21335,13 +24203,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 */ @@ -21350,7 +24218,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 */ @@ -21358,8 +24226,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 */ @@ -21455,7 +24323,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 */ @@ -21465,7 +24333,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 */ @@ -21581,33 +24449,39 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc1000_5039 */ + /* gc2000w_5_1_4_rc0e */ { - 0x1000, /* ChipID */ - 0x5039, /* ChipRevision */ - 0x0, /* ProductID */ + 0x2000, /* ChipID */ + 0x5140, /* ChipRevision */ + 0x20000, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x11, /* 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 */ @@ -21634,7 +24508,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 */ @@ -21653,7 +24527,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 */ @@ -21680,7 +24554,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 */ @@ -21702,7 +24576,7 @@ 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 */ 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */ 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */ @@ -21713,41 +24587,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 */ + 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 */ @@ -21757,13 +24631,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 */ @@ -21772,7 +24646,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 */ @@ -21780,8 +24654,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 */ @@ -21828,7 +24702,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 */ @@ -21877,7 +24751,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 */ @@ -21887,7 +24761,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 */ @@ -22003,33 +24877,39 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc1500_5246 */ + /* gc2500_5422 */ { - 0x1500, /* ChipID */ - 0x5246, /* ChipRevision */ - 0x70003, /* ProductID */ + 0x2500, /* ChipID */ + 0x5422, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x6, /* PatchVersion */ + 0x12, /* PatchVersion */ 0x1, /* FormalRelease */ - 0x8, /* gcFEATURE_VALUE_Streams */ + 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x200, /* gcFEATURE_VALUE_ThreadCount */ + 0x400, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x2, /* gcFEATURE_VALUE_NumShaderCores */ - 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ - 0x200, /* gcFEATURE_VALUE_VertexOutputBufferSize */ + 0x4, /* 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 */ + 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 */ @@ -22100,13 +24980,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 */ @@ -22153,29 +25033,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 */ @@ -22183,16 +25063,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 */ @@ -22207,41 +25087,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 */ @@ -22250,7 +25130,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 */ @@ -22261,7 +25141,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 */ @@ -22425,32 +25305,38 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x1, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc2000_5108 */ + /* gc6400_5422 */ { - 0x2000, /* ChipID */ - 0x5108, /* ChipRevision */ + 0x6400, /* ChipID */ + 0x5422, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ + 0x16, /* PatchVersion */ 0x1, /* FormalRelease */ - 0x8, /* gcFEATURE_VALUE_Streams */ + 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 */ - 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 */ + 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 */ @@ -22475,11 +25361,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 */ @@ -22497,7 +25383,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 */ @@ -22528,7 +25414,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 */ @@ -22538,7 +25424,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 */ @@ -22555,112 +25441,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_BugFixes21 */ 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes22 */ @@ -22683,7 +25569,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 */ @@ -22847,17 +25733,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x1, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc2000_5140 */ + /* gc3000_5435 */ { - 0x2000, /* ChipID */ - 0x5140, /* ChipRevision */ + 0x3000, /* ChipID */ + 0x5435, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x5, /* PatchVersion */ - 0x0, /* FormalRelease */ - 0x8, /* gcFEATURE_VALUE_Streams */ + 0x0, /* PatchVersion */ + 0x1, /* FormalRelease */ + 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x400, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ @@ -22865,14 +25757,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 */ + 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 */ @@ -22897,10 +25789,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 */ @@ -22950,7 +25842,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 */ @@ -22960,10 +25852,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 */ @@ -22972,7 +25864,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 */ @@ -22980,109 +25872,109 @@ 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 */ @@ -23138,7 +26030,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 */ @@ -23247,7 +26139,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -23269,17 +26161,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x1, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc2000w_5_1_4_rc0e */ + /* gc2000_ffff5450 */ { 0x2000, /* ChipID */ - 0x5140, /* ChipRevision */ - 0x20000, /* ProductID */ + 0xffff5450, /* 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 */ @@ -23287,14 +26185,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 */ @@ -23319,10 +26217,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 */ @@ -23372,7 +26270,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 */ @@ -23382,10 +26280,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 */ @@ -23394,7 +26292,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 */ @@ -23402,112 +26300,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 */ @@ -23516,7 +26414,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 */ @@ -23527,7 +26425,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 */ @@ -23560,7 +26458,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 */ @@ -23618,7 +26516,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 */ @@ -23691,15 +26589,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x1, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc2500_5422 */ + /* gc3000_5450 */ { - 0x2500, /* ChipID */ - 0x5422, /* ChipRevision */ + 0x3000, /* ChipID */ + 0x5450, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x12, /* PatchVersion */ + 0x8, /* PatchVersion */ 0x1, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -23712,7 +26616,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 */ @@ -23925,11 +26829,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 */ @@ -23982,7 +26886,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 */ @@ -24040,7 +26944,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 */ @@ -24113,30 +27017,36 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x1, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc6400_5422 */ + /* gc3000_5451 */ { - 0x6400, /* ChipID */ - 0x5422, /* ChipRevision */ + 0x3000, /* ChipID */ + 0x5451, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x16, /* PatchVersion */ + 0x4, /* PatchVersion */ 0x1, /* 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 */ @@ -24347,11 +27257,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 */ @@ -24361,16 +27271,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 */ @@ -24404,7 +27314,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 */ @@ -24535,16 +27445,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x1, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc3000_5435 */ + /* gc7000L_551x */ { 0x3000, /* ChipID */ - 0x5435, /* ChipRevision */ - 0x0, /* ProductID */ + 0x5512, /* ChipRevision */ + 0x70002, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ - 0x1, /* FormalRelease */ + 0x3, /* PatchVersion */ + 0x0, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x400, /* gcFEATURE_VALUE_ThreadCount */ @@ -24556,7 +27472,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 */ @@ -24607,7 +27523,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 */ @@ -24679,7 +27595,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 */ @@ -24714,7 +27630,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 */ @@ -24760,7 +27676,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 */ @@ -24773,27 +27689,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 */ @@ -24869,7 +27785,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 */ @@ -24880,11 +27796,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 */ @@ -24895,7 +27811,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 */ @@ -24916,7 +27832,7 @@ 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 */ @@ -24957,15 +27873,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x1, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc2000_ffff5450 */ + /* gc7000L_5512 */ { - 0x2000, /* ChipID */ - 0xffff5450, /* ChipRevision */ - 0x0, /* ProductID */ + 0x3000, /* ChipID */ + 0x5512, /* ChipRevision */ + 0x70002, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x8, /* PatchVersion */ + 0x3, /* PatchVersion */ 0x1, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -25029,7 +27951,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 */ @@ -25101,7 +28023,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 */ @@ -25136,7 +28058,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 */ @@ -25182,7 +28104,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 */ @@ -25196,25 +28118,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 */ @@ -25291,7 +28213,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 */ @@ -25302,10 +28224,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 */ @@ -25317,7 +28239,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 */ @@ -25338,7 +28260,7 @@ 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 */ @@ -25357,7 +28279,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -25379,15 +28301,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x1, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc3000_5450 */ + /* gc7000L_5514 */ { 0x3000, /* ChipID */ - 0x5450, /* ChipRevision */ - 0x0, /* ProductID */ + 0x5514, /* ChipRevision */ + 0x70002, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x8, /* PatchVersion */ + 0x0, /* PatchVersion */ 0x1, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ @@ -25451,7 +28379,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 */ @@ -25523,7 +28451,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 */ @@ -25558,7 +28486,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 */ @@ -25604,7 +28532,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 */ @@ -25618,25 +28546,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 */ @@ -25712,8 +28640,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 */ @@ -25724,10 +28652,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 */ @@ -25739,8 +28667,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 */ @@ -25756,11 +28684,11 @@ 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 */ @@ -25779,7 +28707,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -25801,32 +28729,38 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x1, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc3000_5451 */ + /* gc4000_5222 */ { - 0x3000, /* ChipID */ - 0x5451, /* ChipRevision */ + 0x4000, /* ChipID */ + 0x5222, /* 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 */ + 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 */ @@ -25904,7 +28838,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 */ @@ -25941,7 +28875,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 */ @@ -25951,8 +28885,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 */ @@ -25964,82 +28898,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 */ @@ -26049,17 +28983,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 */ @@ -26092,7 +29026,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 */ @@ -26223,32 +29157,38 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000L_551x */ + /* gc4000_5245 */ { - 0x3000, /* ChipID */ - 0x5512, /* ChipRevision */ - 0x70002, /* ProductID */ + 0x4000, /* ChipID */ + 0x5245, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x3, /* PatchVersion */ - 0x0, /* FormalRelease */ - 0x10, /* gcFEATURE_VALUE_Streams */ + 0x0, /* PatchVersion */ + 0x1, /* FormalRelease */ + 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 */ @@ -26295,7 +29235,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 */ @@ -26326,7 +29266,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 */ @@ -26367,14 +29307,14 @@ 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 */ 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 */ @@ -26391,28 +29331,28 @@ 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 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */ 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */ 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */ - 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */ - 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ + 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ + 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 */ @@ -26427,61 +29367,61 @@ 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 */ - 0x1, /* gcFEATURE_BIT_REG_Probe */ - 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ + 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 */ - 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 */ @@ -26514,7 +29454,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 */ @@ -26557,7 +29497,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 */ @@ -26568,11 +29508,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 */ @@ -26583,7 +29523,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 */ @@ -26604,7 +29544,7 @@ 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 */ @@ -26623,7 +29563,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -26645,30 +29585,36 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000L_5512 */ + /* gc5000_5434 */ { - 0x3000, /* ChipID */ - 0x5512, /* ChipRevision */ - 0x70002, /* ProductID */ + 0x5000, /* ChipID */ + 0x5434, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x3, /* PatchVersion */ + 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 */ @@ -26717,7 +29663,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 */ @@ -26789,7 +29735,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 */ @@ -26824,7 +29770,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 */ @@ -26870,7 +29816,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 */ @@ -26879,31 +29825,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 */ @@ -26979,7 +29925,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 */ @@ -26990,11 +29936,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 */ @@ -27005,7 +29951,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 */ @@ -27026,7 +29972,7 @@ 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 */ @@ -27045,7 +29991,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -27067,21 +30013,27 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x1, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000L_5514 */ + /* gc7000_551x */ { - 0x3000, /* ChipID */ - 0x5514, /* ChipRevision */ - 0x70002, /* ProductID */ + 0x5000, /* ChipID */ + 0x5513, /* ChipRevision */ + 0x70000, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* 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 */ @@ -27090,7 +30042,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 */ @@ -27400,7 +30352,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 */ @@ -27428,7 +30380,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 */ @@ -27444,7 +30396,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 */ @@ -27489,32 +30441,38 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x1, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc4000_5222 */ + /* gc7000_5513 */ { - 0x4000, /* ChipID */ - 0x5222, /* ChipRevision */ - 0x0, /* ProductID */ + 0x5000, /* ChipID */ + 0x5513, /* ChipRevision */ + 0x70000, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ + 0x1, /* PatchVersion */ 0x1, /* FormalRelease */ - 0x8, /* gcFEATURE_VALUE_Streams */ + 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x800, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ 0x8, /* gcFEATURE_VALUE_NumShaderCores */ 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ - 0x800, /* gcFEATURE_VALUE_VertexOutputBufferSize */ + 0x400, /* 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 */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x0, /* gcFEATURE_VALUE_L1CacheSize */ - 0x0, /* gcFEATURE_VALUE_InstructionMemorySize */ - 0x0, /* gcFEATURE_VALUE_ShaderPCLength */ + 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 */ @@ -27561,7 +30519,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 */ @@ -27592,7 +30550,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 */ @@ -27629,18 +30587,18 @@ 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 */ 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 */ @@ -27652,102 +30610,102 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ - 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 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */ - 0x0, /* gcFEATURE_BIT_REG_UnifiedSamplers */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes11 */ - 0x0, /* gcFEATURE_BIT_REG_PerformanceCounters */ - 0x0, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes12 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes13 */ - 0x0, /* gcFEATURE_BIT_REG_DEEnhancements1 */ - 0x0, /* gcFEATURE_BIT_REG_ACE */ - 0x0, /* gcFEATURE_BIT_REG_TXEnhancements1 */ - 0x0, /* gcFEATURE_BIT_REG_SHEnhancements1 */ - 0x0, /* gcFEATURE_BIT_REG_SHEnhancements2 */ - 0x0, /* gcFEATURE_BIT_REG_PEEnhancements1 */ - 0x0, /* gcFEATURE_BIT_REG_DEEnhancements2 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes14 */ + 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */ + 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_ACE */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */ 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ - 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_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_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 */ + 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 */ @@ -27780,7 +30738,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 */ @@ -27823,7 +30781,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 */ @@ -27834,11 +30792,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 */ @@ -27849,7 +30807,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 */ @@ -27870,7 +30828,7 @@ 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 */ @@ -27889,7 +30847,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -27911,17 +30869,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x1, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc4000_5245 */ + /* gcXAQ2_CMODEL */ { - 0x4000, /* ChipID */ - 0x5245, /* ChipRevision */ + 0x7000, /* ChipID */ + 0x0, /* ChipRevision */ 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ - 0x1, /* FormalRelease */ - 0x8, /* gcFEATURE_VALUE_Streams */ + 0x0, /* FormalRelease */ + 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x800, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ @@ -27929,17 +30893,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 */ + 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 */ + 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 */ @@ -27955,10 +30919,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -27983,7 +30947,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 */ @@ -28006,7 +30970,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 */ @@ -28014,11 +30978,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 */ @@ -28028,7 +30992,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 */ @@ -28037,7 +31001,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 */ @@ -28055,19 +31019,19 @@ 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 */ + 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 */ @@ -28080,27 +31044,27 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ + 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 */ + 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 */ @@ -28115,64 +31079,64 @@ 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 */ - 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 */ @@ -28192,8 +31156,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 */ @@ -28202,7 +31166,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 */ @@ -28217,7 +31181,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 */ @@ -28258,9 +31222,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 */ @@ -28271,10 +31235,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 */ @@ -28288,11 +31252,11 @@ 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 */ @@ -28311,7 +31275,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -28333,16 +31297,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc5000_5434 */ + /* gc7000XS_600x */ { - 0x5000, /* ChipID */ - 0x5434, /* ChipRevision */ - 0x0, /* ProductID */ + 0x7000, /* ChipID */ + 0x6008, /* ChipRevision */ + 0x70004, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ - 0x1, /* FormalRelease */ + 0xb, /* PatchVersion */ + 0x0, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x800, /* gcFEATURE_VALUE_ThreadCount */ @@ -28354,14 +31324,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 */ @@ -28405,7 +31375,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 */ @@ -28477,7 +31447,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 */ @@ -28503,7 +31473,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 */ @@ -28512,7 +31482,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 */ @@ -28538,7 +31508,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 */ @@ -28546,7 +31516,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 */ @@ -28558,44 +31528,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 */ @@ -28608,30 +31578,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 */ @@ -28666,23 +31636,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 */ @@ -28693,10 +31663,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 */ @@ -28710,11 +31680,11 @@ 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 */ @@ -28729,7 +31699,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -28755,16 +31725,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000_551x */ + /* gc7000XS_6008 */ { - 0x5000, /* ChipID */ - 0x5513, /* ChipRevision */ - 0x70000, /* ProductID */ + 0x7000, /* ChipID */ + 0x6008, /* ChipRevision */ + 0x70004, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x1, /* PatchVersion */ - 0x0, /* FormalRelease */ + 0xb, /* PatchVersion */ + 0x1, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x800, /* gcFEATURE_VALUE_ThreadCount */ @@ -28776,14 +31752,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 */ @@ -28925,7 +31901,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 */ @@ -28960,7 +31936,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 */ @@ -28968,7 +31944,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 */ @@ -28983,7 +31959,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 */ @@ -28995,18 +31971,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 */ @@ -29014,10 +31990,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ 0x1, /* gcFEATURE_BIT_REG_RSS8 */ 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ - 0x0, /* gcFEATURE_BIT_REG_Halti5 */ + 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 */ @@ -29030,30 +32006,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 */ @@ -29088,21 +32064,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 */ @@ -29118,7 +32094,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -29132,7 +32108,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 */ @@ -29151,11 +32127,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ - 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 */ @@ -29171,22 +32147,28 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000_5513 */ + /* gc7000XSVX_600x */ { - 0x5000, /* ChipID */ - 0x5513, /* ChipRevision */ - 0x70000, /* ProductID */ + 0x7000, /* ChipID */ + 0x6008, /* ChipRevision */ + 0x70008, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x1, /* PatchVersion */ - 0x1, /* FormalRelease */ + 0x0, /* PatchVersion */ + 0x0, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x800, /* gcFEATURE_VALUE_ThreadCount */ @@ -29198,14 +32180,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 */ @@ -29347,7 +32329,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 */ @@ -29382,7 +32364,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 */ @@ -29390,7 +32372,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 */ @@ -29405,7 +32387,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 */ @@ -29417,18 +32399,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 */ @@ -29436,9 +32418,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 */ @@ -29452,30 +32434,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 */ @@ -29496,7 +32478,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 */ @@ -29510,21 +32492,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 */ @@ -29554,7 +32536,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 */ @@ -29577,7 +32559,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -29593,40 +32575,46 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gcXAQ2_CMODEL */ + /* gc7000XSVX_6008 */ { 0x7000, /* ChipID */ - 0x0, /* ChipRevision */ - 0x0, /* ProductID */ + 0x6008, /* ChipRevision */ + 0x70008, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x0, /* PatchVersion */ - 0x0, /* FormalRelease */ + 0x7, /* 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 */ @@ -29643,10 +32631,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -29694,7 +32682,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 */ @@ -29706,7 +32694,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 */ @@ -29716,7 +32704,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 */ @@ -29725,7 +32713,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 */ @@ -29745,7 +32733,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 */ @@ -29754,8 +32742,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 */ @@ -29767,7 +32755,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 */ @@ -29783,7 +32771,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 */ @@ -29811,12 +32799,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 */ @@ -29828,12 +32816,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 */ @@ -29846,18 +32834,18 @@ 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 */ @@ -29874,7 +32862,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 */ @@ -29882,22 +32870,22 @@ 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 */ - 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 */ @@ -29905,7 +32893,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 */ @@ -29918,7 +32906,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 */ @@ -29932,16 +32920,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 */ @@ -29961,8 +32949,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 */ - 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ - 0x1, /* gcFEATURE_BIT_SH_CLOCK_GATE_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 */ @@ -29999,7 +32987,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -30015,22 +33003,28 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000XS_600x */ + /* gc7000XSVX_6009 */ { 0x7000, /* ChipID */ - 0x6008, /* ChipRevision */ - 0x70004, /* ProductID */ + 0x6009, /* ChipRevision */ + 0x70008, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0xb, /* PatchVersion */ - 0x0, /* FormalRelease */ + 0x9, /* PatchVersion */ + 0x1, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x800, /* gcFEATURE_VALUE_ThreadCount */ @@ -30281,7 +33275,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 */ 0x1, /* gcFEATURE_BIT_REG_BltEngine */ 0x1, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ @@ -30312,13 +33306,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 */ + 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 */ @@ -30338,9 +33332,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 */ @@ -30383,7 +33377,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 */ @@ -30416,7 +33410,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ 0x0, /* gcFEATURE_BIT_NN_FLOAT */ @@ -30437,22 +33431,28 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 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 */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000XS_6008 */ + /* gc7000_6100 */ { 0x7000, /* ChipID */ - 0x6008, /* ChipRevision */ - 0x70004, /* ProductID */ + 0x6100, /* ChipRevision */ + 0x70000, /* 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 */ @@ -30464,13 +33464,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 */ @@ -30491,7 +33491,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 */ @@ -30613,7 +33613,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 */ @@ -30683,7 +33683,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 */ @@ -30704,7 +33704,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 */ @@ -30725,30 +33725,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 */ @@ -30757,12 +33757,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 */ @@ -30805,7 +33805,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 */ @@ -30859,40 +33859,46 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000XSVX_600x */ + /* gc7000L_6100 */ { 0x7000, /* ChipID */ - 0x6008, /* ChipRevision */ - 0x70008, /* ProductID */ + 0x6100, /* ChipRevision */ + 0x70002, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 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 */ @@ -30913,7 +33919,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 */ @@ -31035,7 +34041,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 */ @@ -31105,7 +34111,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 */ @@ -31125,9 +34131,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 */ - 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ + 0x0, /* gcFEATURE_BIT_REG_Evis */ + 0x0, /* gcFEATURE_BIT_REG_BltEngine */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ 0x0, /* gcFEATURE_BIT_REG_DEC */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ @@ -31147,30 +34153,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 */ @@ -31179,7 +34185,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 */ @@ -31227,8 +34233,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 */ @@ -31261,7 +34267,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -31281,22 +34287,28 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000XSVX_6008 */ + /* gc7000XS_6100 */ { 0x7000, /* ChipID */ - 0x6008, /* ChipRevision */ - 0x70008, /* ProductID */ + 0x6100, /* ChipRevision */ + 0x70004, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x7, /* PatchVersion */ - 0x1, /* FormalRelease */ + 0x0, /* PatchVersion */ + 0x0, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x800, /* gcFEATURE_VALUE_ThreadCount */ @@ -31335,7 +34347,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 */ @@ -31547,9 +34559,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 */ @@ -31575,24 +34587,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 */ @@ -31601,7 +34613,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 */ @@ -31649,8 +34661,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 */ @@ -31683,7 +34695,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -31703,40 +34715,46 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000XSVX_6009 */ + /* vip7000UL_6100 */ { 0x7000, /* ChipID */ - 0x6009, /* ChipRevision */ - 0x70008, /* ProductID */ + 0x6100, /* ChipRevision */ + 0x5070003, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x9, /* 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 */ + 0x0, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ @@ -31806,7 +34824,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 */ @@ -31856,7 +34874,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 */ @@ -31879,7 +34897,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 */ @@ -31949,7 +34967,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 */ @@ -31970,8 +34988,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_BltEngine */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ 0x0, /* gcFEATURE_BIT_REG_DEC */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ @@ -32005,7 +35023,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 */ 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */ 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ 0x0, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ @@ -32026,8 +35044,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */ 0x0, /* gcFEATURE_BIT_SECURITY */ 0x0, /* gcFEATURE_BIT_ROBUSTNESS */ - 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */ - 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX */ + 0x0, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */ 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ @@ -32055,7 +35073,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 */ @@ -32070,7 +35088,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 */ @@ -32104,7 +35122,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -32125,17 +35143,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_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 */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000_6100 */ + /* gc7000_6200 */ { 0x7000, /* ChipID */ - 0x6100, /* ChipRevision */ + 0x6200, /* ChipRevision */ 0x70000, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ @@ -32146,19 +35170,19 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ - 0x20, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x28, /* gcFEATURE_VALUE_LocalStorageSize */ 0x20, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x20, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x28, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ @@ -32179,7 +35203,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 */ @@ -32228,13 +35252,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 */ @@ -32393,7 +35417,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_Halti5 */ 0x0, /* 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 */ @@ -32402,16 +35426,16 @@ 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 */ @@ -32434,22 +35458,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 */ @@ -32461,13 +35485,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 */ @@ -32492,7 +35516,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 */ @@ -32535,7 +35559,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 */ @@ -32553,22 +35577,28 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000L_6100 */ + /* gc7000UL_6200 */ { 0x7000, /* ChipID */ - 0x6100, /* ChipRevision */ - 0x70002, /* 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 */ - 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 */ @@ -32581,7 +35611,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -32601,7 +35631,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 */ @@ -32650,13 +35680,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 */ @@ -32824,20 +35854,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 */ @@ -32856,22 +35886,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 */ @@ -32883,13 +35913,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 */ @@ -32914,7 +35944,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 */ @@ -32957,7 +35987,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 */ @@ -32975,35 +36005,41 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000XS_6100 */ + /* gc7000ULVX_6200 */ { 0x7000, /* ChipID */ - 0x6100, /* ChipRevision */ - 0x70004, /* 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 */ - 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 */ + 0x8, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */ - 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ + 0x1, /* gcFEATURE_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 */ @@ -33023,7 +36059,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 */ @@ -33072,13 +36108,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 */ @@ -33122,7 +36158,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 */ @@ -33145,7 +36181,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 */ @@ -33215,7 +36251,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 */ @@ -33235,9 +36271,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 */ @@ -33246,23 +36282,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_NO_ANISTRO_FILTER */ - 0x0, /* gcFEATURE_BIT_NO_ASTC */ + 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */ + 0x0, /* gcFEATURE_BIT_MSAA_SHADING */ + 0x1, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ + 0x1, /* gcFEATURE_BIT_NO_ASTC */ 0x0, /* gcFEATURE_BIT_NO_DXT */ - 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 */ @@ -33273,45 +36309,45 @@ 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 */ - 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 */ @@ -33336,7 +36372,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 */ @@ -33379,7 +36415,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 */ @@ -33397,21 +36433,27 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* vip7000UL_6100 */ + /* vip7000L_6200 */ { 0x7000, /* ChipID */ - 0x6100, /* ChipRevision */ - 0x5070003, /* ProductID */ + 0x6200, /* ChipRevision */ + 0x5070002, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x200, /* gcFEATURE_VALUE_ThreadCount */ + 0x400, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x2, /* gcFEATURE_VALUE_NumShaderCores */ + 0x4, /* gcFEATURE_VALUE_NumShaderCores */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ @@ -33419,12 +36461,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ - 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x10, /* gcFEATURE_VALUE_L1CacheSize */ + 0x20, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x20, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x0, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x20, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ @@ -33622,7 +36664,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 */ @@ -33668,54 +36710,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 */ @@ -33727,22 +36769,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 */ @@ -33801,7 +36843,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 */ @@ -33819,21 +36861,27 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000_6200 */ + /* vip7000UL_6200 */ { 0x7000, /* ChipID */ - 0x6200, /* ChipRevision */ - 0x70000, /* ProductID */ + 0x6201, /* ChipRevision */ + 0x5070003, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ - 0x0, /* FormalRelease */ - 0x10, /* gcFEATURE_VALUE_Streams */ + 0x1, /* 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_NumShaderCores */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ @@ -33841,12 +36889,12 @@ 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 */ + 0x0, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ @@ -33922,7 +36970,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 */ @@ -33966,7 +37014,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 */ @@ -34044,7 +37092,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 */ @@ -34079,7 +37127,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 */ @@ -34161,11 +37209,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 */ @@ -34241,14 +37289,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000UL_6200 */ + /* vip7000UL_6211 */ { 0x7000, /* ChipID */ - 0x6200, /* ChipRevision */ - 0x70003, /* ProductID */ + 0x6211, /* ChipRevision */ + 0x5070003, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ + 0x21, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ @@ -34267,13 +37321,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x10, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x0, /* 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 */ @@ -34344,7 +37398,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 */ @@ -34388,7 +37442,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 */ @@ -34466,7 +37520,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 */ @@ -34501,9 +37555,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 */ @@ -34525,7 +37579,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 */ @@ -34583,11 +37637,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 */ @@ -34639,7 +37693,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -34659,18 +37713,24 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000ULVX_6200 */ + /* vip8000UL_6211 */ { - 0x7000, /* ChipID */ - 0x6200, /* ChipRevision */ - 0x7000f, /* ProductID */ + 0x8000, /* ChipID */ + 0x6212, /* ChipRevision */ + 0x5080003, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ + 0x21, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ @@ -34689,16 +37749,16 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x8, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x0, /* 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 */ @@ -34766,7 +37826,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 */ @@ -34888,7 +37948,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 */ @@ -34947,7 +38007,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 */ @@ -34983,16 +38043,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 */ @@ -35005,11 +38065,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 */ @@ -35060,8 +38120,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -35081,25 +38141,31 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* vip7000L_6200 */ + /* vip8000ULFN_6211 */ { - 0x7000, /* ChipID */ - 0x6200, /* ChipRevision */ - 0x5070002, /* ProductID */ + 0x8000, /* ChipID */ + 0x6211, /* ChipRevision */ + 0x5080003, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ + 0x22, /* 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 */ @@ -35107,20 +38173,20 @@ 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 */ + 0x8, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x20, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x0, /* 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 */ 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ @@ -35482,8 +38548,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -35503,20 +38569,26 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* vip7000UL_6200 */ + /* vip8000UL_6211 */ { - 0x7000, /* ChipID */ - 0x6201, /* ChipRevision */ - 0x5070003, /* ProductID */ + 0x8000, /* ChipID */ + 0x6211, /* ChipRevision */ + 0x5080003, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ - 0x1, /* FormalRelease */ + 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ 0x200, /* gcFEATURE_VALUE_ThreadCount */ @@ -35530,19 +38602,19 @@ 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 */ + 0x0, /* 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 */ 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ @@ -35904,8 +38976,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -35920,30 +38992,36 @@ 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 */ - 0x0, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* vip7000UL_6211 */ + /* vipnano */ { - 0x7000, /* ChipID */ - 0x6211, /* ChipRevision */ - 0x5070003, /* ProductID */ + 0x8000, /* ChipID */ + 0x7000, /* ChipRevision */ + 0x5080001, /* ProductID */ 0x0, /* EcoID */ - 0x21, /* 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 */ @@ -35952,10 +39030,10 @@ 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 */ + 0x0, /* gcFEATURE_VALUE_NumResolvePipes */ 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ @@ -35963,10 +39041,10 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -36326,11 +39404,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ - 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 */ @@ -36342,7 +39420,7 @@ 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 */ @@ -36351,21 +39429,27 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* vip8000UL_6211 */ + /* gcnanovip */ { 0x8000, /* ChipID */ - 0x6212, /* ChipRevision */ - 0x5080003, /* ProductID */ + 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 */ @@ -36374,19 +39458,19 @@ 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 */ - 0x400, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ - 0x10, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 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 */ @@ -36697,7 +39781,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 */ @@ -36764,7 +39848,7 @@ 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 */ @@ -36773,21 +39857,27 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* vip8000ULFN_6211 */ + /* vipnano-q */ { 0x8000, /* ChipID */ - 0x6211, /* ChipRevision */ - 0x5080003, /* ProductID */ + 0x7000, /* ChipRevision */ + 0x45080001, /* ProductID */ 0x0, /* EcoID */ - 0x22, /* 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 */ @@ -36799,18 +39889,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x10, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x0, /* gcFEATURE_VALUE_NumResolvePipes */ 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 */ - 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ - 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 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 */ @@ -37174,7 +40264,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 */ @@ -37186,7 +40276,7 @@ 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 */ @@ -37195,14 +40285,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* vip8000UL_6211 */ + /* vip8000UL-s */ { 0x8000, /* ChipID */ - 0x6211, /* ChipRevision */ - 0x5080003, /* ProductID */ + 0x7000, /* ChipRevision */ + 0x15080003, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ + 0x25, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ @@ -37217,22 +40313,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 */ + 0x0, /* gcFEATURE_VALUE_NumResolvePipes */ + 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 */ - 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ - 0x0, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 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 */ @@ -37596,7 +40692,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 */ @@ -37615,23 +40711,29 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ - 0x1, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* vipnano */ + /* vip8000UL-q */ { 0x8000, /* ChipID */ 0x7000, /* ChipRevision */ - 0x5080001, /* ProductID */ + 0x45080003, /* ProductID */ 0x0, /* EcoID */ - 0x23, /* CustomerID */ + 0x26, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x100, /* gcFEATURE_VALUE_ThreadCount */ + 0x200, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x1, /* gcFEATURE_VALUE_NumShaderCores */ + 0x2, /* gcFEATURE_VALUE_NumShaderCores */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ @@ -37639,22 +40741,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ - 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x8, /* gcFEATURE_VALUE_L1CacheSize */ + 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 */ + 0x0, /* gcFEATURE_VALUE_NumResolvePipes */ + 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 */ - 0x0, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ - 0x1, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 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 */ @@ -38037,23 +41139,29 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ - 0x1, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gcnanovip */ + /* vip8000UL */ { 0x8000, /* ChipID */ 0x7000, /* ChipRevision */ - 0x424f5343, /* ProductID */ + 0x5080003, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x100, /* gcFEATURE_VALUE_ThreadCount */ + 0x200, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x1, /* gcFEATURE_VALUE_NumShaderCores */ + 0x2, /* gcFEATURE_VALUE_NumShaderCores */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ @@ -38061,22 +41169,22 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ - 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x8, /* gcFEATURE_VALUE_L1CacheSize */ + 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 */ + 0x0, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x18, /* 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 */ + 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 */ @@ -38385,7 +41493,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 */ - 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 */ @@ -38440,7 +41548,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 */ @@ -38461,21 +41569,27 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x1, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* vipnano-q */ + /* vip8000-q */ { 0x8000, /* ChipID */ 0x7000, /* ChipRevision */ - 0x45080001, /* ProductID */ + 0x45080000, /* ProductID */ 0x0, /* EcoID */ - 0x24, /* CustomerID */ + 0x72, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ 0x40, /* gcFEATURE_VALUE_TempRegisters */ - 0x100, /* gcFEATURE_VALUE_ThreadCount */ + 0x800, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ - 0x1, /* gcFEATURE_VALUE_NumShaderCores */ + 0x8, /* gcFEATURE_VALUE_NumShaderCores */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ @@ -38483,12 +41597,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ - 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x10, /* gcFEATURE_VALUE_L1CacheSize */ + 0x40, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x20, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x0, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ 0x8, /* gcFEATURE_VALUE_NNCoreCount */ @@ -38881,23 +41995,29 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ - 0x1, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x1, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x1, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* vip8000UL-s */ + /* vipnano-d */ { 0x8000, /* ChipID */ 0x7000, /* ChipRevision */ - 0x15080003, /* ProductID */ + 0x25080001, /* ProductID */ 0x0, /* EcoID */ - 0x25, /* CustomerID */ + 0x2a, /* 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 */ @@ -38905,21 +42025,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ - 0x18, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ 0x10, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x18, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x0, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ - 0x2, /* gcFEATURE_VALUE_NNCoreCount */ + 0x4, /* 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 */ - 0x80, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x100, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ 0x1, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ @@ -39303,46 +42423,52 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ - 0x1, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* vip8000UL-q */ + /* gc7400_551x */ { - 0x8000, /* ChipID */ - 0x7000, /* ChipRevision */ - 0x45080003, /* ProductID */ + 0x7400, /* ChipID */ + 0x5515, /* ChipRevision */ + 0x74000, /* ProductID */ 0x0, /* EcoID */ - 0x26, /* CustomerID */ - 0x0, /* PatchVersion */ + 0x0, /* CustomerID */ + 0x6, /* PatchVersion */ 0x0, /* 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 */ + 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 */ - 0x18, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x10, /* gcFEATURE_VALUE_L1CacheSize */ + 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x8, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x18, /* gcFEATURE_VALUE_USC_MAX_PAGES */ - 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ - 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ - 0x8, /* gcFEATURE_VALUE_NNCoreCount */ - 0x6, /* gcFEATURE_VALUE_NNInputBufferDepth */ - 0x40, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x2, /* 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 */ - 0x400, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ - 0x10, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x200, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ - 0x2, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 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 */ @@ -39402,7 +42528,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 */ 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ @@ -39452,7 +42578,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_S1S8 */ 0x1, /* gcFEATURE_BIT_REG_Halti1 */ 0x0, /* gcFEATURE_BIT_REG_RGB888 */ - 0x1, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ + 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ @@ -39510,7 +42636,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */ 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */ - 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_HIEnhancements1 */ 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */ 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */ 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */ @@ -39518,7 +42644,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */ 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ - 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_MCEnhancements1 */ 0x1, /* gcFEATURE_BIT_REG_Halti2 */ 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */ @@ -39530,10 +42656,10 @@ 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 */ - 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes19 */ 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */ 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */ @@ -39550,11 +42676,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */ 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ 0x1, /* gcFEATURE_BIT_REG_Halti4 */ - 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */ + 0x0, /* gcFEATURE_BIT_REG_RAWriteDepth */ 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ - 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */ + 0x0, /* gcFEATURE_BIT_REG_S8MSAACompression */ 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */ 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */ 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ @@ -39564,9 +42690,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ 0x1, /* gcFEATURE_BIT_REG_RSS8 */ 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ - 0x1, /* gcFEATURE_BIT_REG_Halti5 */ - 0x1, /* gcFEATURE_BIT_REG_Evis */ - 0x0, /* gcFEATURE_BIT_REG_BltEngine */ + 0x0, /* gcFEATURE_BIT_REG_Halti5 */ + 0x0, /* gcFEATURE_BIT_REG_Evis */ + 0x1, /* gcFEATURE_BIT_REG_BltEngine */ 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ 0x0, /* gcFEATURE_BIT_REG_DEC */ @@ -39575,56 +42701,56 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_MultiCoreSemaphoreStallV2 */ + 0x0, /* gcFEATURE_BIT_VMSAA */ + 0x1, /* gcFEATURE_BIT_ChipEnableLink */ 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */ 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */ 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */ - 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ - 0x1, /* gcFEATURE_BIT_V4Compression */ + 0x0, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ + 0x0, /* gcFEATURE_BIT_V4Compression */ 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */ - 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */ - 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */ - 0x1, /* gcFEATURE_BIT_NEW_GPIPE */ + 0x0, /* gcFEATURE_BIT_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 */ - 0x1, /* gcFEATURE_BIT_NO_ASTC */ + 0x0, /* gcFEATURE_BIT_NO_ASTC */ 0x0, /* gcFEATURE_BIT_NO_DXT */ 0x0, /* gcFEATURE_BIT_HWTFB */ - 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */ - 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */ - 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */ + 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 */ - 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 */ + 0x0, /* gcFEATURE_BIT_USC_MCFILL_FIX */ + 0x0, /* gcFEATURE_BIT_TPG_TCPERF_FIX */ + 0x0, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */ + 0x0, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */ 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */ - 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */ + 0x0, /* 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_FLAT_INTERPOLATION_DUAL16_FIX */ + 0x0, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */ 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */ 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */ - 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */ + 0x0, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */ 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */ - 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */ + 0x0, /* gcFEATURE_BIT_SH_FIX_LDEXP */ 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */ - 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */ - 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */ - 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */ - 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */ - 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */ - 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */ - 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */ - 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */ - 0x1, /* gcFEATURE_BIT_SECURITY */ - 0x1, /* gcFEATURE_BIT_ROBUSTNESS */ - 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */ - 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */ - 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_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 */ @@ -39635,23 +42761,23 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */ 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */ 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */ - 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */ - 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */ - 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */ - 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */ - 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */ + 0x0, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */ + 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac */ + 0x0, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */ + 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */ + 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */ 0x1, /* gcFEATURE_BIT_DRAWID */ - 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_PSIO_SAMPLEMASK_IN_R0ZW_FIX */ + 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */ + 0x1, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */ 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */ 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */ 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */ 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */ - 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_SH_NO_INDEX_CONST_ON_A0 */ + 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */ + 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */ 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */ 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */ 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */ @@ -39666,9 +42792,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 */ - 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */ - 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ - 0x1, /* gcFEATURE_BIT_SH_CLOCK_GATE_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 */ @@ -39701,15 +42827,15 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ - 0x1, /* gcFEATURE_BIT_EVIS_VX2 */ - 0x1, /* gcFEATURE_BIT_NN_FLOAT */ + 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_TP_ENGINE */ + 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 */ - 0x1, /* gcFEATURE_BIT_SECURITY_AHB */ + 0x0, /* gcFEATURE_BIT_SECURITY_AHB */ 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ 0x0, /* gcFEATURE_BIT_SMALLBATCH */ 0x0, /* gcFEATURE_BIT_SH_CMPLX */ @@ -39718,44 +42844,50 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ - 0x1, /* gcFEATURE_BIT_VIP_V7 */ + 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_PSCS_THROTTLE */ 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ - 0x1, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x1, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7400_551x */ + /* gc8000UL_6200 */ { - 0x7400, /* ChipID */ - 0x5515, /* ChipRevision */ - 0x74000, /* ProductID */ + 0x8000, /* ChipID */ + 0x6200, /* ChipRevision */ + 0x80003, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ - 0x6, /* PatchVersion */ + 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 */ - 0x0, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x8, /* gcFEATURE_VALUE_LocalStorageSize */ 0x8, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x2, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x0, /* gcFEATURE_VALUE_USC_MAX_PAGES */ - 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ + 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x8, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x10, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NNInputBufferDepth */ @@ -39824,13 +42956,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 */ @@ -39874,7 +43006,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 */ @@ -39932,7 +43064,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 */ @@ -39940,7 +43072,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 */ @@ -39955,7 +43087,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 */ @@ -39972,11 +43104,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */ 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ @@ -39986,9 +43118,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 */ + 0x1, /* gcFEATURE_BIT_REG_Halti5 */ 0x0, /* 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 */ @@ -39997,56 +43129,56 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_RenderTarget8 */ 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ - 0x1, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */ - 0x0, /* gcFEATURE_BIT_VMSAA */ - 0x1, /* gcFEATURE_BIT_ChipEnableLink */ + 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */ + 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 */ - 0x0, /* gcFEATURE_BIT_NEW_GPIPE */ + 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 */ 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */ + 0x1, /* 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 */ + 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 */ - 0x0, /* gcFEATURE_BIT_USC_VX_PERF_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 */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ @@ -40057,19 +43189,19 @@ 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 */ - 0x0, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */ - 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */ + 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 */ - 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */ - 0x1, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */ + 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */ + 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */ + 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */ 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */ 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */ 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */ - 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */ + 0x1, /* gcFEATURE_BIT_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 */ @@ -40088,9 +43220,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 */ @@ -40123,15 +43255,15 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ - 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 */ - 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 */ @@ -40149,35 +43281,41 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc8000UL_6200 */ + /* v630 */ { - 0x8000, /* ChipID */ - 0x6200, /* ChipRevision */ - 0x80003, /* ProductID */ + 0x7000, /* ChipID */ + 0x6300, /* ChipRevision */ + 0x0, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* 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 */ + 0x8, /* gcFEATURE_VALUE_NumShaderCores */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ 0x200, /* gcFEATURE_VALUE_InstructionCount */ 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x10, /* gcFEATURE_VALUE_VaryingCount */ - 0x8, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x8, /* gcFEATURE_VALUE_L1CacheSize */ + 0x1f, /* gcFEATURE_VALUE_VaryingCount */ + 0x40, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x20, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x8, /* gcFEATURE_VALUE_USC_MAX_PAGES */ - 0x10, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ + 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 */ @@ -40296,7 +43434,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_S1S8 */ 0x1, /* gcFEATURE_BIT_REG_Halti1 */ 0x0, /* gcFEATURE_BIT_REG_RGB888 */ - 0x1, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ + 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ @@ -40319,7 +43457,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 */ @@ -40389,7 +43527,7 @@ 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 */ @@ -40410,7 +43548,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 */ @@ -40431,12 +43569,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */ 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */ 0x1, /* gcFEATURE_BIT_NEW_GPIPE */ - 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */ - 0x0, /* gcFEATURE_BIT_MSAA_SHADING */ - 0x1, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ + 0x1, /* gcFEATURE_BIT_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 */ 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */ 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */ 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */ @@ -40447,7 +43585,7 @@ 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 */ - 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ + 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */ 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */ @@ -40516,7 +43654,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */ - 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */ + 0x1, /* gcFEATURE_BIT_MULTI_CLUSTER */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */ @@ -40571,12 +43709,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* v630 */ + /* gc7000XS_6200 */ { 0x7000, /* ChipID */ - 0x6300, /* ChipRevision */ - 0x0, /* ProductID */ + 0x6200, /* ChipRevision */ + 0x70004, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ @@ -40586,7 +43730,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x800, /* gcFEATURE_VALUE_ThreadCount */ 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ 0x8, /* gcFEATURE_VALUE_NumShaderCores */ - 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ + 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ 0x200, /* gcFEATURE_VALUE_InstructionCount */ @@ -40938,7 +44082,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */ - 0x1, /* gcFEATURE_BIT_MULTI_CLUSTER */ + 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */ @@ -40949,7 +44093,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */ 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */ 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */ - 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */ + 0x1, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */ 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */ 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */ 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */ @@ -40993,34 +44137,40 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000XS_6200 */ + /* gc7000L_6200 */ { 0x7000, /* ChipID */ 0x6200, /* ChipRevision */ - 0x70004, /* ProductID */ + 0x70002, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 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 */ - 0x20, /* gcFEATURE_VALUE_L1CacheSize */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ + 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x10, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x40, /* 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 */ @@ -41163,7 +44313,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 */ @@ -41233,7 +44383,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 */ @@ -41254,7 +44404,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 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ 0x0, /* gcFEATURE_BIT_REG_DEC */ @@ -41275,12 +44425,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -41291,7 +44441,7 @@ 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 */ @@ -41371,7 +44521,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */ 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */ 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */ - 0x1, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */ + 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */ 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */ 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */ 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */ @@ -41415,12 +44565,18 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000L_6200 */ + /* gc7000LXS_6200 */ { 0x7000, /* ChipID */ 0x6200, /* ChipRevision */ - 0x70002, /* ProductID */ + 0x7000a, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* PatchVersion */ @@ -41436,13 +44592,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x200, /* gcFEATURE_VALUE_InstructionCount */ 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x10, /* gcFEATURE_VALUE_VaryingCount */ - 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x10, /* gcFEATURE_VALUE_L1CacheSize */ + 0x1f, /* gcFEATURE_VALUE_VaryingCount */ + 0x40, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x20, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x10, /* 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 */ @@ -41585,7 +44741,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 */ @@ -41655,7 +44811,7 @@ 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 */ @@ -41676,7 +44832,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 */ @@ -41697,12 +44853,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */ 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */ 0x1, /* gcFEATURE_BIT_NEW_GPIPE */ - 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */ - 0x0, /* gcFEATURE_BIT_MSAA_SHADING */ + 0x1, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */ + 0x1, /* gcFEATURE_BIT_MSAA_SHADING */ 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ - 0x1, /* gcFEATURE_BIT_NO_ASTC */ + 0x0, /* gcFEATURE_BIT_NO_ASTC */ 0x0, /* gcFEATURE_BIT_NO_DXT */ - 0x0, /* gcFEATURE_BIT_HWTFB */ + 0x1, /* gcFEATURE_BIT_HWTFB */ 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */ 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */ 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */ @@ -41713,7 +44869,7 @@ 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 */ - 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ + 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */ 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */ @@ -41837,22 +44993,28 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000LXS_6200 */ + /* vip7000_6200 */ { 0x7000, /* ChipID */ 0x6200, /* ChipRevision */ - 0x7000a, /* ProductID */ + 0x5070000, /* ProductID */ 0x0, /* EcoID */ 0x0, /* CustomerID */ 0x0, /* 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 */ - 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ + 0x8, /* gcFEATURE_VALUE_NumShaderCores */ + 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ 0x200, /* gcFEATURE_VALUE_InstructionCount */ @@ -41860,7 +45022,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x1f, /* gcFEATURE_VALUE_VaryingCount */ 0x40, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x20, /* gcFEATURE_VALUE_L1CacheSize */ + 0x40, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ @@ -41940,7 +45102,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 */ @@ -41984,7 +45146,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 */ @@ -42007,7 +45169,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 */ @@ -42062,7 +45224,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 */ @@ -42077,7 +45239,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 */ @@ -42097,8 +45259,8 @@ 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_Evis */ + 0x0, /* gcFEATURE_BIT_REG_BltEngine */ 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ 0x0, /* gcFEATURE_BIT_REG_DEC */ @@ -42119,12 +45281,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -42135,7 +45297,7 @@ 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 */ @@ -42179,11 +45341,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 */ @@ -42259,35 +45421,41 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* vip7000_6200 */ + /* gc7000ULVX_V11_6200 */ { 0x7000, /* ChipID */ 0x6200, /* ChipRevision */ - 0x5070000, /* ProductID */ + 0x7000f, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ + 0x1, /* 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 */ 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 */ + 0x8, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */ - 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ + 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 */ @@ -42302,7 +45470,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ 0x0, /* gcFEATURE_BIT_REG_DebugMode */ - 0x1, /* gcFEATURE_BIT_REG_ZCompression */ + 0x0, /* gcFEATURE_BIT_REG_ZCompression */ 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */ 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ @@ -42362,7 +45530,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 */ @@ -42484,7 +45652,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 */ 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ @@ -42530,20 +45698,20 @@ 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 */ 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */ 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */ 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */ 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ - 0x1, /* gcFEATURE_BIT_V4Compression */ + 0x0, /* gcFEATURE_BIT_V4Compression */ 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */ 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */ 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */ 0x1, /* gcFEATURE_BIT_NEW_GPIPE */ 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */ 0x0, /* gcFEATURE_BIT_MSAA_SHADING */ - 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ + 0x1, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ 0x1, /* gcFEATURE_BIT_NO_ASTC */ 0x0, /* gcFEATURE_BIT_NO_DXT */ 0x0, /* gcFEATURE_BIT_HWTFB */ @@ -42579,16 +45747,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 */ - 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_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 */ @@ -42601,11 +45769,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 */ - 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_SNAPPAGE_CMD */ + 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */ + 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */ + 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */ 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */ 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */ 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */ @@ -42655,7 +45823,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ 0x0, /* gcFEATURE_BIT_NN_FLOAT */ 0x0, /* gcFEATURE_BIT_DEC400 */ @@ -42681,14 +45849,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000ULVX_V11_6200 */ + /* gc7000ULVX_V12_6200 */ { 0x7000, /* ChipID */ 0x6200, /* ChipRevision */ 0x7000f, /* ProductID */ 0x0, /* EcoID */ - 0x1, /* CustomerID */ + 0x2, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ @@ -42828,7 +46002,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_S1S8 */ 0x1, /* gcFEATURE_BIT_REG_Halti1 */ 0x0, /* gcFEATURE_BIT_REG_RGB888 */ - 0x1, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ + 0x0, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ 0x0, /* gcFEATURE_BIT_REG_TXFilter */ 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ @@ -42993,7 +46167,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */ 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */ 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */ 0x1, /* gcFEATURE_BIT_SECURITY */ @@ -43001,16 +46175,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 */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ + 0x0, /* 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_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 */ @@ -43103,14 +46277,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000ULVX_V12_6200 */ + /* gc7000ULVX_6200_pid0x60 */ { 0x7000, /* ChipID */ - 0x6200, /* ChipRevision */ + 0x6203, /* ChipRevision */ 0x7000f, /* ProductID */ 0x0, /* EcoID */ - 0x2, /* CustomerID */ + 0x60, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x8, /* gcFEATURE_VALUE_Streams */ @@ -43483,7 +46663,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */ 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */ 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */ - 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */ + 0x1, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */ 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */ 0x0, /* gcFEATURE_BIT_G2D_DEC400 */ 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */ @@ -43499,7 +46679,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -43525,35 +46705,41 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000ULVX_6200_pid0x60 */ + /* gc7000XS_6FFF */ { 0x7000, /* ChipID */ - 0x6203, /* ChipRevision */ - 0x7000f, /* ProductID */ + 0x6fff, /* ChipRevision */ + 0x70004, /* ProductID */ 0x0, /* EcoID */ - 0x60, /* CustomerID */ + 0x0, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* 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 */ + 0x8, /* gcFEATURE_VALUE_NumShaderCores */ + 0x2, /* gcFEATURE_VALUE_NumPixelPipes */ 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ 0x0, /* gcFEATURE_VALUE_BufferSize */ 0x200, /* gcFEATURE_VALUE_InstructionCount */ 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ - 0x10, /* gcFEATURE_VALUE_VaryingCount */ - 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ - 0x8, /* gcFEATURE_VALUE_L1CacheSize */ + 0x1f, /* gcFEATURE_VALUE_VaryingCount */ + 0x40, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x20, /* 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 */ + 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 */ @@ -43568,7 +46754,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */ 0x1, /* gcFEATURE_BIT_REG_MSAA */ 0x0, /* gcFEATURE_BIT_REG_DC */ @@ -43695,7 +46881,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 */ @@ -43765,7 +46951,7 @@ 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 */ @@ -43785,8 +46971,8 @@ 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_BltEngine */ + 0x0, /* gcFEATURE_BIT_REG_Evis */ + 0x1, /* gcFEATURE_BIT_REG_BltEngine */ 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ 0x0, /* gcFEATURE_BIT_REG_DEC */ @@ -43796,23 +46982,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 */ 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ - 0x0, /* gcFEATURE_BIT_V4Compression */ + 0x1, /* gcFEATURE_BIT_V4Compression */ 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */ 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */ 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */ 0x1, /* gcFEATURE_BIT_NEW_GPIPE */ - 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */ - 0x0, /* gcFEATURE_BIT_MSAA_SHADING */ - 0x1, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ - 0x1, /* gcFEATURE_BIT_NO_ASTC */ + 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 */ 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */ 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */ 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */ @@ -43823,7 +47009,7 @@ 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 */ - 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ + 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */ 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */ @@ -43837,7 +47023,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */ 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */ 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */ - 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */ + 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */ 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */ 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */ 0x1, /* gcFEATURE_BIT_SECURITY */ @@ -43847,7 +47033,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ - 0x1, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */ 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */ 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */ @@ -43905,7 +47091,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */ 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */ 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */ - 0x1, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */ + 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */ 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */ 0x0, /* gcFEATURE_BIT_G2D_DEC400 */ 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */ @@ -43947,14 +47133,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000XS_6FFF */ + /* gc7000_6210 */ { 0x7000, /* ChipID */ - 0x6fff, /* ChipRevision */ - 0x70004, /* ProductID */ + 0x6210, /* ChipRevision */ + 0x70000, /* ProductID */ 0x0, /* EcoID */ - 0x0, /* CustomerID */ + 0x6, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ @@ -43968,13 +47160,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 */ - 0x20, /* gcFEATURE_VALUE_L1CacheSize */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ + 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x10, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ - 0x40, /* 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 */ @@ -44117,7 +47309,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 */ @@ -44187,7 +47379,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 */ @@ -44229,12 +47421,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ @@ -44245,7 +47437,7 @@ 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 */ @@ -44259,7 +47451,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x0, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */ 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */ 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */ 0x1, /* gcFEATURE_BIT_SECURITY */ @@ -44290,9 +47482,9 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */ 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */ 0x1, /* gcFEATURE_BIT_SNAPPAGE_CMD */ - 0x0, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */ - 0x0, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */ - 0x0, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */ + 0x1, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */ + 0x1, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */ + 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */ 0x0, /* gcFEATURE_BIT_COMPUTE_ONLY */ 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */ 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */ @@ -44317,12 +47509,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */ + 0x1, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */ + 0x1, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */ + 0x1, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */ + 0x1, /* gcFEATURE_BIT_FE_ROBUST_FIX */ + 0x1, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */ 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */ 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */ 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */ @@ -44365,10 +47557,16 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc7000_6210 */ { @@ -44376,7 +47574,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x6210, /* ChipRevision */ 0x70000, /* ProductID */ 0x0, /* EcoID */ - 0x6, /* CustomerID */ + 0xa, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ @@ -44747,14 +47945,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */ 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */ 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */ - 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */ + 0x1, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */ 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */ - 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */ + 0x1, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */ 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */ 0x0, /* gcFEATURE_BIT_G2D_DEC400 */ - 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */ - 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ - 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ + 0x1, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */ + 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 */ @@ -44763,7 +47961,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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_PE_ADVANCE_BLEND_PART0 */ 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ @@ -44790,15 +47988,21 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ - 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x1, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000_6210 */ + /* gc7000XS_6210 */ { 0x7000, /* ChipID */ 0x6210, /* ChipRevision */ - 0x70000, /* ProductID */ + 0x70004, /* ProductID */ 0x0, /* EcoID */ - 0xa, /* CustomerID */ + 0x8, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ @@ -44813,12 +48017,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ 0x1, /* gcFEATURE_VALUE_CoreCount */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ - 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x30, /* 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 */ + 0x30, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ @@ -44961,7 +48165,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 */ @@ -45031,7 +48235,7 @@ 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 */ @@ -45074,11 +48278,11 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */ 0x1, /* gcFEATURE_BIT_NEW_GPIPE */ 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */ - 0x0, /* gcFEATURE_BIT_MSAA_SHADING */ + 0x1, /* gcFEATURE_BIT_MSAA_SHADING */ 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ - 0x1, /* gcFEATURE_BIT_NO_ASTC */ + 0x0, /* gcFEATURE_BIT_NO_ASTC */ 0x0, /* gcFEATURE_BIT_NO_DXT */ - 0x0, /* gcFEATURE_BIT_HWTFB */ + 0x1, /* gcFEATURE_BIT_HWTFB */ 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */ 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */ 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */ @@ -45089,7 +48293,7 @@ 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 */ - 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ + 0x1, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */ 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */ @@ -45185,8 +48389,8 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 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 */ + 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ + 0x1, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ 0x0, /* gcFEATURE_BIT_NN_FLOAT */ @@ -45213,14 +48417,20 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x1, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, - /* gc7000XS_6210 */ + /* gc8000XS_6210 */ { - 0x7000, /* ChipID */ + 0x8000, /* ChipID */ 0x6210, /* ChipRevision */ - 0x70004, /* ProductID */ + 0x80004, /* ProductID */ 0x0, /* EcoID */ - 0x8, /* CustomerID */ + 0xd, /* CustomerID */ 0x0, /* PatchVersion */ 0x0, /* FormalRelease */ 0x10, /* gcFEATURE_VALUE_Streams */ @@ -45635,6 +48845,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x1, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc7000XS_6210 */ { @@ -46057,6 +49273,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x1, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc7000L_6210 */ { @@ -46479,6 +49701,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc7000L_6210 */ { @@ -46901,6 +50129,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x1, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc7000LXS_6210 */ { @@ -47323,6 +50557,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x1, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc7000XSVX_6210 */ { @@ -47745,6 +50985,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x1, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc7000XSVX_6210 */ { @@ -48167,6 +51413,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x1, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc7000L_DEC400 */ { @@ -48589,6 +51841,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x1, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc7400_0002 */ { @@ -49011,6 +52269,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc7400_0003 */ { @@ -49433,6 +52697,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc8400_6300 */ { @@ -49855,6 +53125,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc8100_6300_pid0x43 */ { @@ -50277,6 +53553,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* gc8200_6300_pid0x46 */ { @@ -50699,6 +53981,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* cc8000_6220 */ { @@ -50725,7 +54013,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x40, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x0, /* gcFEATURE_VALUE_NumResolvePipes */ 0x40, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ @@ -51121,6 +54409,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, /* cc8000_6330 */ { @@ -51147,7 +54441,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x20, /* gcFEATURE_VALUE_L1CacheSize */ 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ - 0x1, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x0, /* gcFEATURE_VALUE_NumResolvePipes */ 0x20, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ @@ -51543,6 +54837,12 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_SEPARATE_LS */ 0x0, /* gcFEATURE_BIT_MCFE */ 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x1, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x0, /* gcFEATURE_BIT_TP_REORDER */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ }, }; 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 4945dca90ec1..9b3c60ca8c7c 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h @@ -310,6 +310,14 @@ typedef struct _gckHARDWARE * gckHARDWARE; # define gcmVERIFY_OBJECT_RETURN(obj, t) do {} while (gcvFALSE) #endif +typedef struct _gcsContiguousBlock +{ + gctUINT32 ptr; + gctSIZE_T size; +} +gcsContiguousBlock; + + /******************************************************************************\ ********************************** gckOS Object ********************************* \******************************************************************************/ @@ -1162,6 +1170,26 @@ gckOS_UnmapUserMemory( IN gctUINT32 Address ); +/* Get scatter-gather table from memory. */ +gceSTATUS +gckOS_MemoryGetSGT( + IN gckOS Os, + IN gctPHYS_ADDR Physical, + IN gctSIZE_T Offset, + IN gctSIZE_T Bytes, + OUT gctPOINTER *SGT + ); + +/* Map a page range of memory to user space. */ +gceSTATUS +gckOS_MemoryMmap( + IN gckOS Os, + IN gctPHYS_ADDR Physical, + IN gctSIZE_T skipPages, + IN gctSIZE_T numPages, + INOUT gctPOINTER Vma + ); + /* Wrap a user memory to gctPHYS_ADDR. */ gceSTATUS gckOS_WrapMemory( @@ -1780,6 +1808,17 @@ gckKERNEL_QueryVideoMemory( OUT struct _gcsHAL_INTERFACE * Interface ); +/* Query used memory nodes of a specific pool. */ +gceSTATUS +gckKERNEL_QueryVidMemPoolNodes( + gckKERNEL Kernel, + gcePOOL Pool, + gctUINT32 * TotalSize, /* sum of the sizes of the contiguous blocks (i.e. total memory used at current time) : to be filled by the called function */ + gcsContiguousBlock * MemoryBlocks, /* previously allocated by the calling function : to be filled by the called function */ + gctUINT32 NumMaxBlocks, /* provided by the calling function */ + gctUINT32 * NumBlocks /* actual number of contiguous blocks : to be filled by the called function */ + ); + /* Lookup the gckVIDMEM object for a pool. */ gceSTATUS gckKERNEL_GetVideoMemoryPool( @@ -1855,6 +1894,7 @@ gckKERNEL_MapVideoMemoryEx( IN gctUINT32 Pid, IN gctUINT32 Bytes, #endif + IN gcePOOL Pool, OUT gctPOINTER * Logical ); @@ -2114,6 +2154,12 @@ gckHARDWARE_QueryChipIdentity( OUT gcsHAL_QUERY_CHIP_IDENTITY_PTR Identity ); +gceSTATUS +gckHARDWARE_QueryChipOptions( + IN gckHARDWARE Hardware, + OUT gcsHAL_QUERY_CHIP_OPTIONS_PTR Options + ); + /* Query the shader uniforms support. */ gceSTATUS gckHARDWARE_QueryShaderCaps( @@ -2513,13 +2559,6 @@ gckEVENT_Unlock( IN gceSURF_TYPE Type ); -gceSTATUS -gckEVENT_CommitDone( - IN gckEVENT Event, - IN gceKERNEL_WHERE FromWhere, - IN gckCONTEXT Context - ); - /* Schedule a FreeVirtualCommandBuffer event. */ gceSTATUS gckEVENT_DestroyVirtualCommandBuffer( @@ -2540,7 +2579,8 @@ gckEVENT_Submit( gceSTATUS gckEVENT_Commit( IN gckEVENT Event, - IN gcsQUEUE_PTR Queue + IN gcsQUEUE_PTR Queue, + IN gctBOOL Forced ); /* Event callback routine. */ @@ -2618,7 +2658,6 @@ gckCOMMAND_Commit( IN gckCONTEXT Context, IN gcoCMDBUF CommandBuffer, IN gcsSTATE_DELTA_PTR StateDelta, - IN gcsQUEUE_PTR EventQueue, IN gctUINT32 ProcessID, IN gctBOOL Shared, IN gctUINT32 Index, @@ -2763,21 +2802,13 @@ gckMMU_IsFlatMapped( ); -#if VIVANTE_PROFILER -gceSTATUS -gckHARDWARE_QueryProfileRegisters( - IN gckHARDWARE Hardware, - IN gctBOOL Reset, - OUT gcsPROFILER_COUNTERS * Counters - ); -#endif - gceSTATUS gckHARDWARE_QueryContextProfile( IN gckHARDWARE Hardware, IN gctBOOL Reset, IN gckCONTEXT Context, - OUT gcsPROFILER_COUNTERS * Counters + OUT gcsPROFILER_COUNTERS_PART1 * Counters_part1, + OUT gcsPROFILER_COUNTERS_PART2 * Counters_part2 ); gceSTATUS @@ -2786,21 +2817,6 @@ gckHARDWARE_UpdateContextProfile( IN gckCONTEXT Context ); -gceSTATUS -gckHARDWARE_QueryContextNewProfile( - IN gckHARDWARE Hardware, - IN gctBOOL Reset, - IN gckCONTEXT Context, - OUT gcsPROFILER_NEW_COUNTERS_PART1 * Counters_part1, - OUT gcsPROFILER_NEW_COUNTERS_PART2 * Counters_part2 - ); - -gceSTATUS -gckHARDWARE_UpdateContextNewProfile( - IN gckHARDWARE Hardware, - IN gckCONTEXT Context - ); - gceSTATUS gckHARDWARE_InitProfiler( IN gckHARDWARE Hardware 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 0bd63e16fc8c..9d24c5bd49f7 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 @@ -576,6 +576,13 @@ gcoHAL_SetBltNP2Texture( gctBOOL enable ); +gceSTATUS +gcoHAL_ExportVideoMemory( + IN gctUINT32 Handle, + IN gctUINT32 Flags, + OUT gctINT32 * FD + ); + gceSTATUS gcoHAL_NameVideoMemory( IN gctUINT32 Handle, @@ -1070,6 +1077,14 @@ gcoHAL_ScheduleSignal( IN gceKERNEL_WHERE FromWhere ); +gceSTATUS +gcoHAL_GetGraphicBufferFd( + IN gctUINT32 Node[3], + IN gctSHBUF ShBuf, + IN gctSIGNAL Signal, + OUT gctINT32 * Fd + ); + /******************************************************************************\ ********************************** gcoOS Object ********************************* \******************************************************************************/ @@ -4077,7 +4092,8 @@ gckOS_DebugFlush( ** ** ... Optional arguments. */ -#if gcdDUMP + +#if gcdDUMP || gcdDUMP_2DVG gceSTATUS gcfDump( IN gcoOS Os, @@ -4165,7 +4181,7 @@ gckOS_DebugFlush( ** Number of bytes. */ -#if gcdDUMP || gcdDUMP_COMMAND +#if gcdDUMP || gcdDUMP_COMMAND || gcdDUMP_2DVG gceSTATUS gcfDumpBuffer( IN gcoOS Os, 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 628f13cf5a4f..7a41b0a5a854 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 @@ -126,11 +126,10 @@ typedef enum _gceHAL_COMMAND_CODES gcvHAL_GET_PROFILE_SETTING, gcvHAL_SET_PROFILE_SETTING, - gcvHAL_READ_ALL_PROFILE_REGISTERS, gcvHAL_PROFILE_REGISTERS_2D, - gcvHAL_READ_ALL_PROFILE_NEW_REGISTERS_PART1, - gcvHAL_READ_ALL_PROFILE_NEW_REGISTERS_PART2, - gcvHAL_READ_PROFILER_NEW_REGISTER_SETTING, + gcvHAL_READ_ALL_PROFILE_REGISTERS_PART1, + gcvHAL_READ_ALL_PROFILE_REGISTERS_PART2, + gcvHAL_READ_PROFILER_REGISTER_SETTING, /* Power management. */ gcvHAL_SET_POWER_MANAGEMENT_STATE, @@ -196,6 +195,8 @@ typedef enum _gceHAL_COMMAND_CODES gcvHAL_SET_FSCALE_VALUE, gcvHAL_GET_FSCALE_VALUE, + /* Export video memory as dma_buf fd */ + gcvHAL_EXPORT_VIDEO_MEMORY, gcvHAL_NAME_VIDEO_MEMORY, gcvHAL_IMPORT_VIDEO_MEMORY, @@ -218,6 +219,13 @@ typedef enum _gceHAL_COMMAND_CODES /* Shared buffer. */ gcvHAL_SHBUF, + /* + * Fd representation of android graphic buffer contents. + * Currently, it is only to reference video nodes, signal, etc to avoid being + * destroyed when trasfering across processes. + */ + gcvHAL_GET_GRAPHIC_BUFFER_FD, + /* Connect a video node to an OS native fd. */ gcvHAL_GET_VIDEO_MEMORY_FD, @@ -238,7 +246,8 @@ typedef enum _gceHAL_COMMAND_CODES gcvHAL_DEC300_FLUSH_WAIT, #endif - gcvHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY + gcvHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY, + gcvHAL_QUERY_CHIP_OPTION } gceHAL_COMMAND_CODES; @@ -264,6 +273,7 @@ typedef struct _gcsUSER_MEMORY_DESC /* gcvALLOC_FLAG_DMABUF */ gctUINT32 handle; + gctUINT64 dmabuf; /* gcvALLOC_FLAG_USERMEMORY */ gctUINT64 logical; @@ -360,6 +370,23 @@ typedef struct _gcsHAL_QUERY_CHIP_IDENTITY } gcsHAL_QUERY_CHIP_IDENTITY; +typedef struct _gcsHAL_QUERY_CHIP_OPTIONS * gcsHAL_QUERY_CHIP_OPTIONS_PTR; +typedef struct _gcsHAL_QUERY_CHIP_OPTIONS +{ + gctBOOL gpuProfiler; + gctBOOL allowFastClear; + gctBOOL powerManagement; + /* Whether use new MMU. It is meaningless + ** for old MMU since old MMU is always enabled. + */ + gctBOOL enableMMU; + gceCOMPRESSION_OPTION allowCompression; + gctUINT uscL1CacheRatio; + gceSECURE_MODE secureMode; + +} +gcsHAL_QUERY_CHIP_OPTIONS; + typedef struct _gcsHAL_INTERFACE { /* Command code. */ @@ -554,6 +581,12 @@ typedef struct _gcsHAL_INTERFACE /* Type of surface. */ IN gceSURF_TYPE type; + /* Pool of the unlock node */ + OUT gcePOOL pool; + + /* Bytes of the unlock node */ + OUT gctUINT bytes; + /* Flag to unlock surface asynchroneously. */ IN OUT gctBOOL asynchroneous; } @@ -844,7 +877,6 @@ typedef struct _gcsHAL_INTERFACE { /* Enable profiling */ OUT gctBOOL enable; - OUT gctBOOL syncMode; } GetProfileSetting; @@ -853,7 +885,6 @@ typedef struct _gcsHAL_INTERFACE { /* Enable profiling */ IN gctBOOL enable; - IN gctBOOL syncMode; } SetProfileSetting; @@ -865,36 +896,25 @@ typedef struct _gcsHAL_INTERFACE } SetProfilerRegisterClear; - /* gcvHAL_READ_ALL_PROFILE_REGISTERS */ - struct _gcsHAL_READ_ALL_PROFILE_REGISTERS - { - /* Context buffer object gckCONTEXT. Just a name. */ - IN gctUINT32 context; - - /* Data read. */ - OUT gcsPROFILER_COUNTERS counters; - } - RegisterProfileData; - - struct _gcsHAL_READ_ALL_PROFILE_NEW_REGISTERS_PART1 + struct _gcsHAL_READ_ALL_PROFILE_REGISTERS_PART1 { /* Context buffer object gckCONTEXT. Just a name. */ IN gctUINT32 context; /* Data read. */ - OUT gcsPROFILER_NEW_COUNTERS_PART1 newCounters; + OUT gcsPROFILER_COUNTERS_PART1 Counters; } - RegisterProfileNewData_part1; + RegisterProfileData_part1; - struct _gcsHAL_READ_ALL_PROFILE_NEW_REGISTERS_PART2 + struct _gcsHAL_READ_ALL_PROFILE_REGISTERS_PART2 { /* Context buffer object gckCONTEXT. Just a name. */ IN gctUINT32 context; /* Data read. */ - OUT gcsPROFILER_NEW_COUNTERS_PART2 newCounters; + OUT gcsPROFILER_COUNTERS_PART2 Counters; } - RegisterProfileNewData_part2; + RegisterProfileData_part2; /* gcvHAL_PROFILE_REGISTERS_2D */ struct _gcsHAL_PROFILE_REGISTERS_2D @@ -1130,6 +1150,20 @@ typedef struct _gcsHAL_INTERFACE } GetFscaleValue; + /* gcvHAL_EXPORT_VIDEO_MEMORY */ + struct _gcsHAL_EXPORT_VIDEO_MEMORY + { + /* Allocated video memory. */ + IN gctUINT32 node; + + /* Export flags */ + IN gctUINT32 flags; + + /* Exported dma_buf fd */ + OUT gctINT32 fd; + } + ExportVideoMemory; + struct _gcsHAL_NAME_VIDEO_MEMORY { IN gctUINT32 handle; @@ -1194,6 +1228,21 @@ typedef struct _gcsHAL_INTERFACE } ShBuf; + struct _gcsHAL_GET_GRAPHIC_BUFFER_FD + { + /* Max 3 video nodes, node handle here. */ + IN gctUINT32 node[3]; + + /* A shBuf. */ + IN gctUINT64 shBuf; + + /* A signal. */ + IN gctUINT32 signal; + + OUT gctINT32 fd; + } + GetGraphicBufferFd; + struct _gcsHAL_GET_VIDEO_MEMORY_FD { @@ -1282,6 +1331,8 @@ typedef struct _gcsHAL_INTERFACE IN gceSURF_TYPE type; } BottomHalfUnlockVideoMemory; + + gcsHAL_QUERY_CHIP_OPTIONS QueryChipOptions; } u; } diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_drm.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_drm.h new file mode 100644 index 000000000000..8e08290f7624 --- /dev/null +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_drm.h @@ -0,0 +1,132 @@ +/**************************************************************************** +* +* 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. +* +*****************************************************************************/ + + +/* + * Copyright (C) 2015 Etnaviv Project + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + * + * 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, see . + */ + +#ifndef __GC_HAL_DRM_H__ +#define __GC_HAL_DRM_H__ + +#if defined(__cplusplus) +extern "C" { +#endif + +enum VIV_GEM_PARAM { + VIV_GEM_PARAM_NODE = 0, + VIV_GEM_PARAM_POOL, + VIV_GEM_PARAM_SIZE, +}; + +struct drm_viv_gem_create { + __u64 size; /* in */ + __u32 flags; /* in */ + __u32 handle; /* out */ +}; + +struct drm_viv_gem_lock { + __u32 handle; + __u32 cacheable; + __u32 gpu_va; + __u64 cpu_va; +}; + +struct drm_viv_gem_unlock { + __u32 handle; +}; + +struct drm_viv_gem_cache { + __u32 handle; + __u32 op; + __u64 logical; + __u64 bytes; +}; + +struct drm_viv_gem_getinfo { + __u32 handle; + __u32 param; + __u64 value; +}; + +#define DRM_VIV_GEM_CREATE 0x00 +#define DRM_VIV_GEM_LOCK 0x01 +#define DRM_VIV_GEM_UNLOCK 0x02 +#define DRM_VIV_GEM_CACHE 0x03 +#define DRM_VIV_GEM_GETINFO 0x04 +#define DRM_VIV_NUM_IOCTLS 0x05 + +#define DRM_IOCTL_VIV_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_VIV_GEM_CREATE, struct drm_viv_gem_create) +#define DRM_IOCTL_VIV_GEM_LOCK DRM_IOWR(DRM_COMMAND_BASE + DRM_VIV_GEM_LOCK, struct drm_viv_gem_lock) +#define DRM_IOCTL_VIV_GEM_UNLOCK DRM_IOWR(DRM_COMMAND_BASE + DRM_VIV_GEM_UNLOCK, struct drm_viv_gem_unlock) +#define DRM_IOCTL_VIV_GEM_CACHE DRM_IOWR(DRM_COMMAND_BASE + DRM_VIV_GEM_CACHE, struct drm_viv_gem_cache) +#define DRM_IOCTL_VIV_GEM_GETINFO DRM_IOWR(DRM_COMMAND_BASE + DRM_VIV_GEM_GETINFO, struct drm_viv_gem_getinfo) + +#if defined(__cplusplus) +} +#endif + +#endif /* __ETNAVIV_DRM_H__ */ 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 b7629819c31a..69693e6ace0c 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 @@ -325,6 +325,7 @@ typedef enum _gceSPLIT_DRAW_TYPE gcvSPLIT_DRAW_INDEX_FETCH, gcvSPLIT_DRAW_TCS, gcvSPLIT_DRAW_WIDE_LINE, + gcvSPLIT_DRAW_STIPPLE, gcvSPLIT_DRAW_LAST } gceSPLIT_DRAW_TYPE; @@ -531,12 +532,6 @@ gcoBUFOBJ_IsFenceEnabled( IN gcoBUFOBJ BufObj ); -gceSTATUS -gcoSURF_SetSharedLock( - IN gcoSURF Surface, - IN gctPOINTER SharedLock - ); - gceSTATUS gcoSURF_GetFence( IN gcoSURF Surface, @@ -569,12 +564,6 @@ gcoINDEX_WaitFence( IN gceFENCE_TYPE Type ); -gceSTATUS -gcoINDEX_SetSharedLock( - IN gcoINDEX Index, - IN gctPOINTER SharedLock - ); - gceSTATUS gcoSURF_DrawBlit( gcsSURF_VIEW *SrcView, @@ -2332,6 +2321,13 @@ gcoTEXTURE_IsComplete( IN gctINT MaxLevel ); +gceSTATUS +gcoTEXTURE_CheckTexLevel0Attrib( + IN gcoTEXTURE Texture, + IN gctINT MaxLevel, + IN gctINT usedLevel + ); + gceSTATUS gcoTEXTURE_BindTexture( IN gcoTEXTURE Texture, @@ -2425,12 +2421,6 @@ typedef enum _gceATTRIB_SCHEME gcvATTRIB_SCHEME_UINT_TO_UVEC4, } gceATTRIB_SCHEME; -gceSTATUS -gcoSTREAM_SetSharedLock( - IN gcoSTREAM Stream, - IN gctPOINTER sharedLock - ); - gceSTATUS gcoSTREAM_Construct( IN gcoHAL Hal, @@ -2462,12 +2452,6 @@ gcoSTREAM_SetStride( IN gctUINT32 Stride ); -gceSTATUS -gcoSTREAM_Size( - IN gcoSTREAM Stream, - OUT gctSIZE_T *Size - ); - gceSTATUS gcoSTREAM_Node( IN gcoSTREAM Stream, @@ -2497,14 +2481,6 @@ gcoSTREAM_Flush( IN gcoSTREAM Stream ); -/* Dynamic buffer API. */ -gceSTATUS -gcoSTREAM_SetDynamic( - IN gcoSTREAM Stream, - IN gctSIZE_T Bytes, - IN gctUINT Buffers - ); - typedef struct _gcsSTREAM_INFO { gctUINT index; @@ -2517,15 +2493,6 @@ typedef struct _gcsSTREAM_INFO } gcsSTREAM_INFO, * gcsSTREAM_INFO_PTR; -gceSTATUS -gcoSTREAM_UploadDynamic( - IN gcoSTREAM Stream, - IN gctUINT VertexCount, - IN gctUINT InfoCount, - IN gcsSTREAM_INFO_PTR Info, - IN gcoVERTEX Vertex - ); - gceSTATUS gcoSTREAM_CPUCacheOperation( IN gcoSTREAM Stream, 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 08a651dfa79c..71e424bf7e12 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 @@ -148,6 +148,7 @@ typedef enum _gceFEATURE gcvFEATURE_VG_FILTER, gcvFEATURE_VG21, gcvFEATURE_VG_DOUBLE_BUFFER, + gcvFEATURE_VG_RESOLUTION_8K, gcvFEATURE_MC20, gcvFEATURE_SUPER_TILED, gcvFEATURE_FAST_CLEAR_FLUSH, @@ -510,6 +511,9 @@ typedef enum _gceFEATURE gcvFEATURE_ASYNC_FE_FENCE_FIX, gcvFEATURE_PSCS_THROTTLE, gcvFEATURE_WIDELINE_TRIANGLE_EMU, + gcvFEATURE_FENCE, + gcvFEATURE_PE_DEPTH_ONLY_OQFIX, + /* Insert features above this comment only. */ gcvFEATURE_COUNT /* Not a feature. */ } @@ -559,6 +563,7 @@ typedef enum _gceOPTION gcvOPTION_GPU_BUFOBJ_UPLOAD = 56, gcvOPTION_OCL_ASYNC_BLT = 57, gcvOPTION_OCL_IN_THREAD = 58, + gcvOPTION_COMPRESSION_DEC400 = 59, /* Insert option above this comment only */ gcvOPTION_COUNT /* Not a OPTION*/ @@ -2080,6 +2085,24 @@ typedef enum _gceSECURE_MODE } gceSECURE_MODE; +/* kernel driver compression option, as it's a system global option, +** it means kernel driver allows the options, NOT necessarily means it must be on. +*/ +typedef enum _gceCOMPRESSION_OPTION +{ + gcvCOMPRESSION_OPTION_NONE = 0x0, /* No any compression */ + gcvCOMPRESSION_OPTION_COLOR = 0x1, /* Compression for non-msaa color format */ + gcvCOMPRESSION_OPTION_DEPTH = 0x2, /* Compression for non-msaa depth format */ + gcvCOMPRESSION_OPTION_MSAA_COLOR = 0x4, /* Compression for msaa color */ + gcvCOMPRESSION_OPTION_MSAA_DEPTH = 0x8, /* Compression for msaa depth */ + + /* default compressio option */ + gcvCOMPRESSION_OPTION_DEFAULT = gcvCOMPRESSION_OPTION_DEPTH | + gcvCOMPRESSION_OPTION_COLOR | + gcvCOMPRESSION_OPTION_MSAA_COLOR | + gcvCOMPRESSION_OPTION_MSAA_DEPTH, +} +gceCOMPRESSION_OPTION; /* No special needs. */ #define gcvALLOC_FLAG_NONE 0x00000000 @@ -2093,6 +2116,9 @@ gceSECURE_MODE; /* Physical non contiguous. */ #define gcvALLOC_FLAG_NON_CONTIGUOUS 0x00000008 +/* Do not try slow pools (gcvPOOL_VIRTUAL/gcvPOOL_CONTIGUOUS) */ +#define gcvALLOC_FLAG_FAST_POOLS 0x00000100 + /* Import DMABUF. */ #define gcvALLOC_FLAG_DMABUF 0x00001000 /* Import USERMEMORY. */ 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 dc018f961fdd..9e3c58a9dd5e 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 @@ -300,6 +300,9 @@ struct _gcoQUEUE /* Number of records currently in queue */ gctUINT32 recordCount; + /* Max size of pending unlock node in vidmem pool not committed */ + gctUINT maxUnlockBytes; + gceENGINE engine; }; 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 9e62f99a6210..72815f618d7e 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 @@ -214,6 +214,10 @@ This define enables the use of VM for gckCommand and fence buffers. # define gcdDUMP_API 0 #endif +#ifndef gcdDUMP_2DVG +# define gcdDUMP_2DVG 0 +#endif + /* gcdDUMP_AHB_ACCESS @@ -382,7 +386,6 @@ This define enables the use of VM for gckCommand and fence buffers. Set to 1 for infinite speed hardware. Set to 2 for bypassing the HAL. - Set to 3 for bypassing the drivers. */ #ifndef gcdNULL_DRIVER # define gcdNULL_DRIVER 0 @@ -1386,7 +1389,8 @@ VIV:gcdUSE_MMU_EXCEPTION Default is 0 which means 32bytes aligned. */ #ifndef gcd2D_COMPRESSION_DEC400_ALIGN_MODE -# define gcd2D_COMPRESSION_DEC400_ALIGN_MODE 1 +# define gcd2D_COMPRESSION_DEC400_ALIGN_MODE 1 #endif + #endif /* __gc_hal_options_h_ */ diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h index 3415e040cecc..a811ad2e79e7 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 @@ -72,13 +72,6 @@ extern "C" { #define GLBUFOBJ_OBJECT 40 #define GLBUFOBJ_OBJECT_BYTES 41 -#if VIVANTE_PROFILER -#define gcmPROFILE_GC(Enum, Value) gcoPROFILER_Count(gcvNULL, Enum, Value) -#else -#define gcmPROFILE_GC(Enum, Value) do { } while (gcvFALSE) -#endif - - #define ES11_CALLS 151 #define ES11_DRAWCALLS (ES11_CALLS + 1) #define ES11_STATECHANGECALLS (ES11_DRAWCALLS + 1) @@ -546,6 +539,16 @@ extern "C" { #define VPNC_MCCAXIMAXLATENCY (VPNG_MCC + 16) #define VPNC_MCCAXITOTALLATENCY (VPNG_MCC + 17) #define VPNC_MCCAXISAMPLECOUNT (VPNG_MCC + 18) +#define VPNC_MCCFEREADBANDWIDTH (VPNG_MCC + 19) +#define VPNC_MCCMMUREADBANDWIDTH (VPNG_MCC + 20) +#define VPNC_MCCBLTREADBANDWIDTH (VPNG_MCC + 21) +#define VPNC_MCCSH0READBANDWIDTH (VPNG_MCC + 22) +#define VPNC_MCCSH1READBANDWIDTH (VPNG_MCC + 23) +#define VPNC_MCCPEWRITEBANDWIDTH (VPNG_MCC + 24) +#define VPNC_MCCBLTWRITEBANDWIDTH (VPNG_MCC + 25) +#define VPNC_MCCSH0WRITEBANDWIDTH (VPNG_MCC + 26) +#define VPNC_MCCSH1WRITEBANDWIDTH (VPNG_MCC + 27) + /* HW: MCZ Counters. */ #define VPNC_MCZREADREQ8BCOLORPIPE (VPNG_MCZ + 1) @@ -658,6 +661,103 @@ extern "C" { + MODULE_GPUL2_CACHE_COUNTER_NUM) +#ifdef ANDROID +#define DEFAULT_PROFILE_FILE_NAME "/sdcard/vprofiler.vpd" +#else +#define DEFAULT_PROFILE_FILE_NAME "vprofiler.vpd" +#endif + +#if gcdENDIAN_BIG +#define BIG_ENDIAN_TRANS_INT(x) ((gctUINT32)( \ + (((gctUINT32)(x) & (gctUINT32)0x000000FFUL) << 24) | \ + (((gctUINT32)(x) & (gctUINT32)0x0000FF00UL) << 8) | \ + (((gctUINT32)(x) & (gctUINT32)0x00FF0000UL) >> 8) | \ + (((gctUINT32)(x) & (gctUINT32)0xFF000000UL) >> 24))) +#else +#define BIG_ENDIAN_TRANS_INT(x) x +#endif + +/* Write a data value. */ +#define gcmWRITE_VALUE(IntData) \ + do \ + { \ + gceSTATUS status; \ + gctINT32 value = IntData; \ + value = BIG_ENDIAN_TRANS_INT(value); \ + gcmERR_BREAK(gcoPROFILER_Write(Profiler, gcmSIZEOF(value), &value)); \ + } \ + while (gcvFALSE) + +#define gcmWRITE_CONST(Const) \ + do \ + { \ + gceSTATUS status; \ + gctINT32 data = Const; \ + data = BIG_ENDIAN_TRANS_INT(data); \ + gcmERR_BREAK(gcoPROFILER_Write(Profiler, gcmSIZEOF(data), &data)); \ + } \ + while (gcvFALSE) + +#define gcmWRITE_COUNTER(Counter, Value) \ + gcmWRITE_CONST(Counter); \ + gcmWRITE_VALUE(Value) + +/* Write a string value (char*). */ +#define gcmWRITE_STRING(String) \ + do \ + { \ + gceSTATUS status; \ + gctINT32 length; \ + length = (gctINT32) gcoOS_StrLen((gctSTRING)String, gcvNULL); \ + length = BIG_ENDIAN_TRANS_INT(length); \ + gcmERR_BREAK(gcoPROFILER_Write(Profiler, gcmSIZEOF(length), &length)); \ + gcmERR_BREAK(gcoPROFILER_Write(Profiler, length, String)); \ + } \ + while (gcvFALSE) + +#define gcmWRITE_BUFFER(Size, Buffer) \ + do \ + { \ + gceSTATUS status; \ + gcmERR_BREAK(gcoPROFILER_Write(Profiler, Size, Buffer)); \ + } \ + while (gcvFALSE) + +#define gcmGET_COUNTER(counter, counterId) \ + do \ + { \ + if ((gctUINT32)*(memory + counterId + offset) == 0xdeaddead) \ + { \ + counter = 0xdeaddead; \ + } \ + else \ + { \ + gctUINT64_PTR Memory = memory; \ + Memory += TOTAL_PROBE_NUMBER * CoreId; \ + counter = (gctUINT32)*(Memory + counterId + offset); \ + } \ + } \ + while (gcvFALSE) + +#define gcmGET_LATENCY_COUNTER(minLatency, maxLatency, counterId) \ + do \ + { \ + if ((gctUINT32)*(memory + counterId + offset) == 0xdeaddead) \ + { \ + minLatency = maxLatency = 0xdeaddead; \ + } \ + else \ + { \ + gctUINT64_PTR Memory = memory; \ + Memory += TOTAL_PROBE_NUMBER * CoreId; \ + maxLatency = (((gctUINT32)*(Memory + counterId + offset) & 0xfff000) >> 12); \ + minLatency = ((gctUINT32)*(Memory + counterId + offset) & 0x000fff); \ + if (minLatency == 4095) \ + minLatency = 0; \ + } \ + } \ + while (gcvFALSE) + typedef enum _gceCOUNTER { gcvCOUNTER_FRONT_END, @@ -677,9 +777,20 @@ typedef enum _gceCOUNTER } gceCOUNTER; +typedef enum _gceProfilerClient +{ + gcvCLIENT_OPENGLES11 = 1, + gcvCLIENT_OPENGLES, + gcvCLIENT_OPENGL, + gcvCLIENT_OPENVG, + gcvCLIENT_OPENCL, + gcvCLIENT_OPENVX, + gcvCLIENT_OPENVK, +} +gceProfilerClient; /* HW profile information. */ -typedef struct _gcsPROFILER_NEW_COUNTERS_PART1 +typedef struct _gcsPROFILER_COUNTERS_PART1 { gctUINT32 gpuTotalRead64BytesPerFrame; gctUINT32 gpuTotalWrite64BytesPerFrame; @@ -785,9 +896,9 @@ typedef struct _gcsPROFILER_NEW_COUNTERS_PART1 gctUINT32 tx_stall_count; gctUINT32 tx_process_count; } -gcsPROFILER_NEW_COUNTERS_PART1; +gcsPROFILER_COUNTERS_PART1; -typedef struct _gcsPROFILER_NEW_COUNTERS_PART2 +typedef struct _gcsPROFILER_COUNTERS_PART2 { /* MCC */ gctUINT32 mcc_total_read_req_8B_from_colorpipe; @@ -808,6 +919,15 @@ typedef struct _gcsPROFILER_NEW_COUNTERS_PART2 gctUINT32 mcc_axi_sample_count; gctUINT32 mcc_axi_max_latency; gctUINT32 mcc_axi_min_latency; + gctUINT32 mc_fe_read_bandwidth; + gctUINT32 mc_mmu_read_bandwidth; + gctUINT32 mc_blt_read_bandwidth; + gctUINT32 mc_sh0_read_bandwidth; + gctUINT32 mc_sh1_read_bandwidth; + gctUINT32 mc_pe_write_bandwidth; + gctUINT32 mc_blt_write_bandwidth; + gctUINT32 mc_sh0_write_bandwidth; + gctUINT32 mc_sh1_write_bandwidth; /* MCZ */ gctUINT32 mcz_total_read_req_8B_from_colorpipe; @@ -869,134 +989,16 @@ typedef struct _gcsPROFILER_NEW_COUNTERS_PART2 gctUINT32 l2_axi1_total_latency; gctUINT32 l2_axi1_total_request_count; } -gcsPROFILER_NEW_COUNTERS_PART2; - -typedef struct _gcsPROFILER_NEW_COUNTERS -{ - gctUINT32 drawID; - gcsPROFILER_NEW_COUNTERS_PART1 counters_part1; - gcsPROFILER_NEW_COUNTERS_PART2 counters_part2; -} -gcsPROFILER_NEW_COUNTERS; +gcsPROFILER_COUNTERS_PART2; typedef struct _gcsPROFILER_COUNTERS { - /* HW static counters. */ - gctUINT32 gpuClock; - gctUINT32 axiClock; - gctUINT32 shaderClock; - - /* HW vairable counters. */ - gctUINT32 gpuClockStart; - gctUINT32 gpuClockEnd; - - /* HW vairable counters. */ - gctUINT32 gpuCyclesCounter; - gctUINT32 gpuTotalCyclesCounter; - gctUINT32 gpuIdleCyclesCounter; - gctUINT32 gpuTotalRead64BytesPerFrame; - gctUINT32 gpuTotalWrite64BytesPerFrame; - - /* PE */ - gctUINT32 pe_pixel_count_killed_by_color_pipe; - gctUINT32 pe_pixel_count_killed_by_depth_pipe; - gctUINT32 pe_pixel_count_drawn_by_color_pipe; - gctUINT32 pe_pixel_count_drawn_by_depth_pipe; - - /* SH */ - gctUINT32 ps_inst_counter; - gctUINT32 rendered_pixel_counter; - gctUINT32 vs_inst_counter; - gctUINT32 rendered_vertice_counter; - gctUINT32 vtx_branch_inst_counter; - gctUINT32 vtx_texld_inst_counter; - gctUINT32 pxl_branch_inst_counter; - gctUINT32 pxl_texld_inst_counter; - gctUINT32 vs_non_idle_starve_count; - gctUINT32 vs_starve_count; - gctUINT32 vs_stall_count; - gctUINT32 vs_process_count; - gctUINT32 ps_non_idle_starve_count; - gctUINT32 ps_starve_count; - gctUINT32 ps_stall_count; - gctUINT32 ps_process_count; - gctUINT32 shader_cycle_count; - - /* PA */ - gctUINT32 pa_input_vtx_counter; - gctUINT32 pa_input_prim_counter; - gctUINT32 pa_output_prim_counter; - gctUINT32 pa_depth_clipped_counter; - gctUINT32 pa_trivial_rejected_counter; - gctUINT32 pa_culled_counter; - gctUINT32 pa_non_idle_starve_count; - gctUINT32 pa_starve_count; - gctUINT32 pa_stall_count; - gctUINT32 pa_process_count; - - /* SE */ - gctUINT32 se_culled_triangle_count; - gctUINT32 se_culled_lines_count; - gctUINT32 se_starve_count; - gctUINT32 se_stall_count; - gctUINT32 se_receive_triangle_count; - gctUINT32 se_send_triangle_count; - gctUINT32 se_receive_lines_count; - gctUINT32 se_send_lines_count; - gctUINT32 se_process_count; - gctUINT32 se_non_idle_starve_count; - - /* RA */ - gctUINT32 ra_valid_pixel_count; - gctUINT32 ra_total_quad_count; - gctUINT32 ra_valid_quad_count_after_early_z; - gctUINT32 ra_total_primitive_count; - gctUINT32 ra_pipe_cache_miss_counter; - gctUINT32 ra_prefetch_cache_miss_counter; - gctUINT32 ra_eez_culled_counter; - gctUINT32 ra_non_idle_starve_count; - gctUINT32 ra_starve_count; - gctUINT32 ra_stall_count; - gctUINT32 ra_process_count; - - /* TX */ - gctUINT32 tx_total_bilinear_requests; - gctUINT32 tx_total_trilinear_requests; - gctUINT32 tx_total_discarded_texture_requests; - gctUINT32 tx_total_texture_requests; - gctUINT32 tx_mem_read_count; - gctUINT32 tx_mem_read_in_8B_count; - gctUINT32 tx_cache_miss_count; - gctUINT32 tx_cache_hit_texel_count; - gctUINT32 tx_cache_miss_texel_count; - gctUINT32 tx_non_idle_starve_count; - gctUINT32 tx_starve_count; - gctUINT32 tx_stall_count; - gctUINT32 tx_process_count; - - /* MC */ - gctUINT32 mc_total_read_req_8B_from_pipeline; - gctUINT32 mc_total_read_req_8B_from_IP; - gctUINT32 mc_total_write_req_8B_from_pipeline; - gctUINT32 mc_axi_total_latency; - gctUINT32 mc_axi_sample_count; - gctUINT32 mc_axi_max_latency; - gctUINT32 mc_axi_min_latency; - - /* HI */ - gctUINT32 hi_axi_cycles_read_request_stalled; - gctUINT32 hi_axi_cycles_write_request_stalled; - gctUINT32 hi_axi_cycles_write_data_stalled; - - /* FE */ - gctUINT32 fe_draw_count; - gctUINT32 fe_out_vertex_count; - gctUINT32 fe_stall_count; - gctUINT32 fe_starve_count; + gcsPROFILER_COUNTERS_PART1 counters_part1; + gcsPROFILER_COUNTERS_PART2 counters_part2; } gcsPROFILER_COUNTERS; -#define NumOfDrawBuf 1024 +#define NumOfDrawBuf 128 typedef enum _gceCOUNTER_OPTYPE { @@ -1005,24 +1007,18 @@ typedef enum _gceCOUNTER_OPTYPE gcvCOUNTER_OP_COMPUTE = 2, gcvCOUNTER_OP_RS = 3, gcvCOUNTER_OP_FINISH = 4, - gcvCOUNTER_OP_NONE = 5 + gcvCOUNTER_OP_FRAME = 5, + gcvCOUNTER_OP_NONE = 6 } gceCOUNTER_OPTYPE; -typedef struct _gcsPROBEBUFFER -{ - gctHANDLE newCounterBuf[NumOfDrawBuf]; - gctUINT32 curBufId; - gceCOUNTER_OPTYPE opType[NumOfDrawBuf]; -} -gcsPROBEBUFFER; - typedef struct _gcsCounterBuffer { - gcsPROFILER_NEW_COUNTERS counters; + gcsPROFILER_COUNTERS *counters; gctHANDLE couterBufobj; gctUINT32 probeAddress; gceCOUNTER_OPTYPE opType; + gctUINT32 opID; } gcsCounterBuffer; @@ -1031,17 +1027,23 @@ typedef struct _gcoPROFILER * gcoPROFILER; struct _gcoPROFILER { gctBOOL enable; - gctBOOL isSyncMode; + gctBOOL enablePrint; + gctBOOL disableProbe; + gctBOOL probeMode; gctFILE file; gctCHAR* fileName; gcsCounterBuffer counterBuf[NumOfDrawBuf]; + gcsPROFILER_COUNTERS *preCounters; gctINT32 curBufId; gctBOOL perDrawMode; gctBOOL needDump; gctBOOL counterEnable; + + gceProfilerClient profilerClient; + gctUINT32 coreCount; }; typedef enum _gceProbeStatus @@ -1067,231 +1069,51 @@ typedef struct _gcsPROBESTATES gctUINT32 probeAddress; }gcsPROBESTATES; -/* HAL profile information. */ -typedef struct _gcsPROFILER -{ - gctUINT32 enable; - gctBOOL enableHal; - gctBOOL enableHW; - gctBOOL enableSH; - gctBOOL isSyncMode; - gctBOOL isCLMode; - gctBOOL enablePrint; - gctBOOL disableOutputCounter; - - gctBOOL useSocket; - gctINT sockFd; - - gctFILE file; - - /* Aggregate Information */ - - /* Clock Info */ - gctUINT64 frameStart; - gctUINT64 frameEnd; - - /* Current frame information */ - gctUINT32 frameNumber; - gctUINT64 frameStartTimeusec; - gctUINT64 frameEndTimeusec; - gctUINT64 frameStartCPUTimeusec; - gctUINT64 frameEndCPUTimeusec; - -#if PROFILE_HAL_COUNTERS - gctUINT32 vertexBufferTotalBytesAlloc; - gctUINT32 vertexBufferNewBytesAlloc; - int vertexBufferTotalObjectsAlloc; - int vertexBufferNewObjectsAlloc; - - gctUINT32 indexBufferTotalBytesAlloc; - gctUINT32 indexBufferNewBytesAlloc; - int indexBufferTotalObjectsAlloc; - int indexBufferNewObjectsAlloc; - - gctUINT32 textureBufferTotalBytesAlloc; - gctUINT32 textureBufferNewBytesAlloc; - int textureBufferTotalObjectsAlloc; - int textureBufferNewObjectsAlloc; - - gctUINT32 numCommits; - gctUINT32 drawPointCount; - gctUINT32 drawLineCount; - gctUINT32 drawTriangleCount; - gctUINT32 drawVertexCount; - gctUINT32 redundantStateChangeCalls; -#endif -} -gcsPROFILER; - -/* Memory profile information. */ -struct _gcsMemProfile -{ - /* Memory Usage */ - gctUINT32 videoMemUsed; - gctUINT32 systemMemUsed; - gctUINT32 commitBufferSize; - gctUINT32 contextBufferCopyBytes; -}; - -/* Shader profile information. */ -struct _gcsSHADER_PROFILER -{ - gctUINT32 shaderLength; - gctUINT32 shaderALUCycles; - gctUINT32 shaderTexLoadCycles; - gctUINT32 shaderTempRegCount; - gctUINT32 shaderSamplerRegCount; - gctUINT32 shaderInputRegCount; - gctUINT32 shaderOutputRegCount; -}; - /* Construct a Profiler object per context. */ gceSTATUS -gcoPROFILER_NEW_Construct( +gcoPROFILER_Construct( OUT gcoPROFILER * Profiler ); gceSTATUS -gcoPROFILER_NEW_Destroy( +gcoPROFILER_Destroy( IN gcoPROFILER Profiler ); gceSTATUS -gcoPROFILER_NEW_Enable( +gcoPROFILER_Enable( IN gcoPROFILER Profiler ); gceSTATUS -gcoPROFILER_NEW_Disable( +gcoPROFILER_Disable( void -); - -gceSTATUS -gcoPROFILER_NEW_Begin( - IN gcoPROFILER Profiler, - IN gceCOUNTER_OPTYPE operationType - ); - -gceSTATUS -gcoPROFILER_NEW_End( - IN gcoPROFILER Profiler, - IN gctUINT32 DrawID, - IN gceCOUNTER_OPTYPE Type - ); - -gceSTATUS -gcoPROFILER_NEW_EndFrame( - IN gcoPROFILER Profiler, - IN gceCOUNTER_OPTYPE Type - ); - -gceSTATUS -gcoPROFILER_NEW_RecordCounters( - IN gctPOINTER Logical, - OUT gcsPROFILER_NEW_COUNTERS * Counters - ); - -gceSTATUS -gcoPROFILER_NEW_WriteCounters( - IN gcoPROFILER Profiler, - IN gcsPROFILER_NEW_COUNTERS Counters, - IN gceCOUNTER_OPTYPE opType - ); - -gceSTATUS -gcoPROFILER_NEW_Write( - IN gcoPROFILER Profiler, - IN gctSIZE_T ByteCount, - IN gctCONST_POINTER Data ); gceSTATUS -gcoPROFILER_NEW_GetPos( +gcoPROFILER_Begin( IN gcoPROFILER Profiler, - OUT gctUINT32 * Position + IN gceCOUNTER_OPTYPE operationType ); gceSTATUS -gcoPROFILER_NEW_Seek( +gcoPROFILER_End( IN gcoPROFILER Profiler, - IN gctUINT32 Offset, - IN gceFILE_WHENCE Whence + IN gceCOUNTER_OPTYPE operationType, + IN gctUINT32 OpID ); -gceSTATUS -gcoPROFILER_NEW_Flush( - IN gcoPROFILER Profiler - ); - -/* Initialize the gcsProfiler. */ -gceSTATUS -gcoPROFILER_Initialize( - IN gcoHAL Hal, - IN gco3D Engine, - IN gctBOOL Enable - ); - -/* Destroy the gcProfiler. */ -gceSTATUS -gcoPROFILER_Destroy( - IN gcoHAL Hal - ); - -/* Write data to profiler. */ gceSTATUS gcoPROFILER_Write( - IN gcoHAL Hal, + IN gcoPROFILER Profiler, IN gctSIZE_T ByteCount, IN gctCONST_POINTER Data ); -/* Flush data out. */ gceSTATUS gcoPROFILER_Flush( - IN gcoHAL Hal - ); - -/* Call to signal end of frame. */ -gceSTATUS -gcoPROFILER_EndFrame( - IN gcoHAL Hal - ); - -gceSTATUS -gcoPROFILER_Begin( - IN gcoHAL Hal, - IN gceCOUNTER_OPTYPE operationType - ); - -/* Call to signal end of draw. */ -gceSTATUS -gcoPROFILER_End( - IN gcoHAL Hal, - IN gctBOOL FirstDraw - ); - -/* Increase profile counter Enum by Value. */ -gceSTATUS -gcoPROFILER_Count( - IN gcoHAL Hal, - IN gctUINT32 Enum, - IN gctINT Value - ); - -/* Profile input vertex shader. */ -gceSTATUS -gcoPROFILER_ShaderVS( - IN gcoHAL Hal, - IN gctPOINTER Vs - ); - -/* Profile input fragment shader. */ -gceSTATUS -gcoPROFILER_ShaderFS( - IN gcoHAL Hal, - IN gctPOINTER Fs + IN gcoPROFILER Profiler ); - #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 f5237cbb935e..e9c02f9452ca 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 3 +#define gcvVERSION_PATCH 4 -#define gcvVERSION_BUILD 129602 +#define gcvVERSION_BUILD 136949 -#define gcvVERSION_STRING "6.2.3.129602" +#define gcvVERSION_STRING "6.2.4.pre6.136949" #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 5914d159c030..aa6ad711e1e9 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 @@ -467,6 +467,7 @@ gckVGHARDWARE_QueryChipIdentity( OUT gctUINT32* ChipRevision, OUT gctUINT32* ProductID, OUT gctUINT32* EcoID, + OUT gctUINT32* CustomerID, OUT gctUINT32* ChipFeatures, OUT gctUINT32* ChipMinorFeatures, OUT gctUINT32* ChipMinorFeatures1 diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dma.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dma.c index 8d456e98d212..fd5721ee49c6 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 @@ -216,6 +216,71 @@ OnError: return status; } +static gceSTATUS +_DmaGetSGT( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctSIZE_T Offset, + IN gctSIZE_T Bytes, + OUT gctPOINTER *SGT + ) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0) + struct page ** pages = gcvNULL; + struct page * page = gcvNULL; + struct sg_table *sgt = NULL; + struct mdl_dma_priv *mdlPriv = (struct mdl_dma_priv*)Mdl->priv; + + gceSTATUS status = gcvSTATUS_OK; + gctSIZE_T offset = Offset & ~PAGE_MASK; /* Offset to the first page */ + gctINT skipPages = Offset >> PAGE_SHIFT; /* skipped pages */ + gctINT numPages = (PAGE_ALIGN(Offset + Bytes) >> PAGE_SHIFT) - skipPages; + gctINT i; + + gcmkASSERT(Offset + Bytes <= Mdl->numPages << PAGE_SHIFT); + + sgt = kmalloc(sizeof(struct sg_table), GFP_KERNEL | gcdNOWARN); + if (!sgt) + { + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + + pages = kmalloc(sizeof(struct page*) * numPages, GFP_KERNEL | gcdNOWARN); + if (!pages) + { + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + + page = virt_to_page(mdlPriv->kvaddr); + for (i = 0; i < numPages; ++i) + { + pages[i] = nth_page(page, i + skipPages); + } + + if (sg_alloc_table_from_pages(sgt, pages, numPages, offset, Bytes, GFP_KERNEL) < 0) + { + gcmkONERROR(gcvSTATUS_GENERIC_IO); + } + + *SGT = (gctPOINTER)sgt; + +OnError: + if (pages) + { + kfree(pages); + } + + if (gcmIS_ERROR(status) && sgt) + { + kfree(sgt); + } + + return status; +#else + return gcvSTATUS_NOT_SUPPORTED; +#endif +} + static void _DmaFree( IN gckALLOCATOR Allocator, @@ -240,113 +305,50 @@ _DmaFree( atomic_sub(Mdl->numPages, &allocatorPriv->usage); } -static gctINT -_DmaMapUser( - gckALLOCATOR Allocator, - PLINUX_MDL Mdl, - gctBOOL Cacheable, - OUT gctPOINTER * UserLogical +static gceSTATUS +_DmaMmap( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctSIZE_T skipPages, + IN gctSIZE_T numPages, + INOUT struct vm_area_struct *vma ) { + struct mdl_dma_priv *mdlPriv = (struct mdl_dma_priv*)Mdl->priv; + gceSTATUS status = gcvSTATUS_OK; - PLINUX_MDL mdl = Mdl; - struct mdl_dma_priv *mdlPriv=(struct mdl_dma_priv *)Mdl->priv; - struct vm_area_struct * vma; - gctPOINTER userLogical = gcvNULL; - - gcmkHEADER_ARG("Allocator=%p Mdl=%p Cacheable=%d", Allocator, Mdl, Cacheable); - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0) - userLogical = (gctSTRING)vm_mmap(gcvNULL, - 0L, - mdl->numPages * PAGE_SIZE, - PROT_READ | PROT_WRITE, - MAP_SHARED, - 0); -#else - down_write(¤t->mm->mmap_sem); - - userLogical = (gctSTRING)do_mmap_pgoff(gcvNULL, - 0L, - mdl->numPages * PAGE_SIZE, - PROT_READ | PROT_WRITE, - MAP_SHARED, - 0); - - up_write(¤t->mm->mmap_sem); -#endif - - gcmkTRACE_ZONE( - gcvLEVEL_INFO, gcvZONE_OS, - "%s(%d): vmaAddr->%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__ - ); - - gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY); - return gcvSTATUS_OUT_OF_MEMORY; - } - - down_write(¤t->mm->mmap_sem); + gcmkHEADER_ARG("Allocator=%p Mdl=%p vma=%p", Allocator, Mdl, vma); - 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; - } + gcmkASSERT(skipPages + numPages <= Mdl->numPages); /* map kernel memory to user space.. */ #if defined CONFIG_MIPS || defined CONFIG_CPU_CSKYV2 || defined CONFIG_PPC if (remap_pfn_range( vma, vma->vm_start, - mdlPriv->dmaHandle >> PAGE_SHIFT, - mdl->numPages * PAGE_SIZE, + (mdlPriv->dmaHandle >> PAGE_SHIFT) + skipPages, + numPages << PAGE_SHIFT, gcmkNONPAGED_MEMROY_PROT(vma->vm_page_prot)) < 0) #else /* map kernel memory to user space.. */ if (dma_mmap_writecombine(gcvNULL, vma, - mdlPriv->kvaddr, - mdlPriv->dmaHandle, - mdl->numPages * PAGE_SIZE) < 0) + (gctINT8_PTR)mdlPriv->kvaddr + (skipPages << PAGE_SHIFT), + mdlPriv->dmaHandle + (skipPages << PAGE_SHIFT), + numPages << PAGE_SHIFT) < 0) #endif { - up_write(¤t->mm->mmap_sem); - gcmkTRACE_ZONE( gcvLEVEL_WARNING, gcvZONE_OS, "%s(%d): dma_mmap_attrs error", __FUNCTION__, __LINE__ ); - gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY); - return gcvSTATUS_OUT_OF_MEMORY; + status = gcvSTATUS_OUT_OF_MEMORY; } - up_write(¤t->mm->mmap_sem); - - *UserLogical = userLogical; - - gcmkFOOTER_NO(); - return gcvSTATUS_OK; + gcmkFOOTER(); + return status; } static void @@ -386,6 +388,87 @@ _DmaUnmapUser( #endif } +static gceSTATUS +_DmaMapUser( + gckALLOCATOR Allocator, + PLINUX_MDL Mdl, + gctBOOL Cacheable, + OUT gctPOINTER * UserLogical + ) +{ + gctPOINTER userLogical = gcvNULL; + gceSTATUS status = gcvSTATUS_OK; + + gcmkHEADER_ARG("Allocator=%p Mdl=%p Cacheable=%d", Allocator, Mdl, Cacheable); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0) + userLogical = (gctPOINTER)vm_mmap(gcvNULL, + 0L, + Mdl->numPages * PAGE_SIZE, + PROT_READ | PROT_WRITE, + MAP_SHARED, + 0); +#else + down_write(¤t->mm->mmap_sem); + userLogical = (gctPOINTER)do_mmap_pgoff(gcvNULL, + 0L, + Mdl->numPages * PAGE_SIZE, + PROT_READ | PROT_WRITE, + MAP_SHARED, + 0); + up_write(¤t->mm->mmap_sem); +#endif + + gcmkTRACE_ZONE( + gcvLEVEL_INFO, gcvZONE_OS, + "%s(%d): vmaAddr->%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__ + ); + + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + + down_write(¤t->mm->mmap_sem); + do + { + struct vm_area_struct *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__ + ); + + gcmkERR_BREAK(gcvSTATUS_OUT_OF_RESOURCES); + } + + gcmkERR_BREAK(_DmaMmap(Allocator, Mdl, 0, Mdl->numPages, vma)); + + *UserLogical = userLogical; + } + while (gcvFALSE); + up_write(¤t->mm->mmap_sem); + +OnError: + if (gcmIS_ERROR(status)) + { + _DmaUnmapUser(Allocator, Mdl, userLogical, Mdl->numPages * PAGE_SIZE); + } + gcmkFOOTER(); + return status; +} + static gceSTATUS _DmaMapKernel( IN gckALLOCATOR Allocator, @@ -455,12 +538,14 @@ _DmaAllocatorDestructor( gcsALLOCATOR_OPERATIONS DmaAllocatorOperations = { .Alloc = _DmaAlloc, .Free = _DmaFree, + .Mmap = _DmaMmap, .MapUser = _DmaMapUser, .UnmapUser = _DmaUnmapUser, .MapKernel = _DmaMapKernel, .UnmapKernel = _DmaUnmapKernel, .Cache = _DmaCache, .Physical = _DmaPhysical, + .GetSGT = _DmaGetSGT, }; /* Default allocator entry. */ 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 7eb2a84d4b40..49f0a30217ff 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 @@ -76,7 +76,6 @@ typedef struct _gcsDMABUF struct dma_buf_attachment * attachment; struct sg_table * sgtable; unsigned long * pagearray; - int fd; int npages; int pid; @@ -132,9 +131,9 @@ static int dma_buf_info_show(struct seq_file* m, void* data) exp_name = "unknown"; #endif - seq_printf(m, "%6d %6d %8d %8zu %10s", + seq_printf(m, "%6d %p %8d %8zu %10s", buf_desc->pid, - buf_desc->fd, + buf_desc->dmabuf, buf_desc->npages, buf_obj->size, exp_name); @@ -204,9 +203,7 @@ _DmabufAttach( gckOS os = Allocator->os; - int fd = (int) Desc->dmaBuf.fd; - - struct dma_buf *dmabuf = NULL; + struct dma_buf *dmabuf = Desc->dmaBuf.dmabuf; struct sg_table *sgt = NULL; struct dma_buf_attachment *attachment = NULL; int npages = 0; @@ -220,14 +217,12 @@ _DmabufAttach( gcmkVERIFY_OBJECT(os, gcvOBJ_OS); - /* Import dma buf handle. */ - dmabuf = dma_buf_get(fd); - if (!dmabuf) { gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); } + get_dma_buf(dmabuf); attachment = dma_buf_attach(dmabuf, &os->device->platform->device->dev); if (!attachment) @@ -264,7 +259,6 @@ _DmabufAttach( /* Prepare descriptor. */ gcmkONERROR(gckOS_Allocate(os, sizeof(gcsDMABUF), (gctPOINTER *)&buf_desc)); - buf_desc->fd = fd; buf_desc->dmabuf = dmabuf; buf_desc->pagearray = pagearray; buf_desc->attachment = attachment; @@ -324,7 +318,28 @@ _DmabufFree( gckOS_Free(os, buf_desc); } -static gctINT +static void +_DmabufUnmapUser( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctPOINTER Logical, + IN gctUINT32 Size + ) +{ + gcsDMABUF *buf_desc = Mdl->priv; + gctINT8_PTR userLogical = Logical; + + if (unlikely(current->mm == gcvNULL)) + { + /* Do nothing if process is exiting. */ + return; + } + + userLogical -= buf_desc->sgtable->sgl->offset; + vm_munmap((unsigned long)userLogical, Mdl->numPages >> PAGE_SHIFT); +} + +static gceSTATUS _DmabufMapUser( IN gckALLOCATOR Allocator, IN PLINUX_MDL Mdl, @@ -333,52 +348,39 @@ _DmabufMapUser( ) { gcsDMABUF *buf_desc = Mdl->priv; - gceSTATUS status; - PLINUX_MDL mdl = Mdl; - struct file * file = buf_desc->dmabuf->file; + gctINT8_PTR userLogical = gcvNULL; + gceSTATUS status = gcvSTATUS_OK; - *UserLogical = (gctSTRING)vm_mmap(file, + userLogical = (gctINT8_PTR)vm_mmap(buf_desc->dmabuf->file, 0L, - mdl->numPages * PAGE_SIZE, + Mdl->numPages << PAGE_SHIFT, PROT_READ | PROT_WRITE, MAP_SHARED, 0); - if (IS_ERR(*UserLogical)) + if (IS_ERR(userLogical)) { gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES); } + userLogical += buf_desc->sgtable->sgl->offset; /* To make sure the mapping is created. */ - if (access_ok(VERIFY_READ, *UserLogical, 4)) + if (access_ok(VERIFY_READ, userLogical, 4)) { uint32_t mem; - get_user(mem, (uint32_t *) *UserLogical); + get_user(mem, (uint32_t *)userLogical); - (void) mem; + (void)mem; } - return gcvSTATUS_OK; + *UserLogical = (gctPOINTER)userLogical; OnError: - return status; -} - -static void -_DmabufUnmapUser( - IN gckALLOCATOR Allocator, - IN PLINUX_MDL Mdl, - IN gctPOINTER Logical, - IN gctUINT32 Size - ) -{ - if (unlikely(current->mm == gcvNULL)) + if (gcmIS_ERROR(status)) { - /* Do nothing if process is exiting. */ - return; + _DmabufUnmapUser(Allocator, Mdl, *UserLogical, Mdl->numPages >> PAGE_SHIFT); } - - vm_munmap((unsigned long)Logical, Size); + return status; } static gceSTATUS 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 index 7242e20fb223..cdf267e840df 100644 --- 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 @@ -260,80 +260,6 @@ _NonContiguousAlloc( 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 ********************************** \***************************************************************************/ @@ -507,6 +433,77 @@ OnError: return status; } +static gceSTATUS +_GFPGetSGT( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctSIZE_T Offset, + IN gctSIZE_T Bytes, + OUT gctPOINTER *SGT + ) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0) + struct page ** pages = gcvNULL; + struct page ** tmpPages = gcvNULL; + struct sg_table *sgt = NULL; + struct gfp_mdl_priv *mdlPriv = (struct gfp_mdl_priv*)Mdl->priv; + + gceSTATUS status = gcvSTATUS_OK; + gctSIZE_T offset = Offset & ~PAGE_MASK; /* Offset to the first page */ + gctINT skipPages = Offset >> PAGE_SHIFT; /* skipped pages */ + gctINT numPages = (PAGE_ALIGN(Offset + Bytes) >> PAGE_SHIFT) - skipPages; + gctINT i; + + gcmkASSERT(Offset + Bytes <= Mdl->numPages << PAGE_SHIFT); + + if (Mdl->contiguous) + { + pages = tmpPages = kmalloc(sizeof(struct page*) * numPages, GFP_KERNEL | gcdNOWARN); + if (!pages) + { + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + + for (i = 0; i < numPages; ++i) + { + pages[i] = nth_page(mdlPriv->contiguousPages, i + skipPages); + } + } + else + { + pages = &mdlPriv->nonContiguousPages[skipPages]; + } + + sgt = kmalloc(sizeof(struct sg_table), GFP_KERNEL | gcdNOWARN); + if (!sgt) + { + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + + if (sg_alloc_table_from_pages(sgt, pages, numPages, offset, Bytes, GFP_KERNEL) < 0) + { + gcmkONERROR(gcvSTATUS_GENERIC_IO); + } + + *SGT = (gctPOINTER)sgt; + +OnError: + if (tmpPages) + { + kfree(tmpPages); + } + + if (gcmIS_ERROR(status) && sgt) + { + kfree(sgt); + } + + return status; +#else + return gcvSTATUS_NOT_SUPPORTED; +#endif +} + static void _GFPFree( IN gckALLOCATOR Allocator, @@ -578,7 +575,128 @@ _GFPFree( gcmkOS_SAFE_FREE(Allocator->os, Mdl->priv); } -static gctINT +static gceSTATUS +_GFPMmap( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctSIZE_T skipPages, + IN gctSIZE_T numPages, + INOUT struct vm_area_struct *vma + ) +{ + struct gfp_mdl_priv *mdlPriv = (struct gfp_mdl_priv*)Mdl->priv; + gcsPLATFORM *platform = mdlPriv->platform; + gceSTATUS status = gcvSTATUS_OK; + + gcmkHEADER_ARG("Allocator=%p Mdl=%p vma=%p", Allocator, Mdl, 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); + } + + gcmkASSERT(skipPages + numPages <= Mdl->numPages); + + /* 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) + skipPages, + numPages << PAGE_SHIFT, + vma->vm_page_prot) < 0) + { + gcmkTRACE_ZONE( + gcvLEVEL_INFO, gcvZONE_OS, + "%s(%d): remap_pfn_range error.", + __FUNCTION__, __LINE__ + ); + + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + } + else + { + gctUINT i; + unsigned long start = vma->vm_start; + + for (i = 0; i < numPages; ++i) + { + unsigned long pfn = page_to_pfn(mdlPriv->nonContiguousPages[i + skipPages]); + + if (remap_pfn_range(vma, + start, + pfn, + PAGE_SIZE, + vma->vm_page_prot) < 0) + { + gcmkTRACE( + gcvLEVEL_ERROR, + "%s(%d): remap_pfn_range error.", + __FUNCTION__, __LINE__ + ); + + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + + start += PAGE_SIZE; + } + } + +OnError: + gcmkFOOTER(); + return status; +} + +static void +_GFPUnmapUser( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctPOINTER Logical, + IN gctUINT32 Size + ) +{ + struct gfp_mdl_priv *mdlPriv = (struct gfp_mdl_priv*)Mdl->priv; + + mdlPriv->cacheable = gcvFALSE; + + 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 _GFPMapUser( gckALLOCATOR Allocator, PLINUX_MDL Mdl, @@ -586,35 +704,26 @@ _GFPMapUser( 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; + gctPOINTER userLogical = gcvNULL; + gceSTATUS status = gcvSTATUS_OK; 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, + userLogical = (gctPOINTER)vm_mmap(NULL, 0L, - mdl->numPages * PAGE_SIZE, + Mdl->numPages * PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, 0); #else down_write(¤t->mm->mmap_sem); - - userLogical = (void *)do_mmap_pgoff(NULL, + userLogical = (gctPOINTER)do_mmap_pgoff(NULL, 0L, - mdl->numPages * PAGE_SIZE, + Mdl->numPages * PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, 0); - up_write(¤t->mm->mmap_sem); #endif @@ -623,7 +732,7 @@ _GFPMapUser( "%s(%d): vmaAddr->%p for phys_addr->%p", __FUNCTION__, __LINE__, userLogical, - mdl + Mdl ); if (IS_ERR(userLogical)) @@ -636,89 +745,54 @@ _GFPMapUser( userLogical = gcvNULL; - gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY); - return gcvSTATUS_OUT_OF_MEMORY; + gcmkONERROR(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) + do { - up_write(¤t->mm->mmap_sem); - - gcmkTRACE_ZONE( - gcvLEVEL_INFO, gcvZONE_OS, - "%s(%d): find_vma error", - __FUNCTION__, __LINE__ - ); + struct gfp_mdl_priv *mdlPriv = (struct gfp_mdl_priv*)Mdl->priv; + struct vm_area_struct *vma = find_vma(current->mm, (unsigned long)userLogical); - gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_RESOURCES); - return gcvSTATUS_OUT_OF_RESOURCES; - } + if (vma == gcvNULL) + { + gcmkTRACE_ZONE( + gcvLEVEL_INFO, gcvZONE_OS, + "%s(%d): find_vma error", + __FUNCTION__, __LINE__ + ); - if (gcmIS_ERROR(gfp_mmap_internal(mdlPriv, vma))) - { - up_write(¤t->mm->mmap_sem); + gcmkERR_BREAK(gcvSTATUS_OUT_OF_RESOURCES); + } - gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY); - return gcvSTATUS_OUT_OF_MEMORY; + /* mdlPriv->cacheable must be used under protection of mdl->mapMutex. */ + mdlPriv->cacheable = Cacheable; + gcmkERR_BREAK(_GFPMmap(Allocator, Mdl, 0, Mdl->numPages, vma)); } - + while (gcvFALSE); 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)) + if (gcmIS_SUCCESS(status)) { - /* Do nothing if process is exiting. */ - return; - } + gcmkONERROR(gckOS_CacheFlush( + Allocator->os, + _GetProcessID(), + Mdl, + gcvINVALID_ADDRESS, + userLogical, + Mdl->numPages * PAGE_SIZE + )); -#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__ - ); + *UserLogical = userLogical; } -#else - down_write(¤t->mm->mmap_sem); - if (do_munmap(current->mm, (unsigned long)Logical, Size) < 0) + +OnError: + if (gcmIS_ERROR(status)) { - gcmkTRACE_ZONE( - gcvLEVEL_WARNING, gcvZONE_OS, - "%s(%d): do_munmap failed", - __FUNCTION__, __LINE__ - ); + _GFPUnmapUser(Allocator, Mdl, *UserLogical, Mdl->numPages * PAGE_SIZE); } - up_write(¤t->mm->mmap_sem); -#endif + gcmkFOOTER(); + return status; } static gceSTATUS @@ -865,12 +939,14 @@ _GFPAllocatorDestructor( static gcsALLOCATOR_OPERATIONS GFPAllocatorOperations = { .Alloc = _GFPAlloc, .Free = _GFPFree, + .Mmap = _GFPMmap, .MapUser = _GFPMapUser, .UnmapUser = _GFPUnmapUser, .MapKernel = _GFPMapKernel, .UnmapKernel = _GFPUnmapKernel, .Cache = _GFPCache, .Physical = _GFPPhysical, + .GetSGT = _GFPGetSGT, }; /* GFP allocator entry. */ 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 index d788df2545ac..3f378807eda4 100644 --- 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 @@ -212,27 +212,64 @@ reserved_mem_detach( kfree(res); } -static void -munmap_user(unsigned long vaddr, unsigned long size) +static gceSTATUS +reserved_mem_mmap( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctSIZE_T skipPages, + IN gctSIZE_T numPages, + INOUT struct vm_area_struct *vma + ) { - if (unlikely(!current->mm)) - return; + struct reserved_mem *res = (struct reserved_mem*)Mdl->priv; + unsigned long pfn; + gceSTATUS status = gcvSTATUS_OK; + + gcmkHEADER_ARG("Allocator=%p Mdl=%p vma=%p", Allocator, Mdl, vma); + + gcmkASSERT(skipPages + numPages <= Mdl->numPages); -#if defined(CONFIG_X86) - if (set_memory_wb(vaddr, size >> PAGE_SHIFT)) + pfn = (res->start >> PAGE_SHIFT) + skipPages; + + /* Make this mapping non-cached. */ + vma->vm_flags |= gcdVM_FLAGS; + vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); + + if (remap_pfn_range(vma, vma->vm_start, + pfn, numPages << PAGE_SHIFT, vma->vm_page_prot) < 0) { - printk("%s: failed to set_memory_wb\n", __func__); + gcmkTRACE( + gcvLEVEL_ERROR, + "%s(%d): remap_pfn_range error.", + __FUNCTION__, __LINE__ + ); + + status = gcvSTATUS_OUT_OF_MEMORY; } -#endif + + gcmkFOOTER(); + return status; +} + +static void +reserved_mem_unmap_user( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctPOINTER Logical, + IN gctUINT32 Size + ) +{ + if (unlikely(!current->mm)) + return; #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0) - if (vm_munmap(vaddr, size) < 0) + if (vm_munmap((unsigned long)Logical, (unsigned long)Size) < 0) { printk("%s: vm_munmap failed\n", __func__); } #else down_write(¤t->mm->mmap_sem); - if (do_munmap(current->mm, vaddr, size) < 0) + if (do_munmap(current->mm, (unsigned long)Logical, (unsigned long)Size) < 0) { printk("%s: do_munmap failed\n", __func__); } @@ -240,7 +277,7 @@ munmap_user(unsigned long vaddr, unsigned long size) #endif } -static gctINT +static gceSTATUS reserved_mem_map_user( gckALLOCATOR Allocator, PLINUX_MDL Mdl, @@ -248,87 +285,68 @@ reserved_mem_map_user( OUT gctPOINTER *UserLogical ) { - struct reserved_mem *res = Mdl->priv; - unsigned long vaddr; - struct vm_area_struct *vma; - unsigned int npages; - unsigned long pfn; + struct reserved_mem *res = (struct reserved_mem*)Mdl->priv; + gctPOINTER userLogical = gcvNULL; + gceSTATUS status = gcvSTATUS_OK; 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, + userLogical = (gctPOINTER)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, + userLogical = (gctPOINTER)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; - } + gcmkTRACE_ZONE( + gcvLEVEL_INFO, gcvZONE_OS, + "%s(%d): vmaAddr->%p for phys_addr->%p", + __FUNCTION__, __LINE__, userLogical, Mdl + ); - /* Remap here since there is no file and ops->mmap(). */ - down_write(¤t->mm->mmap_sem); - - vma = find_vma(current->mm, vaddr); - - if (!vma) + if (IS_ERR(userLogical)) { - up_write(¤t->mm->mmap_sem); + gcmkTRACE_ZONE( + gcvLEVEL_INFO, gcvZONE_OS, + "%s(%d): do_mmap_pgoff error", + __FUNCTION__, __LINE__ + ); - gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_RESOURCES); - return gcvSTATUS_OUT_OF_RESOURCES; + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); } - /* 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)) + down_write(¤t->mm->mmap_sem); + do { - printk("%s: failed to set_memory_wc\n", __func__); - } -#endif + struct vm_area_struct *vma = find_vma(current->mm, (unsigned long)userLogical); + if (vma == gcvNULL) + { + gcmkTRACE_ZONE( + gcvLEVEL_INFO, gcvZONE_OS, + "%s(%d): find_vma error", + __FUNCTION__, __LINE__ + ); - if (remap_pfn_range(vma, vma->vm_start, - pfn, res->size, vma->vm_page_prot) < 0) - { - up_write(¤t->mm->mmap_sem); + gcmkERR_BREAK(gcvSTATUS_OUT_OF_RESOURCES); + } - munmap_user(vaddr, res->size); + gcmkERR_BREAK(reserved_mem_mmap(Allocator, Mdl, 0, Mdl->numPages, vma)); - gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY); - return gcvSTATUS_OUT_OF_MEMORY; + *UserLogical = userLogical; } - + while (gcvFALSE); 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); +OnError: + if (gcmIS_ERROR(status)) + { + reserved_mem_unmap_user(Allocator, Mdl, *UserLogical, res->size); + } + gcmkFOOTER(); + return status; } static gceSTATUS @@ -420,6 +438,7 @@ static gcsALLOCATOR_OPERATIONS reserved_mem_ops = { .Alloc = NULL, .Attach = reserved_mem_attach, .Free = reserved_mem_detach, + .Mmap = reserved_mem_mmap, .MapUser = reserved_mem_map_user, .UnmapUser = reserved_mem_unmap_user, .MapKernel = reserved_mem_map_kernel, 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 ef5c8125ea1f..26a81b678c13 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 @@ -552,7 +552,7 @@ _UserMemoryFree( gcmkFOOTER_NO(); } -static gctINT +static gceSTATUS _UserMemoryMapUser( IN gckALLOCATOR Allocator, IN PLINUX_MDL Mdl, @@ -564,7 +564,7 @@ _UserMemoryMapUser( *UserLogical = (gctPOINTER)userMemory->user_vaddr; - return 0; + return gcvSTATUS_OK; } static void 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 9a17b8c8b9ef..b623ae1a250b 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 @@ -185,6 +185,71 @@ OnError: return status; } +static gceSTATUS +_CMAFSLGetSGT( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctSIZE_T Offset, + IN gctSIZE_T Bytes, + OUT gctPOINTER *SGT + ) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0) + struct page ** pages = gcvNULL; + struct page * page = gcvNULL; + struct sg_table *sgt = NULL; + struct mdl_cma_priv *mdl_priv = (struct mdl_cma_priv*)Mdl->priv; + + gceSTATUS status = gcvSTATUS_OK; + gctSIZE_T offset = Offset & ~PAGE_MASK; /* Offset to the first page */ + gctINT skipPages = Offset >> PAGE_SHIFT; /* skipped pages */ + gctINT numPages = (PAGE_ALIGN(Offset + Bytes) >> PAGE_SHIFT) - skipPages; + gctINT i; + + gcmkASSERT(Offset + Bytes <= Mdl->numPages << PAGE_SHIFT); + + sgt = kmalloc(sizeof(struct sg_table), GFP_KERNEL | gcdNOWARN); + if (!sgt) + { + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + + pages = kmalloc(sizeof(struct page*) * numPages, GFP_KERNEL | gcdNOWARN); + if (!pages) + { + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + + page = virt_to_page(mdl_priv->kvaddr); + for (i = 0; i < numPages; ++i) + { + pages[i] = nth_page(page, i + skipPages); + } + + if (sg_alloc_table_from_pages(sgt, pages, numPages, offset, Bytes, GFP_KERNEL) < 0) + { + gcmkONERROR(gcvSTATUS_GENERIC_IO); + } + + *SGT = (gctPOINTER)sgt; + +OnError: + if (pages) + { + kfree(pages); + } + + if (gcmIS_ERROR(status) && sgt) + { + kfree(sgt); + } + + return status; +#else + return gcvSTATUS_NOT_SUPPORTED; +#endif +} + static void _CMAFSLFree( IN gckALLOCATOR Allocator, @@ -192,134 +257,65 @@ _CMAFSLFree( ) { gckOS os = Allocator->os; - struct mdl_cma_priv *mdl_priv=(struct mdl_cma_priv *)Mdl->priv; + struct mdl_cma_priv *mdlPriv=(struct mdl_cma_priv *)Mdl->priv; gcsCMA_PRIV_PTR priv = (gcsCMA_PRIV_PTR)Allocator->privateData; dma_free_writecombine(&os->device->platform->device->dev, Mdl->numPages * PAGE_SIZE, - mdl_priv->kvaddr, - mdl_priv->physical); - gckOS_Free(os, mdl_priv); + mdlPriv->kvaddr, + mdlPriv->physical); + gckOS_Free(os, mdlPriv); atomic_sub(Mdl->numPages, &priv->cmasize); } -static gctINT -_CMAFSLMapUser( +static gceSTATUS +_CMAFSLMmap( IN gckALLOCATOR Allocator, IN PLINUX_MDL Mdl, - IN gctBOOL Cacheable, - OUT gctPOINTER * UserLogical + IN gctSIZE_T skipPages, + IN gctSIZE_T numPages, + INOUT struct vm_area_struct *vma ) { - 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 Cacheable=%d", Allocator, Mdl, Cacheable); - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0) - userLogical = (gctSTRING)vm_mmap(gcvNULL, - 0L, - mdl->numPages * PAGE_SIZE, - PROT_READ | PROT_WRITE, - MAP_SHARED | MAP_NORESERVE, - 0); -#else - down_write(¤t->mm->mmap_sem); - - userLogical = (gctSTRING)do_mmap_pgoff(gcvNULL, - 0L, - mdl->numPages * PAGE_SIZE, - PROT_READ | PROT_WRITE, - MAP_SHARED, - 0); - - up_write(¤t->mm->mmap_sem); -#endif - - gcmkTRACE_ZONE( - gcvLEVEL_INFO, gcvZONE_OS, - "%s(%d): vmaAddr->%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__ - ); - - gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY); - return gcvSTATUS_OUT_OF_MEMORY; - } - - down_write(¤t->mm->mmap_sem); - - vma = find_vma(current->mm, (unsigned long)userLogical); - - if (vma == gcvNULL) - { - up_write(¤t->mm->mmap_sem); + gckOS os = Allocator->os; + struct mdl_cma_priv *mdlPriv = (struct mdl_cma_priv*)Mdl->priv; + gceSTATUS status = gcvSTATUS_OK; - gcmkTRACE_ZONE( - gcvLEVEL_INFO, gcvZONE_OS, - "%s(%d): find_vma error", - __FUNCTION__, __LINE__ - ); + gcmkHEADER_ARG("Allocator=%p Mdl=%p vma=%p", Allocator, Mdl, vma); - gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_RESOURCES); - return gcvSTATUS_OUT_OF_RESOURCES; - } + gcmkASSERT(skipPages + numPages <= Mdl->numPages); /* Now map all the vmalloc pages to this user address. */ - if (mdl->contiguous) + if (Mdl->contiguous) { /* map kernel memory to user space.. */ if (dma_mmap_writecombine(&os->device->platform->device->dev, vma, - mdl_priv->kvaddr, - mdl_priv->physical, - mdl->numPages * PAGE_SIZE) < 0) + (gctINT8_PTR)mdlPriv->kvaddr + (skipPages << PAGE_SHIFT), + mdlPriv->physical + (skipPages << PAGE_SHIFT), + numPages << PAGE_SHIFT) < 0) { - up_write(¤t->mm->mmap_sem); - gcmkTRACE_ZONE( gcvLEVEL_WARNING, gcvZONE_OS, "%s(%d): dma_mmap_attrs error", __FUNCTION__, __LINE__ ); - gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY); - return gcvSTATUS_OUT_OF_MEMORY; + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); } } else { - gckOS_Print("incorrect mdl:conti%d\n",mdl->contiguous); + gcmkFATAL("%s(%d): unexpected noncontiguous mdl\n"); + gcmkONERROR(gcvSTATUS_HEAP_CORRUPTED); } - up_write(¤t->mm->mmap_sem); - - gcmkVERIFY_OK(gckOS_CacheFlush( - os, - _GetProcessID(), - mdl, - gcvINVALID_ADDRESS, - (gctPOINTER)userLogical, - mdl->numPages * PAGE_SIZE - )); - - *UserLogical = userLogical; - - gcmkFOOTER_NO(); - return gcvSTATUS_OK; +OnError: + gcmkFOOTER(); + return status; } static void -_CMAUnmapUser( +_CMAFSLUnmapUser( IN gckALLOCATOR Allocator, IN PLINUX_MDL Mdl, IN gctPOINTER Logical, @@ -355,6 +351,97 @@ _CMAUnmapUser( #endif } +static gceSTATUS +_CMAFSLMapUser( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctBOOL Cacheable, + OUT gctPOINTER * UserLogical + ) +{ + gctPOINTER userLogical = gcvNULL; + gceSTATUS status = gcvSTATUS_OK; + + gcmkHEADER_ARG("Allocator=%p Mdl=%p Cacheable=%d", Allocator, Mdl, Cacheable); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0) + userLogical = (gctPOINTER)vm_mmap(gcvNULL, + 0L, + Mdl->numPages * PAGE_SIZE, + PROT_READ | PROT_WRITE, + MAP_SHARED | MAP_NORESERVE, + 0); +#else + down_write(¤t->mm->mmap_sem); + userLogical = (gctPOINTER)do_mmap_pgoff(gcvNULL, + 0L, + Mdl->numPages * PAGE_SIZE, + PROT_READ | PROT_WRITE, + MAP_SHARED, + 0); + up_write(¤t->mm->mmap_sem); +#endif + + gcmkTRACE_ZONE( + gcvLEVEL_INFO, gcvZONE_OS, + "%s(%d): vmaAddr->%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__ + ); + + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + + down_write(¤t->mm->mmap_sem); + do + { + struct vm_area_struct *vma = find_vma(current->mm, (unsigned long)userLogical); + if (vma == gcvNULL) + { + gcmkTRACE_ZONE( + gcvLEVEL_INFO, gcvZONE_OS, + "%s(%d): find_vma error", + __FUNCTION__, __LINE__ + ); + + gcmkERR_BREAK(gcvSTATUS_OUT_OF_RESOURCES); + } + + gcmkERR_BREAK(_CMAFSLMmap(Allocator, Mdl, 0, Mdl->numPages, vma)); + } + while (gcvFALSE); + up_write(¤t->mm->mmap_sem); + + if (gcmIS_SUCCESS(status)) + { + gcmkONERROR(gckOS_CacheFlush( + Allocator->os, + _GetProcessID(), + Mdl, + gcvINVALID_ADDRESS, + userLogical, + Mdl->numPages * PAGE_SIZE + )); + + *UserLogical = userLogical; + } + +OnError: + if (gcmIS_ERROR(status)) + { + _CMAFSLUnmapUser(Allocator, Mdl, userLogical, Mdl->numPages * PAGE_SIZE); + } + gcmkFOOTER(); + return status; +} + static gceSTATUS _CMAMapKernel( IN gckALLOCATOR Allocator, @@ -425,12 +512,14 @@ static gcsALLOCATOR_OPERATIONS CMAFSLAllocatorOperations = { .Alloc = _CMAFSLAlloc, .Free = _CMAFSLFree, + .Mmap = _CMAFSLMmap, .MapUser = _CMAFSLMapUser, - .UnmapUser = _CMAUnmapUser, + .UnmapUser = _CMAFSLUnmapUser, .MapKernel = _CMAMapKernel, .UnmapKernel = _CMAUnmapKernel, .Cache = _CMACache, .Physical = _CMAPhysical, + .GetSGT = _CMAFSLGetSGT, }; /* Default allocator entry. */ 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 59a582dd9db9..a854d6e20a99 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 @@ -58,6 +58,7 @@ #include "gc_hal_kernel_linux.h" #include +#include typedef struct _gcsALLOCATOR * gckALLOCATOR; typedef union _gcsATTACH_DESC * gcsATTACH_DESC_PTR; @@ -123,6 +124,40 @@ typedef struct _gcsALLOCATOR_OPERATIONS IN PLINUX_MDL Mdl ); + /************************************************************************** + ** + ** Mmap + ** + ** Map a page range of the memory to user space. + ** + ** INPUT: + ** gckALLOCATOR Allocator + ** Pointer to an gckALLOCATOER object. + ** + ** PLINUX_MDL Mdl + ** Pointer to a Mdl. + ** + ** gctSIZE_T skipPages + ** Number of page to be skipped from beginning of this memory. + ** + ** gctSIZE_T numPages + ** Number of pages to be mapped from skipPages. + ** + ** INOUT: + ** + ** struct vm_area_struct *vma + ** Pointer to VMM memory area. + ** + */ + gceSTATUS + (*Mmap)( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctSIZE_T skipPages, + IN gctSIZE_T numPages, + INOUT struct vm_area_struct *vma + ); + /************************************************************************** ** ** MapUser @@ -147,7 +182,7 @@ typedef struct _gcsALLOCATOR_OPERATIONS ** Nothing. ** */ - gctINT + gceSTATUS (*MapUser)( IN gckALLOCATOR Allocator, IN PLINUX_MDL Mdl, @@ -325,6 +360,38 @@ typedef struct _gcsALLOCATOR_OPERATIONS IN gcsATTACH_DESC_PTR Desc, OUT PLINUX_MDL Mdl ); + + /************************************************************************** + ** + ** GetSGT + ** + ** Get scatter-gather table from a range of the memory. + ** + ** INPUT: + ** gckALLOCATOR Allocator + ** Pointer to an gckALLOCATOER object. + ** + ** gctUINT32 Handle + ** Handle of the memory. + ** + ** gctSIZE_T Offset + ** Offset to the beginning of this mdl. + ** + ** gctSIZE_T Bytes + ** Total bytes form Offset. + ** + ** OUTPUT: + ** gctPOINTER *SGT + ** scatter-gather table + ** + */ + gceSTATUS (*GetSGT)( + IN gckALLOCATOR Allocator, + IN PLINUX_MDL Mdl, + IN gctSIZE_T Offset, + IN gctSIZE_T Bytes, + OUT gctPOINTER *SGT + ); } gcsALLOCATOR_OPERATIONS; @@ -370,7 +437,7 @@ typedef union _gcsATTACH_DESC /* gcvALLOC_FLAG_DMABUF */ struct { - gctINT fd; + gctPOINTER dmabuf; } dmaBuf; 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 26a974ae14a4..f2138cfc93f6 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 @@ -599,7 +599,7 @@ gc_dump_trigger_show(struct seq_file *m, void *data) #if gcdENABLE_3D || gcdENABLE_2D seq_printf(m, "Get dump from /proc/kmsg or /sys/kernel/debug/gc/galcore_trace\n"); - if (kernel && kernel->hardware->powerManagement == gcvFALSE) + if (kernel && kernel->hardware->options.powerManagement == gcvFALSE) { _DumpState(kernel); } @@ -856,6 +856,7 @@ _SetupVidMem( if (gcmIS_SUCCESS(status)) { + device->contiguousVidMem->physical = device->contiguousPhysical; device->contiguousBase = physAddr; break; } @@ -906,11 +907,12 @@ _SetupVidMem( &device->contiguousPhysical )); + device->contiguousVidMem->physical = device->contiguousPhysical; device->requestedContiguousBase = ContiguousBase; device->requestedContiguousSize = ContiguousSize; device->contiguousPhysicalName = 0; - device->contiguousSize = ContiguousSize; + device->contiguousSize = ContiguousSize; } } } @@ -1106,6 +1108,8 @@ gckGALDEVICE_Construct( IN gctSIZE_T RegisterMemSizeVG, IN gctUINT32 ContiguousBase, IN gctSIZE_T ContiguousSize, + IN gctUINT32 ExternalBase, + IN gctSIZE_T ExternalSize, IN gctSIZE_T BankSize, IN gctINT FastClear, IN gctINT Compression, @@ -1120,8 +1124,7 @@ gckGALDEVICE_Construct( ) { gctUINT32 internalBaseAddress = 0, internalAlignment = 0; - gctUINT32 externalBaseAddress = 0, externalAlignment = 0; - gctUINT32 horizontalTileSize, verticalTileSize; + gctUINT32 externalAlignment = 0; gctUINT32 physical; gckGALDEVICE device; gceSTATUS status; @@ -1314,6 +1317,10 @@ gckGALDEVICE_Construct( gcmkONERROR(_SetupVidMem(device, ContiguousBase, ContiguousSize, BankSize, Args)); + /* Set external base and size */ + device->externalBase = ExternalBase; + device->externalSize = ExternalSize; + if (device->irqLines[gcvCORE_MAJOR] != -1) { gcmkONERROR(gcTA_Construct(device->taos, gcvCORE_MAJOR, &globalTA[gcvCORE_MAJOR])); @@ -1459,13 +1466,6 @@ gckGALDEVICE_Construct( &device->systemMemorySize, &device->systemMemoryBaseAddress )); - /* query the amount of video memory */ - gcmkONERROR(gckVGHARDWARE_QueryMemory( - device->kernels[i]->vg->hardware, - &device->internalSize, &internalBaseAddress, &internalAlignment, - &device->externalSize, &externalBaseAddress, &externalAlignment, - &horizontalTileSize, &verticalTileSize - )); } else #endif @@ -1476,17 +1476,8 @@ gckGALDEVICE_Construct( &device->systemMemorySize, &device->systemMemoryBaseAddress )); - - /* query the amount of video memory */ - gcmkONERROR(gckHARDWARE_QueryMemory( - device->kernels[i]->hardware, - &device->internalSize, &internalBaseAddress, &internalAlignment, - &device->externalSize, &externalBaseAddress, &externalAlignment, - &horizontalTileSize, &verticalTileSize - )); } - /* Grab the first availiable kernel */ for (i = 0; i < gcdMAX_GPU_COUNT; i++) { @@ -1523,7 +1514,6 @@ gckGALDEVICE_Construct( } device->internalPhysical = (gctPHYS_ADDR)(gctUINTPTR_T) physical; - device->internalPhysicalName = gcmPTR_TO_NAME(device->internalPhysical); physical += device->internalSize; } } @@ -1533,30 +1523,37 @@ gckGALDEVICE_Construct( /* create the external memory heap */ status = gckVIDMEM_Construct( device->os, - externalBaseAddress, device->externalSize, externalAlignment, + device->externalBase, device->externalSize, externalAlignment, 0, &device->externalVidMem ); if (gcmIS_ERROR(status)) { - /* Error, disable internal heap. */ + /* Error, disable external heap. */ device->externalSize = 0; } else { /* Map external memory. */ - device->externalLogical - = (gctPOINTER) ioremap_nocache(physical, device->externalSize); + gcmkONERROR(gckOS_RequestReservedMemory( + device->os, + device->externalBase, device->externalSize, + "galcore external memory", + gcvTRUE, + &device->externalPhysical + )); + device->externalVidMem->physical = device->externalPhysical; + } + } - if (device->externalLogical == gcvNULL) - { - gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES); - } + if (device->internalPhysical) + { + device->internalPhysicalName = gcmPTR_TO_NAME(device->internalPhysical); + } - device->externalPhysical = (gctPHYS_ADDR)(gctUINTPTR_T) physical; - device->externalPhysicalName = gcmPTR_TO_NAME(device->externalPhysical); - physical += device->externalSize; - } + if (device->externalPhysical) + { + device->externalPhysicalName = gcmPTR_TO_NAME(device->externalPhysical); } if (device->contiguousPhysical) @@ -1655,10 +1652,16 @@ gckGALDEVICE_Destroy( Device->internalVidMem = gcvNULL; } + if (Device->externalPhysical != gcvNULL) + { + gckOS_ReleaseReservedMemory( + Device->os, + Device->externalPhysical + ); + } + if (Device->externalLogical != gcvNULL) { - /* Unmap the external memory. */ - iounmap(Device->externalLogical); Device->externalLogical = gcvNULL; } @@ -1679,7 +1682,6 @@ gckGALDEVICE_Destroy( Device->contiguousPhysical )); } -#if !USE_LINUX_PCIE else { gckOS_ReleaseReservedMemory( @@ -1690,7 +1692,6 @@ gckGALDEVICE_Destroy( Device->requestedContiguousBase = 0; Device->requestedContiguousSize = 0; } -#endif Device->contiguousLogical = gcvNULL; Device->contiguousPhysical = gcvNULL; @@ -2205,7 +2206,7 @@ gckGALDEVICE_Stop( { gcmkONERROR(gckHARDWARE_SetPowerManagement( Device->kernels[i]->hardware, gcvTRUE - )); + )); /* Switch to OFF power state. */ gcmkONERROR(gckHARDWARE_SetPowerManagementState( 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 f5470d8cf494..aab2712b2cd8 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 @@ -101,6 +101,8 @@ typedef struct _gckGALDEVICE gctUINT32 internalPhysicalName; gctPOINTER internalLogical; gckVIDMEM internalVidMem; + + gctUINT32 externalBase; gctSIZE_T externalSize; gctPHYS_ADDR externalPhysical; gctUINT32 externalPhysicalName; @@ -159,6 +161,10 @@ typedef struct _gckGALDEVICE /* gctsOs object for trust application. */ gctaOS taos; + +#if gcdENABLE_DRM + void* drm; +#endif } * gckGALDEVICE; @@ -218,6 +224,8 @@ gceSTATUS gckGALDEVICE_Construct( IN gctSIZE_T RegisterMemSizeVG, IN gctUINT32 ContiguousBase, IN gctSIZE_T ContiguousSize, + IN gctUINT32 ExternalBase, + IN gctSIZE_T ExternalSize, IN gctSIZE_T BankSize, IN gctINT FastClear, IN gctINT Compression, 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 42a5a0a605b3..05474e78553d 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 @@ -72,7 +72,7 @@ MODULE_LICENSE("Dual MIT/GPL"); #if gcdFPGA_BUILD && !defined(CONFIG_PPC) #define USE_MSI 0 #else -#define USE_MIS 1 +#define USE_MSI 1 #endif static struct class* gpuClass; @@ -140,6 +140,14 @@ static ulong contiguousBase = 0; module_param(contiguousBase, ulong, 0644); MODULE_PARM_DESC(contiguousBase, "Base address of memory reserved for GC, if it is 0, GC driver will try to allocate a buffer whose size defined by contiguousSize"); +static ulong externalSize = 0; +module_param(externalSize, ulong, 0644); +MODULE_PARM_DESC(externalSize, "Size of external memory, if it is 0, means there is no external pool"); + +static ulong externalBase = 0; +module_param(externalBase, ulong, 0644); +MODULE_PARM_DESC(externalBase, "Base address of external memory"); + static int fastClear = -1; module_param(fastClear, int, 0644); MODULE_PARM_DESC(fastClear, "Disable fast clear if set it to 0, enabled by default"); @@ -232,9 +240,11 @@ _UpdateModuleParam( #endif contiguousSize = Param->contiguousSize; contiguousBase = Param->contiguousBase; + externalSize = Param->externalSize; + externalBase = Param->externalBase; bankSize = Param->bankSize; fastClear = Param->fastClear; - compression = Param->compression; + compression = (gctINT)Param->compression; powerManagement = Param->powerManagement; gpuProfiler = Param->gpuProfiler; signal = Param->signal; @@ -291,6 +301,8 @@ gckOS_DumpParam( printk(" contiguousSize = 0x%08lX\n", contiguousSize); printk(" contiguousBase = 0x%08lX\n", contiguousBase); + printk(" externalSize = 0x%08lX\n", externalSize); + printk(" externalBase = 0x%08lX\n", externalBase); printk(" bankSize = 0x%08lX\n", bankSize); printk(" fastClear = %d\n", fastClear); printk(" compression = %d\n", compression); @@ -703,6 +715,7 @@ static int drv_init(void) irqLineVG, registerMemBaseVG, registerMemSizeVG, contiguousBase, contiguousSize, + externalBase, externalSize, bankSize, fastClear, compression, baseAddress, physSize, signal, logFileSize, powerManagement, @@ -851,6 +864,11 @@ static void drv_exit(void) gcmkFOOTER_NO(); } +#if gcdENABLE_DRM +int viv_drm_probe(struct device *dev); +int viv_drm_remove(struct device *dev); +#endif + #if USE_LINUX_PCIE static int gpu_probe(struct pci_dev *pdev, const struct pci_device_id *ent) #else /* USE_LINUX_PCIE */ @@ -874,9 +892,10 @@ static int gpu_probe(struct pci_dev *pdev, const struct pci_device_id *ent) .registerMemSizeVG = registerMemSizeVG, .contiguousSize = contiguousSize, .contiguousBase = contiguousBase, + .externalSize = externalSize, + .externalBase = externalBase, .bankSize = bankSize, .fastClear = fastClear, - .compression = compression, .powerManagement = powerManagement, .gpuProfiler = gpuProfiler, .signal = signal, @@ -896,7 +915,7 @@ static int gpu_probe(struct pci_dev *pdev, const struct pci_device_id *ent) memcpy(moduleParam.registerBases, registerBases, gcmSIZEOF(gctUINT) * gcvCORE_COUNT); memcpy(moduleParam.registerSizes, registerSizes, gcmSIZEOF(gctUINT) * gcvCORE_COUNT); memcpy(moduleParam.chipIDs, chipIDs, gcmSIZEOF(gctUINT) * gcvCORE_COUNT); - + moduleParam.compression = (compression == -1) ? gcvCOMPRESSION_OPTION_DEFAULT : (gceCOMPRESSION_OPTION)compression; platform->device = pdev; #if USE_LINUX_PCIE if (pci_enable_device(pdev)) { @@ -948,11 +967,19 @@ static int gpu_probe(struct pci_dev *pdev, const struct pci_device_id *ent) platform_set_drvdata(pdev, galDevice); #endif - gcmkFOOTER_NO(); - return ret; +#if gcdENABLE_DRM + ret = viv_drm_probe(&pdev->dev); +#endif } - gcmkFOOTER_ARG(KERN_INFO "Failed to register gpu driver: %d\n", ret); + if (ret < 0) + { + gcmkFOOTER_ARG(KERN_INFO "Failed to register gpu driver: %d\n", ret); + } + else + { + gcmkFOOTER_NO(); + } return ret; } @@ -968,6 +995,10 @@ static void gpu_remove(struct pci_dev *pdev) { gcmkHEADER(); +#if gcdENABLE_DRM + viv_drm_remove(&pdev->dev); +#endif + drv_exit(); if (platform->ops->putPower) diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_drm.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_drm.c new file mode 100644 index 000000000000..2291a89dd0c1 --- /dev/null +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_drm.c @@ -0,0 +1,493 @@ +/**************************************************************************** +* +* 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. +* +*****************************************************************************/ + + +#if gcdENABLE_DRM + +#include +#include +#include +#include "gc_hal_kernel_linux.h" +#include "gc_hal_drm.h" + +#define _GC_OBJ_ZONE gcvZONE_KERNEL + +/******************************************************************************\ +******************************* gckKERNEL DRM Code ****************************** +\******************************************************************************/ + +struct viv_gem_object { + struct drm_gem_object base; + + uint32_t node; +}; + +struct dma_buf *viv_gem_prime_export(struct drm_device *drm, + struct drm_gem_object *gem_obj, + int flags) +{ + struct viv_gem_object *viv_obj = container_of(gem_obj, struct viv_gem_object, base); + struct dma_buf *dmabuf = gcvNULL; + gckGALDEVICE gal_dev = (gckGALDEVICE)drm->dev_private; + + if (gal_dev) + { + gckKERNEL kernel = gal_dev->device->map[gal_dev->device->defaultHwType].kernels[0]; + gcmkVERIFY_OK(gckVIDMEM_NODE_Export(kernel, viv_obj->node, flags, + (gctPOINTER*)&dmabuf, gcvNULL)); + } + + return dmabuf; +} + +struct drm_gem_object *viv_gem_prime_import(struct drm_device *drm, + struct dma_buf *dmabuf) +{ + struct drm_gem_object *gem_obj = gcvNULL; + struct viv_gem_object *viv_obj; + + gcsHAL_INTERFACE iface; + gceSTATUS status = gcvSTATUS_OK; + gckGALDEVICE gal_dev = gcvNULL; + + gal_dev = (gckGALDEVICE)drm->dev_private; + if (!gal_dev) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + gckOS_ZeroMemory(&iface, sizeof(iface)); + iface.command = gcvHAL_WRAP_USER_MEMORY; + iface.hardwareType = gal_dev->device->defaultHwType; + iface.u.WrapUserMemory.desc.flag = gcvALLOC_FLAG_DMABUF; + iface.u.WrapUserMemory.desc.handle = -1; + iface.u.WrapUserMemory.desc.dmabuf = gcmPTR_TO_UINT64(dmabuf); + gcmkONERROR(gckDEVICE_Dispatch(gal_dev->device, &iface)); + + /* ioctl output */ + gem_obj = kzalloc(sizeof(struct viv_gem_object), GFP_KERNEL); + drm_gem_private_object_init(drm, gem_obj, dmabuf->size); + viv_obj = container_of(gem_obj, struct viv_gem_object, base); + viv_obj->node = iface.u.WrapUserMemory.node; + +OnError: + return gem_obj; +} + +void viv_gem_free_object(struct drm_gem_object *gem_obj) +{ + struct viv_gem_object *viv_obj = container_of(gem_obj, struct viv_gem_object, base); + struct drm_device *drm = gem_obj->dev; + + gcsHAL_INTERFACE iface; + gckGALDEVICE gal_dev = (gckGALDEVICE)drm->dev_private; + + gckOS_ZeroMemory(&iface, sizeof(iface)); + iface.command = gcvHAL_RELEASE_VIDEO_MEMORY; + iface.hardwareType = gal_dev->device->defaultHwType; + iface.u.ReleaseVideoMemory.node = viv_obj->node; + gcmkVERIFY_OK(gckDEVICE_Dispatch(gal_dev->device, &iface)); + + drm_gem_object_release(gem_obj); + kfree(gem_obj); +} + +static int viv_ioctl_gem_create(struct drm_device *drm, void *data, + struct drm_file *file) +{ + int ret = 0; + struct drm_viv_gem_create *args = (struct drm_viv_gem_create*)data; + struct drm_gem_object *gem_obj; + struct viv_gem_object *viv_obj; + + gcsHAL_INTERFACE iface; + gceSTATUS status = gcvSTATUS_OK; + gckGALDEVICE gal_dev = gcvNULL; + + gal_dev = (gckGALDEVICE)drm->dev_private; + if (!gal_dev) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + gckOS_ZeroMemory(&iface, sizeof(iface)); + iface.command = gcvHAL_ALLOCATE_LINEAR_VIDEO_MEMORY; + iface.hardwareType = gal_dev->device->defaultHwType; + iface.u.AllocateLinearVideoMemory.bytes = PAGE_ALIGN(args->size); + iface.u.AllocateLinearVideoMemory.alignment = 256; + iface.u.AllocateLinearVideoMemory.type = gcvSURF_RENDER_TARGET; /* should be general */ + iface.u.AllocateLinearVideoMemory.flag = args->flags; + iface.u.AllocateLinearVideoMemory.pool = gcvPOOL_DEFAULT; + gcmkONERROR(gckDEVICE_Dispatch(gal_dev->device, &iface)); + + /* ioctl output */ + gem_obj = kzalloc(sizeof(struct viv_gem_object), GFP_KERNEL); + drm_gem_private_object_init(drm, gem_obj, iface.u.AllocateLinearVideoMemory.bytes); + ret = drm_gem_handle_create(file, gem_obj, &args->handle); + + viv_obj = container_of(gem_obj, struct viv_gem_object, base); + viv_obj->node = iface.u.AllocateLinearVideoMemory.node; + + /* drop reference from allocate - handle holds it now */ + drm_gem_object_unreference_unlocked(gem_obj); + +OnError: + return gcmIS_ERROR(status) ? -ENOTTY : 0; +} + +static int viv_ioctl_gem_lock(struct drm_device *drm, void *data, + struct drm_file *file) +{ + struct drm_viv_gem_lock *args = (struct drm_viv_gem_lock*)data; + struct drm_gem_object *gem_obj; + struct viv_gem_object *viv_obj; + + gcsHAL_INTERFACE iface; + gceSTATUS status = gcvSTATUS_OK; + gckGALDEVICE gal_dev = gcvNULL; + + gal_dev = (gckGALDEVICE)drm->dev_private; + if (!gal_dev) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + gem_obj = drm_gem_object_lookup(file, args->handle); + if (!gem_obj) + { + gcmkONERROR(gcvSTATUS_NOT_FOUND); + } + viv_obj = container_of(gem_obj, struct viv_gem_object, base); + + gckOS_ZeroMemory(&iface, sizeof(iface)); + iface.command = gcvHAL_LOCK_VIDEO_MEMORY; + iface.hardwareType = gal_dev->device->defaultHwType; + iface.u.LockVideoMemory.node = viv_obj->node; + iface.u.LockVideoMemory.cacheable = args->cacheable; + gcmkONERROR(gckDEVICE_Dispatch(gal_dev->device, &iface)); + + args->cpu_va = iface.u.LockVideoMemory.memory; + args->gpu_va = iface.u.LockVideoMemory.address; + +OnError: + return gcmIS_ERROR(status) ? -ENOTTY : 0; +} + +static int viv_ioctl_gem_unlock(struct drm_device *drm, void *data, + struct drm_file *file) +{ + struct drm_viv_gem_unlock *args = (struct drm_viv_gem_unlock*)data; + struct drm_gem_object *gem_obj; + struct viv_gem_object *viv_obj; + + gcsHAL_INTERFACE iface; + gceSTATUS status = gcvSTATUS_OK; + gckGALDEVICE gal_dev = gcvNULL; + + gal_dev = (gckGALDEVICE)drm->dev_private; + if (!gal_dev) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + gem_obj = drm_gem_object_lookup(file, args->handle); + if (!gem_obj) + { + gcmkONERROR(gcvSTATUS_NOT_FOUND); + } + drm_gem_object_unreference_unlocked(gem_obj); + viv_obj = container_of(gem_obj, struct viv_gem_object, base); + + gckOS_ZeroMemory(&iface, sizeof(iface)); + iface.command = gcvHAL_UNLOCK_VIDEO_MEMORY; + iface.hardwareType = gal_dev->device->defaultHwType; + iface.u.UnlockVideoMemory.node = (gctUINT64)viv_obj->node; + iface.u.UnlockVideoMemory.type = gcvSURF_TYPE_UNKNOWN; + gcmkONERROR(gckDEVICE_Dispatch(gal_dev->device, &iface)); + + /* + * decrease obj->refcount one more time because we has already + * increased it at viv_ioctl_gem_lock(). + */ + drm_gem_object_unreference_unlocked(gem_obj); + +OnError: + return gcmIS_ERROR(status) ? -ENOTTY : 0; +} + +static int viv_ioctl_gem_cache(struct drm_device *drm, void *data, + struct drm_file *file) +{ + struct drm_viv_gem_cache *args = (struct drm_viv_gem_cache*)data; + struct drm_gem_object *gem_obj; + struct viv_gem_object *viv_obj; + + gcsHAL_INTERFACE iface; + gceSTATUS status = gcvSTATUS_OK; + gckGALDEVICE gal_dev = gcvNULL; + + gal_dev = (gckGALDEVICE)drm->dev_private; + if (!gal_dev) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + gem_obj = drm_gem_object_lookup(file, args->handle); + if (!gem_obj) + { + gcmkONERROR(gcvSTATUS_NOT_FOUND); + } + drm_gem_object_unreference_unlocked(gem_obj); + viv_obj = container_of(gem_obj, struct viv_gem_object, base); + + gckOS_ZeroMemory(&iface, sizeof(iface)); + iface.command = gcvHAL_CACHE; + iface.hardwareType = gal_dev->device->defaultHwType; + iface.u.Cache.node = viv_obj->node; + iface.u.Cache.operation = args->op; + iface.u.Cache.logical = args->logical; + iface.u.Cache.bytes = args->bytes; + gcmkONERROR(gckDEVICE_Dispatch(gal_dev->device, &iface)); + +OnError: + return gcmIS_ERROR(status) ? -ENOTTY : 0; +} + +static int viv_ioctl_gem_getinfo(struct drm_device *drm, void *data, + struct drm_file *file) +{ + struct drm_viv_gem_getinfo *args = (struct drm_viv_gem_getinfo*)data; + struct drm_gem_object *gem_obj; + struct viv_gem_object *viv_obj; + + gceSTATUS status = gcvSTATUS_OK; + gckGALDEVICE gal_dev = gcvNULL; + gckKERNEL kernel; + gctUINT32 processID; + gckVIDMEM_NODE node = gcvNULL; + + gal_dev = (gckGALDEVICE)drm->dev_private; + if (!gal_dev) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + kernel = gal_dev->device->map[gal_dev->device->defaultHwType].kernels[0]; + + gem_obj = drm_gem_object_lookup(file, args->handle); + if (!gem_obj) + { + gcmkONERROR(gcvSTATUS_NOT_FOUND); + } + drm_gem_object_unreference_unlocked(gem_obj); + viv_obj = container_of(gem_obj, struct viv_gem_object, base); + + gcmkONERROR(gckOS_GetProcessID(&processID)); + gcmkONERROR(gckVIDMEM_HANDLE_Lookup(kernel, processID, viv_obj->node, &node)); + switch (args->param) + { + case VIV_GEM_PARAM_NODE: + args->value = (__u64)viv_obj->node; + break; + case VIV_GEM_PARAM_POOL: + args->value = (__u64)node->pool; + break; + case VIV_GEM_PARAM_SIZE: + args->value = (node->node->VidMem.memory->object.type == gcvOBJ_VIDMEM) + ? (__u64)node->node->VidMem.bytes + : (__u64)node->node->Virtual.bytes;; + break; + default: + break; + } + +OnError: + return gcmIS_ERROR(status) ? -ENOTTY : 0; +} + +static const struct drm_ioctl_desc viv_ioctls[] = +{ + DRM_IOCTL_DEF_DRV(VIV_GEM_CREATE, viv_ioctl_gem_create, DRM_AUTH | DRM_RENDER_ALLOW), + DRM_IOCTL_DEF_DRV(VIV_GEM_LOCK, viv_ioctl_gem_lock, DRM_AUTH | DRM_RENDER_ALLOW), + DRM_IOCTL_DEF_DRV(VIV_GEM_UNLOCK, viv_ioctl_gem_unlock, DRM_AUTH | DRM_RENDER_ALLOW), + DRM_IOCTL_DEF_DRV(VIV_GEM_CACHE, viv_ioctl_gem_cache, DRM_AUTH | DRM_RENDER_ALLOW), + DRM_IOCTL_DEF_DRV(VIV_GEM_GETINFO, viv_ioctl_gem_getinfo, DRM_AUTH | DRM_RENDER_ALLOW), +}; + +int viv_drm_open(struct drm_device *drm, struct drm_file *file) +{ + gctINT i; + gctUINT32 pid = _GetProcessID(); + gckGALDEVICE gal_dev = (gckGALDEVICE)drm->dev_private; + gceSTATUS status = gcvSTATUS_OK; + + for (i = 0; i < gcdMAX_GPU_COUNT; ++i) + { + if (gal_dev->kernels[i]) + { + gcmkONERROR(gckKERNEL_AttachProcessEx(gal_dev->kernels[i], gcvTRUE, pid)); + } + } + file->driver_priv = gcmINT2PTR(pid); + +OnError: + return gcmIS_ERROR(status) ? -ENODEV : 0; +} + +void viv_drm_postclose(struct drm_device *drm, struct drm_file *file) +{ + gctINT i; + gctUINT32 pid = gcmPTR2INT(file->driver_priv); + gckGALDEVICE gal_dev = (gckGALDEVICE)drm->dev_private; + + for (i = 0; i < gcdMAX_GPU_COUNT; ++i) + { + if (gal_dev->kernels[i]) + { + gcmkVERIFY_OK(gckKERNEL_AttachProcessEx(gal_dev->kernels[i], gcvFALSE, pid)); + } + } +} + +static const struct file_operations viv_drm_fops = { + .owner = THIS_MODULE, + .open = drm_open, + .release = drm_release, + .unlocked_ioctl = drm_ioctl, + .compat_ioctl = drm_compat_ioctl, + .poll = drm_poll, + .read = drm_read, + .llseek = no_llseek, +}; + +static struct drm_driver viv_drm_driver = { + .driver_features = DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER, + .open = viv_drm_open, + .postclose = viv_drm_postclose, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0) + .gem_free_object_unlocked = viv_gem_free_object, +#else + .gem_free_object = viv_gem_free_object, +#endif + .prime_handle_to_fd = drm_gem_prime_handle_to_fd, + .prime_fd_to_handle = drm_gem_prime_fd_to_handle, + .gem_prime_export = viv_gem_prime_export, + .gem_prime_import = viv_gem_prime_import, + .ioctls = viv_ioctls, + .num_ioctls = DRM_VIV_NUM_IOCTLS, + .fops = &viv_drm_fops, + .name = "vivante", + .desc = "vivante DRM", + .date = "20170808", + .major = 1, + .minor = 0, +}; + +int viv_drm_probe(struct device *dev) +{ + int ret = 0; + gceSTATUS status = gcvSTATUS_OK; + gckGALDEVICE gal_dev = gcvNULL; + struct drm_device *drm = gcvNULL; + + gal_dev = (gckGALDEVICE)dev_get_drvdata(dev); + if (!gal_dev) + { + ret = -ENODEV; + gcmkONERROR(gcvSTATUS_INVALID_OBJECT); + } + + drm = drm_dev_alloc(&viv_drm_driver, dev); + if (IS_ERR(drm)) + { + ret = PTR_ERR(drm); + gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES); + } + drm->dev_private = (void*)gal_dev; + + ret = drm_dev_register(drm, 0); + if (ret) + { + gcmkONERROR(gcvSTATUS_GENERIC_IO); + } + + gal_dev->drm = (void*)drm; + +OnError: + if (gcmIS_ERROR(status)) + { + if (drm) + { + drm_dev_unref(drm); + } + printk(KERN_ERR "galcore: Failed to setup drm device.\n"); + } + return ret; +} + +int viv_drm_remove(struct device *dev) +{ + gckGALDEVICE gal_dev = (gckGALDEVICE)dev_get_drvdata(dev); + + if (gal_dev) + { + struct drm_device *drm = (struct drm_device*)gal_dev->drm; + + drm_dev_unregister(drm); + drm_dev_unref(drm); + } + + return 0; +} + +#endif 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 0578656e4f8e..02a71859185b 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 @@ -288,17 +288,20 @@ gckKERNEL_MapVideoMemoryEx( IN gceCORE Core, IN gctBOOL InUserSpace, IN gctUINT32 Address, + IN gcePOOL Pool, OUT gctPOINTER * Logical ) { gckGALDEVICE device = gcvNULL; - gcePOOL pool = gcvPOOL_UNKNOWN; gctUINT32 offset = 0; gctUINT32 base = 0; + gctSIZE_T bytes = 0; + gctPHYS_ADDR physical = gcvNULL; gceSTATUS status; gctPOINTER logical = gcvNULL; - gctUINT32 baseAddress; - gctPHYS_ADDR_T physical; +#if gcdENABLE_VG + gcePOOL pool = gcvPOOL_UNKNOWN; +#endif gcmkHEADER_ARG("Kernel=%p InUserSpace=%d Address=%08x", Kernel, InUserSpace, Address); @@ -320,13 +323,11 @@ gckKERNEL_MapVideoMemoryEx( else #endif { - /* Split the memory address into a pool type and offset. */ - gcmkONERROR( - gckHARDWARE_SplitMemory(Kernel->hardware, Address, &pool, &offset)); + offset = Address; } /* Dispatch on pool. */ - switch (pool) + switch (Pool) { case gcvPOOL_LOCAL_INTERNAL: /* Internal memory. */ @@ -336,68 +337,46 @@ gckKERNEL_MapVideoMemoryEx( 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. */ - { - PLINUX_MDL mdl; - PLINUX_MDL_MAP mdlMap; - - mdl = (PLINUX_MDL) device->contiguousPhysical; - - mutex_lock(&mdl->mapsMutex); - 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; - } + physical = device->externalPhysical; + bytes = device->externalSize; #if gcdENABLE_VG if (Core == gcvCORE_VG) { gcmkVERIFY_OK( gckVGHARDWARE_SplitMemory(Kernel->vg->hardware, - device->contiguousVidMem->baseAddress, + device->externalVidMem->baseAddress, &pool, &base)); } else #endif { - gctUINT32 systemBaseAddress = 0; - - if (Kernel->hardware->mmuVersion == 0) - { - gcmkONERROR(gckOS_GetBaseAddress(Kernel->os, &systemBaseAddress)); - } + base = Kernel->externalBaseAddress; + } - gcmkVERIFY_OK( - gckOS_CPUPhysicalToGPUPhysical( - Kernel->os, - device->contiguousVidMem->baseAddress - systemBaseAddress, - &physical - )); + break; - gcmkSAFECASTPHYSADDRT(baseAddress, physical); + case gcvPOOL_SYSTEM: + /* System memory. */ + physical = device->contiguousPhysical; + bytes = device->contiguousSize; +#if gcdENABLE_VG + if (Core == gcvCORE_VG) + { gcmkVERIFY_OK( - gckHARDWARE_SplitMemory(Kernel->hardware, - baseAddress, + gckVGHARDWARE_SplitMemory(Kernel->vg->hardware, + device->contiguousVidMem->baseAddress, &pool, &base)); } - offset -= base; + else +#endif + { + base = Kernel->contiguousBaseAddress; + } + break; default: @@ -405,6 +384,11 @@ gckKERNEL_MapVideoMemoryEx( gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); } + gcmkONERROR(gckOS_MapMemory(Kernel->os, physical, bytes, &logical)); + + /* GPU address offset */ + offset -= base; + /* Build logical address of specified address. */ *Logical = (gctPOINTER) ((gctUINT8_PTR) logical + offset); @@ -450,7 +434,7 @@ gckKERNEL_MapVideoMemory( OUT gctPOINTER * Logical ) { - return gckKERNEL_MapVideoMemoryEx(Kernel, gcvCORE_MAJOR, InUserSpace, Address, Logical); + return gckKERNEL_MapVideoMemoryEx(Kernel, gcvCORE_MAJOR, InUserSpace, Address, gcvPOOL_SYSTEM, Logical); } /******************************************************************************* ** 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 2c8cc4b928fd..f050781fad3a 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 @@ -191,10 +191,10 @@ FindMdlMap( static PLINUX_MDL _CreateMdl( - void + IN gckOS Os ) { - PLINUX_MDL mdl; + PLINUX_MDL mdl; gcmkHEADER(); @@ -202,6 +202,8 @@ _CreateMdl( if (mdl) { + mdl->os = Os; + atomic_set(&mdl->refs, 1); mutex_init(&mdl->mapsMutex); INIT_LIST_HEAD(&mdl->mapsHead); } @@ -215,19 +217,42 @@ _DestroyMdl( IN PLINUX_MDL Mdl ) { - PLINUX_MDL_MAP mdlMap, next; - gcmkHEADER_ARG("Mdl=0x%X", Mdl); /* Verify the arguments. */ gcmkVERIFY_ARGUMENT(Mdl != gcvNULL); - list_for_each_entry_safe(mdlMap, next, &Mdl->mapsHead, link) + if (atomic_dec_and_test(&Mdl->refs)) { - gcmkVERIFY_OK(_DestroyMdlMap(Mdl, mdlMap)); - } + gckOS os = Mdl->os; + gckALLOCATOR allocator = Mdl->allocator; + PLINUX_MDL_MAP mdlMap, next; + + /* Valid private means alloc/attach successfully */ + if (Mdl->priv) + { + if (Mdl->addr) + { + allocator->ops->UnmapKernel(allocator, Mdl, Mdl->addr); + } + allocator->ops->Free(allocator, Mdl); + } + + list_for_each_entry_safe(mdlMap, next, &Mdl->mapsHead, link) + { + gcmkVERIFY_OK(_DestroyMdlMap(Mdl, mdlMap)); + } + + if (Mdl->link.next) + { + /* Remove the node from global list.. */ + mutex_lock(&os->mdlMutex); + list_del(&Mdl->link); + mutex_unlock(&os->mdlMutex); + } - kfree(Mdl); + kfree(Mdl); + } gcmkFOOTER_NO(); return gcvSTATUS_OK; @@ -1117,10 +1142,7 @@ gckOS_MapMemory( if (mdlMap == gcvNULL) { - mutex_unlock(&mdl->mapsMutex); - - gcmkFOOTER_ARG("status=%d", gcvSTATUS_OUT_OF_MEMORY); - return gcvSTATUS_OUT_OF_MEMORY; + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); } } @@ -1142,6 +1164,8 @@ gckOS_MapMemory( return gcvSTATUS_OK; OnError: + mutex_unlock(&mdl->mapsMutex); + gcmkFOOTER(); return status; } @@ -1389,7 +1413,7 @@ gckOS_AllocateNonPagedMemory( numPages = GetPageCount(bytes, 0); /* Allocate mdl structure */ - mdl = _CreateMdl(); + mdl = _CreateMdl(Os); if (mdl == gcvNULL) { gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); @@ -1411,15 +1435,6 @@ gckOS_AllocateNonPagedMemory( /* Point to dma coherent allocator. */ if (strcmp(allocator->name, "dma")) { - /*!VIV: - * For historical issue, we force allocate all non-paged memory from - * dma coherent pool when it is not disabled. - * - * The code below changes the scheme a little: force allocate - * non-paged memory whose size is larger than 1 pages, can try other - * allocators otherwise. This is to save memory usage of dma - * coherent pool. - */ if (((flag & allocator->capability) != flag) || (numPages > 1)) { @@ -1473,15 +1488,13 @@ gckOS_AllocateNonPagedMemory( *Logical = addr; } - mutex_lock(&Os->mdlMutex); - /* * Add this to a global list. * Will be used by get physical address * and mapuser pointer functions. */ + mutex_lock(&Os->mdlMutex); list_add_tail(&mdl->link, &Os->mdlHead); - mutex_unlock(&Os->mdlMutex); /* Return allocated memory. */ @@ -1494,12 +1507,6 @@ gckOS_AllocateNonPagedMemory( return gcvSTATUS_OK; OnError: - if (mdlMap != gcvNULL) - { - /* Free LINUX_MDL_MAP. */ - gcmkVERIFY_OK(_DestroyMdlMap(mdl, mdlMap)); - } - if (mdl != gcvNULL) { /* Free LINUX_MDL. */ @@ -1543,9 +1550,7 @@ gceSTATUS gckOS_FreeNonPagedMemory( IN gctPOINTER Logical ) { - PLINUX_MDL mdl; - - gckALLOCATOR allocator; + PLINUX_MDL mdl = (PLINUX_MDL)Physical; gcmkHEADER_ARG("Os=0x%X Bytes=%lu Physical=0x%X Logical=0x%X", Os, Bytes, Physical, Logical); @@ -1556,21 +1561,6 @@ gceSTATUS gckOS_FreeNonPagedMemory( gcmkVERIFY_ARGUMENT(Physical != 0); gcmkVERIFY_ARGUMENT(Logical != gcvNULL); - /* Convert physical address into a pointer to a MDL. */ - mdl = (PLINUX_MDL) Physical; - - allocator = mdl->allocator; - - allocator->ops->UnmapKernel(allocator, mdl, mdl->addr); - allocator->ops->Free(allocator, mdl); - - mutex_lock(&Os->mdlMutex); - - /* Remove the node from global list.. */ - list_del(&mdl->link); - - mutex_unlock(&Os->mdlMutex); - gcmkVERIFY_OK(_DestroyMdl(mdl)); /* Success. */ @@ -1617,8 +1607,7 @@ gckOS_RequestReservedMemory( /* Round up to page size. */ Size = (Size + ~PAGE_MASK) & PAGE_MASK; - mdl = _CreateMdl(); - + mdl = _CreateMdl(Os); if (!mdl) { gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); @@ -1647,15 +1636,13 @@ gckOS_RequestReservedMemory( 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. */ + mutex_lock(&Os->mdlMutex); list_add_tail(&mdl->link, &Os->mdlHead); - mutex_unlock(&Os->mdlMutex); *MemoryHandle = (void *)mdl; @@ -3236,7 +3223,7 @@ gckOS_AllocatePagedMemoryEx( numPages = GetPageCount(bytes, 0); - mdl = _CreateMdl(); + mdl = _CreateMdl(Os); if (mdl == gcvNULL) { gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); @@ -3285,15 +3272,13 @@ gckOS_AllocatePagedMemoryEx( *Gid = mdl->gid; } - mutex_lock(&Os->mdlMutex); - /* * Add this to a global list. * Will be used by get physical address * and mapuser pointer functions. */ + mutex_lock(&Os->mdlMutex); list_add_tail(&mdl->link, &Os->mdlHead); - mutex_unlock(&Os->mdlMutex); /* Return physical address. */ @@ -3343,8 +3328,7 @@ gckOS_FreePagedMemory( IN gctSIZE_T Bytes ) { - PLINUX_MDL mdl = (PLINUX_MDL) Physical; - gckALLOCATOR allocator = (gckALLOCATOR)mdl->allocator; + PLINUX_MDL mdl = (PLINUX_MDL)Physical; gcmkHEADER_ARG("Os=0x%X Physical=0x%X Bytes=%lu", Os, Physical, Bytes); @@ -3353,15 +3337,6 @@ gckOS_FreePagedMemory( gcmkVERIFY_ARGUMENT(Physical != gcvNULL); gcmkVERIFY_ARGUMENT(Bytes > 0); - mutex_lock(&Os->mdlMutex); - - /* Remove the node from global list. */ - list_del(&mdl->link); - - mutex_unlock(&Os->mdlMutex); - - allocator->ops->Free(allocator, mdl); - /* Free the structure... */ gcmkVERIFY_OK(_DestroyMdl(mdl)); @@ -6237,7 +6212,7 @@ _QuerySignal( * spinlock for 'Os->signalDB.lock' and 'signal->obj.wait.lock'. */ gceSTATUS status; - gcsSIGNAL_PTR signal; + gcsSIGNAL_PTR signal = gcvNULL; status = _QueryIntegerId(&Os->signalDB, (gctUINT32)(gctUINTPTR_T)Signal, @@ -6284,7 +6259,7 @@ gckOS_MapSignal( ) { gceSTATUS status; - gcsSIGNAL_PTR signal; + gcsSIGNAL_PTR signal = gcvNULL; gcmkHEADER_ARG("Os=0x%X Signal=0x%X Process=0x%X", Os, Signal, Process); gcmkVERIFY_ARGUMENT(Signal != gcvNULL); @@ -7352,7 +7327,7 @@ gckOS_CreateNativeFence( struct sync_file *sync = NULL; int fd; struct viv_sync_timeline *timeline; - gcsSIGNAL_PTR signal; + gcsSIGNAL_PTR signal = gcvNULL; gceSTATUS status = gcvSTATUS_OK; /* Create fence. */ @@ -7706,6 +7681,16 @@ gckOS_QueryOption( *Value = (gctUINT32)device->contiguousBase; return gcvSTATUS_OK; } + else if (!strcmp(Option, "externalSize")) + { + *Value = device->externalSize; + return gcvSTATUS_OK; + } + else if (!strcmp(Option, "externalBase")) + { + *Value = device->externalBase; + return gcvSTATUS_OK; + } else if (!strcmp(Option, "recovery")) { *Value = device->args.recovery; @@ -7723,11 +7708,7 @@ 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")) @@ -7739,6 +7720,73 @@ gckOS_QueryOption( return gcvSTATUS_NOT_SUPPORTED; } +gceSTATUS +gckOS_MemoryGetSGT( + IN gckOS Os, + IN gctPHYS_ADDR Physical, + IN gctSIZE_T Offset, + IN gctSIZE_T Bytes, + OUT gctPOINTER *SGT + ) +{ + PLINUX_MDL mdl; + gckALLOCATOR allocator; + gceSTATUS status = gcvSTATUS_OK; + + if (!Physical) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + mdl = (PLINUX_MDL)Physical; + allocator = mdl->allocator; + + if (!allocator->ops->GetSGT) + { + gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); + } + + if (Bytes > 0) + { + gcmkONERROR(allocator->ops->GetSGT(allocator, mdl, Offset, Bytes, SGT)); + } + +OnError: + return status; +} + +gceSTATUS +gckOS_MemoryMmap( + IN gckOS Os, + IN gctPHYS_ADDR Physical, + IN gctSIZE_T skipPages, + IN gctSIZE_T numPages, + INOUT gctPOINTER Vma + ) +{ + PLINUX_MDL mdl; + gckALLOCATOR allocator; + gceSTATUS status = gcvSTATUS_OK; + + if (!Physical) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + mdl = (PLINUX_MDL)Physical; + allocator = mdl->allocator; + + if (!allocator->ops->Mmap) + { + gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); + } + + gcmkONERROR(allocator->ops->Mmap(allocator, mdl, skipPages, numPages, Vma)); + +OnError: + return status; +} + /******************************************************************************* ** ** gckOS_WrapMemory @@ -7782,7 +7830,7 @@ gckOS_WrapMemory( gcmkVERIFY_OBJECT(Os, gcvOBJ_OS); gcmkVERIFY_ARGUMENT(Physical != gcvNULL); - mdl = _CreateMdl(); + mdl = _CreateMdl(Os); if (mdl == gcvNULL) { gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); @@ -7790,7 +7838,7 @@ gckOS_WrapMemory( if (Desc->flag & gcvALLOC_FLAG_DMABUF) { - desc.dmaBuf.fd = (gctINT) Desc->handle; + desc.dmaBuf.dmabuf = gcmUINT64_TO_PTR(Desc->dmabuf); } else if (Desc->flag & gcvALLOC_FLAG_USERMEMORY) { @@ -7853,15 +7901,13 @@ gckOS_WrapMemory( *Contiguous = mdl->contiguous; - mutex_lock(&Os->mdlMutex); - /* * Add this to a global list. * Will be used by get physical address * and mapuser pointer functions. */ + mutex_lock(&Os->mdlMutex); list_add_tail(&mdl->link, &Os->mdlHead); - mutex_unlock(&Os->mdlMutex); /* Success. */ diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h index c17a8f5c56d7..4fcf6969567b 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h @@ -70,6 +70,10 @@ struct _LINUX_MDL_MAP struct _LINUX_MDL { + gckOS os; + + atomic_t refs; + char * addr; gctINT numPages; @@ -85,6 +89,9 @@ struct _LINUX_MDL /* Private data used by allocator. */ void * priv; + /* exported dma_buf */ + void * dmabuf; + uint gid; struct list_head link; 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 1d2773893390..e7feddadd515 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 @@ -75,9 +75,11 @@ typedef struct _gcsMODULE_PARAMETERS gctUINT contiguousSize; gctUINT contiguousBase; gctUINT contiguousRequested; + gctUINT externalSize; + gctUINT externalBase; gctUINT bankSize; gctINT fastClear; - gctINT compression; + gceCOMPRESSION_OPTION compression; gctINT powerManagement; gctINT gpuProfiler; gctINT signal; @@ -212,7 +214,7 @@ typedef struct soc_platform_ops /******************************************************************************* ** - ** getGPUPhysical + ** getCPUPhysical ** ** Convert GPU physical address to CPU physical address if they are ** different. 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 0f69de361052..c728045be5ce 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 @@ -1044,6 +1044,17 @@ static inline int get_power_imx8_subsystem(struct device *pdev) continue; } +#if defined(CONFIG_ANDROID) && LINUX_VERSION_CODE < KERNEL_VERSION(4,9,0) + /* TODO: freescale BSP issue in some platform like imx8dv. */ + clk_prepare(clk_core); + clk_set_rate(clk_core, 800000000); + clk_unprepare(clk_core); + + clk_prepare(clk_shader); + clk_set_rate(clk_shader, 800000000); + clk_unprepare(clk_shader); +#endif + 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; 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 db1a26be0b79..f032e7ac9524 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 @@ -383,7 +383,7 @@ gctaHARDWARE_Construct( ) { gceSTATUS status; - gcTA_HARDWARE hardware; + gcTA_HARDWARE hardware = gcvNULL; gctaOS os = TA->os; @@ -413,12 +413,18 @@ gctaHARDWARE_Construct( 0x00000900 ); - _IdentifyHardwareByDatabase(hardware); + gcmkONERROR(_IdentifyHardwareByDatabase(hardware)); *Hardware = hardware; return gcvSTATUS_OK; + OnError: + if (hardware) + { + gctaOS_Free(hardware); + } + return status; } -- cgit v1.2.3