From: Eduardo Lima Mitev Date: Sat, 1 Jul 2017 05:54:50 +0000 (+0200) Subject: nir: Add support for 16-bit types (half float, int16 and uint16) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5165e222d15a546a550a3165dce05eac81f94482;p=mesa.git nir: Add support for 16-bit types (half float, int16 and uint16) v2: Renamed glsl_half_float_type() to glsl_float16_t_type(). (Jason Ekstrand) Signed-off-by: Jose Maria Casanova Crespo Signed-off-by: Eduardo Lima Reviewed-by: Jason Ekstrand --- diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index 7380bf436a8..688f2b1ae32 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -726,10 +726,13 @@ deref_foreach_leaf_build_recur(nir_deref_var *deref, nir_deref *tail, assert(tail->child == NULL); switch (glsl_get_base_type(tail->type)) { case GLSL_TYPE_UINT: + case GLSL_TYPE_UINT16: case GLSL_TYPE_UINT64: case GLSL_TYPE_INT: + case GLSL_TYPE_INT16: case GLSL_TYPE_INT64: case GLSL_TYPE_FLOAT: + case GLSL_TYPE_FLOAT16: case GLSL_TYPE_DOUBLE: case GLSL_TYPE_BOOL: if (glsl_type_is_vector_or_scalar(tail->type)) @@ -874,7 +877,10 @@ nir_deref_get_const_initializer_load(nir_shader *shader, nir_deref_var *deref) case GLSL_TYPE_FLOAT: case GLSL_TYPE_INT: case GLSL_TYPE_UINT: + case GLSL_TYPE_FLOAT16: case GLSL_TYPE_DOUBLE: + case GLSL_TYPE_INT16: + case GLSL_TYPE_UINT16: case GLSL_TYPE_UINT64: case GLSL_TYPE_INT64: case GLSL_TYPE_BOOL: diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 189c17d1625..2abf2ddd843 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -719,6 +719,12 @@ nir_get_nir_type_for_glsl_base_type(enum glsl_base_type base_type) case GLSL_TYPE_INT: return nir_type_int32; break; + case GLSL_TYPE_UINT16: + return nir_type_uint16; + break; + case GLSL_TYPE_INT16: + return nir_type_int16; + break; case GLSL_TYPE_UINT64: return nir_type_uint64; break; @@ -728,6 +734,9 @@ nir_get_nir_type_for_glsl_base_type(enum glsl_base_type base_type) case GLSL_TYPE_FLOAT: return nir_type_float32; break; + case GLSL_TYPE_FLOAT16: + return nir_type_float16; + break; case GLSL_TYPE_DOUBLE: return nir_type_float64; break; diff --git a/src/compiler/nir/nir_split_var_copies.c b/src/compiler/nir/nir_split_var_copies.c index 15a185ec8d8..bc3ceedbdb8 100644 --- a/src/compiler/nir/nir_split_var_copies.c +++ b/src/compiler/nir/nir_split_var_copies.c @@ -147,10 +147,13 @@ split_var_copy_instr(nir_intrinsic_instr *old_copy, break; case GLSL_TYPE_UINT: + case GLSL_TYPE_UINT16: case GLSL_TYPE_UINT64: case GLSL_TYPE_INT: + case GLSL_TYPE_INT16: case GLSL_TYPE_INT64: case GLSL_TYPE_FLOAT: + case GLSL_TYPE_FLOAT16: case GLSL_TYPE_DOUBLE: case GLSL_TYPE_BOOL: if (glsl_type_is_matrix(src_tail->type)) { @@ -229,6 +232,7 @@ split_var_copies_block(nir_block *block, struct split_var_copies_state *state) ralloc_steal(state->dead_ctx, instr); break; case GLSL_TYPE_FLOAT: + case GLSL_TYPE_FLOAT16: case GLSL_TYPE_DOUBLE: if (glsl_type_is_matrix(src_tail->type)) { split_var_copy_instr(intrinsic, dest_head, src_head, @@ -239,6 +243,8 @@ split_var_copies_block(nir_block *block, struct split_var_copies_state *state) break; case GLSL_TYPE_INT: case GLSL_TYPE_UINT: + case GLSL_TYPE_INT16: + case GLSL_TYPE_UINT16: case GLSL_TYPE_INT64: case GLSL_TYPE_UINT64: case GLSL_TYPE_BOOL: diff --git a/src/compiler/nir_types.cpp b/src/compiler/nir_types.cpp index c66cfff8be1..377de0c9c7b 100644 --- a/src/compiler/nir_types.cpp +++ b/src/compiler/nir_types.cpp @@ -273,6 +273,12 @@ glsl_double_type(void) return glsl_type::double_type; } +const glsl_type * +glsl_float16_t_type(void) +{ + return glsl_type::float16_t_type; +} + const glsl_type * glsl_vec_type(unsigned n) { @@ -315,6 +321,18 @@ glsl_uint64_t_type(void) return glsl_type::uint64_t_type; } +const glsl_type * +glsl_int16_t_type(void) +{ + return glsl_type::int16_t_type; +} + +const glsl_type * +glsl_uint16_t_type(void) +{ + return glsl_type::uint16_t_type; +} + const glsl_type * glsl_bool_type(void) { diff --git a/src/compiler/nir_types.h b/src/compiler/nir_types.h index 9f398b92786..daff9732509 100644 --- a/src/compiler/nir_types.h +++ b/src/compiler/nir_types.h @@ -94,6 +94,11 @@ glsl_get_bit_size(const struct glsl_type *type) case GLSL_TYPE_SUBROUTINE: return 32; + case GLSL_TYPE_FLOAT16: + case GLSL_TYPE_UINT16: + case GLSL_TYPE_INT16: + return 16; + case GLSL_TYPE_DOUBLE: case GLSL_TYPE_INT64: case GLSL_TYPE_UINT64: @@ -126,6 +131,7 @@ bool glsl_sampler_type_is_array(const struct glsl_type *type); const struct glsl_type *glsl_void_type(void); const struct glsl_type *glsl_float_type(void); +const struct glsl_type *glsl_float16_t_type(void); const struct glsl_type *glsl_double_type(void); const struct glsl_type *glsl_vec_type(unsigned n); const struct glsl_type *glsl_dvec_type(unsigned n); @@ -134,6 +140,8 @@ const struct glsl_type *glsl_int_type(void); const struct glsl_type *glsl_uint_type(void); const struct glsl_type *glsl_int64_t_type(void); const struct glsl_type *glsl_uint64_t_type(void); +const struct glsl_type *glsl_int16_t_type(void); +const struct glsl_type *glsl_uint16_t_type(void); const struct glsl_type *glsl_bool_type(void); const struct glsl_type *glsl_scalar_type(enum glsl_base_type base_type);