On Mon, Jul 16, 2018 at 7:29 AM Karol Herbst <kher...@redhat.com> wrote:
> From: Rob Clark <robdcl...@gmail.com> > > v2 (Karol Herbst <kher...@redhat.com>): > make compatible with 64 bit floats > fix isfinite > > Signed-off-by: Karol Herbst <kher...@redhat.com> > --- > src/compiler/spirv/vtn_alu.c | 32 ++++++++++++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/src/compiler/spirv/vtn_alu.c b/src/compiler/spirv/vtn_alu.c > index 5a0347989e9..5db6c7f0a87 100644 > --- a/src/compiler/spirv/vtn_alu.c > +++ b/src/compiler/spirv/vtn_alu.c > @@ -583,6 +583,38 @@ vtn_handle_alu(struct vtn_builder *b, SpvOp opcode, > break; > } > > + case SpvOpIsFinite: { > + nir_ssa_def *inf = nir_imm_floatN_t(&b->nb, INFINITY, > src[0]->bit_size); > + nir_ssa_def *isNumber = nir_feq(&b->nb, src[0], src[0]); > Please use snake_case. > + nir_ssa_def *isNotInf = nir_ine(&b->nb, nir_fabs(&b->nb, src[0]), > inf); > Same here. > + val->ssa->def = nir_iand(&b->nb, isNumber, isNotInf); > + break; > + } > + > + case SpvOpIsNormal: { > + unsigned bit_size = src[0]->bit_size; > + > + uint32_t m; > + if (bit_size == 64) > + m = 11; > + else if (bit_size == 32) > + m = 8; > + else if (bit_size == 16) > + m = 5; > + else > + assert(!"unknown float type"); > + > + nir_ssa_def *shift = nir_imm_int(&b->nb, bit_size - m - 1); > + nir_ssa_def *abs = nir_fabs(&b->nb, src[0]); > + nir_ssa_def *exp = nir_iadd(&b->nb, > + nir_ushr(&b->nb, abs, shift), > + nir_imm_intN_t(&b->nb, -1, bit_size)); > + val->ssa->def = nir_ult(&b->nb, > + exp, > + nir_imm_intN_t(&b->nb, (1 << m) - 2, > bit_size)); > + break; > + } > + > case SpvOpFUnordEqual: > case SpvOpFUnordNotEqual: > case SpvOpFUnordLessThan: > -- > 2.17.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev