summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/gallivm
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/auxiliary/gallivm')
-rw-r--r--src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c
index cd57faef0c0..cc4bd2e1647 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c
@@ -744,6 +744,32 @@ umul_emit(
emit_data->args[0], emit_data->args[1]);
}
+/* TGSI_OPCODE_MAX */
+static void fmax_emit(
+ const struct lp_build_tgsi_action * action,
+ struct lp_build_tgsi_context * bld_base,
+ struct lp_build_emit_data * emit_data)
+{
+ LLVMBuilderRef builder = bld_base->base.gallivm->builder;
+ emit_data->output[emit_data->chan] = LLVMBuildSelect(builder,
+ LLVMBuildFCmp(builder, LLVMRealUGE,
+ emit_data->args[0], emit_data->args[1], ""),
+ emit_data->args[0], emit_data->args[1], "");
+}
+
+/* TGSI_OPCODE_MIN */
+static void fmin_emit(
+ const struct lp_build_tgsi_action * action,
+ struct lp_build_tgsi_context * bld_base,
+ struct lp_build_emit_data * emit_data)
+{
+ LLVMBuilderRef builder = bld_base->base.gallivm->builder;
+ emit_data->output[emit_data->chan] = LLVMBuildSelect(builder,
+ LLVMBuildFCmp(builder, LLVMRealUGE,
+ emit_data->args[0], emit_data->args[1], ""),
+ emit_data->args[1], emit_data->args[0], "");
+}
+
/* TGSI_OPCODE_XPD */
static void
@@ -844,6 +870,9 @@ lp_set_default_actions(struct lp_build_tgsi_context * bld_base)
bld_base->op_actions[TGSI_OPCODE_U2F].emit = u2f_emit;
bld_base->op_actions[TGSI_OPCODE_UMAD].emit = umad_emit;
bld_base->op_actions[TGSI_OPCODE_UMUL].emit = umul_emit;
+
+ bld_base->op_actions[TGSI_OPCODE_MAX].emit = fmax_emit;
+ bld_base->op_actions[TGSI_OPCODE_MIN].emit = fmin_emit;
}
/* CPU Only default actions */