From 3b59f5ca170a5459e2f7cd5a0d0142f6e15dde3c Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Wed, 20 Sep 2017 09:49:57 +1000 Subject: [PATCH] nir: add glsl_channel_type() helper Reviewed-by: Eric Anholt --- src/compiler/nir_types.cpp | 27 +++++++++++++++++++++++++++ src/compiler/nir_types.h | 2 ++ 2 files changed, 29 insertions(+) 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 -- 2.30.2