1 /*-------------------------------------------------------------------------
2 * drawElements Internal Test Module
3 * ---------------------------------
5 * Copyright 2015 The Android Open Source Project
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
21 * \brief Texture format tests.
22 *//*--------------------------------------------------------------------*/
24 #include "ditTextureFormatTests.hpp"
25 #include "tcuTestLog.hpp"
27 #include "rrRenderer.hpp"
28 #include "tcuTextureUtil.hpp"
29 #include "tcuVectorUtil.hpp"
30 #include "tcuFormatUtil.hpp"
32 #include "deRandom.hpp"
33 #include "deArrayUtil.hpp"
34 #include "deStringUtil.hpp"
35 #include "deUniquePtr.hpp"
49 using tcu::TextureFormat;
50 using tcu::TextureChannelClass;
51 using tcu::TextureAccessType;
52 using tcu::PixelBufferAccess;
53 using tcu::ConstPixelBufferAccess;
59 static const deUint8 s_snormInt8In[] =
61 0x1b, 0x23, 0xc5, 0x09,
62 0xb4, 0xbf, 0xbf, 0x24,
63 0x1a, 0x8a, 0xdb, 0x96,
64 0xc0, 0xa1, 0xde, 0x78,
66 static const deUint32 s_snormInt8FloatRef[] =
68 0x3e59b367, 0x3e8d1a34, 0xbeeddbb7, 0x3d912245,
69 0xbf193265, 0xbf03060c, 0xbf03060c, 0x3e912245,
70 0x3e51a347, 0xbf6ddbb7, 0xbe952a55, 0xbf55ab57,
71 0xbf010204, 0xbf3f7efe, 0xbe891224, 0x3f71e3c8,
73 static const deUint32 s_snormInt8UintRef[] =
75 0x0000001b, 0x00000023, 0xffffffc5, 0x00000009,
76 0xffffffb4, 0xffffffbf, 0xffffffbf, 0x00000024,
77 0x0000001a, 0xffffff8a, 0xffffffdb, 0xffffff96,
78 0xffffffc0, 0xffffffa1, 0xffffffde, 0x00000078,
80 static const deUint32 s_snormInt8IntRef[] =
82 0x0000001b, 0x00000023, 0xffffffc5, 0x00000009,
83 0xffffffb4, 0xffffffbf, 0xffffffbf, 0x00000024,
84 0x0000001a, 0xffffff8a, 0xffffffdb, 0xffffff96,
85 0xffffffc0, 0xffffffa1, 0xffffffde, 0x00000078,
88 static const deUint8 s_snormInt16In[] =
90 0xa0, 0xe9, 0xaa, 0x30,
91 0x16, 0x61, 0x37, 0xa2,
92 0x23, 0x4c, 0x46, 0xac,
93 0x8b, 0xf9, 0x36, 0x3e,
94 0x92, 0x7c, 0x96, 0x81,
95 0xc5, 0xb2, 0x95, 0x6e,
96 0x4f, 0x1e, 0xbc, 0x49,
97 0x14, 0x6c, 0x3c, 0x61,
99 static const deUint32 s_snormInt16FloatRef[] =
101 0xbe330166, 0x3ec2a985, 0x3f422d84, 0xbf3b9377,
102 0x3f184731, 0xbf27754f, 0xbd4ea19d, 0x3ef8d9f2,
103 0x3f7925f2, 0xbf7cd5fa, 0xbf1a7735, 0x3f5d2bba,
104 0x3e7279e5, 0x3f137927, 0x3f5829b0, 0x3f427985,
106 static const deUint32 s_snormInt16UintRef[] =
108 0xffffe9a0, 0x000030aa, 0x00006116, 0xffffa237,
109 0x00004c23, 0xffffac46, 0xfffff98b, 0x00003e36,
110 0x00007c92, 0xffff8196, 0xffffb2c5, 0x00006e95,
111 0x00001e4f, 0x000049bc, 0x00006c14, 0x0000613c,
113 static const deUint32 s_snormInt16IntRef[] =
115 0xffffe9a0, 0x000030aa, 0x00006116, 0xffffa237,
116 0x00004c23, 0xffffac46, 0xfffff98b, 0x00003e36,
117 0x00007c92, 0xffff8196, 0xffffb2c5, 0x00006e95,
118 0x00001e4f, 0x000049bc, 0x00006c14, 0x0000613c,
121 static const deUint8 s_snormInt32In[] =
123 0xba, 0x2c, 0x02, 0xea,
124 0x75, 0x59, 0x74, 0x48,
125 0x32, 0xad, 0xb0, 0xda,
126 0x0b, 0xf7, 0x6f, 0x49,
127 0x98, 0x9b, 0x76, 0x66,
128 0x79, 0x7d, 0x69, 0x33,
129 0xb5, 0x74, 0x61, 0xa4,
130 0x4c, 0xcd, 0x5c, 0x20,
131 0xc3, 0xba, 0x90, 0xfc,
132 0xe3, 0x17, 0xd0, 0x89,
133 0x28, 0x61, 0x5d, 0xb0,
134 0x5d, 0xc9, 0xad, 0xc9,
135 0xfc, 0x8c, 0x48, 0x3c,
136 0x11, 0x13, 0x40, 0x27,
137 0xe4, 0x88, 0x27, 0x4f,
138 0x52, 0xa2, 0x54, 0x50,
140 static const deUint32 s_snormInt32FloatRef[] =
142 0xbe2fee9a, 0x3f10e8b3, 0xbe953d4b, 0x3f12dfee,
143 0x3f4ced37, 0x3ecda5f6, 0xbf373d17, 0x3e817335,
144 0xbcdbd14f, 0xbf6c5fd0, 0xbf1f453e, 0xbed948db,
145 0x3ef12234, 0x3e9d004c, 0x3f1e4f12, 0x3f20a945,
147 static const deUint32 s_snormInt32UintRef[] =
149 0xea022cba, 0x48745975, 0xdab0ad32, 0x496ff70b,
150 0x66769b98, 0x33697d79, 0xa46174b5, 0x205ccd4c,
151 0xfc90bac3, 0x89d017e3, 0xb05d6128, 0xc9adc95d,
152 0x3c488cfc, 0x27401311, 0x4f2788e4, 0x5054a252,
154 static const deUint32 s_snormInt32IntRef[] =
156 0xea022cba, 0x48745975, 0xdab0ad32, 0x496ff70b,
157 0x66769b98, 0x33697d79, 0xa46174b5, 0x205ccd4c,
158 0xfc90bac3, 0x89d017e3, 0xb05d6128, 0xc9adc95d,
159 0x3c488cfc, 0x27401311, 0x4f2788e4, 0x5054a252,
162 static const deUint8 s_unormInt8In[] =
164 0x90, 0xa0, 0xa9, 0x26,
165 0x24, 0xc4, 0xa1, 0xa5,
166 0xdb, 0x0e, 0x09, 0x7a,
167 0x7f, 0x3d, 0xf2, 0x1f,
169 static const deUint32 s_unormInt8FloatRef[] =
171 0x3f109091, 0x3f20a0a1, 0x3f29a9aa, 0x3e189899,
172 0x3e109091, 0x3f44c4c5, 0x3f21a1a2, 0x3f25a5a6,
173 0x3f5bdbdc, 0x3d60e0e1, 0x3d109091, 0x3ef4f4f5,
174 0x3efefeff, 0x3e74f4f5, 0x3f72f2f3, 0x3df8f8f9,
176 static const deUint32 s_unormInt8UintRef[] =
178 0x00000090, 0x000000a0, 0x000000a9, 0x00000026,
179 0x00000024, 0x000000c4, 0x000000a1, 0x000000a5,
180 0x000000db, 0x0000000e, 0x00000009, 0x0000007a,
181 0x0000007f, 0x0000003d, 0x000000f2, 0x0000001f,
183 static const deUint32 s_unormInt8IntRef[] =
185 0x00000090, 0x000000a0, 0x000000a9, 0x00000026,
186 0x00000024, 0x000000c4, 0x000000a1, 0x000000a5,
187 0x000000db, 0x0000000e, 0x00000009, 0x0000007a,
188 0x0000007f, 0x0000003d, 0x000000f2, 0x0000001f,
191 static const deUint8 s_unormInt16In[] =
193 0xb6, 0x85, 0xf0, 0x1a,
194 0xbc, 0x76, 0x5b, 0x59,
195 0xf8, 0x74, 0x80, 0x6c,
196 0xb1, 0x80, 0x4a, 0xdc,
197 0xeb, 0x61, 0xa3, 0x12,
198 0xf6, 0x65, 0x6b, 0x25,
199 0x29, 0xe0, 0xe3, 0x0d,
200 0x3a, 0xac, 0xa7, 0x97,
202 static const deUint32 s_unormInt16FloatRef[] =
204 0x3f05b686, 0x3dd780d8, 0x3eed78ed, 0x3eb2b6b3,
205 0x3ee9f0ea, 0x3ed900d9, 0x3f00b181, 0x3f5c4adc,
206 0x3ec3d6c4, 0x3d951895, 0x3ecbeccc, 0x3e15ac96,
207 0x3f6029e0, 0x3d5e30de, 0x3f2c3aac, 0x3f17a798,
209 static const deUint32 s_unormInt16UintRef[] =
211 0x000085b6, 0x00001af0, 0x000076bc, 0x0000595b,
212 0x000074f8, 0x00006c80, 0x000080b1, 0x0000dc4a,
213 0x000061eb, 0x000012a3, 0x000065f6, 0x0000256b,
214 0x0000e029, 0x00000de3, 0x0000ac3a, 0x000097a7,
216 static const deUint32 s_unormInt16IntRef[] =
218 0x000085b6, 0x00001af0, 0x000076bc, 0x0000595b,
219 0x000074f8, 0x00006c80, 0x000080b1, 0x0000dc4a,
220 0x000061eb, 0x000012a3, 0x000065f6, 0x0000256b,
221 0x0000e029, 0x00000de3, 0x0000ac3a, 0x000097a7,
224 static const deUint8 s_unormInt24In[] =
226 0xea, 0x65, 0x31, 0xb3,
227 0x53, 0x62, 0x02, 0xf1,
228 0xda, 0x3c, 0xaf, 0x31,
229 0x35, 0xd6, 0x1f, 0xe4,
230 0xfa, 0x3b, 0xb9, 0x48,
231 0x73, 0x9a, 0xde, 0x6b,
232 0x3e, 0xa5, 0x15, 0x90,
233 0x95, 0xc2, 0x56, 0x8b,
234 0xd2, 0x14, 0xd5, 0xe5,
235 0xd0, 0x7b, 0x9f, 0x74,
236 0x79, 0x58, 0x86, 0xa9,
237 0xc0, 0xdf, 0xb6, 0xb4,
239 static const deUint32 s_unormInt24FloatRef[] =
241 0x3e4597a9, 0x3ec4a767, 0x3f5af103, 0x3e46bcf1,
242 0x3dfeb1a9, 0x3e6feb91, 0x3ee69173, 0x3ed7bd35,
243 0x3dad29f1, 0x3f429591, 0x3f528b57, 0x3f65d515,
244 0x3f1f7bd1, 0x3eb0f2e9, 0x3f40a987, 0x3f34b6e0,
246 static const deUint32 s_unormInt24UintRef[] =
248 0x003165ea, 0x006253b3, 0x00daf102, 0x0031af3c,
249 0x001fd635, 0x003bfae4, 0x007348b9, 0x006bde9a,
250 0x0015a53e, 0x00c29590, 0x00d28b56, 0x00e5d514,
251 0x009f7bd0, 0x00587974, 0x00c0a986, 0x00b4b6df,
253 static const deUint32 s_unormInt24IntRef[] =
255 0x003165ea, 0x006253b3, 0x00daf102, 0x0031af3c,
256 0x001fd635, 0x003bfae4, 0x007348b9, 0x006bde9a,
257 0x0015a53e, 0x00c29590, 0x00d28b56, 0x00e5d514,
258 0x009f7bd0, 0x00587974, 0x00c0a986, 0x00b4b6df,
261 static const deUint8 s_unormInt32In[] =
263 0x45, 0x7d, 0xe1, 0x55,
264 0xd2, 0xcb, 0xc5, 0x17,
265 0x64, 0x87, 0x84, 0x50,
266 0x37, 0x60, 0x54, 0xa1,
267 0xa8, 0x7e, 0xea, 0x98,
268 0x1a, 0xd1, 0xb4, 0x70,
269 0x2d, 0xcb, 0xff, 0x13,
270 0x3d, 0xd7, 0x3c, 0xe4,
271 0x94, 0xd6, 0xb4, 0xf7,
272 0x01, 0x58, 0x32, 0x9d,
273 0x91, 0x2b, 0x49, 0x1f,
274 0xd0, 0xca, 0x3d, 0x05,
275 0x14, 0x5a, 0x95, 0xd0,
276 0xfd, 0x64, 0x33, 0xd3,
277 0x73, 0x87, 0xa5, 0xf9,
278 0x6d, 0xc8, 0x39, 0x03,
280 static const deUint32 s_unormInt32FloatRef[] =
282 0x3eabc2fb, 0x3dbe2e5f, 0x3ea1090f, 0x3f215460,
283 0x3f18ea7f, 0x3ee169a2, 0x3d9ffe59, 0x3f643cd7,
284 0x3f77b4d7, 0x3f1d3258, 0x3dfa495d, 0x3ca7b95a,
285 0x3f50955a, 0x3f533365, 0x3f79a587, 0x3c4e721b,
287 static const deUint32 s_unormInt32UintRef[] =
289 0x55e17d45, 0x17c5cbd2, 0x50848764, 0xa1546037,
290 0x98ea7ea8, 0x70b4d11a, 0x13ffcb2d, 0xe43cd73d,
291 0xf7b4d694, 0x9d325801, 0x1f492b91, 0x053dcad0,
292 0xd0955a14, 0xd33364fd, 0xf9a58773, 0x0339c86d,
294 static const deUint32 s_unormInt32IntRef[] =
296 0x55e17d45, 0x17c5cbd2, 0x50848764, 0xa1546037,
297 0x98ea7ea8, 0x70b4d11a, 0x13ffcb2d, 0xe43cd73d,
298 0xf7b4d694, 0x9d325801, 0x1f492b91, 0x053dcad0,
299 0xd0955a14, 0xd33364fd, 0xf9a58773, 0x0339c86d,
302 static const deUint8 s_unormByte44In[] =
304 0xdb, 0xa8, 0x29, 0x2d,
306 static const deUint32 s_unormByte44FloatRef[] =
308 0x3f5dddde, 0x3f3bbbbc, 0x00000000, 0x3f800000,
309 0x3f2aaaab, 0x3f088889, 0x00000000, 0x3f800000,
310 0x3e088889, 0x3f19999a, 0x00000000, 0x3f800000,
311 0x3e088889, 0x3f5dddde, 0x00000000, 0x3f800000,
313 static const deUint32 s_unormByte44IntRef[] =
315 0x0000000d, 0x0000000b, 0x00000000, 0x00000001,
316 0x0000000a, 0x00000008, 0x00000000, 0x00000001,
317 0x00000002, 0x00000009, 0x00000000, 0x00000001,
318 0x00000002, 0x0000000d, 0x00000000, 0x00000001,
320 static const deUint32 s_unsignedByte44FloatRef[] =
322 0x41500000, 0x41300000, 0x00000000, 0x3f800000,
323 0x41200000, 0x41000000, 0x00000000, 0x3f800000,
324 0x40000000, 0x41100000, 0x00000000, 0x3f800000,
325 0x40000000, 0x41500000, 0x00000000, 0x3f800000,
328 static const deUint8 s_unormShort565In[] =
330 0xea, 0x7e, 0xcc, 0x28,
331 0x38, 0xce, 0x8f, 0x16,
333 static const deUint32 s_unormShort565FloatRef[] =
335 0x3ef7bdef, 0x3f5f7df8, 0x3ea5294a, 0x3f800000,
336 0x3e25294a, 0x3dc30c31, 0x3ec6318c, 0x3f800000,
337 0x3f4e739d, 0x3f471c72, 0x3f46318c, 0x3f800000,
338 0x3d842108, 0x3f534d35, 0x3ef7bdef, 0x3f800000,
340 static const deUint32 s_unormShort565IntRef[] =
342 0x0000000f, 0x00000037, 0x0000000a, 0x00000001,
343 0x00000005, 0x00000006, 0x0000000c, 0x00000001,
344 0x00000019, 0x00000031, 0x00000018, 0x00000001,
345 0x00000002, 0x00000034, 0x0000000f, 0x00000001,
347 static const deUint32 s_unsignedShort565FloatRef[] =
349 0x41700000, 0x425c0000, 0x41200000, 0x3f800000,
350 0x40a00000, 0x40c00000, 0x41400000, 0x3f800000,
351 0x41c80000, 0x42440000, 0x41c00000, 0x3f800000,
352 0x40000000, 0x42500000, 0x41700000, 0x3f800000,
355 static const deUint8 s_unormShort555In[] =
357 0x02, 0xea, 0x89, 0x13,
358 0x94, 0x5a, 0x5b, 0x60,
360 static const deUint32 s_unormShort555FloatRef[] =
362 0x3f56b5ad, 0x3f042108, 0x3d842108, 0x3f800000,
363 0x3e042108, 0x3f6739ce, 0x3e94a529, 0x3f800000,
364 0x3f35ad6b, 0x3f25294a, 0x3f25294a, 0x3f800000,
365 0x3f46318c, 0x3d842108, 0x3f5ef7be, 0x3f800000,
367 static const deUint32 s_unormShort555IntRef[] =
369 0x0000001a, 0x00000010, 0x00000002, 0x00000001,
370 0x00000004, 0x0000001c, 0x00000009, 0x00000001,
371 0x00000016, 0x00000014, 0x00000014, 0x00000001,
372 0x00000018, 0x00000002, 0x0000001b, 0x00000001,
375 static const deUint8 s_unormShort4444In[] =
377 0x19, 0xdb, 0xa8, 0xa8,
378 0x72, 0x29, 0xb4, 0x2d,
380 static const deUint32 s_unormShort4444FloatRef[] =
382 0x3f5dddde, 0x3f3bbbbc, 0x3d888889, 0x3f19999a,
383 0x3f2aaaab, 0x3f088889, 0x3f2aaaab, 0x3f088889,
384 0x3e088889, 0x3f19999a, 0x3eeeeeef, 0x3e088889,
385 0x3e088889, 0x3f5dddde, 0x3f3bbbbc, 0x3e888889,
387 static const deUint32 s_unormShort4444IntRef[] =
389 0x0000000d, 0x0000000b, 0x00000001, 0x00000009,
390 0x0000000a, 0x00000008, 0x0000000a, 0x00000008,
391 0x00000002, 0x00000009, 0x00000007, 0x00000002,
392 0x00000002, 0x0000000d, 0x0000000b, 0x00000004,
394 static const deUint32 s_unsignedShort4444FloatRef[] =
396 0x41500000, 0x41300000, 0x3f800000, 0x41100000,
397 0x41200000, 0x41000000, 0x41200000, 0x41000000,
398 0x40000000, 0x41100000, 0x40e00000, 0x40000000,
399 0x40000000, 0x41500000, 0x41300000, 0x40800000,
402 static const deUint8 s_unormShort5551In[] =
404 0x13, 0x89, 0x6f, 0x3c,
405 0xae, 0xe9, 0xf2, 0xd9,
407 static const deUint32 s_unormShort5551FloatRef[] =
409 0x3f0c6319, 0x3e042108, 0x3e94a529, 0x3f800000,
410 0x3e6739ce, 0x3f0c6319, 0x3f3def7c, 0x3f800000,
411 0x3f6f7bdf, 0x3e46318c, 0x3f3def7c, 0x00000000,
412 0x3f5ef7be, 0x3e6739ce, 0x3f4e739d, 0x00000000,
414 static const deUint32 s_unormShort5551IntRef[] =
416 0x00000011, 0x00000004, 0x00000009, 0x00000001,
417 0x00000007, 0x00000011, 0x00000017, 0x00000001,
418 0x0000001d, 0x00000006, 0x00000017, 0x00000000,
419 0x0000001b, 0x00000007, 0x00000019, 0x00000000,
421 static const deUint32 s_unsignedShort5551FloatRef[] =
423 0x41880000, 0x40800000, 0x41100000, 0x3f800000,
424 0x40e00000, 0x41880000, 0x41b80000, 0x3f800000,
425 0x41e80000, 0x40c00000, 0x41b80000, 0x00000000,
426 0x41d80000, 0x40e00000, 0x41c80000, 0x00000000,
429 static const deUint8 s_unormShort1555In[] =
431 0xf8, 0xc5, 0x1f, 0x6c,
432 0xf0, 0x2f, 0xf2, 0x95,
434 static const deUint32 s_unormShort1555FloatRef[] =
436 0x3f800000, 0x3f0c6319, 0x3ef7bdef, 0x3f46318c,
437 0x00000000, 0x3f5ef7be, 0x00000000, 0x3f800000,
438 0x00000000, 0x3eb5ad6b, 0x3f800000, 0x3f042108,
439 0x3f800000, 0x3e25294a, 0x3ef7bdef, 0x3f14a529,
441 static const deUint32 s_unormShort1555IntRef[] =
443 0x00000001, 0x00000011, 0x0000000f, 0x00000018,
444 0x00000000, 0x0000001b, 0x00000000, 0x0000001f,
445 0x00000000, 0x0000000b, 0x0000001f, 0x00000010,
446 0x00000001, 0x00000005, 0x0000000f, 0x00000012,
449 static const deUint8 s_unormInt101010In[] =
451 0x81, 0xb3, 0x67, 0x51,
452 0xa9, 0x00, 0x34, 0xc5,
453 0xf0, 0x2f, 0xf2, 0x95,
454 0xf8, 0xc5, 0x1f, 0x6c,
456 static const deUint32 s_unormInt101010FloatRef[] =
458 0x3ea2a8aa, 0x3f1ee7ba, 0x3e60380e, 0x3f800000,
459 0x3f45314c, 0x3f50340d, 0x3d282a0b, 0x3f800000,
460 0x3f15e579, 0x3f48b22d, 0x3f7f3fd0, 0x3f800000,
461 0x3ed8360e, 0x3efe3f90, 0x3ebf2fcc, 0x3f800000,
463 static const deUint32 s_unormInt101010IntRef[] =
465 0x00000145, 0x0000027b, 0x000000e0, 0x00000001,
466 0x00000314, 0x00000340, 0x0000002a, 0x00000001,
467 0x00000257, 0x00000322, 0x000003fc, 0x00000001,
468 0x000001b0, 0x000001fc, 0x0000017e, 0x00000001,
471 static const deUint8 s_unormInt1010102RevIn[] =
473 0xfd, 0xc6, 0xf5, 0xc4,
474 0x32, 0xa8, 0xfd, 0x7d,
475 0xe7, 0x3f, 0x10, 0xd0,
476 0x86, 0x0d, 0x66, 0xd0,
478 static const deUint32 s_unormInt1010102RevFloatRef[] =
480 0x3f3f6fdc, 0x3eb8ae2c, 0x3d9e278a, 0x3f800000,
481 0x3d48320d, 0x3f5ab6ae, 0x3f77fdff, 0x3eaaaaab,
482 0x3f79fe80, 0x3c703c0f, 0x3e80a028, 0x3f800000,
483 0x3ec330cc, 0x3ec1b06c, 0x3e8320c8, 0x3f800000,
485 static const deUint32 s_unormInt1010102RevIntRef[] =
487 0x000002fd, 0x00000171, 0x0000004f, 0x00000003,
488 0x00000032, 0x0000036a, 0x000003df, 0x00000001,
489 0x000003e7, 0x0000000f, 0x00000101, 0x00000003,
490 0x00000186, 0x00000183, 0x00000106, 0x00000003,
492 static const deUint32 s_snormInt1010102RevFloatRef[] =
494 0xbf01c0e0, 0x3f38dc6e, 0x3e1e4f28, 0xbf800000,
495 0x3dc86432, 0xbe964b26, 0xbd844221, 0x3f800000,
496 0xbd486432, 0x3cf0783c, 0x3f00c060, 0xbf800000,
497 0x3f4361b1, 0x3f41e0f0, 0x3f0341a1, 0xbf800000,
499 static const deUint32 s_snormInt1010102RevIntRef[] =
501 0xfffffefd, 0x00000171, 0x0000004f, 0xffffffff,
502 0x00000032, 0xffffff6a, 0xffffffdf, 0x00000001,
503 0xffffffe7, 0x0000000f, 0x00000101, 0xffffffff,
504 0x00000186, 0x00000183, 0x00000106, 0xffffffff,
507 static const deUint8 s_unsignedInt1010102RevIn[] =
509 0xb8, 0x4c, 0xfd, 0x00,
510 0x65, 0x7f, 0xb2, 0x4e,
511 0x11, 0x3e, 0x03, 0x23,
512 0xae, 0xc9, 0xdd, 0xa2,
514 static const deUint32 s_unsignedInt1010102RevFloatRef[] =
516 0x43380000, 0x4454c000, 0x41700000, 0x00000000,
517 0x44594000, 0x431f0000, 0x436b0000, 0x3f800000,
518 0x44044000, 0x434f0000, 0x440c0000, 0x00000000,
519 0x43d70000, 0x445c8000, 0x440b4000, 0x40000000,
521 static const deUint32 s_unsignedInt1010102RevIntRef[] =
523 0x000000b8, 0x00000353, 0x0000000f, 0x00000000,
524 0x00000365, 0x0000009f, 0x000000eb, 0x00000001,
525 0x00000211, 0x000000cf, 0x00000230, 0x00000000,
526 0x000001ae, 0x00000372, 0x0000022d, 0x00000002,
528 static const deUint32 s_signedInt1010102RevFloatRef[] =
530 0x43380000, 0x4f7fffff, 0x41700000, 0x00000000,
531 0x4f7fffff, 0x431f0000, 0x436b0000, 0x3f800000,
532 0x4f7ffffe, 0x434f0000, 0x4f7ffffe, 0x00000000,
533 0x43d70000, 0x4f7fffff, 0x4f7ffffe, 0x4f800000,
535 static const deUint32 s_signedInt1010102RevIntRef[] =
537 0x000000b8, 0xffffff53, 0x0000000f, 0x00000000,
538 0xffffff65, 0x0000009f, 0x000000eb, 0x00000001,
539 0xfffffe11, 0x000000cf, 0xfffffe30, 0x00000000,
540 0x000001ae, 0xffffff72, 0xfffffe2d, 0xfffffffe,
543 static const deUint8 s_unsignedInt11f11f10fRevIn[] =
545 0x8e, 0x1b, 0x81, 0x45,
546 0xcf, 0x47, 0x50, 0x29,
547 0xff, 0x5e, 0x8e, 0x93,
548 0x95, 0x07, 0x45, 0x4a,
550 static const deUint32 s_unsignedInt11f11f10fRevFloatRef[] =
552 0x3f1c0000, 0x380c0000, 0x3c580000, 0x3f800000,
553 0x7fffffff, 0x3c100000, 0x3a940000, 0x3f800000,
554 0x45fe0000, 0x3b960000, 0x41380000, 0x3f800000,
555 0x472a0000, 0x39400000, 0x3ca40000, 0x3f800000,
558 static const deUint8 s_unsignedInt999E5RevIn[] =
560 0x88, 0x8b, 0x50, 0x34,
561 0x2b, 0x2f, 0xe2, 0x92,
562 0x95, 0x7f, 0xeb, 0x18,
563 0x6b, 0xe2, 0x27, 0x30,
565 static const deUint32 s_unsignedInt999E5RevFloatRef[] =
567 0x3ac40000, 0x398a0000, 0x3a8a0000, 0x3f800000,
568 0x40958000, 0x408b8000, 0x40380000, 0x3f800000,
569 0x394a8000, 0x395f8000, 0x37e80000, 0x3f800000,
570 0x39d60000, 0x3af88000, 0x38100000, 0x3f800000,
573 static const deUint8 s_unsignedInt1688In[] =
575 0x02, 0x50, 0x91, 0x85,
576 0xcc, 0xe2, 0xfd, 0xc8,
577 0x62, 0xeb, 0x0f, 0xe6,
578 0x95, 0x27, 0x26, 0x24,
580 static const deUint32 s_unsignedInt1688FloatRef[] =
582 0x3f059186, 0x00000000, 0x00000000, 0x3f800000,
583 0x3f48fdc9, 0x00000000, 0x00000000, 0x3f800000,
584 0x3f660fe6, 0x00000000, 0x00000000, 0x3f800000,
585 0x3e109891, 0x00000000, 0x00000000, 0x3f800000,
587 static const deUint32 s_unsignedInt1688UintRef[] =
589 0x00000002, 0x00000000, 0x00000000, 0x00000001,
590 0x000000cc, 0x00000000, 0x00000000, 0x00000001,
591 0x00000062, 0x00000000, 0x00000000, 0x00000001,
592 0x00000095, 0x00000000, 0x00000000, 0x00000001,
595 static const deUint8 s_unsignedInt248In[] =
597 0xea, 0x7e, 0xcc, 0x28,
598 0x38, 0xce, 0x8f, 0x16,
599 0x3e, 0x4f, 0xe2, 0xfd,
600 0x74, 0x5e, 0xf2, 0x30,
602 static const deUint32 s_unsignedInt248FloatRef[] =
604 0x3e2331f9, 0x00000000, 0x00000000, 0x3f800000,
605 0x3db47e71, 0x00000000, 0x00000000, 0x3f800000,
606 0x3f7de250, 0x00000000, 0x00000000, 0x3f800000,
607 0x3e43c979, 0x00000000, 0x00000000, 0x3f800000,
609 static const deUint32 s_unsignedInt248UintRef[] =
611 0x000000ea, 0x00000000, 0x00000000, 0x00000001,
612 0x00000038, 0x00000000, 0x00000000, 0x00000001,
613 0x0000003e, 0x00000000, 0x00000000, 0x00000001,
614 0x00000074, 0x00000000, 0x00000000, 0x00000001,
617 static const deUint8 s_unsignedInt248RevIn[] =
619 0x7e, 0xcc, 0x28, 0xea,
620 0xce, 0x8f, 0x16, 0x38,
621 0x4f, 0xe2, 0xfd, 0x3e,
622 0x5e, 0xf2, 0x30, 0x74,
624 static const deUint32 s_unsignedInt248RevFloatRef[] =
626 0x3e2331f9, 0x00000000, 0x00000000, 0x3f800000,
627 0x3db47e71, 0x00000000, 0x00000000, 0x3f800000,
628 0x3f7de250, 0x00000000, 0x00000000, 0x3f800000,
629 0x3e43c979, 0x00000000, 0x00000000, 0x3f800000,
631 static const deUint32 s_unsignedInt248RevUintRef[] =
633 0x000000ea, 0x00000000, 0x00000000, 0x00000001,
634 0x00000038, 0x00000000, 0x00000000, 0x00000001,
635 0x0000003e, 0x00000000, 0x00000000, 0x00000001,
636 0x00000074, 0x00000000, 0x00000000, 0x00000001,
639 static const deUint8 s_signedInt8In[] =
641 0x3a, 0x5b, 0x6d, 0x6a,
642 0x44, 0x56, 0x6b, 0x21,
643 0x6a, 0x0b, 0x24, 0xd9,
644 0xd4, 0xb4, 0xda, 0x97,
646 static const deUint32 s_signedInt8FloatRef[] =
648 0x42680000, 0x42b60000, 0x42da0000, 0x42d40000,
649 0x42880000, 0x42ac0000, 0x42d60000, 0x42040000,
650 0x42d40000, 0x41300000, 0x42100000, 0xc21c0000,
651 0xc2300000, 0xc2980000, 0xc2180000, 0xc2d20000,
653 static const deUint32 s_signedInt8UintRef[] =
655 0x0000003a, 0x0000005b, 0x0000006d, 0x0000006a,
656 0x00000044, 0x00000056, 0x0000006b, 0x00000021,
657 0x0000006a, 0x0000000b, 0x00000024, 0xffffffd9,
658 0xffffffd4, 0xffffffb4, 0xffffffda, 0xffffff97,
660 static const deUint32 s_signedInt8IntRef[] =
662 0x0000003a, 0x0000005b, 0x0000006d, 0x0000006a,
663 0x00000044, 0x00000056, 0x0000006b, 0x00000021,
664 0x0000006a, 0x0000000b, 0x00000024, 0xffffffd9,
665 0xffffffd4, 0xffffffb4, 0xffffffda, 0xffffff97,
668 static const deUint8 s_signedInt16In[] =
670 0xf1, 0xdd, 0xcd, 0xc3,
671 0x1c, 0xb6, 0x6f, 0x74,
672 0x19, 0x13, 0x25, 0xed,
673 0x16, 0xce, 0x0d, 0x0f,
674 0x5c, 0xf4, 0x3c, 0xa3,
675 0x6d, 0x25, 0x65, 0x6d,
676 0xae, 0x5d, 0x88, 0xfa,
677 0x86, 0x3e, 0x6a, 0x91,
679 static const deUint32 s_signedInt16FloatRef[] =
681 0xc6083c00, 0xc670cc00, 0xc693c800, 0x46e8de00,
682 0x4598c800, 0xc596d800, 0xc647a800, 0x4570d000,
683 0xc53a4000, 0xc6b98800, 0x4615b400, 0x46daca00,
684 0x46bb5c00, 0xc4af0000, 0x467a1800, 0xc6dd2c00,
686 static const deUint32 s_signedInt16UintRef[] =
688 0xffffddf1, 0xffffc3cd, 0xffffb61c, 0x0000746f,
689 0x00001319, 0xffffed25, 0xffffce16, 0x00000f0d,
690 0xfffff45c, 0xffffa33c, 0x0000256d, 0x00006d65,
691 0x00005dae, 0xfffffa88, 0x00003e86, 0xffff916a,
693 static const deUint32 s_signedInt16IntRef[] =
695 0xffffddf1, 0xffffc3cd, 0xffffb61c, 0x0000746f,
696 0x00001319, 0xffffed25, 0xffffce16, 0x00000f0d,
697 0xfffff45c, 0xffffa33c, 0x0000256d, 0x00006d65,
698 0x00005dae, 0xfffffa88, 0x00003e86, 0xffff916a,
701 static const deUint8 s_signedInt32In[] =
703 0xc6, 0x7e, 0x50, 0x2a,
704 0xec, 0x0f, 0x9b, 0x44,
705 0x4d, 0xa9, 0x77, 0x0d,
706 0x69, 0x4c, 0xd3, 0x76,
707 0xf0, 0xb7, 0xde, 0x6b,
708 0x4e, 0xe2, 0xb1, 0x58,
709 0xa8, 0x9c, 0xfc, 0x6d,
710 0x75, 0x8f, 0x3c, 0x7f,
711 0xf3, 0x19, 0x14, 0x97,
712 0xf0, 0x87, 0x5c, 0x11,
713 0x95, 0x32, 0xab, 0x7a,
714 0x03, 0x2b, 0xdf, 0x52,
715 0x68, 0x84, 0xd9, 0x91,
716 0xec, 0x2a, 0xf1, 0xd0,
717 0xf7, 0x73, 0x8f, 0x0a,
718 0x62, 0xd2, 0x76, 0xfd,
720 static const deUint32 s_signedInt32FloatRef[] =
722 0x4e2941fb, 0x4e893620, 0x4d577a95, 0x4eeda699,
723 0x4ed7bd70, 0x4eb163c5, 0x4edbf939, 0x4efe791f,
724 0xced1d7cc, 0x4d8ae440, 0x4ef55665, 0x4ea5be56,
725 0xcedc4cf7, 0xce3c3b54, 0x4d28f73f, 0xcc224b68,
727 static const deUint32 s_signedInt32UintRef[] =
729 0x2a507ec6, 0x449b0fec, 0x0d77a94d, 0x76d34c69,
730 0x6bdeb7f0, 0x58b1e24e, 0x6dfc9ca8, 0x7f3c8f75,
731 0x971419f3, 0x115c87f0, 0x7aab3295, 0x52df2b03,
732 0x91d98468, 0xd0f12aec, 0x0a8f73f7, 0xfd76d262,
734 static const deUint32 s_signedInt32IntRef[] =
736 0x2a507ec6, 0x449b0fec, 0x0d77a94d, 0x76d34c69,
737 0x6bdeb7f0, 0x58b1e24e, 0x6dfc9ca8, 0x7f3c8f75,
738 0x971419f3, 0x115c87f0, 0x7aab3295, 0x52df2b03,
739 0x91d98468, 0xd0f12aec, 0x0a8f73f7, 0xfd76d262,
742 static const deUint8 s_unsignedInt8In[] =
744 0x68, 0xa6, 0x99, 0x6e,
745 0x13, 0x90, 0x0f, 0x40,
746 0x34, 0x76, 0x05, 0x9a,
747 0x6c, 0x9c, 0x1d, 0x6a,
749 static const deUint32 s_unsignedInt8FloatRef[] =
751 0x42d00000, 0x43260000, 0x43190000, 0x42dc0000,
752 0x41980000, 0x43100000, 0x41700000, 0x42800000,
753 0x42500000, 0x42ec0000, 0x40a00000, 0x431a0000,
754 0x42d80000, 0x431c0000, 0x41e80000, 0x42d40000,
756 static const deUint32 s_unsignedInt8UintRef[] =
758 0x00000068, 0x000000a6, 0x00000099, 0x0000006e,
759 0x00000013, 0x00000090, 0x0000000f, 0x00000040,
760 0x00000034, 0x00000076, 0x00000005, 0x0000009a,
761 0x0000006c, 0x0000009c, 0x0000001d, 0x0000006a,
763 static const deUint32 s_unsignedInt8IntRef[] =
765 0x00000068, 0x000000a6, 0x00000099, 0x0000006e,
766 0x00000013, 0x00000090, 0x0000000f, 0x00000040,
767 0x00000034, 0x00000076, 0x00000005, 0x0000009a,
768 0x0000006c, 0x0000009c, 0x0000001d, 0x0000006a,
771 static const deUint8 s_unsignedInt16In[] =
773 0xa5, 0x62, 0x98, 0x7c,
774 0x13, 0x21, 0xc8, 0xf4,
775 0x78, 0x0b, 0x9f, 0xc2,
776 0x92, 0x1c, 0xa9, 0x25,
777 0x86, 0xea, 0x1f, 0x1c,
778 0x41, 0xf7, 0xe2, 0x2e,
779 0x38, 0x69, 0xf2, 0x6d,
780 0x01, 0xec, 0x7f, 0xc5,
782 static const deUint32 s_unsignedInt16FloatRef[] =
784 0x46c54a00, 0x46f93000, 0x46044c00, 0x4774c800,
785 0x45378000, 0x47429f00, 0x45e49000, 0x4616a400,
786 0x476a8600, 0x45e0f800, 0x47774100, 0x463b8800,
787 0x46d27000, 0x46dbe400, 0x476c0100, 0x47457f00,
789 static const deUint32 s_unsignedInt16UintRef[] =
791 0x000062a5, 0x00007c98, 0x00002113, 0x0000f4c8,
792 0x00000b78, 0x0000c29f, 0x00001c92, 0x000025a9,
793 0x0000ea86, 0x00001c1f, 0x0000f741, 0x00002ee2,
794 0x00006938, 0x00006df2, 0x0000ec01, 0x0000c57f,
796 static const deUint32 s_unsignedInt16IntRef[] =
798 0x000062a5, 0x00007c98, 0x00002113, 0x0000f4c8,
799 0x00000b78, 0x0000c29f, 0x00001c92, 0x000025a9,
800 0x0000ea86, 0x00001c1f, 0x0000f741, 0x00002ee2,
801 0x00006938, 0x00006df2, 0x0000ec01, 0x0000c57f,
804 static const deUint8 s_unsignedInt24In[] =
806 0xa8, 0x11, 0x00, 0xc8,
807 0xe5, 0x07, 0xd3, 0x6d,
808 0x0a, 0xc7, 0xe4, 0x42,
809 0x2d, 0xf7, 0x5d, 0x9c,
810 0x2e, 0x18, 0xfd, 0xa4,
811 0x9e, 0x90, 0x0c, 0x31,
812 0x06, 0x04, 0xc4, 0xc2,
813 0xde, 0xfe, 0x7c, 0x1d,
814 0x57, 0x37, 0x4a, 0xf2,
815 0xe2, 0xf3, 0x74, 0x8e,
816 0x8f, 0xd6, 0x73, 0xc4,
817 0x91, 0xa0, 0x49, 0xe3,
819 static const deUint32 s_unsignedInt24FloatRef[] =
821 0x458d4000, 0x48fcb900, 0x4926dd30, 0x4a85c98e,
822 0x4abbee5a, 0x49c174e0, 0x4b1ea4fd, 0x4a443240,
823 0x4b440406, 0x4b7edec2, 0x4aae3af8, 0x4b724a37,
824 0x4ae9e7c4, 0x4b568f8e, 0x4b11c473, 0x4b6349a0,
826 static const deUint32 s_unsignedInt24UintRef[] =
828 0x000011a8, 0x0007e5c8, 0x000a6dd3, 0x0042e4c7,
829 0x005df72d, 0x00182e9c, 0x009ea4fd, 0x00310c90,
830 0x00c40406, 0x00fedec2, 0x00571d7c, 0x00f24a37,
831 0x0074f3e2, 0x00d68f8e, 0x0091c473, 0x00e349a0,
833 static const deUint32 s_unsignedInt24IntRef[] =
835 0x000011a8, 0x0007e5c8, 0x000a6dd3, 0x0042e4c7,
836 0x005df72d, 0x00182e9c, 0x009ea4fd, 0x00310c90,
837 0x00c40406, 0x00fedec2, 0x00571d7c, 0x00f24a37,
838 0x0074f3e2, 0x00d68f8e, 0x0091c473, 0x00e349a0,
841 static const deUint8 s_unsignedInt32In[] =
843 0x90, 0xb0, 0x00, 0xa8,
844 0xd8, 0x42, 0x5b, 0xae,
845 0x40, 0x70, 0x38, 0x2a,
846 0x92, 0x76, 0xd8, 0x70,
847 0x04, 0x0d, 0x67, 0x87,
848 0x9c, 0xdd, 0xb1, 0xeb,
849 0xfc, 0x37, 0xe6, 0x40,
850 0x24, 0x9c, 0x6a, 0x0f,
851 0x09, 0x0e, 0xb6, 0x2f,
852 0x31, 0x95, 0x43, 0x22,
853 0x24, 0xde, 0x70, 0x2a,
854 0x05, 0xa2, 0x84, 0x38,
855 0x16, 0x9f, 0x65, 0x0e,
856 0xb2, 0x99, 0x84, 0x6d,
857 0xef, 0x86, 0x94, 0xf0,
858 0x25, 0x9d, 0xf9, 0x67,
860 static const deUint32 s_unsignedInt32FloatRef[] =
862 0x4f2800b1, 0x4f2e5b43, 0x4e28e1c1, 0x4ee1b0ed,
863 0x4f07670d, 0x4f6bb1de, 0x4e81cc70, 0x4d76a9c2,
864 0x4e3ed838, 0x4e090e55, 0x4e29c379, 0x4e621288,
865 0x4d6659f1, 0x4edb0933, 0x4f709487, 0x4ecff33a,
867 static const deUint32 s_unsignedInt32UintRef[] =
869 0xa800b090, 0xae5b42d8, 0x2a387040, 0x70d87692,
870 0x87670d04, 0xebb1dd9c, 0x40e637fc, 0x0f6a9c24,
871 0x2fb60e09, 0x22439531, 0x2a70de24, 0x3884a205,
872 0x0e659f16, 0x6d8499b2, 0xf09486ef, 0x67f99d25,
874 static const deUint32 s_unsignedInt32IntRef[] =
876 0xa800b090, 0xae5b42d8, 0x2a387040, 0x70d87692,
877 0x87670d04, 0xebb1dd9c, 0x40e637fc, 0x0f6a9c24,
878 0x2fb60e09, 0x22439531, 0x2a70de24, 0x3884a205,
879 0x0e659f16, 0x6d8499b2, 0xf09486ef, 0x67f99d25,
882 static const deUint8 s_halfFloatIn[] =
884 0x2b, 0x74, 0x6a, 0x5d,
885 0x1c, 0xb2, 0x9a, 0x4d,
886 0xad, 0x55, 0x22, 0x01,
887 0xce, 0x2d, 0x97, 0x0d,
888 0x71, 0x31, 0x42, 0x2b,
889 0xeb, 0x26, 0xc7, 0x16,
890 0x94, 0xd2, 0x22, 0x79,
891 0x89, 0xbd, 0xff, 0xbc,
893 static const deUint32 s_halfFloatFloatRef[] =
895 0x46856000, 0x43ad4000, 0xbe438000, 0x41b34000,
896 0x42b5a000, 0x37910000, 0x3db9c000, 0x39b2e000,
897 0x3e2e2000, 0x3d684000, 0x3cdd6000, 0x3ad8e000,
898 0xc2528000, 0x47244000, 0xbfb12000, 0xbf9fe000,
900 static const deUint32 s_halfFloatUintRef[] =
902 0x000042b0, 0x0000015a, 0x00000000, 0x00000016,
903 0x0000005a, 0x00000000, 0x00000000, 0x00000000,
904 0x00000000, 0x00000000, 0x00000000, 0x00000000,
905 0xffffffcc, 0x0000a440, 0xffffffff, 0xffffffff,
907 static const deUint32 s_halfFloatIntRef[] =
909 0x000042b0, 0x0000015a, 0x00000000, 0x00000016,
910 0x0000005a, 0x00000000, 0x00000000, 0x00000000,
911 0x00000000, 0x00000000, 0x00000000, 0x00000000,
912 0xffffffcc, 0x0000a440, 0xffffffff, 0xffffffff,
915 static const deUint8 s_floatIn[] =
917 0x92, 0xac, 0x68, 0x36,
918 0x9f, 0x42, 0x0b, 0x6e,
919 0x67, 0xcf, 0x0f, 0x20,
920 0x22, 0x6c, 0xe4, 0x0f,
921 0xb3, 0x72, 0xc8, 0x8a,
922 0x4b, 0x99, 0xc3, 0xb0,
923 0xbd, 0x78, 0x5c, 0x16,
924 0x1c, 0xce, 0xb7, 0x4e,
925 0x15, 0xdf, 0x37, 0xfd,
926 0xeb, 0x32, 0xe9, 0x47,
927 0x68, 0x1a, 0xaa, 0xd0,
928 0xb9, 0xba, 0x77, 0xe7,
929 0x81, 0x0a, 0x42, 0x5a,
930 0xb0, 0x5a, 0xee, 0x06,
931 0x77, 0xb4, 0x7b, 0x57,
932 0xf5, 0x35, 0xac, 0x56,
934 static const deUint32 s_floatFloatRef[] =
936 0x3668ac92, 0x6e0b429f, 0x200fcf67, 0x0fe46c22,
937 0x8ac872b3, 0xb0c3994b, 0x165c78bd, 0x4eb7ce1c,
938 0xfd37df15, 0x47e932eb, 0xd0aa1a68, 0xe777bab9,
939 0x5a420a81, 0x06ee5ab0, 0x577bb477, 0x56ac35f5,
941 static const deUint32 s_floatUintRef[] =
943 0x00000000, 0x80000000, 0x00000000, 0x00000000,
944 0x00000000, 0x00000000, 0x00000000, 0x5be70e00,
945 0x80000000, 0x0001d265, 0x80000000, 0x80000000,
946 0x80000000, 0x00000000, 0x80000000, 0x80000000,
948 static const deUint32 s_floatIntRef[] =
950 0x00000000, 0x80000000, 0x00000000, 0x00000000,
951 0x00000000, 0x00000000, 0x00000000, 0x5be70e00,
952 0x80000000, 0x0001d265, 0x80000000, 0x80000000,
953 0x80000000, 0x00000000, 0x80000000, 0x80000000,
956 static const deUint8 s_float64In[] =
958 0xbd, 0xb6, 0xc3, 0xd2,
959 0xf6, 0x62, 0x29, 0xd9,
960 0x2f, 0xc2, 0x46, 0x18,
961 0x6b, 0x0d, 0x0a, 0x53,
962 0x6d, 0x0c, 0xf3, 0x80,
963 0xbd, 0xa9, 0x12, 0x89,
964 0x6b, 0x9f, 0x3d, 0xdd,
965 0xb3, 0x91, 0xee, 0xf5,
966 0x92, 0xac, 0x68, 0x36,
967 0x9f, 0x42, 0x0b, 0x6e,
968 0x67, 0xcf, 0x0f, 0x20,
969 0x22, 0x6c, 0xe4, 0x0f,
970 0xb3, 0x72, 0xc8, 0x8a,
971 0x4b, 0x99, 0xc3, 0xb0,
972 0xbd, 0x78, 0x5c, 0x16,
973 0x1c, 0xce, 0xb7, 0x4e,
974 0x15, 0xdf, 0x37, 0xfd,
975 0xeb, 0x32, 0xe9, 0x47,
976 0x68, 0x1a, 0xaa, 0xd0,
977 0xb9, 0xba, 0x77, 0xe7,
978 0x81, 0x0a, 0x42, 0x5a,
979 0xb0, 0x5a, 0xee, 0x06,
980 0x77, 0xb4, 0x7b, 0x57,
981 0xf5, 0x35, 0xac, 0x56,
982 0x2b, 0x74, 0x6a, 0x5d,
983 0x1c, 0xb2, 0x9a, 0x4d,
984 0xad, 0x55, 0x22, 0x01,
985 0xce, 0x2d, 0x97, 0x0d,
986 0x71, 0x31, 0x42, 0x2b,
987 0xeb, 0x26, 0xc7, 0x16,
988 0x94, 0xd2, 0x22, 0x79,
989 0x89, 0xbd, 0xff, 0xbc,
991 static const deUint32 s_float64FloatRef[] =
993 0xff800000, 0x7f800000, 0x80000000, 0xff800000,
994 0x7f800000, 0x00000000, 0x80000000, 0x7f800000,
995 0x7f499760, 0xff800000, 0x00000000, 0x7f800000,
996 0x7f800000, 0x00000000, 0x00000000, 0xa7fdec4c,
998 static const deUint32 s_float64IntRef[] =
1000 0x80000000, 0x80000000, 0x00000000, 0x80000000,
1001 0x80000000, 0x00000000, 0x00000000, 0x80000000,
1002 0x80000000, 0x80000000, 0x00000000, 0x80000000,
1003 0x80000000, 0x00000000, 0x00000000, 0x00000000,
1006 static const deUint8 s_floatUnsignedInt248RevIn[] =
1008 0xbd, 0xb6, 0xc3, 0xd2,
1009 0xf6, 0x62, 0x29, 0xd9,
1010 0x2f, 0xc2, 0x46, 0x18,
1011 0x6b, 0x0d, 0x0a, 0x53,
1012 0x6d, 0x0c, 0xf3, 0x80,
1013 0xbd, 0xa9, 0x12, 0x89,
1014 0x6b, 0x9f, 0x3d, 0xdd,
1015 0xb3, 0x91, 0xee, 0xf5,
1017 static const deUint32 s_floatUnsignedInt248RevFloatRef[] =
1019 0xd2c3b6bd, 0x00000000, 0x00000000, 0x3f800000,
1020 0x1846c22f, 0x00000000, 0x00000000, 0x3f800000,
1021 0x80f30c6d, 0x00000000, 0x00000000, 0x3f800000,
1022 0xdd3d9f6b, 0x00000000, 0x00000000, 0x3f800000,
1024 static const deUint32 s_floatUnsignedInt248RevUintRef[] =
1026 0x000000f6, 0x00000000, 0x00000000, 0x00000001,
1027 0x0000006b, 0x00000000, 0x00000000, 0x00000001,
1028 0x000000bd, 0x00000000, 0x00000000, 0x00000001,
1029 0x000000b3, 0x00000000, 0x00000000, 0x00000001,
1032 // \todo [2015-10-12 pyry] Collapse duplicate ref arrays
1036 const deUint8* input;
1037 const int inputSize;
1038 const deUint32* floatRef;
1039 const deUint32* intRef;
1040 const deUint32* uintRef;
1043 { s_snormInt8In, DE_LENGTH_OF_ARRAY(s_snormInt8In), s_snormInt8FloatRef, s_snormInt8IntRef, s_snormInt8UintRef },
1044 { s_snormInt16In, DE_LENGTH_OF_ARRAY(s_snormInt16In), s_snormInt16FloatRef, s_snormInt16IntRef, s_snormInt16UintRef },
1045 { s_snormInt32In, DE_LENGTH_OF_ARRAY(s_snormInt32In), s_snormInt32FloatRef, s_snormInt32IntRef, s_snormInt32UintRef },
1046 { s_unormInt8In, DE_LENGTH_OF_ARRAY(s_unormInt8In), s_unormInt8FloatRef, s_unormInt8IntRef, s_unormInt8UintRef },
1047 { s_unormInt16In, DE_LENGTH_OF_ARRAY(s_unormInt16In), s_unormInt16FloatRef, s_unormInt16IntRef, s_unormInt16UintRef },
1048 { s_unormInt24In, DE_LENGTH_OF_ARRAY(s_unormInt24In), s_unormInt24FloatRef, s_unormInt24IntRef, s_unormInt24UintRef },
1049 { s_unormInt32In, DE_LENGTH_OF_ARRAY(s_unormInt32In), s_unormInt32FloatRef, s_unormInt32IntRef, s_unormInt32UintRef },
1050 { s_unormByte44In, DE_LENGTH_OF_ARRAY(s_unormByte44In), s_unormByte44FloatRef, s_unormByte44IntRef, s_unormByte44IntRef },
1051 { s_unormShort565In, DE_LENGTH_OF_ARRAY(s_unormShort565In), s_unormShort565FloatRef, s_unormShort565IntRef, s_unormShort565IntRef, },
1052 { s_unormShort555In, DE_LENGTH_OF_ARRAY(s_unormShort555In), s_unormShort555FloatRef, s_unormShort555IntRef, s_unormShort555IntRef, },
1053 { s_unormShort4444In, DE_LENGTH_OF_ARRAY(s_unormShort4444In), s_unormShort4444FloatRef, s_unormShort4444IntRef, s_unormShort4444IntRef, },
1054 { s_unormShort5551In, DE_LENGTH_OF_ARRAY(s_unormShort5551In), s_unormShort5551FloatRef, s_unormShort5551IntRef, s_unormShort5551IntRef, },
1055 { s_unormShort1555In, DE_LENGTH_OF_ARRAY(s_unormShort1555In), s_unormShort1555FloatRef, s_unormShort1555IntRef, s_unormShort1555IntRef, },
1056 { s_unormInt101010In, DE_LENGTH_OF_ARRAY(s_unormInt101010In), s_unormInt101010FloatRef, s_unormInt101010IntRef, s_unormInt101010IntRef },
1058 // \note Same input data & int reference used for {U,S}NORM_INT_1010102_REV
1059 { s_unormInt1010102RevIn, DE_LENGTH_OF_ARRAY(s_unormInt1010102RevIn), s_snormInt1010102RevFloatRef, s_snormInt1010102RevIntRef, s_snormInt1010102RevIntRef },
1060 { s_unormInt1010102RevIn, DE_LENGTH_OF_ARRAY(s_unormInt1010102RevIn), s_unormInt1010102RevFloatRef, s_unormInt1010102RevIntRef, s_unormInt1010102RevIntRef },
1062 // \note UNSIGNED_BYTE_* and UNSIGNED_SHORT_* re-use input data and integer reference values from UNORM_* cases
1063 { s_unormByte44In, DE_LENGTH_OF_ARRAY(s_unormByte44In), s_unsignedByte44FloatRef, s_unormByte44IntRef, s_unormByte44IntRef },
1064 { s_unormShort565In, DE_LENGTH_OF_ARRAY(s_unormShort565In), s_unsignedShort565FloatRef, s_unormShort565IntRef, s_unormShort565IntRef, },
1065 { s_unormShort4444In, DE_LENGTH_OF_ARRAY(s_unormShort4444In), s_unsignedShort4444FloatRef, s_unormShort4444IntRef, s_unormShort4444IntRef, },
1066 { s_unormShort5551In, DE_LENGTH_OF_ARRAY(s_unormShort5551In), s_unsignedShort5551FloatRef, s_unormShort5551IntRef, s_unormShort5551IntRef, },
1068 // \note (UN)SIGNED_INT_1010102_REV formats use same input data
1069 { s_unsignedInt1010102RevIn, DE_LENGTH_OF_ARRAY(s_unsignedInt1010102RevIn), s_signedInt1010102RevFloatRef, s_signedInt1010102RevIntRef, s_signedInt1010102RevIntRef },
1070 { s_unsignedInt1010102RevIn, DE_LENGTH_OF_ARRAY(s_unsignedInt1010102RevIn), s_unsignedInt1010102RevFloatRef, s_unsignedInt1010102RevIntRef, s_unsignedInt1010102RevIntRef },
1072 { s_unsignedInt11f11f10fRevIn, DE_LENGTH_OF_ARRAY(s_unsignedInt11f11f10fRevIn), s_unsignedInt11f11f10fRevFloatRef, DE_NULL, DE_NULL },
1073 { s_unsignedInt999E5RevIn, DE_LENGTH_OF_ARRAY(s_unsignedInt999E5RevIn), s_unsignedInt999E5RevFloatRef, DE_NULL, DE_NULL },
1074 { s_unsignedInt1688In, DE_LENGTH_OF_ARRAY(s_unsignedInt1688In), s_unsignedInt1688FloatRef, DE_NULL, s_unsignedInt1688UintRef },
1075 { s_unsignedInt248In, DE_LENGTH_OF_ARRAY(s_unsignedInt248In), s_unsignedInt248FloatRef, DE_NULL, s_unsignedInt248UintRef },
1076 { s_unsignedInt248RevIn, DE_LENGTH_OF_ARRAY(s_unsignedInt248RevIn), s_unsignedInt248RevFloatRef, DE_NULL, s_unsignedInt248RevUintRef },
1077 { s_signedInt8In, DE_LENGTH_OF_ARRAY(s_signedInt8In), s_signedInt8FloatRef, s_signedInt8IntRef, s_signedInt8UintRef },
1078 { s_signedInt16In, DE_LENGTH_OF_ARRAY(s_signedInt16In), s_signedInt16FloatRef, s_signedInt16IntRef, s_signedInt16UintRef },
1079 { s_signedInt32In, DE_LENGTH_OF_ARRAY(s_signedInt32In), s_signedInt32FloatRef, s_signedInt32IntRef, s_signedInt32UintRef },
1080 { s_unsignedInt8In, DE_LENGTH_OF_ARRAY(s_unsignedInt8In), s_unsignedInt8FloatRef, s_unsignedInt8IntRef, s_unsignedInt8UintRef },
1081 { s_unsignedInt16In, DE_LENGTH_OF_ARRAY(s_unsignedInt16In), s_unsignedInt16FloatRef, s_unsignedInt16IntRef, s_unsignedInt16UintRef },
1082 { s_unsignedInt24In, DE_LENGTH_OF_ARRAY(s_unsignedInt24In), s_unsignedInt24FloatRef, s_unsignedInt24IntRef, s_unsignedInt24UintRef },
1083 { s_unsignedInt32In, DE_LENGTH_OF_ARRAY(s_unsignedInt32In), s_unsignedInt32FloatRef, s_unsignedInt32IntRef, s_unsignedInt32UintRef },
1084 { s_halfFloatIn, DE_LENGTH_OF_ARRAY(s_halfFloatIn), s_halfFloatFloatRef, s_halfFloatIntRef, s_halfFloatUintRef },
1085 { s_floatIn, DE_LENGTH_OF_ARRAY(s_floatIn), s_floatFloatRef, s_floatIntRef, s_floatUintRef },
1086 { s_float64In, DE_LENGTH_OF_ARRAY(s_float64In), s_float64FloatRef, s_float64IntRef, s_float64IntRef },
1087 { s_floatUnsignedInt248RevIn, DE_LENGTH_OF_ARRAY(s_floatUnsignedInt248RevIn), s_floatUnsignedInt248RevFloatRef, DE_NULL, s_floatUnsignedInt248RevUintRef },
1089 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_formatData) == TextureFormat::CHANNELTYPE_LAST);
1091 TextureFormat getBaseFormat (TextureFormat format)
1093 const TextureFormat::ChannelOrder baseOrders[] = { TextureFormat::RGBA, TextureFormat::RGB, TextureFormat::DS };
1095 for (int baseOrderNdx = 0; baseOrderNdx < DE_LENGTH_OF_ARRAY(baseOrders); baseOrderNdx++)
1097 const TextureFormat curBaseFmt (baseOrders[baseOrderNdx], format.type);
1098 if (isValid(curBaseFmt))
1105 ConstPixelBufferAccess getInputAccess (TextureFormat format)
1107 const TextureFormat inputFormat = getBaseFormat(format);
1108 const int inputPixelSize = getPixelSize(inputFormat);
1109 const int numPixels = s_formatData[format.type].inputSize / inputPixelSize;
1111 DE_ASSERT(numPixels == 4);
1112 DE_ASSERT(numPixels*inputPixelSize == s_formatData[format.type].inputSize);
1114 return ConstPixelBufferAccess(format, IVec3(numPixels, 1, 1), IVec3(inputPixelSize, 0, 0), s_formatData[format.type].input);
1117 template<typename T>
1118 const deUint32* getRawReference (TextureFormat format);
1121 const deUint32* getRawReference<float> (TextureFormat format)
1123 return s_formatData[format.type].floatRef;
1127 const deUint32* getRawReference<deInt32> (TextureFormat format)
1129 return s_formatData[format.type].intRef;
1133 const deUint32* getRawReference<deUint32> (TextureFormat format)
1135 return s_formatData[format.type].uintRef;
1138 template<typename T>
1139 void getReferenceValues (TextureFormat storageFormat, TextureFormat viewFormat, vector<Vector<T, 4> >& dst)
1141 const int numPixels = getInputAccess(storageFormat).getWidth();
1142 const deUint32* const rawValues = getRawReference<T>(storageFormat);
1143 const tcu::TextureSwizzle& swizzle = tcu::getChannelReadSwizzle(viewFormat.order);
1145 dst.resize(numPixels);
1147 for (int pixelNdx = 0; pixelNdx < numPixels; pixelNdx++)
1149 const deUint32* srcPixPtr = rawValues + pixelNdx*4;
1150 T* dstPixPtr = (T*)&dst[pixelNdx];
1152 for (int c = 0; c < 4; c++)
1154 switch (swizzle.components[c])
1156 case tcu::TextureSwizzle::CHANNEL_0:
1157 case tcu::TextureSwizzle::CHANNEL_1:
1158 case tcu::TextureSwizzle::CHANNEL_2:
1159 case tcu::TextureSwizzle::CHANNEL_3:
1160 deMemcpy(dstPixPtr + c, srcPixPtr + (int)swizzle.components[c], sizeof(deUint32));
1163 case tcu::TextureSwizzle::CHANNEL_ZERO:
1164 dstPixPtr[c] = T(0);
1167 case tcu::TextureSwizzle::CHANNEL_ONE:
1168 dstPixPtr[c] = T(1);
1172 DE_FATAL("Unknown swizzle");
1178 template<typename T>
1179 bool componentEqual (T a, T b)
1185 bool componentEqual<float> (float a, float b)
1187 return (a == b) || (deFloatIsNaN(a) && deFloatIsNaN(b));
1190 template<typename T, int Size>
1191 bool allComponentsEqual (const Vector<T, Size>& a, const Vector<T, Size>& b)
1193 for (int ndx = 0; ndx < Size; ndx++)
1195 if (!componentEqual(a[ndx], b[ndx]))
1202 template<typename T>
1203 void copyPixels (const ConstPixelBufferAccess& src, const PixelBufferAccess& dst)
1205 for (int ndx = 0; ndx < src.getWidth(); ndx++)
1206 dst.setPixel(src.getPixelT<T>(ndx, 0, 0), ndx, 0, 0);
1209 void copyGetSetDepth (const ConstPixelBufferAccess& src, const PixelBufferAccess& dst)
1211 for (int ndx = 0; ndx < src.getWidth(); ndx++)
1212 dst.setPixDepth(src.getPixDepth(ndx, 0, 0), ndx, 0, 0);
1215 void copyGetSetStencil (const ConstPixelBufferAccess& src, const PixelBufferAccess& dst)
1217 for (int ndx = 0; ndx < src.getWidth(); ndx++)
1218 dst.setPixStencil(src.getPixStencil(ndx, 0, 0), ndx, 0, 0);
1221 void copyPixels (const ConstPixelBufferAccess& src, const PixelBufferAccess& dst)
1223 switch (getTextureChannelClass(dst.getFormat().type))
1225 case tcu::TEXTURECHANNELCLASS_FLOATING_POINT:
1226 case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT:
1227 case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT:
1228 copyPixels<float>(src, dst);
1231 case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
1232 copyPixels<deInt32>(src, dst);
1235 case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
1236 copyPixels<deUint32>(src, dst);
1240 DE_FATAL("Unknown channel class");
1244 const char* getTextureAccessTypeDescription (TextureAccessType type)
1246 static const char* s_desc[] =
1252 return de::getSizedArrayElement<tcu::TEXTUREACCESSTYPE_LAST>(s_desc, type);
1255 template<typename T>
1256 TextureAccessType getTextureAccessType (void);
1259 TextureAccessType getTextureAccessType<float> (void)
1261 return tcu::TEXTUREACCESSTYPE_FLOAT;
1265 TextureAccessType getTextureAccessType<deInt32> (void)
1267 return tcu::TEXTUREACCESSTYPE_SIGNED_INT;
1271 TextureAccessType getTextureAccessType<deUint32> (void)
1273 return tcu::TEXTUREACCESSTYPE_UNSIGNED_INT;
1276 static std::string getCaseName (TextureFormat format)
1278 std::ostringstream str;
1280 str << format.type << "_" << format.order;
1282 return de::toLower(str.str());
1285 class TextureFormatCase : public tcu::TestCase
1288 TextureFormatCase (tcu::TestContext& testCtx, TextureFormat format)
1289 : tcu::TestCase (testCtx, getCaseName(format).c_str(), "")
1292 DE_ASSERT(isValid(format));
1296 template<typename T>
1297 void verifyRead (const ConstPixelBufferAccess& src)
1299 const int numPixels = src.getWidth();
1300 vector<Vector<T, 4> > res (numPixels);
1301 vector<Vector<T, 4> > ref;
1304 << TestLog::Message << "Verifying " << getTextureAccessTypeDescription(getTextureAccessType<T>()) << " access" << TestLog::EndMessage;
1306 for (int ndx = 0; ndx < numPixels; ndx++)
1307 res[ndx] = src.getPixelT<T>(ndx, 0, 0);
1309 // \note m_format != src.getFormat() for DS formats, and we specifically need to
1310 // use the combined format as storage format to get right reference values.
1311 getReferenceValues<T>(m_format, src.getFormat(), ref);
1313 for (int pixelNdx = 0; pixelNdx < numPixels; pixelNdx++)
1315 if (!allComponentsEqual(res[pixelNdx], ref[pixelNdx]))
1318 << TestLog::Message << "ERROR: at pixel " << pixelNdx << ": expected " << ref[pixelNdx] << ", got " << res[pixelNdx] << TestLog::EndMessage;
1320 m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Comparison failed");
1325 void verifyRead (const ConstPixelBufferAccess& src)
1327 // \todo [2016-08-04 pyry] Overflow in float->int conversion is not defined and
1328 // produces different results depending on arch.
1329 const bool isFloat32Or64 = src.getFormat().type == tcu::TextureFormat::FLOAT ||
1330 src.getFormat().type == tcu::TextureFormat::FLOAT64;
1332 if (isAccessValid(src.getFormat(), tcu::TEXTUREACCESSTYPE_FLOAT))
1333 verifyRead<float>(src);
1335 if (isAccessValid(src.getFormat(), tcu::TEXTUREACCESSTYPE_UNSIGNED_INT) && !isFloat32Or64)
1336 verifyRead<deUint32>(src);
1338 if (isAccessValid(src.getFormat(), tcu::TEXTUREACCESSTYPE_SIGNED_INT) && !isFloat32Or64)
1339 verifyRead<deInt32>(src);
1342 void verifyGetPixDepth (const ConstPixelBufferAccess& refAccess, const ConstPixelBufferAccess& combinedAccess)
1345 << TestLog::Message << "Verifying getPixDepth()" << TestLog::EndMessage;
1347 for (int pixelNdx = 0; pixelNdx < refAccess.getWidth(); pixelNdx++)
1349 const float ref = refAccess.getPixel(pixelNdx, 0, 0).x();
1350 const float res = combinedAccess.getPixDepth(pixelNdx, 0, 0);
1352 if (!componentEqual(res, ref))
1355 << TestLog::Message << "ERROR: at pixel " << pixelNdx << ": expected " << ref << ", got " << res << TestLog::EndMessage;
1357 m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Comparison failed");
1362 void verifyGetPixStencil (const ConstPixelBufferAccess& refAccess, const ConstPixelBufferAccess& combinedAccess)
1365 << TestLog::Message << "Verifying getPixStencil()" << TestLog::EndMessage;
1367 for (int pixelNdx = 0; pixelNdx < refAccess.getWidth(); pixelNdx++)
1369 const int ref = refAccess.getPixelInt(pixelNdx, 0, 0).x();
1370 const int res = combinedAccess.getPixStencil(pixelNdx, 0, 0);
1372 if (!componentEqual(res, ref))
1375 << TestLog::Message << "ERROR: at pixel " << pixelNdx << ": expected " << ref << ", got " << res << TestLog::EndMessage;
1377 m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Comparison failed");
1382 void verifyInfoQueries (void)
1384 const tcu::TextureChannelClass chnClass = tcu::getTextureChannelClass(m_format.type);
1385 const tcu::TextureFormatInfo fmtInfo = tcu::getTextureFormatInfo(m_format);
1387 if (tcu::isCombinedDepthStencilType(m_format.type))
1388 TCU_CHECK(chnClass == tcu::TEXTURECHANNELCLASS_LAST);
1390 TCU_CHECK(de::inBounds(chnClass, (tcu::TextureChannelClass)0, tcu::TEXTURECHANNELCLASS_LAST));
1395 const TextureFormat m_format;
1398 class ColorFormatCase : public TextureFormatCase
1401 ColorFormatCase (tcu::TestContext& testCtx, TextureFormat format)
1402 : TextureFormatCase(testCtx, format)
1404 DE_ASSERT(format.order != TextureFormat::D &&
1405 format.order != TextureFormat::S &&
1406 format.order != TextureFormat::DS);
1409 IterateResult iterate (void)
1411 const ConstPixelBufferAccess inputAccess = getInputAccess(m_format);
1412 vector<deUint8> tmpMem (getPixelSize(inputAccess.getFormat())*inputAccess.getWidth());
1413 const PixelBufferAccess tmpAccess (inputAccess.getFormat(), inputAccess.getWidth(), 1, 1, &tmpMem[0]);
1415 m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
1417 verifyInfoQueries();
1419 verifyRead(inputAccess);
1421 // \todo [2015-10-12 pyry] Handle lossy conversion with *NORM_INT32
1422 if (m_format.type != TextureFormat::UNORM_INT32 && m_format.type != TextureFormat::SNORM_INT32)
1424 m_testCtx.getLog() << TestLog::Message << "Copying with getPixel() -> setPixel()" << TestLog::EndMessage;
1425 copyPixels(inputAccess, tmpAccess);
1426 verifyRead(tmpAccess);
1433 class DepthFormatCase : public TextureFormatCase
1436 DepthFormatCase (tcu::TestContext& testCtx, TextureFormat format)
1437 : TextureFormatCase(testCtx, format)
1439 DE_ASSERT(format.order == TextureFormat::D);
1442 IterateResult iterate (void)
1444 const ConstPixelBufferAccess inputAccess = getInputAccess(m_format);
1445 vector<deUint8> tmpMem (getPixelSize(inputAccess.getFormat())*inputAccess.getWidth());
1446 const PixelBufferAccess tmpAccess (inputAccess.getFormat(), inputAccess.getWidth(), 1, 1, &tmpMem[0]);
1447 const ConstPixelBufferAccess inputDepthAccess = getEffectiveDepthStencilAccess(inputAccess, tcu::Sampler::MODE_DEPTH);
1448 const PixelBufferAccess tmpDepthAccess = getEffectiveDepthStencilAccess(tmpAccess, tcu::Sampler::MODE_DEPTH);
1450 m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
1452 verifyInfoQueries();
1454 verifyRead(inputDepthAccess);
1456 m_testCtx.getLog() << TestLog::Message << "Copying with getPixel() -> setPixel()" << TestLog::EndMessage;
1457 copyPixels(inputDepthAccess, tmpDepthAccess);
1458 verifyRead(tmpDepthAccess);
1460 verifyGetPixDepth(inputDepthAccess, inputAccess);
1462 m_testCtx.getLog() << TestLog::Message << "Copying both depth getPixDepth() -> setPixDepth()" << TestLog::EndMessage;
1463 tcu::clear(tmpDepthAccess, tcu::Vec4(0.0f));
1464 copyGetSetDepth(inputAccess, tmpAccess);
1465 verifyGetPixDepth(tmpDepthAccess, tmpAccess);
1471 class StencilFormatCase : public TextureFormatCase
1474 StencilFormatCase (tcu::TestContext& testCtx, TextureFormat format)
1475 : TextureFormatCase(testCtx, format)
1477 DE_ASSERT(format.order == TextureFormat::S);
1480 IterateResult iterate (void)
1482 const ConstPixelBufferAccess inputAccess = getInputAccess(m_format);
1483 vector<deUint8> tmpMem (getPixelSize(inputAccess.getFormat())*inputAccess.getWidth());
1484 const PixelBufferAccess tmpAccess (inputAccess.getFormat(), inputAccess.getWidth(), 1, 1, &tmpMem[0]);
1485 const ConstPixelBufferAccess inputStencilAccess = getEffectiveDepthStencilAccess(inputAccess, tcu::Sampler::MODE_STENCIL);
1486 const PixelBufferAccess tmpStencilAccess = getEffectiveDepthStencilAccess(tmpAccess, tcu::Sampler::MODE_STENCIL);
1488 m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
1490 verifyInfoQueries();
1492 verifyRead(inputStencilAccess);
1494 m_testCtx.getLog() << TestLog::Message << "Copying with getPixel() -> setPixel()" << TestLog::EndMessage;
1495 copyPixels(inputStencilAccess, tmpStencilAccess);
1496 verifyRead(tmpStencilAccess);
1498 verifyGetPixStencil(inputStencilAccess, inputAccess);
1500 m_testCtx.getLog() << TestLog::Message << "Copying both depth getPixStencil() -> setPixStencil()" << TestLog::EndMessage;
1501 tcu::clear(tmpStencilAccess, tcu::IVec4(0));
1502 copyGetSetStencil(inputAccess, tmpAccess);
1503 verifyGetPixStencil(tmpStencilAccess, tmpAccess);
1509 class DepthStencilFormatCase : public TextureFormatCase
1512 DepthStencilFormatCase (tcu::TestContext& testCtx, TextureFormat format)
1513 : TextureFormatCase(testCtx, format)
1515 DE_ASSERT(format.order == TextureFormat::DS);
1518 IterateResult iterate (void)
1520 const ConstPixelBufferAccess inputAccess = getInputAccess(m_format);
1521 vector<deUint8> tmpMem (getPixelSize(inputAccess.getFormat())*inputAccess.getWidth());
1522 const PixelBufferAccess tmpAccess (inputAccess.getFormat(), inputAccess.getWidth(), 1, 1, &tmpMem[0]);
1523 const ConstPixelBufferAccess inputDepthAccess = getEffectiveDepthStencilAccess(inputAccess, tcu::Sampler::MODE_DEPTH);
1524 const ConstPixelBufferAccess inputStencilAccess = getEffectiveDepthStencilAccess(inputAccess, tcu::Sampler::MODE_STENCIL);
1525 const PixelBufferAccess tmpDepthAccess = getEffectiveDepthStencilAccess(tmpAccess, tcu::Sampler::MODE_DEPTH);
1526 const PixelBufferAccess tmpStencilAccess = getEffectiveDepthStencilAccess(tmpAccess, tcu::Sampler::MODE_STENCIL);
1528 m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
1530 verifyInfoQueries();
1532 verifyRead(inputDepthAccess);
1533 verifyRead(inputStencilAccess);
1535 verifyGetPixDepth(inputDepthAccess, inputAccess);
1536 verifyGetPixStencil(inputStencilAccess, inputAccess);
1538 m_testCtx.getLog() << TestLog::Message << "Copying both depth and stencil with getPixel() -> setPixel()" << TestLog::EndMessage;
1539 copyPixels(inputDepthAccess, tmpDepthAccess);
1540 copyPixels(inputStencilAccess, tmpStencilAccess);
1541 verifyRead(tmpDepthAccess);
1542 verifyRead(tmpStencilAccess);
1544 m_testCtx.getLog() << TestLog::Message << "Copying both depth and stencil with getPix{Depth,Stencil}() -> setPix{Depth,Stencil}()" << TestLog::EndMessage;
1545 copyGetSetDepth(inputDepthAccess, tmpDepthAccess);
1546 copyGetSetStencil(inputStencilAccess, tmpStencilAccess);
1547 verifyRead(tmpDepthAccess);
1548 verifyRead(tmpStencilAccess);
1550 m_testCtx.getLog() << TestLog::Message << "Verifying that clearing depth component with clearDepth() doesn't affect stencil" << TestLog::EndMessage;
1551 tcu::copy(tmpAccess, inputAccess);
1552 tcu::clearDepth(tmpAccess, 0.0f);
1553 verifyRead(tmpStencilAccess);
1555 m_testCtx.getLog() << TestLog::Message << "Verifying that clearing stencil component with clearStencil() doesn't affect depth" << TestLog::EndMessage;
1556 tcu::copy(tmpAccess, inputAccess);
1557 tcu::clearStencil(tmpAccess, 0);
1558 verifyRead(tmpDepthAccess);
1560 m_testCtx.getLog() << TestLog::Message << "Verifying that clearing depth component with setPixDepth() doesn't affect stencil" << TestLog::EndMessage;
1561 tcu::copy(tmpAccess, inputAccess);
1563 for (int ndx = 0; ndx < tmpAccess.getWidth(); ndx++)
1564 tmpAccess.setPixDepth(0.0f, ndx, 0, 0);
1566 verifyRead(tmpStencilAccess);
1568 m_testCtx.getLog() << TestLog::Message << "Verifying that clearing stencil component with setPixStencil() doesn't affect depth" << TestLog::EndMessage;
1569 tcu::copy(tmpAccess, inputAccess);
1571 for (int ndx = 0; ndx < tmpAccess.getWidth(); ndx++)
1572 tmpAccess.setPixStencil(0, ndx, 0, 0);
1574 verifyRead(tmpDepthAccess);
1582 tcu::TestCaseGroup* createTextureFormatTests (tcu::TestContext& testCtx)
1584 de::MovePtr<tcu::TestCaseGroup> group (new tcu::TestCaseGroup(testCtx, "texture_format", "Texture format tests"));
1586 for (int channelType = 0; channelType < TextureFormat::CHANNELTYPE_LAST; channelType++)
1588 for (int channelOrder = 0; channelOrder < TextureFormat::CHANNELORDER_LAST; channelOrder++)
1590 const TextureFormat format ((TextureFormat::ChannelOrder)channelOrder, (TextureFormat::ChannelType)channelType);
1592 if (!isValid(format))
1595 if (tcu::isSRGB(format))
1596 continue; // \todo [2015-10-12 pyry] Tests for sRGB formats (need thresholds)
1598 if (format.order == TextureFormat::DS)
1599 group->addChild(new DepthStencilFormatCase(testCtx, format));
1600 else if (format.order == TextureFormat::D)
1601 group->addChild(new DepthFormatCase(testCtx, format));
1602 else if (format.order == TextureFormat::S)
1603 group->addChild(new StencilFormatCase(testCtx, format));
1605 group->addChild(new ColorFormatCase(testCtx, format));
1609 return group.release();