MGS-3214 gpu-viv: integrate 6.2.4 driver
authorXianzhong <xianzhong.li@nxp.com>
Fri, 13 Oct 2017 11:15:34 +0000 (19:15 +0800)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 20:38:51 +0000 (15:38 -0500)
add dmabuf/gem feature through drm galcore,
include more bug-fixing in gpu kernel driver.

Signed-off-by: Xianzhong <xianzhong.li@nxp.com>
45 files changed:
drivers/mxc/gpu-viv/Kbuild
drivers/mxc/gpu-viv/config
drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_context.c
drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_context.h
drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.c
drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.h
drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.c
drivers/mxc/gpu-viv/hal/kernel/archvg/gc_hal_kernel_hardware_vg.h
drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c
drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
drivers/mxc/gpu-viv/hal/kernel/inc/gc_feature_database.h
drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_drm.h [new file with mode: 0644]
drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer.h
drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h
drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dma.c
drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dmabuf.c
drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_gfp.c
drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_reserved_mem.c
drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_user_memory.c
drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_cma.c
drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.h
drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_drm.c [new file with mode: 0644]
drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.c
drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h
drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_platform.h
drivers/mxc/gpu-viv/hal/os/linux/kernel/platform/freescale/gc_hal_kernel_platform_imx6.c
drivers/mxc/gpu-viv/hal/security_v1/gc_hal_ta_hardware.c

index 8ba72e7..84f0225 100644 (file)
@@ -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
 
index fa3287a..a4fe059 100644 (file)
@@ -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
index 69574f6..b20aaf5 100644 (file)
@@ -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);
index 2614ee9..6a90926 100644 (file)
@@ -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
index c951276..ebec019 100644 (file)
@@ -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;
index 68a8f9b..8cc00ef 100644 (file)
@@ -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;
index a852913..73eda63 100644 (file)
@@ -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();
index 18c50bc..c2d16cb 100644 (file)
@@ -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;
 };
index 9ee3a82..6726a88 100644 (file)
@@ -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:
index fa0c297..55fcc89 100644 (file)
@@ -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
index 1dc58f3..2044cf1 100644 (file)
@@ -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();
index f33f650..765231b 100644 (file)
 #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));
 
index 9c556c4..c5f067a 100644 (file)
@@ -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));
 
index 6aa7936..149cced 100644 (file)
@@ -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;
index c6423d1..167e65d 100644 (file)
@@ -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
index 2826a0a..1862017 100644 (file)
@@ -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 <linux/slab.h>
+#include <linux/mm_types.h>
+#include <linux/dma-buf.h>
+
+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;
+}
index 0e92940..b64014b 100644 (file)
@@ -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 */
     },
 };
 
index 4945dca..9b3c60c 100644 (file)
@@ -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
index 0bd63e1..9d24c5b 100644 (file)
@@ -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,
index 628f13c..7a41b0a 100644 (file)
@@ -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 (file)
index 0000000..8e08290
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.
+ */
+
+#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__ */
index b762981..69693e6 100644 (file)
@@ -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,
index 08a651d..71e424b 100644 (file)
@@ -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. */
index dc018f9..9e3c58a 100644 (file)
@@ -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;
 };
 
index 9e62f99..72815f6 100644 (file)
@@ -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_ */
index 3415e04..a811ad2 100644 (file)
@@ -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
index f5237cb..e9c02f9 100644 (file)
 
 #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_ */
index 5914d15..aa6ad71 100644 (file)
@@ -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
index 8d456e9..fd5721e 100644 (file)
@@ -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(&current->mm->mmap_sem);
-
-    userLogical = (gctSTRING)do_mmap_pgoff(gcvNULL,
-                    0L,
-                    mdl->numPages * PAGE_SIZE,
-                    PROT_READ | PROT_WRITE,
-                    MAP_SHARED,
-                    0);
-
-    up_write(&current->mm->mmap_sem);
-#endif
-
-    gcmkTRACE_ZONE(
-        gcvLEVEL_INFO, gcvZONE_OS,
-        "%s(%d): vmaAddr->%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(&current->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(&current->mm->mmap_sem);
-
-        gcmkTRACE_ZONE(
-            gcvLEVEL_INFO, gcvZONE_OS,
-            "%s(%d): find_vma error",
-            __FUNCTION__, __LINE__
-            );
-
-        gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_RESOURCES);
-        return gcvSTATUS_OUT_OF_RESOURCES;
-    }
+    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(&current->mm->mmap_sem);
-
         gcmkTRACE_ZONE(
             gcvLEVEL_WARNING, gcvZONE_OS,
             "%s(%d): dma_mmap_attrs error",
             __FUNCTION__, __LINE__
             );
 
-        gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY);
-        return gcvSTATUS_OUT_OF_MEMORY;
+        status = gcvSTATUS_OUT_OF_MEMORY;
     }
 
-    up_write(&current->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(&current->mm->mmap_sem);
+    userLogical = (gctPOINTER)do_mmap_pgoff(gcvNULL,
+                    0L,
+                    Mdl->numPages * PAGE_SIZE,
+                    PROT_READ | PROT_WRITE,
+                    MAP_SHARED,
+                    0);
+    up_write(&current->mm->mmap_sem);
+#endif
+
+    gcmkTRACE_ZONE(
+        gcvLEVEL_INFO, gcvZONE_OS,
+        "%s(%d): vmaAddr->%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(&current->mm->mmap_sem);
+    do
+    {
+        struct vm_area_struct *vma = find_vma(current->mm, (unsigned long)userLogical);
+        if (vma == gcvNULL)
+        {
+            up_write(&current->mm->mmap_sem);
+
+            gcmkTRACE_ZONE(
+                gcvLEVEL_INFO, gcvZONE_OS,
+                "%s(%d): find_vma error",
+                __FUNCTION__, __LINE__
+                );
+
+            gcmkERR_BREAK(gcvSTATUS_OUT_OF_RESOURCES);
+        }
+
+        gcmkERR_BREAK(_DmaMmap(Allocator, Mdl, 0, Mdl->numPages, vma));
+
+        *UserLogical = userLogical;
+    }
+    while (gcvFALSE);
+    up_write(&current->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. */
index 7eb2a84..49f0a30 100644 (file)
@@ -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
index 7242e20..cdf267e 100644 (file)
@@ -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(&current->mm->mmap_sem);
+    if (do_munmap(current->mm, (unsigned long)Logical, Size) < 0)
+    {
+        gcmkTRACE_ZONE(
+                gcvLEVEL_WARNING, gcvZONE_OS,
+                "%s(%d): do_munmap failed",
+                __FUNCTION__, __LINE__
+                );
+    }
+    up_write(&current->mm->mmap_sem);
+#endif
+}
+
+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(&current->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(&current->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(&current->mm->mmap_sem);
-
-    vma = find_vma(current->mm, (unsigned long)userLogical);
-
-    if (vma == gcvNULL)
+    do
     {
-        up_write(&current->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(&current->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(&current->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(&current->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(&current->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. */
index d788df2..3f37880 100644 (file)
@@ -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(&current->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(&current->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(&current->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(&current->mm->mmap_sem);
-
-    vma = find_vma(current->mm, vaddr);
-
-    if (!vma)
+    if (IS_ERR(userLogical))
     {
-        up_write(&current->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(&current->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(&current->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(&current->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,
index ef5c812..26a81b6 100644 (file)
@@ -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
index 9a17b8c..b623ae1 100644 (file)
@@ -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(&current->mm->mmap_sem);
-
-    userLogical = (gctSTRING)do_mmap_pgoff(gcvNULL,
-                    0L,
-                    mdl->numPages * PAGE_SIZE,
-                    PROT_READ | PROT_WRITE,
-                    MAP_SHARED,
-                    0);
-
-    up_write(&current->mm->mmap_sem);
-#endif
-
-    gcmkTRACE_ZONE(
-        gcvLEVEL_INFO, gcvZONE_OS,
-        "%s(%d): vmaAddr->%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(&current->mm->mmap_sem);
-
-    vma = find_vma(current->mm, (unsigned long)userLogical);
-
-    if (vma == gcvNULL)
-    {
-        up_write(&current->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(&current->mm->mmap_sem);
-
             gcmkTRACE_ZONE(
                 gcvLEVEL_WARNING, gcvZONE_OS,
                 "%s(%d): dma_mmap_attrs error",
                 __FUNCTION__, __LINE__
                 );
 
-            gcmkFOOTER_ARG("*status=%d", gcvSTATUS_OUT_OF_MEMORY);
-            return gcvSTATUS_OUT_OF_MEMORY;
+            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(&current->mm->mmap_sem);
-
-    gcmkVERIFY_OK(gckOS_CacheFlush(
-        os,
-        _GetProcessID(),
-        mdl,
-        gcvINVALID_ADDRESS,
-        (gctPOINTER)userLogical,
-        mdl->numPages * PAGE_SIZE
-        ));
-
-    *UserLogical = userLogical;
-
-    gcmkFOOTER_NO();
-    return gcvSTATUS_OK;
+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(&current->mm->mmap_sem);
+    userLogical = (gctPOINTER)do_mmap_pgoff(gcvNULL,
+                    0L,
+                    Mdl->numPages * PAGE_SIZE,
+                    PROT_READ | PROT_WRITE,
+                    MAP_SHARED,
+                    0);
+    up_write(&current->mm->mmap_sem);
+#endif
+
+    gcmkTRACE_ZONE(
+        gcvLEVEL_INFO, gcvZONE_OS,
+        "%s(%d): vmaAddr->%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(&current->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(&current->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. */
index 59a582d..a854d6e 100644 (file)
@@ -58,6 +58,7 @@
 
 #include "gc_hal_kernel_linux.h"
 #include <linux/slab.h>
+#include <linux/mm_types.h>
 
 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;
 
index 26a974a..f2138cf 100644 (file)
@@ -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(
index f5470d8..aab2712 100644 (file)
@@ -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,
index 42a5a0a..05474e7 100644 (file)
@@ -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 (file)
index 0000000..2291a89
--- /dev/null
@@ -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 <drm/drmP.h>
+#include <drm/drm_gem.h>
+#include <linux/dma-buf.h>
+#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
index 0578656..02a7185 100644 (file)
@@ -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);
 }
 /*******************************************************************************
 **
index 2c8cc4b..f050781 100644 (file)
@@ -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. */
index c17a8f5..4fcf696 100644 (file)
@@ -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;
index 1d27738..e7fedda 100644 (file)
@@ -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.
index 0f69de3..c728045 100644 (file)
@@ -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;
index db1a26b..f032e7a 100644 (file)
@@ -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;
 }