From b312155cc540d0a2ccabbe2c829d12131829b1be Mon Sep 17 00:00:00 2001 From: Connor Abbott Date: Tue, 9 May 2023 19:37:21 +0200 Subject: [PATCH] tu: Rename PrimID-related registers It turns out that the hardware automatically selects whether PrimID passthrough needs to happen based on whether GS is enabled, which means that it's safe to always set these registers based whether PrimID is read by the FS and the hardware will ignore them when GS is enabled. Use the real names for these registers to make it less confusing when we start to do that. Part-of: --- src/freedreno/.gitlab-ci/reference/crash.log | 4 ++-- src/freedreno/.gitlab-ci/reference/crash_prefetch.log | 12 ++++++------ ...direct_draw.indexed.indirect_draw_count.triangle_list.log | 6 +++--- src/freedreno/.gitlab-ci/reference/fd-clouds.log | 6 +++--- src/freedreno/.gitlab-ci/reference/prefetch-test.log | 6 +++--- src/freedreno/registers/adreno/a6xx.xml | 11 +++++------ src/freedreno/vulkan/tu_pipeline.cc | 4 ++-- src/gallium/drivers/freedreno/a6xx/fd6_program.cc | 4 ++-- 8 files changed, 26 insertions(+), 27 deletions(-) diff --git a/src/freedreno/.gitlab-ci/reference/crash.log b/src/freedreno/.gitlab-ci/reference/crash.log index 746e8bf..765c97a 100644 --- a/src/freedreno/.gitlab-ci/reference/crash.log +++ b/src/freedreno/.gitlab-ci/reference/crash.log @@ -6233,7 +6233,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) ffffffff PC_RESTART_INDEX: 4294967295 0000001f PC_MODE_CNTL: 0x1f 00000001 PC_POWER_CNTL: 0x1 - 00000000 PC_PRIMID_PASSTHRU: FALSE + 00000000 PC_PS_CNTL: { 0 } 00000002 PC_PRIMITIVE_CNTL_0: { PROVOKING_VTX_LAST } 00000001 PC_VS_OUT_CNTL: { STRIDE_IN_VPC = 1 | CLIP_MASK = 0 } 00000001 PC_GS_OUT_CNTL: { STRIDE_IN_VPC = 1 | CLIP_MASK = 0 } @@ -6461,7 +6461,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) ffffffff PC_RESTART_INDEX: 4294967295 0000001f PC_MODE_CNTL: 0x1f 00000001 PC_POWER_CNTL: 0x1 - 00000000 PC_PRIMID_PASSTHRU: FALSE + 00000000 PC_PS_CNTL: { 0 } 00000002 PC_PRIMITIVE_CNTL_0: { PROVOKING_VTX_LAST } 00000001 PC_VS_OUT_CNTL: { STRIDE_IN_VPC = 1 | CLIP_MASK = 0 } 00000001 PC_GS_OUT_CNTL: { STRIDE_IN_VPC = 1 | CLIP_MASK = 0 } diff --git a/src/freedreno/.gitlab-ci/reference/crash_prefetch.log b/src/freedreno/.gitlab-ci/reference/crash_prefetch.log index 2e7eb57..cab1f6f 100644 --- a/src/freedreno/.gitlab-ci/reference/crash_prefetch.log +++ b/src/freedreno/.gitlab-ci/reference/crash_prefetch.log @@ -2869,7 +2869,7 @@ got cmdszdw=83 !+ 00ff0004 VPC_VS_PACK: { STRIDE_IN_VPC = 4 | POSITIONLOC = 0 | PSIZELOC = 255 | EXTRAPOS = 0 } !+ ff00ff00 VPC_CNTL_0: { NUMNONPOSVAR = 0 | PRIMIDLOC = 255 | VIEWIDLOC = 255 } + 00000000 VPC_SO_STREAM_CNTL: { BUF0_STREAM = 0 | BUF1_STREAM = 0 | BUF2_STREAM = 0 | BUF3_STREAM = 0 | STREAM_ENABLE = 0 } - + 00000000 PC_PRIMID_PASSTHRU: FALSE + + 00000000 PC_PS_CNTL: { 0 } + 00000000 PC_RASTER_CNTL: { STREAM = 0 } !+ 00000003 PC_POLYGON_MODE: { MODE = POLYMODE6_TRIANGLES } + 00000000 PC_PRIMITIVE_CNTL_0: { 0 } @@ -3583,7 +3583,7 @@ got cmdszdw=83 + 00ff0004 VPC_VS_PACK: { STRIDE_IN_VPC = 4 | POSITIONLOC = 0 | PSIZELOC = 255 | EXTRAPOS = 0 } + ff00ff00 VPC_CNTL_0: { NUMNONPOSVAR = 0 | PRIMIDLOC = 255 | VIEWIDLOC = 255 } + 00000000 VPC_SO_STREAM_CNTL: { BUF0_STREAM = 0 | BUF1_STREAM = 0 | BUF2_STREAM = 0 | BUF3_STREAM = 0 | STREAM_ENABLE = 0 } - + 00000000 PC_PRIMID_PASSTHRU: FALSE + + 00000000 PC_PS_CNTL: { 0 } + 00000000 PC_RASTER_CNTL: { STREAM = 0 } + 00000003 PC_POLYGON_MODE: { MODE = POLYMODE6_TRIANGLES } + 00000000 PC_PRIMITIVE_CNTL_0: { 0 } @@ -4308,7 +4308,7 @@ got cmdszdw=83 + 00ff0004 VPC_VS_PACK: { STRIDE_IN_VPC = 4 | POSITIONLOC = 0 | PSIZELOC = 255 | EXTRAPOS = 0 } + ff00ff00 VPC_CNTL_0: { NUMNONPOSVAR = 0 | PRIMIDLOC = 255 | VIEWIDLOC = 255 } + 00000000 VPC_SO_STREAM_CNTL: { BUF0_STREAM = 0 | BUF1_STREAM = 0 | BUF2_STREAM = 0 | BUF3_STREAM = 0 | STREAM_ENABLE = 0 } - + 00000000 PC_PRIMID_PASSTHRU: FALSE + + 00000000 PC_PS_CNTL: { 0 } + 00000000 PC_RASTER_CNTL: { STREAM = 0 } + 00000003 PC_POLYGON_MODE: { MODE = POLYMODE6_TRIANGLES } + 00000000 PC_PRIMITIVE_CNTL_0: { 0 } @@ -4958,7 +4958,7 @@ ESTIMATED CRASH LOCATION! + 00ff0004 VPC_VS_PACK: { STRIDE_IN_VPC = 4 | POSITIONLOC = 0 | PSIZELOC = 255 | EXTRAPOS = 0 } + ff00ff00 VPC_CNTL_0: { NUMNONPOSVAR = 0 | PRIMIDLOC = 255 | VIEWIDLOC = 255 } + 00000000 VPC_SO_STREAM_CNTL: { BUF0_STREAM = 0 | BUF1_STREAM = 0 | BUF2_STREAM = 0 | BUF3_STREAM = 0 | STREAM_ENABLE = 0 } - + 00000000 PC_PRIMID_PASSTHRU: FALSE + + 00000000 PC_PS_CNTL: { 0 } + 00000000 PC_RASTER_CNTL: { STREAM = 0 } + 00000003 PC_POLYGON_MODE: { MODE = POLYMODE6_TRIANGLES } + 00000000 PC_PRIMITIVE_CNTL_0: { 0 } @@ -18061,7 +18061,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) ffffffff PC_RESTART_INDEX: 4294967295 0000001f PC_MODE_CNTL: 0x1f 00000001 PC_POWER_CNTL: 0x1 - 00000000 PC_PRIMID_PASSTHRU: FALSE + 00000000 PC_PS_CNTL: { 0 } 00000000 PC_PRIMITIVE_CNTL_0: { 0 } 00000004 PC_VS_OUT_CNTL: { STRIDE_IN_VPC = 4 | CLIP_MASK = 0 } 00000001 PC_GS_OUT_CNTL: { STRIDE_IN_VPC = 1 | CLIP_MASK = 0 } @@ -18289,7 +18289,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) ffffffff PC_RESTART_INDEX: 4294967295 0000001f PC_MODE_CNTL: 0x1f 00000001 PC_POWER_CNTL: 0x1 - 00000000 PC_PRIMID_PASSTHRU: FALSE + 00000000 PC_PS_CNTL: { 0 } 00000000 PC_PRIMITIVE_CNTL_0: { 0 } 00000004 PC_VS_OUT_CNTL: { STRIDE_IN_VPC = 4 | CLIP_MASK = 0 } 00000001 PC_GS_OUT_CNTL: { STRIDE_IN_VPC = 1 | CLIP_MASK = 0 } 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 a6211bf..f56d177 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 @@ -944,8 +944,8 @@ cmdstream[0]: 265 dwords write GRAS_VS_LAYER_CNTL (809b) GRAS_VS_LAYER_CNTL: { 0 } 00000000010542e4: 0000: 48809b01 00000000 - write PC_PRIMID_PASSTHRU (9806) - PC_PRIMID_PASSTHRU: FALSE + write PC_PS_CNTL (9806) + PC_PS_CNTL: { 0 } 00000000010542ec: 0000: 40980601 00000000 write VPC_CNTL_0 (9304) VPC_CNTL_0: { NUMNONPOSVAR = 4 | PRIMIDLOC = 255 | VARYING | VIEWIDLOC = 255 } @@ -1393,7 +1393,7 @@ cmdstream[0]: 265 dwords !+ ff01ff04 VPC_CNTL_0: { NUMNONPOSVAR = 4 | PRIMIDLOC = 255 | VARYING | VIEWIDLOC = 255 } + 00000000 VPC_SO_STREAM_CNTL: { BUF0_STREAM = 0 | BUF1_STREAM = 0 | BUF2_STREAM = 0 | BUF3_STREAM = 0 | STREAM_ENABLE = 0 } !+ ffffffff PC_RESTART_INDEX: 4294967295 - + 00000000 PC_PRIMID_PASSTHRU: FALSE + + 00000000 PC_PS_CNTL: { 0 } !+ 00000003 PC_POLYGON_MODE: { MODE = POLYMODE6_TRIANGLES } + 00000000 PC_PRIMITIVE_CNTL_0: { 0 } !+ 00000008 PC_VS_OUT_CNTL: { STRIDE_IN_VPC = 8 | CLIP_MASK = 0 } diff --git a/src/freedreno/.gitlab-ci/reference/fd-clouds.log b/src/freedreno/.gitlab-ci/reference/fd-clouds.log index d855633..07a715d 100644 --- a/src/freedreno/.gitlab-ci/reference/fd-clouds.log +++ b/src/freedreno/.gitlab-ci/reference/fd-clouds.log @@ -122,8 +122,8 @@ cmdstream[0]: 1023 dwords write VPC_SO_DISABLE (9306) VPC_SO_DISABLE: { DISABLE } 0000000001d91134: 0000: 48930601 00000001 - write PC_PRIMID_PASSTHRU (9806) - PC_PRIMID_PASSTHRU: FALSE + write PC_PS_CNTL (9806) + PC_PS_CNTL: { 0 } 0000000001d9113c: 0000: 40980601 00000000 write 0x9990 (9990) 0x9990: 00000000 @@ -1029,7 +1029,7 @@ cmdstream[0]: 1023 dwords !+ ffffffff PC_RESTART_INDEX: 4294967295 !+ 0000001f PC_MODE_CNTL: 0x1f !+ 00000001 PC_POWER_CNTL: 0x1 - + 00000000 PC_PRIMID_PASSTHRU: FALSE + + 00000000 PC_PS_CNTL: { 0 } + 00000000 PC_RASTER_CNTL: { STREAM = 0 } !+ 00000003 PC_POLYGON_MODE: { MODE = POLYMODE6_TRIANGLES } + 00000000 0x9990: 00000000 diff --git a/src/freedreno/.gitlab-ci/reference/prefetch-test.log b/src/freedreno/.gitlab-ci/reference/prefetch-test.log index 7b46439..c8b05bc 100644 --- a/src/freedreno/.gitlab-ci/reference/prefetch-test.log +++ b/src/freedreno/.gitlab-ci/reference/prefetch-test.log @@ -3137,7 +3137,7 @@ got cmdszdw=438 !+ ff01ff02 VPC_CNTL_0: { NUMNONPOSVAR = 2 | PRIMIDLOC = 255 | VARYING | VIEWIDLOC = 255 } !+ 00000000 VPC_SO_DISABLE: { 0 } !+ ffffffff PC_RESTART_INDEX: 4294967295 - + 00000000 PC_PRIMID_PASSTHRU: FALSE + + 00000000 PC_PS_CNTL: { 0 } !+ 00000003 PC_POLYGON_MODE: { MODE = POLYMODE6_TRIANGLES } !+ 00000002 PC_PRIMITIVE_CNTL_0: { PROVOKING_VTX_LAST } !+ 00000006 PC_VS_OUT_CNTL: { STRIDE_IN_VPC = 6 | CLIP_MASK = 0 } @@ -152040,7 +152040,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) ffffffff PC_RESTART_INDEX: 4294967295 0000001f PC_MODE_CNTL: 0x1f 00000000 PC_POWER_CNTL: 0 - 00000000 PC_PRIMID_PASSTHRU: FALSE + 00000000 PC_PS_CNTL: { 0 } 00000002 PC_PRIMITIVE_CNTL_0: { PROVOKING_VTX_LAST } 00000006 PC_VS_OUT_CNTL: { STRIDE_IN_VPC = 6 | CLIP_MASK = 0 } 00000001 PC_GS_OUT_CNTL: { STRIDE_IN_VPC = 1 | CLIP_MASK = 0 } @@ -152268,7 +152268,7 @@ WARNING: 64b discontinuity (no _LO dword for 890d) ffffffff PC_RESTART_INDEX: 4294967295 0000001f PC_MODE_CNTL: 0x1f 00000000 PC_POWER_CNTL: 0 - 00000000 PC_PRIMID_PASSTHRU: FALSE + 00000000 PC_PS_CNTL: { 0 } 00000002 PC_PRIMITIVE_CNTL_0: { PROVOKING_VTX_LAST } 00000006 PC_VS_OUT_CNTL: { STRIDE_IN_VPC = 6 | CLIP_MASK = 0 } 00000001 PC_GS_OUT_CNTL: { STRIDE_IN_VPC = 1 | CLIP_MASK = 0 } diff --git a/src/freedreno/registers/adreno/a6xx.xml b/src/freedreno/registers/adreno/a6xx.xml index 802c3e8..fcdedc4 100644 --- a/src/freedreno/registers/adreno/a6xx.xml +++ b/src/freedreno/registers/adreno/a6xx.xml @@ -2940,8 +2940,9 @@ to upconvert to 32b float internally? - - + + + @@ -3122,11 +3123,9 @@ to upconvert to 32b float internally? - + diff --git a/src/freedreno/vulkan/tu_pipeline.cc b/src/freedreno/vulkan/tu_pipeline.cc index 81c4aa8..4de9034 100644 --- a/src/freedreno/vulkan/tu_pipeline.cc +++ b/src/freedreno/vulkan/tu_pipeline.cc @@ -896,7 +896,7 @@ tu6_emit_vs_system_values(struct tu_cs *cs, tu_cs_emit(cs, 0x000000fc); /* VFD_CONTROL_4 */ tu_cs_emit(cs, A6XX_VFD_CONTROL_5_REGID_GSHEADER(gsheader_regid) | 0xfc00); /* VFD_CONTROL_5 */ - tu_cs_emit(cs, COND(primid_passthru, A6XX_VFD_CONTROL_6_PRIMID_PASSTHRU)); /* VFD_CONTROL_6 */ + tu_cs_emit(cs, COND(primid_passthru, A6XX_VFD_CONTROL_6_PRIMID4PSEN)); /* VFD_CONTROL_6 */ } static void @@ -1437,7 +1437,7 @@ tu6_emit_vpc(struct tu_cs *cs, tu_cs_emit(cs, CONDREG(layer_regid, A6XX_GRAS_GS_LAYER_CNTL_WRITES_LAYER) | CONDREG(view_regid, A6XX_GRAS_GS_LAYER_CNTL_WRITES_VIEW)); - tu_cs_emit_regs(cs, A6XX_PC_PRIMID_PASSTHRU(primid_passthru)); + tu_cs_emit_regs(cs, A6XX_PC_PS_CNTL(.primitiveiden = primid_passthru)); tu_cs_emit_pkt4(cs, REG_A6XX_VPC_CNTL_0, 1); tu_cs_emit(cs, A6XX_VPC_CNTL_0_NUMNONPOSVAR(fs ? fs->total_in : 0) | diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_program.cc b/src/gallium/drivers/freedreno/a6xx/fd6_program.cc index 39f4188..3c40eb2 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_program.cc +++ b/src/gallium/drivers/freedreno/a6xx/fd6_program.cc @@ -1141,7 +1141,7 @@ setup_stateobj(struct fd_screen *screen, struct fd_ringbuffer *ring, if (fs->instrlen) fd6_emit_shader(ctx, ring, fs); - OUT_REG(ring, A6XX_PC_PRIMID_PASSTHRU(primid_passthru)); + OUT_REG(ring, A6XX_PC_PS_CNTL(.primitiveiden = primid_passthru)); uint32_t non_sysval_input_count = 0; for (uint32_t i = 0; i < vs->inputs_count; i++) @@ -1176,7 +1176,7 @@ setup_stateobj(struct fd_screen *screen, struct fd_ringbuffer *ring, OUT_RING(ring, A6XX_VFD_CONTROL_5_REGID_GSHEADER(gs_header_regid) | 0xfc00); /* VFD_CONTROL_5 */ OUT_RING(ring, COND(primid_passthru, - A6XX_VFD_CONTROL_6_PRIMID_PASSTHRU)); /* VFD_CONTROL_6 */ + A6XX_VFD_CONTROL_6_PRIMID4PSEN)); /* VFD_CONTROL_6 */ if (!binning_pass) fd6_emit_immediates(ctx->screen, fs, ring); -- 2.7.4