From 4a6e34ec3dd0c511928c8270ce0a355cce0750b5 Mon Sep 17 00:00:00 2001 From: Mihai Preda Date: Wed, 14 Sep 2022 14:55:59 +0300 Subject: [PATCH] gallium/draw: fix LLVM opaque pointer warnings in draw_gs_llvm_fetch_input() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Acked-by: Marek Olšák Part-of: --- src/gallium/auxiliary/draw/draw_llvm.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index 1126eda7866..57949d61eb0 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -430,9 +430,8 @@ create_gs_jit_context_type(struct gallivm_state *gallivm, return context_type; } - static LLVMTypeRef -create_gs_jit_input_type(struct gallivm_state *gallivm) +create_gs_jit_input_type_deref(struct gallivm_state *gallivm) { LLVMTypeRef float_type = LLVMFloatTypeInContext(gallivm->context); LLVMTypeRef input_array; @@ -440,11 +439,15 @@ create_gs_jit_input_type(struct gallivm_state *gallivm) input_array = LLVMVectorType(float_type, TGSI_NUM_CHANNELS); /* num primitives */ input_array = LLVMArrayType(input_array, TGSI_NUM_CHANNELS); /* num channels */ input_array = LLVMArrayType(input_array, PIPE_MAX_SHADER_INPUTS); /* num attrs per vertex */ - input_array = LLVMPointerType(input_array, 0); /* num vertices per prim */ - return input_array; } +static LLVMTypeRef +create_gs_jit_input_type(struct gallivm_state *gallivm) +{ + return LLVMPointerType(create_gs_jit_input_type_deref(gallivm), 0); /* num vertices per prim */ +} + /** * Create LLVM type for struct pipe_vertex_buffer */ @@ -1716,6 +1719,10 @@ draw_gs_llvm_fetch_input(const struct lp_build_gs_iface *gs_iface, LLVMValueRef res; struct lp_type type = bld->type; + LLVMTypeRef float_type = LLVMFloatTypeInContext(gallivm->context); + LLVMTypeRef channel_vec_type = LLVMVectorType(float_type, TGSI_NUM_CHANNELS); + LLVMTypeRef input_array_type = create_gs_jit_input_type_deref(gallivm); + if (is_vindex_indirect || is_aindex_indirect) { int i; res = bld->zero; @@ -1738,8 +1745,8 @@ draw_gs_llvm_fetch_input(const struct lp_build_gs_iface *gs_iface, indices[1] = attr_chan_index; indices[2] = swizzle_index; - channel_vec = LLVMBuildGEP2(builder, gs->variant->input_array_type, gs->input, indices, 3, ""); - channel_vec = LLVMBuildLoad(builder, channel_vec, ""); + channel_vec = LLVMBuildGEP2(builder, input_array_type, gs->input, indices, 3, ""); + channel_vec = LLVMBuildLoad2(builder, channel_vec_type, channel_vec, ""); value = LLVMBuildExtractElement(builder, channel_vec, idx, ""); res = LLVMBuildInsertElement(builder, res, value, idx, ""); @@ -1749,8 +1756,8 @@ draw_gs_llvm_fetch_input(const struct lp_build_gs_iface *gs_iface, indices[1] = attrib_index; indices[2] = swizzle_index; - res = LLVMBuildGEP2(builder, gs->variant->input_array_type, gs->input, indices, 3, ""); - res = LLVMBuildLoad(builder, res, ""); + res = LLVMBuildGEP2(builder, input_array_type, gs->input, indices, 3, ""); + res = LLVMBuildLoad2(builder, channel_vec_type, res, ""); } return res;