nir: Move intel's half-float image store lowering to to nir_format.h.
[mesa.git] / src / compiler / nir / nir_format_convert.h
index 7ebb7d50ca4797e4b95a09df8d7cd6c0b819eea3..9c8d0d21e0a89b694b7d7ee04a9740950a2e7196 100644 (file)
@@ -256,6 +256,19 @@ nir_format_float_to_snorm(nir_builder *b, nir_ssa_def *f, const unsigned *bits)
    return nir_f2i32(b, nir_fround_even(b, nir_fmul(b, f, factor)));
 }
 
+/* Converts a vector of floats to a vector of half-floats packed in the low 16
+ * bits.
+ */
+static inline nir_ssa_def *
+nir_format_float_to_half(nir_builder *b, nir_ssa_def *f)
+{
+   nir_ssa_def *zero = nir_imm_float(b, 0);
+   nir_ssa_def *f16comps[4];
+   for (unsigned i = 0; i < f->num_components; i++)
+      f16comps[i] = nir_pack_half_2x16_split(b, nir_channel(b, f, i), zero);
+   return nir_vec(b, f16comps, f->num_components);
+}
+
 static inline nir_ssa_def *
 nir_format_linear_to_srgb(nir_builder *b, nir_ssa_def *c)
 {