Reviewed-by: Marek Olšák <marek.ol...@amd.com> Marek
On Thu, Mar 30, 2017 at 7:57 PM, Samuel Pitoiset <samuel.pitoi...@gmail.com> wrote: > 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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev