summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2018-07-25 08:53:58 -0700
committerJason Ekstrand <[email protected]>2018-08-23 21:44:14 -0500
commitb489998e63f5bd773344c8185d2e9817936116c9 (patch)
tree774a4f43b09aadf246cf19065f0ea8fd0085a08c /src
parentb03dcb1e5f507c5950d0de053a6f76e6306ee71f (diff)
nir/types: Add array_or_matrix helpers
Reviewed-by: Thomas Helland<[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/compiler/nir_types.cpp15
-rw-r--r--src/compiler/nir_types.h2
2 files changed, 17 insertions, 0 deletions
diff --git a/src/compiler/nir_types.cpp b/src/compiler/nir_types.cpp
index c8a29404969..1fae6aa8180 100644
--- a/src/compiler/nir_types.cpp
+++ b/src/compiler/nir_types.cpp
@@ -51,6 +51,15 @@ glsl_without_array(const glsl_type *type)
}
const glsl_type *
+glsl_without_array_or_matrix(const glsl_type *type)
+{
+ type = type->without_array();
+ if (type->is_matrix())
+ type = type->column_type();
+ return type;
+}
+
+const glsl_type *
glsl_get_array_instance(const glsl_type *type,
unsigned array_size)
{
@@ -231,6 +240,12 @@ glsl_type_is_array_of_arrays(const struct glsl_type *type)
}
bool
+glsl_type_is_array_or_matrix(const struct glsl_type *type)
+{
+ return type->is_array() || type->is_matrix();
+}
+
+bool
glsl_type_is_struct(const struct glsl_type *type)
{
return type->is_record() || type->is_interface();
diff --git a/src/compiler/nir_types.h b/src/compiler/nir_types.h
index db3a4dee2d9..ea0438541af 100644
--- a/src/compiler/nir_types.h
+++ b/src/compiler/nir_types.h
@@ -48,6 +48,7 @@ const struct glsl_type *glsl_get_struct_field(const struct glsl_type *type,
const struct glsl_type *glsl_get_array_element(const struct glsl_type *type);
const struct glsl_type *glsl_without_array(const struct glsl_type *type);
+const struct glsl_type *glsl_without_array_or_matrix(const struct glsl_type *type);
const struct glsl_type *glsl_get_array_instance(const struct glsl_type *type,
unsigned array_size);
@@ -133,6 +134,7 @@ bool glsl_type_is_vector_or_scalar(const struct glsl_type *type);
bool glsl_type_is_matrix(const struct glsl_type *type);
bool glsl_type_is_array(const struct glsl_type *type);
bool glsl_type_is_array_of_arrays(const struct glsl_type *type);
+bool glsl_type_is_array_or_matrix(const struct glsl_type *type);
bool glsl_type_is_struct(const struct glsl_type *type);
bool glsl_type_is_sampler(const struct glsl_type *type);
bool glsl_type_is_image(const struct glsl_type *type);