[Mesa-dev] [PATCH 1/2] gallivm: Have a default emit function for min/max opcode
Vincent Lejeune
vljn at ovi.com
Thu Nov 29 14:51:32 PST 2012
---
src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c | 31 ++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c
index ff21879..070945c 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c
@@ -743,6 +743,34 @@ 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)
+{
+ LLVMValueRef comparison;
+ comparison = lp_build_cmp(&bld_base->base, PIPE_FUNC_GEQUAL, emit_data->args[0],
+ emit_data->args[1]);
+ emit_data->output[emit_data->chan] = lp_build_select(&bld_base->base,
+ comparison, 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)
+{
+ LLVMValueRef comparison;
+ comparison = lp_build_cmp(&bld_base->base, PIPE_FUNC_GEQUAL, emit_data->args[0],
+ emit_data->args[1]);
+ emit_data->output[emit_data->chan] = lp_build_select(&bld_base->base,
+ comparison, emit_data->args[1],
+ emit_data->args[0]);
+}
+
/* TGSI_OPCODE_XPD */
static void
@@ -843,6 +871,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 */
--
1.8.0
More information about the mesa-dev
mailing list