diff --git a/src/freedreno/.gitlab-ci/reference/crash.log b/src/freedreno/.gitlab-ci/reference/crash.log
index dafb3b3e59f..2df17053fdc 100644
--- a/src/freedreno/.gitlab-ci/reference/crash.log
+++ b/src/freedreno/.gitlab-ci/reference/crash.log
@@ -7144,7 +7144,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d)
deadbeef HLSQ_2D_EVENT_CMD: { STATE_ID = 0xbe | EVENT = 0x6f | 0xdead0080 }
- cluster-name: CLUSTER_SP_PS
- context: 0
- 05100000 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | UNK24 | PIXLODENABLE | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 0 | BRANCHSTACK = 0 }
+ 05100000 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | INOUTREGOVERLAP | PIXLODENABLE | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 0 | BRANCHSTACK = 0 }
00000000 SP_FS_BRANCH_COND: 0
00000000 SP_FS_OBJ_FIRST_EXEC_OFFSET: 0
1af864bdb43d8 SP_FS_OBJ_START: 0x1af864bdb43d8
@@ -7212,7 +7212,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d)
00000000 0xaa30: 00000000
00000000 0xaa31: 00000000
- context: 1
- 05100000 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | UNK24 | PIXLODENABLE | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 0 | BRANCHSTACK = 0 }
+ 05100000 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | INOUTREGOVERLAP | PIXLODENABLE | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 0 | BRANCHSTACK = 0 }
00000000 SP_FS_BRANCH_COND: 0
00000000 SP_FS_OBJ_FIRST_EXEC_OFFSET: 0
1af864bdb43d8 SP_FS_OBJ_START: 0x1af864bdb43d8
diff --git a/src/freedreno/.gitlab-ci/reference/crash_prefetch.log b/src/freedreno/.gitlab-ci/reference/crash_prefetch.log
index 5cdf3c2da33..b75b0af4d54 100644
--- a/src/freedreno/.gitlab-ci/reference/crash_prefetch.log
+++ b/src/freedreno/.gitlab-ci/reference/crash_prefetch.log
@@ -2874,7 +2874,7 @@ got cmdszdw=38
+ 00000000 SP_HS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
+ 00000000 SP_DS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
+ 00000000 SP_GS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
-!+ 81100300 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | UNK24 | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 6 | BRANCHSTACK = 0 }
+!+ 81100300 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | INOUTREGOVERLAP | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 6 | BRANCHSTACK = 0 }
+ 00000000 SP_FS_OBJ_FIRST_EXEC_OFFSET: 0
!+ 1001e7080 SP_FS_OBJ_START: 0x1001e7080 base=1001e7000, offset=128, size=131072
00000001001e7080: 0000: 00000000 200c4000 00000001 200c4001 00000000 00000100 10000000 40700000
@@ -3588,7 +3588,7 @@ got cmdszdw=38
+ 00000000 SP_HS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
+ 00000000 SP_DS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
+ 00000000 SP_GS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
- + 81100300 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | UNK24 | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 6 | BRANCHSTACK = 0 }
+ + 81100300 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | INOUTREGOVERLAP | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 6 | BRANCHSTACK = 0 }
+ 00000000 SP_FS_OBJ_FIRST_EXEC_OFFSET: 0
!+ 1001e8580 SP_FS_OBJ_START: 0x1001e8580 base=1001e7000, offset=5504, size=131072
00000001001e8580: 0000: 00000000 200c4000 00000001 200c4001 00000000 00000100 10000000 40700000
@@ -4313,7 +4313,7 @@ got cmdszdw=38
+ 00000000 SP_HS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
+ 00000000 SP_DS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
+ 00000000 SP_GS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
- + 81100300 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | UNK24 | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 6 | BRANCHSTACK = 0 }
+ + 81100300 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | INOUTREGOVERLAP | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 6 | BRANCHSTACK = 0 }
+ 00000000 SP_FS_OBJ_FIRST_EXEC_OFFSET: 0
!+ 1001e9a80 SP_FS_OBJ_START: 0x1001e9a80 base=1001e7000, offset=10880, size=131072
00000001001e9a80: 0000: 00000000 200c4000 00000001 200c4001 00000000 00000100 10000000 40700000
@@ -4963,7 +4963,7 @@ ESTIMATED CRASH LOCATION!
+ 00000000 SP_HS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
+ 00000000 SP_DS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
+ 00000000 SP_GS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
- + 81100300 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | UNK24 | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 6 | BRANCHSTACK = 0 }
+ + 81100300 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | INOUTREGOVERLAP | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 6 | BRANCHSTACK = 0 }
+ 00000000 SP_FS_OBJ_FIRST_EXEC_OFFSET: 0
!+ 1001eaf80 SP_FS_OBJ_START: 0x1001eaf80 base=1001e7000, offset=16256, size=131072
00000001001eaf80: 0000: 00000000 200c4000 00000001 200c4001 00000000 00000100 10000000 40700000
@@ -18920,7 +18920,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d)
deadbeef HLSQ_2D_EVENT_CMD: { STATE_ID = 0xbe | EVENT = 0x6f | 0xdead0080 }
- cluster-name: CLUSTER_SP_PS
- context: 0
- 81100300 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | UNK24 | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 6 | BRANCHSTACK = 0 }
+ 81100300 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | INOUTREGOVERLAP | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 6 | BRANCHSTACK = 0 }
00000000 SP_FS_BRANCH_COND: 0
00000000 SP_FS_OBJ_FIRST_EXEC_OFFSET: 0
1001e8580 SP_FS_OBJ_START: 0x1001e8580 base=1001e7000, offset=5504, size=131072
@@ -18988,7 +18988,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d)
00000000 0xaa30: 00000000
00000000 0xaa31: 00000000
- context: 1
- 81100300 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | UNK24 | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 6 | BRANCHSTACK = 0 }
+ 81100300 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | INOUTREGOVERLAP | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 6 | BRANCHSTACK = 0 }
00000000 SP_FS_BRANCH_COND: 0
00000000 SP_FS_OBJ_FIRST_EXEC_OFFSET: 0
1001e8580 SP_FS_OBJ_START: 0x1001e8580 base=1001e7000, offset=5504, size=131072
diff --git a/src/freedreno/.gitlab-ci/reference/dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list.log b/src/freedreno/.gitlab-ci/reference/dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list.log
index 0a0b1bb6cae..ef7641201a8 100644
--- a/src/freedreno/.gitlab-ci/reference/dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list.log
+++ b/src/freedreno/.gitlab-ci/reference/dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list.log
@@ -840,7 +840,7 @@ cmdstream[0]: 265 dwords
HLSQ_GS_CNTL: { CONSTLEN = 0 }
0000000001054208: 0000: 48b80301 00000000
write SP_FS_CTRL_REG0 (a980)
- SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | VARYING | UNK24 | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 2 | BRANCHSTACK = 0 }
+ SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | VARYING | INOUTREGOVERLAP | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 2 | BRANCHSTACK = 0 }
0000000001054210: 0000: 40a98001 81500100
write SP_FS_CONFIG (ab04)
SP_FS_CONFIG: { ENABLED | NTEX = 0 | NSAMP = 0 | NIBO = 0 }
@@ -1448,7 +1448,7 @@ cmdstream[0]: 265 dwords
+ 00000000 SP_HS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
+ 00000000 SP_DS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
+ 00000000 SP_GS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
-!+ 81500100 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | VARYING | UNK24 | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 2 | BRANCHSTACK = 0 }
+!+ 81500100 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | VARYING | INOUTREGOVERLAP | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 2 | BRANCHSTACK = 0 }
!+ 01054080 SP_FS_OBJ_START: 0x1054080 base=1054000, offset=128, size=12288
0000000001054080: 0000: 00002000 47300002 00002001 47300003 00002002 47300004 00002003 47308005
00000000010540a0: 0020: 00000000 03000000 00000000 00000000 00000000 00000000 00000000 00000000
diff --git a/src/freedreno/.gitlab-ci/reference/fd-clouds.log b/src/freedreno/.gitlab-ci/reference/fd-clouds.log
index 3cc99d569bb..cb22eda2557 100644
--- a/src/freedreno/.gitlab-ci/reference/fd-clouds.log
+++ b/src/freedreno/.gitlab-ci/reference/fd-clouds.log
@@ -685,7 +685,7 @@ cmdstream[0]: 1023 dwords
HLSQ_FS_CNTL_0: { THREADSIZE = THREAD128 }
00000000011210b8: 0000: 48b98001 00000001
write SP_FS_CTRL_REG0 (a980)
- SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | UNK24 | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 1 | BRANCHSTACK = 0 }
+ SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | INOUTREGOVERLAP | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 1 | BRANCHSTACK = 0 }
00000000011210c0: 0000: 40a98001 81100080
write SP_FS_OBJ_FIRST_EXEC_OFFSET (a982)
SP_FS_OBJ_FIRST_EXEC_OFFSET: 0
@@ -1084,7 +1084,7 @@ cmdstream[0]: 1023 dwords
+ 00000000 SP_DS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
+ 00000000 SP_GS_PRIM_SIZE: 0
+ 00000000 SP_GS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
-!+ 81100080 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | UNK24 | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 1 | BRANCHSTACK = 0 }
+!+ 81100080 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | INOUTREGOVERLAP | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 1 | BRANCHSTACK = 0 }
+ 00000000 SP_FS_OBJ_FIRST_EXEC_OFFSET: 0
+ 00000000 SP_SRGB_CNTL: { 0 }
!+ 0000000f SP_FS_RENDER_COMPONENTS: { RT0 = 0xf | RT1 = 0 | RT2 = 0 | RT3 = 0 | RT4 = 0 | RT5 = 0 | RT6 = 0 | RT7 = 0 }
@@ -1969,7 +1969,7 @@ cmdstream[0]: 1023 dwords
HLSQ_FS_CNTL_0: { THREADSIZE = THREAD128 }
00000000011200b8: 0000: 48b98001 00000001
write SP_FS_CTRL_REG0 (a980)
- SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | VARYING | UNK24 | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 19 | BRANCHSTACK = 2 }
+ SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | VARYING | INOUTREGOVERLAP | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 19 | BRANCHSTACK = 2 }
00000000011200c0: 0000: 40a98001 81508980
write SP_FS_OBJ_FIRST_EXEC_OFFSET (a982)
SP_FS_OBJ_FIRST_EXEC_OFFSET: 0
@@ -5278,7 +5278,7 @@ cmdstream[0]: 1023 dwords
+ 00000000 SP_DS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
+ 00000000 SP_GS_PRIM_SIZE: 0
+ 00000000 SP_GS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
-!+ 81508980 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | VARYING | UNK24 | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 19 | BRANCHSTACK = 2 }
+!+ 81508980 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | VARYING | INOUTREGOVERLAP | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 19 | BRANCHSTACK = 2 }
+ 00000000 SP_FS_OBJ_FIRST_EXEC_OFFSET: 0
!+ 01013000 SP_FS_OBJ_START: 0x1013000 base=1013000, offset=0, size=11264
0000000001013000: 0000: 40400000 204cc000 00000000 204cc006 3e99999a 204cc004 20080014 42700008
diff --git a/src/freedreno/.gitlab-ci/reference/prefetch-test.log b/src/freedreno/.gitlab-ci/reference/prefetch-test.log
index fdf02b1bfb2..2af723e8d5a 100644
--- a/src/freedreno/.gitlab-ci/reference/prefetch-test.log
+++ b/src/freedreno/.gitlab-ci/reference/prefetch-test.log
@@ -3204,7 +3204,7 @@ got cmdszdw=416
+ 00000000 SP_DS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
+ 00000000 SP_GS_PRIM_SIZE: 0
+ 00000000 SP_GS_CONFIG: { NTEX = 0 | NSAMP = 0 | NIBO = 0 }
-!+ 85508180 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | VARYING | UNK24 | PIXLODENABLE | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 3 | BRANCHSTACK = 2 }
+!+ 85508180 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | VARYING | INOUTREGOVERLAP | PIXLODENABLE | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 3 | BRANCHSTACK = 2 }
+ 00000000 SP_FS_OBJ_FIRST_EXEC_OFFSET: 0
!+ 10372c000 SP_FS_OBJ_START: 0x10372c000 base=10372c000, offset=0, size=4096
000000010372c000: 0000: 00002000 473080fc 0000000e 03820000 0000000d 02820000 0000b800 20488007
@@ -152915,7 +152915,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d)
deadbeef HLSQ_2D_EVENT_CMD: { STATE_ID = 0xbe | EVENT = 0x6f | 0xdead0080 }
- cluster-name: CLUSTER_SP_PS
- context: 0
- 85508180 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | VARYING | UNK24 | PIXLODENABLE | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 3 | BRANCHSTACK = 2 }
+ 85508180 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | VARYING | INOUTREGOVERLAP | PIXLODENABLE | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 3 | BRANCHSTACK = 2 }
00000000 SP_FS_BRANCH_COND: 0
00000000 SP_FS_OBJ_FIRST_EXEC_OFFSET: 0
10372c000 SP_FS_OBJ_START: 0x10372c000 base=10372c000, offset=0, size=4096
@@ -152983,7 +152983,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d)
00000000 0xaa30: 00000000
00000000 0xaa31: 00000000
- context: 1
- 85508180 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | VARYING | UNK24 | PIXLODENABLE | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 3 | BRANCHSTACK = 2 }
+ 85508180 SP_FS_CTRL_REG0: { THREADSIZE = THREAD128 | VARYING | INOUTREGOVERLAP | PIXLODENABLE | MERGEDREGS | THREADMODE = MULTI | HALFREGFOOTPRINT = 0 | FULLREGFOOTPRINT = 3 | BRANCHSTACK = 2 }
00000000 SP_FS_BRANCH_COND: 0
00000000 SP_FS_OBJ_FIRST_EXEC_OFFSET: 0
10372c000 SP_FS_OBJ_START: 0x10372c000 base=10372c000, offset=0, size=4096
diff --git a/src/freedreno/registers/adreno/a6xx.xml b/src/freedreno/registers/adreno/a6xx.xml
index 63207b560f9..3af24458d7d 100644
--- a/src/freedreno/registers/adreno/a6xx.xml
+++ b/src/freedreno/registers/adreno/a6xx.xml
@@ -4964,8 +4964,7 @@ to upconvert to 32b float internally?
fine derivatives and quad subgroup ops.
-
-
+
diff --git a/src/freedreno/vulkan/tu_shader.cc b/src/freedreno/vulkan/tu_shader.cc
index 541e5e5a26f..1b811c33e22 100644
--- a/src/freedreno/vulkan/tu_shader.cc
+++ b/src/freedreno/vulkan/tu_shader.cc
@@ -1338,8 +1338,10 @@ tu6_emit_xs(struct tu_cs *cs,
.threadsize = thrsz,
.varying = xs->total_in != 0,
.lodpixmask = xs->need_full_quad,
- /* unknown bit, seems unnecessary */
- .unk24 = true,
+ /* inoutregoverlap had no effect on perf in anholt's testing:
+ * https://gitlab.freedesktop.org/anholt/mesa/-/commits/tu-inout-reg
+ */
+ .inoutregoverlap = true,
.pixlodenable = xs->need_pixlod,
.earlypreamble = xs->early_preamble,
.mergedregs = xs->mergedregs,
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_program.cc b/src/gallium/drivers/freedreno/a6xx/fd6_program.cc
index 08439fffbfe..23924bfbdd5 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_program.cc
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_program.cc
@@ -163,8 +163,7 @@ fd6_emit_shader(struct fd_context *ctx, struct fd_ringbuffer *ring,
.threadsize = thrsz,
.varying = so->total_in != 0,
.lodpixmask = so->need_full_quad,
- /* unknown bit, seems unnecessary */
- .unk24 = true,
+ .inoutregoverlap = true,
.pixlodenable = so->need_pixlod,
.earlypreamble = so->early_preamble,
.mergedregs = so->mergedregs,