From 3e830a1af2dcd0a8e6c76ea04c50e814e550b244 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Wed, 28 Dec 2016 00:31:02 +0000 Subject: [PATCH] nir: add support for min/max/median of 3 srcs MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit These are needed for SPV_AMD_shader_trinary_minmax, the AMD HW supports these. Co-authored-by: Daniel Schürmann Signed-off-by: Dave Airlie Reviewed-by: Bas Nieuwenhuizen Reviewed-by: Ian Romanick Reviewed-by: Samuel Pitoiset --- src/compiler/nir/nir_opcodes.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/compiler/nir/nir_opcodes.py b/src/compiler/nir/nir_opcodes.py index 04edffc6c0b..a762fdd2201 100644 --- a/src/compiler/nir/nir_opcodes.py +++ b/src/compiler/nir/nir_opcodes.py @@ -661,6 +661,20 @@ triop("flrp", tfloat, "src0 * (1 - src2) + src1 * src2") triop("fcsel", tfloat32, "(src0 != 0.0f) ? src1 : src2") + +# 3 way min/max/med +triop("fmin3", tfloat, "fminf(src0, fminf(src1, src2))") +triop("imin3", tint, "MIN2(src0, MIN2(src1, src2))") +triop("umin3", tuint, "MIN2(src0, MIN2(src1, src2))") + +triop("fmax3", tfloat, "fmaxf(src0, fmaxf(src1, src2))") +triop("imax3", tint, "MAX2(src0, MAX2(src1, src2))") +triop("umax3", tuint, "MAX2(src0, MAX2(src1, src2))") + +triop("fmed3", tfloat, "fmaxf(fminf(fmaxf(src0, src1), src2), fminf(src0, src1))") +triop("imed3", tint, "MAX2(MIN2(MAX2(src0, src1), src2), MIN2(src0, src1))") +triop("umed3", tuint, "MAX2(MIN2(MAX2(src0, src1), src2), MIN2(src0, src1))") + opcode("bcsel", 0, tuint, [0, 0, 0], [tbool, tuint, tuint], "", "src0 ? src1 : src2") -- 2.30.2