diff options
Diffstat (limited to 'src/gallium/drivers/radeonsi/radeonsi_shader.c')
-rw-r--r-- | src/gallium/drivers/radeonsi/radeonsi_shader.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/gallium/drivers/radeonsi/radeonsi_shader.c b/src/gallium/drivers/radeonsi/radeonsi_shader.c index e6395663711..2d640f245b2 100644 --- a/src/gallium/drivers/radeonsi/radeonsi_shader.c +++ b/src/gallium/drivers/radeonsi/radeonsi_shader.c @@ -940,21 +940,36 @@ static void tex_fetch_args( 4); } +static void build_tex_intrinsic(const struct lp_build_tgsi_action * action, + struct lp_build_tgsi_context * bld_base, + struct lp_build_emit_data * emit_data) +{ + struct lp_build_context * base = &bld_base->base; + char intr_name[23]; + + sprintf(intr_name, "%sv%ui32", action->intr_name, + LLVMGetVectorSize(LLVMTypeOf(emit_data->args[1]))); + + emit_data->output[emit_data->chan] = lp_build_intrinsic( + base->gallivm->builder, intr_name, emit_data->dst_type, + emit_data->args, emit_data->arg_count); +} + static const struct lp_build_tgsi_action tex_action = { .fetch_args = tex_fetch_args, - .emit = lp_build_tgsi_intrinsic, + .emit = build_tex_intrinsic, .intr_name = "llvm.SI.sample." }; static const struct lp_build_tgsi_action txb_action = { .fetch_args = tex_fetch_args, - .emit = lp_build_tgsi_intrinsic, + .emit = build_tex_intrinsic, .intr_name = "llvm.SI.sampleb." }; static const struct lp_build_tgsi_action txl_action = { .fetch_args = tex_fetch_args, - .emit = lp_build_tgsi_intrinsic, + .emit = build_tex_intrinsic, .intr_name = "llvm.SI.samplel." }; |