Mesa (master): radeonsi: skip s_sendmsg(gs_alloc_req) for NGG passthrough on new chips
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Sat Feb 13 05:08:48 UTC 2021
Module: Mesa
Branch: master
Commit: 61fd8fc10ba86f0490024066d2b0f1142bb9923f
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=61fd8fc10ba86f0490024066d2b0f1142bb9923f
Author: Marek Olšák <marek.olsak at amd.com>
Date: Tue Jan 26 17:43:32 2021 -0500
radeonsi: skip s_sendmsg(gs_alloc_req) for NGG passthrough on new chips
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8892>
---
src/amd/registers/gfx103.json | 3 ++-
src/gallium/drivers/radeonsi/gfx10_shader_ngg.c | 5 +++++
src/gallium/drivers/radeonsi/si_state_shaders.c | 4 +++-
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/src/amd/registers/gfx103.json b/src/amd/registers/gfx103.json
index ec1f0741a43..77acb49e28b 100644
--- a/src/amd/registers/gfx103.json
+++ b/src/amd/registers/gfx103.json
@@ -16802,7 +16802,8 @@
{"bits": [22, 22], "name": "GS_W32_EN"},
{"bits": [23, 23], "name": "VS_W32_EN"},
{"bits": [24, 24], "name": "NGG_WAVE_ID_EN"},
- {"bits": [25, 25], "name": "PRIMGEN_PASSTHRU_EN"}
+ {"bits": [25, 25], "name": "PRIMGEN_PASSTHRU_EN"},
+ {"bits": [26, 26], "name": "PRIMGEN_PASSTHRU_NO_MSG"}
]
},
"VGT_STRMOUT_BUFFER_CONFIG": {
diff --git a/src/gallium/drivers/radeonsi/gfx10_shader_ngg.c b/src/gallium/drivers/radeonsi/gfx10_shader_ngg.c
index b21e81a11e3..2538eac930d 100644
--- a/src/gallium/drivers/radeonsi/gfx10_shader_ngg.c
+++ b/src/gallium/drivers/radeonsi/gfx10_shader_ngg.c
@@ -131,6 +131,11 @@ bool gfx10_ngg_export_prim_early(struct si_shader *shader)
void gfx10_ngg_build_sendmsg_gs_alloc_req(struct si_shader_context *ctx)
{
+ /* Newer chips can use PRIMGEN_PASSTHRU_NO_MSG to skip gs_alloc_req for NGG passthrough. */
+ if (gfx10_is_ngg_passthrough(ctx->shader) &&
+ ctx->screen->info.family >= CHIP_DIMGREY_CAVEFISH)
+ return;
+
ac_build_sendmsg_gs_alloc_req(&ctx->ac, get_wave_id_in_tg(ctx), ngg_get_vtx_cnt(ctx),
ngg_get_prim_cnt(ctx));
}
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c
index dbb1b16ff70..34434094dcb 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -3906,7 +3906,9 @@ static struct si_pm4_state *si_build_vgt_shader_config(struct si_screen *screen,
if (key.u.ngg) {
stages |= S_028B54_PRIMGEN_EN(1) | S_028B54_GS_FAST_LAUNCH(key.u.ngg_gs_fast_launch) |
S_028B54_NGG_WAVE_ID_EN(key.u.streamout) |
- S_028B54_PRIMGEN_PASSTHRU_EN(key.u.ngg_passthrough);
+ S_028B54_PRIMGEN_PASSTHRU_EN(key.u.ngg_passthrough) |
+ S_028B54_PRIMGEN_PASSTHRU_NO_MSG(key.u.ngg_passthrough &&
+ screen->info.family >= CHIP_DIMGREY_CAVEFISH);
} else if (key.u.gs)
stages |= S_028B54_VS_EN(V_028B54_VS_STAGE_COPY_SHADER);
More information about the mesa-commit
mailing list