summaryrefslogtreecommitdiff
path: root/glsl_types.h
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2010-03-25 11:42:45 -0700
committerIan Romanick <ian.d.romanick@intel.com>2010-03-25 11:42:45 -0700
commit252127c379404f0c0c23a5f0e2e4175816f7e903 (patch)
treeefe8f0558bad9f9f5893fcfdb848bfa186f56eb3 /glsl_types.h
parent664da2510aa11c5319acad3bd6e96a9504a0b3fc (diff)
Add queries to get the glsl_type of a row or column of a matrix
Diffstat (limited to 'glsl_types.h')
-rw-r--r--glsl_types.h40
1 files changed, 34 insertions, 6 deletions
diff --git a/glsl_types.h b/glsl_types.h
index 04a9ccf..e1768d5 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