Mesa (master): radv: set prim_id for geometry shaders

Dave Airlie airlied at kemper.freedesktop.org
Sun Jun 25 22:45:54 UTC 2017


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

Author: Dave Airlie <airlied at redhat.com>
Date:   Tue Jun 20 14:03:10 2017 +1000

radv: set prim_id for geometry shaders

Noticed in passing.

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied at redhat.com>

---

 src/amd/common/ac_nir_to_llvm.c | 5 +++--
 src/amd/common/ac_nir_to_llvm.h | 1 +
 src/amd/vulkan/si_cmd_buffer.c  | 5 +++++
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 4d9c070dab..afef3fd28d 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -3867,9 +3867,10 @@ static void visit_intrinsic(struct nir_to_llvm_context *ctx,
 			result = ctx->gs_invocation_id;
 		break;
 	case nir_intrinsic_load_primitive_id:
-		if (ctx->stage == MESA_SHADER_GEOMETRY)
+		if (ctx->stage == MESA_SHADER_GEOMETRY) {
+			ctx->shader_info->gs.uses_prim_id = true;
 			result = ctx->gs_prim_id;
-		else if (ctx->stage == MESA_SHADER_TESS_CTRL) {
+		} else if (ctx->stage == MESA_SHADER_TESS_CTRL) {
 			ctx->shader_info->tcs.uses_prim_id = true;
 			result = ctx->tcs_patch_id;
 		} else if (ctx->stage == MESA_SHADER_TESS_EVAL) {
diff --git a/src/amd/common/ac_nir_to_llvm.h b/src/amd/common/ac_nir_to_llvm.h
index 9ea3156b25..724d5e6b0f 100644
--- a/src/amd/common/ac_nir_to_llvm.h
+++ b/src/amd/common/ac_nir_to_llvm.h
@@ -178,6 +178,7 @@ struct ac_shader_variant_info {
 			unsigned invocations;
 			unsigned gsvs_vertex_size;
 			unsigned max_gsvs_emit_size;
+			bool uses_prim_id;
 		} gs;
 		struct {
 			bool uses_prim_id;
diff --git a/src/amd/vulkan/si_cmd_buffer.c b/src/amd/vulkan/si_cmd_buffer.c
index 962b76fe9d..86e8e3e498 100644
--- a/src/amd/vulkan/si_cmd_buffer.c
+++ b/src/amd/vulkan/si_cmd_buffer.c
@@ -789,6 +789,11 @@ si_get_ia_multi_vgt_param(struct radv_cmd_buffer *cmd_buffer,
 		partial_es_wave = true;
 
 	if (radv_pipeline_has_gs(cmd_buffer->state.pipeline)) {
+
+		if (radv_pipeline_has_gs(cmd_buffer->state.pipeline) &&
+		    cmd_buffer->state.pipeline->shaders[MESA_SHADER_GEOMETRY]->info.gs.uses_prim_id)
+			ia_switch_on_eoi = true;
+
 		/* GS requirement. */
 		if (SI_GS_PER_ES / primgroup_size >= cmd_buffer->device->gs_table_depth - 3)
 			partial_es_wave = true;




More information about the mesa-commit mailing list