aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/auxiliary/draw/draw_llvm.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c
index 7ecc34062b0..3624d930f61 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -533,6 +533,7 @@ draw_llvm_create_variant(struct draw_llvm *llvm,
return NULL;
variant->llvm = llvm;
+ variant->shader = shader;
variant->gallivm = gallivm_create();
@@ -557,7 +558,6 @@ draw_llvm_create_variant(struct draw_llvm *llvm,
gallivm_free_ir(variant->gallivm);
- variant->shader = shader;
variant->list_item_global.base = variant;
variant->list_item_local.base = variant;
/*variant->no = */shader->variants_created++;
@@ -1476,6 +1476,7 @@ draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *variant,
LLVMValueRef context_ptr;
LLVMBasicBlockRef block;
LLVMBuilderRef builder;
+ char func_name[64];
struct lp_type vs_type;
LLVMValueRef end, start;
LLVMValueRef count, fetch_elts, fetch_elt_max, fetch_count;
@@ -1512,6 +1513,9 @@ draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *variant,
memset(&system_values, 0, sizeof(system_values));
+ util_snprintf(func_name, sizeof(func_name), "draw_llvm_vs_variant%u%s",
+ variant->shader->variants_cached, elts ? "_elts" : "");
+
i = 0;
arg_types[i++] = get_context_ptr_type(variant); /* context */
arg_types[i++] = get_vertex_header_ptr_type(variant); /* vertex_header */
@@ -1529,9 +1533,7 @@ draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *variant,
func_type = LLVMFunctionType(int32_type, arg_types, num_arg_types, 0);
- variant_func = LLVMAddFunction(gallivm->module,
- elts ? "draw_llvm_shader_elts" : "draw_llvm_shader",
- func_type);
+ variant_func = LLVMAddFunction(gallivm->module, func_name, func_type);
if (elts)
variant->function_elts = variant_func;
@@ -2042,6 +2044,7 @@ draw_gs_llvm_generate(struct draw_llvm *llvm,
struct lp_build_sampler_soa *sampler = 0;
struct lp_build_context bld;
struct lp_bld_tgsi_system_values system_values;
+ char func_name[64];
struct lp_type gs_type;
unsigned i;
struct draw_gs_llvm_iface gs_iface;
@@ -2054,6 +2057,9 @@ draw_gs_llvm_generate(struct draw_llvm *llvm,
memset(&system_values, 0, sizeof(system_values));
+ util_snprintf(func_name, sizeof(func_name), "draw_llvm_gs_variant%u",
+ variant->shader->variants_cached);
+
assert(variant->vertex_header_ptr_type);
arg_types[0] = get_gs_context_ptr_type(variant); /* context */
@@ -2066,8 +2072,8 @@ draw_gs_llvm_generate(struct draw_llvm *llvm,
func_type = LLVMFunctionType(int32_type, arg_types, Elements(arg_types), 0);
- variant_func = LLVMAddFunction(gallivm->module, "draw_geometry_shader",
- func_type);
+ variant_func = LLVMAddFunction(gallivm->module, func_name, func_type);
+
variant->function = variant_func;
LLVMSetFunctionCallConv(variant_func, LLVMCCallConv);