X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fauxiliary%2Ftgsi%2Ftgsi_dump.c;h=3e6f76a4d6b732949dfe5a3a922839f9e06f80c2;hb=1826659272c65ee6f4c4c2391d619ab0095b8e3a;hp=bbb1eb19a5e3e4e5c1349aa891b756a665d20159;hpb=17004b39546b4033bd3d2612c231473c8f06157f;p=mesa.git diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.c b/src/gallium/auxiliary/tgsi/tgsi_dump.c index bbb1eb19a5e..3e6f76a4d6b 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_dump.c +++ b/src/gallium/auxiliary/tgsi/tgsi_dump.c @@ -32,6 +32,7 @@ #include "tgsi_dump.h" #include "tgsi_info.h" #include "tgsi_iterate.h" +#include "tgsi_strings.h" /** Number of spaces to indent for IF/LOOP/etc */ @@ -43,11 +44,12 @@ struct dump_ctx struct tgsi_iterate_context iter; uint instno; + uint immno; int indent; uint indentation; - void (*printf)(struct dump_ctx *ctx, const char *format, ...); + void (*dump_printf)(struct dump_ctx *ctx, const char *format, ...); }; static void @@ -68,77 +70,23 @@ dump_enum( uint enum_count ) { if (e >= enum_count) - ctx->printf( ctx, "%u", e ); + ctx->dump_printf( ctx, "%u", e ); else - ctx->printf( ctx, "%s", enums[e] ); + ctx->dump_printf( ctx, "%s", enums[e] ); } -#define EOL() ctx->printf( ctx, "\n" ) -#define TXT(S) ctx->printf( ctx, "%s", S ) -#define CHR(C) ctx->printf( ctx, "%c", C ) -#define UIX(I) ctx->printf( ctx, "0x%x", I ) -#define UID(I) ctx->printf( ctx, "%u", I ) -#define INSTID(I) ctx->printf( ctx, "% 3u", I ) -#define SID(I) ctx->printf( ctx, "%d", I ) -#define FLT(F) ctx->printf( ctx, "%10.4f", F ) +#define EOL() ctx->dump_printf( ctx, "\n" ) +#define TXT(S) ctx->dump_printf( ctx, "%s", S ) +#define CHR(C) ctx->dump_printf( ctx, "%c", C ) +#define UIX(I) ctx->dump_printf( ctx, "0x%x", I ) +#define UID(I) ctx->dump_printf( ctx, "%u", I ) +#define INSTID(I) ctx->dump_printf( ctx, "% 3u", I ) +#define SID(I) ctx->dump_printf( ctx, "%d", I ) +#define FLT(F) ctx->dump_printf( ctx, "%10.4f", F ) #define ENM(E,ENUMS) dump_enum( ctx, E, ENUMS, sizeof( ENUMS ) / sizeof( *ENUMS ) ) -static const char *processor_type_names[] = -{ - "FRAG", - "VERT", - "GEOM" -}; - -const char * -tgsi_file_names[TGSI_FILE_COUNT] = -{ - "NULL", - "CONST", - "IN", - "OUT", - "TEMP", - "SAMP", - "ADDR", - "IMM", - "PRED", - "SV", - "IMMX", - "TEMPX" -}; - -static const char *interpolate_names[] = -{ - "CONSTANT", - "LINEAR", - "PERSPECTIVE" -}; - -static const char *semantic_names[] = -{ - "POSITION", - "COLOR", - "BCOLOR", - "FOG", - "PSIZE", - "GENERIC", - "NORMAL", - "FACE", - "EDGEFLAG", - "PRIM_ID", - "INSTANCEID", - "STENCIL" -}; - -static const char *immediate_type_names[] = -{ - "FLT32", - "UINT32", - "INT32" -}; - const char * -tgsi_swizzle_names[] = +tgsi_swizzle_names[4] = { "x", "y", @@ -146,61 +94,6 @@ tgsi_swizzle_names[] = "w" }; -const char * -tgsi_texture_names[] = -{ - "UNKNOWN", - "1D", - "2D", - "3D", - "CUBE", - "RECT", - "SHADOW1D", - "SHADOW2D", - "SHADOWRECT" -}; - -static const char *property_names[] = -{ - "GS_INPUT_PRIMITIVE", - "GS_OUTPUT_PRIMITIVE", - "GS_MAX_OUTPUT_VERTICES", - "FS_COORD_ORIGIN", - "FS_COORD_PIXEL_CENTER", - "FS_COLOR0_WRITES_ALL_CBUFS", -}; - -static const char *primitive_names[] = -{ - "POINTS", - "LINES", - "LINE_LOOP", - "LINE_STRIP", - "TRIANGLES", - "TRIANGLE_STRIP", - "TRIANGLE_FAN", - "QUADS", - "QUAD_STRIP", - "POLYGON", - "LINES_ADJACENCY", - "LINE_STRIP_ADJACENCY", - "TRIANGLES_ADJACENCY", - "TRIANGLE_STRIP_ADJACENCY" -}; - -static const char *fs_coord_origin_names[] = -{ - "UPPER_LEFT", - "LOWER_LEFT" -}; - -static const char *fs_coord_pixel_center_names[] = -{ - "HALF_INTEGER", - "INTEGER" -}; - - static void _dump_register_src( struct dump_ctx *ctx, @@ -351,9 +244,6 @@ iter_declaration( { struct dump_ctx *ctx = (struct dump_ctx *)iter; - assert(Elements(semantic_names) == TGSI_SEMANTIC_COUNT); - assert(Elements(interpolate_names) == TGSI_INTERPOLATE_COUNT); - TXT( "DCL " ); ENM(decl->Declaration.File, tgsi_file_names); @@ -382,9 +272,12 @@ iter_declaration( ctx, decl->Declaration.UsageMask ); + if (decl->Declaration.Local) + TXT( ", LOCAL" ); + if (decl->Declaration.Semantic) { TXT( ", " ); - ENM( decl->Semantic.Name, semantic_names ); + ENM( decl->Semantic.Name, tgsi_semantic_names ); if (decl->Semantic.Index != 0 || decl->Semantic.Name == TGSI_SEMANTIC_GENERIC) { CHR( '[' ); @@ -393,37 +286,68 @@ iter_declaration( } } - if (iter->processor.Processor == TGSI_PROCESSOR_FRAGMENT && - decl->Declaration.File == TGSI_FILE_INPUT) - { - TXT( ", " ); - ENM( decl->Declaration.Interpolate, interpolate_names ); - } - - if (decl->Declaration.Centroid) { - TXT( ", CENTROID" ); + if (decl->Declaration.File == TGSI_FILE_RESOURCE) { + TXT(", "); + ENM(decl->Resource.Resource, tgsi_texture_names); + if (decl->Resource.Writable) + TXT(", WR"); + if (decl->Resource.Raw) + TXT(", RAW"); } - if (decl->Declaration.Invariant) { - TXT( ", INVARIANT" ); + if (decl->Declaration.File == TGSI_FILE_SAMPLER_VIEW) { + TXT(", "); + ENM(decl->SamplerView.Resource, tgsi_texture_names); + TXT(", "); + if ((decl->SamplerView.ReturnTypeX == decl->SamplerView.ReturnTypeY) && + (decl->SamplerView.ReturnTypeX == decl->SamplerView.ReturnTypeZ) && + (decl->SamplerView.ReturnTypeX == decl->SamplerView.ReturnTypeW)) { + ENM(decl->SamplerView.ReturnTypeX, tgsi_type_names); + } else { + ENM(decl->SamplerView.ReturnTypeX, tgsi_type_names); + TXT(", "); + ENM(decl->SamplerView.ReturnTypeY, tgsi_type_names); + TXT(", "); + ENM(decl->SamplerView.ReturnTypeZ, tgsi_type_names); + TXT(", "); + ENM(decl->SamplerView.ReturnTypeW, tgsi_type_names); + } } - if (decl->Declaration.CylindricalWrap) { - TXT(", CYLWRAP_"); - if (decl->Declaration.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_X) { - CHR('X'); - } - if (decl->Declaration.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_Y) { - CHR('Y'); + if (decl->Declaration.Interpolate) { + if (iter->processor.Processor == TGSI_PROCESSOR_FRAGMENT && + decl->Declaration.File == TGSI_FILE_INPUT) + { + TXT( ", " ); + ENM( decl->Interp.Interpolate, tgsi_interpolate_names ); } - if (decl->Declaration.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_Z) { - CHR('Z'); + + if (decl->Interp.Centroid) { + TXT( ", CENTROID" ); } - if (decl->Declaration.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_W) { - CHR('W'); + + if (decl->Interp.CylindricalWrap) { + TXT(", CYLWRAP_"); + if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_X) { + CHR('X'); + } + if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_Y) { + CHR('Y'); + } + if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_Z) { + CHR('Z'); + } + if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_W) { + CHR('W'); + } } } + if (decl->Declaration.Invariant) { + TXT( ", INVARIANT" ); + } + + if (decl->Declaration.File == TGSI_FILE_IMMEDIATE_ARRAY) { unsigned i; char range_indent[4]; @@ -472,7 +396,7 @@ tgsi_dump_declaration( { struct dump_ctx ctx; - ctx.printf = dump_ctx_printf; + ctx.dump_printf = dump_ctx_printf; iter_declaration( &ctx.iter, (struct tgsi_full_declaration *)decl ); } @@ -482,13 +406,11 @@ iter_property( struct tgsi_iterate_context *iter, struct tgsi_full_property *prop ) { - int i; + unsigned i; struct dump_ctx *ctx = (struct dump_ctx *)iter; - assert(Elements(property_names) == TGSI_PROPERTY_COUNT); - TXT( "PROPERTY " ); - ENM(prop->Property.PropertyName, property_names); + ENM(prop->Property.PropertyName, tgsi_property_names); if (prop->Property.NrTokens > 1) TXT(" "); @@ -497,13 +419,13 @@ iter_property( switch (prop->Property.PropertyName) { case TGSI_PROPERTY_GS_INPUT_PRIM: case TGSI_PROPERTY_GS_OUTPUT_PRIM: - ENM(prop->u[i].Data, primitive_names); + ENM(prop->u[i].Data, tgsi_primitive_names); break; case TGSI_PROPERTY_FS_COORD_ORIGIN: - ENM(prop->u[i].Data, fs_coord_origin_names); + ENM(prop->u[i].Data, tgsi_fs_coord_origin_names); break; case TGSI_PROPERTY_FS_COORD_PIXEL_CENTER: - ENM(prop->u[i].Data, fs_coord_pixel_center_names); + ENM(prop->u[i].Data, tgsi_fs_coord_pixel_center_names); break; default: SID( prop->u[i].Data ); @@ -522,7 +444,7 @@ void tgsi_dump_property( { struct dump_ctx ctx; - ctx.printf = dump_ctx_printf; + ctx.dump_printf = dump_ctx_printf; iter_property( &ctx.iter, (struct tgsi_full_property *)prop ); } @@ -534,8 +456,10 @@ iter_immediate( { struct dump_ctx *ctx = (struct dump_ctx *) iter; - TXT( "IMM " ); - ENM( imm->Immediate.DataType, immediate_type_names ); + TXT( "IMM[" ); + SID( ctx->immno++ ); + TXT( "] " ); + ENM( imm->Immediate.DataType, tgsi_immediate_type_names ); dump_imm_data(iter, imm->u, imm->Immediate.NrTokens - 1, imm->Immediate.DataType); @@ -551,7 +475,7 @@ tgsi_dump_immediate( { struct dump_ctx ctx; - ctx.printf = dump_ctx_printf; + ctx.dump_printf = dump_ctx_printf; iter_immediate( &ctx.iter, (struct tgsi_full_immediate *)imm ); } @@ -661,6 +585,17 @@ iter_instruction( if (inst->Instruction.Texture) { TXT( ", " ); ENM( inst->Texture.Texture, tgsi_texture_names ); + for (i = 0; i < inst->Texture.NumOffsets; i++) { + TXT( ", " ); + ENM( inst->TexOffsets[i].File, tgsi_file_names); + CHR( '[' ); + SID( inst->TexOffsets[i].Index ); + CHR( ']' ); + CHR( '.' ); + ENM( inst->TexOffsets[i].SwizzleX, tgsi_swizzle_names); + ENM( inst->TexOffsets[i].SwizzleY, tgsi_swizzle_names); + ENM( inst->TexOffsets[i].SwizzleZ, tgsi_swizzle_names); + } } switch (inst->Instruction.Opcode) { @@ -694,8 +629,9 @@ tgsi_dump_instruction( struct dump_ctx ctx; ctx.instno = instno; + ctx.immno = instno; ctx.indent = 0; - ctx.printf = dump_ctx_printf; + ctx.dump_printf = dump_ctx_printf; ctx.indentation = 0; iter_instruction( &ctx.iter, (struct tgsi_full_instruction *)inst ); @@ -706,7 +642,7 @@ prolog( struct tgsi_iterate_context *iter ) { struct dump_ctx *ctx = (struct dump_ctx *) iter; - ENM( iter->processor.Processor, processor_type_names ); + ENM( iter->processor.Processor, tgsi_processor_type_names ); EOL(); return TRUE; } @@ -726,8 +662,9 @@ tgsi_dump( ctx.iter.epilog = NULL; ctx.instno = 0; + ctx.immno = 0; ctx.indent = 0; - ctx.printf = dump_ctx_printf; + ctx.dump_printf = dump_ctx_printf; ctx.indentation = 0; tgsi_iterate_shader( tokens, &ctx.iter ); @@ -781,8 +718,9 @@ tgsi_dump_str( ctx.base.iter.epilog = NULL; ctx.base.instno = 0; + ctx.base.immno = 0; ctx.base.indent = 0; - ctx.base.printf = &str_dump_ctx_printf; + ctx.base.dump_printf = &str_dump_ctx_printf; ctx.base.indentation = 0; ctx.str = str;