From 3b1ca55b4019f69cfe72c4b60562953de45ec43d Mon Sep 17 00:00:00 2001 From: Zan Dobersek Date: Tue, 11 Mar 2025 09:27:33 +0100 Subject: [PATCH] freedreno/registers: add useful A6XX_SP_TP_MODE_CNTL bitfields Add additional bitfields for the A6XX_SP_TP_MODE_CNTL registers, ones that we already use and the texcoord rounding mode bitfield that we'll need for D3D-over-Vulkan implementations. Signed-off-by: Zan Dobersek Reviewed-by: Rob Clark Part-of: --- src/freedreno/.gitlab-ci/reference/crash.log | 8 ++++---- .../.gitlab-ci/reference/crash_prefetch.log | 14 +++++++------- ....indexed.indirect_draw_count.triangle_list.log | 4 ++-- src/freedreno/.gitlab-ci/reference/fd-clouds.log | 4 ++-- .../.gitlab-ci/reference/prefetch-test.log | 10 +++++----- src/freedreno/registers/adreno/a6xx.xml | 15 ++++++++++++++- src/freedreno/vulkan/tu_cmd_buffer.cc | 7 ++++--- src/gallium/drivers/freedreno/a6xx/fd6_emit.cc | 8 ++++++-- 8 files changed, 44 insertions(+), 26 deletions(-) diff --git a/src/freedreno/.gitlab-ci/reference/crash.log b/src/freedreno/.gitlab-ci/reference/crash.log index d94de12e716..ca46f5a534f 100644 --- a/src/freedreno/.gitlab-ci/reference/crash.log +++ b/src/freedreno/.gitlab-ci/reference/crash.log @@ -7066,7 +7066,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) 00000000 SP_TP_SAMPLE_LOCATION_0: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_SAMPLE_LOCATION_1: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_WINDOW_OFFSET: { X = 0 | Y = 0 } - 0000004c SP_TP_MODE_CNTL: { ISAMMODE = 0 | UNK3 = 0x13 } + 0000004c SP_TP_MODE_CNTL: { ISAMMODE = 0 | TEXCOORDROUNDMODE = COORD_ROUND_NEAREST_EVEN | NEARESTMIPSNAP = ROUND_CLAMP_TRUNCATE | 0x48 } deadbeef 0xb380: deadbeef deadbeef 0xb381: deadbeef deadbeef 0xb382: deadbeef @@ -7078,7 +7078,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) 00000000 SP_TP_SAMPLE_LOCATION_0: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_SAMPLE_LOCATION_1: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_WINDOW_OFFSET: { X = 0 | Y = 0 } - 0000004c SP_TP_MODE_CNTL: { ISAMMODE = 0 | UNK3 = 0x13 } + 0000004c SP_TP_MODE_CNTL: { ISAMMODE = 0 | TEXCOORDROUNDMODE = COORD_ROUND_NEAREST_EVEN | NEARESTMIPSNAP = ROUND_CLAMP_TRUNCATE | 0x48 } deadbeef 0xb380: deadbeef deadbeef 0xb381: deadbeef deadbeef 0xb382: deadbeef @@ -7377,7 +7377,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) 00000000 SP_TP_SAMPLE_LOCATION_0: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_SAMPLE_LOCATION_1: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_WINDOW_OFFSET: { X = 0 | Y = 0 } - 0000004c SP_TP_MODE_CNTL: { ISAMMODE = 0 | UNK3 = 0x13 } + 0000004c SP_TP_MODE_CNTL: { ISAMMODE = 0 | TEXCOORDROUNDMODE = COORD_ROUND_NEAREST_EVEN | NEARESTMIPSNAP = ROUND_CLAMP_TRUNCATE | 0x48 } deadbeef 0xb380: deadbeef deadbeef 0xb381: deadbeef deadbeef 0xb382: deadbeef @@ -7389,7 +7389,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) 00000000 SP_TP_SAMPLE_LOCATION_0: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_SAMPLE_LOCATION_1: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_WINDOW_OFFSET: { X = 0 | Y = 0 } - 0000004c SP_TP_MODE_CNTL: { ISAMMODE = 0 | UNK3 = 0x13 } + 0000004c SP_TP_MODE_CNTL: { ISAMMODE = 0 | TEXCOORDROUNDMODE = COORD_ROUND_NEAREST_EVEN | NEARESTMIPSNAP = ROUND_CLAMP_TRUNCATE | 0x48 } deadbeef 0xb380: deadbeef deadbeef 0xb381: deadbeef deadbeef 0xb382: deadbeef diff --git a/src/freedreno/.gitlab-ci/reference/crash_prefetch.log b/src/freedreno/.gitlab-ci/reference/crash_prefetch.log index 93e40c47a3f..47fe4d7adc5 100644 --- a/src/freedreno/.gitlab-ci/reference/crash_prefetch.log +++ b/src/freedreno/.gitlab-ci/reference/crash_prefetch.log @@ -2000,7 +2000,7 @@ got cmdszdw=38 + 00000000 SP_UNKNOWN_B182: 0 + 00000000 SP_UNKNOWN_B183: 0 !+ 100001100 SP_TP_BORDER_COLOR_BASE_ADDR: 0x100001100 base=100000000, offset=4352, size=532480 -!+ 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | UNK3 = 0x28 } +!+ 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | TEXCOORDROUNDMODE = COORD_TRUNCATE | NEARESTMIPSNAP = CLAMP_ROUND_TRUNCATE | DESTDATATYPEOVERRIDE } !+ 00108000 TPL1_DBG_ECO_CNTL: 0x108000 !+ 00000044 TPL1_UNKNOWN_B605: 68 !+ 000000fc HLSQ_CONTROL_5_REG: { LINELENGTHREGID = r63.x | FOVEATIONQUALITYREGID = r0.x } @@ -2310,7 +2310,7 @@ got cmdszdw=38 + 00000000 SP_UNKNOWN_B183: 0 + 100001100 SP_TP_BORDER_COLOR_BASE_ADDR: 0x100001100 base=100000000, offset=4352, size=532480 + 00000000 SP_TP_WINDOW_OFFSET: { X = 0 | Y = 0 } - + 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | UNK3 = 0x28 } + + 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | TEXCOORDROUNDMODE = COORD_TRUNCATE | NEARESTMIPSNAP = CLAMP_ROUND_TRUNCATE | DESTDATATYPEOVERRIDE } + 00000000 SP_WINDOW_OFFSET: { X = 0 | Y = 0 } + 00108000 TPL1_DBG_ECO_CNTL: 0x108000 + 00000044 TPL1_UNKNOWN_B605: 68 @@ -5190,7 +5190,7 @@ ESTIMATED CRASH LOCATION! + 00000000 SP_UNKNOWN_B182: 0 + 00000000 SP_UNKNOWN_B183: 0 + 100001100 SP_TP_BORDER_COLOR_BASE_ADDR: 0x100001100 base=100000000, offset=4352, size=532480 - + 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | UNK3 = 0x28 } + + 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | TEXCOORDROUNDMODE = COORD_TRUNCATE | NEARESTMIPSNAP = CLAMP_ROUND_TRUNCATE | DESTDATATYPEOVERRIDE } !+ 00500360 SP_PS_2D_SRC_INFO: { COLOR_FORMAT = FMT6_16_16_16_16_UNORM | TILE_MODE = TILE6_3 | COLOR_SWAP = WZYX | SAMPLES = MSAA_ONE | UNK20 | UNK22 } !+ 0020803f SP_PS_2D_SRC_SIZE: { WIDTH = 63 | HEIGHT = 65 } !+ 100082000 SP_PS_2D_SRC: 0x100082000 @@ -18842,7 +18842,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) 00000000 SP_TP_SAMPLE_LOCATION_0: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_SAMPLE_LOCATION_1: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_WINDOW_OFFSET: { X = 0 | Y = 0 } - 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | UNK3 = 0x28 } + 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | TEXCOORDROUNDMODE = COORD_TRUNCATE | NEARESTMIPSNAP = CLAMP_ROUND_TRUNCATE | DESTDATATYPEOVERRIDE } deadbeef 0xb380: deadbeef deadbeef 0xb381: deadbeef deadbeef 0xb382: deadbeef @@ -18854,7 +18854,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) 00000000 SP_TP_SAMPLE_LOCATION_0: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_SAMPLE_LOCATION_1: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_WINDOW_OFFSET: { X = 0 | Y = 0 } - 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | UNK3 = 0x28 } + 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | TEXCOORDROUNDMODE = COORD_TRUNCATE | NEARESTMIPSNAP = CLAMP_ROUND_TRUNCATE | DESTDATATYPEOVERRIDE } deadbeef 0xb380: deadbeef deadbeef 0xb381: deadbeef deadbeef 0xb382: deadbeef @@ -19153,7 +19153,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) 00000000 SP_TP_SAMPLE_LOCATION_0: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_SAMPLE_LOCATION_1: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_WINDOW_OFFSET: { X = 0 | Y = 0 } - 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | UNK3 = 0x28 } + 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | TEXCOORDROUNDMODE = COORD_TRUNCATE | NEARESTMIPSNAP = CLAMP_ROUND_TRUNCATE | DESTDATATYPEOVERRIDE } deadbeef 0xb380: deadbeef deadbeef 0xb381: deadbeef deadbeef 0xb382: deadbeef @@ -19165,7 +19165,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) 00000000 SP_TP_SAMPLE_LOCATION_0: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_SAMPLE_LOCATION_1: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_WINDOW_OFFSET: { X = 0 | Y = 0 } - 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | UNK3 = 0x28 } + 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | TEXCOORDROUNDMODE = COORD_TRUNCATE | NEARESTMIPSNAP = CLAMP_ROUND_TRUNCATE | DESTDATATYPEOVERRIDE } deadbeef 0xb380: deadbeef deadbeef 0xb381: deadbeef deadbeef 0xb382: deadbeef 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 17faa612ad5..a201c3057f1 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 @@ -174,7 +174,7 @@ cmdstream[0]: 265 dwords PC_UNKNOWN_9E72: 0 00000000010581bc: 0000: 409e7201 00000000 write SP_TP_MODE_CNTL (b309) - SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | UNK3 = 0x28 } + SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | TEXCOORDROUNDMODE = COORD_TRUNCATE | NEARESTMIPSNAP = CLAMP_ROUND_TRUNCATE | DESTDATATYPEOVERRIDE } 00000000010581c4: 0000: 40b30901 000000a2 write HLSQ_CONTROL_5_REG (b986) HLSQ_CONTROL_5_REG: { LINELENGTHREGID = r63.x | FOVEATIONQUALITYREGID = r0.x } @@ -343,7 +343,7 @@ cmdstream[0]: 265 dwords + 00000000 SP_UNKNOWN_B182: 0 + 00000000 SP_UNKNOWN_B183: 0 !+ 01011000 SP_TP_BORDER_COLOR_BASE_ADDR: 0x1011000 -!+ 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | UNK3 = 0x28 } +!+ 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | TEXCOORDROUNDMODE = COORD_TRUNCATE | NEARESTMIPSNAP = CLAMP_ROUND_TRUNCATE | DESTDATATYPEOVERRIDE } !+ 00100000 TPL1_DBG_ECO_CNTL: 0x100000 !+ 00000044 TPL1_UNKNOWN_B605: 68 !+ 000000fc HLSQ_CONTROL_5_REG: { LINELENGTHREGID = r63.x | FOVEATIONQUALITYREGID = r0.x } diff --git a/src/freedreno/.gitlab-ci/reference/fd-clouds.log b/src/freedreno/.gitlab-ci/reference/fd-clouds.log index eef5be87a8a..63e51d7d774 100644 --- a/src/freedreno/.gitlab-ci/reference/fd-clouds.log +++ b/src/freedreno/.gitlab-ci/reference/fd-clouds.log @@ -174,7 +174,7 @@ cmdstream[0]: 1023 dwords SP_TP_SAMPLE_CONFIG: { 0 } 0000000001d911bc: 0000: 48b30401 00000000 write SP_TP_MODE_CNTL (b309) - SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | UNK3 = 0x28 } + SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | TEXCOORDROUNDMODE = COORD_TRUNCATE | NEARESTMIPSNAP = CLAMP_ROUND_TRUNCATE | DESTDATATYPEOVERRIDE } 0000000001d911c4: 0000: 40b30901 000000a2 write RB_SAMPLE_CONFIG (8804) RB_SAMPLE_CONFIG: { 0 } @@ -1113,7 +1113,7 @@ cmdstream[0]: 1023 dwords !+ 00000004 SP_TP_DEST_MSAA_CNTL: { SAMPLES = MSAA_ONE | MSAA_DISABLE } + 00000000 SP_TP_SAMPLE_CONFIG: { 0 } + 00000000 SP_TP_WINDOW_OFFSET: { X = 0 | Y = 0 } -!+ 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | UNK3 = 0x28 } +!+ 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | TEXCOORDROUNDMODE = COORD_TRUNCATE | NEARESTMIPSNAP = CLAMP_ROUND_TRUNCATE | DESTDATATYPEOVERRIDE } !+ 00100000 TPL1_DBG_ECO_CNTL: 0x100000 !+ 00000044 TPL1_UNKNOWN_B605: 68 !+ 00000100 HLSQ_VS_CNTL: { CONSTLEN = 0 | ENABLED } diff --git a/src/freedreno/.gitlab-ci/reference/prefetch-test.log b/src/freedreno/.gitlab-ci/reference/prefetch-test.log index 8cf6c3b7189..bb840b2e64b 100644 --- a/src/freedreno/.gitlab-ci/reference/prefetch-test.log +++ b/src/freedreno/.gitlab-ci/reference/prefetch-test.log @@ -2616,7 +2616,7 @@ got cmdszdw=416 + 00000000 SP_UNKNOWN_B183: 0 + 00000000 SP_TP_SAMPLE_CONFIG: { 0 } + 00000000 SP_TP_WINDOW_OFFSET: { X = 0 | Y = 0 } -!+ 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | UNK3 = 0x28 } +!+ 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | TEXCOORDROUNDMODE = COORD_TRUNCATE | NEARESTMIPSNAP = CLAMP_ROUND_TRUNCATE | DESTDATATYPEOVERRIDE } + 00000000 SP_WINDOW_OFFSET: { X = 0 | Y = 0 } !+ 00108000 TPL1_DBG_ECO_CNTL: 0x108000 !+ 00000044 TPL1_UNKNOWN_B605: 68 @@ -152837,7 +152837,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) 00000000 SP_TP_SAMPLE_LOCATION_0: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_SAMPLE_LOCATION_1: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_WINDOW_OFFSET: { X = 0 | Y = 0 } - 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | UNK3 = 0x28 } + 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | TEXCOORDROUNDMODE = COORD_TRUNCATE | NEARESTMIPSNAP = CLAMP_ROUND_TRUNCATE | DESTDATATYPEOVERRIDE } deadbeef 0xb380: deadbeef deadbeef 0xb381: deadbeef deadbeef 0xb382: deadbeef @@ -152849,7 +152849,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) 00000000 SP_TP_SAMPLE_LOCATION_0: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_SAMPLE_LOCATION_1: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_WINDOW_OFFSET: { X = 0 | Y = 0 } - 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | UNK3 = 0x28 } + 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | TEXCOORDROUNDMODE = COORD_TRUNCATE | NEARESTMIPSNAP = CLAMP_ROUND_TRUNCATE | DESTDATATYPEOVERRIDE } deadbeef 0xb380: deadbeef deadbeef 0xb381: deadbeef deadbeef 0xb382: deadbeef @@ -153148,7 +153148,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) 00000000 SP_TP_SAMPLE_LOCATION_0: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_SAMPLE_LOCATION_1: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_WINDOW_OFFSET: { X = 0 | Y = 0 } - 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | UNK3 = 0x28 } + 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | TEXCOORDROUNDMODE = COORD_TRUNCATE | NEARESTMIPSNAP = CLAMP_ROUND_TRUNCATE | DESTDATATYPEOVERRIDE } deadbeef 0xb380: deadbeef deadbeef 0xb381: deadbeef deadbeef 0xb382: deadbeef @@ -153160,7 +153160,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) 00000000 SP_TP_SAMPLE_LOCATION_0: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_SAMPLE_LOCATION_1: { SAMPLE_0_X = 0.000000 | SAMPLE_0_Y = 0.000000 | SAMPLE_1_X = 0.000000 | SAMPLE_1_Y = 0.000000 | SAMPLE_2_X = 0.000000 | SAMPLE_2_Y = 0.000000 | SAMPLE_3_X = 0.000000 | SAMPLE_3_Y = 0.000000 } 00000000 SP_TP_WINDOW_OFFSET: { X = 0 | Y = 0 } - 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | UNK3 = 0x28 } + 000000a2 SP_TP_MODE_CNTL: { ISAMMODE = ISAMMODE_GL | TEXCOORDROUNDMODE = COORD_TRUNCATE | NEARESTMIPSNAP = CLAMP_ROUND_TRUNCATE | DESTDATATYPEOVERRIDE } deadbeef 0xb380: deadbeef deadbeef 0xb381: deadbeef deadbeef 0xb382: deadbeef diff --git a/src/freedreno/registers/adreno/a6xx.xml b/src/freedreno/registers/adreno/a6xx.xml index fc8fee99b45..f47e844215c 100644 --- a/src/freedreno/registers/adreno/a6xx.xml +++ b/src/freedreno/registers/adreno/a6xx.xml @@ -5402,9 +5402,22 @@ to upconvert to 32b float internally? + + + + + + + + + + + - + + + diff --git a/src/freedreno/vulkan/tu_cmd_buffer.cc b/src/freedreno/vulkan/tu_cmd_buffer.cc index 9b16cb2f71b..8e271778a12 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.cc +++ b/src/freedreno/vulkan/tu_cmd_buffer.cc @@ -1527,9 +1527,10 @@ tu6_init_static_regs(struct tu_device *dev, struct tu_cs *cs) } tu_cs_emit_write_reg(cs, REG_A6XX_VPC_UNKNOWN_9602, 0); tu_cs_emit_write_reg(cs, REG_A6XX_PC_UNKNOWN_9E72, 0); - tu_cs_emit_write_reg(cs, REG_A6XX_SP_TP_MODE_CNTL, - 0x000000a0 | - A6XX_SP_TP_MODE_CNTL_ISAMMODE(ISAMMODE_GL)); + tu_cs_emit_regs(cs, A6XX_SP_TP_MODE_CNTL(.isammode = ISAMMODE_GL, + .texcoordroundmode = COORD_TRUNCATE, + .nearestmipsnap = CLAMP_ROUND_TRUNCATE, + .destdatatypeoverride = true)); tu_cs_emit_regs(cs, HLSQ_CONTROL_5_REG(CHIP, .dword = 0xfc)); tu_cs_emit_write_reg(cs, REG_A6XX_VFD_MODE_CNTL, 0x00000000); diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_emit.cc b/src/gallium/drivers/freedreno/a6xx/fd6_emit.cc index ead6cc9ec49..a0a2968f281 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_emit.cc +++ b/src/gallium/drivers/freedreno/a6xx/fd6_emit.cc @@ -977,8 +977,12 @@ fd6_emit_static_regs(struct fd_context *ctx, struct fd_ringbuffer *ring) /* NOTE blob seems to (mostly?) use 0xb2 for SP_TP_MODE_CNTL * but this seems to kill texture gather offsets. */ - WRITE(REG_A6XX_SP_TP_MODE_CNTL, 0xa0 | - A6XX_SP_TP_MODE_CNTL_ISAMMODE(ISAMMODE_GL)); + OUT_REG(ring, + A6XX_SP_TP_MODE_CNTL( + .isammode = ISAMMODE_GL, + .texcoordroundmode = COORD_TRUNCATE, + .nearestmipsnap = CLAMP_ROUND_TRUNCATE, + .destdatatypeoverride = true)); OUT_REG(ring, HLSQ_CONTROL_5_REG( CHIP,