nir/builder: Handle 16-bit floats in nir_imm_floatN_t
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
@@ -25,6 +25,7 @@
|
|||||||
#define NIR_BUILDER_H
|
#define NIR_BUILDER_H
|
||||||
|
|
||||||
#include "nir_control_flow.h"
|
#include "nir_control_flow.h"
|
||||||
|
#include "util/half_float.h"
|
||||||
|
|
||||||
struct exec_list;
|
struct exec_list;
|
||||||
|
|
||||||
@@ -228,6 +229,17 @@ nir_imm_false(nir_builder *build)
|
|||||||
return nir_imm_bool(build, false);
|
return nir_imm_bool(build, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline nir_ssa_def *
|
||||||
|
nir_imm_float16(nir_builder *build, float x)
|
||||||
|
{
|
||||||
|
nir_const_value v;
|
||||||
|
|
||||||
|
memset(&v, 0, sizeof(v));
|
||||||
|
v.u16[0] = _mesa_float_to_half(x);
|
||||||
|
|
||||||
|
return nir_build_imm(build, 1, 16, v);
|
||||||
|
}
|
||||||
|
|
||||||
static inline nir_ssa_def *
|
static inline nir_ssa_def *
|
||||||
nir_imm_float(nir_builder *build, float x)
|
nir_imm_float(nir_builder *build, float x)
|
||||||
{
|
{
|
||||||
@@ -254,6 +266,8 @@ static inline nir_ssa_def *
|
|||||||
nir_imm_floatN_t(nir_builder *build, double x, unsigned bit_size)
|
nir_imm_floatN_t(nir_builder *build, double x, unsigned bit_size)
|
||||||
{
|
{
|
||||||
switch (bit_size) {
|
switch (bit_size) {
|
||||||
|
case 16:
|
||||||
|
return nir_imm_float16(build, x);
|
||||||
case 32:
|
case 32:
|
||||||
return nir_imm_float(build, x);
|
return nir_imm_float(build, x);
|
||||||
case 64:
|
case 64:
|
||||||
|
Reference in New Issue
Block a user