lp_build_emit_fetch() is useful when the source type can be infered from the instruction opcode.
However, for bindless samplers/images we can't do that easily because tgsi_opcode_infer_src_type() returns TGSI_TYPE_FLOAT for TEX instructions, while we need TGSI_TYPE_UNSIGNED64 if the resource register is bindless. Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> --- src/gallium/auxiliary/gallivm/lp_bld_tgsi.c | 22 +++++++++++++++++----- src/gallium/auxiliary/gallivm/lp_bld_tgsi.h | 7 +++++++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.c index d368f38d09..69863ab93c 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.c @@ -323,16 +323,14 @@ lp_build_tgsi_inst_llvm( LLVMValueRef -lp_build_emit_fetch( +lp_build_emit_fetch_src( struct lp_build_tgsi_context *bld_base, - const struct tgsi_full_instruction *inst, - unsigned src_op, + const struct tgsi_full_src_register *reg, + enum tgsi_opcode_type stype, const unsigned chan_index) { - const struct tgsi_full_src_register *reg = &inst->Src[src_op]; unsigned swizzle; LLVMValueRef res; - enum tgsi_opcode_type stype = tgsi_opcode_infer_src_type(inst->Instruction.Opcode); if (chan_index == LP_CHAN_ALL) { swizzle = ~0u; @@ -413,7 +411,21 @@ lp_build_emit_fetch( } return res; +} + + +LLVMValueRef +lp_build_emit_fetch( + struct lp_build_tgsi_context *bld_base, + const struct tgsi_full_instruction *inst, + unsigned src_op, + const unsigned chan_index) +{ + const struct tgsi_full_src_register *reg = &inst->Src[src_op]; + enum tgsi_opcode_type stype = + tgsi_opcode_infer_src_type(inst->Instruction.Opcode); + return lp_build_emit_fetch_src(bld_base, reg, stype, chan_index); } diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h index b6b3fe369b..22bd2a16ec 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h @@ -645,6 +645,13 @@ lp_build_tgsi_inst_llvm( const struct tgsi_full_instruction *inst); LLVMValueRef +lp_build_emit_fetch_src( + struct lp_build_tgsi_context *bld_base, + const struct tgsi_full_src_register *reg, + enum tgsi_opcode_type stype, + const unsigned chan_index); + +LLVMValueRef lp_build_emit_fetch( struct lp_build_tgsi_context *bld_base, const struct tgsi_full_instruction *inst, -- 2.12.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev