1ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol/************************************************************************** 2ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * 35ded4ffc506eb051b151d3e8b1e71b13576e951aMichal Krol * Copyright 2007-2008 Tungsten Graphics, Inc., Cedar Park, Texas. 4ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * All Rights Reserved. 5ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * 6ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * Permission is hereby granted, free of charge, to any person obtaining a 7ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * copy of this software and associated documentation files (the 8ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * "Software"), to deal in the Software without restriction, including 9ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * without limitation the rights to use, copy, modify, merge, publish, 10ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * distribute, sub license, and/or sell copies of the Software, and to 11ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * permit persons to whom the Software is furnished to do so, subject to 12ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * the following conditions: 13ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * 14ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * The above copyright notice and this permission notice (including the 15ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * next paragraph) shall be included in all copies or substantial portions 16ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * of the Software. 17ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * 18ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * 26ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol **************************************************************************/ 27ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol 28ea4bf267e4b023b08043f91ac44592fed1736e7fJosé Fonseca#include "util/u_debug.h" 29673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca#include "util/u_string.h" 303e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell#include "util/u_math.h" 31f01af4dbd26bec433cde08d011a5101edd7d83beBrian Paul#include "util/u_memory.h" 32abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#include "tgsi_dump.h" 332caaba8195d1019702246bd7f0c02aa95364a8bdMichal Krol#include "tgsi_info.h" 3483f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol#include "tgsi_iterate.h" 3585b5dac705fcf3fafb734696e1f863cfc21e2d6eBrian Paul#include "tgsi_strings.h" 3683f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol 3745cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul 3845cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul/** Number of spaces to indent for IF/LOOP/etc */ 3945cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paulstatic const int indent_spaces = 3; 4045cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul 4145cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul 4283f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krolstruct dump_ctx 4383f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol{ 4483f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol struct tgsi_iterate_context iter; 4583f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol 4683f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol uint instno; 47848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell int indent; 48673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 4945cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul uint indentation; 5045cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul 51a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr void (*dump_printf)(struct dump_ctx *ctx, const char *format, ...); 5283f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol}; 53ffe58739da9eee2e99682747cc8f26e412c87430michal 54b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonsecastatic void 55b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonsecadump_ctx_printf(struct dump_ctx *ctx, const char *format, ...) 56b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca{ 57b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca va_list ap; 58b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca (void)ctx; 59b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca va_start(ap, format); 60a8bb49562938e94459f398a1733a76eb9c690f6cMarek Olšák _debug_vprintf(format, ap); 61b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca va_end(ap); 62b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca} 63b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca 64ffe58739da9eee2e99682747cc8f26e412c87430michalstatic void 653c4f1ba5a2edefd69b2c47abaf534fb3af3f259dJosé Fonsecadump_enum( 66b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca struct dump_ctx *ctx, 6782f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol uint e, 6882f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol const char **enums, 6982f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol uint enum_count ) 70ffe58739da9eee2e99682747cc8f26e412c87430michal{ 7182f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol if (e >= enum_count) 72a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr ctx->dump_printf( ctx, "%u", e ); 7382f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol else 74a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr ctx->dump_printf( ctx, "%s", enums[e] ); 75ffe58739da9eee2e99682747cc8f26e412c87430michal} 76ffe58739da9eee2e99682747cc8f26e412c87430michal 77a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr#define EOL() ctx->dump_printf( ctx, "\n" ) 78a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr#define TXT(S) ctx->dump_printf( ctx, "%s", S ) 79a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr#define CHR(C) ctx->dump_printf( ctx, "%c", C ) 80a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr#define UIX(I) ctx->dump_printf( ctx, "0x%x", I ) 81a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr#define UID(I) ctx->dump_printf( ctx, "%u", I ) 82a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr#define INSTID(I) ctx->dump_printf( ctx, "% 3u", I ) 83a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr#define SID(I) ctx->dump_printf( ctx, "%d", I ) 84a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr#define FLT(F) ctx->dump_printf( ctx, "%10.4f", F ) 85b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca#define ENM(E,ENUMS) dump_enum( ctx, E, ENUMS, sizeof( ENUMS ) / sizeof( *ENUMS ) ) 86ffe58739da9eee2e99682747cc8f26e412c87430michal 8711dad217186a4c177cb41aa526531d6cd46ae5b0José Fonsecaconst char * 8892209314df4f12e8b47336a25ba14cb6b9a23df2Marek Olšáktgsi_swizzle_names[4] = 89f141399031981d6af19a32025ae7c1b947196480michal{ 90f141399031981d6af19a32025ae7c1b947196480michal "x", 91f141399031981d6af19a32025ae7c1b947196480michal "y", 92f141399031981d6af19a32025ae7c1b947196480michal "z", 93f141399031981d6af19a32025ae7c1b947196480michal "w" 94f141399031981d6af19a32025ae7c1b947196480michal}; 95f141399031981d6af19a32025ae7c1b947196480michal 9682f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krolstatic void 97afd01366b098bf790658e069caddb7a930da827dZack Rusin_dump_register_src( 98afd01366b098bf790658e069caddb7a930da827dZack Rusin struct dump_ctx *ctx, 99afd01366b098bf790658e069caddb7a930da827dZack Rusin const struct tgsi_full_src_register *src ) 100afd01366b098bf790658e069caddb7a930da827dZack Rusin{ 10111dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM(src->Register.File, tgsi_file_names); 1027472cd0f1f0f8284729274bc5c453d59d9ab4b55Michal Krol if (src->Register.Dimension) { 10323969670387bc0bb7d0761936905e5eb4df963dcZack Rusin if (src->Dimension.Indirect) { 10423969670387bc0bb7d0761936905e5eb4df963dcZack Rusin CHR( '[' ); 10511dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( src->DimIndirect.File, tgsi_file_names ); 10623969670387bc0bb7d0761936905e5eb4df963dcZack Rusin CHR( '[' ); 10723969670387bc0bb7d0761936905e5eb4df963dcZack Rusin SID( src->DimIndirect.Index ); 10823969670387bc0bb7d0761936905e5eb4df963dcZack Rusin TXT( "]." ); 10911dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( src->DimIndirect.SwizzleX, tgsi_swizzle_names ); 11023969670387bc0bb7d0761936905e5eb4df963dcZack Rusin if (src->Dimension.Index != 0) { 11123969670387bc0bb7d0761936905e5eb4df963dcZack Rusin if (src->Dimension.Index > 0) 11223969670387bc0bb7d0761936905e5eb4df963dcZack Rusin CHR( '+' ); 11323969670387bc0bb7d0761936905e5eb4df963dcZack Rusin SID( src->Dimension.Index ); 11423969670387bc0bb7d0761936905e5eb4df963dcZack Rusin } 11523969670387bc0bb7d0761936905e5eb4df963dcZack Rusin CHR( ']' ); 11623969670387bc0bb7d0761936905e5eb4df963dcZack Rusin } else { 11723969670387bc0bb7d0761936905e5eb4df963dcZack Rusin CHR('['); 11823969670387bc0bb7d0761936905e5eb4df963dcZack Rusin SID(src->Dimension.Index); 11923969670387bc0bb7d0761936905e5eb4df963dcZack Rusin CHR(']'); 12023969670387bc0bb7d0761936905e5eb4df963dcZack Rusin } 1217472cd0f1f0f8284729274bc5c453d59d9ab4b55Michal Krol } 122afd01366b098bf790658e069caddb7a930da827dZack Rusin if (src->Register.Indirect) { 123afd01366b098bf790658e069caddb7a930da827dZack Rusin CHR( '[' ); 12411dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( src->Indirect.File, tgsi_file_names ); 125afd01366b098bf790658e069caddb7a930da827dZack Rusin CHR( '[' ); 126afd01366b098bf790658e069caddb7a930da827dZack Rusin SID( src->Indirect.Index ); 127afd01366b098bf790658e069caddb7a930da827dZack Rusin TXT( "]." ); 12811dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( src->Indirect.SwizzleX, tgsi_swizzle_names ); 129afd01366b098bf790658e069caddb7a930da827dZack Rusin if (src->Register.Index != 0) { 130afd01366b098bf790658e069caddb7a930da827dZack Rusin if (src->Register.Index > 0) 131afd01366b098bf790658e069caddb7a930da827dZack Rusin CHR( '+' ); 132afd01366b098bf790658e069caddb7a930da827dZack Rusin SID( src->Register.Index ); 133afd01366b098bf790658e069caddb7a930da827dZack Rusin } 134afd01366b098bf790658e069caddb7a930da827dZack Rusin CHR( ']' ); 135afd01366b098bf790658e069caddb7a930da827dZack Rusin } else { 136afd01366b098bf790658e069caddb7a930da827dZack Rusin CHR( '[' ); 137afd01366b098bf790658e069caddb7a930da827dZack Rusin SID( src->Register.Index ); 138afd01366b098bf790658e069caddb7a930da827dZack Rusin CHR( ']' ); 139afd01366b098bf790658e069caddb7a930da827dZack Rusin } 140afd01366b098bf790658e069caddb7a930da827dZack Rusin} 141afd01366b098bf790658e069caddb7a930da827dZack Rusin 142101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin 143afd01366b098bf790658e069caddb7a930da827dZack Rusinstatic void 144101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin_dump_register_dst( 145b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca struct dump_ctx *ctx, 146101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin const struct tgsi_full_dst_register *dst ) 14773e1d0be756537376495547bc1e798805884b8efMichal Krol{ 14811dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM(dst->Register.File, tgsi_file_names); 149101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin if (dst->Register.Dimension) { 150101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin if (dst->Dimension.Indirect) { 151101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( '[' ); 15211dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( dst->DimIndirect.File, tgsi_file_names ); 153101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( '[' ); 154101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin SID( dst->DimIndirect.Index ); 155101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin TXT( "]." ); 15611dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( dst->DimIndirect.SwizzleX, tgsi_swizzle_names ); 157101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin if (dst->Dimension.Index != 0) { 158101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin if (dst->Dimension.Index > 0) 159101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( '+' ); 160101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin SID( dst->Dimension.Index ); 161101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin } 162101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( ']' ); 163101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin } else { 164101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR('['); 165101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin SID(dst->Dimension.Index); 166101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR(']'); 167101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin } 168101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin } 169101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin if (dst->Register.Indirect) { 170101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( '[' ); 17111dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( dst->Indirect.File, tgsi_file_names ); 172101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( '[' ); 173101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin SID( dst->Indirect.Index ); 174101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin TXT( "]." ); 17511dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( dst->Indirect.SwizzleX, tgsi_swizzle_names ); 176101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin if (dst->Register.Index != 0) { 177101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin if (dst->Register.Index > 0) 178101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( '+' ); 179101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin SID( dst->Register.Index ); 180101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin } 181101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( ']' ); 182101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin } else { 183101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( '[' ); 184101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin SID( dst->Register.Index ); 185101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( ']' ); 186f141399031981d6af19a32025ae7c1b947196480michal } 18782f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol} 18882f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krolstatic void 18982f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol_dump_writemask( 190b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca struct dump_ctx *ctx, 19182f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol uint writemask ) 19282f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol{ 19382f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol if (writemask != TGSI_WRITEMASK_XYZW) { 194058b978a5ae2a56e09fed6335b686c654444f4acmichal CHR( '.' ); 19582f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol if (writemask & TGSI_WRITEMASK_X) 196058b978a5ae2a56e09fed6335b686c654444f4acmichal CHR( 'x' ); 19782f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol if (writemask & TGSI_WRITEMASK_Y) 198058b978a5ae2a56e09fed6335b686c654444f4acmichal CHR( 'y' ); 19982f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol if (writemask & TGSI_WRITEMASK_Z) 200058b978a5ae2a56e09fed6335b686c654444f4acmichal CHR( 'z' ); 20182f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol if (writemask & TGSI_WRITEMASK_W) 202058b978a5ae2a56e09fed6335b686c654444f4acmichal CHR( 'w' ); 203058b978a5ae2a56e09fed6335b686c654444f4acmichal } 20482f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol} 20582f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol 2062b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusinstatic void 2072b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusindump_imm_data(struct tgsi_iterate_context *iter, 2082b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin union tgsi_immediate_data *data, 2092b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin unsigned num_tokens, 2102b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin unsigned data_type) 2112b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin{ 2122b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin struct dump_ctx *ctx = (struct dump_ctx *)iter; 2132b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin unsigned i ; 2142b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 2152b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin TXT( " {" ); 2162b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 2172b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin assert( num_tokens <= 4 ); 2182b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin for (i = 0; i < num_tokens; i++) { 2192b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin switch (data_type) { 2202b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin case TGSI_IMM_FLOAT32: 2212b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin FLT( data[i].Float ); 2222b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin break; 2232b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin case TGSI_IMM_UINT32: 2242b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin UID(data[i].Uint); 2252b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin break; 2262b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin case TGSI_IMM_INT32: 2272b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin SID(data[i].Int); 2282b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin break; 2292b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin default: 2302b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin assert( 0 ); 2312b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin } 2322b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 2332b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin if (i < num_tokens - 1) 2342b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin TXT( ", " ); 2352b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin } 2362b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin TXT( "}" ); 2372b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin} 2382b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 239673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecastatic boolean 240673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecaiter_declaration( 241673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct tgsi_iterate_context *iter, 242673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct tgsi_full_declaration *decl ) 24382f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol{ 244b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca struct dump_ctx *ctx = (struct dump_ctx *)iter; 245673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 24676164bf7a20ef6dabc3204a766f604becfba9997José Fonseca TXT( "DCL " ); 24782f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol 24811dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM(decl->Declaration.File, tgsi_file_names); 2494367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol 2504367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol /* all geometry shader inputs are two dimensional */ 2514367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol if (decl->Declaration.File == TGSI_FILE_INPUT && 2524367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol iter->processor.Processor == TGSI_PROCESSOR_GEOMETRY) { 2534367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol TXT("[]"); 2544367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol } 2554367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol 2564367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol if (decl->Declaration.Dimension) { 2574367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol CHR('['); 2584367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol SID(decl->Dim.Index2D); 2594367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol CHR(']'); 2604367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol } 2614367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol 2624367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol CHR('['); 2634367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol SID(decl->Range.First); 2644367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol if (decl->Range.First != decl->Range.Last) { 2654367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol TXT(".."); 2664367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol SID(decl->Range.Last); 2674367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol } 2684367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol CHR(']'); 2694367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol 27082f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol _dump_writemask( 271b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca ctx, 27282f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol decl->Declaration.UsageMask ); 273058b978a5ae2a56e09fed6335b686c654444f4acmichal 2742644952bd4dfa3b75112dee8dfd287a12d770705Francisco Jerez if (decl->Declaration.Local) 2752644952bd4dfa3b75112dee8dfd287a12d770705Francisco Jerez TXT( ", LOCAL" ); 2762644952bd4dfa3b75112dee8dfd287a12d770705Francisco Jerez 2772483062f10e93fbbc5e3f629627b9e8addcc3f84Michal Krol if (decl->Declaration.Semantic) { 278f141399031981d6af19a32025ae7c1b947196480michal TXT( ", " ); 27985b5dac705fcf3fafb734696e1f863cfc21e2d6eBrian Paul ENM( decl->Semantic.Name, tgsi_semantic_names ); 280763426a0256f0ab06f8af53947bd630f8600183aKeith Whitwell if (decl->Semantic.Index != 0 || 281763426a0256f0ab06f8af53947bd630f8600183aKeith Whitwell decl->Semantic.Name == TGSI_SEMANTIC_GENERIC) { 2822483062f10e93fbbc5e3f629627b9e8addcc3f84Michal Krol CHR( '[' ); 283763426a0256f0ab06f8af53947bd630f8600183aKeith Whitwell UID( decl->Semantic.Index ); 2842483062f10e93fbbc5e3f629627b9e8addcc3f84Michal Krol CHR( ']' ); 2852483062f10e93fbbc5e3f629627b9e8addcc3f84Michal Krol } 286f141399031981d6af19a32025ae7c1b947196480michal } 287b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal 288bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin if (decl->Declaration.File == TGSI_FILE_RESOURCE) { 289bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin TXT(", "); 290bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin ENM(decl->Resource.Resource, tgsi_texture_names); 291b8e808f1ef9462af8545999df514fddbbff34345Francisco Jerez if (decl->Resource.Writable) 292b8e808f1ef9462af8545999df514fddbbff34345Francisco Jerez TXT(", WR"); 29382c90b2da8e236bc134cb2bd0ec4e09551b12164Francisco Jerez if (decl->Resource.Raw) 29482c90b2da8e236bc134cb2bd0ec4e09551b12164Francisco Jerez TXT(", RAW"); 295a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez } 296a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez 297a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez if (decl->Declaration.File == TGSI_FILE_SAMPLER_VIEW) { 298bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin TXT(", "); 299a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez ENM(decl->SamplerView.Resource, tgsi_texture_names); 300a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez TXT(", "); 301a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez if ((decl->SamplerView.ReturnTypeX == decl->SamplerView.ReturnTypeY) && 302a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez (decl->SamplerView.ReturnTypeX == decl->SamplerView.ReturnTypeZ) && 303a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez (decl->SamplerView.ReturnTypeX == decl->SamplerView.ReturnTypeW)) { 304a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez ENM(decl->SamplerView.ReturnTypeX, tgsi_type_names); 305bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin } else { 306a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez ENM(decl->SamplerView.ReturnTypeX, tgsi_type_names); 307bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin TXT(", "); 308a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez ENM(decl->SamplerView.ReturnTypeY, tgsi_type_names); 309bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin TXT(", "); 310a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez ENM(decl->SamplerView.ReturnTypeZ, tgsi_type_names); 311bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin TXT(", "); 312a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez ENM(decl->SamplerView.ReturnTypeW, tgsi_type_names); 313bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin } 314bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin } 315bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin 3161279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez if (decl->Declaration.Interpolate) { 3171279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez if (iter->processor.Processor == TGSI_PROCESSOR_FRAGMENT && 3181279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez decl->Declaration.File == TGSI_FILE_INPUT) 3191279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez { 3201279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez TXT( ", " ); 3211279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez ENM( decl->Interp.Interpolate, tgsi_interpolate_names ); 3221279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez } 3232783f3bfabd6e316f7e221e950499c3631c041ceMichal Krol 3241279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez if (decl->Interp.Centroid) { 3251279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez TXT( ", CENTROID" ); 3261279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez } 3271279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez 3281279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez if (decl->Interp.CylindricalWrap) { 3291279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez TXT(", CYLWRAP_"); 3301279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_X) { 3311279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez CHR('X'); 3321279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez } 3331279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_Y) { 3341279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez CHR('Y'); 3351279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez } 3361279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_Z) { 3371279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez CHR('Z'); 3381279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez } 3391279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_W) { 3401279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez CHR('W'); 3411279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez } 3421279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez } 343dc48ae97dcd84acf691b33b0ea2e76c5fdfe18e1Brian Paul } 344dc48ae97dcd84acf691b33b0ea2e76c5fdfe18e1Brian Paul 345dc48ae97dcd84acf691b33b0ea2e76c5fdfe18e1Brian Paul if (decl->Declaration.Invariant) { 346dc48ae97dcd84acf691b33b0ea2e76c5fdfe18e1Brian Paul TXT( ", INVARIANT" ); 347dc48ae97dcd84acf691b33b0ea2e76c5fdfe18e1Brian Paul } 348dc48ae97dcd84acf691b33b0ea2e76c5fdfe18e1Brian Paul 3496f6d740c851aa8bedc7c51dbd5db14de338787f1Michal Krol 3502b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin if (decl->Declaration.File == TGSI_FILE_IMMEDIATE_ARRAY) { 3512b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin unsigned i; 3522b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin char range_indent[4]; 3532b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 3542b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin TXT(" {"); 3552b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 3562b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin if (decl->Range.Last < 10) 3572b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin range_indent[0] = '\0'; 3582b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin else if (decl->Range.Last < 100) { 3592b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin range_indent[0] = ' '; 3602b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin range_indent[1] = '\0'; 3612b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin } else if (decl->Range.Last < 1000) { 3622b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin range_indent[0] = ' '; 3632b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin range_indent[1] = ' '; 3642b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin range_indent[2] = '\0'; 3652b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin } else { 3662b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin range_indent[0] = ' '; 3672b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin range_indent[1] = ' '; 3682b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin range_indent[2] = ' '; 3692b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin range_indent[3] = '\0'; 3702b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin } 3712b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 3722b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin dump_imm_data(iter, decl->ImmediateData.u, 3732b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 4, TGSI_IMM_FLOAT32); 3742b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin for(i = 1; i <= decl->Range.Last; ++i) { 3752b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin /* indent by strlen of: 3762b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin * "DCL IMMX[0..1] {" */ 3772b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin CHR('\n'); 3782b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin TXT( " " ); 3792b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin TXT( range_indent ); 3802b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin dump_imm_data(iter, decl->ImmediateData.u + i, 3812b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 4, TGSI_IMM_FLOAT32); 3822b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin } 3832b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 3842b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin TXT(" }"); 3852b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin } 3862b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 38776164bf7a20ef6dabc3204a766f604becfba9997José Fonseca EOL(); 388f141399031981d6af19a32025ae7c1b947196480michal 38983f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol return TRUE; 39083f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol} 39183f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol 392adaaa29218f1babad874f50681ca971fdd3b8a40Keith Whitwellvoid 393673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecatgsi_dump_declaration( 394673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca const struct tgsi_full_declaration *decl ) 395f141399031981d6af19a32025ae7c1b947196480michal{ 396673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct dump_ctx ctx; 397673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 398a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr ctx.dump_printf = dump_ctx_printf; 399673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 400673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca iter_declaration( &ctx.iter, (struct tgsi_full_declaration *)decl ); 401673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca} 402673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 403673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecastatic boolean 4043ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusiniter_property( 4053ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_iterate_context *iter, 4063ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_full_property *prop ) 4073ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin{ 4083ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin int i; 4093ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct dump_ctx *ctx = (struct dump_ctx *)iter; 4103ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 4113ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin TXT( "PROPERTY " ); 41292209314df4f12e8b47336a25ba14cb6b9a23df2Marek Olšák ENM(prop->Property.PropertyName, tgsi_property_names); 4133ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 4143ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin if (prop->Property.NrTokens > 1) 4153ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin TXT(" "); 4163ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 4173ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin for (i = 0; i < prop->Property.NrTokens - 1; ++i) { 4183ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin switch (prop->Property.PropertyName) { 4193ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin case TGSI_PROPERTY_GS_INPUT_PRIM: 4203ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin case TGSI_PROPERTY_GS_OUTPUT_PRIM: 42192209314df4f12e8b47336a25ba14cb6b9a23df2Marek Olšák ENM(prop->u[i].Data, tgsi_primitive_names); 4223ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin break; 42373317139a4f78126af0dc4ddaef8206352740727Luca Barbieri case TGSI_PROPERTY_FS_COORD_ORIGIN: 42492209314df4f12e8b47336a25ba14cb6b9a23df2Marek Olšák ENM(prop->u[i].Data, tgsi_fs_coord_origin_names); 42573317139a4f78126af0dc4ddaef8206352740727Luca Barbieri break; 42673317139a4f78126af0dc4ddaef8206352740727Luca Barbieri case TGSI_PROPERTY_FS_COORD_PIXEL_CENTER: 42792209314df4f12e8b47336a25ba14cb6b9a23df2Marek Olšák ENM(prop->u[i].Data, tgsi_fs_coord_pixel_center_names); 42873317139a4f78126af0dc4ddaef8206352740727Luca Barbieri break; 4293ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin default: 4303ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin SID( prop->u[i].Data ); 4313ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin break; 4323ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin } 4333ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin if (i < prop->Property.NrTokens - 2) 4343ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin TXT( ", " ); 4353ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin } 4363ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin EOL(); 4373ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 4383ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin return TRUE; 4393ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin} 4403ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 4413ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusinvoid tgsi_dump_property( 4423ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin const struct tgsi_full_property *prop ) 4433ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin{ 4443ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct dump_ctx ctx; 4453ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 446a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr ctx.dump_printf = dump_ctx_printf; 4473ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 4483ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin iter_property( &ctx.iter, (struct tgsi_full_property *)prop ); 4493ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin} 4503ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 4513ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusinstatic boolean 452673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecaiter_immediate( 453673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct tgsi_iterate_context *iter, 454673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct tgsi_full_immediate *imm ) 455673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca{ 456673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct dump_ctx *ctx = (struct dump_ctx *) iter; 457673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 4582783f3bfabd6e316f7e221e950499c3631c041ceMichal Krol TXT( "IMM " ); 45985b5dac705fcf3fafb734696e1f863cfc21e2d6eBrian Paul ENM( imm->Immediate.DataType, tgsi_immediate_type_names ); 460f141399031981d6af19a32025ae7c1b947196480michal 4612b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin dump_imm_data(iter, imm->u, imm->Immediate.NrTokens - 1, 4622b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin imm->Immediate.DataType); 4632783f3bfabd6e316f7e221e950499c3631c041ceMichal Krol 4642783f3bfabd6e316f7e221e950499c3631c041ceMichal Krol EOL(); 465f141399031981d6af19a32025ae7c1b947196480michal 46683f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol return TRUE; 46783f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol} 46883f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol 469adaaa29218f1babad874f50681ca971fdd3b8a40Keith Whitwellvoid 470673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecatgsi_dump_immediate( 471673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca const struct tgsi_full_immediate *imm ) 472f141399031981d6af19a32025ae7c1b947196480michal{ 473673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct dump_ctx ctx; 474673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 475a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr ctx.dump_printf = dump_ctx_printf; 476673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 477673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca iter_immediate( &ctx.iter, (struct tgsi_full_immediate *)imm ); 478673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca} 479673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 480673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecastatic boolean 481673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecaiter_instruction( 482673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct tgsi_iterate_context *iter, 483673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct tgsi_full_instruction *inst ) 484673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca{ 485673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct dump_ctx *ctx = (struct dump_ctx *) iter; 486673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca uint instno = ctx->instno++; 487848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell const struct tgsi_opcode_info *info = tgsi_get_opcode_info( inst->Instruction.Opcode ); 48882f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol uint i; 48982f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol boolean first_reg = TRUE; 490f141399031981d6af19a32025ae7c1b947196480michal 4915e1ef85dc430a4439cd60b66262eab9062dd5f4fJakob Bornecrantz INSTID( instno ); 4925e1ef85dc430a4439cd60b66262eab9062dd5f4fJakob Bornecrantz TXT( ": " ); 4932b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 494848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell ctx->indent -= info->pre_dedent; 495848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell for(i = 0; (int)i < ctx->indent; ++i) 496848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell TXT( " " ); 497848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell ctx->indent += info->post_indent; 4982b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 49914a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca if (inst->Instruction.Predicate) { 50014a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca CHR( '(' ); 50114a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca 50214a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca if (inst->Predicate.Negate) 50314a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca CHR( '!' ); 50414a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca 50514a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca TXT( "PRED[" ); 50614a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca SID( inst->Predicate.Index ); 50714a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca CHR( ']' ); 50814a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca 50914a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca if (inst->Predicate.SwizzleX != TGSI_SWIZZLE_X || 51014a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca inst->Predicate.SwizzleY != TGSI_SWIZZLE_Y || 51114a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca inst->Predicate.SwizzleZ != TGSI_SWIZZLE_Z || 51214a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca inst->Predicate.SwizzleW != TGSI_SWIZZLE_W) { 51314a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca CHR( '.' ); 51411dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( inst->Predicate.SwizzleX, tgsi_swizzle_names ); 51511dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( inst->Predicate.SwizzleY, tgsi_swizzle_names ); 51611dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( inst->Predicate.SwizzleZ, tgsi_swizzle_names ); 51711dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( inst->Predicate.SwizzleW, tgsi_swizzle_names ); 51814a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca } 51914a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca 52014a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca TXT( ") " ); 52114a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca } 52214a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca 523848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell TXT( info->mnemonic ); 524f141399031981d6af19a32025ae7c1b947196480michal 52582f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol switch (inst->Instruction.Saturate) { 526f141399031981d6af19a32025ae7c1b947196480michal case TGSI_SAT_NONE: 527f141399031981d6af19a32025ae7c1b947196480michal break; 528f141399031981d6af19a32025ae7c1b947196480michal case TGSI_SAT_ZERO_ONE: 529f141399031981d6af19a32025ae7c1b947196480michal TXT( "_SAT" ); 530f141399031981d6af19a32025ae7c1b947196480michal break; 531f141399031981d6af19a32025ae7c1b947196480michal case TGSI_SAT_MINUS_PLUS_ONE: 53247a45aaa0fd1dbc0de45de2ed2995f81a0154bafMichal Krol TXT( "_SATNV" ); 533f141399031981d6af19a32025ae7c1b947196480michal break; 534f141399031981d6af19a32025ae7c1b947196480michal default: 535f141399031981d6af19a32025ae7c1b947196480michal assert( 0 ); 536f141399031981d6af19a32025ae7c1b947196480michal } 537f141399031981d6af19a32025ae7c1b947196480michal 53882f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol for (i = 0; i < inst->Instruction.NumDstRegs; i++) { 5397d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell const struct tgsi_full_dst_register *dst = &inst->Dst[i]; 540f141399031981d6af19a32025ae7c1b947196480michal 54182f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol if (!first_reg) 542f141399031981d6af19a32025ae7c1b947196480michal CHR( ',' ); 543f141399031981d6af19a32025ae7c1b947196480michal CHR( ' ' ); 544f141399031981d6af19a32025ae7c1b947196480michal 545101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin _dump_register_dst( ctx, dst ); 5465b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell _dump_writemask( ctx, dst->Register.WriteMask ); 547f141399031981d6af19a32025ae7c1b947196480michal 54886fe5f235b174e2aedd02bc14a94df818bc3ea74michal first_reg = FALSE; 549f141399031981d6af19a32025ae7c1b947196480michal } 550f141399031981d6af19a32025ae7c1b947196480michal 55182f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol for (i = 0; i < inst->Instruction.NumSrcRegs; i++) { 5527d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell const struct tgsi_full_src_register *src = &inst->Src[i]; 553f141399031981d6af19a32025ae7c1b947196480michal 55482f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol if (!first_reg) 555f141399031981d6af19a32025ae7c1b947196480michal CHR( ',' ); 556f141399031981d6af19a32025ae7c1b947196480michal CHR( ' ' ); 557f141399031981d6af19a32025ae7c1b947196480michal 55891a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell if (src->Register.Negate) 559399190d13668ed457cf5d6bbbefe908a95bad289José Fonseca CHR( '-' ); 56091a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell if (src->Register.Absolute) 561f141399031981d6af19a32025ae7c1b947196480michal CHR( '|' ); 562f141399031981d6af19a32025ae7c1b947196480michal 563afd01366b098bf790658e069caddb7a930da827dZack Rusin _dump_register_src(ctx, src); 564f141399031981d6af19a32025ae7c1b947196480michal 56591a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell if (src->Register.SwizzleX != TGSI_SWIZZLE_X || 56691a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell src->Register.SwizzleY != TGSI_SWIZZLE_Y || 56791a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell src->Register.SwizzleZ != TGSI_SWIZZLE_Z || 56891a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell src->Register.SwizzleW != TGSI_SWIZZLE_W) { 569f141399031981d6af19a32025ae7c1b947196480michal CHR( '.' ); 57011dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( src->Register.SwizzleX, tgsi_swizzle_names ); 57111dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( src->Register.SwizzleY, tgsi_swizzle_names ); 57211dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( src->Register.SwizzleZ, tgsi_swizzle_names ); 57311dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( src->Register.SwizzleW, tgsi_swizzle_names ); 574f141399031981d6af19a32025ae7c1b947196480michal } 575f141399031981d6af19a32025ae7c1b947196480michal 57691a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell if (src->Register.Absolute) 577f141399031981d6af19a32025ae7c1b947196480michal CHR( '|' ); 578f141399031981d6af19a32025ae7c1b947196480michal 57986fe5f235b174e2aedd02bc14a94df818bc3ea74michal first_reg = FALSE; 580f141399031981d6af19a32025ae7c1b947196480michal } 581281dad225947b4f00bfc5e785d92d2a7c2f06afemichal 582ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell if (inst->Instruction.Texture) { 58336aa9cf781440ce685930586cbf53248cf9c0dc2Michal Krol TXT( ", " ); 58411dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( inst->Texture.Texture, tgsi_texture_names ); 5852083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie for (i = 0; i < inst->Texture.NumOffsets; i++) { 5862083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie TXT( ", " ); 5872083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie ENM( inst->TexOffsets[i].File, tgsi_file_names); 5882083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie CHR( '[' ); 5892083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie SID( inst->TexOffsets[i].Index ); 5902083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie CHR( ']' ); 5912083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie CHR( '.' ); 5922083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie ENM( inst->TexOffsets[i].SwizzleX, tgsi_swizzle_names); 5932083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie ENM( inst->TexOffsets[i].SwizzleY, tgsi_swizzle_names); 5942083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie ENM( inst->TexOffsets[i].SwizzleZ, tgsi_swizzle_names); 5952083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie } 59636aa9cf781440ce685930586cbf53248cf9c0dc2Michal Krol } 59736aa9cf781440ce685930586cbf53248cf9c0dc2Michal Krol 59882f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol switch (inst->Instruction.Opcode) { 599281dad225947b4f00bfc5e785d92d2a7c2f06afemichal case TGSI_OPCODE_IF: 600281dad225947b4f00bfc5e785d92d2a7c2f06afemichal case TGSI_OPCODE_ELSE: 601cb90c43676c258419e4b617c908570891d3674cbMichal Krol case TGSI_OPCODE_BGNLOOP: 602cb90c43676c258419e4b617c908570891d3674cbMichal Krol case TGSI_OPCODE_ENDLOOP: 6033a345e000350c1590367f01be5db6f0f10701283Brian case TGSI_OPCODE_CAL: 6044a470f63c9c3f5aeef1e10ae42eee24c772f74fcmichal TXT( " :" ); 6057d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell UID( inst->Label.Label ); 606281dad225947b4f00bfc5e785d92d2a7c2f06afemichal break; 607281dad225947b4f00bfc5e785d92d2a7c2f06afemichal } 6082783f3bfabd6e316f7e221e950499c3631c041ceMichal Krol 60945cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul /* update indentation */ 61045cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul if (inst->Instruction.Opcode == TGSI_OPCODE_IF || 61145cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul inst->Instruction.Opcode == TGSI_OPCODE_ELSE || 61245cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul inst->Instruction.Opcode == TGSI_OPCODE_BGNLOOP) { 61345cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul ctx->indentation += indent_spaces; 61445cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul } 61545cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul 61676164bf7a20ef6dabc3204a766f604becfba9997José Fonseca EOL(); 617673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 618673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca return TRUE; 619f141399031981d6af19a32025ae7c1b947196480michal} 620f141399031981d6af19a32025ae7c1b947196480michal 621673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecavoid 622673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecatgsi_dump_instruction( 623673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca const struct tgsi_full_instruction *inst, 624673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca uint instno ) 62583f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol{ 626673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct dump_ctx ctx; 62783f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol 628673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca ctx.instno = instno; 629848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell ctx.indent = 0; 630a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr ctx.dump_printf = dump_ctx_printf; 63145cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul ctx.indentation = 0; 632673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 633673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca iter_instruction( &ctx.iter, (struct tgsi_full_instruction *)inst ); 63483f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol} 63583f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol 63683f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krolstatic boolean 63783f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krolprolog( 638673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct tgsi_iterate_context *iter ) 63983f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol{ 640673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct dump_ctx *ctx = (struct dump_ctx *) iter; 64185b5dac705fcf3fafb734696e1f863cfc21e2d6eBrian Paul ENM( iter->processor.Processor, tgsi_processor_type_names ); 64276164bf7a20ef6dabc3204a766f604becfba9997José Fonseca EOL(); 64383f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol return TRUE; 64483f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol} 64583f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol 6463c4f1ba5a2edefd69b2c47abaf534fb3af3f259dJosé Fonsecavoid 647b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonsecatgsi_dump( 64815c902455fe1b4572e614bf30912d92fe9c7bb28Michal Krol const struct tgsi_token *tokens, 649b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca uint flags ) 650ffe58739da9eee2e99682747cc8f26e412c87430michal{ 65183f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol struct dump_ctx ctx; 652ffe58739da9eee2e99682747cc8f26e412c87430michal 65383f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol ctx.iter.prolog = prolog; 65483f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol ctx.iter.iterate_instruction = iter_instruction; 65583f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol ctx.iter.iterate_declaration = iter_declaration; 65683f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol ctx.iter.iterate_immediate = iter_immediate; 6573ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin ctx.iter.iterate_property = iter_property; 65883f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol ctx.iter.epilog = NULL; 659ffe58739da9eee2e99682747cc8f26e412c87430michal 66083f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol ctx.instno = 0; 661848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell ctx.indent = 0; 662a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr ctx.dump_printf = dump_ctx_printf; 66345cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul ctx.indentation = 0; 664ffe58739da9eee2e99682747cc8f26e412c87430michal 66583f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol tgsi_iterate_shader( tokens, &ctx.iter ); 666ffe58739da9eee2e99682747cc8f26e412c87430michal} 667673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 668b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonsecastruct str_dump_ctx 669b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca{ 670b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca struct dump_ctx base; 671b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca char *str; 672b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca char *ptr; 6733e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell int left; 674b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca}; 675b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca 676b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonsecastatic void 677b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonsecastr_dump_ctx_printf(struct dump_ctx *ctx, const char *format, ...) 678b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca{ 679b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca struct str_dump_ctx *sctx = (struct str_dump_ctx *)ctx; 680b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca 681b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca if(sctx->left > 1) { 6823e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell int written; 683b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca va_list ap; 684b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca va_start(ap, format); 685b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca written = util_vsnprintf(sctx->ptr, sctx->left, format, ap); 686b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca va_end(ap); 6873e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell 6883e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell /* Some complicated logic needed to handle the return value of 6893e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell * vsnprintf: 6903e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell */ 6913e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell if (written > 0) { 6923e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell written = MIN2(sctx->left, written); 6933e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell sctx->ptr += written; 6943e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell sctx->left -= written; 6953e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell } 696b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca } 697b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca} 698b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca 699673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecavoid 700b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonsecatgsi_dump_str( 701673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca const struct tgsi_token *tokens, 702b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca uint flags, 703b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca char *str, 704b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca size_t size) 705673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca{ 706b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca struct str_dump_ctx ctx; 707b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca 708b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca ctx.base.iter.prolog = prolog; 709b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca ctx.base.iter.iterate_instruction = iter_instruction; 710b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca ctx.base.iter.iterate_declaration = iter_declaration; 711b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca ctx.base.iter.iterate_immediate = iter_immediate; 7123ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin ctx.base.iter.iterate_property = iter_property; 713b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca ctx.base.iter.epilog = NULL; 714b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca 715b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca ctx.base.instno = 0; 716848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell ctx.base.indent = 0; 717a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr ctx.base.dump_printf = &str_dump_ctx_printf; 71845cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul ctx.base.indentation = 0; 719b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca 720b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca ctx.str = str; 721b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca ctx.str[0] = 0; 722b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca ctx.ptr = str; 7233e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell ctx.left = (int)size; 724b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca 725b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca tgsi_iterate_shader( tokens, &ctx.base.iter ); 726673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca} 727