v3d,v3dv: use fquantize2f16 lowering in NIR
authorIago Toral Quiroga <itoral@igalia.com>
Tue, 29 Aug 2023 11:18:04 +0000 (13:18 +0200)
committerMarge Bot <emma+marge@anholt.net>
Wed, 30 Aug 2023 06:26:35 +0000 (06:26 +0000)
Ths is equivalent to what we have been doing in the backend.

Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Alejandro PiƱeiro <apinheiro@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24924>

src/broadcom/compiler/nir_to_vir.c
src/broadcom/vulkan/v3dv_pipeline.c
src/gallium/drivers/v3d/v3d_screen.c

index 89d58f9..d54d8df 100644 (file)
@@ -1694,27 +1694,6 @@ ntq_emit_alu(struct v3d_compile *c, nir_alu_instr *instr)
                 vir_set_unpack(c->defs[result.index], 0, V3D_QPU_UNPACK_H);
                 break;
 
-        case nir_op_fquantize2f16: {
-                /* F32 -> F16 -> F32 conversion */
-                struct qreg tmp = vir_FMOV(c, src[0]);
-                vir_set_pack(c->defs[tmp.index], V3D_QPU_PACK_L);
-                tmp = vir_FMOV(c, tmp);
-                vir_set_unpack(c->defs[tmp.index], 0, V3D_QPU_UNPACK_L);
-
-                /* Check for denorm */
-                struct qreg abs_src = vir_FMOV(c, src[0]);
-                vir_set_unpack(c->defs[abs_src.index], 0, V3D_QPU_UNPACK_ABS);
-                struct qreg threshold = vir_uniform_f(c, ldexpf(1.0, -14));
-                vir_set_pf(c, vir_FCMP_dest(c, vir_nop_reg(), abs_src, threshold),
-                                         V3D_QPU_PF_PUSHC);
-
-                /* Return +/-0 for denorms */
-                struct qreg zero =
-                        vir_AND(c, src[0], vir_uniform_ui(c, 0x80000000));
-                result = vir_FMOV(c, vir_SEL(c, V3D_QPU_COND_IFNA, tmp, zero));
-                break;
-        }
-
         default:
                 fprintf(stderr, "unknown NIR ALU inst: ");
                 nir_print_instr(&instr->instr, stderr);
index 39ca0f0..908e4ff 100644 (file)
@@ -231,6 +231,7 @@ const nir_shader_compiler_options v3dv_nir_options = {
    .lower_rotate = true,
    .lower_to_scalar = true,
    .lower_device_index_to_zero = true,
+   .lower_fquantize2f16 = true,
    .has_fsub = true,
    .has_isub = true,
    .vertex_id_zero_based = false, /* FIXME: to set this to true, the intrinsic
index 77dbfe8..fabc84f 100644 (file)
@@ -734,6 +734,7 @@ static const nir_shader_compiler_options v3d_nir_options = {
         .lower_rotate = true,
         .lower_to_scalar = true,
         .lower_int64_options = nir_lower_imul_2x32_64,
+        .lower_fquantize2f16 = true,
         .has_fsub = true,
         .has_isub = true,
         .divergence_analysis_options =