Blender V4.3
texture_test.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#include "gpu_testing.hh"
6
7#include "MEM_guardedalloc.h"
8
9#include "BLI_math_vector.hh"
10#include "BLI_vector.hh"
11
12#include "GPU_context.hh"
13#include "GPU_texture.hh"
14
16
17/* Not all texture types are supported by all platforms. This define safe guards them until we have
18 * a working workaround or decided to remove support for those texture types. */
19#define RUN_UNSUPPORTED false
20
21/* Skip tests that haven't been developed yet due to non standard data types or it needs an
22 * frame-buffer to create the texture. */
23#define RUN_SRGB_UNIMPLEMENTED false
24#define RUN_NON_STANDARD_UNIMPLEMENTED false
25#define RUN_COMPONENT_UNIMPLEMENTED false
26
27namespace blender::gpu::tests {
28
29static void test_texture_read()
30{
32
34 GPUTexture *rgba32u = GPU_texture_create_2d("rgba32u", 1, 1, 1, GPU_RGBA32UI, usage, nullptr);
35 GPUTexture *rgba16u = GPU_texture_create_2d("rgba16u", 1, 1, 1, GPU_RGBA16UI, usage, nullptr);
36 GPUTexture *rgba32f = GPU_texture_create_2d("rgba32f", 1, 1, 1, GPU_RGBA32F, usage, nullptr);
37
38 const float4 fcol = {0.0f, 1.3f, -231.0f, 1000.0f};
39 const uint4 ucol = {0, 1, 2, 12223};
40 GPU_texture_clear(rgba32u, GPU_DATA_UINT, ucol);
41 GPU_texture_clear(rgba16u, GPU_DATA_UINT, ucol);
42 GPU_texture_clear(rgba32f, GPU_DATA_FLOAT, fcol);
43
45
46 uint4 *rgba32u_data = (uint4 *)GPU_texture_read(rgba32u, GPU_DATA_UINT, 0);
47 uint4 *rgba16u_data = (uint4 *)GPU_texture_read(rgba16u, GPU_DATA_UINT, 0);
48 float4 *rgba32f_data = (float4 *)GPU_texture_read(rgba32f, GPU_DATA_FLOAT, 0);
49
50 EXPECT_EQ(ucol, *rgba32u_data);
51 EXPECT_EQ(ucol, *rgba16u_data);
52 EXPECT_EQ(fcol, *rgba32f_data);
53
54 MEM_freeN(rgba32u_data);
55 MEM_freeN(rgba16u_data);
56 MEM_freeN(rgba32f_data);
57
58 GPU_texture_free(rgba32u);
59 GPU_texture_free(rgba16u);
60 GPU_texture_free(rgba32f);
61
63}
64GPU_TEST(texture_read)
65
66static void test_texture_1d()
67{
70 {
71 GTEST_SKIP() << "OpenGL texture clearing workaround doesn't support 1d textures.";
72 }
73 const int SIZE = 32;
75
78 GPUTexture *tex = GPU_texture_create_1d("tex", SIZE, 1, GPU_RGBA32F, usage, nullptr);
79 float4 clear_color(0.9f, 0.7f, 0.2f, 1.0f);
81
83
85 for (int index : IndexRange(SIZE)) {
86 EXPECT_EQ(clear_color, data[index]);
87 }
88 MEM_freeN(data);
89
91
93}
94GPU_TEST(texture_1d)
95
97{
99 GTEST_SKIP() << "Read back of 1d texture arrays not supported by OpenGL";
100 }
101 const int LAYERS = 8;
102 const int SIZE = 32;
104
107 GPUTexture *tex = GPU_texture_create_1d_array(
108 "tex", SIZE, LAYERS, 1, GPU_RGBA32F, usage, nullptr);
109 float4 clear_color(1.0f, 0.5f, 0.2f, 1.0f);
110 GPU_texture_clear(tex, GPU_DATA_FLOAT, clear_color);
111
113
115 for (int index : IndexRange(SIZE * LAYERS)) {
116 EXPECT_EQ(clear_color, data[index]);
117 }
118 MEM_freeN(data);
119
121
123}
124GPU_TEST(texture_1d_array)
125
127{
129 GTEST_SKIP() << "Read back of 1d texture arrays not supported by OpenGL";
130 }
131 const int LAYERS = 8;
132 const int SIZE = 32;
134
135 int total_size = LAYERS * SIZE * 4;
136 float *data_in = (float *)MEM_callocN(sizeof(float) * total_size, __func__);
137
139 GPUTexture *tex = GPU_texture_create_1d_array(
140 "tex", SIZE, LAYERS, 1, GPU_RGBA32F, usage, data_in);
141
143
144 void *data_out = GPU_texture_read(tex, GPU_DATA_FLOAT, 0);
146
147 EXPECT_EQ(memcmp(data_in, data_out, sizeof(float) * total_size), 0);
148 MEM_freeN(data_in);
149 MEM_freeN(data_out);
150
152}
153GPU_TEST(texture_1d_array_upload)
154
156{
157 const int LAYERS = 8;
158 const int SIZE = 32;
160
162 GPUTexture *tex = GPU_texture_create_2d_array(
163 "tex", SIZE, SIZE, LAYERS, 1, GPU_RGBA32F, usage, nullptr);
164 float4 clear_color(1.0f, 0.5f, 0.2f, 1.0f);
165 GPU_texture_clear(tex, GPU_DATA_FLOAT, clear_color);
166
168
170 for (int index : IndexRange(SIZE * SIZE * LAYERS)) {
171 EXPECT_EQ(clear_color, data[index]);
172 }
173 MEM_freeN(data);
174
176
178}
179GPU_TEST(texture_2d_array)
180
182{
183 const int LAYERS = 8;
184 const int SIZE = 32;
186
187 int total_size = LAYERS * SIZE * SIZE * 4;
188 float *data_in = (float *)MEM_callocN(sizeof(float) * total_size, __func__);
189
191 GPUTexture *tex = GPU_texture_create_2d_array(
192 "tex", SIZE, SIZE, LAYERS, 1, GPU_RGBA32F, usage, data_in);
193
195
196 void *data_out = GPU_texture_read(tex, GPU_DATA_FLOAT, 0);
198
199 EXPECT_EQ(memcmp(data_in, data_out, sizeof(float) * total_size), 0);
200 MEM_freeN(data_in);
201 MEM_freeN(data_out);
202
204}
205GPU_TEST(texture_2d_array_upload)
206
207static void test_texture_cube()
208{
209 const int SIZE = 32;
211
213 GPUTexture *tex = GPU_texture_create_cube("tex", SIZE, 1, GPU_RGBA32F, usage, nullptr);
214 float4 clear_color(1.0f, 0.5f, 0.2f, 1.0f);
215 GPU_texture_clear(tex, GPU_DATA_FLOAT, clear_color);
216
218
220 for (int index : IndexRange(SIZE * SIZE * 6)) {
221 EXPECT_EQ(clear_color, data[index]);
222 }
223 MEM_freeN(data);
224
226
228}
229GPU_TEST(texture_cube)
230
232{
233 const int LAYERS = 2;
234 const int SIZE = 32;
236
239 "tex", SIZE, LAYERS, 1, GPU_RGBA32F, usage, nullptr);
240 float4 clear_color(1.0f, 0.5f, 0.2f, 1.0f);
241 GPU_texture_clear(tex, GPU_DATA_FLOAT, clear_color);
242
244 for (int index : IndexRange(SIZE * SIZE * 6 * LAYERS)) {
245 EXPECT_EQ(clear_color, data[index]);
246 }
247 MEM_freeN(data);
248
250
252}
253GPU_TEST(texture_cube_array)
254
255static void test_texture_3d()
256{
257 const int SIZE = 32;
259
261 GPUTexture *tex = GPU_texture_create_3d("tex", SIZE, SIZE, SIZE, 1, GPU_RGBA32F, usage, nullptr);
262 float4 clear_color(1.0f, 0.5f, 0.2f, 1.0f);
263 GPU_texture_clear(tex, GPU_DATA_FLOAT, clear_color);
264
266
268 for (int index : IndexRange(SIZE * SIZE * SIZE)) {
269 EXPECT_EQ(clear_color, data[index]);
270 }
271 MEM_freeN(data);
272
274
276}
277GPU_TEST(texture_3d)
278
279static void test_texture_copy()
280{
281 const int SIZE = 128;
283
285 GPUTexture *src_tx = GPU_texture_create_2d("src", SIZE, SIZE, 1, GPU_RGBA32F, usage, nullptr);
286 GPUTexture *dst_tx = GPU_texture_create_2d("dst", SIZE, SIZE, 1, GPU_RGBA32F, usage, nullptr);
287
288 const float4 color(0.0, 1.0f, 2.0f, 123.0f);
289 const float4 clear_color(0.0f);
290 GPU_texture_clear(src_tx, GPU_DATA_FLOAT, color);
291 GPU_texture_clear(dst_tx, GPU_DATA_FLOAT, clear_color);
292
293 GPU_texture_copy(dst_tx, src_tx);
294
296
297 float4 *data = (float4 *)GPU_texture_read(dst_tx, GPU_DATA_FLOAT, 0);
298 for (int index : IndexRange(SIZE * SIZE)) {
299 EXPECT_EQ(color, data[index]);
300 }
301 MEM_freeN(data);
302
303 GPU_texture_free(src_tx);
304 GPU_texture_free(dst_tx);
305
307}
308GPU_TEST(texture_copy)
309
310template<typename DataType> static DataType *generate_test_data(size_t data_len)
311{
312 DataType *data = static_cast<DataType *>(MEM_mallocN(data_len * sizeof(DataType), __func__));
313 for (int i : IndexRange(data_len)) {
314 if (std::is_same<DataType, float>()) {
315 data[i] = (DataType)(i % 8) / 8.0f;
316 }
317 else {
318 data[i] = (DataType)(i % 8);
319 }
320 }
321 return data;
322}
323
324template<eGPUTextureFormat DeviceFormat,
325 eGPUDataFormat HostFormat,
326 typename DataType,
327 int Size = 16>
329{
330 static_assert(!std::is_same<DataType, float>());
331 static_assert(validate_data_format(DeviceFormat, HostFormat));
333 GPUTexture *texture = GPU_texture_create_2d(
334 "texture", Size, Size, 1, DeviceFormat, usage, nullptr);
335 if (texture == nullptr) {
336 GTEST_SKIP() << "Platform doesn't support texture format [" << STRINGIFY(DeviceFormat) << "]";
337 }
338
339 size_t data_len = Size * Size *
340 (HostFormat == GPU_DATA_10_11_11_REV ? to_bytesize(HostFormat) :
341 to_component_len(DeviceFormat));
342
343 DataType *data = static_cast<DataType *>(generate_test_data<DataType>(data_len));
344 GPU_texture_update(texture, HostFormat, data);
345
346 DataType *read_data = static_cast<DataType *>(GPU_texture_read(texture, HostFormat, 0));
347 bool failed = false;
348 for (int i : IndexRange(data_len)) {
349 EXPECT_EQ(data[i], read_data[i]);
350 bool ok = (read_data[i] - data[i]) == 0;
351 failed |= !ok;
352 }
353 EXPECT_FALSE(failed);
354
355 MEM_freeN(read_data);
356 MEM_freeN(data);
357
358 GPU_texture_free(texture);
359}
360
361template<eGPUTextureFormat DeviceFormat, eGPUDataFormat HostFormat, int Size = 16>
362static void texture_create_upload_read_with_bias(float max_allowed_bias)
363{
364 static_assert(validate_data_format(DeviceFormat, HostFormat));
366 GPUTexture *texture = GPU_texture_create_2d(
367 "texture", Size, Size, 1, DeviceFormat, usage, nullptr);
368 if (texture == nullptr) {
369 GTEST_SKIP() << "Platform doesn't support texture format [" << STRINGIFY(DeviceFormat) << "]";
370 }
371
372 size_t data_len = Size * Size * to_component_len(DeviceFormat);
373 float *data = static_cast<float *>(generate_test_data<float>(data_len));
374 GPU_texture_update(texture, HostFormat, data);
375
376 float *read_data = static_cast<float *>(GPU_texture_read(texture, HostFormat, 0));
377 float max_used_bias = 0.0f;
378 for (int i : IndexRange(data_len)) {
379 float bias = abs(read_data[i] - data[i]);
380 max_used_bias = max_ff(max_used_bias, bias);
381 }
382 EXPECT_LE(max_used_bias, max_allowed_bias);
383
384 MEM_freeN(read_data);
385 MEM_freeN(data);
386
387 GPU_texture_free(texture);
388}
389
390/* Derivative of texture_create_upload_read_pixels that doesn't test each component, but a pixel at
391 * a time. This is needed to check the R11G11B10 and similar types. */
392template<eGPUTextureFormat DeviceFormat, eGPUDataFormat HostFormat, int Size = 16>
394{
395 using DataType = uint32_t;
396 static_assert(validate_data_format(DeviceFormat, HostFormat));
398 GPUTexture *texture = GPU_texture_create_2d(
399 "texture", Size, Size, 1, DeviceFormat, usage, nullptr);
400 ASSERT_NE(texture, nullptr);
401
402 size_t data_len = Size * Size;
403 DataType *data = static_cast<DataType *>(generate_test_data<DataType>(data_len));
404 GPU_texture_update(texture, HostFormat, data);
405
406 DataType *read_data = static_cast<DataType *>(GPU_texture_read(texture, HostFormat, 0));
407 bool failed = false;
408 for (int i : IndexRange(data_len)) {
409 bool ok = (read_data[i] - data[i]) == 0;
410 failed |= !ok;
411 }
412 EXPECT_FALSE(failed);
413
414 MEM_freeN(read_data);
415 MEM_freeN(data);
416
417 GPU_texture_free(texture);
418}
419
420/* -------------------------------------------------------------------- */
427GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA8);
428
433GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA16F);
434
439GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA16);
440
445GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA32F);
446
451GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RG8);
452
457GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RG16F);
458
463GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RG16);
464
469GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RG32F);
470
475GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_R8);
476
481GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_R16F);
482
487GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_R16);
488
493GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_R32F);
494
495#if RUN_NON_STANDARD_UNIMPLEMENTED
496static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB10_A2()
497{
499}
500GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB10_A2);
501
502static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB10_A2UI()
503{
505}
506GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB10_A2UI);
507#endif
508
513GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_R11F_G11F_B10F);
514
519GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_SRGB8_A8);
520
525GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA8_SNORM);
526
531GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA16_SNORM);
532
533#if RUN_UNSUPPORTED
534static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB8()
535{
537}
538GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB8);
539
540static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB8_SNORM()
541{
543}
544GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB8_SNORM);
545
546static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB16F()
547{
549}
550GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB16F);
551
552static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB16()
553{
555}
556GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB16);
557static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB16_SNORM()
558{
560}
561GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB16_SNORM);
562
563static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB32F()
564{
566}
567GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB32F);
568#endif
569
574GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RG8_SNORM);
575
580GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RG16_SNORM);
581
586GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_R8_SNORM);
587
592GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_R16_SNORM);
593
594#if RUN_NON_STANDARD_UNIMPLEMENTED
595static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_SRGB8_A8_DXT1()
596{
598}
599GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_SRGB8_A8_DXT1);
600
601static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_SRGB8_A8_DXT3()
602{
604}
605GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_SRGB8_A8_DXT3);
606
607static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_SRGB8_A8_DXT5()
608{
610}
611GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_SRGB8_A8_DXT5);
612
613static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA8_DXT1()
614{
616}
617GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA8_DXT1);
618
619static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA8_DXT3()
620{
622}
623GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA8_DXT3);
624
625static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA8_DXT5()
626{
628}
629GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA8_DXT5);
630#endif
631
632#if RUN_SRGB_UNIMPLEMENTED
633static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_SRGB8()
634{
636}
637GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_SRGB8);
638#endif
639
640#if RUN_NON_STANDARD_UNIMPLEMENTED
641static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB9_E5()
642{
644}
645GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB9_E5);
646#endif
647
652GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_DEPTH_COMPONENT32F);
653
654#if RUN_COMPONENT_UNIMPLEMENTED
655static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_DEPTH_COMPONENT24()
656{
658}
659GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_DEPTH_COMPONENT24);
660
661static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_DEPTH_COMPONENT16()
662{
664}
665GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_DEPTH_COMPONENT16);
666#endif
667
668/* \} */
669
670/* -------------------------------------------------------------------- */
678GPU_TEST(texture_roundtrip__GPU_DATA_HALF_FLOAT__GPU_RGBA16F);
679
684GPU_TEST(texture_roundtrip__GPU_DATA_HALF_FLOAT__GPU_RG16F);
685
690GPU_TEST(texture_roundtrip__GPU_DATA_HALF_FLOAT__GPU_R16F);
691
692#if RUN_UNSUPPORTED
693static void test_texture_roundtrip__GPU_DATA_HALF_FLOAT__GPU_RGB16F()
694{
696}
697GPU_TEST(texture_roundtrip__GPU_DATA_HALF_FLOAT__GPU_RGB16F);
698#endif
699
700/* \} */
701
702/* -------------------------------------------------------------------- */
710GPU_TEST(texture_roundtrip__GPU_DATA_INT__GPU_RGBA8I);
711
716GPU_TEST(texture_roundtrip__GPU_DATA_INT__GPU_RGBA16I);
717
722GPU_TEST(texture_roundtrip__GPU_DATA_INT__GPU_RGBA32I);
723
728GPU_TEST(texture_roundtrip__GPU_DATA_INT__GPU_RG8I);
729
730#if RUN_UNSUPPORTED
731static void test_texture_roundtrip__GPU_DATA_INT__GPU_RG16I()
732{
734}
735GPU_TEST(texture_roundtrip__GPU_DATA_INT__GPU_RG16I);
736#endif
737
742GPU_TEST(texture_roundtrip__GPU_DATA_INT__GPU_RG32I);
743
748GPU_TEST(texture_roundtrip__GPU_DATA_INT__GPU_R8I);
749
754GPU_TEST(texture_roundtrip__GPU_DATA_INT__GPU_R16I);
755
760GPU_TEST(texture_roundtrip__GPU_DATA_INT__GPU_R32I);
761
762#if RUN_UNSUPPORTED
763static void test_texture_roundtrip__GPU_DATA_INT__GPU_RGB8I()
764{
766}
767GPU_TEST(texture_roundtrip__GPU_DATA_INT__GPU_RGB8I);
768
769static void test_texture_roundtrip__GPU_DATA_INT__GPU_RGB16I()
770{
772}
773GPU_TEST(texture_roundtrip__GPU_DATA_INT__GPU_RGB16I);
774
775static void test_texture_roundtrip__GPU_DATA_INT__GPU_RGB32I()
776{
778}
779GPU_TEST(texture_roundtrip__GPU_DATA_INT__GPU_RGB32I);
780#endif
781
782/* \} */
783
784/* -------------------------------------------------------------------- */
792GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_RGBA8UI);
793
798GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_RGBA16UI);
799
804GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_RGBA32UI);
805
810GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_RG8UI);
811
816GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_RG16UI);
817
822GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_RG32UI);
823
828GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_R8UI);
829
834GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_R16UI);
835
840GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_R32UI);
841
842#if RUN_UNSUPPORTED
843static void test_texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH32F_STENCIL8()
844{
846}
847GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH32F_STENCIL8);
848
849static void test_texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH24_STENCIL8()
850{
852}
853GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH24_STENCIL8);
854
855static void test_texture_roundtrip__GPU_DATA_UINT__GPU_RGB8UI()
856{
858}
859GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_RGB8UI);
860
861static void test_texture_roundtrip__GPU_DATA_UINT__GPU_RGB16UI()
862{
864}
865GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_RGB16UI);
866
867static void test_texture_roundtrip__GPU_DATA_UINT__GPU_RGB32UI()
868{
870}
871GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_RGB32UI);
872
873static void test_texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH_COMPONENT32F()
874{
876}
877GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH_COMPONENT32F);
878
879static void test_texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH_COMPONENT24()
880{
882}
883GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH_COMPONENT24);
884#endif
885
886#if RUN_COMPONENT_UNIMPLEMENTED
887static void test_texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH_COMPONENT16()
888{
890}
891GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH_COMPONENT16);
892#endif
893
894/* \} */
895
896/* -------------------------------------------------------------------- */
904GPU_TEST(texture_roundtrip__GPU_DATA_UBYTE__GPU_RGBA8UI);
905
910GPU_TEST(texture_roundtrip__GPU_DATA_UBYTE__GPU_RGBA8);
911
916GPU_TEST(texture_roundtrip__GPU_DATA_UBYTE__GPU_RG8UI);
917
922GPU_TEST(texture_roundtrip__GPU_DATA_UBYTE__GPU_RG8);
923
928GPU_TEST(texture_roundtrip__GPU_DATA_UBYTE__GPU_R8UI);
929
934GPU_TEST(texture_roundtrip__GPU_DATA_UBYTE__GPU_R8);
935
940GPU_TEST(texture_roundtrip__GPU_DATA_UBYTE__GPU_SRGB8_A8);
941
942#if RUN_UNSUPPORTED
943static void test_texture_roundtrip__GPU_DATA_UBYTE__GPU_RGB8I()
944{
946}
947GPU_TEST(texture_roundtrip__GPU_DATA_UBYTE__GPU_RGB8I);
948
949static void test_texture_roundtrip__GPU_DATA_UBYTE__GPU_RGB8()
950{
952}
953GPU_TEST(texture_roundtrip__GPU_DATA_UBYTE__GPU_RGB8);
954
955static void test_texture_roundtrip__GPU_DATA_UBYTE__GPU_SRGB8()
956{
958}
959GPU_TEST(texture_roundtrip__GPU_DATA_UBYTE__GPU_SRGB8);
960#endif
961/* \} */
962
963/* -------------------------------------------------------------------- */
967#if RUN_UNSUPPORTED
968static void test_texture_roundtrip__GPU_DATA_UINT_24_8__GPU_DEPTH32F_STENCIL8()
969{
971}
972GPU_TEST(texture_roundtrip__GPU_DATA_UINT_24_8__GPU_DEPTH32F_STENCIL8);
973
974static void test_texture_roundtrip__GPU_DATA_UINT_24_8__GPU_DEPTH24_STENCIL8()
975{
977}
978GPU_TEST(texture_roundtrip__GPU_DATA_UINT_24_8__GPU_DEPTH24_STENCIL8);
979#endif
980
981/* \} */
982
983/* -------------------------------------------------------------------- */
991GPU_TEST(texture_roundtrip__GPU_DATA_10_11_11_REV__GPU_R11F_G11F_B10F);
992
993/* \} */
994
995/* -------------------------------------------------------------------- */
1003GPU_TEST(texture_roundtrip__GPU_DATA_2_10_10_10_REV__GPU_RGB10_A2);
1004
1006{
1008 GTEST_SKIP() << "Texture readback not supported on OpenGL";
1009 }
1011}
1012GPU_TEST(texture_roundtrip__GPU_DATA_2_10_10_10_REV__GPU_RGB10_A2UI);
1013
1014/* \} */
1015
1016} // namespace blender::gpu::tests
@ G_DEBUG_GPU_FORCE_WORKAROUNDS
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
MINLINE float max_ff(float a, float b)
#define STRINGIFY(x)
void GPU_render_end()
void GPU_render_begin()
eGPUBackendType GPU_backend_get_type()
@ GPU_DRIVER_ANY
bool GPU_type_matches_ex(eGPUDeviceType device, eGPUOSType os, eGPUDriverType driver, eGPUBackendType backend)
@ GPU_OS_ANY
@ GPU_DEVICE_ANY
void GPU_memory_barrier(eGPUBarrier barrier)
Definition gpu_state.cc:374
@ GPU_BARRIER_TEXTURE_UPDATE
Definition GPU_state.hh:39
GPUTexture * GPU_texture_create_2d(const char *name, int width, int height, int mip_len, eGPUTextureFormat format, eGPUTextureUsage usage, const float *data)
GPUTexture * GPU_texture_create_1d(const char *name, int width, int mip_len, eGPUTextureFormat format, eGPUTextureUsage usage, const float *data)
void GPU_texture_free(GPUTexture *texture)
void GPU_texture_clear(GPUTexture *texture, eGPUDataFormat data_format, const void *data)
void GPU_texture_copy(GPUTexture *dst, GPUTexture *src)
void * GPU_texture_read(GPUTexture *texture, eGPUDataFormat data_format, int mip_level)
GPUTexture * GPU_texture_create_cube_array(const char *name, int width, int layer_len, int mip_len, eGPUTextureFormat format, eGPUTextureUsage usage, const float *data)
eGPUDataFormat
@ GPU_DATA_10_11_11_REV
@ GPU_DATA_UINT
@ GPU_DATA_FLOAT
eGPUTextureUsage
@ GPU_TEXTURE_USAGE_SHADER_WRITE
@ GPU_TEXTURE_USAGE_HOST_READ
@ GPU_TEXTURE_USAGE_ATTACHMENT
GPUTexture * GPU_texture_create_2d_array(const char *name, int width, int height, int layer_len, int mip_len, eGPUTextureFormat format, eGPUTextureUsage usage, const float *data)
GPUTexture * GPU_texture_create_3d(const char *name, int width, int height, int depth, int mip_len, eGPUTextureFormat format, eGPUTextureUsage usage, const void *data)
eGPUTextureFormat
@ GPU_RGBA32UI
@ GPU_RGBA16UI
GPUTexture * GPU_texture_create_cube(const char *name, int width, int mip_len, eGPUTextureFormat format, eGPUTextureUsage usage, const float *data)
GPUTexture * GPU_texture_create_1d_array(const char *name, int width, int layer_len, int mip_len, eGPUTextureFormat format, eGPUTextureUsage usage, const float *data)
void GPU_texture_update(GPUTexture *texture, eGPUDataFormat data_format, const void *data)
Read Guarded memory(de)allocation.
additional_info("compositor_sum_float_shared") .push_constant(Type additional_info("compositor_sum_float_shared") .push_constant(Type GPU_RGBA32F
#define GPU_TEST(test_name)
void *(* MEM_mallocN)(size_t len, const char *str)
Definition mallocn.cc:44
void MEM_freeN(void *vmemh)
Definition mallocn.cc:105
void *(* MEM_callocN)(size_t len, const char *str)
Definition mallocn.cc:42
#define G(x, y, z)
static void test_texture_roundtrip__GPU_DATA_UBYTE__GPU_R8()
static void test_texture_roundtrip__GPU_DATA_UINT__GPU_R32UI()
static void test_texture_roundtrip__GPU_DATA_INT__GPU_R16I()
static void test_texture_1d()
static void test_texture_1d_array_upload()
static void test_texture_roundtrip__GPU_DATA_INT__GPU_RGBA32I()
static void test_texture_roundtrip__GPU_DATA_UBYTE__GPU_RG8UI()
static void test_texture_cube()
static void test_texture_roundtrip__GPU_DATA_HALF_FLOAT__GPU_RGBA16F()
static void test_texture_3d()
static constexpr int Size
static void test_texture_roundtrip__GPU_DATA_UINT__GPU_RGBA16UI()
static DataType * generate_test_data(size_t data_len)
static void test_texture_roundtrip__GPU_DATA_UINT__GPU_RG8UI()
static void test_texture_roundtrip__GPU_DATA_INT__GPU_RG32I()
static void test_texture_copy()
static void test_texture_roundtrip__GPU_DATA_UBYTE__GPU_R8UI()
static void test_texture_2d_array_upload()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA16F()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA32F()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_R32F()
static void test_texture_roundtrip__GPU_DATA_INT__GPU_R8I()
static void texture_create_upload_read_with_bias(float max_allowed_bias)
static void test_texture_roundtrip__GPU_DATA_2_10_10_10_REV__GPU_RGB10_A2UI()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_R16F()
static void test_texture_roundtrip__GPU_DATA_HALF_FLOAT__GPU_R16F()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_R16()
static void test_texture_roundtrip__GPU_DATA_UINT__GPU_RGBA32UI()
static void test_texture_roundtrip__GPU_DATA_10_11_11_REV__GPU_R11F_G11F_B10F()
static void test_texture_roundtrip__GPU_DATA_UBYTE__GPU_RG8()
static void test_texture_roundtrip__GPU_DATA_UINT__GPU_R8UI()
static void test_texture_1d_array()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_R16_SNORM()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_DEPTH_COMPONENT32F()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RG16_SNORM()
static void test_texture_read()
static void test_texture_roundtrip__GPU_DATA_UINT__GPU_R16UI()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_R11F_G11F_B10F()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA8_SNORM()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA16()
static void test_texture_roundtrip__GPU_DATA_INT__GPU_RGBA8I()
static void test_texture_2d_array()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RG32F()
static void test_texture_cube_array()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RG16()
static void test_texture_roundtrip__GPU_DATA_UINT__GPU_RGBA8UI()
static void texture_create_upload_read_pixel()
static void test_texture_roundtrip__GPU_DATA_INT__GPU_R32I()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_SRGB8_A8()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA8()
static void test_texture_roundtrip__GPU_DATA_UBYTE__GPU_RGBA8UI()
static void test_texture_roundtrip__GPU_DATA_INT__GPU_RG8I()
static void texture_create_upload_read()
static void test_texture_roundtrip__GPU_DATA_UINT__GPU_RG16UI()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RG16F()
static void test_texture_roundtrip__GPU_DATA_UBYTE__GPU_SRGB8_A8()
static void test_texture_roundtrip__GPU_DATA_2_10_10_10_REV__GPU_RGB10_A2()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_R8()
static void test_texture_roundtrip__GPU_DATA_UBYTE__GPU_RGBA8()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RG8_SNORM()
static void test_texture_roundtrip__GPU_DATA_HALF_FLOAT__GPU_RG16F()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RG8()
static void test_texture_roundtrip__GPU_DATA_INT__GPU_RGBA16I()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_R8_SNORM()
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGBA16_SNORM()
static void test_texture_roundtrip__GPU_DATA_UINT__GPU_RG32UI()
constexpr bool validate_data_format(eGPUTextureFormat tex_format, eGPUDataFormat data_format)
size_t to_bytesize(GPUIndexBufType type)
int to_component_len(eGPUTextureFormat format)
unsigned int uint32_t
Definition stdint.h:80
ccl_device_inline int abs(int x)
Definition util/math.h:120