Mesa (master): radeonsi: create get_base_vertex() helper

Timothy Arceri tarceri at kemper.freedesktop.org
Tue Feb 27 22:26:46 UTC 2018


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

Author: Timothy Arceri <tarceri at itsqueeze.com>
Date:   Mon Feb 26 21:59:43 2018 +1100

radeonsi: create get_base_vertex() helper

Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>

---

 src/gallium/drivers/radeonsi/si_shader.c | 34 +++++++++++++++++++-------------
 1 file changed, 20 insertions(+), 14 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index b69c1bbb24..aa9b50a7a2 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -1908,6 +1908,25 @@ static LLVMValueRef get_sample_id(struct si_shader_context *ctx)
 	return unpack_param(ctx, SI_PARAM_ANCILLARY, 8, 4);
 }
 
+static LLVMValueRef get_base_vertex(struct ac_shader_abi *abi)
+{
+	struct si_shader_context *ctx = si_shader_context_from_abi(abi);
+
+	/* For non-indexed draws, the base vertex set by the driver
+	 * (for direct draws) or the CP (for indirect draws) is the
+	 * first vertex ID, but GLSL expects 0 to be returned.
+	 */
+	LLVMValueRef vs_state = LLVMGetParam(ctx->main_fn,
+					     ctx->param_vs_state_bits);
+	LLVMValueRef indexed;
+
+	indexed = LLVMBuildLShr(ctx->ac.builder, vs_state, ctx->i32_1, "");
+	indexed = LLVMBuildTrunc(ctx->ac.builder, indexed, ctx->i1, "");
+
+	return LLVMBuildSelect(ctx->ac.builder, indexed, ctx->abi.base_vertex,
+			       ctx->i32_0, "");
+}
+
 static LLVMValueRef get_block_size(struct ac_shader_abi *abi)
 {
 	struct si_shader_context *ctx = si_shader_context_from_abi(abi);
@@ -2068,21 +2087,8 @@ void si_load_system_value(struct si_shader_context *ctx,
 		break;
 
 	case TGSI_SEMANTIC_BASEVERTEX:
-	{
-		/* For non-indexed draws, the base vertex set by the driver
-		 * (for direct draws) or the CP (for indirect draws) is the
-		 * first vertex ID, but GLSL expects 0 to be returned.
-		 */
-		LLVMValueRef vs_state = LLVMGetParam(ctx->main_fn, ctx->param_vs_state_bits);
-		LLVMValueRef indexed;
-
-		indexed = LLVMBuildLShr(ctx->ac.builder, vs_state, ctx->i32_1, "");
-		indexed = LLVMBuildTrunc(ctx->ac.builder, indexed, ctx->i1, "");
-
-		value = LLVMBuildSelect(ctx->ac.builder, indexed,
-					ctx->abi.base_vertex, ctx->i32_0, "");
+		value = get_base_vertex(&ctx->abi);
 		break;
-	}
 
 	case TGSI_SEMANTIC_BASEINSTANCE:
 		value = ctx->abi.start_instance;




More information about the mesa-commit mailing list