tests/cogl: Migrate write texture formats test

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2555>
This commit is contained in:
Jonas Ådahl
2022-08-04 20:26:24 +02:00
committed by Marge Bot
parent ddb982ba6e
commit ae9b4a1bcf
5 changed files with 7 additions and 6 deletions

View File

@@ -1,6 +1,5 @@
cogl_test_conformance_sources = [
'test-conform-main.c',
'test-write-texture-formats.c',
'test-point-size.c',
'test-point-size-attribute.c',
'test-point-sprite.c',

View File

@@ -68,7 +68,6 @@ main (int argc, char **argv)
UNPORTED_TEST (test_texture_rectangle);
UNPORTED_TEST (test_texture_pixmap_x11);
ADD_TEST (test_texture_get_set_data, 0, 0);
ADD_TEST (test_write_texture_formats, 0, 0);
ADD_TEST (test_alpha_textures, 0, 0);
UNPORTED_TEST (test_vertex_buffer_contiguous);

View File

@@ -8,7 +8,6 @@ void test_backface_culling (void);
void test_layer_remove (void);
void test_npot_texture (void);
void test_texture_get_set_data (void);
void test_write_texture_formats (void);
void test_alpha_textures (void);
void test_framebuffer_get_bits (void);
void test_point_size (void);

View File

@@ -1,185 +0,0 @@
#include <cogl/cogl.h>
#include <stdarg.h>
#include "test-declarations.h"
#include "test-utils.h"
/*
* This tests writing data to an RGBA texture in all of the available
* pixel formats
*/
static void
test_color (CoglTexture *texture,
uint32_t expected_pixel)
{
uint8_t received_pixel[4];
cogl_texture_get_data (texture,
COGL_PIXEL_FORMAT_RGBA_8888_PRE,
4, /* rowstride */
received_pixel);
test_utils_compare_pixel_and_alpha (received_pixel, expected_pixel);
}
static void
test_write_byte (CoglContext *context,
CoglPixelFormat format,
uint8_t byte,
uint32_t expected_pixel)
{
CoglTexture *texture = test_utils_create_color_texture (context, 0);
cogl_texture_set_region (texture,
0, 0, /* src_x / src_y */
0, 0, /* dst_x / dst_y */
1, 1, /* dst_w / dst_h */
1, 1, /* width / height */
format,
1, /* rowstride */
&byte);
test_color (texture, expected_pixel);
cogl_object_unref (texture);
}
static void
test_write_short (CoglContext *context,
CoglPixelFormat format,
uint16_t value,
uint32_t expected_pixel)
{
CoglTexture *texture = test_utils_create_color_texture (context, 0);
cogl_texture_set_region (texture,
0, 0, /* src_x / src_y */
0, 0, /* dst_x / dst_y */
1, 1, /* dst_w / dst_h */
1, 1, /* width / height */
format,
2, /* rowstride */
(uint8_t *) &value);
test_color (texture, expected_pixel);
cogl_object_unref (texture);
}
static void
test_write_bytes (CoglContext *context,
CoglPixelFormat format,
uint32_t value,
uint32_t expected_pixel)
{
CoglTexture *texture = test_utils_create_color_texture (context, 0);
value = GUINT32_TO_BE (value);
cogl_texture_set_region (texture,
0, 0, /* src_x / src_y */
0, 0, /* dst_x / dst_y */
1, 1, /* dst_w / dst_h */
1, 1, /* width / height */
format,
4, /* rowstride */
(uint8_t *) &value);
test_color (texture, expected_pixel);
cogl_object_unref (texture);
}
static void
test_write_int (CoglContext *context,
CoglPixelFormat format,
uint32_t expected_pixel,
...)
{
va_list ap;
int bits;
uint32_t tex_data = 0;
int bits_sum = 0;
CoglTexture *texture = test_utils_create_color_texture (context, 0);
va_start (ap, expected_pixel);
/* Convert the va args into a single 32-bit value */
while ((bits = va_arg (ap, int)) != -1)
{
uint32_t value = (va_arg (ap, int) * ((1 << bits) - 1) + 127) / 255;
bits_sum += bits;
tex_data |= value << (32 - bits_sum);
}
va_end (ap);
cogl_texture_set_region (texture,
0, 0, /* src_x / src_y */
0, 0, /* dst_x / dst_y */
1, 1, /* dst_w / dst_h */
1, 1, /* width / height */
format,
4, /* rowstride */
(uint8_t *) &tex_data);
test_color (texture, expected_pixel);
cogl_object_unref (texture);
}
void
test_write_texture_formats (void)
{
test_write_byte (test_ctx, COGL_PIXEL_FORMAT_A_8, 0x34, 0x00000034);
#if 0
/* I'm not sure what's the right value to put here because Nvidia
and Mesa seem to behave differently so one of them must be
wrong. */
test_write_byte (test_ctx, COGL_PIXEL_FORMAT_G_8, 0x34, 0x340000ff);
#endif
/* We should always be able to read from an RG buffer regardless of
* whether RG textures are supported because Cogl will do the
* conversion for us */
test_write_bytes (test_ctx, COGL_PIXEL_FORMAT_RG_88, 0x123456ff, 0x123400ff);
test_write_short (test_ctx, COGL_PIXEL_FORMAT_RGB_565, 0x0843, 0x080819ff);
test_write_short (test_ctx, COGL_PIXEL_FORMAT_RGBA_4444_PRE, 0x1234, 0x11223344);
test_write_short (test_ctx, COGL_PIXEL_FORMAT_RGBA_5551_PRE, 0x0887, 0x081019ff);
test_write_bytes (test_ctx, COGL_PIXEL_FORMAT_RGB_888, 0x123456ff, 0x123456ff);
test_write_bytes (test_ctx, COGL_PIXEL_FORMAT_BGR_888, 0x563412ff, 0x123456ff);
test_write_bytes (test_ctx, COGL_PIXEL_FORMAT_RGBA_8888_PRE,
0x12345678, 0x12345678);
test_write_bytes (test_ctx, COGL_PIXEL_FORMAT_BGRA_8888_PRE,
0x56341278, 0x12345678);
test_write_bytes (test_ctx, COGL_PIXEL_FORMAT_ARGB_8888_PRE,
0x78123456, 0x12345678);
test_write_bytes (test_ctx, COGL_PIXEL_FORMAT_ABGR_8888_PRE,
0x78563412, 0x12345678);
test_write_int (test_ctx, COGL_PIXEL_FORMAT_RGBA_1010102_PRE,
0x123456ff,
10, 0x12, 10, 0x34, 10, 0x56, 2, 0xff,
-1);
test_write_int (test_ctx, COGL_PIXEL_FORMAT_BGRA_1010102_PRE,
0x123456ff,
10, 0x56, 10, 0x34, 10, 0x12, 2, 0xff,
-1);
test_write_int (test_ctx, COGL_PIXEL_FORMAT_ARGB_2101010_PRE,
0x123456ff,
2, 0xff, 10, 0x12, 10, 0x34, 10, 0x56,
-1);
test_write_int (test_ctx, COGL_PIXEL_FORMAT_ABGR_2101010_PRE,
0x123456ff,
2, 0xff, 10, 0x56, 10, 0x34, 10, 0x12,
-1);
if (cogl_test_verbose ())
g_print ("OK\n");
}