For the series: Reviewed-by: Roland Scheidegger <srol...@vmware.com>
Am 22.06.2015 um 06:01 schrieb Dave Airlie: > From: Dave Airlie <airl...@redhat.com> > > This extends the draw code to add support for invocations. > > Signed-off-by: Dave Airlie <airl...@redhat.com> > --- > src/gallium/auxiliary/draw/draw_gs.c | 3 ++- > src/gallium/auxiliary/draw/draw_llvm.c | 5 ++++- > src/gallium/auxiliary/draw/draw_llvm.h | 3 ++- > src/gallium/auxiliary/gallivm/lp_bld_tgsi.h | 1 + > src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 5 +++++ > 5 files changed, 14 insertions(+), 3 deletions(-) > > diff --git a/src/gallium/auxiliary/draw/draw_gs.c > b/src/gallium/auxiliary/draw/draw_gs.c > index 755e527..a1564f9 100644 > --- a/src/gallium/auxiliary/draw/draw_gs.c > +++ b/src/gallium/auxiliary/draw/draw_gs.c > @@ -391,7 +391,8 @@ llvm_gs_run(struct draw_geometry_shader *shader, > (struct vertex_header*)input, > input_primitives, > shader->draw->instance_id, > - shader->llvm_prim_ids); > + shader->llvm_prim_ids, > + shader->invocation_id); > > return ret; > } > diff --git a/src/gallium/auxiliary/draw/draw_llvm.c > b/src/gallium/auxiliary/draw/draw_llvm.c > index 9629a8a..90a31bc 100644 > --- a/src/gallium/auxiliary/draw/draw_llvm.c > +++ b/src/gallium/auxiliary/draw/draw_llvm.c > @@ -2069,7 +2069,7 @@ draw_gs_llvm_generate(struct draw_llvm *llvm, > struct gallivm_state *gallivm = variant->gallivm; > LLVMContextRef context = gallivm->context; > LLVMTypeRef int32_type = LLVMInt32TypeInContext(context); > - LLVMTypeRef arg_types[6]; > + LLVMTypeRef arg_types[7]; > LLVMTypeRef func_type; > LLVMValueRef variant_func; > LLVMValueRef context_ptr; > @@ -2105,6 +2105,7 @@ draw_gs_llvm_generate(struct draw_llvm *llvm, > arg_types[4] = int32_type; /* instance_id */ > arg_types[5] = LLVMPointerType( > LLVMVectorType(int32_type, vector_length), 0); /* prim_id_ptr */ > + arg_types[6] = int32_type; > > func_type = LLVMFunctionType(int32_type, arg_types, Elements(arg_types), > 0); > > @@ -2125,6 +2126,7 @@ draw_gs_llvm_generate(struct draw_llvm *llvm, > num_prims = LLVMGetParam(variant_func, 3); > system_values.instance_id = LLVMGetParam(variant_func, 4); > prim_id_ptr = LLVMGetParam(variant_func, 5); > + system_values.invocation_id = LLVMGetParam(variant_func, 6); > > lp_build_name(context_ptr, "context"); > lp_build_name(input_array, "input"); > @@ -2132,6 +2134,7 @@ draw_gs_llvm_generate(struct draw_llvm *llvm, > lp_build_name(num_prims, "num_prims"); > lp_build_name(system_values.instance_id, "instance_id"); > lp_build_name(prim_id_ptr, "prim_id_ptr"); > + lp_build_name(system_values.invocation_id, "invocation_id"); > > variant->context_ptr = context_ptr; > variant->io_ptr = io_ptr; > diff --git a/src/gallium/auxiliary/draw/draw_llvm.h > b/src/gallium/auxiliary/draw/draw_llvm.h > index 9565fc6..d48ed72 100644 > --- a/src/gallium/auxiliary/draw/draw_llvm.h > +++ b/src/gallium/auxiliary/draw/draw_llvm.h > @@ -298,7 +298,8 @@ typedef int > struct vertex_header *output, > unsigned num_prims, > unsigned instance_id, > - int *prim_ids); > + int *prim_ids, > + unsigned invocation_id); > > struct draw_llvm_variant_key > { > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h > b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h > index 3f76b79..967373c 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h > +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h > @@ -165,6 +165,7 @@ struct lp_bld_tgsi_system_values { > LLVMValueRef vertex_id_nobase; > LLVMValueRef prim_id; > LLVMValueRef basevertex; > + LLVMValueRef invocation_id; > }; > > > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c > b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c > index 092bd18..268379e 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c > +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c > @@ -1532,6 +1532,11 @@ emit_fetch_system_value( > atype = TGSI_TYPE_UNSIGNED; > break; > > + case TGSI_SEMANTIC_INVOCATIONID: > + res = lp_build_broadcast_scalar(&bld_base->uint_bld, > bld->system_values.invocation_id); > + atype = TGSI_TYPE_UNSIGNED; > + break; > + > default: > assert(!"unexpected semantic in emit_fetch_system_value"); > res = bld_base->base.zero; > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev