1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/************************************************************************** 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2007-2008 Tungsten Graphics, Inc., Cedar Park, Texas. 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All Rights Reserved. 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Software"), to deal in the Software without restriction, including 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following conditions: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next paragraph) shall be included in all copies or substantial portions 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of the Software. 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **************************************************************************/ 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_debug.h" 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_string.h" 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_math.h" 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_memory.h" 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "tgsi_dump.h" 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "tgsi_info.h" 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "tgsi_iterate.h" 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "tgsi_strings.h" 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Number of spaces to indent for IF/LOOP/etc */ 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const int indent_spaces = 3; 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct dump_ctx 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_iterate_context iter; 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint instno; 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int indent; 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint indentation; 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*dump_printf)(struct dump_ctx *ctx, const char *format, ...); 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdump_ctx_printf(struct dump_ctx *ctx, const char *format, ...) 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org va_list ap; 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void)ctx; 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org va_start(ap, format); 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _debug_vprintf(format, ap); 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org va_end(ap); 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdump_enum( 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dump_ctx *ctx, 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint e, 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char **enums, 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint enum_count ) 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (e >= enum_count) 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->dump_printf( ctx, "%u", e ); 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->dump_printf( ctx, "%s", enums[e] ); 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define EOL() ctx->dump_printf( ctx, "\n" ) 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TXT(S) ctx->dump_printf( ctx, "%s", S ) 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CHR(C) ctx->dump_printf( ctx, "%c", C ) 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define UIX(I) ctx->dump_printf( ctx, "0x%x", I ) 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define UID(I) ctx->dump_printf( ctx, "%u", I ) 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INSTID(I) ctx->dump_printf( ctx, "% 3u", I ) 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SID(I) ctx->dump_printf( ctx, "%d", I ) 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FLT(F) ctx->dump_printf( ctx, "%10.4f", F ) 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ENM(E,ENUMS) dump_enum( ctx, E, ENUMS, sizeof( ENUMS ) / sizeof( *ENUMS ) ) 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst char * 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_swizzle_names[4] = 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "x", 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "y", 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "z", 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "w" 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_dump_register_src( 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dump_ctx *ctx, 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_full_src_register *src ) 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM(src->Register.File, tgsi_file_names); 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (src->Register.Dimension) { 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (src->Dimension.Indirect) { 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '[' ); 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( src->DimIndirect.File, tgsi_file_names ); 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '[' ); 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID( src->DimIndirect.Index ); 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( "]." ); 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( src->DimIndirect.SwizzleX, tgsi_swizzle_names ); 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (src->Dimension.Index != 0) { 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (src->Dimension.Index > 0) 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '+' ); 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID( src->Dimension.Index ); 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( ']' ); 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR('['); 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID(src->Dimension.Index); 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR(']'); 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (src->Register.Indirect) { 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '[' ); 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( src->Indirect.File, tgsi_file_names ); 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '[' ); 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID( src->Indirect.Index ); 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( "]." ); 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( src->Indirect.SwizzleX, tgsi_swizzle_names ); 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (src->Register.Index != 0) { 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (src->Register.Index > 0) 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '+' ); 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID( src->Register.Index ); 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( ']' ); 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '[' ); 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID( src->Register.Index ); 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( ']' ); 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_dump_register_dst( 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dump_ctx *ctx, 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_full_dst_register *dst ) 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM(dst->Register.File, tgsi_file_names); 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (dst->Register.Dimension) { 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (dst->Dimension.Indirect) { 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '[' ); 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( dst->DimIndirect.File, tgsi_file_names ); 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '[' ); 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID( dst->DimIndirect.Index ); 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( "]." ); 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( dst->DimIndirect.SwizzleX, tgsi_swizzle_names ); 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (dst->Dimension.Index != 0) { 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (dst->Dimension.Index > 0) 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '+' ); 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID( dst->Dimension.Index ); 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( ']' ); 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR('['); 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID(dst->Dimension.Index); 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR(']'); 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (dst->Register.Indirect) { 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '[' ); 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( dst->Indirect.File, tgsi_file_names ); 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '[' ); 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID( dst->Indirect.Index ); 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( "]." ); 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( dst->Indirect.SwizzleX, tgsi_swizzle_names ); 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (dst->Register.Index != 0) { 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (dst->Register.Index > 0) 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '+' ); 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID( dst->Register.Index ); 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( ']' ); 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '[' ); 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID( dst->Register.Index ); 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( ']' ); 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_dump_writemask( 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dump_ctx *ctx, 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint writemask ) 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (writemask != TGSI_WRITEMASK_XYZW) { 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '.' ); 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (writemask & TGSI_WRITEMASK_X) 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( 'x' ); 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (writemask & TGSI_WRITEMASK_Y) 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( 'y' ); 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (writemask & TGSI_WRITEMASK_Z) 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( 'z' ); 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (writemask & TGSI_WRITEMASK_W) 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( 'w' ); 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdump_imm_data(struct tgsi_iterate_context *iter, 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union tgsi_immediate_data *data, 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_tokens, 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned data_type) 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dump_ctx *ctx = (struct dump_ctx *)iter; 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i ; 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( " {" ); 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( num_tokens <= 4 ); 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < num_tokens; i++) { 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (data_type) { 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TGSI_IMM_FLOAT32: 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLT( data[i].Float ); 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TGSI_IMM_UINT32: 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org UID(data[i].Uint); 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TGSI_IMM_INT32: 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID(data[i].Int); 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( 0 ); 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (i < num_tokens - 1) 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( ", " ); 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( "}" ); 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgiter_declaration( 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_iterate_context *iter, 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_full_declaration *decl ) 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dump_ctx *ctx = (struct dump_ctx *)iter; 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( "DCL " ); 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM(decl->Declaration.File, tgsi_file_names); 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* all geometry shader inputs are two dimensional */ 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Declaration.File == TGSI_FILE_INPUT && 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org iter->processor.Processor == TGSI_PROCESSOR_GEOMETRY) { 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT("[]"); 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Declaration.Dimension) { 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR('['); 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID(decl->Dim.Index2D); 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR(']'); 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR('['); 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID(decl->Range.First); 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Range.First != decl->Range.Last) { 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT(".."); 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID(decl->Range.Last); 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR(']'); 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _dump_writemask( 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx, 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org decl->Declaration.UsageMask ); 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Declaration.Local) 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( ", LOCAL" ); 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Declaration.Semantic) { 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( ", " ); 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( decl->Semantic.Name, tgsi_semantic_names ); 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Semantic.Index != 0 || 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org decl->Semantic.Name == TGSI_SEMANTIC_GENERIC) { 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '[' ); 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org UID( decl->Semantic.Index ); 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( ']' ); 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Declaration.File == TGSI_FILE_RESOURCE) { 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT(", "); 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM(decl->Resource.Resource, tgsi_texture_names); 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Resource.Writable) 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT(", WR"); 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Resource.Raw) 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT(", RAW"); 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Declaration.File == TGSI_FILE_SAMPLER_VIEW) { 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT(", "); 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM(decl->SamplerView.Resource, tgsi_texture_names); 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT(", "); 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ((decl->SamplerView.ReturnTypeX == decl->SamplerView.ReturnTypeY) && 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (decl->SamplerView.ReturnTypeX == decl->SamplerView.ReturnTypeZ) && 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (decl->SamplerView.ReturnTypeX == decl->SamplerView.ReturnTypeW)) { 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM(decl->SamplerView.ReturnTypeX, tgsi_type_names); 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM(decl->SamplerView.ReturnTypeX, tgsi_type_names); 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT(", "); 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM(decl->SamplerView.ReturnTypeY, tgsi_type_names); 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT(", "); 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM(decl->SamplerView.ReturnTypeZ, tgsi_type_names); 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT(", "); 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM(decl->SamplerView.ReturnTypeW, tgsi_type_names); 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Declaration.Interpolate) { 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (iter->processor.Processor == TGSI_PROCESSOR_FRAGMENT && 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org decl->Declaration.File == TGSI_FILE_INPUT) 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( ", " ); 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( decl->Interp.Interpolate, tgsi_interpolate_names ); 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Interp.Centroid) { 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( ", CENTROID" ); 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Interp.CylindricalWrap) { 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT(", CYLWRAP_"); 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_X) { 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR('X'); 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_Y) { 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR('Y'); 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_Z) { 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR('Z'); 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_W) { 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR('W'); 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Declaration.Invariant) { 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( ", INVARIANT" ); 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Declaration.File == TGSI_FILE_IMMEDIATE_ARRAY) { 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i; 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char range_indent[4]; 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT(" {"); 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (decl->Range.Last < 10) 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org range_indent[0] = '\0'; 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (decl->Range.Last < 100) { 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org range_indent[0] = ' '; 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org range_indent[1] = '\0'; 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else if (decl->Range.Last < 1000) { 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org range_indent[0] = ' '; 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org range_indent[1] = ' '; 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org range_indent[2] = '\0'; 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org range_indent[0] = ' '; 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org range_indent[1] = ' '; 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org range_indent[2] = ' '; 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org range_indent[3] = '\0'; 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dump_imm_data(iter, decl->ImmediateData.u, 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 4, TGSI_IMM_FLOAT32); 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for(i = 1; i <= decl->Range.Last; ++i) { 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* indent by strlen of: 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "DCL IMMX[0..1] {" */ 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR('\n'); 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( " " ); 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( range_indent ); 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dump_imm_data(iter, decl->ImmediateData.u + i, 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 4, TGSI_IMM_FLOAT32); 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT(" }"); 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EOL(); 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_dump_declaration( 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_full_declaration *decl ) 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dump_ctx ctx; 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.dump_printf = dump_ctx_printf; 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org iter_declaration( &ctx.iter, (struct tgsi_full_declaration *)decl ); 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgiter_property( 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_iterate_context *iter, 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_full_property *prop ) 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i; 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dump_ctx *ctx = (struct dump_ctx *)iter; 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( "PROPERTY " ); 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM(prop->Property.PropertyName, tgsi_property_names); 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (prop->Property.NrTokens > 1) 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT(" "); 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < prop->Property.NrTokens - 1; ++i) { 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (prop->Property.PropertyName) { 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TGSI_PROPERTY_GS_INPUT_PRIM: 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TGSI_PROPERTY_GS_OUTPUT_PRIM: 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM(prop->u[i].Data, tgsi_primitive_names); 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TGSI_PROPERTY_FS_COORD_ORIGIN: 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM(prop->u[i].Data, tgsi_fs_coord_origin_names); 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TGSI_PROPERTY_FS_COORD_PIXEL_CENTER: 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM(prop->u[i].Data, tgsi_fs_coord_pixel_center_names); 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID( prop->u[i].Data ); 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (i < prop->Property.NrTokens - 2) 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( ", " ); 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EOL(); 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid tgsi_dump_property( 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_full_property *prop ) 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dump_ctx ctx; 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.dump_printf = dump_ctx_printf; 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org iter_property( &ctx.iter, (struct tgsi_full_property *)prop ); 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgiter_immediate( 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_iterate_context *iter, 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_full_immediate *imm ) 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dump_ctx *ctx = (struct dump_ctx *) iter; 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( "IMM " ); 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( imm->Immediate.DataType, tgsi_immediate_type_names ); 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dump_imm_data(iter, imm->u, imm->Immediate.NrTokens - 1, 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org imm->Immediate.DataType); 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EOL(); 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_dump_immediate( 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_full_immediate *imm ) 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dump_ctx ctx; 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.dump_printf = dump_ctx_printf; 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org iter_immediate( &ctx.iter, (struct tgsi_full_immediate *)imm ); 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgiter_instruction( 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_iterate_context *iter, 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_full_instruction *inst ) 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dump_ctx *ctx = (struct dump_ctx *) iter; 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint instno = ctx->instno++; 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_opcode_info *info = tgsi_get_opcode_info( inst->Instruction.Opcode ); 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint i; 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean first_reg = TRUE; 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INSTID( instno ); 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( ": " ); 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->indent -= info->pre_dedent; 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for(i = 0; (int)i < ctx->indent; ++i) 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( " " ); 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->indent += info->post_indent; 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (inst->Instruction.Predicate) { 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '(' ); 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (inst->Predicate.Negate) 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '!' ); 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( "PRED[" ); 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID( inst->Predicate.Index ); 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( ']' ); 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (inst->Predicate.SwizzleX != TGSI_SWIZZLE_X || 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org inst->Predicate.SwizzleY != TGSI_SWIZZLE_Y || 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org inst->Predicate.SwizzleZ != TGSI_SWIZZLE_Z || 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org inst->Predicate.SwizzleW != TGSI_SWIZZLE_W) { 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '.' ); 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( inst->Predicate.SwizzleX, tgsi_swizzle_names ); 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( inst->Predicate.SwizzleY, tgsi_swizzle_names ); 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( inst->Predicate.SwizzleZ, tgsi_swizzle_names ); 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( inst->Predicate.SwizzleW, tgsi_swizzle_names ); 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( ") " ); 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( info->mnemonic ); 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (inst->Instruction.Saturate) { 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TGSI_SAT_NONE: 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TGSI_SAT_ZERO_ONE: 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( "_SAT" ); 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TGSI_SAT_MINUS_PLUS_ONE: 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( "_SATNV" ); 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( 0 ); 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < inst->Instruction.NumDstRegs; i++) { 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_full_dst_register *dst = &inst->Dst[i]; 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!first_reg) 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( ',' ); 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( ' ' ); 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _dump_register_dst( ctx, dst ); 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _dump_writemask( ctx, dst->Register.WriteMask ); 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org first_reg = FALSE; 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < inst->Instruction.NumSrcRegs; i++) { 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_full_src_register *src = &inst->Src[i]; 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!first_reg) 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( ',' ); 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( ' ' ); 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (src->Register.Negate) 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '-' ); 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (src->Register.Absolute) 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '|' ); 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _dump_register_src(ctx, src); 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (src->Register.SwizzleX != TGSI_SWIZZLE_X || 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src->Register.SwizzleY != TGSI_SWIZZLE_Y || 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src->Register.SwizzleZ != TGSI_SWIZZLE_Z || 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src->Register.SwizzleW != TGSI_SWIZZLE_W) { 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '.' ); 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( src->Register.SwizzleX, tgsi_swizzle_names ); 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( src->Register.SwizzleY, tgsi_swizzle_names ); 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( src->Register.SwizzleZ, tgsi_swizzle_names ); 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( src->Register.SwizzleW, tgsi_swizzle_names ); 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (src->Register.Absolute) 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '|' ); 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org first_reg = FALSE; 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (inst->Instruction.Texture) { 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( ", " ); 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( inst->Texture.Texture, tgsi_texture_names ); 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < inst->Texture.NumOffsets; i++) { 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( ", " ); 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( inst->TexOffsets[i].File, tgsi_file_names); 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '[' ); 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SID( inst->TexOffsets[i].Index ); 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( ']' ); 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHR( '.' ); 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( inst->TexOffsets[i].SwizzleX, tgsi_swizzle_names); 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( inst->TexOffsets[i].SwizzleY, tgsi_swizzle_names); 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( inst->TexOffsets[i].SwizzleZ, tgsi_swizzle_names); 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (inst->Instruction.Opcode) { 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TGSI_OPCODE_IF: 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TGSI_OPCODE_ELSE: 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TGSI_OPCODE_BGNLOOP: 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TGSI_OPCODE_ENDLOOP: 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TGSI_OPCODE_CAL: 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TXT( " :" ); 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org UID( inst->Label.Label ); 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* update indentation */ 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (inst->Instruction.Opcode == TGSI_OPCODE_IF || 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org inst->Instruction.Opcode == TGSI_OPCODE_ELSE || 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org inst->Instruction.Opcode == TGSI_OPCODE_BGNLOOP) { 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->indentation += indent_spaces; 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EOL(); 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_dump_instruction( 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_full_instruction *inst, 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint instno ) 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dump_ctx ctx; 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.instno = instno; 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.indent = 0; 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.dump_printf = dump_ctx_printf; 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.indentation = 0; 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org iter_instruction( &ctx.iter, (struct tgsi_full_instruction *)inst ); 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgprolog( 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_iterate_context *iter ) 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dump_ctx *ctx = (struct dump_ctx *) iter; 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENM( iter->processor.Processor, tgsi_processor_type_names ); 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EOL(); 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_dump( 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_token *tokens, 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint flags ) 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dump_ctx ctx; 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.iter.prolog = prolog; 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.iter.iterate_instruction = iter_instruction; 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.iter.iterate_declaration = iter_declaration; 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.iter.iterate_immediate = iter_immediate; 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.iter.iterate_property = iter_property; 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.iter.epilog = NULL; 659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.instno = 0; 661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.indent = 0; 662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.dump_printf = dump_ctx_printf; 663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.indentation = 0; 664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org tgsi_iterate_shader( tokens, &ctx.iter ); 666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct str_dump_ctx 669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dump_ctx base; 671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *str; 672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *ptr; 673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int left; 674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstr_dump_ctx_printf(struct dump_ctx *ctx, const char *format, ...) 678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct str_dump_ctx *sctx = (struct str_dump_ctx *)ctx; 680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if(sctx->left > 1) { 682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int written; 683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org va_list ap; 684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org va_start(ap, format); 685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org written = util_vsnprintf(sctx->ptr, sctx->left, format, ap); 686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org va_end(ap); 687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Some complicated logic needed to handle the return value of 689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * vsnprintf: 690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (written > 0) { 692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org written = MIN2(sctx->left, written); 693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sctx->ptr += written; 694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sctx->left -= written; 695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_dump_str( 701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_token *tokens, 702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint flags, 703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *str, 704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size_t size) 705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct str_dump_ctx ctx; 707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.base.iter.prolog = prolog; 709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.base.iter.iterate_instruction = iter_instruction; 710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.base.iter.iterate_declaration = iter_declaration; 711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.base.iter.iterate_immediate = iter_immediate; 712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.base.iter.iterate_property = iter_property; 713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.base.iter.epilog = NULL; 714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.base.instno = 0; 716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.base.indent = 0; 717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.base.dump_printf = &str_dump_ctx_printf; 718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.base.indentation = 0; 719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.str = str; 721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.str[0] = 0; 722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.ptr = str; 723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx.left = (int)size; 724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org tgsi_iterate_shader( tokens, &ctx.base.iter ); 726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 727