Path: blob/21.2-virgl/src/gallium/auxiliary/util/u_dump_defines.c
4561 views
/**************************************************************************1*2* Copyright 2009 VMware, Inc.3* All Rights Reserved.4*5* Permission is hereby granted, free of charge, to any person obtaining a6* copy of this software and associated documentation files (the7* "Software"), to deal in the Software without restriction, including8* without limitation the rights to use, copy, modify, merge, publish,9* distribute, sub license, and/or sell copies of the Software, and to10* permit persons to whom the Software is furnished to do so, subject to11* the following conditions:12*13* The above copyright notice and this permission notice (including the14* next paragraph) shall be included in all copies or substantial portions15* of the Software.16*17* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS18* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF19* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.20* IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR21* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,22* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE23* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.24*25**************************************************************************/262728#include "util/u_memory.h"29#include "util/u_debug.h"30#include "util/u_dump.h"31#include "util/u_math.h"323334#if 035static const char *36util_dump_strip_prefix(const char *name,37const char *prefix)38{39const char *stripped;40assert(name);41assert(prefix);42stripped = name;43while(*prefix) {44if(*stripped != *prefix)45return name;4647++stripped;48++prefix;49}50return stripped;51}52#endif5354static const char *55util_dump_enum_continuous(unsigned value,56unsigned num_names,57const char **names)58{59if (value >= num_names)60return UTIL_DUMP_INVALID_NAME;61return names[value];62}636465#define DEFINE_UTIL_STR_CONTINUOUS(_name) \66const char * \67util_str_##_name(unsigned value, boolean shortened) \68{ \69if(shortened) \70return util_dump_enum_continuous(value, ARRAY_SIZE(util_##_name##_short_names), util_##_name##_short_names); \71else \72return util_dump_enum_continuous(value, ARRAY_SIZE(util_##_name##_names), util_##_name##_names); \73}747576/**77* Same as DEFINE_UTIL_STR_CONTINUOUS but with static assertions to detect78* failures to update lists.79*/80#define DEFINE_UTIL_STR_CONTINUOUS_COUNT(_name, _count) \81const char * \82util_str_##_name(unsigned value, boolean shortened) \83{ \84STATIC_ASSERT(ARRAY_SIZE(util_##_name##_names) == _count); \85STATIC_ASSERT(ARRAY_SIZE(util_##_name##_short_names) == _count); \86if(shortened) \87return util_dump_enum_continuous(value, ARRAY_SIZE(util_##_name##_short_names), util_##_name##_short_names); \88else \89return util_dump_enum_continuous(value, ARRAY_SIZE(util_##_name##_names), util_##_name##_names); \90}9192static void93util_dump_flags_continuous(FILE *stream, unsigned value, unsigned num_names,94const char * const *names)95{96unsigned unknown = 0;97bool first = true;9899while (value) {100int i = u_bit_scan(&value);101if (i >= (int)num_names || !names[i])102unknown |= 1u << i;103if (!first)104fputs("|", stream);105fputs(names[i], stream);106first = false;107}108109if (unknown) {110if (!first)111fputs("|", stream);112fprintf(stream, "%x", unknown);113first = false;114}115116if (first)117fputs("0", stream);118}119120#define DEFINE_UTIL_DUMP_FLAGS_CONTINUOUS(_name) \121void \122util_dump_##_name(FILE *stream, unsigned value) \123{ \124util_dump_flags_continuous(stream, value, ARRAY_SIZE(util_##_name##_names), \125util_##_name##_names); \126}127128static const char *129util_blend_factor_names[] = {130UTIL_DUMP_INVALID_NAME, /* 0x0 */131"PIPE_BLENDFACTOR_ONE",132"PIPE_BLENDFACTOR_SRC_COLOR",133"PIPE_BLENDFACTOR_SRC_ALPHA",134"PIPE_BLENDFACTOR_DST_ALPHA",135"PIPE_BLENDFACTOR_DST_COLOR",136"PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE",137"PIPE_BLENDFACTOR_CONST_COLOR",138"PIPE_BLENDFACTOR_CONST_ALPHA",139"PIPE_BLENDFACTOR_SRC1_COLOR",140"PIPE_BLENDFACTOR_SRC1_ALPHA",141UTIL_DUMP_INVALID_NAME, /* 0x0b */142UTIL_DUMP_INVALID_NAME, /* 0x0c */143UTIL_DUMP_INVALID_NAME, /* 0x0d */144UTIL_DUMP_INVALID_NAME, /* 0x0e */145UTIL_DUMP_INVALID_NAME, /* 0x0f */146UTIL_DUMP_INVALID_NAME, /* 0x10 */147"PIPE_BLENDFACTOR_ZERO",148"PIPE_BLENDFACTOR_INV_SRC_COLOR",149"PIPE_BLENDFACTOR_INV_SRC_ALPHA",150"PIPE_BLENDFACTOR_INV_DST_ALPHA",151"PIPE_BLENDFACTOR_INV_DST_COLOR",152UTIL_DUMP_INVALID_NAME, /* 0x16 */153"PIPE_BLENDFACTOR_INV_CONST_COLOR",154"PIPE_BLENDFACTOR_INV_CONST_ALPHA",155"PIPE_BLENDFACTOR_INV_SRC1_COLOR",156"PIPE_BLENDFACTOR_INV_SRC1_ALPHA"157};158159static const char *160util_blend_factor_short_names[] = {161UTIL_DUMP_INVALID_NAME, /* 0x0 */162"one",163"src_color",164"src_alpha",165"dst_alpha",166"dst_color",167"src_alpha_saturate",168"const_color",169"const_alpha",170"src1_color",171"src1_alpha",172UTIL_DUMP_INVALID_NAME, /* 0x0b */173UTIL_DUMP_INVALID_NAME, /* 0x0c */174UTIL_DUMP_INVALID_NAME, /* 0x0d */175UTIL_DUMP_INVALID_NAME, /* 0x0e */176UTIL_DUMP_INVALID_NAME, /* 0x0f */177UTIL_DUMP_INVALID_NAME, /* 0x10 */178"zero",179"inv_src_color",180"inv_src_alpha",181"inv_dst_alpha",182"inv_dst_color",183UTIL_DUMP_INVALID_NAME, /* 0x16 */184"inv_const_color",185"inv_const_alpha",186"inv_src1_color",187"inv_src1_alpha"188};189190DEFINE_UTIL_STR_CONTINUOUS(blend_factor)191192193static const char *194util_blend_func_names[] = {195"PIPE_BLEND_ADD",196"PIPE_BLEND_SUBTRACT",197"PIPE_BLEND_REVERSE_SUBTRACT",198"PIPE_BLEND_MIN",199"PIPE_BLEND_MAX"200};201202static const char *203util_blend_func_short_names[] = {204"add",205"sub",206"rev_sub",207"min",208"max"209};210211DEFINE_UTIL_STR_CONTINUOUS(blend_func)212213214static const char *215util_logicop_names[] = {216"PIPE_LOGICOP_CLEAR",217"PIPE_LOGICOP_NOR",218"PIPE_LOGICOP_AND_INVERTED",219"PIPE_LOGICOP_COPY_INVERTED",220"PIPE_LOGICOP_AND_REVERSE",221"PIPE_LOGICOP_INVERT",222"PIPE_LOGICOP_XOR",223"PIPE_LOGICOP_NAND",224"PIPE_LOGICOP_AND",225"PIPE_LOGICOP_EQUIV",226"PIPE_LOGICOP_NOOP",227"PIPE_LOGICOP_OR_INVERTED",228"PIPE_LOGICOP_COPY",229"PIPE_LOGICOP_OR_REVERSE",230"PIPE_LOGICOP_OR",231"PIPE_LOGICOP_SET"232};233234static const char *235util_logicop_short_names[] = {236"clear",237"nor",238"and_inverted",239"copy_inverted",240"and_reverse",241"invert",242"xor",243"nand",244"and",245"equiv",246"noop",247"or_inverted",248"copy",249"or_reverse",250"or",251"set"252};253254DEFINE_UTIL_STR_CONTINUOUS(logicop)255256257static const char *258util_func_names[] = {259"PIPE_FUNC_NEVER",260"PIPE_FUNC_LESS",261"PIPE_FUNC_EQUAL",262"PIPE_FUNC_LEQUAL",263"PIPE_FUNC_GREATER",264"PIPE_FUNC_NOTEQUAL",265"PIPE_FUNC_GEQUAL",266"PIPE_FUNC_ALWAYS"267};268269static const char *270util_func_short_names[] = {271"never",272"less",273"equal",274"less_equal",275"greater",276"not_equal",277"greater_equal",278"always"279};280281DEFINE_UTIL_STR_CONTINUOUS(func)282283284static const char *285util_stencil_op_names[] = {286"PIPE_STENCIL_OP_KEEP",287"PIPE_STENCIL_OP_ZERO",288"PIPE_STENCIL_OP_REPLACE",289"PIPE_STENCIL_OP_INCR",290"PIPE_STENCIL_OP_DECR",291"PIPE_STENCIL_OP_INCR_WRAP",292"PIPE_STENCIL_OP_DECR_WRAP",293"PIPE_STENCIL_OP_INVERT"294};295296static const char *297util_stencil_op_short_names[] = {298"keep",299"zero",300"replace",301"incr",302"decr",303"incr_wrap",304"decr_wrap",305"invert"306};307308DEFINE_UTIL_STR_CONTINUOUS(stencil_op)309310311static const char *312util_tex_target_names[] = {313"PIPE_BUFFER",314"PIPE_TEXTURE_1D",315"PIPE_TEXTURE_2D",316"PIPE_TEXTURE_3D",317"PIPE_TEXTURE_CUBE",318"PIPE_TEXTURE_RECT",319"PIPE_TEXTURE_1D_ARRAY",320"PIPE_TEXTURE_2D_ARRAY",321"PIPE_TEXTURE_CUBE_ARRAY",322};323324static const char *325util_tex_target_short_names[] = {326"buffer",327"1d",328"2d",329"3d",330"cube",331"rect",332"1d_array",333"2d_array",334"cube_array",335};336337DEFINE_UTIL_STR_CONTINUOUS_COUNT(tex_target, PIPE_MAX_TEXTURE_TYPES)338339340static const char *341util_tex_wrap_names[] = {342"PIPE_TEX_WRAP_REPEAT",343"PIPE_TEX_WRAP_CLAMP",344"PIPE_TEX_WRAP_CLAMP_TO_EDGE",345"PIPE_TEX_WRAP_CLAMP_TO_BORDER",346"PIPE_TEX_WRAP_MIRROR_REPEAT",347"PIPE_TEX_WRAP_MIRROR_CLAMP",348"PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE",349"PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER"350};351352static const char *353util_tex_wrap_short_names[] = {354"repeat",355"clamp",356"clamp_to_edge",357"clamp_to_border",358"mirror_repeat",359"mirror_clamp",360"mirror_clamp_to_edge",361"mirror_clamp_to_border"362};363364DEFINE_UTIL_STR_CONTINUOUS(tex_wrap)365366367static const char *368util_tex_mipfilter_names[] = {369"PIPE_TEX_MIPFILTER_NEAREST",370"PIPE_TEX_MIPFILTER_LINEAR",371"PIPE_TEX_MIPFILTER_NONE"372};373374static const char *375util_tex_mipfilter_short_names[] = {376"nearest",377"linear",378"none"379};380381DEFINE_UTIL_STR_CONTINUOUS(tex_mipfilter)382383384static const char *385util_tex_filter_names[] = {386"PIPE_TEX_FILTER_NEAREST",387"PIPE_TEX_FILTER_LINEAR"388};389390static const char *391util_tex_filter_short_names[] = {392"nearest",393"linear"394};395396DEFINE_UTIL_STR_CONTINUOUS(tex_filter)397398399static const char *400util_query_type_names[] = {401"PIPE_QUERY_OCCLUSION_COUNTER",402"PIPE_QUERY_OCCLUSION_PREDICATE",403"PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE",404"PIPE_QUERY_TIMESTAMP",405"PIPE_QUERY_TIMESTAMP_DISJOINT",406"PIPE_QUERY_TIME_ELAPSED",407"PIPE_QUERY_PRIMITIVES_GENERATED",408"PIPE_QUERY_PRIMITIVES_EMITTED",409"PIPE_QUERY_SO_STATISTICS",410"PIPE_QUERY_SO_OVERFLOW_PREDICATE",411"PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE",412"PIPE_QUERY_GPU_FINISHED",413"PIPE_QUERY_PIPELINE_STATISTICS",414};415416static const char *417util_query_type_short_names[] = {418"occlusion_counter",419"occlusion_predicate",420"occlusion_predicate_conservative",421"timestamp",422"timestamp_disjoint",423"time_elapsed",424"primitives_generated",425"primitives_emitted",426"so_statistics",427"so_overflow_predicate",428"so_overflow_any_predicate",429"gpu_finished",430"pipeline_statistics",431};432433DEFINE_UTIL_STR_CONTINUOUS(query_type)434435436static const char *437util_query_value_type_names[] = {438"PIPE_QUERY_TYPE_I32",439"PIPE_QUERY_TYPE_U32",440"PIPE_QUERY_TYPE_I64",441"PIPE_QUERY_TYPE_U64",442};443444static const char *445util_query_value_type_short_names[] = {446"i32",447"u32",448"i64",449"u64",450};451452DEFINE_UTIL_STR_CONTINUOUS(query_value_type)453454455static const char *456util_prim_mode_names[] = {457"PIPE_PRIM_POINTS",458"PIPE_PRIM_LINES",459"PIPE_PRIM_LINE_LOOP",460"PIPE_PRIM_LINE_STRIP",461"PIPE_PRIM_TRIANGLES",462"PIPE_PRIM_TRIANGLE_STRIP",463"PIPE_PRIM_TRIANGLE_FAN",464"PIPE_PRIM_QUADS",465"PIPE_PRIM_QUAD_STRIP",466"PIPE_PRIM_POLYGON",467"PIPE_PRIM_LINES_ADJACENCY",468"PIPE_PRIM_LINE_STRIP_ADJACENCY",469"PIPE_PRIM_TRIANGLES_ADJACENCY",470"PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY",471"PIPE_PRIM_PATCHES",472};473474static const char *475util_prim_mode_short_names[] = {476"points",477"lines",478"line_loop",479"line_strip",480"triangles",481"triangle_strip",482"triangle_fan",483"quads",484"quad_strip",485"polygon",486"lines_adjacency",487"line_strip_adjacency",488"triangles_adjacency",489"triangle_strip_adjacency",490"patches",491};492493DEFINE_UTIL_STR_CONTINUOUS(prim_mode)494495void496util_dump_query_type(FILE *stream, unsigned value)497{498if (value >= PIPE_QUERY_DRIVER_SPECIFIC)499fprintf(stream, "PIPE_QUERY_DRIVER_SPECIFIC + %i",500value - PIPE_QUERY_DRIVER_SPECIFIC);501else502fprintf(stream, "%s", util_str_query_type(value, false));503}504505void506util_dump_query_value_type(FILE *stream, unsigned value)507{508fprintf(stream, "%s", util_str_query_value_type(value, false));509}510511512static const char * const513util_transfer_usage_names[] = {514"PIPE_MAP_READ",515"PIPE_MAP_WRITE",516"PIPE_MAP_DIRECTLY",517"PIPE_MAP_DISCARD_RANGE",518"PIPE_MAP_DONTBLOCK",519"PIPE_MAP_UNSYNCHRONIZED",520"PIPE_MAP_FLUSH_EXPLICIT",521"PIPE_MAP_DISCARD_WHOLE_RESOURCE",522"PIPE_MAP_PERSISTENT",523"PIPE_MAP_COHERENT",524};525526DEFINE_UTIL_DUMP_FLAGS_CONTINUOUS(transfer_usage)527528529