diff options
author | Matthias Clasen <mclasen@redhat.com> | 2023-04-25 11:48:50 +0200 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2023-04-25 11:54:34 +0200 |
commit | f56ba41893d53c5b041a033bfdbc828d2312a225 (patch) | |
tree | 3330b0590667837cec84c8daee0e72853d991f21 | |
parent | 854591a5f945b4b330c76430ac96cb71d1c35204 (diff) | |
download | gtk+-f56ba41893d53c5b041a033bfdbc828d2312a225.tar.gz |
gldriver: Add a sync when creating textures
-rw-r--r-- | gsk/gl/gskgldriver.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/gsk/gl/gskgldriver.c b/gsk/gl/gskgldriver.c index bf54991a34..faea458469 100644 --- a/gsk/gl/gskgldriver.c +++ b/gsk/gl/gskgldriver.c @@ -1563,6 +1563,7 @@ typedef struct _GskGLTextureState { GdkGLContext *context; GLuint texture_id; + GLsync sync; } GskGLTextureState; static void @@ -1575,6 +1576,7 @@ create_texture_from_texture_destroy (gpointer data) gdk_gl_context_make_current (state->context); glDeleteTextures (1, &state->texture_id); + glDeleteSync (state->sync); g_clear_object (&state->context); g_free (state); } @@ -1601,6 +1603,7 @@ gsk_gl_driver_create_gdk_texture (GskGLDriver *self, state = g_new0 (GskGLTextureState, 1); state->texture_id = texture_id; state->context = g_object_ref (self->command_queue->context); + state->sync = glFenceSync (GL_SYNC_GPU_COMMANDS_COMPLETE, 0); g_hash_table_steal (self->textures, GUINT_TO_POINTER (texture_id)); @@ -1609,6 +1612,7 @@ gsk_gl_driver_create_gdk_texture (GskGLDriver *self, gdk_gl_texture_builder_set_id (builder, texture_id); gdk_gl_texture_builder_set_width (builder, texture->width); gdk_gl_texture_builder_set_height (builder, texture->height); + gdk_gl_texture_builder_set_sync (builder, state->sync); result = gdk_gl_texture_builder_build (builder, create_texture_from_texture_destroy, |