/************************************************************************** * * Copyright 2009 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sub license, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice (including the * next paragraph) shall be included in all copies or substantial portions * of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * **************************************************************************/ #include "util/u_memory.h" #include "util/u_debug.h" #include "util/u_dump.h" #if 0 static const char * util_dump_strip_prefix(const char *name, const char *prefix) { const char *stripped; assert(name); assert(prefix); stripped = name; while(*prefix) { if(*stripped != *prefix) return name; ++stripped; ++prefix; } return stripped; } #endif static const char * util_dump_enum_continuous(unsigned value, unsigned num_names, const char **names) { if (value >= num_names) return UTIL_DUMP_INVALID_NAME; return names[value]; } #define DEFINE_UTIL_DUMP_CONTINUOUS(_name) \ const char * \ util_dump_##_name(unsigned value, boolean shortened) \ { \ if(shortened) \ return util_dump_enum_continuous(value, Elements(util_dump_##_name##_short_names), util_dump_##_name##_short_names); \ else \ return util_dump_enum_continuous(value, Elements(util_dump_##_name##_names), util_dump_##_name##_names); \ } static const char * util_dump_blend_factor_names[] = { UTIL_DUMP_INVALID_NAME, /* 0x0 */ "PIPE_BLENDFACTOR_ONE", "PIPE_BLENDFACTOR_SRC_COLOR", "PIPE_BLENDFACTOR_SRC_ALPHA", "PIPE_BLENDFACTOR_DST_ALPHA", "PIPE_BLENDFACTOR_DST_COLOR", "PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE", "PIPE_BLENDFACTOR_CONST_COLOR", "PIPE_BLENDFACTOR_CONST_ALPHA", "PIPE_BLENDFACTOR_SRC1_COLOR", "PIPE_BLENDFACTOR_SRC1_ALPHA", UTIL_DUMP_INVALID_NAME, /* 0x0b */ UTIL_DUMP_INVALID_NAME, /* 0x0c */ UTIL_DUMP_INVALID_NAME, /* 0x0d */ UTIL_DUMP_INVALID_NAME, /* 0x0e */ UTIL_DUMP_INVALID_NAME, /* 0x0f */ UTIL_DUMP_INVALID_NAME, /* 0x10 */ "PIPE_BLENDFACTOR_ZERO", "PIPE_BLENDFACTOR_INV_SRC_COLOR", "PIPE_BLENDFACTOR_INV_SRC_ALPHA", "PIPE_BLENDFACTOR_INV_DST_ALPHA", "PIPE_BLENDFACTOR_INV_DST_COLOR", UTIL_DUMP_INVALID_NAME, /* 0x16 */ "PIPE_BLENDFACTOR_INV_CONST_COLOR", "PIPE_BLENDFACTOR_INV_CONST_ALPHA", "PIPE_BLENDFACTOR_INV_SRC1_COLOR", "PIPE_BLENDFACTOR_INV_SRC1_ALPHA" }; static const char * util_dump_blend_factor_short_names[] = { UTIL_DUMP_INVALID_NAME, /* 0x0 */ "one", "src_color", "src_alpha", "dst_alpha", "dst_color", "src_alpha_saturate", "const_color", "const_alpha", "src1_color", "src1_alpha", UTIL_DUMP_INVALID_NAME, /* 0x0b */ UTIL_DUMP_INVALID_NAME, /* 0x0c */ UTIL_DUMP_INVALID_NAME, /* 0x0d */ UTIL_DUMP_INVALID_NAME, /* 0x0e */ UTIL_DUMP_INVALID_NAME, /* 0x0f */ UTIL_DUMP_INVALID_NAME, /* 0x10 */ "zero", "inv_src_color", "inv_src_alpha", "inv_dst_alpha", "inv_dst_color", UTIL_DUMP_INVALID_NAME, /* 0x16 */ "inv_const_color", "inv_const_alpha", "inv_src1_color", "inv_src1_alpha" }; DEFINE_UTIL_DUMP_CONTINUOUS(blend_factor) static const char * util_dump_blend_func_names[] = { "PIPE_BLEND_ADD", "PIPE_BLEND_SUBTRACT", "PIPE_BLEND_REVERSE_SUBTRACT", "PIPE_BLEND_MIN", "PIPE_BLEND_MAX" }; static const char * util_dump_blend_func_short_names[] = { "add", "sub", "rev_sub", "min", "max" }; DEFINE_UTIL_DUMP_CONTINUOUS(blend_func) static const char * util_dump_logicop_names[] = { "PIPE_LOGICOP_CLEAR", "PIPE_LOGICOP_NOR", "PIPE_LOGICOP_AND_INVERTED", "PIPE_LOGICOP_COPY_INVERTED", "PIPE_LOGICOP_AND_REVERSE", "PIPE_LOGICOP_INVERT", "PIPE_LOGICOP_XOR", "PIPE_LOGICOP_NAND", "PIPE_LOGICOP_AND", "PIPE_LOGICOP_EQUIV", "PIPE_LOGICOP_NOOP", "PIPE_LOGICOP_OR_INVERTED", "PIPE_LOGICOP_COPY", "PIPE_LOGICOP_OR_REVERSE", "PIPE_LOGICOP_OR", "PIPE_LOGICOP_SET" }; static const char * util_dump_logicop_short_names[] = { "clear", "nor", "and_inverted", "copy_inverted", "and_reverse", "invert", "xor", "nand", "and", "equiv", "noop", "or_inverted", "copy", "or_reverse", "or", "set" }; DEFINE_UTIL_DUMP_CONTINUOUS(logicop) static const char * util_dump_func_names[] = { "PIPE_FUNC_NEVER", "PIPE_FUNC_LESS", "PIPE_FUNC_EQUAL", "PIPE_FUNC_LEQUAL", "PIPE_FUNC_GREATER", "PIPE_FUNC_NOTEQUAL", "PIPE_FUNC_GEQUAL", "PIPE_FUNC_ALWAYS" }; static const char * util_dump_func_short_names[] = { "never", "less", "equal", "less_equal", "greater", "not_equal", "greater_equal", "always" }; DEFINE_UTIL_DUMP_CONTINUOUS(func) static const char * util_dump_stencil_op_names[] = { "PIPE_STENCIL_OP_KEEP", "PIPE_STENCIL_OP_ZERO", "PIPE_STENCIL_OP_REPLACE", "PIPE_STENCIL_OP_INCR", "PIPE_STENCIL_OP_DECR", "PIPE_STENCIL_OP_INCR_WRAP", "PIPE_STENCIL_OP_DECR_WRAP", "PIPE_STENCIL_OP_INVERT" }; static const char * util_dump_stencil_op_short_names[] = { "keep", "zero", "replace", "incr", "decr", "incr_wrap", "decr_wrap", "invert" }; DEFINE_UTIL_DUMP_CONTINUOUS(stencil_op) static const char * util_dump_tex_target_names[] = { "PIPE_BUFFER", "PIPE_TEXTURE_1D", "PIPE_TEXTURE_2D", "PIPE_TEXTURE_3D", "PIPE_TEXTURE_CUBE" }; static const char * util_dump_tex_target_short_names[] = { "buffer", "1d", "2d", "3d", "cube" }; DEFINE_UTIL_DUMP_CONTINUOUS(tex_target) static const char * util_dump_tex_wrap_names[] = { "PIPE_TEX_WRAP_REPEAT", "PIPE_TEX_WRAP_CLAMP", "PIPE_TEX_WRAP_CLAMP_TO_EDGE", "PIPE_TEX_WRAP_CLAMP_TO_BORDER", "PIPE_TEX_WRAP_MIRROR_REPEAT", "PIPE_TEX_WRAP_MIRROR_CLAMP", "PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE", "PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER" }; static const char * util_dump_tex_wrap_short_names[] = { "repeat", "clamp", "clamp_to_edge", "clamp_to_border", "mirror_repeat", "mirror_clamp", "mirror_clamp_to_edge", "mirror_clamp_to_border" }; DEFINE_UTIL_DUMP_CONTINUOUS(tex_wrap) static const char * util_dump_tex_mipfilter_names[] = { "PIPE_TEX_MIPFILTER_NEAREST", "PIPE_TEX_MIPFILTER_LINEAR", "PIPE_TEX_MIPFILTER_NONE" }; static const char * util_dump_tex_mipfilter_short_names[] = { "nearest", "linear", "none" }; DEFINE_UTIL_DUMP_CONTINUOUS(tex_mipfilter) static const char * util_dump_tex_filter_names[] = { "PIPE_TEX_FILTER_NEAREST", "PIPE_TEX_FILTER_LINEAR" }; static const char * util_dump_tex_filter_short_names[] = { "nearest", "linear" }; DEFINE_UTIL_DUMP_CONTINUOUS(tex_filter)