Mesa (master): radv/gfx10: add support for NGG passthrough mode

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jan 13 08:48:05 UTC 2020


Module: Mesa
Branch: master
Commit: 1db276ba23805984197493c858187acd782c2e9f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1db276ba23805984197493c858187acd782c2e9f

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Thu Jan  9 08:24:11 2020 +0100

radv/gfx10: add support for NGG passthrough mode

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

---

 src/amd/vulkan/radv_nir_to_llvm.c | 22 +++++++++++++---------
 src/amd/vulkan/radv_pipeline.c    |  2 ++
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c b/src/amd/vulkan/radv_nir_to_llvm.c
index e646ea4f93c..e870a38e059 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -2974,15 +2974,19 @@ handle_ngg_outputs_post_2(struct radv_shader_context *ctx)
 	{
 		struct ac_ngg_prim prim = {};
 
-		prim.num_vertices = num_vertices;
-		prim.isnull = ctx->ac.i1false;
-		memcpy(prim.index, vtxindex, sizeof(vtxindex[0]) * 3);
-
-		for (unsigned i = 0; i < num_vertices; ++i) {
-			tmp = LLVMBuildLShr(builder,
-					    ac_get_arg(&ctx->ac, ctx->args->ac.gs_invocation_id),
-					    LLVMConstInt(ctx->ac.i32, 8 + i, false), "");
-			prim.edgeflag[i] = LLVMBuildTrunc(builder, tmp, ctx->ac.i1, "");
+		if (ctx->args->options->key.vs_common_out.as_ngg_passthrough) {
+			prim.passthrough = ac_get_arg(&ctx->ac, ctx->args->gs_vtx_offset[0]);
+		} else {
+			prim.num_vertices = num_vertices;
+			prim.isnull = ctx->ac.i1false;
+			memcpy(prim.index, vtxindex, sizeof(vtxindex[0]) * 3);
+
+			for (unsigned i = 0; i < num_vertices; ++i) {
+				tmp = LLVMBuildLShr(builder,
+						    ac_get_arg(&ctx->ac, ctx->args->ac.gs_invocation_id),
+						    LLVMConstInt(ctx->ac.i32, 8 + i, false), "");
+				prim.edgeflag[i] = LLVMBuildTrunc(builder, tmp, ctx->ac.i1, "");
+			}
 		}
 
 		ac_build_export_prim(&ctx->ac, &prim);
diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index 12fea44bed8..dcc9518bfe9 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -4475,6 +4475,8 @@ radv_compute_vgt_shader_stages_en(const struct radv_pipeline *pipeline)
 		stages |= S_028B54_PRIMGEN_EN(1);
 		if (pipeline->streamout_shader)
 			stages |= S_028B54_NGG_WAVE_ID_EN(1);
+		if (radv_pipeline_has_ngg_passthrough(pipeline))
+			stages |= S_028B54_PRIMGEN_PASSTHRU_EN(1);
 	} else if (radv_pipeline_has_gs(pipeline)) {
 		stages |= S_028B54_VS_EN(V_028B54_VS_STAGE_COPY_SHADER);
 	}




More information about the mesa-commit mailing list