diff options
author | Timothy Arceri <[email protected]> | 2017-09-20 09:49:57 +1000 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2017-10-16 09:06:53 +1100 |
commit | 3b59f5ca170a5459e2f7cd5a0d0142f6e15dde3c (patch) | |
tree | 9f92a41fb296910f536b57b7fadc874398fb61c1 /src | |
parent | 421c1b9bd63f3bb9bdbe02cc9b361832d1007f5a (diff) |
nir: add glsl_channel_type() helper
Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/nir_types.cpp | 27 | ||||
-rw-r--r-- | src/compiler/nir_types.h | 2 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/compiler/nir_types.cpp b/src/compiler/nir_types.cpp index b0d84aae384..b1b17ebd831 100644 --- a/src/compiler/nir_types.cpp +++ b/src/compiler/nir_types.cpp @@ -397,3 +397,30 @@ glsl_transposed_type(const struct glsl_type *type) return glsl_type::get_instance(type->base_type, type->matrix_columns, type->vector_elements); } + +const glsl_type * +glsl_channel_type(const glsl_type *t) +{ + switch (glsl_get_base_type(t)) { + case GLSL_TYPE_ARRAY: { + const glsl_type *base = glsl_channel_type(glsl_get_array_element(t)); + return glsl_array_type(base, glsl_get_length(t)); + } + case GLSL_TYPE_UINT: + return glsl_uint_type(); + case GLSL_TYPE_INT: + return glsl_int_type(); + case GLSL_TYPE_FLOAT: + return glsl_float_type(); + case GLSL_TYPE_BOOL: + return glsl_bool_type(); + case GLSL_TYPE_DOUBLE: + return glsl_double_type(); + case GLSL_TYPE_UINT64: + return glsl_uint64_t_type(); + case GLSL_TYPE_INT64: + return glsl_int64_t_type(); + default: + unreachable("Unhandled base type glsl_channel_type()"); + } +} diff --git a/src/compiler/nir_types.h b/src/compiler/nir_types.h index d9a9513b9f4..9f398b92786 100644 --- a/src/compiler/nir_types.h +++ b/src/compiler/nir_types.h @@ -163,6 +163,8 @@ const struct glsl_type * glsl_function_type(const struct glsl_type *return_type, const struct glsl_type *glsl_transposed_type(const struct glsl_type *type); +const struct glsl_type *glsl_channel_type(const struct glsl_type *type); + #ifdef __cplusplus } #endif |