From: Timothy Arceri Date: Tue, 19 Sep 2017 23:49:57 +0000 (+1000) Subject: nir: add glsl_channel_type() helper X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3b59f5ca170a5459e2f7cd5a0d0142f6e15dde3c;p=mesa.git nir: add glsl_channel_type() helper Reviewed-by: Eric Anholt --- 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