1 /**************************************************************************
3 * Copyright 2007-2008 Tungsten Graphics, Inc., Cedar Park, Texas.
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the
8 * "Software"), to deal in the Software without restriction, including
9 * without limitation the rights to use, copy, modify, merge, publish,
10 * distribute, sub license, and/or sell copies of the Software, and to
11 * permit persons to whom the Software is furnished to do so, subject to
12 * the following conditions:
14 * The above copyright notice and this permission notice (including the
15 * next paragraph) shall be included in all copies or substantial portions
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 **************************************************************************/
28 #include "pipe/p_debug.h"
29 #include "pipe/p_util.h"
30 #include "util/u_string.h"
31 #include "tgsi_dump_c.h"
32 #include "tgsi_parse.h"
33 #include "tgsi_build.h"
39 const unsigned enums_count
)
41 if (e
>= enums_count
) {
42 debug_printf( "%u", e
);
45 debug_printf( "%s", enums
[e
] );
49 #define EOL() debug_printf( "\n" )
50 #define TXT(S) debug_printf( "%s", S )
51 #define CHR(C) debug_printf( "%c", C )
52 #define UIX(I) debug_printf( "0x%x", I )
53 #define UID(I) debug_printf( "%u", I )
54 #define SID(I) debug_printf( "%d", I )
55 #define FLT(F) debug_printf( "%10.4f", F )
56 #define ENM(E,ENUMS) dump_enum( E, ENUMS, sizeof( ENUMS ) / sizeof( *ENUMS ) )
58 static const char *TGSI_PROCESSOR_TYPES
[] =
65 static const char *TGSI_TOKEN_TYPES
[] =
67 "TOKEN_TYPE_DECLARATION",
68 "TOKEN_TYPE_IMMEDIATE",
69 "TOKEN_TYPE_INSTRUCTION"
72 static const char *TGSI_FILES
[] =
84 static const char *TGSI_INTERPOLATES
[] =
86 "INTERPOLATE_CONSTANT",
88 "INTERPOLATE_PERSPECTIVE"
91 static const char *TGSI_SEMANTICS
[] =
102 static const char *TGSI_IMMS
[] =
107 static const char *TGSI_OPCODES
[TGSI_OPCODE_LAST
] =
140 "OPCODE_CROSSPRODUCT",
141 "OPCODE_MULTIPLYMATRIX",
229 static const char *TGSI_SATS
[] =
236 static const char *TGSI_INSTRUCTION_EXTS
[] =
238 "INSTRUCTION_EXT_TYPE_NV",
239 "INSTRUCTION_EXT_TYPE_LABEL",
240 "INSTRUCTION_EXT_TYPE_TEXTURE"
243 static const char *TGSI_PRECISIONS
[] =
251 static const char *TGSI_CCS
[] =
264 static const char *TGSI_SWIZZLES
[] =
272 static const char *TGSI_TEXTURES
[] =
285 static const char *TGSI_SRC_REGISTER_EXTS
[] =
287 "SRC_REGISTER_EXT_TYPE_SWZ",
288 "SRC_REGISTER_EXT_TYPE_MOD"
291 static const char *TGSI_EXTSWIZZLES
[] =
301 static const char *TGSI_WRITEMASKS
[] =
321 static const char *TGSI_DST_REGISTER_EXTS
[] =
323 "DST_REGISTER_EXT_TYPE_CONDCODE",
324 "DST_REGISTER_EXT_TYPE_MODULATE"
327 static const char *TGSI_MODULATES
[] =
339 dump_declaration_verbose(
340 struct tgsi_full_declaration
*decl
,
343 struct tgsi_full_declaration
*fd
)
346 ENM( decl
->Declaration
.File
, TGSI_FILES
);
347 if( deflt
|| fd
->Declaration
.UsageMask
!= decl
->Declaration
.UsageMask
) {
348 TXT( "\nUsageMask : " );
349 if( decl
->Declaration
.UsageMask
& TGSI_WRITEMASK_X
) {
352 if( decl
->Declaration
.UsageMask
& TGSI_WRITEMASK_Y
) {
355 if( decl
->Declaration
.UsageMask
& TGSI_WRITEMASK_Z
) {
358 if( decl
->Declaration
.UsageMask
& TGSI_WRITEMASK_W
) {
362 if( deflt
|| fd
->Declaration
.Interpolate
!= decl
->Declaration
.Interpolate
) {
363 TXT( "\nInterpolate: " );
364 ENM( decl
->Declaration
.Interpolate
, TGSI_INTERPOLATES
);
366 if( deflt
|| fd
->Declaration
.Semantic
!= decl
->Declaration
.Semantic
) {
367 TXT( "\nSemantic : " );
368 UID( decl
->Declaration
.Semantic
);
371 TXT( "\nPadding : " );
372 UIX( decl
->Declaration
.Padding
);
377 UID( decl
->DeclarationRange
.First
);
379 UID( decl
->DeclarationRange
.Last
);
381 if( decl
->Declaration
.Semantic
) {
383 TXT( "\nSemanticName : " );
384 ENM( decl
->Semantic
.SemanticName
, TGSI_SEMANTICS
);
385 TXT( "\nSemanticIndex: " );
386 UID( decl
->Semantic
.SemanticIndex
);
388 TXT( "\nPadding : " );
389 UIX( decl
->Semantic
.Padding
);
395 dump_immediate_verbose(
396 struct tgsi_full_immediate
*imm
,
401 TXT( "\nDataType : " );
402 ENM( imm
->Immediate
.DataType
, TGSI_IMMS
);
404 TXT( "\nPadding : " );
405 UIX( imm
->Immediate
.Padding
);
408 for( i
= 0; i
< imm
->Immediate
.Size
- 1; i
++ ) {
410 switch( imm
->Immediate
.DataType
) {
411 case TGSI_IMM_FLOAT32
:
413 FLT( imm
->u
.ImmediateFloat32
[i
].Float
);
423 dump_instruction_verbose(
424 struct tgsi_full_instruction
*inst
,
427 struct tgsi_full_instruction
*fi
)
431 TXT( "\nOpcode : " );
432 ENM( inst
->Instruction
.Opcode
, TGSI_OPCODES
);
433 if( deflt
|| fi
->Instruction
.Saturate
!= inst
->Instruction
.Saturate
) {
434 TXT( "\nSaturate : " );
435 ENM( inst
->Instruction
.Saturate
, TGSI_SATS
);
437 if( deflt
|| fi
->Instruction
.NumDstRegs
!= inst
->Instruction
.NumDstRegs
) {
438 TXT( "\nNumDstRegs : " );
439 UID( inst
->Instruction
.NumDstRegs
);
441 if( deflt
|| fi
->Instruction
.NumSrcRegs
!= inst
->Instruction
.NumSrcRegs
) {
442 TXT( "\nNumSrcRegs : " );
443 UID( inst
->Instruction
.NumSrcRegs
);
446 TXT( "\nPadding : " );
447 UIX( inst
->Instruction
.Padding
);
450 if( deflt
|| tgsi_compare_instruction_ext_nv( inst
->InstructionExtNv
, fi
->InstructionExtNv
) ) {
453 ENM( inst
->InstructionExtNv
.Type
, TGSI_INSTRUCTION_EXTS
);
454 if( deflt
|| fi
->InstructionExtNv
.Precision
!= inst
->InstructionExtNv
.Precision
) {
455 TXT( "\nPrecision : " );
456 ENM( inst
->InstructionExtNv
.Precision
, TGSI_PRECISIONS
);
458 if( deflt
|| fi
->InstructionExtNv
.CondDstIndex
!= inst
->InstructionExtNv
.CondDstIndex
) {
459 TXT( "\nCondDstIndex : " );
460 UID( inst
->InstructionExtNv
.CondDstIndex
);
462 if( deflt
|| fi
->InstructionExtNv
.CondFlowIndex
!= inst
->InstructionExtNv
.CondFlowIndex
) {
463 TXT( "\nCondFlowIndex : " );
464 UID( inst
->InstructionExtNv
.CondFlowIndex
);
466 if( deflt
|| fi
->InstructionExtNv
.CondMask
!= inst
->InstructionExtNv
.CondMask
) {
467 TXT( "\nCondMask : " );
468 ENM( inst
->InstructionExtNv
.CondMask
, TGSI_CCS
);
470 if( deflt
|| fi
->InstructionExtNv
.CondSwizzleX
!= inst
->InstructionExtNv
.CondSwizzleX
) {
471 TXT( "\nCondSwizzleX : " );
472 ENM( inst
->InstructionExtNv
.CondSwizzleX
, TGSI_SWIZZLES
);
474 if( deflt
|| fi
->InstructionExtNv
.CondSwizzleY
!= inst
->InstructionExtNv
.CondSwizzleY
) {
475 TXT( "\nCondSwizzleY : " );
476 ENM( inst
->InstructionExtNv
.CondSwizzleY
, TGSI_SWIZZLES
);
478 if( deflt
|| fi
->InstructionExtNv
.CondSwizzleZ
!= inst
->InstructionExtNv
.CondSwizzleZ
) {
479 TXT( "\nCondSwizzleZ : " );
480 ENM( inst
->InstructionExtNv
.CondSwizzleZ
, TGSI_SWIZZLES
);
482 if( deflt
|| fi
->InstructionExtNv
.CondSwizzleW
!= inst
->InstructionExtNv
.CondSwizzleW
) {
483 TXT( "\nCondSwizzleW : " );
484 ENM( inst
->InstructionExtNv
.CondSwizzleW
, TGSI_SWIZZLES
);
486 if( deflt
|| fi
->InstructionExtNv
.CondDstUpdate
!= inst
->InstructionExtNv
.CondDstUpdate
) {
487 TXT( "\nCondDstUpdate : " );
488 UID( inst
->InstructionExtNv
.CondDstUpdate
);
490 if( deflt
|| fi
->InstructionExtNv
.CondFlowEnable
!= inst
->InstructionExtNv
.CondFlowEnable
) {
491 TXT( "\nCondFlowEnable: " );
492 UID( inst
->InstructionExtNv
.CondFlowEnable
);
495 TXT( "\nPadding : " );
496 UIX( inst
->InstructionExtNv
.Padding
);
497 if( deflt
|| fi
->InstructionExtNv
.Extended
!= inst
->InstructionExtNv
.Extended
) {
498 TXT( "\nExtended : " );
499 UID( inst
->InstructionExtNv
.Extended
);
504 if( deflt
|| tgsi_compare_instruction_ext_label( inst
->InstructionExtLabel
, fi
->InstructionExtLabel
) ) {
507 ENM( inst
->InstructionExtLabel
.Type
, TGSI_INSTRUCTION_EXTS
);
508 if( deflt
|| fi
->InstructionExtLabel
.Label
!= inst
->InstructionExtLabel
.Label
) {
510 UID( inst
->InstructionExtLabel
.Label
);
513 TXT( "\nPadding : " );
514 UIX( inst
->InstructionExtLabel
.Padding
);
515 if( deflt
|| fi
->InstructionExtLabel
.Extended
!= inst
->InstructionExtLabel
.Extended
) {
516 TXT( "\nExtended: " );
517 UID( inst
->InstructionExtLabel
.Extended
);
522 if( deflt
|| tgsi_compare_instruction_ext_texture( inst
->InstructionExtTexture
, fi
->InstructionExtTexture
) ) {
525 ENM( inst
->InstructionExtTexture
.Type
, TGSI_INSTRUCTION_EXTS
);
526 if( deflt
|| fi
->InstructionExtTexture
.Texture
!= inst
->InstructionExtTexture
.Texture
) {
527 TXT( "\nTexture : " );
528 ENM( inst
->InstructionExtTexture
.Texture
, TGSI_TEXTURES
);
531 TXT( "\nPadding : " );
532 UIX( inst
->InstructionExtTexture
.Padding
);
533 if( deflt
|| fi
->InstructionExtTexture
.Extended
!= inst
->InstructionExtTexture
.Extended
) {
534 TXT( "\nExtended: " );
535 UID( inst
->InstructionExtTexture
.Extended
);
540 for( i
= 0; i
< inst
->Instruction
.NumDstRegs
; i
++ ) {
541 struct tgsi_full_dst_register
*dst
= &inst
->FullDstRegisters
[i
];
542 struct tgsi_full_dst_register
*fd
= &fi
->FullDstRegisters
[i
];
546 ENM( dst
->DstRegister
.File
, TGSI_FILES
);
547 if( deflt
|| fd
->DstRegister
.WriteMask
!= dst
->DstRegister
.WriteMask
) {
548 TXT( "\nWriteMask: " );
549 ENM( dst
->DstRegister
.WriteMask
, TGSI_WRITEMASKS
);
552 if( deflt
|| fd
->DstRegister
.Indirect
!= dst
->DstRegister
.Indirect
) {
553 TXT( "\nIndirect : " );
554 UID( dst
->DstRegister
.Indirect
);
556 if( deflt
|| fd
->DstRegister
.Dimension
!= dst
->DstRegister
.Dimension
) {
557 TXT( "\nDimension: " );
558 UID( dst
->DstRegister
.Dimension
);
561 if( deflt
|| fd
->DstRegister
.Index
!= dst
->DstRegister
.Index
) {
563 SID( dst
->DstRegister
.Index
);
566 TXT( "\nPadding : " );
567 UIX( dst
->DstRegister
.Padding
);
568 if( deflt
|| fd
->DstRegister
.Extended
!= dst
->DstRegister
.Extended
) {
569 TXT( "\nExtended : " );
570 UID( dst
->DstRegister
.Extended
);
574 if( deflt
|| tgsi_compare_dst_register_ext_concode( dst
->DstRegisterExtConcode
, fd
->DstRegisterExtConcode
) ) {
577 ENM( dst
->DstRegisterExtConcode
.Type
, TGSI_DST_REGISTER_EXTS
);
578 if( deflt
|| fd
->DstRegisterExtConcode
.CondMask
!= dst
->DstRegisterExtConcode
.CondMask
) {
579 TXT( "\nCondMask : " );
580 ENM( dst
->DstRegisterExtConcode
.CondMask
, TGSI_CCS
);
582 if( deflt
|| fd
->DstRegisterExtConcode
.CondSwizzleX
!= dst
->DstRegisterExtConcode
.CondSwizzleX
) {
583 TXT( "\nCondSwizzleX: " );
584 ENM( dst
->DstRegisterExtConcode
.CondSwizzleX
, TGSI_SWIZZLES
);
586 if( deflt
|| fd
->DstRegisterExtConcode
.CondSwizzleY
!= dst
->DstRegisterExtConcode
.CondSwizzleY
) {
587 TXT( "\nCondSwizzleY: " );
588 ENM( dst
->DstRegisterExtConcode
.CondSwizzleY
, TGSI_SWIZZLES
);
590 if( deflt
|| fd
->DstRegisterExtConcode
.CondSwizzleZ
!= dst
->DstRegisterExtConcode
.CondSwizzleZ
) {
591 TXT( "\nCondSwizzleZ: " );
592 ENM( dst
->DstRegisterExtConcode
.CondSwizzleZ
, TGSI_SWIZZLES
);
594 if( deflt
|| fd
->DstRegisterExtConcode
.CondSwizzleW
!= dst
->DstRegisterExtConcode
.CondSwizzleW
) {
595 TXT( "\nCondSwizzleW: " );
596 ENM( dst
->DstRegisterExtConcode
.CondSwizzleW
, TGSI_SWIZZLES
);
598 if( deflt
|| fd
->DstRegisterExtConcode
.CondSrcIndex
!= dst
->DstRegisterExtConcode
.CondSrcIndex
) {
599 TXT( "\nCondSrcIndex: " );
600 UID( dst
->DstRegisterExtConcode
.CondSrcIndex
);
603 TXT( "\nPadding : " );
604 UIX( dst
->DstRegisterExtConcode
.Padding
);
605 if( deflt
|| fd
->DstRegisterExtConcode
.Extended
!= dst
->DstRegisterExtConcode
.Extended
) {
606 TXT( "\nExtended : " );
607 UID( dst
->DstRegisterExtConcode
.Extended
);
612 if( deflt
|| tgsi_compare_dst_register_ext_modulate( dst
->DstRegisterExtModulate
, fd
->DstRegisterExtModulate
) ) {
615 ENM( dst
->DstRegisterExtModulate
.Type
, TGSI_DST_REGISTER_EXTS
);
616 if( deflt
|| fd
->DstRegisterExtModulate
.Modulate
!= dst
->DstRegisterExtModulate
.Modulate
) {
617 TXT( "\nModulate: " );
618 ENM( dst
->DstRegisterExtModulate
.Modulate
, TGSI_MODULATES
);
621 TXT( "\nPadding : " );
622 UIX( dst
->DstRegisterExtModulate
.Padding
);
623 if( deflt
|| fd
->DstRegisterExtModulate
.Extended
!= dst
->DstRegisterExtModulate
.Extended
) {
624 TXT( "\nExtended: " );
625 UID( dst
->DstRegisterExtModulate
.Extended
);
631 for( i
= 0; i
< inst
->Instruction
.NumSrcRegs
; i
++ ) {
632 struct tgsi_full_src_register
*src
= &inst
->FullSrcRegisters
[i
];
633 struct tgsi_full_src_register
*fs
= &fi
->FullSrcRegisters
[i
];
637 ENM( src
->SrcRegister
.File
, TGSI_FILES
);
638 if( deflt
|| fs
->SrcRegister
.SwizzleX
!= src
->SrcRegister
.SwizzleX
) {
639 TXT( "\nSwizzleX : " );
640 ENM( src
->SrcRegister
.SwizzleX
, TGSI_SWIZZLES
);
642 if( deflt
|| fs
->SrcRegister
.SwizzleY
!= src
->SrcRegister
.SwizzleY
) {
643 TXT( "\nSwizzleY : " );
644 ENM( src
->SrcRegister
.SwizzleY
, TGSI_SWIZZLES
);
646 if( deflt
|| fs
->SrcRegister
.SwizzleZ
!= src
->SrcRegister
.SwizzleZ
) {
647 TXT( "\nSwizzleZ : " );
648 ENM( src
->SrcRegister
.SwizzleZ
, TGSI_SWIZZLES
);
650 if( deflt
|| fs
->SrcRegister
.SwizzleW
!= src
->SrcRegister
.SwizzleW
) {
651 TXT( "\nSwizzleW : " );
652 ENM( src
->SrcRegister
.SwizzleW
, TGSI_SWIZZLES
);
654 if( deflt
|| fs
->SrcRegister
.Negate
!= src
->SrcRegister
.Negate
) {
655 TXT( "\nNegate : " );
656 UID( src
->SrcRegister
.Negate
);
659 if( deflt
|| fs
->SrcRegister
.Indirect
!= src
->SrcRegister
.Indirect
) {
660 TXT( "\nIndirect : " );
661 UID( src
->SrcRegister
.Indirect
);
663 if( deflt
|| fs
->SrcRegister
.Dimension
!= src
->SrcRegister
.Dimension
) {
664 TXT( "\nDimension: " );
665 UID( src
->SrcRegister
.Dimension
);
668 if( deflt
|| fs
->SrcRegister
.Index
!= src
->SrcRegister
.Index
) {
670 SID( src
->SrcRegister
.Index
);
673 if( deflt
|| fs
->SrcRegister
.Extended
!= src
->SrcRegister
.Extended
) {
674 TXT( "\nExtended : " );
675 UID( src
->SrcRegister
.Extended
);
679 if( deflt
|| tgsi_compare_src_register_ext_swz( src
->SrcRegisterExtSwz
, fs
->SrcRegisterExtSwz
) ) {
682 ENM( src
->SrcRegisterExtSwz
.Type
, TGSI_SRC_REGISTER_EXTS
);
683 if( deflt
|| fs
->SrcRegisterExtSwz
.ExtSwizzleX
!= src
->SrcRegisterExtSwz
.ExtSwizzleX
) {
684 TXT( "\nExtSwizzleX: " );
685 ENM( src
->SrcRegisterExtSwz
.ExtSwizzleX
, TGSI_EXTSWIZZLES
);
687 if( deflt
|| fs
->SrcRegisterExtSwz
.ExtSwizzleY
!= src
->SrcRegisterExtSwz
.ExtSwizzleY
) {
688 TXT( "\nExtSwizzleY: " );
689 ENM( src
->SrcRegisterExtSwz
.ExtSwizzleY
, TGSI_EXTSWIZZLES
);
691 if( deflt
|| fs
->SrcRegisterExtSwz
.ExtSwizzleZ
!= src
->SrcRegisterExtSwz
.ExtSwizzleZ
) {
692 TXT( "\nExtSwizzleZ: " );
693 ENM( src
->SrcRegisterExtSwz
.ExtSwizzleZ
, TGSI_EXTSWIZZLES
);
695 if( deflt
|| fs
->SrcRegisterExtSwz
.ExtSwizzleW
!= src
->SrcRegisterExtSwz
.ExtSwizzleW
) {
696 TXT( "\nExtSwizzleW: " );
697 ENM( src
->SrcRegisterExtSwz
.ExtSwizzleW
, TGSI_EXTSWIZZLES
);
699 if( deflt
|| fs
->SrcRegisterExtSwz
.NegateX
!= src
->SrcRegisterExtSwz
.NegateX
) {
700 TXT( "\nNegateX : " );
701 UID( src
->SrcRegisterExtSwz
.NegateX
);
703 if( deflt
|| fs
->SrcRegisterExtSwz
.NegateY
!= src
->SrcRegisterExtSwz
.NegateY
) {
704 TXT( "\nNegateY : " );
705 UID( src
->SrcRegisterExtSwz
.NegateY
);
707 if( deflt
|| fs
->SrcRegisterExtSwz
.NegateZ
!= src
->SrcRegisterExtSwz
.NegateZ
) {
708 TXT( "\nNegateZ : " );
709 UID( src
->SrcRegisterExtSwz
.NegateZ
);
711 if( deflt
|| fs
->SrcRegisterExtSwz
.NegateW
!= src
->SrcRegisterExtSwz
.NegateW
) {
712 TXT( "\nNegateW : " );
713 UID( src
->SrcRegisterExtSwz
.NegateW
);
716 TXT( "\nPadding : " );
717 UIX( src
->SrcRegisterExtSwz
.Padding
);
718 if( deflt
|| fs
->SrcRegisterExtSwz
.Extended
!= src
->SrcRegisterExtSwz
.Extended
) {
719 TXT( "\nExtended : " );
720 UID( src
->SrcRegisterExtSwz
.Extended
);
725 if( deflt
|| tgsi_compare_src_register_ext_mod( src
->SrcRegisterExtMod
, fs
->SrcRegisterExtMod
) ) {
728 ENM( src
->SrcRegisterExtMod
.Type
, TGSI_SRC_REGISTER_EXTS
);
729 if( deflt
|| fs
->SrcRegisterExtMod
.Complement
!= src
->SrcRegisterExtMod
.Complement
) {
730 TXT( "\nComplement: " );
731 UID( src
->SrcRegisterExtMod
.Complement
);
733 if( deflt
|| fs
->SrcRegisterExtMod
.Bias
!= src
->SrcRegisterExtMod
.Bias
) {
735 UID( src
->SrcRegisterExtMod
.Bias
);
737 if( deflt
|| fs
->SrcRegisterExtMod
.Scale2X
!= src
->SrcRegisterExtMod
.Scale2X
) {
738 TXT( "\nScale2X : " );
739 UID( src
->SrcRegisterExtMod
.Scale2X
);
741 if( deflt
|| fs
->SrcRegisterExtMod
.Absolute
!= src
->SrcRegisterExtMod
.Absolute
) {
742 TXT( "\nAbsolute : " );
743 UID( src
->SrcRegisterExtMod
.Absolute
);
745 if( deflt
|| fs
->SrcRegisterExtMod
.Negate
!= src
->SrcRegisterExtMod
.Negate
) {
746 TXT( "\nNegate : " );
747 UID( src
->SrcRegisterExtMod
.Negate
);
750 TXT( "\nPadding : " );
751 UIX( src
->SrcRegisterExtMod
.Padding
);
752 if( deflt
|| fs
->SrcRegisterExtMod
.Extended
!= src
->SrcRegisterExtMod
.Extended
) {
753 TXT( "\nExtended : " );
754 UID( src
->SrcRegisterExtMod
.Extended
);
763 const struct tgsi_token
*tokens
,
766 struct tgsi_parse_context parse
;
767 struct tgsi_full_instruction fi
;
768 struct tgsi_full_declaration fd
;
769 uint ignored
= flags
& TGSI_DUMP_C_IGNORED
;
770 uint deflt
= flags
& TGSI_DUMP_C_DEFAULT
;
774 assert(strcmp(TGSI_OPCODES
[TGSI_OPCODE_CONT
], "OPCODE_CONT") == 0);
775 assert(strcmp(TGSI_OPCODES
[TGSI_OPCODE_END
], "OPCODE_END") == 0);
777 tgsi_parse_init( &parse
, tokens
);
779 TXT( "tgsi-dump begin -----------------" );
781 TXT( "\nMajorVersion: " );
782 UID( parse
.FullVersion
.Version
.MajorVersion
);
783 TXT( "\nMinorVersion: " );
784 UID( parse
.FullVersion
.Version
.MinorVersion
);
787 TXT( "\nHeaderSize: " );
788 UID( parse
.FullHeader
.Header
.HeaderSize
);
789 TXT( "\nBodySize : " );
790 UID( parse
.FullHeader
.Header
.BodySize
);
791 TXT( "\nProcessor : " );
792 ENM( parse
.FullHeader
.Processor
.Processor
, TGSI_PROCESSOR_TYPES
);
795 fi
= tgsi_default_full_instruction();
796 fd
= tgsi_default_full_declaration();
798 while( !tgsi_parse_end_of_tokens( &parse
) ) {
799 tgsi_parse_token( &parse
);
802 ENM( parse
.FullToken
.Token
.Type
, TGSI_TOKEN_TYPES
);
805 UID( parse
.FullToken
.Token
.Size
);
806 if( deflt
|| parse
.FullToken
.Token
.Extended
) {
807 TXT( "\nExtended : " );
808 UID( parse
.FullToken
.Token
.Extended
);
812 switch( parse
.FullToken
.Token
.Type
) {
813 case TGSI_TOKEN_TYPE_DECLARATION
:
814 dump_declaration_verbose(
815 &parse
.FullToken
.FullDeclaration
,
821 case TGSI_TOKEN_TYPE_IMMEDIATE
:
822 dump_immediate_verbose(
823 &parse
.FullToken
.FullImmediate
,
827 case TGSI_TOKEN_TYPE_INSTRUCTION
:
828 dump_instruction_verbose(
829 &parse
.FullToken
.FullInstruction
,
842 TXT( "\ntgsi-dump end -------------------\n" );
844 tgsi_parse_free( &parse
);