Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/freedreno/isa/ir3-cat5.xml
4564 views
1
<?xml version="1.0" encoding="UTF-8"?>
2
<!--
3
Copyright © 2020 Google, Inc.
4
5
Permission is hereby granted, free of charge, to any person obtaining a
6
copy of this software and associated documentation files (the "Software"),
7
to deal in the Software without restriction, including without limitation
8
the rights to use, copy, modify, merge, publish, distribute, sublicense,
9
and/or sell copies of the Software, and to permit persons to whom the
10
Software is furnished to do so, subject to the following conditions:
11
12
The above copyright notice and this permission notice (including the next
13
paragraph) shall be included in all copies or substantial portions of the
14
Software.
15
16
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
SOFTWARE.
23
-->
24
25
<isa>
26
27
<!--
28
Cat5 Instructions: texture instructions
29
-->
30
31
<bitset name="#cat5-s2en-bindless-base" size="1">
32
<doc>
33
The BASE field is actually split across BASE_LO and BASE_HI,
34
but '.baseN' should only appear in the bindless case.. the
35
easiest way to accomplish that is by splitting it out into a
36
bitset. We just arbitrarily map this to BASE_LO
37
</doc>
38
<override>
39
<expr>{BINDLESS}</expr>
40
<display>
41
.base{BASE}
42
</display>
43
</override>
44
<display/>
45
<field name="BASE_LO" pos="0" type="uint"/>
46
<derived name="BASE" type="uint">
47
<expr>({BASE_HI} * 2) | {BASE_LO}</expr>
48
</derived>
49
<encode type="struct ir3_instruction *">
50
<map name="BASE_LO">src->cat5.tex_base &amp; 0x1</map>
51
</encode>
52
</bitset>
53
54
<bitset name="#instruction-cat5" extends="#instruction">
55
<override>
56
<expr>{S2EN_BINDLESS}</expr>
57
<doc>
58
The s2en (indirect) or bindless case
59
</doc>
60
<display>
61
{SY}{JP}{NAME}{3D}{A}{O}{P}{S}{S2EN}{UNIFORM}{NONUNIFORM}{BASE} {TYPE}({WRMASK}){DST_HALF}{DST}{SRC1}{SRC2}{SRC3}{A1}
62
</display>
63
<field name="BASE_HI" low="19" high="20" type="uint"/>
64
<field name="SRC3" low="21" high="28" type="#cat5-src3">
65
<param name="BINDLESS"/>
66
<param name="DESC_MODE"/>
67
<param name="HAS_SAMP"/>
68
<param name="HAS_TEX"/>
69
</field>
70
<field name="DESC_MODE" low="29" high="31" type="#cat5-s2en-bindless-desc-mode"/>
71
<field name="BASE" pos="47" type="#cat5-s2en-bindless-base">
72
<param name="BINDLESS"/>
73
<param name="BASE_HI"/>
74
</field>
75
<derived name="BINDLESS" expr="#cat5-s2enb-is-bindless" type="bool"/>
76
<derived name="S2EN" expr="#cat5-s2enb-is-indirect" type="bool" display=".s2en"/>
77
<derived name="UNIFORM" expr="#cat5-s2enb-is-uniform" type="bool" display=".uniform"/>
78
<derived name="NONUNIFORM" expr="#cat5-s2enb-is-nonuniform" type="bool" display=".nonuniform"/>
79
<derived name="A1" expr="#cat5-s2enb-uses_a1" type="bool" display=", a1.x"/>
80
</override>
81
82
<doc>
83
The "normal" case, ie. not s2en (indirect) and/or bindless
84
</doc>
85
<display>
86
{SY}{JP}{NAME}{3D}{A}{O}{P}{S} {TYPE}({WRMASK}){DST_HALF}{DST}{SRC1}{SRC2}{SAMP}{TEX}
87
</display>
88
<derived name="DST_HALF" type="bool" display="h">
89
<expr>
90
({TYPE} == 0) /* f16 */ ||
91
({TYPE} == 2) /* u16 */ ||
92
({TYPE} == 4) /* s16 */ ||
93
({TYPE} == 6) /* u8 */ ||
94
({TYPE} == 7) /* s8 */
95
</expr>
96
</derived>
97
<field name="FULL" pos="0" type="bool"/>
98
<derived name="HALF" expr="#multisrc-half" type="bool" display="h"/>
99
<field name="SRC1" low="1" high="8" type="#cat5-src1">
100
<param name="NUM_SRC"/>
101
<param name="HALF"/>
102
</field>
103
<field name="SRC2" low="9" high="16" type="#cat5-src2">
104
<param name="NUM_SRC"/>
105
<param name="HALF"/>
106
<param name="O"/>
107
</field>
108
<!--
109
TODO remainder of first 32b differ depending on s2en/bindless..
110
possibly use overrides? Need to sort-out how to display..
111
112
Note b17 seems to show up in some blob traces (samgpN), need
113
to figure out what this bit does
114
-->
115
<pattern low="17" high="18">0x</pattern>
116
<assert low="19" high="20">00</assert> <!-- BASE_HI -->
117
<field name="SAMP" low="21" high="24" type="#cat5-samp">
118
<param name="HAS_SAMP"/>
119
</field>
120
<field name="TEX" low="25" high="31" type="#cat5-tex">
121
<param name="HAS_TEX"/>
122
</field>
123
124
<field name="DST" low="32" high="39" type="#reg-gpr"/>
125
<field name="WRMASK" low="40" high="43" type="#wrmask"/>
126
<field name="TYPE" low="44" high="46" type="#cat5-type">
127
<param name="HAS_TYPE"/>
128
</field>
129
<assert pos="47">0</assert> <!-- BASE_LO -->
130
<field name="3D" pos="48" type="bool" display=".3d"/>
131
<field name="A" pos="49" type="bool" display=".a"/>
132
<field name="S" pos="50" type="bool" display=".s"/>
133
<field name="S2EN_BINDLESS" pos="51" type="bool"/>
134
<field name="O" pos="52" type="bool" display=".o"/>
135
<field name="P" pos="53" type="bool" display=".p"/>
136
<!-- OPC -->
137
<field name="JP" pos="59" type="bool" display="(jp)"/>
138
<field name="SY" pos="60" type="bool" display="(sy)"/>
139
<pattern low="61" high="63">101</pattern> <!-- cat5 -->
140
<encode>
141
<map name="FULL">extract_cat5_FULL(src)</map>
142
<map name="TEX">src</map>
143
<map name="SAMP">src</map>
144
<map name="WRMASK">src->dsts[0]->wrmask</map>
145
<map name="BASE">src</map>
146
<map name="TYPE">src</map>
147
<map name="BASE_HI">src->cat5.tex_base >> 1</map>
148
<map name="3D">!!(src->flags &amp; IR3_INSTR_3D)</map>
149
<map name="A">!!(src->flags &amp; IR3_INSTR_A)</map>
150
<map name="S">!!(src->flags &amp; IR3_INSTR_S)</map>
151
<map name="S2EN_BINDLESS">!!(src->flags &amp; (IR3_INSTR_S2EN | IR3_INSTR_B))</map>
152
<map name="O">!!(src->flags &amp; IR3_INSTR_O)</map>
153
<map name="P">!!(src->flags &amp; IR3_INSTR_P)</map>
154
<map name="DESC_MODE">extract_cat5_DESC_MODE(src)</map>
155
<!--
156
TODO the src order is currently a bit messy due to ir3 using srcs[0]
157
for s2en src in the s2en case
158
-->
159
<map name="SRC1">extract_cat5_SRC(src, 0)</map>
160
<map name="SRC2">extract_cat5_SRC(src, 1)</map>
161
<map name="SRC3">(src->srcs_count > 0) ? src->srcs[0] : NULL</map>
162
</encode>
163
</bitset>
164
165
<bitset name="isam" extends="#instruction-cat5">
166
<pattern low="54" high="58">00000</pattern>
167
<derived name="NUM_SRC" expr="#one" type="uint"/>
168
<derived name="HAS_SAMP" expr="#true" type="bool"/>
169
<derived name="HAS_TEX" expr="#true" type="bool"/>
170
<derived name="HAS_TYPE" expr="#true" type="bool"/>
171
</bitset>
172
173
<bitset name="isaml" extends="#instruction-cat5">
174
<pattern low="54" high="58">00001</pattern>
175
<derived name="NUM_SRC" expr="#two" type="uint"/>
176
<derived name="HAS_SAMP" expr="#true" type="bool"/>
177
<derived name="HAS_TEX" expr="#true" type="bool"/>
178
<derived name="HAS_TYPE" expr="#true" type="bool"/>
179
</bitset>
180
181
<bitset name="isamm" extends="#instruction-cat5">
182
<pattern low="54" high="58">00010</pattern>
183
<derived name="NUM_SRC" expr="#one" type="uint"/>
184
<derived name="HAS_SAMP" expr="#true" type="bool"/>
185
<derived name="HAS_TEX" expr="#true" type="bool"/>
186
<derived name="HAS_TYPE" expr="#true" type="bool"/>
187
</bitset>
188
189
<bitset name="sam" extends="#instruction-cat5">
190
<pattern low="54" high="58">00011</pattern>
191
<derived name="NUM_SRC" expr="#one" type="uint"/>
192
<derived name="HAS_SAMP" expr="#true" type="bool"/>
193
<derived name="HAS_TEX" expr="#true" type="bool"/>
194
<derived name="HAS_TYPE" expr="#true" type="bool"/>
195
</bitset>
196
197
<bitset name="samb" extends="#instruction-cat5">
198
<pattern low="54" high="58">00100</pattern>
199
<derived name="NUM_SRC" expr="#two" type="uint"/>
200
<derived name="HAS_SAMP" expr="#true" type="bool"/>
201
<derived name="HAS_TEX" expr="#true" type="bool"/>
202
<derived name="HAS_TYPE" expr="#true" type="bool"/>
203
</bitset>
204
205
<bitset name="saml" extends="#instruction-cat5">
206
<pattern low="54" high="58">00101</pattern>
207
<derived name="NUM_SRC" expr="#two" type="uint"/>
208
<derived name="HAS_SAMP" expr="#true" type="bool"/>
209
<derived name="HAS_TEX" expr="#true" type="bool"/>
210
<derived name="HAS_TYPE" expr="#true" type="bool"/>
211
</bitset>
212
213
<bitset name="samgq" extends="#instruction-cat5">
214
<pattern low="54" high="58">00110</pattern>
215
<derived name="NUM_SRC" expr="#one" type="uint"/>
216
<derived name="HAS_SAMP" expr="#true" type="bool"/>
217
<derived name="HAS_TEX" expr="#true" type="bool"/>
218
<derived name="HAS_TYPE" expr="#true" type="bool"/>
219
</bitset>
220
221
<bitset name="getlod" extends="#instruction-cat5">
222
<pattern low="54" high="58">00111</pattern>
223
<derived name="NUM_SRC" expr="#one" type="uint"/>
224
<derived name="HAS_SAMP" expr="#true" type="bool"/>
225
<derived name="HAS_TEX" expr="#true" type="bool"/>
226
<derived name="HAS_TYPE" expr="#true" type="bool"/>
227
</bitset>
228
229
<bitset name="conv" extends="#instruction-cat5">
230
<pattern low="54" high="58">01000</pattern>
231
<derived name="NUM_SRC" expr="#two" type="uint"/>
232
<derived name="HAS_SAMP" expr="#true" type="bool"/>
233
<derived name="HAS_TEX" expr="#true" type="bool"/>
234
<derived name="HAS_TYPE" expr="#true" type="bool"/>
235
</bitset>
236
237
<bitset name="convm" extends="#instruction-cat5">
238
<pattern low="54" high="58">01001</pattern>
239
<derived name="NUM_SRC" expr="#two" type="uint"/>
240
<derived name="HAS_SAMP" expr="#true" type="bool"/>
241
<derived name="HAS_TEX" expr="#true" type="bool"/>
242
<derived name="HAS_TYPE" expr="#true" type="bool"/>
243
</bitset>
244
245
<bitset name="getsize" extends="#instruction-cat5">
246
<pattern low="54" high="58">01010</pattern>
247
<derived name="NUM_SRC" expr="#one" type="uint"/>
248
<derived name="HAS_SAMP" expr="#false" type="bool"/>
249
<derived name="HAS_TEX" expr="#true" type="bool"/>
250
<derived name="HAS_TYPE" expr="#true" type="bool"/>
251
</bitset>
252
253
<bitset name="getbuf" extends="#instruction-cat5">
254
<pattern low="54" high="58">01011</pattern>
255
<derived name="NUM_SRC" expr="#zero" type="uint"/>
256
<derived name="HAS_SAMP" expr="#false" type="bool"/>
257
<derived name="HAS_TEX" expr="#true" type="bool"/>
258
<derived name="HAS_TYPE" expr="#true" type="bool"/>
259
</bitset>
260
261
<bitset name="getpos" extends="#instruction-cat5">
262
<pattern low="54" high="58">01100</pattern>
263
<derived name="NUM_SRC" expr="#one" type="uint"/>
264
<derived name="HAS_SAMP" expr="#false" type="bool"/>
265
<derived name="HAS_TEX" expr="#true" type="bool"/>
266
<derived name="HAS_TYPE" expr="#true" type="bool"/>
267
</bitset>
268
269
<bitset name="getinfo" extends="#instruction-cat5">
270
<pattern low="54" high="58">01101</pattern>
271
<derived name="NUM_SRC" expr="#zero" type="uint"/>
272
<derived name="HAS_SAMP" expr="#false" type="bool"/>
273
<derived name="HAS_TEX" expr="#true" type="bool"/>
274
<derived name="HAS_TYPE" expr="#true" type="bool"/>
275
</bitset>
276
277
<bitset name="dsx" extends="#instruction-cat5">
278
<pattern low="54" high="58">01110</pattern>
279
<derived name="NUM_SRC" expr="#one" type="uint"/>
280
<derived name="HAS_SAMP" expr="#false" type="bool"/>
281
<derived name="HAS_TEX" expr="#false" type="bool"/>
282
<derived name="HAS_TYPE" expr="#true" type="bool"/>
283
</bitset>
284
285
<bitset name="dsy" extends="#instruction-cat5">
286
<pattern low="54" high="58">01111</pattern>
287
<derived name="NUM_SRC" expr="#one" type="uint"/>
288
<derived name="HAS_SAMP" expr="#false" type="bool"/>
289
<derived name="HAS_TEX" expr="#false" type="bool"/>
290
<derived name="HAS_TYPE" expr="#true" type="bool"/>
291
</bitset>
292
293
<bitset name="gather4r" extends="#instruction-cat5">
294
<pattern low="54" high="58">10000</pattern>
295
<derived name="NUM_SRC" expr="#one" type="uint"/>
296
<derived name="HAS_SAMP" expr="#true" type="bool"/>
297
<derived name="HAS_TEX" expr="#true" type="bool"/>
298
<derived name="HAS_TYPE" expr="#true" type="bool"/>
299
</bitset>
300
301
<bitset name="gather4g" extends="#instruction-cat5">
302
<pattern low="54" high="58">10001</pattern>
303
<derived name="NUM_SRC" expr="#one" type="uint"/>
304
<derived name="HAS_SAMP" expr="#true" type="bool"/>
305
<derived name="HAS_TEX" expr="#true" type="bool"/>
306
<derived name="HAS_TYPE" expr="#true" type="bool"/>
307
</bitset>
308
309
<bitset name="gather4b" extends="#instruction-cat5">
310
<pattern low="54" high="58">10010</pattern>
311
<derived name="NUM_SRC" expr="#one" type="uint"/>
312
<derived name="HAS_SAMP" expr="#true" type="bool"/>
313
<derived name="HAS_TEX" expr="#true" type="bool"/>
314
<derived name="HAS_TYPE" expr="#true" type="bool"/>
315
</bitset>
316
317
<bitset name="gather4a" extends="#instruction-cat5">
318
<pattern low="54" high="58">10011</pattern>
319
<derived name="NUM_SRC" expr="#one" type="uint"/>
320
<derived name="HAS_SAMP" expr="#true" type="bool"/>
321
<derived name="HAS_TEX" expr="#true" type="bool"/>
322
<derived name="HAS_TYPE" expr="#true" type="bool"/>
323
</bitset>
324
325
<bitset name="samgp0" extends="#instruction-cat5">
326
<pattern low="54" high="58">10100</pattern>
327
<derived name="NUM_SRC" expr="#one" type="uint"/>
328
<derived name="HAS_SAMP" expr="#true" type="bool"/>
329
<derived name="HAS_TEX" expr="#true" type="bool"/>
330
<derived name="HAS_TYPE" expr="#true" type="bool"/>
331
</bitset>
332
333
<bitset name="samgp1" extends="#instruction-cat5">
334
<pattern low="54" high="58">10101</pattern>
335
<derived name="NUM_SRC" expr="#one" type="uint"/>
336
<derived name="HAS_SAMP" expr="#true" type="bool"/>
337
<derived name="HAS_TEX" expr="#true" type="bool"/>
338
<derived name="HAS_TYPE" expr="#true" type="bool"/>
339
</bitset>
340
341
<bitset name="samgp2" extends="#instruction-cat5">
342
<pattern low="54" high="58">10110</pattern>
343
<derived name="NUM_SRC" expr="#one" type="uint"/>
344
<derived name="HAS_SAMP" expr="#true" type="bool"/>
345
<derived name="HAS_TEX" expr="#true" type="bool"/>
346
<derived name="HAS_TYPE" expr="#true" type="bool"/>
347
</bitset>
348
349
<bitset name="samgp3" extends="#instruction-cat5">
350
<pattern low="54" high="58">10111</pattern>
351
<derived name="NUM_SRC" expr="#one" type="uint"/>
352
<derived name="HAS_SAMP" expr="#true" type="bool"/>
353
<derived name="HAS_TEX" expr="#true" type="bool"/>
354
<derived name="HAS_TYPE" expr="#true" type="bool"/>
355
</bitset>
356
357
<bitset name="dsxpp.1" extends="#instruction-cat5">
358
<pattern low="54" high="58">11000</pattern>
359
<derived name="NUM_SRC" expr="#one" type="uint"/>
360
<derived name="HAS_SAMP" expr="#false" type="bool"/>
361
<derived name="HAS_TEX" expr="#false" type="bool"/>
362
<derived name="HAS_TYPE" expr="#false" type="bool"/>
363
</bitset>
364
365
<bitset name="dsypp.1" extends="#instruction-cat5">
366
<pattern low="54" high="58">11001</pattern>
367
<derived name="NUM_SRC" expr="#one" type="uint"/>
368
<derived name="HAS_SAMP" expr="#false" type="bool"/>
369
<derived name="HAS_TEX" expr="#false" type="bool"/>
370
<derived name="HAS_TYPE" expr="#false" type="bool"/>
371
</bitset>
372
373
<bitset name="rgetpos" extends="#instruction-cat5">
374
<pattern low="54" high="58">11010</pattern>
375
<derived name="NUM_SRC" expr="#one" type="uint"/>
376
<derived name="HAS_SAMP" expr="#false" type="bool"/>
377
<derived name="HAS_TEX" expr="#false" type="bool"/>
378
<derived name="HAS_TYPE" expr="#true" type="bool"/>
379
</bitset>
380
381
<bitset name="rgetinfo" extends="#instruction-cat5">
382
<pattern low="54" high="58">11011</pattern>
383
<derived name="NUM_SRC" expr="#zero" type="uint"/>
384
<derived name="HAS_SAMP" expr="#false" type="bool"/>
385
<derived name="HAS_TEX" expr="#false" type="bool"/>
386
<derived name="HAS_TYPE" expr="#true" type="bool"/>
387
</bitset>
388
389
390
<!--
391
All the magic for conditionally displaying various srcs, etc
392
for the non-bindless / non-indirect case, or things that are in
393
common with the bindless / indirect case
394
-->
395
396
<bitset name="#cat5-src1" size="8">
397
<override>
398
<expr>{NUM_SRC} > 0</expr>
399
<display>
400
, {HALF}{SRC}
401
</display>
402
<field name="SRC" low="0" high="7" type="#reg-gpr"/>
403
</override>
404
<display/>
405
<assert low="0" high="7">00000000</assert>
406
<encode type="struct ir3_register *">
407
<map name="SRC">src</map>
408
</encode>
409
</bitset>
410
411
<bitset name="#cat5-src2" size="8">
412
<override>
413
<expr>{O} || ({NUM_SRC} > 1)</expr>
414
<display>
415
, {HALF}{SRC}
416
</display>
417
<field name="SRC" low="0" high="7" type="#reg-gpr"/>
418
</override>
419
<display/>
420
<assert low="0" high="7">00000000</assert>
421
<encode type="struct ir3_register *">
422
<map name="SRC">src</map>
423
</encode>
424
</bitset>
425
426
<bitset name="#cat5-samp" size="4">
427
<override>
428
<expr>{HAS_SAMP}</expr>
429
<display>
430
, s#{SAMP}
431
</display>
432
<field name="SAMP" low="0" high="3" type="uint"/>
433
</override>
434
<display/>
435
<assert low="0" high="3">0000</assert>
436
<encode type="struct ir3_instruction *">
437
<map name="SAMP">src->cat5.samp</map>
438
</encode>
439
</bitset>
440
441
<bitset name="#cat5-samp-s2en-bindless-a1" size="8">
442
<doc>s2en (indirect) / bindless case with a1.x has 8b samp</doc>
443
<override>
444
<expr>{HAS_SAMP}</expr>
445
<display>
446
, s#{SAMP}
447
</display>
448
<field name="SAMP" low="0" high="7" type="uint"/>
449
</override>
450
<display/>
451
<assert low="0" high="7">00000000</assert>
452
<encode type="struct ir3_instruction *">
453
<map name="SAMP">src->cat5.samp</map>
454
</encode>
455
</bitset>
456
457
<bitset name="#cat5-tex" size="7">
458
<override>
459
<expr>{HAS_TEX}</expr>
460
<display>
461
, t#{TEX}
462
</display>
463
<field name="TEX" low="0" high="6" type="uint"/>
464
</override>
465
<display/>
466
<assert low="0" high="6">0000000</assert>
467
<encode type="struct ir3_instruction *">
468
<map name="TEX">src->cat5.tex</map>
469
</encode>
470
</bitset>
471
472
<bitset name="#cat5-tex-s2en-bindless" size="4">
473
<doc>s2en (indirect) / bindless case only has 4b tex</doc>
474
<override>
475
<expr>{HAS_TEX}</expr>
476
<display>
477
, t#{TEX}
478
</display>
479
<field name="TEX" low="0" high="3" type="uint"/>
480
</override>
481
<display/>
482
<assert low="0" high="3">0000</assert>
483
<encode type="struct ir3_instruction *">
484
<!--
485
TODO properly decouple the encoding from ir3 IR in this
486
case.. the IR has no business knowing how this gets
487
encoded into "SRC3"..
488
-->
489
<map name="TEX">src->cat5.samp >> 4</map>
490
</encode>
491
</bitset>
492
493
<bitset name="#cat5-type" size="3">
494
<display/>
495
<override>
496
<expr>{HAS_TYPE}</expr>
497
<display>
498
({TYPE})
499
</display>
500
</override>
501
<field name="TYPE" low="0" high="2" type="#type"/>
502
<encode type="struct ir3_instruction *">
503
<!--
504
Normally we only encode fields that have visible impact on
505
the decoded disasm, but the type field is one of those
506
special exceptions
507
-->
508
<map name="TYPE" force="true">src->cat5.type</map>
509
</encode>
510
</bitset>
511
512
<!--
513
Helpers/bitsets/etc for dealing with the bindless/indirect case:
514
-->
515
516
<enum name="#cat5-s2en-bindless-desc-mode">
517
<doc>
518
We don't actually display this enum, but it is useful to
519
document the various cases
520
521
TODO we should probably have an option for uniforms w/out
522
display strings, but which have 'C' names that can be used
523
to generate header that the compiler can use
524
</doc>
525
<value val="0" display="CAT5_NONUNIFORM">
526
<doc>
527
Use traditional GL binding model, get texture and sampler index
528
from src3 which is not presumed to be uniform. This is
529
backwards-compatible with earlier generations, where this field was
530
always 0 and nonuniform-indexed sampling always worked.
531
</doc>
532
</value>
533
<value val="1" display="CAT5_BINDLESS_A1_UNIFORM">
534
<doc>
535
The sampler base comes from the low 3 bits of a1.x, and the sampler
536
and texture index come from src3 which is presumed to be uniform.
537
</doc>
538
</value>
539
<value val="2" display="CAT5_BINDLESS_NONUNIFORM">
540
<doc>
541
The texture and sampler share the same base, and the sampler and
542
texture index come from src3 which is *not* presumed to be uniform.
543
</doc>
544
</value>
545
<value val="3" display="CAT5_BINDLESS_A1_NONUNIFORM">
546
<doc>
547
The sampler base comes from the low 3 bits of a1.x, and the sampler
548
and texture index come from src3 which is *not* presumed to be
549
uniform.
550
</doc>
551
</value>
552
<value val="4" display="CAT5_UNIFORM">
553
<doc>
554
Use traditional GL binding model, get texture and sampler index
555
from src3 which is presumed to be uniform.
556
</doc>
557
</value>
558
<value val="5" display="CAT5_BINDLESS_UNIFORM">
559
<doc>
560
The texture and sampler share the same base, and the sampler and
561
texture index come from src3 which is presumed to be uniform.
562
</doc>
563
</value>
564
<value val="6" display="CAT5_BINDLESS_IMM">
565
<doc>
566
The texture and sampler share the same base, get sampler index from low
567
4 bits of src3 and texture index from high 4 bits.
568
</doc>
569
</value>
570
<value val="7" display="CAT5_BINDLESS_A1_IMM">
571
<doc>
572
The sampler base comes from the low 3 bits of a1.x, and the texture
573
index comes from the next 8 bits of a1.x. The sampler index is an
574
immediate in src3.
575
</doc>
576
</value>
577
</enum>
578
579
<!-- Helper to map s2en/bindless DESC_MODE to whether it is an indirect mode -->
580
<expr name="#cat5-s2enb-is-indirect">
581
{DESC_MODE} &lt; 6 /* CAT5_BINDLESS_IMM */
582
</expr>
583
584
<!-- Helper to map s2en/bindless DESC_MODE to whether it is a bindless mode -->
585
<expr name="#cat5-s2enb-is-bindless">
586
({DESC_MODE} == 1) /* CAT5_BINDLESS_A1_UNIFORM */ ||
587
({DESC_MODE} == 2) /* CAT5_BINDLESS_NONUNIFORM */ ||
588
({DESC_MODE} == 3) /* CAT5_BINDLESS_A1_NONUNIFORM */ ||
589
({DESC_MODE} == 5) /* CAT5_BINDLESS_UNIFORM */ ||
590
({DESC_MODE} == 6) /* CAT5_BINDLESS_IMM */ ||
591
({DESC_MODE} == 7) /* CAT5_BINDLESS_A1_IMM */
592
</expr>
593
594
<!-- Helper to map s2en/bindless DESC_MODE to whether it uses a1.x -->
595
<expr name="#cat5-s2enb-uses_a1">
596
({DESC_MODE} == 1) /* CAT5_BINDLESS_A1_UNIFORM */ ||
597
({DESC_MODE} == 3) /* CAT5_BINDLESS_A1_NONUNIFORM */ ||
598
({DESC_MODE} == 7) /* CAT5_BINDLESS_A1_IMM */
599
</expr>
600
601
<!-- Helper to map s2en/bindless DESC_MODE to whether it is uniform (flow control) mode -->
602
<expr name="#cat5-s2enb-is-uniform">
603
({DESC_MODE} == 1) /* CAT5_BINDLESS_A1_UNIFORM */ ||
604
({DESC_MODE} == 4) /* CAT5_UNIFORM */ ||
605
({DESC_MODE} == 5) /* CAT5_BINDLESS_UNIFORM */
606
</expr>
607
608
<!-- Helper to map s2en/bindless DESC_MODE to whether it is non-uniform mode
609
Note that it returns only for bindless for now, since we need to figure out bindful
610
uniform/nonuniform mode correctly. See TODO in extract_cat5_DESC_MODE in encode.c -->
611
<expr name="#cat5-s2enb-is-nonuniform">
612
({DESC_MODE} == 2) /* CAT5_BINDLESS_NONUNIFORM */ ||
613
({DESC_MODE} == 3) /* CAT5_BINDLESS_A1_NONUNIFORM */
614
</expr>
615
616
<bitset name="#cat5-src3" size="8">
617
<doc>bindless/indirect src3, which can either be GPR or samp/tex</doc>
618
<override expr="#cat5-s2enb-is-indirect">
619
<display>
620
, {SRC_HALF}{SRC}
621
</display>
622
<field name="SRC" low="0" high="7" type="#reg-gpr"/>
623
<derived name="SRC_HALF" type="bool" display="h">
624
<expr>!{BINDLESS}</expr>
625
</derived>
626
</override>
627
<override expr="#cat5-s2enb-uses_a1">
628
<doc>
629
In the case that a1.x is used, all 8 bits encode sampler
630
</doc>
631
<display>
632
{SAMP}
633
</display>
634
<field name="SAMP" low="0" high="7" type="#cat5-samp-s2en-bindless-a1">
635
<param name="HAS_SAMP"/>
636
</field>
637
</override>
638
<display>
639
{SAMP}{TEX}
640
</display>
641
<field name="SAMP" low="0" high="3" type="#cat5-samp">
642
<param name="HAS_SAMP"/>
643
</field>
644
<field name="TEX" low="4" high="7" type="#cat5-tex-s2en-bindless">
645
<param name="HAS_TEX"/>
646
</field>
647
<encode type="struct ir3_register *">
648
<map name="SAMP">s->instr</map>
649
<map name="TEX">s->instr</map>
650
<map name="SRC">src</map>
651
</encode>
652
</bitset>
653
654
</isa>
655
656