Use the proper enum types for various variables. Makes life in gdb a little nicer. Note that the size of enum bitfields must be one larger so the high bit is always zero (for MSVC).
v2: also increase size of image_format bitfield, per Eric Engestrom. v3: use the new ASSERT_BITFIELD_SIZE() macro Reviewed-by: Charmaine Lee <charmai...@vmware.com> Reviewed-by: Roland Scheidegger <srol...@vmware.com> --- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 18 +++++++++++++++--- src/mesa/state_tracker/st_glsl_to_tgsi_private.h | 6 +++--- src/mesa/state_tracker/st_mesa_to_tgsi.c | 6 +++--- src/mesa/state_tracker/st_mesa_to_tgsi.h | 7 ++++--- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 54e1961..e93c48c 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -58,6 +58,8 @@ #include "st_glsl_to_tgsi_temprename.h" #include "util/hash_table.h" +#include "util/bitfield_assert.h" + #include <algorithm> #define PROGRAM_ANY_CONST ((1 << PROGRAM_STATE_VAR) | \ @@ -179,10 +181,10 @@ public: int num_address_regs; uint32_t samplers_used; glsl_base_type sampler_types[PIPE_MAX_SAMPLERS]; - int sampler_targets[PIPE_MAX_SAMPLERS]; /**< One of TGSI_TEXTURE_* */ + enum tgsi_texture_type sampler_targets[PIPE_MAX_SAMPLERS]; int images_used; int image_targets[PIPE_MAX_SHADER_IMAGES]; - unsigned image_formats[PIPE_MAX_SHADER_IMAGES]; + enum pipe_format image_formats[PIPE_MAX_SHADER_IMAGES]; bool indirect_addr_consts; int wpos_transform_const; @@ -6169,6 +6171,15 @@ st_translate_program( assert(numInputs <= ARRAY_SIZE(t->inputs)); assert(numOutputs <= ARRAY_SIZE(t->outputs)); + ASSERT_BITFIELD_SIZE(st_src_reg, type, GLSL_TYPE_ERROR); + ASSERT_BITFIELD_SIZE(st_dst_reg, type, GLSL_TYPE_ERROR); + ASSERT_BITFIELD_SIZE(glsl_to_tgsi_instruction, image_format, PIPE_FORMAT_COUNT); + ASSERT_BITFIELD_SIZE(glsl_to_tgsi_instruction, tex_target, + (gl_texture_index) (NUM_TEXTURE_TARGETS - 1)); + ASSERT_BITFIELD_SIZE(glsl_to_tgsi_instruction, image_format, + (enum pipe_format) (PIPE_FORMAT_COUNT - 1)); + ASSERT_BITFIELD_SIZE(glsl_to_tgsi_instruction, op, TGSI_OPCODE_LAST - 1); + t = CALLOC_STRUCT(st_translate); if (!t) { ret = PIPE_ERROR_OUT_OF_MEMORY; @@ -6489,7 +6500,8 @@ st_translate_program( /* texture samplers */ for (i = 0; i < frag_const->MaxTextureImageUnits; i++) { if (program->samplers_used & (1u << i)) { - unsigned type = st_translate_texture_type(program->sampler_types[i]); + enum tgsi_return_type type = + st_translate_texture_type(program->sampler_types[i]); t->samplers[i] = ureg_DECL_sampler(ureg, i); diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_private.h b/src/mesa/state_tracker/st_glsl_to_tgsi_private.h index d57525d..3e51936 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi_private.h +++ b/src/mesa/state_tracker/st_glsl_to_tgsi_private.h @@ -127,13 +127,13 @@ public: unsigned is_64bit_expanded:1; unsigned sampler_base:5; unsigned sampler_array_size:6; /**< 1-based size of sampler array, 1 if not array */ - unsigned tex_target:4; /**< One of TEXTURE_*_INDEX */ + gl_texture_index tex_target:5; glsl_base_type tex_type:5; unsigned tex_shadow:1; - unsigned image_format:9; + enum pipe_format image_format:10; unsigned tex_offset_num_offset:3; unsigned dead_mask:4; /**< Used in dead code elimination */ - unsigned buffer_access:3; /**< buffer access type */ + unsigned buffer_access:3; /**< bitmask of TGSI_MEMORY_x bits */ const struct tgsi_opcode_info *info; }; diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c b/src/mesa/state_tracker/st_mesa_to_tgsi.c index 275ca76..75825c3 100644 --- a/src/mesa/state_tracker/st_mesa_to_tgsi.c +++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c @@ -164,8 +164,8 @@ src_register(struct st_translate *t, /** * Map mesa texture target to TGSI texture target. */ -unsigned -st_translate_texture_target(GLuint textarget, GLboolean shadow) +enum tgsi_texture_type +st_translate_texture_target(gl_texture_index textarget, GLboolean shadow) { if (shadow) { switch (textarget) { @@ -223,7 +223,7 @@ st_translate_texture_target(GLuint textarget, GLboolean shadow) /** * Map GLSL base type to TGSI return type. */ -unsigned +enum tgsi_return_type st_translate_texture_type(enum glsl_base_type type) { switch (type) { diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.h b/src/mesa/state_tracker/st_mesa_to_tgsi.h index 106cf85..06e8b70 100644 --- a/src/mesa/state_tracker/st_mesa_to_tgsi.h +++ b/src/mesa/state_tracker/st_mesa_to_tgsi.h @@ -30,6 +30,7 @@ #define ST_MESA_TO_TGSI_H #include "main/glheader.h" +#include "main/mtypes.h" #include "pipe/p_compiler.h" #include "pipe/p_defines.h" @@ -62,10 +63,10 @@ st_translate_mesa_program( const ubyte outputSemanticName[], const ubyte outputSemanticIndex[]); -unsigned -st_translate_texture_target(GLuint textarget, GLboolean shadow); +enum tgsi_texture_type +st_translate_texture_target(gl_texture_index textarget, GLboolean shadow); -unsigned +enum tgsi_return_type st_translate_texture_type(enum glsl_base_type type); #if defined __cplusplus -- 1.9.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev