[Mesa-dev] [PATCH 24/31] radv/ac: handle primitive id

Dave Airlie airlied at gmail.com
Fri Jan 20 03:03:20 UTC 2017


From: Dave Airlie <airlied at redhat.com>

Signed-off-by: Dave Airlie <airlied at redhat.com>
---
 src/amd/common/ac_nir_to_llvm.c | 10 +++++++++-
 src/amd/common/ac_nir_to_llvm.h |  2 ++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 97e352b..f5254ae 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -4096,7 +4096,8 @@ handle_fs_inputs_pre(struct nir_to_llvm_context *ctx,
 		if (!(ctx->input_mask & (1ull << i)))
 			continue;
 
-		if (i >= VARYING_SLOT_VAR0 || i == VARYING_SLOT_PNTC) {
+		if (i >= VARYING_SLOT_VAR0 || i == VARYING_SLOT_PNTC ||
+		    i == VARYING_SLOT_PRIMITIVE_ID) {
 			interp_param = *inputs;
 			interp_fs_input(ctx, index, interp_param, ctx->prim_mask,
 					inputs);
@@ -4114,6 +4115,8 @@ handle_fs_inputs_pre(struct nir_to_llvm_context *ctx,
 	ctx->shader_info->fs.num_interp = index;
 	if (ctx->input_mask & (1 << VARYING_SLOT_PNTC))
 		ctx->shader_info->fs.has_pcoord = true;
+	if (ctx->input_mask & (1 << VARYING_SLOT_PRIMITIVE_ID))
+		ctx->shader_info->fs.prim_id_input = true;
 	ctx->shader_info->fs.input_mask = ctx->input_mask >> VARYING_SLOT_VAR0;
 }
 
@@ -4401,6 +4404,7 @@ handle_vs_outputs_post(struct nir_to_llvm_context *ctx)
 						       (1ull << VARYING_SLOT_CULL_DIST0) |
 						       (1ull << VARYING_SLOT_CULL_DIST1));
 
+	ctx->shader_info->vs.prim_id_output = 0xffffffff;
 	if (clip_mask) {
 		LLVMValueRef slots[8];
 		unsigned j;
@@ -4462,6 +4466,10 @@ handle_vs_outputs_post(struct nir_to_llvm_context *ctx)
 			ctx->shader_info->vs.writes_viewport_index = true;
 			viewport_index_value = values[0];
 			continue;
+		} else if (i == VARYING_SLOT_PRIMITIVE_ID) {
+			ctx->shader_info->vs.prim_id_output = param_count;
+			target = V_008DFC_SQ_EXP_PARAM + param_count;
+			param_count++;
 		} else if (i >= VARYING_SLOT_VAR0) {
 			ctx->shader_info->vs.export_mask |= 1u << (i - VARYING_SLOT_VAR0);
 			target = V_008DFC_SQ_EXP_PARAM + param_count;
diff --git a/src/amd/common/ac_nir_to_llvm.h b/src/amd/common/ac_nir_to_llvm.h
index ab66108..8f1cfc5 100644
--- a/src/amd/common/ac_nir_to_llvm.h
+++ b/src/amd/common/ac_nir_to_llvm.h
@@ -105,6 +105,7 @@ struct ac_shader_variant_info {
 			uint8_t clip_dist_mask;
 			uint8_t cull_dist_mask;
 			uint32_t esgs_itemsize;
+			uint32_t prim_id_output;
 		} vs;
 		struct {
 			unsigned num_interp;
@@ -118,6 +119,7 @@ struct ac_shader_variant_info {
 			bool early_fragment_test;
 			bool writes_memory;
 			bool force_persample;
+			bool prim_id_input;
 		} fs;
 		struct {
 			unsigned block_size[3];
-- 
2.9.3



More information about the mesa-dev mailing list