Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/freedreno/rnn/rnn.h
4565 views
1
/*
2
* Copyright (C) 2010 Marcin Koƛcielnicki <[email protected]>
3
* Copyright (C) 2010 Luca Barbieri <[email protected]>
4
* All Rights Reserved.
5
*
6
* Permission is hereby granted, free of charge, to any person obtaining a
7
* copy of this software and associated documentation files (the "Software"),
8
* to deal in the Software without restriction, including without limitation
9
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
10
* and/or sell copies of the Software, and to permit persons to whom the
11
* Software is furnished to do so, subject to the following conditions:
12
*
13
* The above copyright notice and this permission notice (including the next
14
* paragraph) shall be included in all copies or substantial portions of the
15
* Software.
16
*
17
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
* OTHER DEALINGS IN THE SOFTWARE.
24
*/
25
26
#ifndef RNN_H
27
#define RNN_H
28
29
#include <stdint.h>
30
#include <stdlib.h>
31
32
struct rnnauthor {
33
char* name;
34
char* email;
35
char* contributions;
36
char* license;
37
char** nicknames;
38
int nicknamesnum;
39
int nicknamesmax;
40
};
41
42
struct rnncopyright {
43
unsigned firstyear;
44
char* license;
45
struct rnnauthor **authors;
46
int authorsnum;
47
int authorsmax;
48
};
49
50
struct rnndb {
51
struct rnncopyright copyright;
52
struct rnnenum **enums;
53
int enumsnum;
54
int enumsmax;
55
struct rnnbitset **bitsets;
56
int bitsetsnum;
57
int bitsetsmax;
58
struct rnndomain **domains;
59
int domainsnum;
60
int domainsmax;
61
struct rnngroup **groups;
62
int groupsnum;
63
int groupsmax;
64
struct rnnspectype **spectypes;
65
int spectypesnum;
66
int spectypesmax;
67
char **files;
68
int filesnum;
69
int filesmax;
70
int estatus;
71
};
72
73
struct rnnvarset {
74
struct rnnenum *venum;
75
int *variants;
76
};
77
78
struct rnnvarinfo {
79
char *prefixstr;
80
char *varsetstr;
81
char *variantsstr;
82
int dead;
83
struct rnnenum *prefenum;
84
char *prefix;
85
struct rnnvarset **varsets;
86
int varsetsnum;
87
int varsetsmax;
88
};
89
90
struct rnnenum {
91
char *name;
92
int bare;
93
int isinline;
94
struct rnnvarinfo varinfo;
95
struct rnnvalue **vals;
96
int valsnum;
97
int valsmax;
98
char *fullname;
99
int prepared;
100
char *file;
101
};
102
103
struct rnnvalue {
104
char *name;
105
int valvalid;
106
uint64_t value;
107
struct rnnvarinfo varinfo;
108
char *fullname;
109
char *file;
110
};
111
112
struct rnntypeinfo {
113
char *name;
114
enum rnnttype {
115
RNN_TTYPE_INVALID,
116
RNN_TTYPE_INLINE_ENUM,
117
RNN_TTYPE_INLINE_BITSET,
118
RNN_TTYPE_ENUM,
119
RNN_TTYPE_BITSET,
120
RNN_TTYPE_SPECTYPE,
121
RNN_TTYPE_HEX,
122
RNN_TTYPE_INT,
123
RNN_TTYPE_UINT,
124
RNN_TTYPE_FLOAT,
125
RNN_TTYPE_BOOLEAN,
126
RNN_TTYPE_FIXED,
127
RNN_TTYPE_UFIXED,
128
RNN_TTYPE_A3XX_REGID,
129
} type;
130
struct rnnenum *eenum;
131
struct rnnbitset *ebitset;
132
struct rnnspectype *spectype;
133
struct rnnbitfield **bitfields;
134
int bitfieldsnum;
135
int bitfieldsmax;
136
struct rnnvalue **vals;
137
int valsnum;
138
int valsmax;
139
int shr, low, high;
140
uint64_t min, max, align, radix;
141
int addvariant;
142
int minvalid, maxvalid, alignvalid, radixvalid;
143
};
144
145
static inline uint64_t typeinfo_mask(struct rnntypeinfo *ti)
146
{
147
if (ti->high == 63)
148
return -(1ULL << ti->low);
149
else
150
return (1ULL << (ti->high + 1)) - (1ULL << ti->low);
151
}
152
153
struct rnnbitset {
154
char *name;
155
int bare;
156
int isinline;
157
struct rnnvarinfo varinfo;
158
struct rnnbitfield **bitfields;
159
int bitfieldsnum;
160
int bitfieldsmax;
161
char *fullname;
162
char *file;
163
};
164
165
struct rnnbitfield {
166
char *name;
167
struct rnnvarinfo varinfo;
168
struct rnntypeinfo typeinfo;
169
char *fullname;
170
char *file;
171
};
172
173
struct rnndomain {
174
char *name;
175
int bare;
176
int width;
177
uint64_t size;
178
int sizevalid;
179
struct rnnvarinfo varinfo;
180
struct rnndelem **subelems;
181
int subelemsnum;
182
int subelemsmax;
183
char *fullname;
184
char *file;
185
};
186
187
struct rnngroup {
188
char *name;
189
struct rnndelem **subelems;
190
int subelemsnum;
191
int subelemsmax;
192
};
193
194
struct rnndelem {
195
enum rnnetype {
196
RNN_ETYPE_REG,
197
RNN_ETYPE_ARRAY,
198
RNN_ETYPE_STRIPE,
199
RNN_ETYPE_USE_GROUP,
200
} type;
201
char *name;
202
int width;
203
enum rnnaccess {
204
RNN_ACCESS_R,
205
RNN_ACCESS_W,
206
RNN_ACCESS_RW,
207
} access;
208
uint64_t offset;
209
uint64_t *offsets; /* for "array" with irregular offsets */
210
int offsetsnum;
211
int offsetsmax;
212
char *doffset;
213
char **doffsets;
214
int doffsetsnum;
215
int doffsetsmax;
216
uint64_t length;
217
uint64_t stride;
218
struct rnndelem **subelems;
219
int subelemsnum;
220
int subelemsmax;
221
struct rnnvarinfo varinfo;
222
struct rnntypeinfo typeinfo;
223
struct rnnenum *index; /* for arrays, for symbolic idx values */
224
char *fullname;
225
char *file;
226
};
227
228
struct rnnspectype {
229
char *name;
230
struct rnntypeinfo typeinfo;
231
char *file;
232
};
233
234
void rnn_init(void);
235
struct rnndb *rnn_newdb(void);
236
void rnn_parsefile (struct rnndb *db, char *file);
237
void rnn_prepdb (struct rnndb *db);
238
struct rnnenum *rnn_findenum (struct rnndb *db, const char *name);
239
struct rnnbitset *rnn_findbitset (struct rnndb *db, const char *name);
240
struct rnndomain *rnn_finddomain (struct rnndb *db, const char *name);
241
struct rnnspectype *rnn_findspectype (struct rnndb *db, const char *name);
242
243
#endif
244
245