{
nir_ssa_def *Asrc = nir_channel(b, src, 3);
nir_ssa_def *Adst = nir_channel(b, dst, 3);
- nir_ssa_def *one = nir_imm_float(b, 1.0);
+ nir_ssa_def *one = nir_imm_float16(b, 1.0);
nir_ssa_def *Adsti = nir_fsub(b, one, Adst);
return (chan < 3) ? nir_fmin(b, Asrc, Adsti) : one;
{
switch (factor) {
case BLEND_FACTOR_ZERO:
- return nir_imm_float(b, 0.0);
+ return nir_imm_float16(b, 0.0);
case BLEND_FACTOR_SRC_COLOR:
return nir_channel(b, src, chan);
case BLEND_FACTOR_DST_COLOR:
nir_blend_factor_value(b, src, dst, bconst, chan, factor);
if (inverted)
- f = nir_fsub(b, nir_imm_float(b, 1.0), f);
+ f = nir_fsub(b, nir_imm_float16(b, 1.0), f);
return nir_fmul(b, raw_scalar, f);
}
nir_ssa_def *src, nir_ssa_def *dst)
{
/* Grab the blend constant ahead of time */
- nir_ssa_def *bconst = nir_load_blend_const_color_rgba(b);
+ nir_ssa_def *bconst = nir_f2f16(b, nir_load_blend_const_color_rgba(b));
/* We blend per channel and recombine later */
nir_ssa_def *channels[4];
b.cursor = nir_before_instr(instr);
/* Grab the input color */
- nir_ssa_def *src = nir_ssa_for_src(&b, intr->src[1], 4);
+ nir_ssa_def *src = nir_f2f16(&b, nir_ssa_for_src(&b, intr->src[1], 4));
/* Grab the tilebuffer color - io lowered to load_output */
- nir_ssa_def *dst = nir_load_var(&b, var);
+ nir_ssa_def *dst = nir_f2f16(&b, nir_load_var(&b, var));
/* Blend the two colors per the passed options */
- nir_ssa_def *blended = nir_blend(&b, options, src, dst);
+ nir_ssa_def *blended = nir_f2f32(&b, nir_blend(&b, options, src, dst));
/* Write out the final color instead of the input */
nir_instr_rewrite_src(instr, &intr->src[1],
static nir_ssa_def *
nir_native_to_float(nir_builder *b, nir_ssa_def *c_native)
{
- /* First, we convert up from u8 to f32 */
- nir_ssa_def *converted = nir_u2f32(b, nir_u2u32(b, c_native));
+ /* First, we convert up from u8 to f16 */
+ nir_ssa_def *converted = nir_u2f16(b, nir_u2u16(b, c_native));
/* Next, we scale down from [0, 255.0] to [0, 1] */
nir_ssa_def *scaled = nir_fsat(b, nir_fmul_imm(b, converted, 1.0/255.0));