summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2023-04-25 11:48:50 +0200
committerMatthias Clasen <mclasen@redhat.com>2023-04-25 11:54:34 +0200
commitf56ba41893d53c5b041a033bfdbc828d2312a225 (patch)
tree3330b0590667837cec84c8daee0e72853d991f21
parent854591a5f945b4b330c76430ac96cb71d1c35204 (diff)
downloadgtk+-f56ba41893d53c5b041a033bfdbc828d2312a225.tar.gz
gldriver: Add a sync when creating textures
-rw-r--r--gsk/gl/gskgldriver.c4
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,