diff options
author | Eduardo Lima Mitev <[email protected]> | 2017-07-01 07:54:50 +0200 |
---|---|---|
committer | Jose Maria Casanova Crespo <[email protected]> | 2017-12-06 08:57:18 +0100 |
commit | 5165e222d15a546a550a3165dce05eac81f94482 (patch) | |
tree | 2f9333a49c43e534cec2eddc05ca6ee46a72eba3 /src/compiler | |
parent | 52b10c7f20cf1613e47d5320339e61029549c420 (diff) |
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 <[email protected]>
Signed-off-by: Eduardo Lima <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/nir/nir.c | 6 | ||||
-rw-r--r-- | src/compiler/nir/nir.h | 9 | ||||
-rw-r--r-- | src/compiler/nir/nir_split_var_copies.c | 6 | ||||
-rw-r--r-- | src/compiler/nir_types.cpp | 18 | ||||
-rw-r--r-- | src/compiler/nir_types.h | 8 |
5 files changed, 47 insertions, 0 deletions
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 @@ -274,6 +274,12 @@ glsl_double_type(void) } const glsl_type * +glsl_float16_t_type(void) +{ + return glsl_type::float16_t_type; +} + +const glsl_type * glsl_vec_type(unsigned n) { return glsl_type::vec(n); @@ -316,6 +322,18 @@ glsl_uint64_t_type(void) } 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) { return glsl_type::bool_type; 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); |