From 795d8dff89c7e6841f61e3b9851de95765f4d001 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Wed, 29 Jun 2016 15:17:16 -0700 Subject: [PATCH] glsl: Document and enforce restriction on type values Signed-off-by: Ian Romanick Reviewed-by: Dave Airlie --- src/compiler/glsl_types.cpp | 7 +++++++ src/compiler/glsl_types.h | 3 +++ 2 files changed, 10 insertions(+) diff --git a/src/compiler/glsl_types.cpp b/src/compiler/glsl_types.cpp index 884f3118e83..066a74e5283 100644 --- a/src/compiler/glsl_types.cpp +++ b/src/compiler/glsl_types.cpp @@ -55,6 +55,13 @@ glsl_type::glsl_type(GLenum gl_type, vector_elements(vector_elements), matrix_columns(matrix_columns), length(0) { + /* Values of these types must fit in the two bits of + * glsl_type::sampled_type. + */ + STATIC_ASSERT((unsigned(GLSL_TYPE_UINT) & 3) == unsigned(GLSL_TYPE_UINT)); + STATIC_ASSERT((unsigned(GLSL_TYPE_INT) & 3) == unsigned(GLSL_TYPE_INT)); + STATIC_ASSERT((unsigned(GLSL_TYPE_FLOAT) & 3) == unsigned(GLSL_TYPE_FLOAT)); + mtx_lock(&glsl_type::mutex); init_ralloc_type_ctx(); diff --git a/src/compiler/glsl_types.h b/src/compiler/glsl_types.h index c3a01854fc2..7c4827d8f83 100644 --- a/src/compiler/glsl_types.h +++ b/src/compiler/glsl_types.h @@ -47,6 +47,9 @@ _mesa_glsl_release_types(void); #endif enum glsl_base_type { + /* Note: GLSL_TYPE_UINT, GLSL_TYPE_INT, and GLSL_TYPE_FLOAT must be 0, 1, + * and 2 so that they will fit in the 2 bits of glsl_type::sampled_type. + */ GLSL_TYPE_UINT = 0, GLSL_TYPE_INT, GLSL_TYPE_FLOAT, -- 2.30.2