From: Jason Ekstrand Date: Fri, 12 Feb 2016 06:04:14 +0000 (-0800) Subject: nir/types: Add more type constructor functions X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7410c609882f490e62b86a261df860a56379be96;p=mesa.git nir/types: Add more type constructor functions Reviewed-by: Jordan Justen --- diff --git a/src/compiler/nir_types.cpp b/src/compiler/nir_types.cpp index 2942810f43b..3669cfed360 100644 --- a/src/compiler/nir_types.cpp +++ b/src/compiler/nir_types.cpp @@ -249,12 +249,44 @@ glsl_vec4_type(void) return glsl_type::vec4_type; } +const glsl_type * +glsl_int_type(void) +{ + return glsl_type::int_type; +} + const glsl_type * glsl_uint_type(void) { return glsl_type::uint_type; } +const glsl_type * +glsl_bool_type(void) +{ + return glsl_type::bool_type; +} + +const glsl_type * +glsl_scalar_type(enum glsl_base_type base_type) +{ + return glsl_type::get_instance(base_type, 1, 1); +} + +const glsl_type * +glsl_vector_type(enum glsl_base_type base_type, unsigned components) +{ + assert(components > 1 && components <= 4); + return glsl_type::get_instance(base_type, components, 1); +} + +const glsl_type * +glsl_matrix_type(enum glsl_base_type base_type, unsigned rows, unsigned columns) +{ + assert(rows > 1 && rows <= 4 && columns >= 1 && columns <= 4); + return glsl_type::get_instance(base_type, rows, columns); +} + const glsl_type * glsl_array_type(const glsl_type *base, unsigned elements) { @@ -262,6 +294,12 @@ glsl_array_type(const glsl_type *base, unsigned elements) } const glsl_type * +glsl_struct_type(const glsl_struct_field *fields, + unsigned num_fields, const char *name) +{ + return glsl_type::get_record_instance(fields, num_fields, name); +} + const struct glsl_type * glsl_sampler_type(enum glsl_sampler_dim dim, bool is_shadow, bool is_array, enum glsl_base_type base_type) @@ -288,3 +326,11 @@ glsl_function_type(const glsl_type *return_type, { return glsl_type::get_function_instance(return_type, params, num_params); } + +const glsl_type * +glsl_transposed_type(const struct glsl_type *type) +{ + assert(glsl_type_is_matrix(type)); + return glsl_type::get_instance(type->base_type, type->matrix_columns, + type->vector_elements); +} diff --git a/src/compiler/nir_types.h b/src/compiler/nir_types.h index 48927da33c6..18d64b768d4 100644 --- a/src/compiler/nir_types.h +++ b/src/compiler/nir_types.h @@ -94,9 +94,19 @@ const struct glsl_type *glsl_void_type(void); const struct glsl_type *glsl_float_type(void); const struct glsl_type *glsl_vec_type(unsigned n); const struct glsl_type *glsl_vec4_type(void); +const struct glsl_type *glsl_int_type(void); const struct glsl_type *glsl_uint_type(void); +const struct glsl_type *glsl_bool_type(void); + +const struct glsl_type *glsl_scalar_type(enum glsl_base_type base_type); +const struct glsl_type *glsl_vector_type(enum glsl_base_type base_type, + unsigned components); +const struct glsl_type *glsl_matrix_type(enum glsl_base_type base_type, + unsigned rows, unsigned columns); const struct glsl_type *glsl_array_type(const struct glsl_type *base, unsigned elements); +const struct glsl_type *glsl_struct_type(const struct glsl_struct_field *fields, + unsigned num_fields, const char *name); const struct glsl_type *glsl_sampler_type(enum glsl_sampler_dim dim, bool is_shadow, bool is_array, enum glsl_base_type base_type); @@ -108,6 +118,8 @@ const struct glsl_type * glsl_function_type(const struct glsl_type *return_type, const struct glsl_function_param *params, unsigned num_params); +const struct glsl_type *glsl_transposed_type(const struct glsl_type *type); + #ifdef __cplusplus } #endif