00000000 0xa630: 00000000
00100000 RB_DBG_ECO_CNTL: 0x100000
00000001 RB_ADDR_MODE_CNTL: ADDR_64B
- 00000000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_OFFSET = 0 | COLOR_OFFSET = 0 }
+ 00000000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_CACHE_SIZE = 0 | DEPTH_OFFSET = 0 | COLOR_CACHE_SIZE = CCU_COLOR_CACHE_SIZE_FULL | COLOR_OFFSET = 0 }
00000004 RB_NC_MODE_CNTL: { LOWER_BIT = 2 | UPPER_BIT = 0 }
00000000 RB_PERFCTR_RB_SEL[0]+0: 00000000
00000000 RB_PERFCTR_RB_SEL[0x1]+0: 00000000
- cluster-name: CLUSTER_SP_PS
- context: 0
00000001 HLSQ_FS_CNTL_0: { THREADSIZE = THREAD128 }
- 00000007 HLSQ_CONTROL_1_REG: 0x7
+ 00000007 HLSQ_CONTROL_1_REG: { PRIMALLOCTHRESHOLD = 7 }
fcfcfcfc HLSQ_CONTROL_2_REG: { FACEREGID = r63.x | SAMPLEID = r63.x | SAMPLEMASK = r63.x | CENTERRHW = r63.x }
fcfcfcfc HLSQ_CONTROL_3_REG: { IJ_PERSP_PIXEL = r63.x | IJ_LINEAR_PIXEL = r63.x | IJ_PERSP_CENTROID = r63.x | IJ_LINEAR_CENTROID = r63.x }
fcfcfcfc HLSQ_CONTROL_4_REG: { IJ_PERSP_SAMPLE = r63.x | IJ_LINEAR_SAMPLE = r63.x | XYCOORDREGID = r63.x | ZWCOORDREGID = r63.x }
00000000 HLSQ_CS_BINDLESS_BASE[0x4].DESCRIPTOR: { DESC_SIZE = 0 | ADDR = 0 }
- context: 1
00000001 HLSQ_FS_CNTL_0: { THREADSIZE = THREAD128 }
- 00000007 HLSQ_CONTROL_1_REG: 0x7
+ 00000007 HLSQ_CONTROL_1_REG: { PRIMALLOCTHRESHOLD = 7 }
fcfcfcfc HLSQ_CONTROL_2_REG: { FACEREGID = r63.x | SAMPLEID = r63.x | SAMPLEMASK = r63.x | CENTERRHW = r63.x }
fcfcfcfc HLSQ_CONTROL_3_REG: { IJ_PERSP_PIXEL = r63.x | IJ_LINEAR_PIXEL = r63.x | IJ_PERSP_CENTROID = r63.x | IJ_LINEAR_CENTROID = r63.x }
fcfcfcfc HLSQ_CONTROL_4_REG: { IJ_PERSP_SAMPLE = r63.x | IJ_LINEAR_SAMPLE = r63.x | XYCOORDREGID = r63.x | ZWCOORDREGID = r63.x }
00000000 0xa630: 00000000
00100000 RB_DBG_ECO_CNTL: 0x100000
00000001 RB_ADDR_MODE_CNTL: ADDR_64B
- 08000000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_OFFSET = 0 | COLOR_OFFSET = 0x10000 }
+ 08000000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_CACHE_SIZE = 0 | DEPTH_OFFSET = 0 | COLOR_CACHE_SIZE = CCU_COLOR_CACHE_SIZE_FULL | COLOR_OFFSET = 0x10000 }
00000002 RB_NC_MODE_CNTL: { LOWER_BIT = 1 | UPPER_BIT = 0 }
00000000 RB_PERFCTR_RB_SEL[0]+0: 00000000
00000000 RB_PERFCTR_RB_SEL[0x1]+0: 00000000
+ 00000000 RB_2D_SRC_SOLID_C3: 0
!+ 00000001 RB_UNKNOWN_8E01: 0x1
!+ 00100000 RB_DBG_ECO_CNTL: 0x100000
-!+ 08000000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_OFFSET = 0 | COLOR_OFFSET = 0x10000 }
+!+ 08000000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_CACHE_SIZE = 0 | DEPTH_OFFSET = 0 | COLOR_CACHE_SIZE = CCU_COLOR_CACHE_SIZE_FULL | COLOR_OFFSET = 0x10000 }
+ 00000000 VPC_UNKNOWN_9210: 0
+ 00000000 VPC_UNKNOWN_9211: 0
+ 00000000 VPC_POINT_COORD_INVERT: { 0 }
+ 00000000 RB_UNKNOWN_88F0: 0
+ 00000001 RB_UNKNOWN_8E01: 0x1
+ 00100000 RB_DBG_ECO_CNTL: 0x100000
- + 08000000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_OFFSET = 0 | COLOR_OFFSET = 0x10000 }
+ + 08000000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_CACHE_SIZE = 0 | DEPTH_OFFSET = 0 | COLOR_CACHE_SIZE = CCU_COLOR_CACHE_SIZE_FULL | COLOR_OFFSET = 0x10000 }
+ 00000000 VPC_UNKNOWN_9210: 0
+ 00000000 VPC_UNKNOWN_9211: 0
+ 00000000 VPC_POINT_COORD_INVERT: { 0 }
+ 00000000 HLSQ_DS_CNTL: { CONSTLEN = 0 }
+ 00000000 HLSQ_GS_CNTL: { CONSTLEN = 0 }
!+ 00000001 HLSQ_FS_CNTL_0: { THREADSIZE = THREAD128 }
-!+ 00000007 HLSQ_CONTROL_1_REG: 0x7
+!+ 00000007 HLSQ_CONTROL_1_REG: { PRIMALLOCTHRESHOLD = 7 }
!+ fcfcfcfc HLSQ_CONTROL_2_REG: { FACEREGID = r63.x | SAMPLEID = r63.x | SAMPLEMASK = r63.x | CENTERRHW = r63.x }
!+ fcfcfcfc HLSQ_CONTROL_3_REG: { IJ_PERSP_PIXEL = r63.x | IJ_LINEAR_PIXEL = r63.x | IJ_PERSP_CENTROID = r63.x | IJ_LINEAR_CENTROID = r63.x }
!+ 0200fcfc HLSQ_CONTROL_4_REG: { IJ_PERSP_SAMPLE = r63.x | IJ_LINEAR_SAMPLE = r63.x | XYCOORDREGID = r0.x | ZWCOORDREGID = r0.z }
+ 00000000 HLSQ_DS_CNTL: { CONSTLEN = 0 }
+ 00000000 HLSQ_GS_CNTL: { CONSTLEN = 0 }
+ 00000001 HLSQ_FS_CNTL_0: { THREADSIZE = THREAD128 }
- + 00000007 HLSQ_CONTROL_1_REG: 0x7
+ + 00000007 HLSQ_CONTROL_1_REG: { PRIMALLOCTHRESHOLD = 7 }
+ fcfcfcfc HLSQ_CONTROL_2_REG: { FACEREGID = r63.x | SAMPLEID = r63.x | SAMPLEMASK = r63.x | CENTERRHW = r63.x }
+ fcfcfcfc HLSQ_CONTROL_3_REG: { IJ_PERSP_PIXEL = r63.x | IJ_LINEAR_PIXEL = r63.x | IJ_PERSP_CENTROID = r63.x | IJ_LINEAR_CENTROID = r63.x }
+ 0200fcfc HLSQ_CONTROL_4_REG: { IJ_PERSP_SAMPLE = r63.x | IJ_LINEAR_SAMPLE = r63.x | XYCOORDREGID = r0.x | ZWCOORDREGID = r0.z }
+ 00000000 HLSQ_DS_CNTL: { CONSTLEN = 0 }
+ 00000000 HLSQ_GS_CNTL: { CONSTLEN = 0 }
+ 00000001 HLSQ_FS_CNTL_0: { THREADSIZE = THREAD128 }
- + 00000007 HLSQ_CONTROL_1_REG: 0x7
+ + 00000007 HLSQ_CONTROL_1_REG: { PRIMALLOCTHRESHOLD = 7 }
+ fcfcfcfc HLSQ_CONTROL_2_REG: { FACEREGID = r63.x | SAMPLEID = r63.x | SAMPLEMASK = r63.x | CENTERRHW = r63.x }
+ fcfcfcfc HLSQ_CONTROL_3_REG: { IJ_PERSP_PIXEL = r63.x | IJ_LINEAR_PIXEL = r63.x | IJ_PERSP_CENTROID = r63.x | IJ_LINEAR_CENTROID = r63.x }
+ 0200fcfc HLSQ_CONTROL_4_REG: { IJ_PERSP_SAMPLE = r63.x | IJ_LINEAR_SAMPLE = r63.x | XYCOORDREGID = r0.x | ZWCOORDREGID = r0.z }
+ 00000000 HLSQ_DS_CNTL: { CONSTLEN = 0 }
+ 00000000 HLSQ_GS_CNTL: { CONSTLEN = 0 }
+ 00000001 HLSQ_FS_CNTL_0: { THREADSIZE = THREAD128 }
- + 00000007 HLSQ_CONTROL_1_REG: 0x7
+ + 00000007 HLSQ_CONTROL_1_REG: { PRIMALLOCTHRESHOLD = 7 }
+ fcfcfcfc HLSQ_CONTROL_2_REG: { FACEREGID = r63.x | SAMPLEID = r63.x | SAMPLEMASK = r63.x | CENTERRHW = r63.x }
+ fcfcfcfc HLSQ_CONTROL_3_REG: { IJ_PERSP_PIXEL = r63.x | IJ_LINEAR_PIXEL = r63.x | IJ_PERSP_CENTROID = r63.x | IJ_LINEAR_CENTROID = r63.x }
+ 0200fcfc HLSQ_CONTROL_4_REG: { IJ_PERSP_SAMPLE = r63.x | IJ_LINEAR_SAMPLE = r63.x | XYCOORDREGID = r0.x | ZWCOORDREGID = r0.z }
!+ 00000000 RB_2D_DST_PITCH: 0
+ 00000001 RB_UNKNOWN_8E01: 0x1
+ 00100000 RB_DBG_ECO_CNTL: 0x100000
- + 08000000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_OFFSET = 0 | COLOR_OFFSET = 0x10000 }
+ + 08000000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_CACHE_SIZE = 0 | DEPTH_OFFSET = 0 | COLOR_CACHE_SIZE = CCU_COLOR_CACHE_SIZE_FULL | COLOR_OFFSET = 0x10000 }
+ 00000000 VPC_UNKNOWN_9210: 0
+ 00000000 VPC_UNKNOWN_9211: 0
+ 00000000 VPC_POINT_COORD_INVERT: { 0 }
- cluster-name: CLUSTER_SP_PS
- context: 0
00000001 HLSQ_FS_CNTL_0: { THREADSIZE = THREAD128 }
- 00000007 HLSQ_CONTROL_1_REG: 0x7
+ 00000007 HLSQ_CONTROL_1_REG: { PRIMALLOCTHRESHOLD = 7 }
fcfcfcfc HLSQ_CONTROL_2_REG: { FACEREGID = r63.x | SAMPLEID = r63.x | SAMPLEMASK = r63.x | CENTERRHW = r63.x }
fcfcfcfc HLSQ_CONTROL_3_REG: { IJ_PERSP_PIXEL = r63.x | IJ_LINEAR_PIXEL = r63.x | IJ_PERSP_CENTROID = r63.x | IJ_LINEAR_CENTROID = r63.x }
0200fcfc HLSQ_CONTROL_4_REG: { IJ_PERSP_SAMPLE = r63.x | IJ_LINEAR_SAMPLE = r63.x | XYCOORDREGID = r0.x | ZWCOORDREGID = r0.z }
00000000 HLSQ_CS_BINDLESS_BASE[0x4].DESCRIPTOR: { DESC_SIZE = 0 | ADDR = 0 }
- context: 1
00000001 HLSQ_FS_CNTL_0: { THREADSIZE = THREAD128 }
- 00000007 HLSQ_CONTROL_1_REG: 0x7
+ 00000007 HLSQ_CONTROL_1_REG: { PRIMALLOCTHRESHOLD = 7 }
fcfcfcfc HLSQ_CONTROL_2_REG: { FACEREGID = r63.x | SAMPLEID = r63.x | SAMPLEMASK = r63.x | CENTERRHW = r63.x }
fcfcfcfc HLSQ_CONTROL_3_REG: { IJ_PERSP_PIXEL = r63.x | IJ_LINEAR_PIXEL = r63.x | IJ_PERSP_CENTROID = r63.x | IJ_LINEAR_CENTROID = r63.x }
0200fcfc HLSQ_CONTROL_4_REG: { IJ_PERSP_SAMPLE = r63.x | IJ_LINEAR_SAMPLE = r63.x | XYCOORDREGID = r0.x | ZWCOORDREGID = r0.z }
opcode: CP_WAIT_FOR_IDLE (26) (1 dwords)
0000000001058010: 0000: 70268000
write RB_CCU_CNTL (8e07)
- RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_OFFSET = 0 | COLOR_OFFSET = 0x20000 }
+ RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_CACHE_SIZE = 0 | DEPTH_OFFSET = 0 | COLOR_CACHE_SIZE = CCU_COLOR_CACHE_SIZE_FULL | COLOR_OFFSET = 0x20000 }
0000000001058014: 0000: 408e0701 10000000
write RB_DBG_ECO_CNTL (8e04)
RB_DBG_ECO_CNTL: 0x100000
!+ 000000ff RB_2D_SRC_SOLID_C3: 0xff
+ 00000000 RB_UNKNOWN_8E01: 0
!+ 00100000 RB_DBG_ECO_CNTL: 0x100000
-!+ 10000000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_OFFSET = 0 | COLOR_OFFSET = 0x20000 }
+!+ 10000000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_CACHE_SIZE = 0 | DEPTH_OFFSET = 0 | COLOR_CACHE_SIZE = CCU_COLOR_CACHE_SIZE_FULL | COLOR_OFFSET = 0x20000 }
+ 00000000 VPC_UNKNOWN_9107: { 0 }
+ 00000000 VPC_UNKNOWN_9210: 0
+ 00000000 VPC_UNKNOWN_9211: 0
opcode: CP_WAIT_FOR_IDLE (26) (1 dwords)
000000000105832c: 0000: 70268000
write RB_CCU_CNTL (8e07)
- RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_OFFSET = 0 | GMEM | COLOR_OFFSET = 0xf8000 }
+ RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_CACHE_SIZE = 0 | DEPTH_OFFSET = 0 | COLOR_CACHE_SIZE = CCU_COLOR_CACHE_SIZE_QUARTER | COLOR_OFFSET = 0xf8000 }
0000000001058330: 0000: 408e0701 7c400000
write VPC_SO_DISABLE (9306)
VPC_SO_DISABLE: { 0 }
!+ 01012000 RB_BLIT_FLAG_DST: 0x1012000
!+ 00004001 RB_BLIT_FLAG_DST_PITCH: { PITCH = 64 | ARRAY_PITCH = 1024 }
!+ 00000003 RB_BLIT_INFO: { UNK0 | GMEM | CLEAR_MASK = 0 | LAST = 0 | BUFFER_ID = 0 }
-!+ 7c400000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_OFFSET = 0 | GMEM | COLOR_OFFSET = 0xf8000 }
+!+ 7c400000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_CACHE_SIZE = 0 | DEPTH_OFFSET = 0 | COLOR_CACHE_SIZE = CCU_COLOR_CACHE_SIZE_QUARTER | COLOR_OFFSET = 0xf8000 }
!+ 00000000 VPC_SO_DISABLE: { 0 }
+ 00000000 SP_TP_WINDOW_OFFSET: { X = 0 | Y = 0 }
+ 00000000 SP_WINDOW_OFFSET: { X = 0 | Y = 0 }
SP_FS_PREFETCH_CNTL: { COUNT = 0 | UNK6 = 0x1ff }
0000000001054344: 0000: 40a99e01 00007fc0
write HLSQ_CONTROL_1_REG (b982)
- HLSQ_CONTROL_1_REG: 0x7
+ HLSQ_CONTROL_1_REG: { PRIMALLOCTHRESHOLD = 7 }
HLSQ_CONTROL_2_REG: { FACEREGID = r63.x | SAMPLEID = r63.x | SAMPLEMASK = r63.x | CENTERRHW = r63.x }
HLSQ_CONTROL_3_REG: { IJ_PERSP_PIXEL = r0.x | IJ_LINEAR_PIXEL = r63.x | IJ_PERSP_CENTROID = r63.x | IJ_LINEAR_CENTROID = r63.x }
HLSQ_CONTROL_4_REG: { IJ_PERSP_SAMPLE = r63.x | IJ_LINEAR_SAMPLE = r63.x | XYCOORDREGID = r63.x | ZWCOORDREGID = r63.x }
+ 00000000 HLSQ_DS_CNTL: { CONSTLEN = 0 }
+ 00000000 HLSQ_GS_CNTL: { CONSTLEN = 0 }
!+ 00000003 HLSQ_FS_CNTL_0: { THREADSIZE = THREAD128 | VARYINGS }
-!+ 00000007 HLSQ_CONTROL_1_REG: 0x7
+!+ 00000007 HLSQ_CONTROL_1_REG: { PRIMALLOCTHRESHOLD = 7 }
!+ fcfcfcfc HLSQ_CONTROL_2_REG: { FACEREGID = r63.x | SAMPLEID = r63.x | SAMPLEMASK = r63.x | CENTERRHW = r63.x }
!+ fcfcfc00 HLSQ_CONTROL_3_REG: { IJ_PERSP_PIXEL = r0.x | IJ_LINEAR_PIXEL = r63.x | IJ_PERSP_CENTROID = r63.x | IJ_LINEAR_CENTROID = r63.x }
!+ fcfcfcfc HLSQ_CONTROL_4_REG: { IJ_PERSP_SAMPLE = r63.x | IJ_LINEAR_SAMPLE = r63.x | XYCOORDREGID = r63.x | ZWCOORDREGID = r63.x }
opcode: CP_WAIT_FOR_IDLE (26) (1 dwords)
0000000001d91278: 0000: 70268000
write RB_CCU_CNTL (8e07)
- RB_CCU_CNTL: { CONCURRENT_RESOLVE | DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_OFFSET = 0 | GMEM | COLOR_OFFSET = 0xf8000 }
+ RB_CCU_CNTL: { CONCURRENT_RESOLVE | DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_CACHE_SIZE = 0 | DEPTH_OFFSET = 0 | COLOR_CACHE_SIZE = CCU_COLOR_CACHE_SIZE_QUARTER | COLOR_OFFSET = 0xf8000 }
0000000001d9127c: 0000: 408e0701 7c400004
write RB_DEPTH_BUFFER_INFO (8872)
RB_DEPTH_BUFFER_INFO: { DEPTH_FORMAT = DEPTH6_NONE }
PC_HS_OUT_CNTL: { STRIDE_IN_VPC = 0 | CLIP_MASK = 0 }
0000000001121098: 0000: 409b0301 00000000
write HLSQ_CONTROL_1_REG (b982)
- HLSQ_CONTROL_1_REG: 0x7
+ HLSQ_CONTROL_1_REG: { PRIMALLOCTHRESHOLD = 7 }
HLSQ_CONTROL_2_REG: { FACEREGID = r63.x | SAMPLEID = r63.x | SAMPLEMASK = r63.x | CENTERRHW = r63.x }
HLSQ_CONTROL_3_REG: { IJ_PERSP_PIXEL = r63.x | IJ_LINEAR_PIXEL = r63.x | IJ_PERSP_CENTROID = r63.x | IJ_LINEAR_CENTROID = r63.x }
HLSQ_CONTROL_4_REG: { IJ_PERSP_SAMPLE = r63.x | IJ_LINEAR_SAMPLE = r63.x | XYCOORDREGID = r63.x | ZWCOORDREGID = r63.x }
+ 00000000 RB_MRT_FLAG_BUFFER[0].PITCH: { PITCH = 0 | ARRAY_PITCH = 0 }
!+ 00000001 RB_UNKNOWN_8E01: 0x1
+ 00000000 RB_DBG_ECO_CNTL: 0
-!+ 7c400004 RB_CCU_CNTL: { CONCURRENT_RESOLVE | DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_OFFSET = 0 | GMEM | COLOR_OFFSET = 0xf8000 }
+!+ 7c400004 RB_CCU_CNTL: { CONCURRENT_RESOLVE | DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_CACHE_SIZE = 0 | DEPTH_OFFSET = 0 | COLOR_CACHE_SIZE = CCU_COLOR_CACHE_SIZE_QUARTER | COLOR_OFFSET = 0xf8000 }
!+ 00ffff00 VPC_VS_CLIP_CNTL: { CLIP_MASK = 0 | CLIP_DIST_03_LOC = 255 | CLIP_DIST_47_LOC = 255 }
!+ 0000ffff VPC_VS_LAYER_CNTL: { LAYERLOC = 255 | VIEWLOC = 255 }
+ 00000000 VPC_UNKNOWN_9107: { 0 }
+ 00000000 HLSQ_DS_CNTL: { CONSTLEN = 0 }
+ 00000000 HLSQ_GS_CNTL: { CONSTLEN = 0 }
!+ 00000001 HLSQ_FS_CNTL_0: { THREADSIZE = THREAD128 }
-!+ 00000007 HLSQ_CONTROL_1_REG: 0x7
+!+ 00000007 HLSQ_CONTROL_1_REG: { PRIMALLOCTHRESHOLD = 7 }
!+ fcfcfcfc HLSQ_CONTROL_2_REG: { FACEREGID = r63.x | SAMPLEID = r63.x | SAMPLEMASK = r63.x | CENTERRHW = r63.x }
!+ fcfcfcfc HLSQ_CONTROL_3_REG: { IJ_PERSP_PIXEL = r63.x | IJ_LINEAR_PIXEL = r63.x | IJ_PERSP_CENTROID = r63.x | IJ_LINEAR_CENTROID = r63.x }
!+ fcfcfcfc HLSQ_CONTROL_4_REG: { IJ_PERSP_SAMPLE = r63.x | IJ_LINEAR_SAMPLE = r63.x | XYCOORDREGID = r63.x | ZWCOORDREGID = r63.x }
opcode: CP_WAIT_FOR_IDLE (26) (1 dwords)
0000000001d91938: 0000: 70268000
write RB_CCU_CNTL (8e07)
- RB_CCU_CNTL: { CONCURRENT_RESOLVE | DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_OFFSET = 0 | GMEM | COLOR_OFFSET = 0xf8000 }
+ RB_CCU_CNTL: { CONCURRENT_RESOLVE | DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_CACHE_SIZE = 0 | DEPTH_OFFSET = 0 | COLOR_CACHE_SIZE = CCU_COLOR_CACHE_SIZE_QUARTER | COLOR_OFFSET = 0xf8000 }
0000000001d9193c: 0000: 408e0701 7c400004
write VPC_SO_DISABLE (9306)
VPC_SO_DISABLE: { DISABLE }
+ 00000000 RB_BLIT_CLEAR_COLOR_DW2: 0
+ 00000000 RB_BLIT_CLEAR_COLOR_DW3: 0
!+ 000000f2 RB_BLIT_INFO: { GMEM | CLEAR_MASK = 0xf | LAST = 0 | BUFFER_ID = 0 }
- + 7c400004 RB_CCU_CNTL: { CONCURRENT_RESOLVE | DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_OFFSET = 0 | GMEM | COLOR_OFFSET = 0xf8000 }
+ + 7c400004 RB_CCU_CNTL: { CONCURRENT_RESOLVE | DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_CACHE_SIZE = 0 | DEPTH_OFFSET = 0 | COLOR_CACHE_SIZE = CCU_COLOR_CACHE_SIZE_QUARTER | COLOR_OFFSET = 0xf8000 }
!+ 00000001 VPC_SO_DISABLE: { DISABLE }
+ 00000001 PC_POWER_CNTL: 0x1
!+ 00000000 VFD_MODE_CNTL: { RENDER_MODE = RENDERING_PASS }
PC_HS_OUT_CNTL: { STRIDE_IN_VPC = 0 | CLIP_MASK = 0 }
0000000001120098: 0000: 409b0301 00000000
write HLSQ_CONTROL_1_REG (b982)
- HLSQ_CONTROL_1_REG: 0x7
+ HLSQ_CONTROL_1_REG: { PRIMALLOCTHRESHOLD = 7 }
HLSQ_CONTROL_2_REG: { FACEREGID = r63.x | SAMPLEID = r63.x | SAMPLEMASK = r63.x | CENTERRHW = r63.x }
HLSQ_CONTROL_3_REG: { IJ_PERSP_PIXEL = r63.x | IJ_LINEAR_PIXEL = r63.x | IJ_PERSP_CENTROID = r63.x | IJ_LINEAR_CENTROID = r63.x }
HLSQ_CONTROL_4_REG: { IJ_PERSP_SAMPLE = r63.x | IJ_LINEAR_SAMPLE = r63.x | XYCOORDREGID = r4.w | ZWCOORDREGID = r5.y }
+ 00000000 HLSQ_DS_CNTL: { CONSTLEN = 0 }
+ 00000000 HLSQ_GS_CNTL: { CONSTLEN = 0 }
+ 00000001 HLSQ_FS_CNTL_0: { THREADSIZE = THREAD128 }
- + 00000007 HLSQ_CONTROL_1_REG: 0x7
+ + 00000007 HLSQ_CONTROL_1_REG: { PRIMALLOCTHRESHOLD = 7 }
+ fcfcfcfc HLSQ_CONTROL_2_REG: { FACEREGID = r63.x | SAMPLEID = r63.x | SAMPLEMASK = r63.x | CENTERRHW = r63.x }
+ fcfcfcfc HLSQ_CONTROL_3_REG: { IJ_PERSP_PIXEL = r63.x | IJ_LINEAR_PIXEL = r63.x | IJ_PERSP_CENTROID = r63.x | IJ_LINEAR_CENTROID = r63.x }
!+ 1513fcfc HLSQ_CONTROL_4_REG: { IJ_PERSP_SAMPLE = r63.x | IJ_LINEAR_SAMPLE = r63.x | XYCOORDREGID = r4.w | ZWCOORDREGID = r5.y }
00000000 0xa630: 00000000
00000000 RB_DBG_ECO_CNTL: 0
00000001 RB_ADDR_MODE_CNTL: ADDR_64B
- 08000000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_OFFSET = 0 | COLOR_OFFSET = 0x10000 }
+ 08000000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_CACHE_SIZE = 0 | DEPTH_OFFSET = 0 | COLOR_CACHE_SIZE = CCU_COLOR_CACHE_SIZE_FULL | COLOR_OFFSET = 0x10000 }
00000002 RB_NC_MODE_CNTL: { LOWER_BIT = 1 | UPPER_BIT = 0 }
00000000 RB_PERFCTR_RB_SEL[0]+0: 00000000
00000000 RB_PERFCTR_RB_SEL[0x1]+0: 00000000
!+ 00004001 RB_MRT_FLAG_BUFFER[0].PITCH: { PITCH = 64 | ARRAY_PITCH = 1024 }
!+ 10000ad30 RB_SAMPLE_COUNT_ADDR: 0x10000ad30
!+ 00000000 RB_DBG_ECO_CNTL: 0
-!+ 08000000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_OFFSET = 0 | COLOR_OFFSET = 0x10000 }
+!+ 08000000 RB_CCU_CNTL: { DEPTH_OFFSET_HI = 0 | COLOR_OFFSET_HI = 0 | DEPTH_CACHE_SIZE = 0 | DEPTH_OFFSET = 0 | COLOR_CACHE_SIZE = CCU_COLOR_CACHE_SIZE_FULL | COLOR_OFFSET = 0x10000 }
!+ 00ffff00 VPC_VS_CLIP_CNTL: { CLIP_MASK = 0 | CLIP_DIST_03_LOC = 255 | CLIP_DIST_47_LOC = 255 }
!+ 0000ffff VPC_VS_LAYER_CNTL: { LAYERLOC = 255 | VIEWLOC = 255 }
+ 00000000 VPC_UNKNOWN_9107: { 0 }
+ 00000000 HLSQ_DS_CNTL: { CONSTLEN = 0 }
+ 00000000 HLSQ_GS_CNTL: { CONSTLEN = 0 }
!+ 00000003 HLSQ_FS_CNTL_0: { THREADSIZE = THREAD128 | VARYINGS }
-!+ 00000007 HLSQ_CONTROL_1_REG: 0x7
+!+ 00000007 HLSQ_CONTROL_1_REG: { PRIMALLOCTHRESHOLD = 7 }
!+ fcfcfcfc HLSQ_CONTROL_2_REG: { FACEREGID = r63.x | SAMPLEID = r63.x | SAMPLEMASK = r63.x | CENTERRHW = r63.x }
!+ fcfcfc00 HLSQ_CONTROL_3_REG: { IJ_PERSP_PIXEL = r0.x | IJ_LINEAR_PIXEL = r63.x | IJ_PERSP_CENTROID = r63.x | IJ_LINEAR_CENTROID = r63.x }
!+ fcfcfcfc HLSQ_CONTROL_4_REG: { IJ_PERSP_SAMPLE = r63.x | IJ_LINEAR_SAMPLE = r63.x | XYCOORDREGID = r63.x | ZWCOORDREGID = r63.x }
- cluster-name: CLUSTER_SP_PS
- context: 0
00000003 HLSQ_FS_CNTL_0: { THREADSIZE = THREAD128 | VARYINGS }
- 00000007 HLSQ_CONTROL_1_REG: 0x7
+ 00000007 HLSQ_CONTROL_1_REG: { PRIMALLOCTHRESHOLD = 7 }
fcfcfcfc HLSQ_CONTROL_2_REG: { FACEREGID = r63.x | SAMPLEID = r63.x | SAMPLEMASK = r63.x | CENTERRHW = r63.x }
fcfcfc00 HLSQ_CONTROL_3_REG: { IJ_PERSP_PIXEL = r0.x | IJ_LINEAR_PIXEL = r63.x | IJ_PERSP_CENTROID = r63.x | IJ_LINEAR_CENTROID = r63.x }
fcfcfcfc HLSQ_CONTROL_4_REG: { IJ_PERSP_SAMPLE = r63.x | IJ_LINEAR_SAMPLE = r63.x | XYCOORDREGID = r63.x | ZWCOORDREGID = r63.x }
00000000 HLSQ_CS_BINDLESS_BASE[0x4].DESCRIPTOR: { DESC_SIZE = 0 | ADDR = 0 }
- context: 1
00000003 HLSQ_FS_CNTL_0: { THREADSIZE = THREAD128 | VARYINGS }
- 00000007 HLSQ_CONTROL_1_REG: 0x7
+ 00000007 HLSQ_CONTROL_1_REG: { PRIMALLOCTHRESHOLD = 7 }
fcfcfcfc HLSQ_CONTROL_2_REG: { FACEREGID = r63.x | SAMPLEID = r63.x | SAMPLEMASK = r63.x | CENTERRHW = r63.x }
fcfcfc00 HLSQ_CONTROL_3_REG: { IJ_PERSP_PIXEL = r0.x | IJ_LINEAR_PIXEL = r63.x | IJ_PERSP_CENTROID = r63.x | IJ_LINEAR_CENTROID = r63.x }
fcfcfcfc HLSQ_CONTROL_4_REG: { IJ_PERSP_SAMPLE = r63.x | IJ_LINEAR_SAMPLE = r63.x | XYCOORDREGID = r63.x | ZWCOORDREGID = r63.x }
* different views.
*/
bool has_per_view_viewport;
+ bool has_gmem_fast_clear;
+
+ /* Per CCU GMEM amount reserved for each of DEPTH and COLOR caches
+ * in sysmem rendering. */
+ uint32_t sysmem_per_ccu_cache_size;
+ /* Per CCU GMEM amount reserved for color cache used by GMEM resolves
+ * which require color cache (non-BLIT event case).
+ * The size is expressed as a fraction of ccu cache used by sysmem
+ * rendering. If a GMEM resolve requires color cache, the driver needs
+ * to make sure it will not overwrite pixel data in GMEM that is still
+ * needed.
+ */
+ /* see enum a6xx_ccu_color_cache_size */
+ uint32_t gmem_ccu_color_cache_fraction;
+
+ /* Corresponds to HLSQ_CONTROL_1_REG::PRIMALLOCTHRESHOLD */
+ uint32_t prim_alloc_threshold;
struct {
uint32_t PC_POWER_CNTL;
A6XX = 6
A7XX = 7
+class CCUColorCacheFraction(Enum):
+ FULL = 0
+ HALF = 1
+ QUARTER = 2
+ EIGHTH = 3
+
class State(object):
def __init__(self):
self.a6xx.has_cp_reg_write = True
self.a6xx.has_8bpp_ubwc = True
+ self.a6xx.has_gmem_fast_clear = True
+
+ self.a6xx.sysmem_per_ccu_cache_size = 64 * 1024
+ self.a6xx.gmem_ccu_color_cache_fraction = CCUColorCacheFraction.QUARTER.value
+
+ self.a6xx.prim_alloc_threshold = 0x7
+
for name, val in template.items():
if name == "magic": # handled above
continue
fibers_per_sp = 128 * 16,
reg_size_vec4 = 96,
instr_cache_size = 64,
- concurrent_resolve = True,
+ concurrent_resolve = False,
indirect_draw_wfm_quirk = True,
depth_bounds_require_depth_test_quirk = True,
)
<!-- 0x8e00-0x8e03 invalid -->
<reg32 offset="0x8e04" name="RB_DBG_ECO_CNTL" usage="cmd"/> <!-- TODO: valid mask 0xfffffeff -->
<reg32 offset="0x8e05" name="RB_ADDR_MODE_CNTL" pos="0" type="a5xx_address_mode"/>
-
<!-- 0x02080000 in GMEM, zero otherwise? -->
<reg32 offset="0x8e06" name="RB_UNKNOWN_8E06" variants="A7XX-" usage="cmd"/>
+ <enum name="a6xx_ccu_color_cache_size">
+ <value value="0x0" name="CCU_COLOR_CACHE_SIZE_FULL"/>
+ <value value="0x1" name="CCU_COLOR_CACHE_SIZE_HALF"/>
+ <value value="0x2" name="CCU_COLOR_CACHE_SIZE_QUARTER"/>
+ <value value="0x3" name="CCU_COLOR_CACHE_SIZE_EIGHTH"/>
+ </enum>
<reg32 offset="0x8e07" name="RB_CCU_CNTL" usage="cmd">
+ <bitfield name="GMEM_FAST_CLEAR_DISABLE" pos="0" type="boolean"/>
<!-- concurrent resolves are apparently a 2-bit enum on a650+ -->
<bitfield name="CONCURRENT_RESOLVE" pos="2" type="boolean"/>
<bitfield name="DEPTH_OFFSET_HI" pos="7" type="hex"/>
<bitfield name="COLOR_OFFSET_HI" pos="9" type="hex"/>
+ <bitfield name="DEPTH_CACHE_SIZE" low="10" high="11" type="uint"/>
<!-- GMEM offset of CCU depth cache -->
<bitfield name="DEPTH_OFFSET" low="12" high="20" shr="12" type="hex"/>
- <bitfield name="GMEM" pos="22" type="boolean"/> <!-- set for GMEM path -->
+ <bitfield name="COLOR_CACHE_SIZE" low="21" high="22" type="a6xx_ccu_color_cache_size"/>
<!-- GMEM offset of CCU color cache
for GMEM rendering, we set it to GMEM size minus the minimum
CCU color cache size. CCU color cache will be needed in some
<reg32 offset="0xb980" type="a6xx_hlsq_fs_cntl_0" name="HLSQ_FS_CNTL_0" variants="A6XX" usage="rp_blit"/>
<reg32 offset="0xb981" name="HLSQ_UNKNOWN_B981" pos="0" type="boolean" variants="A6XX"/> <!-- never used by blob -->
<reg32 offset="0xb982" name="HLSQ_CONTROL_1_REG" low="0" high="2" variants="A6XX" usage="rp_blit">
- <!-- TODO: have test cases with either 0x3 or 0x7 -->
+ <!-- Sets the maximum number of primitives allowed in one FS wave minus one, similarly to the
+ A3xx field, except that it's not necessary to set it to anything but the maximum, since
+ the hardware will simply emit smaller waves when it runs out of space. -->
+ <bitfield name="PRIMALLOCTHRESHOLD" low="0" high="2" type="uint"/>
</reg32>
<reg32 offset="0xb983" name="HLSQ_CONTROL_2_REG" variants="A6XX" usage="rp_blit">
<bitfield name="FACEREGID" low="0" high="7" type="a3xx_regid"/>
<reg32 offset="0xb985" type="a6xx_hlsq_control_4_reg" name="HLSQ_CONTROL_4_REG" variants="A6XX" usage="rp_blit"/>
<reg32 offset="0xb986" type="a6xx_hlsq_control_5_reg" name="HLSQ_CONTROL_5_REG" variants="A6XX" usage="rp_blit"/>
<reg32 offset="0xb987" name="HLSQ_CS_CNTL" type="a6xx_hlsq_xs_cntl" variants="A6XX" usage="cmd"/>
-
<!-- Either 0 or 0x401, the non-zero value is only in a few of dEQP-VK.ssbo.phys.layout.3_level_*.*8vec4 -->
<reg32 offset="0xa9c5" name="HLSQ_UNKNOWN_A9C5" variants="A7XX-" usage="cmd"/>
-
<reg32 offset="0xa9c6" type="a6xx_hlsq_fs_cntl_0" name="HLSQ_FS_CNTL_0" variants="A7XX-" usage="rp_blit"/>
<reg32 offset="0xa9c7" name="HLSQ_CONTROL_1_REG" low="0" high="2" variants="A7XX-" usage="rp_blit">
- <!-- TODO: have test cases with either 0x3 or 0x7 -->
+ <bitfield name="PRIMALLOCTHRESHOLD" low="0" high="2" type="uint"/>
</reg32>
<reg32 offset="0xa9c8" name="HLSQ_CONTROL_2_REG" variants="A7XX-" usage="rp_blit">
<bitfield name="FACEREGID" low="0" high="7" type="a3xx_regid"/>
}
static struct fd_reg_pair
-rb_ccu_cntl(uint32_t color_offset, bool gmem)
+rb_ccu_cntl(struct tu_device *dev, uint32_t color_offset)
{
uint32_t color_offset_hi = color_offset >> 21;
color_offset &= 0x1fffff;
- return A6XX_RB_CCU_CNTL(
- .color_offset_hi = color_offset_hi,
- .gmem = gmem,
- .color_offset = color_offset,
- );
+ enum a6xx_ccu_color_cache_size cache_size =
+ (a6xx_ccu_color_cache_size)(dev->physical_device->info->a6xx.gmem_ccu_color_cache_fraction);
+ bool concurrent_resolve = dev->physical_device->info->a6xx.concurrent_resolve;
+ return A6XX_RB_CCU_CNTL(.gmem_fast_clear_disable =
+ !dev->physical_device->info->a6xx.has_gmem_fast_clear,
+ .concurrent_resolve = concurrent_resolve,
+ .depth_offset_hi = 0,
+ .color_offset_hi = color_offset_hi,
+ .depth_cache_size = 0,
+ .depth_offset = 0,
+ .color_cache_size = cache_size,
+ .color_offset = color_offset);
}
/* Cache flushes for things that use the color/depth read/write path (i.e.
tu6_emit_flushes(cmd_buffer, cs, &cmd_buffer->state.cache);
if (ccu_state != cmd_buffer->state.ccu_state) {
- struct tu_physical_device *phys_dev = cmd_buffer->device->physical_device;
+ struct tu_physical_device *phys_dev =
+ cmd_buffer->device->physical_device;
tu_cs_emit_regs(cs,
- rb_ccu_cntl(ccu_state == TU_CMD_CCU_GMEM ?
- phys_dev->ccu_offset_gmem :
- phys_dev->ccu_offset_bypass,
- ccu_state == TU_CMD_CCU_GMEM));
+ rb_ccu_cntl(cmd_buffer->device,
+ ccu_state == TU_CMD_CCU_GMEM ?
+ phys_dev->ccu_offset_gmem :
+ phys_dev->ccu_offset_bypass));
cmd_buffer->state.ccu_state = ccu_state;
}
}
cmd->state.cache.pending_flush_bits &=
~(TU_CMD_FLAG_WAIT_FOR_IDLE | TU_CMD_FLAG_CACHE_INVALIDATE);
- tu_cs_emit_regs(cs, rb_ccu_cntl(phys_dev->ccu_offset_bypass, false));
+ tu_cs_emit_regs(cs, rb_ccu_cntl(dev, phys_dev->ccu_offset_bypass));
cmd->state.ccu_state = TU_CMD_CCU_SYSMEM;
tu_cs_emit_write_reg(cs, REG_A6XX_RB_DBG_ECO_CNTL,
phys_dev->info->a6xx.magic.RB_DBG_ECO_CNTL);
goto fail_free_name;
}
switch (fd_dev_gen(&device->dev_id)) {
- case 6:
+ case 6: {
device->info = info;
- device->ccu_offset_bypass = device->info->num_ccu * A6XX_CCU_DEPTH_SIZE;
- device->ccu_offset_gmem = (device->gmem_size -
- device->info->num_ccu * A6XX_CCU_GMEM_COLOR_SIZE);
+ uint32_t depth_cache_size =
+ device->info->num_ccu * device->info->a6xx.sysmem_per_ccu_cache_size;
+ uint32_t color_cache_size =
+ (device->info->num_ccu *
+ device->info->a6xx.sysmem_per_ccu_cache_size) /
+ (1 << device->info->a6xx.gmem_ccu_color_cache_fraction);
+
+ device->ccu_offset_bypass = depth_cache_size;
+ device->ccu_offset_gmem = device->gmem_size - color_cache_size;
break;
+ }
default:
result = vk_startup_errorf(instance, VK_ERROR_INITIALIZATION_FAILED,
"device %s is unsupported", device->name);
}
tu_cs_emit_pkt4(cs, REG_A6XX_HLSQ_CONTROL_1_REG, 5);
- tu_cs_emit(cs, 0x7);
+ tu_cs_emit(cs, A6XX_HLSQ_CONTROL_1_REG_PRIMALLOCTHRESHOLD(
+ cs->device->physical_device->info->a6xx.prim_alloc_threshold));
tu_cs_emit(cs, A6XX_HLSQ_CONTROL_2_REG_FACEREGID(face_regid) |
A6XX_HLSQ_CONTROL_2_REG_SAMPLEID(samp_id_regid) |
A6XX_HLSQ_CONTROL_2_REG_SAMPLEMASK(smask_in_regid) |
void
fd6_emit_ccu_cntl(struct fd_ringbuffer *ring, struct fd_screen *screen, bool gmem)
{
+ enum a6xx_ccu_color_cache_size cache_size = (a6xx_ccu_color_cache_size)(screen->info->a6xx.gmem_ccu_color_cache_fraction);
uint32_t offset = gmem ? screen->ccu_offset_gmem : screen->ccu_offset_bypass;
uint32_t offset_hi = offset >> 21;
offset &= 0x1fffff;
- OUT_REG(ring, A6XX_RB_CCU_CNTL(
- .concurrent_resolve = gmem && screen->info->a6xx.concurrent_resolve,
- .color_offset_hi = offset_hi,
- .gmem = gmem,
- .color_offset = offset,
- ));
+ OUT_REG(ring,
+ A6XX_RB_CCU_CNTL(.gmem_fast_clear_disable =
+ !screen->info->a6xx.has_gmem_fast_clear,
+ .concurrent_resolve =
+ screen->info->a6xx.concurrent_resolve,
+ .depth_offset_hi = 0,
+ .color_offset_hi = offset_hi,
+ .depth_cache_size = 0,
+ .depth_offset = 0,
+ .color_cache_size = cache_size,
+ .color_offset = offset,
+ ));
}
template void fd6_emit_cs_state<A6XX>(struct fd_context *ctx, struct fd_ringbuffer *ring, struct fd6_compute_state *cs);
template <chip CHIP>
static void
-setup_stateobj(struct fd_ringbuffer *ring, struct fd_context *ctx,
- struct fd6_program_state *state,
+setup_stateobj(struct fd_screen *screen, struct fd_ringbuffer *ring,
+ struct fd_context *ctx, struct fd6_program_state *state,
const struct ir3_cache_key *cache_key,
bool binning_pass) assert_dt
{
A6XX_PC_VS_OUT_CNTL_CLIP_MASK(clip_cull_mask));
OUT_REG(ring,
- HLSQ_CONTROL_1_REG(CHIP, 0x7), /* XXX */
+ HLSQ_CONTROL_1_REG(CHIP,
+ screen->info->a6xx.prim_alloc_threshold),
HLSQ_CONTROL_2_REG(
CHIP,
.faceregid = face_regid,
}
setup_config_stateobj<CHIP>(ctx, state);
- setup_stateobj<CHIP>(state->binning_stateobj, ctx, state, key, true);
- setup_stateobj<CHIP>(state->stateobj, ctx, state, key, false);
+ setup_stateobj<CHIP>(screen, state->binning_stateobj, ctx, state, key, true);
+ setup_stateobj<CHIP>(screen, state->stateobj, ctx, state, key, false);
state->interp_stateobj = create_interp_stateobj(ctx, state);
const struct ir3_stream_output_info *stream_output =
screen->max_rts = A6XX_MAX_RENDER_TARGETS;
- screen->ccu_offset_bypass = screen->info->num_ccu * A6XX_CCU_DEPTH_SIZE;
- screen->ccu_offset_gmem = (screen->gmemsize_bytes -
- screen->info->num_ccu * A6XX_CCU_GMEM_COLOR_SIZE);
+ uint32_t depth_cache_size =
+ screen->info->num_ccu * screen->info->a6xx.sysmem_per_ccu_cache_size;
+ uint32_t color_cache_size =
+ (screen->info->num_ccu * screen->info->a6xx.sysmem_per_ccu_cache_size) /
+ (1 << screen->info->a6xx.gmem_ccu_color_cache_fraction);
+
+ screen->ccu_offset_bypass = depth_cache_size;
+ screen->ccu_offset_gmem = screen->gmemsize_bytes - color_cache_size;
/* Currently only FB_READ forces GMEM path, mostly because we'd have to
* deal with cmdstream patching otherwise..