1ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol/************************************************************************** 2ee295fccdd0c94cb6b8af4dfb30283e39f548223Michal Krol * 3877128505431adaf817dc8069172ebe4a1cdf5d8José Fonseca * Copyright 2007-2008 VMware, Inc. 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. 21877128505431adaf817dc8069172ebe4a1cdf5d8José Fonseca * IN NO EVENT SHALL VMWARE 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" 32041081dc219dcf7f61748284033c6fd7627acc69Dave Airlie#include "util/u_math.h" 33abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#include "tgsi_dump.h" 342caaba8195d1019702246bd7f0c02aa95364a8bdMichal Krol#include "tgsi_info.h" 3583f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol#include "tgsi_iterate.h" 3685b5dac705fcf3fafb734696e1f863cfc21e2d6eBrian Paul#include "tgsi_strings.h" 3783f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol 3845cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul 3945cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul/** Number of spaces to indent for IF/LOOP/etc */ 4045cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paulstatic const int indent_spaces = 3; 4145cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul 4245cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul 4383f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krolstruct dump_ctx 4483f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol{ 4583f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol struct tgsi_iterate_context iter; 4683f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol 47041081dc219dcf7f61748284033c6fd7627acc69Dave Airlie boolean dump_float_as_hex; 48041081dc219dcf7f61748284033c6fd7627acc69Dave Airlie 4983f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol uint instno; 509ccf91f9ef72f63871b0a8c6b43f7bd452d73b94José Fonseca uint immno; 51848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell int indent; 52673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 5345cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul uint indentation; 548141b4cee514bb673e394f6fbe2cbe02e5b0faf2Marek Olšák FILE *file; 5545cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul 56a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr void (*dump_printf)(struct dump_ctx *ctx, const char *format, ...); 5783f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol}; 58ffe58739da9eee2e99682747cc8f26e412c87430Michal Krol 59b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonsecastatic void 60b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonsecadump_ctx_printf(struct dump_ctx *ctx, const char *format, ...) 61b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca{ 62b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca va_list ap; 63b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca (void)ctx; 64b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca va_start(ap, format); 658141b4cee514bb673e394f6fbe2cbe02e5b0faf2Marek Olšák if (ctx->file) 668141b4cee514bb673e394f6fbe2cbe02e5b0faf2Marek Olšák vfprintf(ctx->file, format, ap); 678141b4cee514bb673e394f6fbe2cbe02e5b0faf2Marek Olšák else 688141b4cee514bb673e394f6fbe2cbe02e5b0faf2Marek Olšák _debug_vprintf(format, ap); 69b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca va_end(ap); 70b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca} 71b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca 72ffe58739da9eee2e99682747cc8f26e412c87430Michal Krolstatic void 733c4f1ba5a2edefd69b2c47abaf534fb3af3f259dJosé Fonsecadump_enum( 74b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca struct dump_ctx *ctx, 7582f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol uint e, 7682f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol const char **enums, 7782f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol uint enum_count ) 78ffe58739da9eee2e99682747cc8f26e412c87430Michal Krol{ 7982f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol if (e >= enum_count) 80a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr ctx->dump_printf( ctx, "%u", e ); 8182f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol else 82a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr ctx->dump_printf( ctx, "%s", enums[e] ); 83ffe58739da9eee2e99682747cc8f26e412c87430Michal Krol} 84ffe58739da9eee2e99682747cc8f26e412c87430Michal Krol 85a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr#define EOL() ctx->dump_printf( ctx, "\n" ) 86a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr#define TXT(S) ctx->dump_printf( ctx, "%s", S ) 87a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr#define CHR(C) ctx->dump_printf( ctx, "%c", C ) 88a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr#define UIX(I) ctx->dump_printf( ctx, "0x%x", I ) 89a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr#define UID(I) ctx->dump_printf( ctx, "%u", I ) 90a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr#define INSTID(I) ctx->dump_printf( ctx, "% 3u", I ) 91a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr#define SID(I) ctx->dump_printf( ctx, "%d", I ) 92a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr#define FLT(F) ctx->dump_printf( ctx, "%10.4f", F ) 93fa43e0443e206740e219d45abefee65bdb2c3ecbDave Airlie#define DBL(D) ctx->dump_printf( ctx, "%10.8f", D ) 94041081dc219dcf7f61748284033c6fd7627acc69Dave Airlie#define HFLT(F) ctx->dump_printf( ctx, "0x%08x", fui((F)) ) 95b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca#define ENM(E,ENUMS) dump_enum( ctx, E, ENUMS, sizeof( ENUMS ) / sizeof( *ENUMS ) ) 96ffe58739da9eee2e99682747cc8f26e412c87430Michal Krol 9711dad217186a4c177cb41aa526531d6cd46ae5b0José Fonsecaconst char * 9892209314df4f12e8b47336a25ba14cb6b9a23df2Marek Olšáktgsi_swizzle_names[4] = 99f141399031981d6af19a32025ae7c1b947196480Michal Krol{ 100f141399031981d6af19a32025ae7c1b947196480Michal Krol "x", 101f141399031981d6af19a32025ae7c1b947196480Michal Krol "y", 102f141399031981d6af19a32025ae7c1b947196480Michal Krol "z", 103f141399031981d6af19a32025ae7c1b947196480Michal Krol "w" 104f141399031981d6af19a32025ae7c1b947196480Michal Krol}; 105f141399031981d6af19a32025ae7c1b947196480Michal Krol 10682f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krolstatic void 107afd01366b098bf790658e069caddb7a930da827dZack Rusin_dump_register_src( 108afd01366b098bf790658e069caddb7a930da827dZack Rusin struct dump_ctx *ctx, 109afd01366b098bf790658e069caddb7a930da827dZack Rusin const struct tgsi_full_src_register *src ) 110afd01366b098bf790658e069caddb7a930da827dZack Rusin{ 11114541dacab218cbe82310d999d44130ebc3f6526Brian Paul TXT(tgsi_file_name(src->Register.File)); 1127472cd0f1f0f8284729274bc5c453d59d9ab4b55Michal Krol if (src->Register.Dimension) { 11323969670387bc0bb7d0761936905e5eb4df963dcZack Rusin if (src->Dimension.Indirect) { 11423969670387bc0bb7d0761936905e5eb4df963dcZack Rusin CHR( '[' ); 11514541dacab218cbe82310d999d44130ebc3f6526Brian Paul TXT(tgsi_file_name(src->DimIndirect.File)); 11623969670387bc0bb7d0761936905e5eb4df963dcZack Rusin CHR( '[' ); 11723969670387bc0bb7d0761936905e5eb4df963dcZack Rusin SID( src->DimIndirect.Index ); 11823969670387bc0bb7d0761936905e5eb4df963dcZack Rusin TXT( "]." ); 11921190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König ENM( src->DimIndirect.Swizzle, tgsi_swizzle_names ); 12023969670387bc0bb7d0761936905e5eb4df963dcZack Rusin if (src->Dimension.Index != 0) { 12123969670387bc0bb7d0761936905e5eb4df963dcZack Rusin if (src->Dimension.Index > 0) 12223969670387bc0bb7d0761936905e5eb4df963dcZack Rusin CHR( '+' ); 12323969670387bc0bb7d0761936905e5eb4df963dcZack Rusin SID( src->Dimension.Index ); 12423969670387bc0bb7d0761936905e5eb4df963dcZack Rusin } 12523969670387bc0bb7d0761936905e5eb4df963dcZack Rusin CHR( ']' ); 12621190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König if (src->DimIndirect.ArrayID) { 12721190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König CHR( '(' ); 12821190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König SID( src->DimIndirect.ArrayID ); 12921190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König CHR( ')' ); 13021190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König } 13123969670387bc0bb7d0761936905e5eb4df963dcZack Rusin } else { 13223969670387bc0bb7d0761936905e5eb4df963dcZack Rusin CHR('['); 13323969670387bc0bb7d0761936905e5eb4df963dcZack Rusin SID(src->Dimension.Index); 13423969670387bc0bb7d0761936905e5eb4df963dcZack Rusin CHR(']'); 13523969670387bc0bb7d0761936905e5eb4df963dcZack Rusin } 1367472cd0f1f0f8284729274bc5c453d59d9ab4b55Michal Krol } 137afd01366b098bf790658e069caddb7a930da827dZack Rusin if (src->Register.Indirect) { 138afd01366b098bf790658e069caddb7a930da827dZack Rusin CHR( '[' ); 13914541dacab218cbe82310d999d44130ebc3f6526Brian Paul TXT(tgsi_file_name(src->Indirect.File)); 140afd01366b098bf790658e069caddb7a930da827dZack Rusin CHR( '[' ); 141afd01366b098bf790658e069caddb7a930da827dZack Rusin SID( src->Indirect.Index ); 142afd01366b098bf790658e069caddb7a930da827dZack Rusin TXT( "]." ); 14321190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König ENM( src->Indirect.Swizzle, tgsi_swizzle_names ); 144afd01366b098bf790658e069caddb7a930da827dZack Rusin if (src->Register.Index != 0) { 145afd01366b098bf790658e069caddb7a930da827dZack Rusin if (src->Register.Index > 0) 146afd01366b098bf790658e069caddb7a930da827dZack Rusin CHR( '+' ); 147afd01366b098bf790658e069caddb7a930da827dZack Rusin SID( src->Register.Index ); 148afd01366b098bf790658e069caddb7a930da827dZack Rusin } 149afd01366b098bf790658e069caddb7a930da827dZack Rusin CHR( ']' ); 15021190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König if (src->Indirect.ArrayID) { 15121190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König CHR( '(' ); 15221190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König SID( src->Indirect.ArrayID ); 15321190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König CHR( ')' ); 15421190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König } 155afd01366b098bf790658e069caddb7a930da827dZack Rusin } else { 156afd01366b098bf790658e069caddb7a930da827dZack Rusin CHR( '[' ); 157afd01366b098bf790658e069caddb7a930da827dZack Rusin SID( src->Register.Index ); 158afd01366b098bf790658e069caddb7a930da827dZack Rusin CHR( ']' ); 159afd01366b098bf790658e069caddb7a930da827dZack Rusin } 160afd01366b098bf790658e069caddb7a930da827dZack Rusin} 161afd01366b098bf790658e069caddb7a930da827dZack Rusin 162101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin 163afd01366b098bf790658e069caddb7a930da827dZack Rusinstatic void 164101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin_dump_register_dst( 165b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca struct dump_ctx *ctx, 166101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin const struct tgsi_full_dst_register *dst ) 16773e1d0be756537376495547bc1e798805884b8efMichal Krol{ 16814541dacab218cbe82310d999d44130ebc3f6526Brian Paul TXT(tgsi_file_name(dst->Register.File)); 169101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin if (dst->Register.Dimension) { 170101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin if (dst->Dimension.Indirect) { 171101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( '[' ); 17214541dacab218cbe82310d999d44130ebc3f6526Brian Paul TXT(tgsi_file_name(dst->DimIndirect.File)); 173101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( '[' ); 174101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin SID( dst->DimIndirect.Index ); 175101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin TXT( "]." ); 17621190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König ENM( dst->DimIndirect.Swizzle, tgsi_swizzle_names ); 177101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin if (dst->Dimension.Index != 0) { 178101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin if (dst->Dimension.Index > 0) 179101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( '+' ); 180101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin SID( dst->Dimension.Index ); 181101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin } 182101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( ']' ); 18321190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König if (dst->DimIndirect.ArrayID) { 18421190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König CHR( '(' ); 18521190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König SID( dst->DimIndirect.ArrayID ); 18621190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König CHR( ')' ); 18721190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König } 188101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin } else { 189101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR('['); 190101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin SID(dst->Dimension.Index); 191101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR(']'); 192101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin } 193101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin } 194101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin if (dst->Register.Indirect) { 195101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( '[' ); 19614541dacab218cbe82310d999d44130ebc3f6526Brian Paul TXT(tgsi_file_name(dst->Indirect.File)); 197101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( '[' ); 198101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin SID( dst->Indirect.Index ); 199101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin TXT( "]." ); 20021190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König ENM( dst->Indirect.Swizzle, tgsi_swizzle_names ); 201101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin if (dst->Register.Index != 0) { 202101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin if (dst->Register.Index > 0) 203101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( '+' ); 204101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin SID( dst->Register.Index ); 205101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin } 206101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( ']' ); 20721190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König if (dst->Indirect.ArrayID) { 20821190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König CHR( '(' ); 20921190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König SID( dst->Indirect.ArrayID ); 21021190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König CHR( ')' ); 21121190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König } 212101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin } else { 213101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( '[' ); 214101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin SID( dst->Register.Index ); 215101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin CHR( ']' ); 216f141399031981d6af19a32025ae7c1b947196480Michal Krol } 21782f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol} 21882f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krolstatic void 21982f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol_dump_writemask( 220b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca struct dump_ctx *ctx, 22182f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol uint writemask ) 22282f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol{ 22382f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol if (writemask != TGSI_WRITEMASK_XYZW) { 224058b978a5ae2a56e09fed6335b686c654444f4acMichal Krol CHR( '.' ); 22582f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol if (writemask & TGSI_WRITEMASK_X) 226058b978a5ae2a56e09fed6335b686c654444f4acMichal Krol CHR( 'x' ); 22782f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol if (writemask & TGSI_WRITEMASK_Y) 228058b978a5ae2a56e09fed6335b686c654444f4acMichal Krol CHR( 'y' ); 22982f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol if (writemask & TGSI_WRITEMASK_Z) 230058b978a5ae2a56e09fed6335b686c654444f4acMichal Krol CHR( 'z' ); 23182f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol if (writemask & TGSI_WRITEMASK_W) 232058b978a5ae2a56e09fed6335b686c654444f4acMichal Krol CHR( 'w' ); 233058b978a5ae2a56e09fed6335b686c654444f4acMichal Krol } 23482f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol} 23582f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol 2362b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusinstatic void 2372b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusindump_imm_data(struct tgsi_iterate_context *iter, 2382b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin union tgsi_immediate_data *data, 2392b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin unsigned num_tokens, 2402b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin unsigned data_type) 2412b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin{ 2422b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin struct dump_ctx *ctx = (struct dump_ctx *)iter; 2432b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin unsigned i ; 2442b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 2452b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin TXT( " {" ); 2462b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 2472b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin assert( num_tokens <= 4 ); 2482b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin for (i = 0; i < num_tokens; i++) { 2492b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin switch (data_type) { 250fa43e0443e206740e219d45abefee65bdb2c3ecbDave Airlie case TGSI_IMM_FLOAT64: { 251fa43e0443e206740e219d45abefee65bdb2c3ecbDave Airlie union di d; 252fa43e0443e206740e219d45abefee65bdb2c3ecbDave Airlie d.ui = data[i].Uint | (uint64_t)data[i+1].Uint << 32; 253fa43e0443e206740e219d45abefee65bdb2c3ecbDave Airlie DBL( d.d ); 254fa43e0443e206740e219d45abefee65bdb2c3ecbDave Airlie i++; 255fa43e0443e206740e219d45abefee65bdb2c3ecbDave Airlie break; 256fa43e0443e206740e219d45abefee65bdb2c3ecbDave Airlie } 2573985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie case TGSI_IMM_INT64: { 2583985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie union di d; 2593985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie d.i = data[i].Uint | (uint64_t)data[i+1].Uint << 32; 2603985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie UID( d.i ); 2613985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie i++; 2623985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie break; 2633985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie } 2643985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie case TGSI_IMM_UINT64: { 2653985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie union di d; 2663985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie d.ui = data[i].Uint | (uint64_t)data[i+1].Uint << 32; 2673985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie UID( d.ui ); 2683985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie i++; 2693985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie break; 2703985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie } 2712b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin case TGSI_IMM_FLOAT32: 272041081dc219dcf7f61748284033c6fd7627acc69Dave Airlie if (ctx->dump_float_as_hex) 273041081dc219dcf7f61748284033c6fd7627acc69Dave Airlie HFLT( data[i].Float ); 274041081dc219dcf7f61748284033c6fd7627acc69Dave Airlie else 275041081dc219dcf7f61748284033c6fd7627acc69Dave Airlie FLT( data[i].Float ); 2762b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin break; 2772b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin case TGSI_IMM_UINT32: 2782b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin UID(data[i].Uint); 2792b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin break; 2802b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin case TGSI_IMM_INT32: 2812b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin SID(data[i].Int); 2822b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin break; 2832b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin default: 2842b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin assert( 0 ); 2852b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin } 2862b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 2872b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin if (i < num_tokens - 1) 2882b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin TXT( ", " ); 2892b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin } 2902b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin TXT( "}" ); 2912b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin} 2922b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 293673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecastatic boolean 294673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecaiter_declaration( 295673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct tgsi_iterate_context *iter, 296673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct tgsi_full_declaration *decl ) 29782f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol{ 298b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca struct dump_ctx *ctx = (struct dump_ctx *)iter; 299d7081828cc62df7efbc23ca1037a42d69dab94a7Ilia Mirkin boolean patch = decl->Semantic.Name == TGSI_SEMANTIC_PATCH || 300d7081828cc62df7efbc23ca1037a42d69dab94a7Ilia Mirkin decl->Semantic.Name == TGSI_SEMANTIC_TESSINNER || 301d7081828cc62df7efbc23ca1037a42d69dab94a7Ilia Mirkin decl->Semantic.Name == TGSI_SEMANTIC_TESSOUTER || 302d7081828cc62df7efbc23ca1037a42d69dab94a7Ilia Mirkin decl->Semantic.Name == TGSI_SEMANTIC_PRIMID; 303673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 30476164bf7a20ef6dabc3204a766f604becfba9997José Fonseca TXT( "DCL " ); 30582f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol 30614541dacab218cbe82310d999d44130ebc3f6526Brian Paul TXT(tgsi_file_name(decl->Declaration.File)); 3074367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol 308d7081828cc62df7efbc23ca1037a42d69dab94a7Ilia Mirkin /* all geometry shader inputs and non-patch tessellation shader inputs are 309d7081828cc62df7efbc23ca1037a42d69dab94a7Ilia Mirkin * two dimensional 310d7081828cc62df7efbc23ca1037a42d69dab94a7Ilia Mirkin */ 3114367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol if (decl->Declaration.File == TGSI_FILE_INPUT && 312af249a7da9bf2621ab836d5074ef692677b11bbfMarek Olšák (iter->processor.Processor == PIPE_SHADER_GEOMETRY || 313d7081828cc62df7efbc23ca1037a42d69dab94a7Ilia Mirkin (!patch && 314af249a7da9bf2621ab836d5074ef692677b11bbfMarek Olšák (iter->processor.Processor == PIPE_SHADER_TESS_CTRL || 315af249a7da9bf2621ab836d5074ef692677b11bbfMarek Olšák iter->processor.Processor == PIPE_SHADER_TESS_EVAL)))) { 316d7081828cc62df7efbc23ca1037a42d69dab94a7Ilia Mirkin TXT("[]"); 317d7081828cc62df7efbc23ca1037a42d69dab94a7Ilia Mirkin } 318d7081828cc62df7efbc23ca1037a42d69dab94a7Ilia Mirkin 319d7081828cc62df7efbc23ca1037a42d69dab94a7Ilia Mirkin /* all non-patch tess ctrl shader outputs are two dimensional */ 320d7081828cc62df7efbc23ca1037a42d69dab94a7Ilia Mirkin if (decl->Declaration.File == TGSI_FILE_OUTPUT && 321d7081828cc62df7efbc23ca1037a42d69dab94a7Ilia Mirkin !patch && 322af249a7da9bf2621ab836d5074ef692677b11bbfMarek Olšák iter->processor.Processor == PIPE_SHADER_TESS_CTRL) { 3234367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol TXT("[]"); 3244367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol } 3254367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol 3264367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol if (decl->Declaration.Dimension) { 3274367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol CHR('['); 3284367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol SID(decl->Dim.Index2D); 3294367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol CHR(']'); 3304367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol } 3314367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol 3324367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol CHR('['); 3334367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol SID(decl->Range.First); 3344367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol if (decl->Range.First != decl->Range.Last) { 3354367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol TXT(".."); 3364367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol SID(decl->Range.Last); 3374367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol } 3384367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol CHR(']'); 3394367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol 34082f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol _dump_writemask( 341b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca ctx, 34282f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol decl->Declaration.UsageMask ); 343058b978a5ae2a56e09fed6335b686c654444f4acMichal Krol 34416caeff2a5cc1237d30de9487b48b1cd775d9ae1Christian König if (decl->Declaration.Array) { 34516caeff2a5cc1237d30de9487b48b1cd775d9ae1Christian König TXT( ", ARRAY(" ); 34616caeff2a5cc1237d30de9487b48b1cd775d9ae1Christian König SID(decl->Array.ArrayID); 34716caeff2a5cc1237d30de9487b48b1cd775d9ae1Christian König CHR(')'); 34816caeff2a5cc1237d30de9487b48b1cd775d9ae1Christian König } 34916caeff2a5cc1237d30de9487b48b1cd775d9ae1Christian König 3502644952bd4dfa3b75112dee8dfd287a12d770705Francisco Jerez if (decl->Declaration.Local) 3512644952bd4dfa3b75112dee8dfd287a12d770705Francisco Jerez TXT( ", LOCAL" ); 3522644952bd4dfa3b75112dee8dfd287a12d770705Francisco Jerez 3532483062f10e93fbbc5e3f629627b9e8addcc3f84Michal Krol if (decl->Declaration.Semantic) { 354f141399031981d6af19a32025ae7c1b947196480Michal Krol TXT( ", " ); 35585b5dac705fcf3fafb734696e1f863cfc21e2d6eBrian Paul ENM( decl->Semantic.Name, tgsi_semantic_names ); 356763426a0256f0ab06f8af53947bd630f8600183aKeith Whitwell if (decl->Semantic.Index != 0 || 3578acaf862dfeac62550514b0e46f5aa6212b08992Christoph Bumiller decl->Semantic.Name == TGSI_SEMANTIC_TEXCOORD || 358763426a0256f0ab06f8af53947bd630f8600183aKeith Whitwell decl->Semantic.Name == TGSI_SEMANTIC_GENERIC) { 3592483062f10e93fbbc5e3f629627b9e8addcc3f84Michal Krol CHR( '[' ); 360763426a0256f0ab06f8af53947bd630f8600183aKeith Whitwell UID( decl->Semantic.Index ); 3612483062f10e93fbbc5e3f629627b9e8addcc3f84Michal Krol CHR( ']' ); 3622483062f10e93fbbc5e3f629627b9e8addcc3f84Michal Krol } 36304811354c87e40b0bd5e970fa413ea056ed94173Nicolai Hähnle 36404811354c87e40b0bd5e970fa413ea056ed94173Nicolai Hähnle if (decl->Semantic.StreamX != 0 || decl->Semantic.StreamY != 0 || 36504811354c87e40b0bd5e970fa413ea056ed94173Nicolai Hähnle decl->Semantic.StreamZ != 0 || decl->Semantic.StreamW != 0) { 36604811354c87e40b0bd5e970fa413ea056ed94173Nicolai Hähnle TXT(", STREAM("); 36704811354c87e40b0bd5e970fa413ea056ed94173Nicolai Hähnle UID(decl->Semantic.StreamX); 36804811354c87e40b0bd5e970fa413ea056ed94173Nicolai Hähnle TXT(", "); 36904811354c87e40b0bd5e970fa413ea056ed94173Nicolai Hähnle UID(decl->Semantic.StreamY); 37004811354c87e40b0bd5e970fa413ea056ed94173Nicolai Hähnle TXT(", "); 37104811354c87e40b0bd5e970fa413ea056ed94173Nicolai Hähnle UID(decl->Semantic.StreamZ); 37204811354c87e40b0bd5e970fa413ea056ed94173Nicolai Hähnle TXT(", "); 37304811354c87e40b0bd5e970fa413ea056ed94173Nicolai Hähnle UID(decl->Semantic.StreamW); 37404811354c87e40b0bd5e970fa413ea056ed94173Nicolai Hähnle CHR(')'); 37504811354c87e40b0bd5e970fa413ea056ed94173Nicolai Hähnle } 376f141399031981d6af19a32025ae7c1b947196480Michal Krol } 377b9eeb8dccff3b440a299f19a0868a3ff1cda1e09Michal Krol 3788cc9a8aa2a97ca9e7a36a993954a3480d44c13d3Ilia Mirkin if (decl->Declaration.File == TGSI_FILE_IMAGE) { 379bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin TXT(", "); 3808cc9a8aa2a97ca9e7a36a993954a3480d44c13d3Ilia Mirkin ENM(decl->Image.Resource, tgsi_texture_names); 3818cc9a8aa2a97ca9e7a36a993954a3480d44c13d3Ilia Mirkin TXT(", "); 382e2a1ec5f0f0314915fdfc9a8ef93f3789f356404Ilia Mirkin TXT(util_format_name(decl->Image.Format)); 3838cc9a8aa2a97ca9e7a36a993954a3480d44c13d3Ilia Mirkin if (decl->Image.Writable) 384b8e808f1ef9462af8545999df514fddbbff34345Francisco Jerez TXT(", WR"); 3858cc9a8aa2a97ca9e7a36a993954a3480d44c13d3Ilia Mirkin if (decl->Image.Raw) 38682c90b2da8e236bc134cb2bd0ec4e09551b12164Francisco Jerez TXT(", RAW"); 387a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez } 388a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez 389888ddd632d7f6af635cc948f1b3e8982b43800d2Ilia Mirkin if (decl->Declaration.File == TGSI_FILE_BUFFER) { 390888ddd632d7f6af635cc948f1b3e8982b43800d2Ilia Mirkin if (decl->Declaration.Atomic) 391888ddd632d7f6af635cc948f1b3e8982b43800d2Ilia Mirkin TXT(", ATOMIC"); 392888ddd632d7f6af635cc948f1b3e8982b43800d2Ilia Mirkin } 393888ddd632d7f6af635cc948f1b3e8982b43800d2Ilia Mirkin 394a8328e3a50169c3c74656df7f63f56f061d9e751Samuel Pitoiset if (decl->Declaration.File == TGSI_FILE_MEMORY) { 3953788e1bf748eca3186377dfa60dbba1c37f8939eHans de Goede switch (decl->Declaration.MemType) { 3963788e1bf748eca3186377dfa60dbba1c37f8939eHans de Goede /* Note: ,GLOBAL is optional / the default */ 3973788e1bf748eca3186377dfa60dbba1c37f8939eHans de Goede case TGSI_MEMORY_TYPE_GLOBAL: TXT(", GLOBAL"); break; 3983788e1bf748eca3186377dfa60dbba1c37f8939eHans de Goede case TGSI_MEMORY_TYPE_SHARED: TXT(", SHARED"); break; 3993788e1bf748eca3186377dfa60dbba1c37f8939eHans de Goede case TGSI_MEMORY_TYPE_PRIVATE: TXT(", PRIVATE"); break; 4003788e1bf748eca3186377dfa60dbba1c37f8939eHans de Goede case TGSI_MEMORY_TYPE_INPUT: TXT(", INPUT"); break; 4013788e1bf748eca3186377dfa60dbba1c37f8939eHans de Goede } 402a8328e3a50169c3c74656df7f63f56f061d9e751Samuel Pitoiset } 403a8328e3a50169c3c74656df7f63f56f061d9e751Samuel Pitoiset 404a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez if (decl->Declaration.File == TGSI_FILE_SAMPLER_VIEW) { 405bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin TXT(", "); 406a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez ENM(decl->SamplerView.Resource, tgsi_texture_names); 407a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez TXT(", "); 408a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez if ((decl->SamplerView.ReturnTypeX == decl->SamplerView.ReturnTypeY) && 409a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez (decl->SamplerView.ReturnTypeX == decl->SamplerView.ReturnTypeZ) && 410a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez (decl->SamplerView.ReturnTypeX == decl->SamplerView.ReturnTypeW)) { 411e7a614c60c21a961d88f8cfd78969052fa7a2685Brian Paul ENM(decl->SamplerView.ReturnTypeX, tgsi_return_type_names); 412bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin } else { 413e7a614c60c21a961d88f8cfd78969052fa7a2685Brian Paul ENM(decl->SamplerView.ReturnTypeX, tgsi_return_type_names); 414bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin TXT(", "); 415e7a614c60c21a961d88f8cfd78969052fa7a2685Brian Paul ENM(decl->SamplerView.ReturnTypeY, tgsi_return_type_names); 416bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin TXT(", "); 417e7a614c60c21a961d88f8cfd78969052fa7a2685Brian Paul ENM(decl->SamplerView.ReturnTypeZ, tgsi_return_type_names); 418bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin TXT(", "); 419e7a614c60c21a961d88f8cfd78969052fa7a2685Brian Paul ENM(decl->SamplerView.ReturnTypeW, tgsi_return_type_names); 420bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin } 421bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin } 422bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin 4231279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez if (decl->Declaration.Interpolate) { 424af249a7da9bf2621ab836d5074ef692677b11bbfMarek Olšák if (iter->processor.Processor == PIPE_SHADER_FRAGMENT && 4251279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez decl->Declaration.File == TGSI_FILE_INPUT) 4261279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez { 4271279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez TXT( ", " ); 4281279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez ENM( decl->Interp.Interpolate, tgsi_interpolate_names ); 4291279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez } 4302783f3bfabd6e316f7e221e950499c3631c041ceMichal Krol 4314c97ed4411e3653a082875b79587fb308c284a99Ilia Mirkin if (decl->Interp.Location != TGSI_INTERPOLATE_LOC_CENTER) { 4324c97ed4411e3653a082875b79587fb308c284a99Ilia Mirkin TXT( ", " ); 4334c97ed4411e3653a082875b79587fb308c284a99Ilia Mirkin ENM( decl->Interp.Location, tgsi_interpolate_locations ); 4341279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez } 4351279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez 4361279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez if (decl->Interp.CylindricalWrap) { 4371279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez TXT(", CYLWRAP_"); 4381279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_X) { 4391279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez CHR('X'); 4401279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez } 4411279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_Y) { 4421279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez CHR('Y'); 4431279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez } 4441279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_Z) { 4451279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez CHR('Z'); 4461279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez } 4471279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_W) { 4481279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez CHR('W'); 4491279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez } 4501279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez } 451dc48ae97dcd84acf691b33b0ea2e76c5fdfe18e1Brian Paul } 452dc48ae97dcd84acf691b33b0ea2e76c5fdfe18e1Brian Paul 453dc48ae97dcd84acf691b33b0ea2e76c5fdfe18e1Brian Paul if (decl->Declaration.Invariant) { 454dc48ae97dcd84acf691b33b0ea2e76c5fdfe18e1Brian Paul TXT( ", INVARIANT" ); 455dc48ae97dcd84acf691b33b0ea2e76c5fdfe18e1Brian Paul } 456dc48ae97dcd84acf691b33b0ea2e76c5fdfe18e1Brian Paul 45776164bf7a20ef6dabc3204a766f604becfba9997José Fonseca EOL(); 458f141399031981d6af19a32025ae7c1b947196480Michal Krol 45983f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol return TRUE; 46083f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol} 46183f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol 462adaaa29218f1babad874f50681ca971fdd3b8a40Keith Whitwellvoid 463673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecatgsi_dump_declaration( 464673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca const struct tgsi_full_declaration *decl ) 465f141399031981d6af19a32025ae7c1b947196480Michal Krol{ 466673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct dump_ctx ctx; 467798f7a8596e3ff3f57a44812d7fd005f53f5557cWuZhen memset(&ctx, 0, sizeof(ctx)); 468673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 469a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr ctx.dump_printf = dump_ctx_printf; 470673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 471673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca iter_declaration( &ctx.iter, (struct tgsi_full_declaration *)decl ); 472673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca} 473673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 474673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecastatic boolean 4753ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusiniter_property( 4763ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_iterate_context *iter, 4773ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_full_property *prop ) 4783ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin{ 479198d1bdb5f446ee055d5591a61c0174f87171820Brian Paul unsigned i; 4803ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct dump_ctx *ctx = (struct dump_ctx *)iter; 4813ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 4823ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin TXT( "PROPERTY " ); 48392209314df4f12e8b47336a25ba14cb6b9a23df2Marek Olšák ENM(prop->Property.PropertyName, tgsi_property_names); 4843ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 4853ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin if (prop->Property.NrTokens > 1) 4863ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin TXT(" "); 4873ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 4883ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin for (i = 0; i < prop->Property.NrTokens - 1; ++i) { 4893ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin switch (prop->Property.PropertyName) { 4903ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin case TGSI_PROPERTY_GS_INPUT_PRIM: 4913ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin case TGSI_PROPERTY_GS_OUTPUT_PRIM: 49292209314df4f12e8b47336a25ba14cb6b9a23df2Marek Olšák ENM(prop->u[i].Data, tgsi_primitive_names); 4933ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin break; 49473317139a4f78126af0dc4ddaef8206352740727Luca Barbieri case TGSI_PROPERTY_FS_COORD_ORIGIN: 49592209314df4f12e8b47336a25ba14cb6b9a23df2Marek Olšák ENM(prop->u[i].Data, tgsi_fs_coord_origin_names); 49673317139a4f78126af0dc4ddaef8206352740727Luca Barbieri break; 49773317139a4f78126af0dc4ddaef8206352740727Luca Barbieri case TGSI_PROPERTY_FS_COORD_PIXEL_CENTER: 49892209314df4f12e8b47336a25ba14cb6b9a23df2Marek Olšák ENM(prop->u[i].Data, tgsi_fs_coord_pixel_center_names); 49973317139a4f78126af0dc4ddaef8206352740727Luca Barbieri break; 5009690ab0cdf3cdbcdabce4858fd84711b3afbb9aaBrian Paul case TGSI_PROPERTY_NEXT_SHADER: 5019690ab0cdf3cdbcdabce4858fd84711b3afbb9aaBrian Paul ENM(prop->u[i].Data, tgsi_processor_type_names); 5029690ab0cdf3cdbcdabce4858fd84711b3afbb9aaBrian Paul break; 5033ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin default: 5043ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin SID( prop->u[i].Data ); 5053ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin break; 5063ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin } 5073ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin if (i < prop->Property.NrTokens - 2) 5083ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin TXT( ", " ); 5093ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin } 5103ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin EOL(); 5113ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 5123ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin return TRUE; 5133ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin} 5143ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 5153ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusinvoid tgsi_dump_property( 5163ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin const struct tgsi_full_property *prop ) 5173ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin{ 5183ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct dump_ctx ctx; 519798f7a8596e3ff3f57a44812d7fd005f53f5557cWuZhen memset(&ctx, 0, sizeof(ctx)); 5203ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 521a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr ctx.dump_printf = dump_ctx_printf; 5223ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 5233ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin iter_property( &ctx.iter, (struct tgsi_full_property *)prop ); 5243ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin} 5253ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 5263ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusinstatic boolean 527673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecaiter_immediate( 528673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct tgsi_iterate_context *iter, 529673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct tgsi_full_immediate *imm ) 530673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca{ 531673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct dump_ctx *ctx = (struct dump_ctx *) iter; 532673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 5339ccf91f9ef72f63871b0a8c6b43f7bd452d73b94José Fonseca TXT( "IMM[" ); 5349ccf91f9ef72f63871b0a8c6b43f7bd452d73b94José Fonseca SID( ctx->immno++ ); 5359ccf91f9ef72f63871b0a8c6b43f7bd452d73b94José Fonseca TXT( "] " ); 53685b5dac705fcf3fafb734696e1f863cfc21e2d6eBrian Paul ENM( imm->Immediate.DataType, tgsi_immediate_type_names ); 537f141399031981d6af19a32025ae7c1b947196480Michal Krol 5382b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin dump_imm_data(iter, imm->u, imm->Immediate.NrTokens - 1, 5392b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin imm->Immediate.DataType); 5402783f3bfabd6e316f7e221e950499c3631c041ceMichal Krol 5412783f3bfabd6e316f7e221e950499c3631c041ceMichal Krol EOL(); 542f141399031981d6af19a32025ae7c1b947196480Michal Krol 54383f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol return TRUE; 54483f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol} 54583f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol 546adaaa29218f1babad874f50681ca971fdd3b8a40Keith Whitwellvoid 547673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecatgsi_dump_immediate( 548673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca const struct tgsi_full_immediate *imm ) 549f141399031981d6af19a32025ae7c1b947196480Michal Krol{ 550673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct dump_ctx ctx; 551798f7a8596e3ff3f57a44812d7fd005f53f5557cWuZhen memset(&ctx, 0, sizeof(ctx)); 552673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 553a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr ctx.dump_printf = dump_ctx_printf; 554673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 555673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca iter_immediate( &ctx.iter, (struct tgsi_full_immediate *)imm ); 556673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca} 557673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 558673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecastatic boolean 559673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecaiter_instruction( 560673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct tgsi_iterate_context *iter, 561673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct tgsi_full_instruction *inst ) 562673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca{ 563673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct dump_ctx *ctx = (struct dump_ctx *) iter; 564673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca uint instno = ctx->instno++; 565848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell const struct tgsi_opcode_info *info = tgsi_get_opcode_info( inst->Instruction.Opcode ); 56682f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol uint i; 56782f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol boolean first_reg = TRUE; 568f141399031981d6af19a32025ae7c1b947196480Michal Krol 5695e1ef85dc430a4439cd60b66262eab9062dd5f4fJakob Bornecrantz INSTID( instno ); 5705e1ef85dc430a4439cd60b66262eab9062dd5f4fJakob Bornecrantz TXT( ": " ); 5712b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 572848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell ctx->indent -= info->pre_dedent; 573848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell for(i = 0; (int)i < ctx->indent; ++i) 574848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell TXT( " " ); 575848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell ctx->indent += info->post_indent; 5762b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 57714a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca if (inst->Instruction.Predicate) { 57814a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca CHR( '(' ); 57914a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca 58014a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca if (inst->Predicate.Negate) 58114a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca CHR( '!' ); 58214a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca 58314a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca TXT( "PRED[" ); 58414a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca SID( inst->Predicate.Index ); 58514a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca CHR( ']' ); 58614a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca 58714a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca if (inst->Predicate.SwizzleX != TGSI_SWIZZLE_X || 58814a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca inst->Predicate.SwizzleY != TGSI_SWIZZLE_Y || 58914a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca inst->Predicate.SwizzleZ != TGSI_SWIZZLE_Z || 59014a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca inst->Predicate.SwizzleW != TGSI_SWIZZLE_W) { 59114a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca CHR( '.' ); 59211dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( inst->Predicate.SwizzleX, tgsi_swizzle_names ); 59311dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( inst->Predicate.SwizzleY, tgsi_swizzle_names ); 59411dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( inst->Predicate.SwizzleZ, tgsi_swizzle_names ); 59511dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( inst->Predicate.SwizzleW, tgsi_swizzle_names ); 59614a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca } 59714a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca 59814a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca TXT( ") " ); 59914a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca } 60014a0328d4b21a2783a43932d2e4ed7ee75d79685José Fonseca 601848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell TXT( info->mnemonic ); 602f141399031981d6af19a32025ae7c1b947196480Michal Krol 603e1c4e8aaaafddd0e04cf2a16e28ef8f1e09d8b44Marek Olšák if (inst->Instruction.Saturate) { 604f141399031981d6af19a32025ae7c1b947196480Michal Krol TXT( "_SAT" ); 605f141399031981d6af19a32025ae7c1b947196480Michal Krol } 606f141399031981d6af19a32025ae7c1b947196480Michal Krol 60782f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol for (i = 0; i < inst->Instruction.NumDstRegs; i++) { 6087d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell const struct tgsi_full_dst_register *dst = &inst->Dst[i]; 609f141399031981d6af19a32025ae7c1b947196480Michal Krol 61082f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol if (!first_reg) 611f141399031981d6af19a32025ae7c1b947196480Michal Krol CHR( ',' ); 612f141399031981d6af19a32025ae7c1b947196480Michal Krol CHR( ' ' ); 613f141399031981d6af19a32025ae7c1b947196480Michal Krol 614101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin _dump_register_dst( ctx, dst ); 6155b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell _dump_writemask( ctx, dst->Register.WriteMask ); 616f141399031981d6af19a32025ae7c1b947196480Michal Krol 61786fe5f235b174e2aedd02bc14a94df818bc3ea74Michal Krol first_reg = FALSE; 618f141399031981d6af19a32025ae7c1b947196480Michal Krol } 619f141399031981d6af19a32025ae7c1b947196480Michal Krol 62082f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol for (i = 0; i < inst->Instruction.NumSrcRegs; i++) { 6217d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell const struct tgsi_full_src_register *src = &inst->Src[i]; 622f141399031981d6af19a32025ae7c1b947196480Michal Krol 62382f11f7e7c0bbe0452da65f08195c2a346f820e9Michal Krol if (!first_reg) 624f141399031981d6af19a32025ae7c1b947196480Michal Krol CHR( ',' ); 625f141399031981d6af19a32025ae7c1b947196480Michal Krol CHR( ' ' ); 626f141399031981d6af19a32025ae7c1b947196480Michal Krol 62791a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell if (src->Register.Negate) 628399190d13668ed457cf5d6bbbefe908a95bad289José Fonseca CHR( '-' ); 62991a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell if (src->Register.Absolute) 630f141399031981d6af19a32025ae7c1b947196480Michal Krol CHR( '|' ); 631f141399031981d6af19a32025ae7c1b947196480Michal Krol 632afd01366b098bf790658e069caddb7a930da827dZack Rusin _dump_register_src(ctx, src); 633f141399031981d6af19a32025ae7c1b947196480Michal Krol 63491a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell if (src->Register.SwizzleX != TGSI_SWIZZLE_X || 63591a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell src->Register.SwizzleY != TGSI_SWIZZLE_Y || 63691a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell src->Register.SwizzleZ != TGSI_SWIZZLE_Z || 63791a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell src->Register.SwizzleW != TGSI_SWIZZLE_W) { 638f141399031981d6af19a32025ae7c1b947196480Michal Krol CHR( '.' ); 63911dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( src->Register.SwizzleX, tgsi_swizzle_names ); 64011dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( src->Register.SwizzleY, tgsi_swizzle_names ); 64111dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( src->Register.SwizzleZ, tgsi_swizzle_names ); 64211dad217186a4c177cb41aa526531d6cd46ae5b0José Fonseca ENM( src->Register.SwizzleW, tgsi_swizzle_names ); 643f141399031981d6af19a32025ae7c1b947196480Michal Krol } 644f141399031981d6af19a32025ae7c1b947196480Michal Krol 64591a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell if (src->Register.Absolute) 646f141399031981d6af19a32025ae7c1b947196480Michal Krol CHR( '|' ); 647f141399031981d6af19a32025ae7c1b947196480Michal Krol 64886fe5f235b174e2aedd02bc14a94df818bc3ea74Michal Krol first_reg = FALSE; 649f141399031981d6af19a32025ae7c1b947196480Michal Krol } 650281dad225947b4f00bfc5e785d92d2a7c2f06afeMichal Krol 651ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell if (inst->Instruction.Texture) { 6523a9eb40ee16eedb6caff90a8c0c24b7d801063f3Roland Scheidegger if (!(inst->Instruction.Opcode >= TGSI_OPCODE_SAMPLE && 6533a9eb40ee16eedb6caff90a8c0c24b7d801063f3Roland Scheidegger inst->Instruction.Opcode <= TGSI_OPCODE_GATHER4)) { 6543a9eb40ee16eedb6caff90a8c0c24b7d801063f3Roland Scheidegger TXT( ", " ); 6553a9eb40ee16eedb6caff90a8c0c24b7d801063f3Roland Scheidegger ENM( inst->Texture.Texture, tgsi_texture_names ); 6563a9eb40ee16eedb6caff90a8c0c24b7d801063f3Roland Scheidegger } 6572083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie for (i = 0; i < inst->Texture.NumOffsets; i++) { 6582083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie TXT( ", " ); 65914541dacab218cbe82310d999d44130ebc3f6526Brian Paul TXT(tgsi_file_name(inst->TexOffsets[i].File)); 6602083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie CHR( '[' ); 6612083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie SID( inst->TexOffsets[i].Index ); 6622083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie CHR( ']' ); 6632083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie CHR( '.' ); 6642083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie ENM( inst->TexOffsets[i].SwizzleX, tgsi_swizzle_names); 6652083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie ENM( inst->TexOffsets[i].SwizzleY, tgsi_swizzle_names); 6662083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie ENM( inst->TexOffsets[i].SwizzleZ, tgsi_swizzle_names); 6672083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie } 66850b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkin } 66950b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkin 67050b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkin if (inst->Instruction.Memory) { 67150b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkin uint32_t qualifier = inst->Memory.Qualifier; 67250b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkin while (qualifier) { 67350b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkin int bit = ffs(qualifier) - 1; 67450b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkin qualifier &= ~(1U << bit); 67550b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkin TXT(", "); 67650b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkin ENM(bit, tgsi_memory_names); 67750b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkin } 6783243b6fc97dc73555f72ce8c01f643d707b26610Nicolai Hähnle if (inst->Memory.Texture) { 6793243b6fc97dc73555f72ce8c01f643d707b26610Nicolai Hähnle TXT( ", " ); 6803243b6fc97dc73555f72ce8c01f643d707b26610Nicolai Hähnle ENM( inst->Memory.Texture, tgsi_texture_names ); 6813243b6fc97dc73555f72ce8c01f643d707b26610Nicolai Hähnle } 6823243b6fc97dc73555f72ce8c01f643d707b26610Nicolai Hähnle if (inst->Memory.Format) { 6833243b6fc97dc73555f72ce8c01f643d707b26610Nicolai Hähnle TXT( ", " ); 6843243b6fc97dc73555f72ce8c01f643d707b26610Nicolai Hähnle TXT( util_format_name(inst->Memory.Format) ); 6853243b6fc97dc73555f72ce8c01f643d707b26610Nicolai Hähnle } 68636aa9cf781440ce685930586cbf53248cf9c0dc2Michal Krol } 68736aa9cf781440ce685930586cbf53248cf9c0dc2Michal Krol 68832d0dc50a07e88aef69754820a42b13054ccfa11Marc-André Lureau if (inst->Instruction.Label) { 68932d0dc50a07e88aef69754820a42b13054ccfa11Marc-André Lureau switch (inst->Instruction.Opcode) { 69032d0dc50a07e88aef69754820a42b13054ccfa11Marc-André Lureau case TGSI_OPCODE_IF: 69132d0dc50a07e88aef69754820a42b13054ccfa11Marc-André Lureau case TGSI_OPCODE_UIF: 69232d0dc50a07e88aef69754820a42b13054ccfa11Marc-André Lureau case TGSI_OPCODE_ELSE: 69332d0dc50a07e88aef69754820a42b13054ccfa11Marc-André Lureau case TGSI_OPCODE_BGNLOOP: 69432d0dc50a07e88aef69754820a42b13054ccfa11Marc-André Lureau case TGSI_OPCODE_ENDLOOP: 69532d0dc50a07e88aef69754820a42b13054ccfa11Marc-André Lureau case TGSI_OPCODE_CAL: 69632d0dc50a07e88aef69754820a42b13054ccfa11Marc-André Lureau case TGSI_OPCODE_BGNSUB: 69732d0dc50a07e88aef69754820a42b13054ccfa11Marc-André Lureau TXT( " :" ); 69832d0dc50a07e88aef69754820a42b13054ccfa11Marc-André Lureau UID( inst->Label.Label ); 69932d0dc50a07e88aef69754820a42b13054ccfa11Marc-André Lureau break; 70032d0dc50a07e88aef69754820a42b13054ccfa11Marc-André Lureau } 701281dad225947b4f00bfc5e785d92d2a7c2f06afeMichal Krol } 7022783f3bfabd6e316f7e221e950499c3631c041ceMichal Krol 70345cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul /* update indentation */ 70445cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul if (inst->Instruction.Opcode == TGSI_OPCODE_IF || 70550b3fc6204a28881f625605f988cb0866ae6a6a5José Fonseca inst->Instruction.Opcode == TGSI_OPCODE_UIF || 70645cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul inst->Instruction.Opcode == TGSI_OPCODE_ELSE || 70745cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul inst->Instruction.Opcode == TGSI_OPCODE_BGNLOOP) { 70845cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul ctx->indentation += indent_spaces; 70945cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul } 71045cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul 71176164bf7a20ef6dabc3204a766f604becfba9997José Fonseca EOL(); 712673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 713673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca return TRUE; 714f141399031981d6af19a32025ae7c1b947196480Michal Krol} 715f141399031981d6af19a32025ae7c1b947196480Michal Krol 716673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecavoid 717673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonsecatgsi_dump_instruction( 718673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca const struct tgsi_full_instruction *inst, 719673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca uint instno ) 72083f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol{ 721673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct dump_ctx ctx; 722798f7a8596e3ff3f57a44812d7fd005f53f5557cWuZhen memset(&ctx, 0, sizeof(ctx)); 72383f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol 724673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca ctx.instno = instno; 7259ccf91f9ef72f63871b0a8c6b43f7bd452d73b94José Fonseca ctx.immno = instno; 726848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell ctx.indent = 0; 727a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr ctx.dump_printf = dump_ctx_printf; 72845cd9d80dbc7298240b5dfaf929ecebeb5c6c6afBrian Paul ctx.indentation = 0; 7292023906667cf349284cd3d3921dc1dcbb7506014Brian Paul ctx.file = NULL; 730673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 731673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca iter_instruction( &ctx.iter, (struct tgsi_full_instruction *)inst ); 73283f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol} 73383f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol 73483f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krolstatic boolean 73583f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krolprolog( 736673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct tgsi_iterate_context *iter ) 73783f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol{ 738673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca struct dump_ctx *ctx = (struct dump_ctx *) iter; 73985b5dac705fcf3fafb734696e1f863cfc21e2d6eBrian Paul ENM( iter->processor.Processor, tgsi_processor_type_names ); 74076164bf7a20ef6dabc3204a766f604becfba9997José Fonseca EOL(); 74183f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol return TRUE; 74283f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol} 74383f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol 744e08eaa5b723a22301f117ac6120c3d9cd399855eNicolai Hähnlestatic void 745e08eaa5b723a22301f117ac6120c3d9cd399855eNicolai Hähnleinit_dump_ctx(struct dump_ctx *ctx, uint flags) 746e08eaa5b723a22301f117ac6120c3d9cd399855eNicolai Hähnle{ 747e08eaa5b723a22301f117ac6120c3d9cd399855eNicolai Hähnle memset(ctx, 0, sizeof(*ctx)); 748e08eaa5b723a22301f117ac6120c3d9cd399855eNicolai Hähnle 749e08eaa5b723a22301f117ac6120c3d9cd399855eNicolai Hähnle ctx->iter.prolog = prolog; 750e08eaa5b723a22301f117ac6120c3d9cd399855eNicolai Hähnle ctx->iter.iterate_instruction = iter_instruction; 751e08eaa5b723a22301f117ac6120c3d9cd399855eNicolai Hähnle ctx->iter.iterate_declaration = iter_declaration; 752e08eaa5b723a22301f117ac6120c3d9cd399855eNicolai Hähnle ctx->iter.iterate_immediate = iter_immediate; 753e08eaa5b723a22301f117ac6120c3d9cd399855eNicolai Hähnle ctx->iter.iterate_property = iter_property; 754e08eaa5b723a22301f117ac6120c3d9cd399855eNicolai Hähnle 755e08eaa5b723a22301f117ac6120c3d9cd399855eNicolai Hähnle if (flags & TGSI_DUMP_FLOAT_AS_HEX) 756e08eaa5b723a22301f117ac6120c3d9cd399855eNicolai Hähnle ctx->dump_float_as_hex = TRUE; 757e08eaa5b723a22301f117ac6120c3d9cd399855eNicolai Hähnle} 758e08eaa5b723a22301f117ac6120c3d9cd399855eNicolai Hähnle 7593c4f1ba5a2edefd69b2c47abaf534fb3af3f259dJosé Fonsecavoid 7608141b4cee514bb673e394f6fbe2cbe02e5b0faf2Marek Olšáktgsi_dump_to_file(const struct tgsi_token *tokens, uint flags, FILE *file) 761ffe58739da9eee2e99682747cc8f26e412c87430Michal Krol{ 76283f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol struct dump_ctx ctx; 763798f7a8596e3ff3f57a44812d7fd005f53f5557cWuZhen memset(&ctx, 0, sizeof(ctx)); 764ffe58739da9eee2e99682747cc8f26e412c87430Michal Krol 765e08eaa5b723a22301f117ac6120c3d9cd399855eNicolai Hähnle init_dump_ctx(&ctx, flags); 766ffe58739da9eee2e99682747cc8f26e412c87430Michal Krol 767a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr ctx.dump_printf = dump_ctx_printf; 7688141b4cee514bb673e394f6fbe2cbe02e5b0faf2Marek Olšák ctx.file = file; 769ffe58739da9eee2e99682747cc8f26e412c87430Michal Krol 77083f245bd242cd2c5f59f072095dcc47aa6153b21Michal Krol tgsi_iterate_shader( tokens, &ctx.iter ); 771ffe58739da9eee2e99682747cc8f26e412c87430Michal Krol} 772673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca 7738141b4cee514bb673e394f6fbe2cbe02e5b0faf2Marek Olšákvoid 7748141b4cee514bb673e394f6fbe2cbe02e5b0faf2Marek Olšáktgsi_dump(const struct tgsi_token *tokens, uint flags) 7758141b4cee514bb673e394f6fbe2cbe02e5b0faf2Marek Olšák{ 7768141b4cee514bb673e394f6fbe2cbe02e5b0faf2Marek Olšák tgsi_dump_to_file(tokens, flags, NULL); 7778141b4cee514bb673e394f6fbe2cbe02e5b0faf2Marek Olšák} 7788141b4cee514bb673e394f6fbe2cbe02e5b0faf2Marek Olšák 779b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonsecastruct str_dump_ctx 780b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca{ 781b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca struct dump_ctx base; 782b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca char *str; 783b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca char *ptr; 7843e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell int left; 785531f5d1270782927911c5c720201e86c6f40182dDave Airlie bool nospace; 786b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca}; 787b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca 788b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonsecastatic void 789b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonsecastr_dump_ctx_printf(struct dump_ctx *ctx, const char *format, ...) 790b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca{ 791b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca struct str_dump_ctx *sctx = (struct str_dump_ctx *)ctx; 792b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca 793318d305f6dd416295003d04b6c9092ae988f894aNicolai Hähnle if (!sctx->nospace) { 7943e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell int written; 795b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca va_list ap; 796b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca va_start(ap, format); 797b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca written = util_vsnprintf(sctx->ptr, sctx->left, format, ap); 798b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca va_end(ap); 7993e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell 8003e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell /* Some complicated logic needed to handle the return value of 8013e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell * vsnprintf: 8023e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell */ 8033e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell if (written > 0) { 804318d305f6dd416295003d04b6c9092ae988f894aNicolai Hähnle if (written >= sctx->left) { 805318d305f6dd416295003d04b6c9092ae988f894aNicolai Hähnle sctx->nospace = true; 806318d305f6dd416295003d04b6c9092ae988f894aNicolai Hähnle written = sctx->left; 807318d305f6dd416295003d04b6c9092ae988f894aNicolai Hähnle } 8083e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell sctx->ptr += written; 8093e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell sctx->left -= written; 8103e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell } 811318d305f6dd416295003d04b6c9092ae988f894aNicolai Hähnle } 812b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca} 813b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca 814531f5d1270782927911c5c720201e86c6f40182dDave Airliebool 815b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonsecatgsi_dump_str( 816673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca const struct tgsi_token *tokens, 817b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca uint flags, 818b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca char *str, 819b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca size_t size) 820673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca{ 821b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca struct str_dump_ctx ctx; 822798f7a8596e3ff3f57a44812d7fd005f53f5557cWuZhen memset(&ctx, 0, sizeof(ctx)); 823b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca 824e08eaa5b723a22301f117ac6120c3d9cd399855eNicolai Hähnle init_dump_ctx(&ctx.base, flags); 825b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca 826a50d695ac20d894278b8e4bc1e0e8a159cd08a1dJohannes Obermayr ctx.base.dump_printf = &str_dump_ctx_printf; 827b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca 828b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca ctx.str = str; 829b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca ctx.str[0] = 0; 830b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca ctx.ptr = str; 8313e94521912ca75bb14093053bf1cd1001e79cd1bKeith Whitwell ctx.left = (int)size; 832531f5d1270782927911c5c720201e86c6f40182dDave Airlie ctx.nospace = false; 833b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca 834b8a7eef242f6bb97d90f6e0303d270b2cbc58421José Fonseca tgsi_iterate_shader( tokens, &ctx.base.iter ); 835531f5d1270782927911c5c720201e86c6f40182dDave Airlie 836531f5d1270782927911c5c720201e86c6f40182dDave Airlie return !ctx.nospace; 837673489fa5cde4ce8d49918f20f007201a17bc45eJosé Fonseca} 838a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca 839a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonsecavoid 840a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonsecatgsi_dump_instruction_str( 841a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca const struct tgsi_full_instruction *inst, 842a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca uint instno, 843a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca char *str, 844a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca size_t size) 845a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca{ 846a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca struct str_dump_ctx ctx; 847798f7a8596e3ff3f57a44812d7fd005f53f5557cWuZhen memset(&ctx, 0, sizeof(ctx)); 848a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca 849a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca ctx.base.instno = instno; 850a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca ctx.base.immno = instno; 851a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca ctx.base.indent = 0; 852a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca ctx.base.dump_printf = &str_dump_ctx_printf; 853a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca ctx.base.indentation = 0; 8548141b4cee514bb673e394f6fbe2cbe02e5b0faf2Marek Olšák ctx.base.file = NULL; 855a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca 856a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca ctx.str = str; 857a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca ctx.str[0] = 0; 858a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca ctx.ptr = str; 859a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca ctx.left = (int)size; 860531f5d1270782927911c5c720201e86c6f40182dDave Airlie ctx.nospace = false; 861a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca 862a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca iter_instruction( &ctx.base.iter, (struct tgsi_full_instruction *)inst ); 863a29e40a42382630c2d9d95d3a1e03a7b3db87addJosé Fonseca} 864