diff options
-rw-r--r-- | glsl_types.h | 40 |
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 |