[Mesa-dev] [PATCH 1/2] radeonsi: create get_base_vertex() helper
Timothy Arceri
tarceri at itsqueeze.com
Mon Feb 26 11:29:29 UTC 2018
---
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 7af0bdb99c..adcb03f23f 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;
--
2.14.3
More information about the mesa-dev
mailing list