diff options
author | Benjamin Otte <otte.benjamin@googlemail.com> | 2021-10-09 11:59:42 +0000 |
---|---|---|
committer | Benjamin Otte <otte.benjamin@googlemail.com> | 2021-10-09 11:59:42 +0000 |
commit | 5311616ca15ecbca19cfa7b81ba20a44a151cb62 (patch) | |
tree | 50940fa35cdba90a14b9e71618b5a5f0a78349f3 | |
parent | db167e09c5f8fa4f9b2bb93cc35db72387f2dbaa (diff) | |
parent | e581c148d9b304886387953d7ab7114711109cc7 (diff) | |
download | gtk+-5311616ca15ecbca19cfa7b81ba20a44a151cb62.tar.gz |
Merge branch 'wip/otte/gles' into 'master'
Improve GLES
See merge request GNOME/gtk!4050
-rw-r--r-- | .gitlab-ci.yml | 1 | ||||
-rwxr-xr-x | .gitlab-ci/run-tests.sh | 24 | ||||
-rw-r--r-- | gdk/gdkglcontext.c | 10 | ||||
-rw-r--r-- | gdk/gdkmemoryformat.c | 2 | ||||
-rw-r--r-- | gsk/ngl/gsknglcommandqueue.c | 4 | ||||
-rw-r--r-- | testsuite/gdk/memorytexture.c | 22 | ||||
-rw-r--r-- | testsuite/meson.build | 12 |
7 files changed, 68 insertions, 7 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 70949b9e18..212c857643 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -91,6 +91,7 @@ fedora-x86_64: - meson compile -C _build_hello - .gitlab-ci/run-tests.sh _build x11 - .gitlab-ci/run-tests.sh _build wayland + - .gitlab-ci/run-tests.sh _build waylandgles - .gitlab-ci/run-tests.sh _build broadway release-build: diff --git a/.gitlab-ci/run-tests.sh b/.gitlab-ci/run-tests.sh index fa29859b6f..e68cf5a6c9 100755 --- a/.gitlab-ci/run-tests.sh +++ b/.gitlab-ci/run-tests.sh @@ -44,6 +44,24 @@ case "${backend}" in kill ${compositor} ;; + waylandgles) + export XDG_RUNTIME_DIR="$(mktemp -p $(pwd) -d xdg-runtime-XXXXXX)" + + weston --backend=headless-backend.so --socket=wayland-6 --idle-time=0 & + compositor=$! + export WAYLAND_DISPLAY=wayland-6 + + meson test -C ${builddir} \ + --timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \ + --print-errorlogs \ + --setup=${backend} \ + --suite=gtk \ + --no-suite=gsk-compare-broadway + + exit_code=$? + kill ${compositor} + ;; + broadway) export XDG_RUNTIME_DIR="$(mktemp -p $(pwd) -d xdg-runtime-XXXXXX)" @@ -62,6 +80,12 @@ case "${backend}" in exit_code=0 kill ${server} ;; + + *) + echo "Failed to add ${backend} to .gitlab-ci/run-tests.sh" + exit 1 + ;; + esac cd ${builddir} diff --git a/gdk/gdkglcontext.c b/gdk/gdkglcontext.c index ecd9ed7615..f719da3aea 100644 --- a/gdk/gdkglcontext.c +++ b/gdk/gdkglcontext.c @@ -281,6 +281,7 @@ gdk_gl_context_upload_texture (GdkGLContext *context, width, height); data = copy; data_format = GDK_MEMORY_R8G8B8A8_PREMULTIPLIED; + stride = width * 4; if (!gdk_memory_format_gl_format (data_format, gdk_gl_context_get_use_es (context), &gl_internalformat, @@ -297,17 +298,17 @@ gdk_gl_context_upload_texture (GdkGLContext *context, bpp = gdk_memory_format_bytes_per_pixel (data_format); + glPixelStorei (GL_UNPACK_ALIGNMENT, gdk_memory_format_alignment (data_format)); + /* GL_UNPACK_ROW_LENGTH is available on desktop GL, OpenGL ES >= 3.0, or if * the GL_EXT_unpack_subimage extension for OpenGL ES 2.0 is available */ if (stride == width * bpp) { - glPixelStorei (GL_UNPACK_ALIGNMENT, 1); - glTexImage2D (texture_target, 0, gl_internalformat, width, height, 0, gl_format, gl_type, data); - glPixelStorei (GL_UNPACK_ALIGNMENT, 4); } - else if ((!gdk_gl_context_get_use_es (context) || + else if (stride % bpp == 0 && + (!gdk_gl_context_get_use_es (context) || (priv->gl_version >= 30 || priv->has_unpack_subimage))) { glPixelStorei (GL_UNPACK_ROW_LENGTH, stride / bpp); @@ -323,6 +324,7 @@ gdk_gl_context_upload_texture (GdkGLContext *context, for (i = 0; i < height; i++) glTexSubImage2D (texture_target, 0, 0, i, width, 1, gl_format, gl_type, data + (i * stride)); } + glPixelStorei (GL_UNPACK_ALIGNMENT, 4); g_free (copy); } diff --git a/gdk/gdkmemoryformat.c b/gdk/gdkmemoryformat.c index 5af2bb8516..5ee530654f 100644 --- a/gdk/gdkmemoryformat.c +++ b/gdk/gdkmemoryformat.c @@ -274,7 +274,7 @@ static const GdkMemoryFormatDescription memory_formats[GDK_MEMORY_N_FORMATS] = { G_ALIGNOF (guchar), FALSE, TRUE, - { GL_RGBA8, GL_RGB, GL_UNSIGNED_BYTE }, + { GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE }, r8g8b8_to_float, r8g8b8_from_float, }, diff --git a/gsk/ngl/gsknglcommandqueue.c b/gsk/ngl/gsknglcommandqueue.c index f7db75016d..a5d2a2245e 100644 --- a/gsk/ngl/gsknglcommandqueue.c +++ b/gsk/ngl/gsknglcommandqueue.c @@ -1305,10 +1305,10 @@ gsk_ngl_command_queue_create_texture (GskNglCommandQueue *self, glTexImage2D (GL_TEXTURE_2D, 0, format, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); break; case GL_RGBA16F: - glTexImage2D (GL_TEXTURE_2D, 0, format, width, height, 0, GL_BGRA, GL_HALF_FLOAT, NULL); + glTexImage2D (GL_TEXTURE_2D, 0, format, width, height, 0, GL_RGBA, GL_HALF_FLOAT, NULL); break; case GL_RGBA32F: - glTexImage2D (GL_TEXTURE_2D, 0, format, width, height, 0, GL_BGRA, GL_FLOAT, NULL); + glTexImage2D (GL_TEXTURE_2D, 0, format, width, height, 0, GL_RGBA, GL_FLOAT, NULL); break; default: /* If you add new formats, make sure to set the correct format and type here diff --git a/testsuite/gdk/memorytexture.c b/testsuite/gdk/memorytexture.c index 488aec4d6c..401ad58d2f 100644 --- a/testsuite/gdk/memorytexture.c +++ b/testsuite/gdk/memorytexture.c @@ -618,6 +618,27 @@ test_download_4x4 (gconstpointer data) } } +/* larger than what NGL puts into the icon cache */ +static void +test_download_192x192 (gconstpointer data) +{ + GdkMemoryFormat format; + TextureMethod method; + GdkTexture *expected, *test; + GdkRGBA color; + + decode (data, &format, &method); + + create_random_color (&color); + expected = create_texture (GDK_MEMORY_DEFAULT, TEXTURE_METHOD_LOCAL, 192, 192, &color); + test = create_texture (format, method, 192, 192, &color); + + compare_textures (expected, test, gdk_memory_format_has_alpha (format)); + + g_object_unref (expected); + g_object_unref (test); +} + static void test_download_float_1x1 (gconstpointer data) { @@ -708,6 +729,7 @@ main (int argc, char *argv[]) add_test ("/memorytexture/download_1x1", test_download_1x1); add_test ("/memorytexture/download_4x4", test_download_4x4); + add_test ("/memorytexture/download_192x192", test_download_192x192); add_test ("/memorytexture/download_float_1x1", test_download_float_1x1); add_test ("/memorytexture/download_float_4x4", test_download_float_4x4); diff --git a/testsuite/meson.build b/testsuite/meson.build index 0b75c90811..10fa16dfbc 100644 --- a/testsuite/meson.build +++ b/testsuite/meson.build @@ -30,6 +30,18 @@ if wayland_enabled 'TEST_OUTPUT_SUBDIR=wayland', ]) + if get_option('debug') + gdk_debug = 'GDK_DEBUG=gl-gles,default-settings' + else + gdk_debug = 'GDK_DEBUG=gl-gles' + endif + add_test_setup ('waylandgles', + env: common_env + [ + 'GDK_BACKEND=wayland', + 'TEST_OUTPUT_SUBDIR=waylandgles', + gdk_debug, + ]) + endif if os_win32 |