From: Ian Romanick Date: Thu, 25 Mar 2010 18:42:45 +0000 (-0700) Subject: Add queries to get the glsl_type of a row or column of a matrix X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=252127c379404f0c0c23a5f0e2e4175816f7e903;p=mesa.git Add queries to get the glsl_type of a row or column of a matrix --- diff --git a/glsl_types.h b/glsl_types.h index 04a9ccf4146..e1768d520b3 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