summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/tgsi/util/tgsi_parse.h
blob: 9372da8d5d14c89f1f8c0bf33bc0cfb3ec3ce1cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#if !defined TGSI_PARSE_H
#define TGSI_PARSE_H

#if defined __cplusplus
extern "C" {
#endif // defined __cplusplus

struct tgsi_full_version
{
   struct tgsi_version  Version;
};

struct tgsi_full_header
{
   struct tgsi_header      Header;
   struct tgsi_processor   Processor;
};

struct tgsi_full_dst_register
{
   struct tgsi_dst_register               DstRegister;
   struct tgsi_dst_register_ext_concode   DstRegisterExtConcode;
   struct tgsi_dst_register_ext_modulate  DstRegisterExtModulate;
};

struct tgsi_full_src_register
{
   struct tgsi_src_register         SrcRegister;
   struct tgsi_src_register_ext_swz SrcRegisterExtSwz;
   struct tgsi_src_register_ext_mod SrcRegisterExtMod;
   struct tgsi_src_register         SrcRegisterInd;
   struct tgsi_dimension            SrcRegisterDim;
   struct tgsi_src_register         SrcRegisterDimInd;
};

struct tgsi_full_declaration
{
   struct tgsi_declaration Declaration;
   union
   {
      struct tgsi_declaration_range DeclarationRange;
      struct tgsi_declaration_mask  DeclarationMask;
   } u;
   struct tgsi_declaration_interpolation  Interpolation;
   struct tgsi_declaration_semantic       Semantic;
};

struct tgsi_full_immediate
{
   struct tgsi_immediate   Immediate;
   union
   {
      void                          *Pointer;
      struct tgsi_immediate_float32 *ImmediateFloat32;
   } u;
};

#define TGSI_FULL_MAX_DST_REGISTERS 2
#define TGSI_FULL_MAX_SRC_REGISTERS 3

struct tgsi_full_instruction
{
   struct tgsi_instruction             Instruction;
   struct tgsi_instruction_ext_nv      InstructionExtNv;
   struct tgsi_instruction_ext_label   InstructionExtLabel;
   struct tgsi_instruction_ext_texture InstructionExtTexture;
   struct tgsi_full_dst_register       FullDstRegisters[TGSI_FULL_MAX_DST_REGISTERS];
   struct tgsi_full_src_register       FullSrcRegisters[TGSI_FULL_MAX_SRC_REGISTERS];
};

union tgsi_full_token
{
   struct tgsi_token             Token;
   struct tgsi_full_declaration  FullDeclaration;
   struct tgsi_full_immediate    FullImmediate;
   struct tgsi_full_instruction  FullInstruction;
};

void
tgsi_full_token_init(
   union tgsi_full_token *full_token );

void
tgsi_full_token_free(
   union tgsi_full_token *full_token );

struct tgsi_parse_context
{
   const struct tgsi_token    *Tokens;
   unsigned                   Position;
   struct tgsi_full_version   FullVersion;
   struct tgsi_full_header    FullHeader;
   union tgsi_full_token      FullToken;
};

#define TGSI_PARSE_OK      0
#define TGSI_PARSE_ERROR   1

unsigned
tgsi_parse_init(
   struct tgsi_parse_context *ctx,
   const struct tgsi_token *tokens );

void
tgsi_parse_free(
   struct tgsi_parse_context *ctx );

boolean
tgsi_parse_end_of_tokens(
   struct tgsi_parse_context *ctx );

void
tgsi_parse_token(
   struct tgsi_parse_context *ctx );

#if defined __cplusplus
} // extern "C"
#endif // defined __cplusplus

#endif // !defined TGSI_PARSE_H