testsuite: Update memorytexture text to use new renderers

1. Refactor checks for GL support

2. Add NGL and Vulkan
This commit is contained in:
Benjamin Otte
2023-10-31 19:11:05 +01:00
parent 7652dbcacf
commit 2e25936383

View File

@@ -1,6 +1,9 @@
#include <gtk/gtk.h>
#include "gsk/gl/gskglrenderer.h"
#ifdef GDK_RENDERING_VULKAN
#include "gsk/vulkan/gskvulkanrenderer.h"
#endif
#include <epoxy/gl.h>
@@ -8,6 +11,8 @@
static GdkGLContext *gl_context = NULL;
static GskRenderer *gl_renderer = NULL;
static GskRenderer *ngl_renderer = NULL;
static GskRenderer *vulkan_renderer = NULL;
typedef struct _TextureBuilder TextureBuilder;
@@ -16,6 +21,8 @@ typedef enum {
TEXTURE_METHOD_GL,
TEXTURE_METHOD_GL_RELEASED,
TEXTURE_METHOD_GL_NATIVE,
TEXTURE_METHOD_NGL,
TEXTURE_METHOD_VULKAN,
TEXTURE_METHOD_PNG,
TEXTURE_METHOD_PNG_PIXBUF,
TEXTURE_METHOD_TIFF,
@@ -1011,6 +1018,14 @@ create_texture (GdkMemoryFormat format,
texture = upload_to_gl_native (texture);
break;
case TEXTURE_METHOD_NGL:
texture = upload_to_renderer (texture, ngl_renderer);
break;
case TEXTURE_METHOD_VULKAN:
texture = upload_to_renderer (texture, vulkan_renderer);
break;
case TEXTURE_METHOD_PNG:
{
GBytes *bytes = gdk_texture_save_to_png_bytes (texture);
@@ -1094,6 +1109,8 @@ texture_method_is_accurate (TextureMethod method)
case TEXTURE_METHOD_GL:
case TEXTURE_METHOD_GL_RELEASED:
case TEXTURE_METHOD_GL_NATIVE:
case TEXTURE_METHOD_NGL:
case TEXTURE_METHOD_VULKAN:
case TEXTURE_METHOD_PNG:
case TEXTURE_METHOD_PNG_PIXBUF:
case TEXTURE_METHOD_TIFF_PIXBUF:
@@ -1195,6 +1212,14 @@ should_skip_download_test (GdkMemoryFormat format,
case TEXTURE_METHOD_TIFF:
return FALSE;
case TEXTURE_METHOD_NGL:
if (ngl_renderer == NULL)
{
g_test_skip ("NGL renderer is not supported");
return TRUE;
}
return FALSE;
case TEXTURE_METHOD_GL:
case TEXTURE_METHOD_GL_RELEASED:
if (gl_renderer == NULL)
@@ -1207,6 +1232,14 @@ should_skip_download_test (GdkMemoryFormat format,
case TEXTURE_METHOD_GL_NATIVE:
return gl_native_should_skip_format (format);
case TEXTURE_METHOD_VULKAN:
if (vulkan_renderer == NULL)
{
g_test_skip ("Vulkan is not supported");
return TRUE;
}
return FALSE;
case TEXTURE_METHOD_TIFF_PIXBUF:
g_test_skip ("the pixbuf tiff loader is broken (gdk-pixbuf#100)");
return TRUE;
@@ -1244,8 +1277,9 @@ test_download (gconstpointer data,
if (color.alpha == 0.f &&
!gdk_memory_format_is_premultiplied (format) &&
gdk_memory_format_has_alpha (format) &&
(method == TEXTURE_METHOD_GL || method == TEXTURE_METHOD_GL_RELEASED ||
method == TEXTURE_METHOD_GL_NATIVE))
(method == TEXTURE_METHOD_GL || method == TEXTURE_METHOD_GL_RELEASED ||
method == TEXTURE_METHOD_GL_NATIVE || method == TEXTURE_METHOD_VULKAN ||
method == TEXTURE_METHOD_NGL))
color = (GdkRGBA) { 0, 0, 0, 0 };
expected = create_texture (format, TEXTURE_METHOD_LOCAL, width, height, &color);
@@ -1374,7 +1408,18 @@ add_test (const char *name,
{
for (method = 0; method < N_TEXTURE_METHODS; method++)
{
const char *method_names[N_TEXTURE_METHODS] = { "local", "gl", "gl-released", "gl-native", "png", "png-pixbuf", "tiff", "tiff-pixbuf" };
const char *method_names[N_TEXTURE_METHODS] = {
[TEXTURE_METHOD_LOCAL] = "local",
[TEXTURE_METHOD_GL] = "gl",
[TEXTURE_METHOD_GL_RELEASED] = "gl-released",
[TEXTURE_METHOD_GL_NATIVE] = "gl-native",
[TEXTURE_METHOD_NGL] = "ngl",
[TEXTURE_METHOD_VULKAN] = "vulkan",
[TEXTURE_METHOD_PNG] = "png",
[TEXTURE_METHOD_PNG_PIXBUF] = "png-pixbuf",
[TEXTURE_METHOD_TIFF] = "tiff",
[TEXTURE_METHOD_TIFF_PIXBUF] = "tiff-pixbuf"
};
char *test_name = g_strdup_printf ("%s/%s/%s",
name,
g_enum_get_value (enum_class, format)->value_nick,
@@ -1432,8 +1477,34 @@ main (int argc, char *argv[])
g_clear_object (&gl_renderer);
}
ngl_renderer = gsk_ngl_renderer_new ();
if (!gsk_renderer_realize (ngl_renderer, NULL, NULL))
{
g_clear_object (&ngl_renderer);
}
#ifdef GDK_RENDERING_VULKAN
vulkan_renderer = gsk_vulkan_renderer_new ();
if (!gsk_renderer_realize (vulkan_renderer, NULL, NULL))
{
g_clear_object (&vulkan_renderer);
}
#endif
result = g_test_run ();
#ifdef GDK_RENDERING_VULKAN
if (vulkan_renderer)
{
gsk_renderer_unrealize (vulkan_renderer);
g_clear_object (&vulkan_renderer);
}
#endif
if (ngl_renderer)
{
gsk_renderer_unrealize (ngl_renderer);
g_clear_object (&ngl_renderer);
}
if (gl_renderer)
{
gsk_renderer_unrealize (gl_renderer);