Commit dbb8a564 authored by Alyssa Rosenzweig's avatar Alyssa Rosenzweig 💜 Committed by Marge Bot
Browse files

pan/bit: Implement outmods


Signed-off-by: Alyssa Rosenzweig's avatarAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <mesa/mesa!4458>
parent ab581856
...@@ -184,6 +184,23 @@ bit_make_poly(add, a + b); ...@@ -184,6 +184,23 @@ bit_make_poly(add, a + b);
bit_make_float(fma, (a * b) + c); bit_make_float(fma, (a * b) + c);
bit_make_poly(mov, a); bit_make_poly(mov, a);
/* Modifiers */
static float
bit_outmod(float raw, enum bifrost_outmod mod)
{
switch (mod) {
case BIFROST_POS:
return MAX2(raw, 0.0);
case BIFROST_SAT_SIGNED:
return CLAMP(raw, -1.0, 1.0);
case BIFROST_SAT:
return CLAMP(raw, 0.0, 1.0);
default:
return raw;
}
}
void void
bit_step(struct bit_state *s, bi_instruction *ins, bool FMA) bit_step(struct bit_state *s, bi_instruction *ins, bool FMA)
{ {
...@@ -247,6 +264,16 @@ bit_step(struct bit_state *s, bi_instruction *ins, bool FMA) ...@@ -247,6 +264,16 @@ bit_step(struct bit_state *s, bi_instruction *ins, bool FMA)
unreachable("Unsupported op"); unreachable("Unsupported op");
} }
/* Apply outmod */
if (bi_has_outmod(ins) && ins->outmod != BIFROST_NONE) {
if (ins->dest_type == nir_type_float16) {
for (unsigned c = 0; c < 2; ++c)
dest.f16[c] = bh(bit_outmod(bf(dest.f16[c]), ins->outmod));
} else {
dest.f32 = bit_outmod(dest.f32, ins->outmod);
}
}
/* Finally, store the result */ /* Finally, store the result */
bit_write(s, ins->dest, ins->dest_type, dest, FMA); bit_write(s, ins->dest, ins->dest_type, dest, FMA);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment