xref: /aosp_15_r20/external/mesa3d/src/panfrost/shared/test/test-tiling.cpp (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright (C) 2022 Collabora, Ltd.
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker  *
11*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker  * Software.
14*61046927SAndroid Build Coastguard Worker  *
15*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20*61046927SAndroid Build Coastguard Worker  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21*61046927SAndroid Build Coastguard Worker  * SOFTWARE.
22*61046927SAndroid Build Coastguard Worker  */
23*61046927SAndroid Build Coastguard Worker 
24*61046927SAndroid Build Coastguard Worker #include "pan_tiling.h"
25*61046927SAndroid Build Coastguard Worker 
26*61046927SAndroid Build Coastguard Worker #include <gtest/gtest.h>
27*61046927SAndroid Build Coastguard Worker 
28*61046927SAndroid Build Coastguard Worker /*
29*61046927SAndroid Build Coastguard Worker  * Reference tiling algorithm, written for clarity rather than performance. See
30*61046927SAndroid Build Coastguard Worker  * docs/drivers/panfrost.rst for details on the format.
31*61046927SAndroid Build Coastguard Worker  */
32*61046927SAndroid Build Coastguard Worker 
33*61046927SAndroid Build Coastguard Worker static unsigned
u_order(unsigned x,unsigned y)34*61046927SAndroid Build Coastguard Worker u_order(unsigned x, unsigned y)
35*61046927SAndroid Build Coastguard Worker {
36*61046927SAndroid Build Coastguard Worker    assert(x < 16 && y < 16);
37*61046927SAndroid Build Coastguard Worker 
38*61046927SAndroid Build Coastguard Worker    unsigned xy0 = ((x ^ y) & 1) ? 1 : 0;
39*61046927SAndroid Build Coastguard Worker    unsigned xy1 = ((x ^ y) & 2) ? 1 : 0;
40*61046927SAndroid Build Coastguard Worker    unsigned xy2 = ((x ^ y) & 4) ? 1 : 0;
41*61046927SAndroid Build Coastguard Worker    unsigned xy3 = ((x ^ y) & 8) ? 1 : 0;
42*61046927SAndroid Build Coastguard Worker 
43*61046927SAndroid Build Coastguard Worker    unsigned y0 = (y & 1) ? 1 : 0;
44*61046927SAndroid Build Coastguard Worker    unsigned y1 = (y & 2) ? 1 : 0;
45*61046927SAndroid Build Coastguard Worker    unsigned y2 = (y & 4) ? 1 : 0;
46*61046927SAndroid Build Coastguard Worker    unsigned y3 = (y & 8) ? 1 : 0;
47*61046927SAndroid Build Coastguard Worker 
48*61046927SAndroid Build Coastguard Worker    return (xy0 << 0) | (y0 << 1) | (xy1 << 2) | (y1 << 3) | (xy2 << 4) |
49*61046927SAndroid Build Coastguard Worker           (y2 << 5) | (xy3 << 6) | (y3 << 7);
50*61046927SAndroid Build Coastguard Worker }
51*61046927SAndroid Build Coastguard Worker 
52*61046927SAndroid Build Coastguard Worker /* x/y are in blocks */
53*61046927SAndroid Build Coastguard Worker static unsigned
tiled_offset(unsigned x,unsigned y,unsigned stride,unsigned tilesize,unsigned blocksize)54*61046927SAndroid Build Coastguard Worker tiled_offset(unsigned x, unsigned y, unsigned stride, unsigned tilesize,
55*61046927SAndroid Build Coastguard Worker              unsigned blocksize)
56*61046927SAndroid Build Coastguard Worker {
57*61046927SAndroid Build Coastguard Worker    unsigned tile_x = x / tilesize;
58*61046927SAndroid Build Coastguard Worker    unsigned tile_y = y / tilesize;
59*61046927SAndroid Build Coastguard Worker 
60*61046927SAndroid Build Coastguard Worker    unsigned x_in_tile = x % tilesize;
61*61046927SAndroid Build Coastguard Worker    unsigned y_in_tile = y % tilesize;
62*61046927SAndroid Build Coastguard Worker 
63*61046927SAndroid Build Coastguard Worker    unsigned index_in_tile = u_order(x_in_tile, y_in_tile);
64*61046927SAndroid Build Coastguard Worker 
65*61046927SAndroid Build Coastguard Worker    unsigned row_offset = tile_y * stride;
66*61046927SAndroid Build Coastguard Worker    unsigned col_offset = (tile_x * tilesize * tilesize) * blocksize;
67*61046927SAndroid Build Coastguard Worker    unsigned block_offset = index_in_tile * blocksize;
68*61046927SAndroid Build Coastguard Worker 
69*61046927SAndroid Build Coastguard Worker    return row_offset + col_offset + block_offset;
70*61046927SAndroid Build Coastguard Worker }
71*61046927SAndroid Build Coastguard Worker 
72*61046927SAndroid Build Coastguard Worker static unsigned
linear_offset(unsigned x,unsigned y,unsigned stride,unsigned blocksize)73*61046927SAndroid Build Coastguard Worker linear_offset(unsigned x, unsigned y, unsigned stride, unsigned blocksize)
74*61046927SAndroid Build Coastguard Worker {
75*61046927SAndroid Build Coastguard Worker    return (stride * y) + (x * blocksize);
76*61046927SAndroid Build Coastguard Worker }
77*61046927SAndroid Build Coastguard Worker 
78*61046927SAndroid Build Coastguard Worker static void
ref_access_tiled(void * dst,const void * src,unsigned region_x,unsigned region_y,unsigned w,unsigned h,uint32_t dst_stride,uint32_t src_stride,enum pipe_format format,bool dst_is_tiled)79*61046927SAndroid Build Coastguard Worker ref_access_tiled(void *dst, const void *src, unsigned region_x,
80*61046927SAndroid Build Coastguard Worker                  unsigned region_y, unsigned w, unsigned h, uint32_t dst_stride,
81*61046927SAndroid Build Coastguard Worker                  uint32_t src_stride, enum pipe_format format,
82*61046927SAndroid Build Coastguard Worker                  bool dst_is_tiled)
83*61046927SAndroid Build Coastguard Worker {
84*61046927SAndroid Build Coastguard Worker    const struct util_format_description *desc = util_format_description(format);
85*61046927SAndroid Build Coastguard Worker    ;
86*61046927SAndroid Build Coastguard Worker 
87*61046927SAndroid Build Coastguard Worker    unsigned tilesize = (desc->block.width > 1) ? 4 : 16;
88*61046927SAndroid Build Coastguard Worker    unsigned blocksize = (desc->block.bits / 8);
89*61046927SAndroid Build Coastguard Worker 
90*61046927SAndroid Build Coastguard Worker    unsigned w_block = w / desc->block.width;
91*61046927SAndroid Build Coastguard Worker    unsigned h_block = h / desc->block.height;
92*61046927SAndroid Build Coastguard Worker 
93*61046927SAndroid Build Coastguard Worker    unsigned region_x_block = region_x / desc->block.width;
94*61046927SAndroid Build Coastguard Worker    unsigned region_y_block = region_y / desc->block.height;
95*61046927SAndroid Build Coastguard Worker 
96*61046927SAndroid Build Coastguard Worker    for (unsigned linear_y_block = 0; linear_y_block < h_block;
97*61046927SAndroid Build Coastguard Worker         ++linear_y_block) {
98*61046927SAndroid Build Coastguard Worker       for (unsigned linear_x_block = 0; linear_x_block < w_block;
99*61046927SAndroid Build Coastguard Worker            ++linear_x_block) {
100*61046927SAndroid Build Coastguard Worker 
101*61046927SAndroid Build Coastguard Worker          unsigned tiled_x_block = region_x_block + linear_x_block;
102*61046927SAndroid Build Coastguard Worker          unsigned tiled_y_block = region_y_block + linear_y_block;
103*61046927SAndroid Build Coastguard Worker 
104*61046927SAndroid Build Coastguard Worker          unsigned dst_offset, src_offset;
105*61046927SAndroid Build Coastguard Worker 
106*61046927SAndroid Build Coastguard Worker          if (dst_is_tiled) {
107*61046927SAndroid Build Coastguard Worker             dst_offset = tiled_offset(tiled_x_block, tiled_y_block, dst_stride,
108*61046927SAndroid Build Coastguard Worker                                       tilesize, blocksize);
109*61046927SAndroid Build Coastguard Worker             src_offset = linear_offset(linear_x_block, linear_y_block,
110*61046927SAndroid Build Coastguard Worker                                        src_stride, blocksize);
111*61046927SAndroid Build Coastguard Worker          } else {
112*61046927SAndroid Build Coastguard Worker             dst_offset = linear_offset(linear_x_block, linear_y_block,
113*61046927SAndroid Build Coastguard Worker                                        dst_stride, blocksize);
114*61046927SAndroid Build Coastguard Worker             src_offset = tiled_offset(tiled_x_block, tiled_y_block, src_stride,
115*61046927SAndroid Build Coastguard Worker                                       tilesize, blocksize);
116*61046927SAndroid Build Coastguard Worker          }
117*61046927SAndroid Build Coastguard Worker 
118*61046927SAndroid Build Coastguard Worker          memcpy((uint8_t *)dst + dst_offset, (const uint8_t *)src + src_offset,
119*61046927SAndroid Build Coastguard Worker                 desc->block.bits / 8);
120*61046927SAndroid Build Coastguard Worker       }
121*61046927SAndroid Build Coastguard Worker    }
122*61046927SAndroid Build Coastguard Worker }
123*61046927SAndroid Build Coastguard Worker 
124*61046927SAndroid Build Coastguard Worker /*
125*61046927SAndroid Build Coastguard Worker  * Helper to build test cases for tiled texture access. This test suite compares
126*61046927SAndroid Build Coastguard Worker  * the above reference tiling algorithm to the optimized algorithm used in
127*61046927SAndroid Build Coastguard Worker  * production.
128*61046927SAndroid Build Coastguard Worker  */
129*61046927SAndroid Build Coastguard Worker static void
test(unsigned width,unsigned height,unsigned rx,unsigned ry,unsigned rw,unsigned rh,unsigned linear_stride,enum pipe_format format,bool store)130*61046927SAndroid Build Coastguard Worker test(unsigned width, unsigned height, unsigned rx, unsigned ry, unsigned rw,
131*61046927SAndroid Build Coastguard Worker      unsigned rh, unsigned linear_stride, enum pipe_format format, bool store)
132*61046927SAndroid Build Coastguard Worker {
133*61046927SAndroid Build Coastguard Worker    unsigned bpp = util_format_get_blocksize(format);
134*61046927SAndroid Build Coastguard Worker    unsigned tile_height = util_format_is_compressed(format) ? 4 : 16;
135*61046927SAndroid Build Coastguard Worker 
136*61046927SAndroid Build Coastguard Worker    unsigned tiled_width = ALIGN_POT(width, 16);
137*61046927SAndroid Build Coastguard Worker    unsigned tiled_height = ALIGN_POT(height, 16);
138*61046927SAndroid Build Coastguard Worker    unsigned tiled_stride = tiled_width * tile_height * bpp;
139*61046927SAndroid Build Coastguard Worker 
140*61046927SAndroid Build Coastguard Worker    unsigned dst_stride = store ? tiled_stride : linear_stride;
141*61046927SAndroid Build Coastguard Worker    unsigned src_stride = store ? linear_stride : tiled_stride;
142*61046927SAndroid Build Coastguard Worker 
143*61046927SAndroid Build Coastguard Worker    void *tiled = calloc(bpp, tiled_width * tiled_height);
144*61046927SAndroid Build Coastguard Worker    void *linear = calloc(bpp, rw * linear_stride);
145*61046927SAndroid Build Coastguard Worker    void *ref =
146*61046927SAndroid Build Coastguard Worker       calloc(bpp, store ? (tiled_width * tiled_height) : (rw * linear_stride));
147*61046927SAndroid Build Coastguard Worker 
148*61046927SAndroid Build Coastguard Worker    if (store) {
149*61046927SAndroid Build Coastguard Worker       for (unsigned i = 0; i < bpp * rw * linear_stride; ++i) {
150*61046927SAndroid Build Coastguard Worker          ((uint8_t *)linear)[i] = (i & 0xFF);
151*61046927SAndroid Build Coastguard Worker       }
152*61046927SAndroid Build Coastguard Worker 
153*61046927SAndroid Build Coastguard Worker       panfrost_store_tiled_image(tiled, linear, rx, ry, rw, rh, dst_stride,
154*61046927SAndroid Build Coastguard Worker                                  src_stride, format);
155*61046927SAndroid Build Coastguard Worker    } else {
156*61046927SAndroid Build Coastguard Worker       for (unsigned i = 0; i < bpp * tiled_width * tiled_height; ++i) {
157*61046927SAndroid Build Coastguard Worker          ((uint8_t *)tiled)[i] = (i & 0xFF);
158*61046927SAndroid Build Coastguard Worker       }
159*61046927SAndroid Build Coastguard Worker 
160*61046927SAndroid Build Coastguard Worker       panfrost_load_tiled_image(linear, tiled, rx, ry, rw, rh, dst_stride,
161*61046927SAndroid Build Coastguard Worker                                 src_stride, format);
162*61046927SAndroid Build Coastguard Worker    }
163*61046927SAndroid Build Coastguard Worker 
164*61046927SAndroid Build Coastguard Worker    ref_access_tiled(ref, store ? linear : tiled, rx, ry, rw, rh, dst_stride,
165*61046927SAndroid Build Coastguard Worker                     src_stride, format, store);
166*61046927SAndroid Build Coastguard Worker 
167*61046927SAndroid Build Coastguard Worker    if (store)
168*61046927SAndroid Build Coastguard Worker       EXPECT_EQ(memcmp(ref, tiled, bpp * tiled_width * tiled_height), 0);
169*61046927SAndroid Build Coastguard Worker    else
170*61046927SAndroid Build Coastguard Worker       EXPECT_EQ(memcmp(ref, linear, bpp * rw * linear_stride), 0);
171*61046927SAndroid Build Coastguard Worker 
172*61046927SAndroid Build Coastguard Worker    free(ref);
173*61046927SAndroid Build Coastguard Worker    free(tiled);
174*61046927SAndroid Build Coastguard Worker    free(linear);
175*61046927SAndroid Build Coastguard Worker }
176*61046927SAndroid Build Coastguard Worker 
177*61046927SAndroid Build Coastguard Worker static void
test_ldst(unsigned width,unsigned height,unsigned rx,unsigned ry,unsigned rw,unsigned rh,unsigned linear_stride,enum pipe_format format)178*61046927SAndroid Build Coastguard Worker test_ldst(unsigned width, unsigned height, unsigned rx, unsigned ry,
179*61046927SAndroid Build Coastguard Worker           unsigned rw, unsigned rh, unsigned linear_stride,
180*61046927SAndroid Build Coastguard Worker           enum pipe_format format)
181*61046927SAndroid Build Coastguard Worker {
182*61046927SAndroid Build Coastguard Worker    test(width, height, rx, ry, rw, rh, linear_stride, format, true);
183*61046927SAndroid Build Coastguard Worker    test(width, height, rx, ry, rw, rh, linear_stride, format, false);
184*61046927SAndroid Build Coastguard Worker }
185*61046927SAndroid Build Coastguard Worker 
TEST(UInterleavedTiling,RegulatFormats)186*61046927SAndroid Build Coastguard Worker TEST(UInterleavedTiling, RegulatFormats)
187*61046927SAndroid Build Coastguard Worker {
188*61046927SAndroid Build Coastguard Worker    /* 8-bit */
189*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 0, 0, 23, 17, 23, PIPE_FORMAT_R8_UINT);
190*61046927SAndroid Build Coastguard Worker 
191*61046927SAndroid Build Coastguard Worker    /* 16-bit */
192*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 0, 0, 23, 17, 23 * 2, PIPE_FORMAT_R8G8_UINT);
193*61046927SAndroid Build Coastguard Worker 
194*61046927SAndroid Build Coastguard Worker    /* 24-bit */
195*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 0, 0, 23, 17, 23 * 3, PIPE_FORMAT_R8G8B8_UINT);
196*61046927SAndroid Build Coastguard Worker 
197*61046927SAndroid Build Coastguard Worker    /* 32-bit */
198*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 0, 0, 23, 17, 23 * 4, PIPE_FORMAT_R32_UINT);
199*61046927SAndroid Build Coastguard Worker 
200*61046927SAndroid Build Coastguard Worker    /* 48-bit */
201*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 0, 0, 23, 17, 23 * 6, PIPE_FORMAT_R16G16B16_UINT);
202*61046927SAndroid Build Coastguard Worker 
203*61046927SAndroid Build Coastguard Worker    /* 64-bit */
204*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 0, 0, 23, 17, 23 * 8, PIPE_FORMAT_R32G32_UINT);
205*61046927SAndroid Build Coastguard Worker 
206*61046927SAndroid Build Coastguard Worker    /* 96-bit */
207*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 0, 0, 23, 17, 23 * 12, PIPE_FORMAT_R32G32B32_UINT);
208*61046927SAndroid Build Coastguard Worker 
209*61046927SAndroid Build Coastguard Worker    /* 128-bit */
210*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 0, 0, 23, 17, 23 * 16, PIPE_FORMAT_R32G32B32A32_UINT);
211*61046927SAndroid Build Coastguard Worker }
212*61046927SAndroid Build Coastguard Worker 
TEST(UInterleavedTiling,UnpackedStrides)213*61046927SAndroid Build Coastguard Worker TEST(UInterleavedTiling, UnpackedStrides)
214*61046927SAndroid Build Coastguard Worker {
215*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 0, 0, 23, 17, 369 * 1, PIPE_FORMAT_R8_SINT);
216*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 0, 0, 23, 17, 369 * 2, PIPE_FORMAT_R8G8_SINT);
217*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 0, 0, 23, 17, 369 * 3, PIPE_FORMAT_R8G8B8_SINT);
218*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 0, 0, 23, 17, 369 * 4, PIPE_FORMAT_R32_SINT);
219*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 0, 0, 23, 17, 369 * 6, PIPE_FORMAT_R16G16B16_SINT);
220*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 0, 0, 23, 17, 369 * 8, PIPE_FORMAT_R32G32_SINT);
221*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 0, 0, 23, 17, 369 * 12, PIPE_FORMAT_R32G32B32_SINT);
222*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 0, 0, 23, 17, 369 * 16, PIPE_FORMAT_R32G32B32A32_SINT);
223*61046927SAndroid Build Coastguard Worker }
224*61046927SAndroid Build Coastguard Worker 
TEST(UInterleavedTiling,PartialAccess)225*61046927SAndroid Build Coastguard Worker TEST(UInterleavedTiling, PartialAccess)
226*61046927SAndroid Build Coastguard Worker {
227*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 3, 1, 13, 7, 369 * 1, PIPE_FORMAT_R8_UNORM);
228*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 3, 1, 13, 7, 369 * 2, PIPE_FORMAT_R8G8_UNORM);
229*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 3, 1, 13, 7, 369 * 3, PIPE_FORMAT_R8G8B8_UNORM);
230*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 3, 1, 13, 7, 369 * 4, PIPE_FORMAT_R32_UNORM);
231*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 3, 1, 13, 7, 369 * 6, PIPE_FORMAT_R16G16B16_UNORM);
232*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 3, 1, 13, 7, 369 * 8, PIPE_FORMAT_R32G32_UNORM);
233*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 3, 1, 13, 7, 369 * 12, PIPE_FORMAT_R32G32B32_UNORM);
234*61046927SAndroid Build Coastguard Worker    test_ldst(23, 17, 3, 1, 13, 7, 369 * 16, PIPE_FORMAT_R32G32B32A32_UNORM);
235*61046927SAndroid Build Coastguard Worker }
236*61046927SAndroid Build Coastguard Worker 
TEST(UInterleavedTiling,ETC)237*61046927SAndroid Build Coastguard Worker TEST(UInterleavedTiling, ETC)
238*61046927SAndroid Build Coastguard Worker {
239*61046927SAndroid Build Coastguard Worker    /* Block alignment assumed */
240*61046927SAndroid Build Coastguard Worker    test_ldst(32, 32, 0, 0, 32, 32, 512, PIPE_FORMAT_ETC1_RGB8);
241*61046927SAndroid Build Coastguard Worker    test_ldst(32, 32, 0, 0, 32, 32, 512, PIPE_FORMAT_ETC2_RGB8A1);
242*61046927SAndroid Build Coastguard Worker    test_ldst(32, 32, 0, 0, 32, 32, 512, PIPE_FORMAT_ETC2_RG11_SNORM);
243*61046927SAndroid Build Coastguard Worker }
244*61046927SAndroid Build Coastguard Worker 
TEST(UInterleavedTiling,PartialETC)245*61046927SAndroid Build Coastguard Worker TEST(UInterleavedTiling, PartialETC)
246*61046927SAndroid Build Coastguard Worker {
247*61046927SAndroid Build Coastguard Worker    /* Block alignment assumed */
248*61046927SAndroid Build Coastguard Worker    test_ldst(32, 32, 4, 8, 16, 12, 512, PIPE_FORMAT_ETC1_RGB8);
249*61046927SAndroid Build Coastguard Worker    test_ldst(32, 32, 4, 8, 16, 12, 512, PIPE_FORMAT_ETC2_RGB8A1);
250*61046927SAndroid Build Coastguard Worker    test_ldst(32, 32, 4, 8, 16, 12, 512, PIPE_FORMAT_ETC2_RG11_SNORM);
251*61046927SAndroid Build Coastguard Worker }
252*61046927SAndroid Build Coastguard Worker 
TEST(UInterleavedTiling,DXT)253*61046927SAndroid Build Coastguard Worker TEST(UInterleavedTiling, DXT)
254*61046927SAndroid Build Coastguard Worker {
255*61046927SAndroid Build Coastguard Worker    /* Block alignment assumed */
256*61046927SAndroid Build Coastguard Worker    test_ldst(32, 32, 0, 0, 32, 32, 512, PIPE_FORMAT_DXT1_RGB);
257*61046927SAndroid Build Coastguard Worker    test_ldst(32, 32, 0, 0, 32, 32, 512, PIPE_FORMAT_DXT3_RGBA);
258*61046927SAndroid Build Coastguard Worker    test_ldst(32, 32, 0, 0, 32, 32, 512, PIPE_FORMAT_DXT5_RGBA);
259*61046927SAndroid Build Coastguard Worker }
260*61046927SAndroid Build Coastguard Worker 
TEST(UInterleavedTiling,PartialDXT)261*61046927SAndroid Build Coastguard Worker TEST(UInterleavedTiling, PartialDXT)
262*61046927SAndroid Build Coastguard Worker {
263*61046927SAndroid Build Coastguard Worker    /* Block alignment assumed */
264*61046927SAndroid Build Coastguard Worker    test_ldst(32, 32, 4, 8, 16, 12, 512, PIPE_FORMAT_DXT1_RGB);
265*61046927SAndroid Build Coastguard Worker    test_ldst(32, 32, 4, 8, 16, 12, 512, PIPE_FORMAT_DXT3_RGBA);
266*61046927SAndroid Build Coastguard Worker    test_ldst(32, 32, 4, 8, 16, 12, 512, PIPE_FORMAT_DXT5_RGBA);
267*61046927SAndroid Build Coastguard Worker }
268*61046927SAndroid Build Coastguard Worker 
TEST(UInterleavedTiling,ASTC)269*61046927SAndroid Build Coastguard Worker TEST(UInterleavedTiling, ASTC)
270*61046927SAndroid Build Coastguard Worker {
271*61046927SAndroid Build Coastguard Worker    /* Block alignment assumed */
272*61046927SAndroid Build Coastguard Worker    test_ldst(40, 40, 0, 0, 40, 40, 512, PIPE_FORMAT_ASTC_4x4);
273*61046927SAndroid Build Coastguard Worker    test_ldst(50, 40, 0, 0, 50, 40, 512, PIPE_FORMAT_ASTC_5x4);
274*61046927SAndroid Build Coastguard Worker    test_ldst(50, 50, 0, 0, 50, 50, 512, PIPE_FORMAT_ASTC_5x5);
275*61046927SAndroid Build Coastguard Worker }
276*61046927SAndroid Build Coastguard Worker 
TEST(UInterleavedTiling,PartialASTC)277*61046927SAndroid Build Coastguard Worker TEST(UInterleavedTiling, PartialASTC)
278*61046927SAndroid Build Coastguard Worker {
279*61046927SAndroid Build Coastguard Worker    /* Block alignment assumed */
280*61046927SAndroid Build Coastguard Worker    test_ldst(40, 40, 4, 4, 16, 8, 512, PIPE_FORMAT_ASTC_4x4);
281*61046927SAndroid Build Coastguard Worker    test_ldst(50, 40, 5, 4, 10, 8, 512, PIPE_FORMAT_ASTC_5x4);
282*61046927SAndroid Build Coastguard Worker    test_ldst(50, 50, 5, 5, 10, 10, 512, PIPE_FORMAT_ASTC_5x5);
283*61046927SAndroid Build Coastguard Worker }
284