~mmach/netext73/mesa-haswell

« back to all changes in this revision

Viewing changes to src/freedreno/fdl/fd6_layout_test.c

  • Committer: mmach
  • Date: 2022-09-22 19:56:13 UTC
  • Revision ID: netbit73@gmail.com-20220922195613-wtik9mmy20tmor0i
2022-09-22 21:17:09

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Copyright © 2020 Google LLC
3
 
 *
4
 
 * Permission is hereby granted, free of charge, to any person obtaining a
5
 
 * copy of this software and associated documentation files (the "Software"),
6
 
 * to deal in the Software without restriction, including without limitation
7
 
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
 
 * and/or sell copies of the Software, and to permit persons to whom the
9
 
 * Software is furnished to do so, subject to the following conditions:
10
 
 *
11
 
 * The above copyright notice and this permission notice (including the next
12
 
 * paragraph) shall be included in all copies or substantial portions of the
13
 
 * Software.
14
 
 *
15
 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
 
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
 
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18
 
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
 
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
 
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21
 
 * IN THE SOFTWARE.
22
 
 */
23
 
 
24
 
#include "freedreno_layout.h"
25
 
#include "fd_layout_test.h"
26
 
#include "adreno_common.xml.h"
27
 
#include "adreno_pm4.xml.h"
28
 
#include "a6xx.xml.h"
29
 
 
30
 
#include <stdio.h>
31
 
 
32
 
static const struct testcase
33
 
   testcases[] =
34
 
      {
35
 
         /* A straightforward first testcase, linear, with an obvious format. */
36
 
         {
37
 
            .format = PIPE_FORMAT_R8G8B8A8_UNORM,
38
 
            .layout =
39
 
               {
40
 
                  .width0 = 32,
41
 
                  .height0 = 32,
42
 
                  .slices =
43
 
                     {
44
 
                        {.offset = 0, .pitch = 256},
45
 
                        {.offset = 8192, .pitch = 256},
46
 
                        {.offset = 12288, .pitch = 256},
47
 
                        {.offset = 14336, .pitch = 256},
48
 
                        {.offset = 15360, .pitch = 256},
49
 
                        {.offset = 15872, .pitch = 256},
50
 
                     },
51
 
               },
52
 
         },
53
 
 
54
 
         /* A tiled/ubwc layout from the blob driver, at a size where the a630
55
 
          * blob driver does something interesting for linear.
56
 
          */
57
 
         {
58
 
            .format = PIPE_FORMAT_R8G8B8A8_UNORM,
59
 
            .layout =
60
 
               {
61
 
                  .tile_mode = TILE6_3,
62
 
                  .ubwc = true,
63
 
                  .width0 = 1024,
64
 
                  .height0 = 1,
65
 
                  .slices =
66
 
                     {
67
 
                        {.offset = 0, .pitch = 4096},
68
 
                        {.offset = 65536, .pitch = 2048},
69
 
                        {.offset = 98304, .pitch = 1024},
70
 
                        {.offset = 114688, .pitch = 512},
71
 
                        {.offset = 122880, .pitch = 256},
72
 
                        {.offset = 126976, .pitch = 256},
73
 
                        {.offset = 131072, .pitch = 256},
74
 
                        {.offset = 135168, .pitch = 256},
75
 
                        {.offset = 139264, .pitch = 256},
76
 
                        {.offset = 143360, .pitch = 256},
77
 
                        {.offset = 147456, .pitch = 256},
78
 
                     },
79
 
                  .ubwc_slices =
80
 
                     {
81
 
                        {.offset = 0, .pitch = 64},
82
 
                        {.offset = 4096, .pitch = 64},
83
 
                        {.offset = 8192, .pitch = 64},
84
 
                        {.offset = 12288, .pitch = 64},
85
 
                        {.offset = 16384, .pitch = 64},
86
 
                        {.offset = 20480, .pitch = 64},
87
 
                        {.offset = 24576, .pitch = 64},
88
 
                        {.offset = 28672, .pitch = 64},
89
 
                        {.offset = 32768, .pitch = 64},
90
 
                        {.offset = 36864, .pitch = 64},
91
 
                        {.offset = 40960, .pitch = 64},
92
 
                     },
93
 
               },
94
 
         },
95
 
 
96
 
/* An interesting layout from the blob driver on a630, showing that
97
 
 * per-level pitch must be derived from level 0's pitch, not width0.  We
98
 
 * don't do this level 0 pitch disalignment (we pick 4096), so disabled
99
 
 * this test for now.
100
 
 */
101
 
#if 0
102
 
        {
103
 
                .format = PIPE_FORMAT_R8G8B8A8_UNORM,
104
 
                .layout = {
105
 
                        .width0 = 1024, .height0 = 1,
106
 
                        .slices = {
107
 
                                { .offset = 0, .pitch = 5120 },
108
 
                                { .offset = 5120, .pitch = 2560 },
109
 
                                { .offset = 7680, .pitch = 1280 },
110
 
                                { .offset = 8960, .pitch = 768 },
111
 
                                { .offset = 9728, .pitch = 512 },
112
 
                                { .offset = 10240, .pitch = 256 },
113
 
                                { .offset = 10496, .pitch = 256 },
114
 
                                { .offset = 10752, .pitch = 256 },
115
 
                                { .offset = 11008, .pitch = 256 },
116
 
                                { .offset = 11264, .pitch = 256 },
117
 
                                { .offset = 11520, .pitch = 256 },
118
 
                        },
119
 
                },
120
 
        },
121
 
#endif
122
 
 
123
 
         /* A layout that we failed on (129 wide has a surprise level 1 pitch
124
 
          * increase), and the sizes bracketing it.
125
 
          */
126
 
         {
127
 
            .format = PIPE_FORMAT_R8G8B8A8_UNORM,
128
 
            .layout =
129
 
               {
130
 
                  .width0 = 128,
131
 
                  .height0 = 1,
132
 
                  .slices =
133
 
                     {
134
 
                        {.offset = 0, .pitch = 512},
135
 
                        {.offset = 512, .pitch = 256},
136
 
                        {.offset = 768, .pitch = 256},
137
 
                        {.offset = 1024, .pitch = 256},
138
 
                        {.offset = 1280, .pitch = 256},
139
 
                        {.offset = 1536, .pitch = 256},
140
 
                        {.offset = 1792, .pitch = 256},
141
 
                        {.offset = 2048, .pitch = 256},
142
 
                     },
143
 
               },
144
 
         },
145
 
         {
146
 
            .format = PIPE_FORMAT_R8G8B8A8_UNORM,
147
 
            .layout =
148
 
               {
149
 
                  .width0 = 129,
150
 
                  .height0 = 1,
151
 
                  .slices =
152
 
                     {
153
 
                        {.offset = 0, .pitch = 768},
154
 
                        {.offset = 768, .pitch = 512},
155
 
                        {.offset = 1280, .pitch = 256},
156
 
                        {.offset = 1536, .pitch = 256},
157
 
                        {.offset = 1792, .pitch = 256},
158
 
                        {.offset = 2048, .pitch = 256},
159
 
                        {.offset = 2304, .pitch = 256},
160
 
                        {.offset = 2560, .pitch = 256},
161
 
                     },
162
 
               },
163
 
         },
164
 
         {
165
 
            .format = PIPE_FORMAT_R8G8B8A8_UNORM,
166
 
            .layout =
167
 
               {
168
 
                  .width0 = 130,
169
 
                  .height0 = 1,
170
 
                  .slices =
171
 
                     {
172
 
                        {.offset = 0, .pitch = 768},
173
 
                        {.offset = 768, .pitch = 512},
174
 
                        {.offset = 1280, .pitch = 256},
175
 
                        {.offset = 1536, .pitch = 256},
176
 
                        {.offset = 1792, .pitch = 256},
177
 
                        {.offset = 2048, .pitch = 256},
178
 
                        {.offset = 2304, .pitch = 256},
179
 
                        {.offset = 2560, .pitch = 256},
180
 
                     },
181
 
               },
182
 
         },
183
 
 
184
 
         /* The 129 failure seems to be across formats, let's test some cpps */
185
 
         {
186
 
            .format = PIPE_FORMAT_R8_UNORM,
187
 
            .layout =
188
 
               {
189
 
                  .width0 = 129,
190
 
                  .height0 = 1,
191
 
                  .slices =
192
 
                     {
193
 
                        {.offset = 0, .pitch = 192},
194
 
                        {.offset = 192, .pitch = 128},
195
 
                        {.offset = 320, .pitch = 64},
196
 
                        {.offset = 384, .pitch = 64},
197
 
                        {.offset = 448, .pitch = 64},
198
 
                        {.offset = 512, .pitch = 64},
199
 
                        {.offset = 576, .pitch = 64},
200
 
                        {.offset = 640, .pitch = 64},
201
 
                     },
202
 
               },
203
 
         },
204
 
         {
205
 
            .format = PIPE_FORMAT_R16_UINT,
206
 
            .layout =
207
 
               {
208
 
                  .width0 = 129,
209
 
                  .height0 = 1,
210
 
                  .slices =
211
 
                     {
212
 
                        {.offset = 0, .pitch = 384},
213
 
                        {.offset = 384, .pitch = 256},
214
 
                        {.offset = 640, .pitch = 128},
215
 
                        {.offset = 768, .pitch = 128},
216
 
                        {.offset = 896, .pitch = 128},
217
 
                        {.offset = 1024, .pitch = 128},
218
 
                        {.offset = 1152, .pitch = 128},
219
 
                        {.offset = 1280, .pitch = 128},
220
 
                     },
221
 
               },
222
 
         },
223
 
         {
224
 
            .format = PIPE_FORMAT_R32G32B32A32_FLOAT,
225
 
            .layout =
226
 
               {
227
 
                  .width0 = 129,
228
 
                  .height0 = 1,
229
 
                  .slices =
230
 
                     {
231
 
                        {.offset = 0, .pitch = 3072},
232
 
                        {.offset = 3072, .pitch = 2048},
233
 
                        {.offset = 5120, .pitch = 1024},
234
 
                        {.offset = 6144, .pitch = 1024},
235
 
                        {.offset = 7168, .pitch = 1024},
236
 
                        {.offset = 8192, .pitch = 1024},
237
 
                        {.offset = 9216, .pitch = 1024},
238
 
                        {.offset = 10240, .pitch = 1024},
239
 
                     },
240
 
               },
241
 
         },
242
 
 
243
 
         /* The 129 failure replicated at every +256 pixels wide.  Pick one of
244
 
          * them, and this time increase the height as a new variable as well.
245
 
          */
246
 
         {
247
 
            .format = PIPE_FORMAT_R8G8B8A8_UNORM,
248
 
            .layout =
249
 
               {
250
 
                  .width0 = 385,
251
 
                  .height0 = 128,
252
 
                  .slices =
253
 
                     {
254
 
                        {.offset = 0, .pitch = 1792},
255
 
                        {.offset = 229376, .pitch = 1024},
256
 
                        {.offset = 294912, .pitch = 512},
257
 
                        {.offset = 311296, .pitch = 256},
258
 
                        {.offset = 315392, .pitch = 256},
259
 
                        {.offset = 317440, .pitch = 256},
260
 
                        {.offset = 318464, .pitch = 256},
261
 
                        {.offset = 318976, .pitch = 256},
262
 
                        {.offset = 319232, .pitch = 256},
263
 
                     },
264
 
               },
265
 
         },
266
 
 
267
 
         /* At 257-259 (and replicated every +256 pixels) we had another
268
 
            failure. */
269
 
         {
270
 
            .format = PIPE_FORMAT_R8G8B8A8_UNORM,
271
 
            .layout =
272
 
               {
273
 
                  .width0 = 257,
274
 
                  .height0 = 1,
275
 
                  .slices =
276
 
                     {
277
 
                        {.offset = 0, .pitch = 1280},
278
 
                        {.offset = 1280, .pitch = 768},
279
 
                        {.offset = 2048, .pitch = 512},
280
 
                        {.offset = 2560, .pitch = 256},
281
 
                        {.offset = 2816, .pitch = 256},
282
 
                        {.offset = 3072, .pitch = 256},
283
 
                        {.offset = 3328, .pitch = 256},
284
 
                        {.offset = 3584, .pitch = 256},
285
 
                        {.offset = 3840, .pitch = 256},
286
 
                     },
287
 
               },
288
 
         },
289
 
         {
290
 
            .format = PIPE_FORMAT_R8G8B8A8_UNORM,
291
 
            .layout =
292
 
               {
293
 
                  .width0 = 258,
294
 
                  .height0 = 1,
295
 
                  .slices =
296
 
                     {
297
 
                        {.offset = 0, .pitch = 1280},
298
 
                        {.offset = 1280, .pitch = 768},
299
 
                        {.offset = 2048, .pitch = 512},
300
 
                        {.offset = 2560, .pitch = 256},
301
 
                        {.offset = 2816, .pitch = 256},
302
 
                        {.offset = 3072, .pitch = 256},
303
 
                        {.offset = 3328, .pitch = 256},
304
 
                        {.offset = 3584, .pitch = 256},
305
 
                        {.offset = 3840, .pitch = 256},
306
 
                     },
307
 
               },
308
 
         },
309
 
         {
310
 
            .format = PIPE_FORMAT_R8G8B8A8_UNORM,
311
 
            .layout =
312
 
               {
313
 
                  .width0 = 259,
314
 
                  .height0 = 1,
315
 
                  .slices =
316
 
                     {
317
 
                        {.offset = 0, .pitch = 1280},
318
 
                        {.offset = 1280, .pitch = 768},
319
 
                        {.offset = 2048, .pitch = 512},
320
 
                        {.offset = 2560, .pitch = 256},
321
 
                        {.offset = 2816, .pitch = 256},
322
 
                        {.offset = 3072, .pitch = 256},
323
 
                        {.offset = 3328, .pitch = 256},
324
 
                        {.offset = 3584, .pitch = 256},
325
 
                        {.offset = 3840, .pitch = 256},
326
 
                     },
327
 
               },
328
 
         },
329
 
         {
330
 
            .format = PIPE_FORMAT_R8G8B8A8_UNORM,
331
 
            .layout =
332
 
               {
333
 
                  .width0 = 260,
334
 
                  .height0 = 1,
335
 
                  .slices =
336
 
                     {
337
 
                        {.offset = 0, .pitch = 1280},
338
 
                        {.offset = 1280, .pitch = 768},
339
 
                        {.offset = 2048, .pitch = 512},
340
 
                        {.offset = 2560, .pitch = 256},
341
 
                        {.offset = 2816, .pitch = 256},
342
 
                        {.offset = 3072, .pitch = 256},
343
 
                        {.offset = 3328, .pitch = 256},
344
 
                        {.offset = 3584, .pitch = 256},
345
 
                        {.offset = 3840, .pitch = 256},
346
 
                     },
347
 
               },
348
 
         },
349
 
 
350
 
         /* And, again for the 257-9 failure, test a replica with a larger size*/
351
 
         {
352
 
            .format = PIPE_FORMAT_R8G8B8A8_UNORM,
353
 
            .layout =
354
 
               {
355
 
                  .width0 = 513,
356
 
                  .height0 = 32,
357
 
                  .slices =
358
 
                     {
359
 
                        {.offset = 0, .pitch = 2304},
360
 
                        {.offset = 73728, .pitch = 1280},
361
 
                        {.offset = 94208, .pitch = 768},
362
 
                        {.offset = 100352, .pitch = 512},
363
 
                        {.offset = 102400, .pitch = 256},
364
 
                        {.offset = 102912, .pitch = 256},
365
 
                        {.offset = 103168, .pitch = 256},
366
 
                        {.offset = 103424, .pitch = 256},
367
 
                        {.offset = 103680, .pitch = 256},
368
 
                        {.offset = 103936, .pitch = 256},
369
 
                     },
370
 
               },
371
 
         },
372
 
 
373
 
         /* Oh, look.  The 513-517 failure extends up to 518 at the next texture
374
 
          * level!
375
 
          */
376
 
         {
377
 
            .format = PIPE_FORMAT_R8G8B8A8_UNORM,
378
 
            .layout =
379
 
               {
380
 
                  .width0 = 518,
381
 
                  .height0 = 1,
382
 
                  .slices =
383
 
                     {
384
 
                        {.offset = 0, .pitch = 2304},
385
 
                        {.offset = 2304, .pitch = 1280},
386
 
                        {.offset = 3584, .pitch = 768},
387
 
                        {.offset = 4352, .pitch = 512},
388
 
                        {.offset = 4864, .pitch = 256},
389
 
                        {.offset = 5120, .pitch = 256},
390
 
                        {.offset = 5376, .pitch = 256},
391
 
                        {.offset = 5632, .pitch = 256},
392
 
                        {.offset = 5888, .pitch = 256},
393
 
                        {.offset = 6144, .pitch = 256},
394
 
                     },
395
 
               },
396
 
         },
397
 
 
398
 
         /* Tiled mode testing of the unusual 1/2-bytes-per-pixel pitch
399
 
            alignment */
400
 
         {
401
 
            .format = PIPE_FORMAT_R8_UNORM,
402
 
            .layout =
403
 
               {
404
 
                  .tile_mode = TILE6_3,
405
 
                  .width0 = 129,
406
 
                  .height0 = 1,
407
 
                  .slices =
408
 
                     {
409
 
                        {.offset = 0, .pitch = 256},
410
 
                        {.offset = 8192, .pitch = 128},
411
 
                        {.offset = 12288, .pitch = 128},
412
 
                        {.offset = 16384, .pitch = 128},
413
 
                        {.offset = 20480, .pitch = 128},
414
 
                        {.offset = 20608, .pitch = 128},
415
 
                        {.offset = 20736, .pitch = 128},
416
 
                        {.offset = 20864, .pitch = 128},
417
 
                     },
418
 
               },
419
 
         },
420
 
 
421
 
         /* Single-level RGBA8888 UBWC following UBWC alignment rules laid out
422
 
          * in msm_media_info.h to verify that we don't break buffer sharing.
423
 
          */
424
 
         {
425
 
            .format = PIPE_FORMAT_R8G8B8A8_UNORM,
426
 
            .layout =
427
 
               {
428
 
                  .tile_mode = TILE6_3,
429
 
                  .ubwc = true,
430
 
                  .width0 = 16384,
431
 
                  .height0 = 129,
432
 
                  .slices =
433
 
                     {
434
 
                        {.offset = 1024 * 48, .pitch = 16384 * 4},
435
 
                     },
436
 
                  .ubwc_slices =
437
 
                     {
438
 
                        {.offset = 0, .pitch = 1024},
439
 
                     },
440
 
               },
441
 
         },
442
 
 
443
 
         /* UBWC: Pitch comes from POT-aligned level 0. */
444
 
         /* Pitch fixed in this commit, but offsets broken.  Will be fixed in
445
 
          * following commits.
446
 
          */
447
 
         {
448
 
            .format = PIPE_FORMAT_R8G8B8A8_UNORM,
449
 
            .layout =
450
 
               {
451
 
                  .tile_mode = TILE6_3,
452
 
                  .ubwc = true,
453
 
                  .width0 = 2049,
454
 
                  .height0 = 128,
455
 
                  .slices =
456
 
                     {
457
 
                        {.offset = 0, .pitch = 8448},
458
 
                        {.offset = 1081344, .pitch = 4352},
459
 
                        {.offset = 1359872, .pitch = 2304},
460
 
                        {.offset = 1433600, .pitch = 1280},
461
 
                        {.offset = 1454080, .pitch = 768},
462
 
                        {.offset = 1466368, .pitch = 512},
463
 
                        {.offset = 1474560, .pitch = 256},
464
 
                        {.offset = 1478656, .pitch = 256},
465
 
                        {.offset = 1482752, .pitch = 256},
466
 
                        {.offset = 1486848, .pitch = 256},
467
 
                        {.offset = 1490944, .pitch = 256},
468
 
                        {.offset = 1495040, .pitch = 256},
469
 
                     },
470
 
                  .ubwc_slices =
471
 
                     {
472
 
                        {.offset = 0, .pitch = 256},
473
 
                        {.offset = 16384, .pitch = 128},
474
 
                        {.offset = 24576, .pitch = 64},
475
 
                        {.offset = 28672, .pitch = 64},
476
 
                        {.offset = 32768, .pitch = 64},
477
 
                        {.offset = 36864, .pitch = 64},
478
 
                        {.offset = 40960, .pitch = 64},
479
 
                        {.offset = 45056, .pitch = 64},
480
 
                        {.offset = 49152, .pitch = 64},
481
 
                        {.offset = 53248, .pitch = 64},
482
 
                        {.offset = 57344, .pitch = 64},
483
 
                        {.offset = 61440, .pitch = 64},
484
 
                     },
485
 
               },
486
 
         },
487
 
         /* UBWC: Height comes from POT-aligned level 0. */
488
 
         {
489
 
            .format = PIPE_FORMAT_R8G8B8A8_UNORM,
490
 
            .layout =
491
 
               {
492
 
                  .tile_mode = TILE6_3,
493
 
                  .ubwc = true,
494
 
                  .width0 = 1024,
495
 
                  .height0 = 1025,
496
 
                  .slices =
497
 
                     {
498
 
                        {.offset = 0, .pitch = 4096},
499
 
                        {.offset = 4259840, .pitch = 2048},
500
 
                        {.offset = 5308416, .pitch = 1024},
501
 
                        {.offset = 5570560, .pitch = 512},
502
 
                        {.offset = 5636096, .pitch = 256},
503
 
                        {.offset = 5652480, .pitch = 256},
504
 
                        {.offset = 5660672, .pitch = 256},
505
 
                        {.offset = 5664768, .pitch = 256},
506
 
                        {.offset = 5668864, .pitch = 256},
507
 
                        {.offset = 5672960, .pitch = 256},
508
 
                        {.offset = 5677056, .pitch = 256},
509
 
                     },
510
 
                  .ubwc_slices =
511
 
                     {
512
 
                        {.offset = 0, .pitch = 64},
513
 
                        {.offset = 32768, .pitch = 64},
514
 
                        {.offset = 49152, .pitch = 64},
515
 
                        {.offset = 57344, .pitch = 64},
516
 
                        {.offset = 61440, .pitch = 64},
517
 
                        {.offset = 65536, .pitch = 64},
518
 
                        {.offset = 69632, .pitch = 64},
519
 
                        {.offset = 73728, .pitch = 64},
520
 
                        {.offset = 77824, .pitch = 64},
521
 
                        {.offset = 81920, .pitch = 64},
522
 
                        {.offset = 86016, .pitch = 64},
523
 
                     },
524
 
               },
525
 
         },
526
 
 
527
 
         /* UBWC: Get at minimum height of a level across cpps */
528
 
         {
529
 
            .format = PIPE_FORMAT_R16_UINT,
530
 
            .layout =
531
 
               {
532
 
                  .tile_mode = TILE6_3,
533
 
                  .ubwc = true,
534
 
                  .width0 = 16384,
535
 
                  .height0 = 1,
536
 
                  .slices =
537
 
                     {
538
 
                        {.offset = 0, .pitch = 32768},
539
 
                        {.offset = 524288, .pitch = 16384},
540
 
                        {.offset = 786432, .pitch = 8192},
541
 
                        {.offset = 917504, .pitch = 4096},
542
 
                        {.offset = 983040, .pitch = 2048},
543
 
                        {.offset = 1015808, .pitch = 1024},
544
 
                        {.offset = 1032192, .pitch = 512},
545
 
                        {.offset = 1040384, .pitch = 256},
546
 
                        {.offset = 1044480, .pitch = 256},
547
 
                        {.offset = 1048576, .pitch = 256},
548
 
                        {.offset = 1052672, .pitch = 256},
549
 
                        {.offset = 1056768, .pitch = 256},
550
 
                        {.offset = 1060864, .pitch = 256},
551
 
                        {.offset = 1064960, .pitch = 256},
552
 
                        {.offset = 1069056, .pitch = 256},
553
 
                     },
554
 
                  .ubwc_slices =
555
 
                     {
556
 
                        {.offset = 0, .pitch = 1024},
557
 
                        {.offset = 65536, .pitch = 512},
558
 
                        {.offset = 98304, .pitch = 256},
559
 
                        {.offset = 114688, .pitch = 128},
560
 
                        {.offset = 122880, .pitch = 64},
561
 
                        {.offset = 126976, .pitch = 64},
562
 
                        {.offset = 131072, .pitch = 64},
563
 
                        {.offset = 135168, .pitch = 64},
564
 
                        {.offset = 139264, .pitch = 64},
565
 
                        {.offset = 143360, .pitch = 64},
566
 
                        {.offset = 147456, .pitch = 64},
567
 
                        {.offset = 151552, .pitch = 64},
568
 
                        {.offset = 155648, .pitch = 64},
569
 
                        {.offset = 159744, .pitch = 64},
570
 
                        {.offset = 163840, .pitch = 64},
571
 
                     },
572
 
               },
573
 
         },
574
 
         {
575
 
            .format = PIPE_FORMAT_R8G8B8A8_UNORM,
576
 
            .layout =
577
 
               {
578
 
                  .tile_mode = TILE6_3,
579
 
                  .ubwc = true,
580
 
                  .width0 = 16384,
581
 
                  .height0 = 1,
582
 
                  .slices =
583
 
                     {
584
 
                        {.offset = 0, .pitch = 65536},
585
 
                        {.offset = 1048576, .pitch = 32768},
586
 
                        {.offset = 1572864, .pitch = 16384},
587
 
                        {.offset = 1835008, .pitch = 8192},
588
 
                        {.offset = 1966080, .pitch = 4096},
589
 
                        {.offset = 2031616, .pitch = 2048},
590
 
                        {.offset = 2064384, .pitch = 1024},
591
 
                        {.offset = 2080768, .pitch = 512},
592
 
                        {.offset = 2088960, .pitch = 256},
593
 
                        {.offset = 2093056, .pitch = 256},
594
 
                        {.offset = 2097152, .pitch = 256},
595
 
                        {.offset = 2101248, .pitch = 256},
596
 
                        {.offset = 2105344, .pitch = 256},
597
 
                        {.offset = 2109440, .pitch = 256},
598
 
                        {.offset = 2113536, .pitch = 256},
599
 
                     },
600
 
                  .ubwc_slices =
601
 
                     {
602
 
                        {.offset = 0, .pitch = 1024},
603
 
                        {.offset = 65536, .pitch = 512},
604
 
                        {.offset = 98304, .pitch = 256},
605
 
                        {.offset = 114688, .pitch = 128},
606
 
                        {.offset = 122880, .pitch = 64},
607
 
                        {.offset = 126976, .pitch = 64},
608
 
                        {.offset = 131072, .pitch = 64},
609
 
                        {.offset = 135168, .pitch = 64},
610
 
                        {.offset = 139264, .pitch = 64},
611
 
                        {.offset = 143360, .pitch = 64},
612
 
                        {.offset = 147456, .pitch = 64},
613
 
                        {.offset = 151552, .pitch = 64},
614
 
                        {.offset = 155648, .pitch = 64},
615
 
                        {.offset = 159744, .pitch = 64},
616
 
                        {.offset = 163840, .pitch = 64},
617
 
                     },
618
 
               },
619
 
         },
620
 
         {
621
 
            .format = PIPE_FORMAT_R32G32B32A32_FLOAT,
622
 
            .layout =
623
 
               {
624
 
                  .tile_mode = TILE6_3,
625
 
                  .ubwc = true,
626
 
                  .width0 = 16384,
627
 
                  .height0 = 1,
628
 
                  .slices =
629
 
                     {
630
 
                        {.offset = 0, .pitch = 262144},
631
 
                        {.offset = 4194304, .pitch = 131072},
632
 
                        {.offset = 6291456, .pitch = 65536},
633
 
                        {.offset = 7340032, .pitch = 32768},
634
 
                        {.offset = 7864320, .pitch = 16384},
635
 
                        {.offset = 8126464, .pitch = 8192},
636
 
                        {.offset = 8257536, .pitch = 4096},
637
 
                        {.offset = 8323072, .pitch = 2048},
638
 
                        {.offset = 8355840, .pitch = 1024},
639
 
                        {.offset = 8372224, .pitch = 1024},
640
 
                        {.offset = 8388608, .pitch = 1024},
641
 
                        {.offset = 8404992, .pitch = 1024},
642
 
                        {.offset = 8421376, .pitch = 1024},
643
 
                        {.offset = 8437760, .pitch = 1024},
644
 
                        {.offset = 8454144, .pitch = 1024},
645
 
                     },
646
 
                  .ubwc_slices =
647
 
                     {
648
 
                        {.offset = 0, .pitch = 4096},
649
 
                        {.offset = 262144, .pitch = 2048},
650
 
                        {.offset = 393216, .pitch = 1024},
651
 
                        {.offset = 458752, .pitch = 512},
652
 
                        {.offset = 491520, .pitch = 256},
653
 
                        {.offset = 507904, .pitch = 128},
654
 
                        {.offset = 516096, .pitch = 64},
655
 
                        {.offset = 520192, .pitch = 64},
656
 
                        {.offset = 524288, .pitch = 64},
657
 
                        {.offset = 528384, .pitch = 64},
658
 
                        {.offset = 532480, .pitch = 64},
659
 
                        {.offset = 536576, .pitch = 64},
660
 
                        {.offset = 540672, .pitch = 64},
661
 
                        {.offset = 544768, .pitch = 64},
662
 
                        {.offset = 548864, .pitch = 64},
663
 
                     },
664
 
               },
665
 
         },
666
 
 
667
 
         {
668
 
            .format = PIPE_FORMAT_R8G8B8A8_UNORM,
669
 
            .layout =
670
 
               {
671
 
                  .tile_mode = TILE6_3,
672
 
                  .ubwc = true,
673
 
                  .nr_samples = 4,
674
 
                  .width0 = 412,
675
 
                  .height0 = 732,
676
 
                  .slices =
677
 
                     {
678
 
                        {.offset = 0, .pitch = 7168},
679
 
                     },
680
 
                  .ubwc_slices =
681
 
                     {
682
 
                        {.offset = 0, .pitch = 128},
683
 
                     },
684
 
               },
685
 
         },
686
 
 
687
 
         /* Easy 32x32x32 3d case */
688
 
         {
689
 
            .format = PIPE_FORMAT_R9G9B9E5_FLOAT,
690
 
            .is_3d = true,
691
 
            .layout =
692
 
               {
693
 
                  .tile_mode = TILE6_3,
694
 
                  .ubwc = false,
695
 
                  .width0 = 32,
696
 
                  .height0 = 32,
697
 
                  .depth0 = 32,
698
 
                  .slices =
699
 
                     {
700
 
                        {.offset = 0, .pitch = 256, .size0 = 8192},
701
 
                        {.offset = 262144, .pitch = 256, .size0 = 4096},
702
 
                        {.offset = 327680, .pitch = 256, .size0 = 4096},
703
 
                        {.offset = 360448, .pitch = 256, .size0 = 4096},
704
 
                        {.offset = 376832, .pitch = 256, .size0 = 4096},
705
 
                        {.offset = 385024, .pitch = 256},
706
 
                     },
707
 
               },
708
 
         },
709
 
 
710
 
         /* Scale up a bit to 128x128x32 3d */
711
 
         {
712
 
            .format = PIPE_FORMAT_R9G9B9E5_FLOAT,
713
 
            .is_3d = true,
714
 
            .layout =
715
 
               {
716
 
                  .tile_mode = TILE6_3,
717
 
                  .ubwc = false,
718
 
                  .width0 = 128,
719
 
                  .height0 = 128,
720
 
                  .depth0 = 32,
721
 
                  .slices =
722
 
                     {
723
 
                        {.offset = 0, .pitch = 512, .size0 = 65536},
724
 
                        {.offset = 2097152, .pitch = 256, .size0 = 16384},
725
 
                        {.offset = 2359296, .pitch = 256, .size0 = 8192},
726
 
                        {.offset = 2424832, .pitch = 256, .size0 = 8192},
727
 
                        {.offset = 2457600, .pitch = 256, .size0 = 8192},
728
 
                        {.offset = 2473984, .pitch = 256},
729
 
                        {.offset = 2482176, .pitch = 256},
730
 
                        {.offset = 2490368, .pitch = 256},
731
 
                     },
732
 
               },
733
 
         },
734
 
 
735
 
         /* Changing width to 1 changes where minimum layer size happens. */
736
 
         {
737
 
            .format = PIPE_FORMAT_R9G9B9E5_FLOAT,
738
 
            .is_3d = true,
739
 
            .layout =
740
 
               {
741
 
                  .tile_mode = TILE6_LINEAR,
742
 
                  .ubwc = false,
743
 
                  .width0 = 1,
744
 
                  .height0 = 128,
745
 
                  .depth0 = 32,
746
 
                  .slices =
747
 
                     {
748
 
                        {.offset = 0, .pitch = 256, .size0 = 32768},
749
 
                        {.offset = 1048576, .pitch = 256, .size0 = 16384},
750
 
                        {.offset = 1310720, .pitch = 256, .size0 = 16384},
751
 
                        {.offset = 1441792, .pitch = 256, .size0 = 16384},
752
 
                        {.offset = 1507328, .pitch = 256, .size0 = 16384},
753
 
                        {.offset = 1540096, .pitch = 256},
754
 
                        {.offset = 1556480, .pitch = 256},
755
 
                        {.offset = 1572864, .pitch = 256},
756
 
                     },
757
 
               },
758
 
         },
759
 
 
760
 
         /* And increasing width makes it happen later. */
761
 
         {
762
 
            .format = PIPE_FORMAT_R9G9B9E5_FLOAT,
763
 
            .is_3d = true,
764
 
            .layout =
765
 
               {
766
 
                  .tile_mode = TILE6_3,
767
 
                  .ubwc = false,
768
 
                  .width0 = 1024,
769
 
                  .height0 = 128,
770
 
                  .depth0 = 32,
771
 
                  .slices =
772
 
                     {
773
 
                        {.offset = 0, .pitch = 4096, .size0 = 524288},
774
 
                        {.offset = 16777216, .pitch = 2048, .size0 = 131072},
775
 
                        {.offset = 18874368, .pitch = 1024, .size0 = 32768},
776
 
                        {.offset = 19136512, .pitch = 512, .size0 = 8192},
777
 
                        {.offset = 19169280, .pitch = 256, .size0 = 4096},
778
 
                        {.offset = 19177472, .pitch = 256},
779
 
                        {.offset = 19181568, .pitch = 256},
780
 
                        {.offset = 19185664, .pitch = 256},
781
 
                        {.offset = 19189760, .pitch = 256},
782
 
                        {.offset = 19193856, .pitch = 256},
783
 
                        {.offset = 19197952, .pitch = 256},
784
 
                     },
785
 
               },
786
 
         },
787
 
 
788
 
         /* NPOT height case that piglit was catching 3d texture failure in, we
789
 
          * use a higher depth though to get more slice pitches detected from
790
 
          * the blob.
791
 
          */
792
 
         {
793
 
            .format = PIPE_FORMAT_R9G9B9E5_FLOAT,
794
 
            .is_3d = true,
795
 
            .layout =
796
 
               {
797
 
                  .tile_mode = TILE6_3,
798
 
                  .ubwc = false,
799
 
                  .width0 = 128,
800
 
                  .height0 = 129,
801
 
                  .depth0 = 16,
802
 
                  .slices =
803
 
                     {
804
 
                        {.offset = 0, .pitch = 512, .size0 = 73728},
805
 
                        {.offset = 1179648, .pitch = 256, .size0 = 20480},
806
 
                        {.offset = 1343488, .pitch = 256, .size0 = 20480},
807
 
                        {.offset = 1425408, .pitch = 256, .size0 = 20480},
808
 
                        {.offset = 1466368, .pitch = 256},
809
 
                        {.offset = 1486848, .pitch = 256},
810
 
                        {.offset = 1507328, .pitch = 256},
811
 
                        {.offset = 1527808, .pitch = 256},
812
 
                     },
813
 
               },
814
 
         },
815
 
 
816
 
         /* NPOT height case that my first 3d layout ideas failed on. */
817
 
         {
818
 
            .format = PIPE_FORMAT_R9G9B9E5_FLOAT,
819
 
            .is_3d = true,
820
 
            .layout =
821
 
               {
822
 
                  .tile_mode = TILE6_3,
823
 
                  .ubwc = false,
824
 
                  .width0 = 128,
825
 
                  .height0 = 132,
826
 
                  .depth0 = 16,
827
 
                  .slices =
828
 
                     {
829
 
                        {.offset = 0, .pitch = 512, .size0 = 73728},
830
 
                        {.offset = 1179648, .pitch = 256, .size0 = 20480},
831
 
                        {.offset = 1343488, .pitch = 256, .size0 = 20480},
832
 
                        {.offset = 1425408, .pitch = 256, .size0 = 20480},
833
 
                        {.offset = 1466368, .pitch = 256},
834
 
                        {.offset = 1486848, .pitch = 256},
835
 
                        {.offset = 1507328, .pitch = 256},
836
 
                        {.offset = 1527808, .pitch = 256},
837
 
                     },
838
 
               },
839
 
         },
840
 
 
841
 
         /* blob used MIN_LAYERSZ = 0x3000 here.
842
 
          *
843
 
          * This is an interesting case for 3d layout, since pitch stays NPOT for a while.
844
 
          */
845
 
         {
846
 
            .format = PIPE_FORMAT_R9G9B9E5_FLOAT,
847
 
            .is_3d = true,
848
 
            .layout =
849
 
               {
850
 
                  .tile_mode = TILE6_3,
851
 
                  .ubwc = false,
852
 
                  .width0 = 768,
853
 
                  .height0 = 32,
854
 
                  .depth0 = 128,
855
 
                  .slices =
856
 
                     {
857
 
                        {.offset = 0, .pitch = 3072, .size0 = 98304},
858
 
                        {.offset = 12582912, .pitch = 1536, .size0 = 24576},
859
 
                        {.offset = 14155776, .pitch = 768, .size0 = 12288},
860
 
                        {.offset = 14548992, .pitch = 512, .size0 = 12288},
861
 
                        {.offset = 14745600, .pitch = 256, .size0 = 12288},
862
 
                        {.offset = 14843904, .pitch = 256, .size0 = 12288},
863
 
                        {.offset = 14893056, .pitch = 256, .size0 = 12288},
864
 
                        {.offset = 14917632, .pitch = 256},
865
 
                        {.offset = 14929920, .pitch = 256},
866
 
                        {.offset = 14942208, .pitch = 256},
867
 
                     },
868
 
               },
869
 
         },
870
 
 
871
 
         /* dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_rg11_eac.texture3d_to_texture2d */
872
 
#if 0 /* XXX: We disagree with the blob about level 0 size0, but the testcase passes. */
873
 
         {
874
 
            .format = PIPE_FORMAT_R32G32B32A32_FLOAT,
875
 
            .is_3d = true,
876
 
            .layout =
877
 
               {
878
 
                  .tile_mode = TILE6_3,
879
 
                  .ubwc = false,
880
 
                  .width0 = 129,
881
 
                  .height0 = 129,
882
 
                  .depth0 = 17,
883
 
                  .slices =
884
 
                     {
885
 
                        {.offset = 0, .pitch = 3072, .size0 = 524288},
886
 
                        {.offset = 8912896, .pitch = 2048, .size0 = 131072},
887
 
                        {.offset = 9961472, .pitch = 1024, .size0 = 32768},
888
 
                        {.offset = 10092544, .pitch = 1024, .size0 = 16384},
889
 
                        {.offset = 10125312, .pitch = 1024},
890
 
                        {.offset = 10141696, .pitch = 1024},
891
 
                        {.offset = 10158080, .pitch = 1024},
892
 
                        {.offset = 10174464, .pitch = 1024},
893
 
                     },
894
 
               },
895
 
         },
896
 
#endif
897
 
 
898
 
         /* Size minification issue found while looking at the above test. */
899
 
         {
900
 
            .format = PIPE_FORMAT_R32G32B32A32_FLOAT,
901
 
            .is_3d = true,
902
 
            .layout =
903
 
               {
904
 
                  .tile_mode = TILE6_3,
905
 
                  .ubwc = false,
906
 
                  .width0 = 129,
907
 
                  .height0 = 9,
908
 
                  .depth0 = 8,
909
 
                  .slices =
910
 
                     {
911
 
                        {.offset = 0, .pitch = 3072, .size0 = 49152},
912
 
                        {.offset = 393216, .pitch = 2048, .size0 = 32768},
913
 
                        {.offset = 524288, .pitch = 1024, .size0 = 32768},
914
 
                        {.offset = 589824, .pitch = 1024},
915
 
                        {.offset = 622592, .pitch = 1024},
916
 
                        {.offset = 655360, .pitch = 1024},
917
 
                        {.offset = 688128, .pitch = 1024},
918
 
                        {.offset = 720896, .pitch = 1024},
919
 
                     },
920
 
               },
921
 
         },
922
 
 
923
 
};
924
 
 
925
 
int
926
 
main(int argc, char **argv)
927
 
{
928
 
   int ret = 0;
929
 
 
930
 
   for (int i = 0; i < ARRAY_SIZE(testcases); i++) {
931
 
      if (!fdl_test_layout(&testcases[i], 630))
932
 
         ret = 1;
933
 
   }
934
 
 
935
 
   return ret;
936
 
}