From 80f4331ed1314d674e385c8753c970d8fa394a88 Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Tue, 31 Jan 2017 21:21:47 +0100 Subject: [PATCH] radv/ac: Add draw index support. Signed-off-by: Bas Nieuwenhuizen Reviewed-by: Dave Airlie Reviewed-by: Edward O'Callaghan --- src/amd/common/ac_nir_to_llvm.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 50ed4d4..67c5c06 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -82,6 +82,7 @@ struct nir_to_llvm_context { LLVMValueRef vertex_buffers; LLVMValueRef base_vertex; LLVMValueRef start_instance; + LLVMValueRef draw_index; LLVMValueRef vertex_id; LLVMValueRef rel_auto_id; LLVMValueRef vs_prim_id; @@ -560,6 +561,7 @@ static void create_function(struct nir_to_llvm_context *ctx) arg_types[arg_idx++] = const_array(ctx->v16i8, 16); /* vertex buffers */ arg_types[arg_idx++] = ctx->i32; // base vertex arg_types[arg_idx++] = ctx->i32; // start instance + arg_types[arg_idx++] = ctx->i32; // draw index } user_sgpr_count = arg_idx; if (ctx->options->key.vs.as_es) @@ -684,10 +686,11 @@ static void create_function(struct nir_to_llvm_context *ctx) set_userdata_location_shader(ctx, AC_UD_VS_VERTEX_BUFFERS, user_sgpr_idx, 2); user_sgpr_idx += 2; ctx->vertex_buffers = LLVMGetParam(ctx->main_function, arg_idx++); - set_userdata_location_shader(ctx, AC_UD_VS_BASE_VERTEX_START_INSTANCE, user_sgpr_idx, 2); - user_sgpr_idx += 2; + set_userdata_location_shader(ctx, AC_UD_VS_BASE_VERTEX_START_INSTANCE, user_sgpr_idx, 3); + user_sgpr_idx += 3; ctx->base_vertex = LLVMGetParam(ctx->main_function, arg_idx++); ctx->start_instance = LLVMGetParam(ctx->main_function, arg_idx++); + ctx->draw_index = LLVMGetParam(ctx->main_function, arg_idx++); } if (ctx->options->key.vs.as_es) ctx->es2gs_offset = LLVMGetParam(ctx->main_function, arg_idx++); @@ -3263,6 +3266,9 @@ static void visit_intrinsic(struct nir_to_llvm_context *ctx, case nir_intrinsic_load_base_instance: result = ctx->start_instance; break; + case nir_intrinsic_load_draw_id: + result = ctx->draw_index; + break; case nir_intrinsic_load_invocation_id: result = ctx->gs_invocation_id; break; -- 2.7.4