draw/gallivm: add invocation ID support for llvmpipe.
This extends the draw code to add support for invocations. Reviewed-by: Roland Scheidegger <sroland@vmware.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
40d225803e
commit
1a71fbe28c
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -165,6 +165,7 @@ struct lp_bld_tgsi_system_values {
|
|||
LLVMValueRef vertex_id_nobase;
|
||||
LLVMValueRef prim_id;
|
||||
LLVMValueRef basevertex;
|
||||
LLVMValueRef invocation_id;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue