summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--glsl_types.h40
1 files changed, 34 insertions, 6 deletions
diff --git a/glsl_types.h b/glsl_types.h
index 04a9ccf414..e1768d520b 100644
--- a/glsl_types.h
+++ b/glsl_types.h
@@ -39,6 +39,12 @@
#define GLSL_TYPE_VOID 8
#define GLSL_TYPE_ERROR 9
+extern const struct glsl_type *const glsl_error_type;
+extern const struct glsl_type *const glsl_int_type;
+extern const struct glsl_type *const glsl_uint_type;
+extern const struct glsl_type *const glsl_float_type;
+extern const struct glsl_type *const glsl_bool_type;
+
#define is_numeric_base_type(b) \
(((b) >= GLSL_TYPE_UINT) && ((b) <= GLSL_TYPE_FLOAT))
@@ -223,6 +229,34 @@ struct glsl_type {
return base_type == GLSL_TYPE_ERROR;
}
+ /**
+ * Query the full type of a matrix row
+ *
+ * \return
+ * If the type is not a matrix, \c glsl_error_type is returned. Otherwise
+ * a type matching the rows of the matrix is returned.
+ */
+ const glsl_type *row_type() const
+ {
+ return is_matrix()
+ ? get_instance(base_type, matrix_rows, 1)
+ : glsl_error_type;
+ }
+
+ /**
+ * Query the full type of a matrix column
+ *
+ * \return
+ * If the type is not a matrix, \c glsl_error_type is returned. Otherwise
+ * a type matching the columns of the matrix is returned.
+ */
+ const glsl_type *column_type() const
+ {
+ return is_matrix()
+ ? get_instance(base_type, vector_elements, 1)
+ : glsl_error_type;
+ }
+
private:
/**
* \name Pointers to various type singletons
@@ -254,12 +288,6 @@ extern "C" {
extern void
_mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state);
-extern const struct glsl_type *const glsl_error_type;
-extern const struct glsl_type *const glsl_int_type;
-extern const struct glsl_type *const glsl_uint_type;
-extern const struct glsl_type *const glsl_float_type;
-extern const struct glsl_type *const glsl_bool_type;
-
#ifdef __cplusplus
}
#endif