1 #include "tgsi_platform.h"
12 struct text_dump
*dump
,
16 fwrite( buffer
, size
, 1, dump
->file
);
21 struct text_dump
*dump
,
25 GLuint len
= strlen( str
);
27 for( i
= 0; i
< len
; i
++ ) {
28 text_dump_write( dump
, &str
[i
], 1 );
30 if( str
[i
] == '\n' ) {
33 for( i
= 0; i
< dump
->tabs
; i
++ ) {
34 text_dump_write( dump
, " ", 4 );
42 struct text_dump
*dump
,
49 text_dump_str( dump
, str
);
54 struct text_dump
*dump
,
59 sprintf( str
, "0x%x", ui
);
60 text_dump_str( dump
, str
);
65 struct text_dump
*dump
,
70 sprintf( str
, "%u", ui
);
71 text_dump_str( dump
, str
);
76 struct text_dump
*dump
,
81 sprintf( str
, "%d", si
);
82 text_dump_str( dump
, str
);
87 struct text_dump
*dump
,
92 sprintf( str
, "%40.6f", f
);
93 text_dump_str( dump
, str
);
98 struct text_dump
*dump
,
101 const GLuint enums_count
)
103 if( e
>= enums_count
) {
104 text_dump_uid( dump
, e
);
107 text_dump_str( dump
, enums
[e
] );
113 struct text_dump
*dump
)
120 struct text_dump
*dump
)
122 assert( dump
->tabs
> 0 );
127 #define TXT(S) text_dump_str( dump, S )
128 #define CHR(C) text_dump_chr( dump, C )
129 #define UIX(I) text_dump_uix( dump, I )
130 #define UID(I) text_dump_uid( dump, I )
131 #define SID(I) text_dump_sid( dump, I )
132 #define FLT(F) text_dump_flt( dump, F )
133 #define TAB() text_dump_tab( dump )
134 #define UNT() text_dump_untab( dump )
135 #define ENM(E,ENUMS) text_dump_enum( dump, E, ENUMS, sizeof( ENUMS ) / sizeof( *ENUMS ) )
137 static const char *TGSI_PROCESSOR_TYPES
[] =
139 "PROCESSOR_FRAGMENT",
144 static const char *TGSI_PROCESSOR_TYPES_SHORT
[] =
151 static const char *TGSI_TOKEN_TYPES
[] =
153 "TOKEN_TYPE_DECLARATION",
154 "TOKEN_TYPE_IMMEDIATE",
155 "TOKEN_TYPE_INSTRUCTION"
158 static const char *TGSI_FILES
[] =
170 static const char *TGSI_FILES_SHORT
[] =
182 static const char *TGSI_DECLARES
[] =
188 static const char *TGSI_INTERPOLATES
[] =
190 "INTERPOLATE_CONSTANT",
191 "INTERPOLATE_LINEAR",
192 "INTERPOLATE_PERSPECTIVE"
195 static const char *TGSI_INTERPOLATES_SHORT
[] =
202 static const char *TGSI_SEMANTICS
[] =
208 static const char *TGSI_SEMANTICS_SHORT
[] =
214 static const char *TGSI_IMMS
[] =
219 static const char *TGSI_IMMS_SHORT
[] =
224 static const char *TGSI_OPCODES
[] =
257 "OPCODE_CROSSPRODUCT",
258 "OPCODE_MULTIPLYMATRIX",
340 "OPCODE_TEXM3X3SPEC",
341 "OPCODE_TEXM3X3VSPEC",
347 "OPCODE_TEXM3X2DEPTH",
361 static const char *TGSI_OPCODES_SHORT
[] =
497 static const char *TGSI_SATS
[] =
504 static const char *TGSI_INSTRUCTION_EXTS
[] =
506 "INSTRUCTION_EXT_TYPE_NV",
507 "INSTRUCTION_EXT_TYPE_LABEL",
508 "INSTRUCTION_EXT_TYPE_TEXTURE"
511 static const char *TGSI_PRECISIONS
[] =
514 "TGSI_PRECISION_FLOAT32",
515 "TGSI_PRECISION_FLOAT16",
516 "TGSI_PRECISION_FIXED12"
519 static const char *TGSI_CCS
[] =
532 static const char *TGSI_SWIZZLES
[] =
540 static const char *TGSI_SWIZZLES_SHORT
[] =
548 static const char *TGSI_TEXTURES
[] =
561 static const char *TGSI_SRC_REGISTER_EXTS
[] =
563 "SRC_REGISTER_EXT_TYPE_SWZ",
564 "SRC_REGISTER_EXT_TYPE_MOD"
567 static const char *TGSI_EXTSWIZZLES
[] =
577 static const char *TGSI_WRITEMASKS
[] =
597 static const char *TGSI_DST_REGISTER_EXTS
[] =
599 "DST_REGISTER_EXT_TYPE_CONDCODE",
600 "DST_REGISTER_EXT_TYPE_MODULATE"
603 static const char *TGSI_MODULATES
[] =
615 dump_declaration_short(
616 struct text_dump
*dump
,
617 struct tgsi_full_declaration
*decl
)
620 ENM( decl
->Declaration
.File
, TGSI_FILES_SHORT
);
622 switch( decl
->Declaration
.Declare
) {
623 case TGSI_DECLARE_RANGE
:
625 UID( decl
->u
.DeclarationRange
.First
);
626 if( decl
->u
.DeclarationRange
.First
!= decl
->u
.DeclarationRange
.Last
) {
628 UID( decl
->u
.DeclarationRange
.Last
);
636 if( decl
->Declaration
.UsageMask
!= TGSI_WRITEMASK_XYZW
) {
638 if( decl
->Declaration
.UsageMask
& TGSI_WRITEMASK_X
) {
641 if( decl
->Declaration
.UsageMask
& TGSI_WRITEMASK_Y
) {
644 if( decl
->Declaration
.UsageMask
& TGSI_WRITEMASK_Z
) {
647 if( decl
->Declaration
.UsageMask
& TGSI_WRITEMASK_W
) {
652 if( decl
->Declaration
.Interpolate
) {
654 ENM( decl
->Interpolation
.Interpolate
, TGSI_INTERPOLATES_SHORT
);
657 if( decl
->Declaration
.Semantic
) {
659 ENM( decl
->Semantic
.SemanticName
, TGSI_SEMANTICS_SHORT
);
661 UID( decl
->Semantic
.SemanticIndex
);
667 dump_declaration_verbose(
668 struct text_dump
*dump
,
669 struct tgsi_full_declaration
*decl
,
672 struct tgsi_full_declaration
*fd
)
675 ENM( decl
->Declaration
.File
, TGSI_FILES
);
676 TXT( "\nDeclare : " );
677 ENM( decl
->Declaration
.Declare
, TGSI_DECLARES
);
678 if( deflt
|| fd
->Declaration
.UsageMask
!= decl
->Declaration
.UsageMask
) {
679 TXT( "\nUsageMask : " );
680 if( decl
->Declaration
.UsageMask
& TGSI_WRITEMASK_X
) {
683 if( decl
->Declaration
.UsageMask
& TGSI_WRITEMASK_Y
) {
686 if( decl
->Declaration
.UsageMask
& TGSI_WRITEMASK_Z
) {
689 if( decl
->Declaration
.UsageMask
& TGSI_WRITEMASK_W
) {
693 if( deflt
|| fd
->Declaration
.Interpolate
!= decl
->Declaration
.Interpolate
) {
694 TXT( "\nInterpolate: " );
695 UID( decl
->Declaration
.Interpolate
);
697 if( deflt
|| fd
->Declaration
.Semantic
!= decl
->Declaration
.Semantic
) {
698 TXT( "\nSemantic : " );
699 UID( decl
->Declaration
.Semantic
);
702 TXT( "\nPadding : " );
703 UIX( decl
->Declaration
.Padding
);
707 switch( decl
->Declaration
.Declare
) {
708 case TGSI_DECLARE_RANGE
:
710 UID( decl
->u
.DeclarationRange
.First
);
712 UID( decl
->u
.DeclarationRange
.Last
);
715 case TGSI_DECLARE_MASK
:
717 UIX( decl
->u
.DeclarationMask
.Mask
);
724 if( decl
->Declaration
.Interpolate
) {
726 TXT( "\nInterpolate: " );
727 ENM( decl
->Interpolation
.Interpolate
, TGSI_INTERPOLATES
);
729 TXT( "\nPadding : " );
730 UIX( decl
->Interpolation
.Padding
);
734 if( decl
->Declaration
.Semantic
) {
736 TXT( "\nSemanticName : " );
737 ENM( decl
->Semantic
.SemanticName
, TGSI_SEMANTICS
);
738 TXT( "\nSemanticIndex: " );
739 UID( decl
->Semantic
.SemanticIndex
);
741 TXT( "\nPadding : " );
742 UIX( decl
->Semantic
.Padding
);
748 dump_immediate_short(
749 struct text_dump
*dump
,
750 struct tgsi_full_immediate
*imm
)
755 ENM( imm
->Immediate
.DataType
, TGSI_IMMS_SHORT
);
758 for( i
= 0; i
< imm
->Immediate
.Size
- 1; i
++ ) {
759 switch( imm
->Immediate
.DataType
) {
760 case TGSI_IMM_FLOAT32
:
761 FLT( imm
->u
.ImmediateFloat32
[i
].Float
);
768 if( i
< imm
->Immediate
.Size
- 2 ) {
776 dump_immediate_verbose(
777 struct text_dump
*dump
,
778 struct tgsi_full_immediate
*imm
,
783 TXT( "\nDataType : " );
784 ENM( imm
->Immediate
.DataType
, TGSI_IMMS
);
786 TXT( "\nPadding : " );
787 UIX( imm
->Immediate
.Padding
);
790 for( i
= 0; i
< imm
->Immediate
.Size
- 1; i
++ ) {
792 switch( imm
->Immediate
.DataType
) {
793 case TGSI_IMM_FLOAT32
:
795 FLT( imm
->u
.ImmediateFloat32
[i
].Float
);
805 dump_instruction_short(
806 struct text_dump
*dump
,
807 struct tgsi_full_instruction
*inst
,
811 GLboolean first_reg
= GL_TRUE
;
816 ENM( inst
->Instruction
.Opcode
, TGSI_OPCODES_SHORT
);
818 switch( inst
->Instruction
.Saturate
) {
821 case TGSI_SAT_ZERO_ONE
:
824 case TGSI_SAT_MINUS_PLUS_ONE
:
831 for( i
= 0; i
< inst
->Instruction
.NumDstRegs
; i
++ ) {
832 struct tgsi_full_dst_register
*dst
= &inst
->FullDstRegisters
[i
];
839 ENM( dst
->DstRegister
.File
, TGSI_FILES_SHORT
);
842 SID( dst
->DstRegister
.Index
);
845 if( dst
->DstRegister
.WriteMask
!= TGSI_WRITEMASK_XYZW
) {
847 if( dst
->DstRegister
.WriteMask
& TGSI_WRITEMASK_X
) {
850 if( dst
->DstRegister
.WriteMask
& TGSI_WRITEMASK_Y
) {
853 if( dst
->DstRegister
.WriteMask
& TGSI_WRITEMASK_Z
) {
856 if( dst
->DstRegister
.WriteMask
& TGSI_WRITEMASK_W
) {
861 first_reg
= GL_FALSE
;
864 for( i
= 0; i
< inst
->Instruction
.NumSrcRegs
; i
++ ) {
865 struct tgsi_full_src_register
*src
= &inst
->FullSrcRegisters
[i
];
872 if( src
->SrcRegisterExtMod
.Negate
) {
875 if( src
->SrcRegisterExtMod
.Absolute
) {
878 if( src
->SrcRegister
.Negate
) {
882 ENM( src
->SrcRegister
.File
, TGSI_FILES_SHORT
);
885 SID( src
->SrcRegister
.Index
);
888 if( src
->SrcRegister
.SwizzleX
!= TGSI_SWIZZLE_X
||
889 src
->SrcRegister
.SwizzleY
!= TGSI_SWIZZLE_Y
||
890 src
->SrcRegister
.SwizzleZ
!= TGSI_SWIZZLE_Z
||
891 src
->SrcRegister
.SwizzleW
!= TGSI_SWIZZLE_W
) {
893 ENM( src
->SrcRegister
.SwizzleX
, TGSI_SWIZZLES_SHORT
);
894 ENM( src
->SrcRegister
.SwizzleY
, TGSI_SWIZZLES_SHORT
);
895 ENM( src
->SrcRegister
.SwizzleZ
, TGSI_SWIZZLES_SHORT
);
896 ENM( src
->SrcRegister
.SwizzleW
, TGSI_SWIZZLES_SHORT
);
899 if( src
->SrcRegisterExtMod
.Absolute
) {
903 first_reg
= GL_FALSE
;
906 switch( inst
->Instruction
.Opcode
) {
908 case TGSI_OPCODE_ELSE
:
910 UID( inst
->InstructionExtLabel
.Label
);
916 dump_instruction_verbose(
917 struct text_dump
*dump
,
918 struct tgsi_full_instruction
*inst
,
921 struct tgsi_full_instruction
*fi
)
925 TXT( "\nOpcode : " );
926 ENM( inst
->Instruction
.Opcode
, TGSI_OPCODES
);
927 if( deflt
|| fi
->Instruction
.Saturate
!= inst
->Instruction
.Saturate
) {
928 TXT( "\nSaturate : " );
929 ENM( inst
->Instruction
.Saturate
, TGSI_SATS
);
931 if( deflt
|| fi
->Instruction
.NumDstRegs
!= inst
->Instruction
.NumDstRegs
) {
932 TXT( "\nNumDstRegs : " );
933 UID( inst
->Instruction
.NumDstRegs
);
935 if( deflt
|| fi
->Instruction
.NumSrcRegs
!= inst
->Instruction
.NumSrcRegs
) {
936 TXT( "\nNumSrcRegs : " );
937 UID( inst
->Instruction
.NumSrcRegs
);
940 TXT( "\nPadding : " );
941 UIX( inst
->Instruction
.Padding
);
944 if( deflt
|| tgsi_compare_instruction_ext_nv( inst
->InstructionExtNv
, fi
->InstructionExtNv
) ) {
947 ENM( inst
->InstructionExtNv
.Type
, TGSI_INSTRUCTION_EXTS
);
948 if( deflt
|| fi
->InstructionExtNv
.Precision
!= inst
->InstructionExtNv
.Precision
) {
949 TXT( "\nPrecision : " );
950 ENM( inst
->InstructionExtNv
.Precision
, TGSI_PRECISIONS
);
952 if( deflt
|| fi
->InstructionExtNv
.CondDstIndex
!= inst
->InstructionExtNv
.CondDstIndex
) {
953 TXT( "\nCondDstIndex : " );
954 UID( inst
->InstructionExtNv
.CondDstIndex
);
956 if( deflt
|| fi
->InstructionExtNv
.CondFlowIndex
!= inst
->InstructionExtNv
.CondFlowIndex
) {
957 TXT( "\nCondFlowIndex : " );
958 UID( inst
->InstructionExtNv
.CondFlowIndex
);
960 if( deflt
|| fi
->InstructionExtNv
.CondMask
!= inst
->InstructionExtNv
.CondMask
) {
961 TXT( "\nCondMask : " );
962 ENM( inst
->InstructionExtNv
.CondMask
, TGSI_CCS
);
964 if( deflt
|| fi
->InstructionExtNv
.CondSwizzleX
!= inst
->InstructionExtNv
.CondSwizzleX
) {
965 TXT( "\nCondSwizzleX : " );
966 ENM( inst
->InstructionExtNv
.CondSwizzleX
, TGSI_SWIZZLES
);
968 if( deflt
|| fi
->InstructionExtNv
.CondSwizzleY
!= inst
->InstructionExtNv
.CondSwizzleY
) {
969 TXT( "\nCondSwizzleY : " );
970 ENM( inst
->InstructionExtNv
.CondSwizzleY
, TGSI_SWIZZLES
);
972 if( deflt
|| fi
->InstructionExtNv
.CondSwizzleZ
!= inst
->InstructionExtNv
.CondSwizzleZ
) {
973 TXT( "\nCondSwizzleZ : " );
974 ENM( inst
->InstructionExtNv
.CondSwizzleZ
, TGSI_SWIZZLES
);
976 if( deflt
|| fi
->InstructionExtNv
.CondSwizzleW
!= inst
->InstructionExtNv
.CondSwizzleW
) {
977 TXT( "\nCondSwizzleW : " );
978 ENM( inst
->InstructionExtNv
.CondSwizzleW
, TGSI_SWIZZLES
);
980 if( deflt
|| fi
->InstructionExtNv
.CondDstUpdate
!= inst
->InstructionExtNv
.CondDstUpdate
) {
981 TXT( "\nCondDstUpdate : " );
982 UID( inst
->InstructionExtNv
.CondDstUpdate
);
984 if( deflt
|| fi
->InstructionExtNv
.CondFlowEnable
!= inst
->InstructionExtNv
.CondFlowEnable
) {
985 TXT( "\nCondFlowEnable: " );
986 UID( inst
->InstructionExtNv
.CondFlowEnable
);
989 TXT( "\nPadding : " );
990 UIX( inst
->InstructionExtNv
.Padding
);
991 if( deflt
|| fi
->InstructionExtNv
.Extended
!= inst
->InstructionExtNv
.Extended
) {
992 TXT( "\nExtended : " );
993 UID( inst
->InstructionExtNv
.Extended
);
998 if( deflt
|| tgsi_compare_instruction_ext_label( inst
->InstructionExtLabel
, fi
->InstructionExtLabel
) ) {
1001 ENM( inst
->InstructionExtLabel
.Type
, TGSI_INSTRUCTION_EXTS
);
1002 if( deflt
|| fi
->InstructionExtLabel
.Label
!= inst
->InstructionExtLabel
.Label
) {
1003 TXT( "\nLabel : " );
1004 UID( inst
->InstructionExtLabel
.Label
);
1007 TXT( "\nPadding : " );
1008 UIX( inst
->InstructionExtLabel
.Padding
);
1009 if( deflt
|| fi
->InstructionExtLabel
.Extended
!= inst
->InstructionExtLabel
.Extended
) {
1010 TXT( "\nExtended: " );
1011 UID( inst
->InstructionExtLabel
.Extended
);
1016 if( deflt
|| tgsi_compare_instruction_ext_texture( inst
->InstructionExtTexture
, fi
->InstructionExtTexture
) ) {
1019 ENM( inst
->InstructionExtTexture
.Type
, TGSI_INSTRUCTION_EXTS
);
1020 if( deflt
|| fi
->InstructionExtTexture
.Texture
!= inst
->InstructionExtTexture
.Texture
) {
1021 TXT( "\nTexture : " );
1022 ENM( inst
->InstructionExtTexture
.Texture
, TGSI_TEXTURES
);
1025 TXT( "\nPadding : " );
1026 UIX( inst
->InstructionExtTexture
.Padding
);
1027 if( deflt
|| fi
->InstructionExtTexture
.Extended
!= inst
->InstructionExtTexture
.Extended
) {
1028 TXT( "\nExtended: " );
1029 UID( inst
->InstructionExtTexture
.Extended
);
1034 for( i
= 0; i
< inst
->Instruction
.NumDstRegs
; i
++ ) {
1035 struct tgsi_full_dst_register
*dst
= &inst
->FullDstRegisters
[i
];
1036 struct tgsi_full_dst_register
*fd
= &fi
->FullDstRegisters
[i
];
1040 ENM( dst
->DstRegister
.File
, TGSI_FILES
);
1041 if( deflt
|| fd
->DstRegister
.WriteMask
!= dst
->DstRegister
.WriteMask
) {
1042 TXT( "\nWriteMask: " );
1043 ENM( dst
->DstRegister
.WriteMask
, TGSI_WRITEMASKS
);
1046 if( deflt
|| fd
->DstRegister
.Indirect
!= dst
->DstRegister
.Indirect
) {
1047 TXT( "\nIndirect : " );
1048 UID( dst
->DstRegister
.Indirect
);
1050 if( deflt
|| fd
->DstRegister
.Dimension
!= dst
->DstRegister
.Dimension
) {
1051 TXT( "\nDimension: " );
1052 UID( dst
->DstRegister
.Dimension
);
1055 if( deflt
|| fd
->DstRegister
.Index
!= dst
->DstRegister
.Index
) {
1056 TXT( "\nIndex : " );
1057 SID( dst
->DstRegister
.Index
);
1060 TXT( "\nPadding : " );
1061 UIX( dst
->DstRegister
.Padding
);
1062 if( deflt
|| fd
->DstRegister
.Extended
!= dst
->DstRegister
.Extended
) {
1063 TXT( "\nExtended : " );
1064 UID( dst
->DstRegister
.Extended
);
1068 if( deflt
|| tgsi_compare_dst_register_ext_concode( dst
->DstRegisterExtConcode
, fd
->DstRegisterExtConcode
) ) {
1071 ENM( dst
->DstRegisterExtConcode
.Type
, TGSI_DST_REGISTER_EXTS
);
1072 if( deflt
|| fd
->DstRegisterExtConcode
.CondMask
!= dst
->DstRegisterExtConcode
.CondMask
) {
1073 TXT( "\nCondMask : " );
1074 ENM( dst
->DstRegisterExtConcode
.CondMask
, TGSI_CCS
);
1076 if( deflt
|| fd
->DstRegisterExtConcode
.CondSwizzleX
!= dst
->DstRegisterExtConcode
.CondSwizzleX
) {
1077 TXT( "\nCondSwizzleX: " );
1078 ENM( dst
->DstRegisterExtConcode
.CondSwizzleX
, TGSI_SWIZZLES
);
1080 if( deflt
|| fd
->DstRegisterExtConcode
.CondSwizzleY
!= dst
->DstRegisterExtConcode
.CondSwizzleY
) {
1081 TXT( "\nCondSwizzleY: " );
1082 ENM( dst
->DstRegisterExtConcode
.CondSwizzleY
, TGSI_SWIZZLES
);
1084 if( deflt
|| fd
->DstRegisterExtConcode
.CondSwizzleZ
!= dst
->DstRegisterExtConcode
.CondSwizzleZ
) {
1085 TXT( "\nCondSwizzleZ: " );
1086 ENM( dst
->DstRegisterExtConcode
.CondSwizzleZ
, TGSI_SWIZZLES
);
1088 if( deflt
|| fd
->DstRegisterExtConcode
.CondSwizzleW
!= dst
->DstRegisterExtConcode
.CondSwizzleW
) {
1089 TXT( "\nCondSwizzleW: " );
1090 ENM( dst
->DstRegisterExtConcode
.CondSwizzleW
, TGSI_SWIZZLES
);
1092 if( deflt
|| fd
->DstRegisterExtConcode
.CondSrcIndex
!= dst
->DstRegisterExtConcode
.CondSrcIndex
) {
1093 TXT( "\nCondSrcIndex: " );
1094 UID( dst
->DstRegisterExtConcode
.CondSrcIndex
);
1097 TXT( "\nPadding : " );
1098 UIX( dst
->DstRegisterExtConcode
.Padding
);
1099 if( deflt
|| fd
->DstRegisterExtConcode
.Extended
!= dst
->DstRegisterExtConcode
.Extended
) {
1100 TXT( "\nExtended : " );
1101 UID( dst
->DstRegisterExtConcode
.Extended
);
1106 if( deflt
|| tgsi_compare_dst_register_ext_modulate( dst
->DstRegisterExtModulate
, fd
->DstRegisterExtModulate
) ) {
1109 ENM( dst
->DstRegisterExtModulate
.Type
, TGSI_DST_REGISTER_EXTS
);
1110 if( deflt
|| fd
->DstRegisterExtModulate
.Modulate
!= dst
->DstRegisterExtModulate
.Modulate
) {
1111 TXT( "\nModulate: " );
1112 ENM( dst
->DstRegisterExtModulate
.Modulate
, TGSI_MODULATES
);
1115 TXT( "\nPadding : " );
1116 UIX( dst
->DstRegisterExtModulate
.Padding
);
1117 if( deflt
|| fd
->DstRegisterExtModulate
.Extended
!= dst
->DstRegisterExtModulate
.Extended
) {
1118 TXT( "\nExtended: " );
1119 UID( dst
->DstRegisterExtModulate
.Extended
);
1125 for( i
= 0; i
< inst
->Instruction
.NumSrcRegs
; i
++ ) {
1126 struct tgsi_full_src_register
*src
= &inst
->FullSrcRegisters
[i
];
1127 struct tgsi_full_src_register
*fs
= &fi
->FullSrcRegisters
[i
];
1131 ENM( src
->SrcRegister
.File
, TGSI_FILES
);
1132 if( deflt
|| fs
->SrcRegister
.SwizzleX
!= src
->SrcRegister
.SwizzleX
) {
1133 TXT( "\nSwizzleX : " );
1134 ENM( src
->SrcRegister
.SwizzleX
, TGSI_SWIZZLES
);
1136 if( deflt
|| fs
->SrcRegister
.SwizzleY
!= src
->SrcRegister
.SwizzleY
) {
1137 TXT( "\nSwizzleY : " );
1138 ENM( src
->SrcRegister
.SwizzleY
, TGSI_SWIZZLES
);
1140 if( deflt
|| fs
->SrcRegister
.SwizzleZ
!= src
->SrcRegister
.SwizzleZ
) {
1141 TXT( "\nSwizzleZ : " );
1142 ENM( src
->SrcRegister
.SwizzleZ
, TGSI_SWIZZLES
);
1144 if( deflt
|| fs
->SrcRegister
.SwizzleW
!= src
->SrcRegister
.SwizzleW
) {
1145 TXT( "\nSwizzleW : " );
1146 ENM( src
->SrcRegister
.SwizzleW
, TGSI_SWIZZLES
);
1148 if( deflt
|| fs
->SrcRegister
.Negate
!= src
->SrcRegister
.Negate
) {
1149 TXT( "\nNegate : " );
1150 UID( src
->SrcRegister
.Negate
);
1153 if( deflt
|| fs
->SrcRegister
.Indirect
!= src
->SrcRegister
.Indirect
) {
1154 TXT( "\nIndirect : " );
1155 UID( src
->SrcRegister
.Indirect
);
1157 if( deflt
|| fs
->SrcRegister
.Dimension
!= src
->SrcRegister
.Dimension
) {
1158 TXT( "\nDimension: " );
1159 UID( src
->SrcRegister
.Dimension
);
1162 if( deflt
|| fs
->SrcRegister
.Index
!= src
->SrcRegister
.Index
) {
1163 TXT( "\nIndex : " );
1164 SID( src
->SrcRegister
.Index
);
1167 if( deflt
|| fs
->SrcRegister
.Extended
!= src
->SrcRegister
.Extended
) {
1168 TXT( "\nExtended : " );
1169 UID( src
->SrcRegister
.Extended
);
1173 if( deflt
|| tgsi_compare_src_register_ext_swz( src
->SrcRegisterExtSwz
, fs
->SrcRegisterExtSwz
) ) {
1176 ENM( src
->SrcRegisterExtSwz
.Type
, TGSI_SRC_REGISTER_EXTS
);
1177 if( deflt
|| fs
->SrcRegisterExtSwz
.ExtSwizzleX
!= src
->SrcRegisterExtSwz
.ExtSwizzleX
) {
1178 TXT( "\nExtSwizzleX: " );
1179 ENM( src
->SrcRegisterExtSwz
.ExtSwizzleX
, TGSI_EXTSWIZZLES
);
1181 if( deflt
|| fs
->SrcRegisterExtSwz
.ExtSwizzleY
!= src
->SrcRegisterExtSwz
.ExtSwizzleY
) {
1182 TXT( "\nExtSwizzleY: " );
1183 ENM( src
->SrcRegisterExtSwz
.ExtSwizzleY
, TGSI_EXTSWIZZLES
);
1185 if( deflt
|| fs
->SrcRegisterExtSwz
.ExtSwizzleZ
!= src
->SrcRegisterExtSwz
.ExtSwizzleZ
) {
1186 TXT( "\nExtSwizzleZ: " );
1187 ENM( src
->SrcRegisterExtSwz
.ExtSwizzleZ
, TGSI_EXTSWIZZLES
);
1189 if( deflt
|| fs
->SrcRegisterExtSwz
.ExtSwizzleW
!= src
->SrcRegisterExtSwz
.ExtSwizzleW
) {
1190 TXT( "\nExtSwizzleW: " );
1191 ENM( src
->SrcRegisterExtSwz
.ExtSwizzleW
, TGSI_EXTSWIZZLES
);
1193 if( deflt
|| fs
->SrcRegisterExtSwz
.NegateX
!= src
->SrcRegisterExtSwz
.NegateX
) {
1194 TXT( "\nNegateX : " );
1195 UID( src
->SrcRegisterExtSwz
.NegateX
);
1197 if( deflt
|| fs
->SrcRegisterExtSwz
.NegateY
!= src
->SrcRegisterExtSwz
.NegateY
) {
1198 TXT( "\nNegateY : " );
1199 UID( src
->SrcRegisterExtSwz
.NegateY
);
1201 if( deflt
|| fs
->SrcRegisterExtSwz
.NegateZ
!= src
->SrcRegisterExtSwz
.NegateZ
) {
1202 TXT( "\nNegateZ : " );
1203 UID( src
->SrcRegisterExtSwz
.NegateZ
);
1205 if( deflt
|| fs
->SrcRegisterExtSwz
.NegateW
!= src
->SrcRegisterExtSwz
.NegateW
) {
1206 TXT( "\nNegateW : " );
1207 UID( src
->SrcRegisterExtSwz
.NegateW
);
1209 if( deflt
|| fs
->SrcRegisterExtSwz
.ExtDivide
!= src
->SrcRegisterExtSwz
.ExtDivide
) {
1210 TXT( "\nExtDivide : " );
1211 ENM( src
->SrcRegisterExtSwz
.ExtDivide
, TGSI_EXTSWIZZLES
);
1214 TXT( "\nPadding : " );
1215 UIX( src
->SrcRegisterExtSwz
.Padding
);
1216 if( deflt
|| fs
->SrcRegisterExtSwz
.Extended
!= src
->SrcRegisterExtSwz
.Extended
) {
1217 TXT( "\nExtended : " );
1218 UID( src
->SrcRegisterExtSwz
.Extended
);
1223 if( deflt
|| tgsi_compare_src_register_ext_mod( src
->SrcRegisterExtMod
, fs
->SrcRegisterExtMod
) ) {
1226 ENM( src
->SrcRegisterExtMod
.Type
, TGSI_SRC_REGISTER_EXTS
);
1227 if( deflt
|| fs
->SrcRegisterExtMod
.Complement
!= src
->SrcRegisterExtMod
.Complement
) {
1228 TXT( "\nComplement: " );
1229 UID( src
->SrcRegisterExtMod
.Complement
);
1231 if( deflt
|| fs
->SrcRegisterExtMod
.Bias
!= src
->SrcRegisterExtMod
.Bias
) {
1233 UID( src
->SrcRegisterExtMod
.Bias
);
1235 if( deflt
|| fs
->SrcRegisterExtMod
.Scale2X
!= src
->SrcRegisterExtMod
.Scale2X
) {
1236 TXT( "\nScale2X : " );
1237 UID( src
->SrcRegisterExtMod
.Scale2X
);
1239 if( deflt
|| fs
->SrcRegisterExtMod
.Absolute
!= src
->SrcRegisterExtMod
.Absolute
) {
1240 TXT( "\nAbsolute : " );
1241 UID( src
->SrcRegisterExtMod
.Absolute
);
1243 if( deflt
|| fs
->SrcRegisterExtMod
.Negate
!= src
->SrcRegisterExtMod
.Negate
) {
1244 TXT( "\nNegate : " );
1245 UID( src
->SrcRegisterExtMod
.Negate
);
1248 TXT( "\nPadding : " );
1249 UIX( src
->SrcRegisterExtMod
.Padding
);
1250 if( deflt
|| fs
->SrcRegisterExtMod
.Extended
!= src
->SrcRegisterExtMod
.Extended
) {
1251 TXT( "\nExtended : " );
1252 UID( src
->SrcRegisterExtMod
.Extended
);
1261 const struct tgsi_token
*tokens
,
1264 struct text_dump _dump
;
1265 struct text_dump
*dump
= &_dump
;
1266 struct tgsi_parse_context parse
;
1267 struct tgsi_full_instruction fi
;
1268 struct tgsi_full_declaration fd
;
1269 GLuint verbose
= flags
& TGSI_DUMP_VERBOSE
;
1270 GLuint ignored
= !(flags
& TGSI_DUMP_NO_IGNORED
);
1271 GLuint deflt
= !(flags
& TGSI_DUMP_NO_DEFAULT
);
1276 static GLuint counter
= 0;
1279 sprintf( buffer
, "tgsi-dump-%.4u.txt", counter
++ );
1280 dump
->file
= fopen( buffer
, "wt" );
1282 dump
->file
= stderr
;
1288 assert(strcmp(TGSI_OPCODES
[TGSI_OPCODE_CONT
], "OPCODE_CONT") == 0);
1290 tgsi_parse_init( &parse
, tokens
);
1292 TXT( "tgsi-dump begin -----------------" );
1295 ENM( parse
.FullHeader
.Processor
.Processor
, TGSI_PROCESSOR_TYPES_SHORT
);
1297 UID( parse
.FullVersion
.Version
.MajorVersion
);
1299 UID( parse
.FullVersion
.Version
.MinorVersion
);
1302 TXT( "\nMajorVersion: " );
1303 UID( parse
.FullVersion
.Version
.MajorVersion
);
1304 TXT( "\nMinorVersion: " );
1305 UID( parse
.FullVersion
.Version
.MinorVersion
);
1308 TXT( "\nHeaderSize: " );
1309 UID( parse
.FullHeader
.Header
.HeaderSize
);
1310 TXT( "\nBodySize : " );
1311 UID( parse
.FullHeader
.Header
.BodySize
);
1312 TXT( "\nProcessor : " );
1313 ENM( parse
.FullHeader
.Processor
.Processor
, TGSI_PROCESSOR_TYPES
);
1317 fi
= tgsi_default_full_instruction();
1318 fd
= tgsi_default_full_declaration();
1320 while( !tgsi_parse_end_of_tokens( &parse
) ) {
1321 tgsi_parse_token( &parse
);
1323 switch( parse
.FullToken
.Token
.Type
) {
1324 case TGSI_TOKEN_TYPE_DECLARATION
:
1325 dump_declaration_short(
1327 &parse
.FullToken
.FullDeclaration
);
1330 case TGSI_TOKEN_TYPE_IMMEDIATE
:
1331 dump_immediate_short(
1333 &parse
.FullToken
.FullImmediate
);
1336 case TGSI_TOKEN_TYPE_INSTRUCTION
:
1337 dump_instruction_short(
1339 &parse
.FullToken
.FullInstruction
,
1350 ENM( parse
.FullToken
.Token
.Type
, TGSI_TOKEN_TYPES
);
1353 UID( parse
.FullToken
.Token
.Size
);
1354 if( deflt
|| parse
.FullToken
.Token
.Extended
) {
1355 TXT( "\nExtended : " );
1356 UID( parse
.FullToken
.Token
.Extended
);
1360 switch( parse
.FullToken
.Token
.Type
) {
1361 case TGSI_TOKEN_TYPE_DECLARATION
:
1362 dump_declaration_verbose(
1364 &parse
.FullToken
.FullDeclaration
,
1370 case TGSI_TOKEN_TYPE_IMMEDIATE
:
1371 dump_immediate_verbose(
1373 &parse
.FullToken
.FullImmediate
,
1377 case TGSI_TOKEN_TYPE_INSTRUCTION
:
1378 dump_instruction_verbose(
1380 &parse
.FullToken
.FullInstruction
,
1394 TXT( "\ntgsi-dump end -------------------\n" );
1396 tgsi_parse_free( &parse
);
1398 if (dump
->file
!= stderr
&&
1399 dump
->file
!= stdout
)
1400 fclose( dump
->file
);