From f0fc2709d6b09438a09043d82bca306f5e8edbeb Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Mon, 20 Nov 2023 03:42:37 +0100 Subject: [PATCH] gpu: Implement support for multiple storage buffers When using the uber shader a lot, we may overflow the (only 16kB large) storage buffer. Stop crashing when that happens and instead just allocate a new one. --- gsk/gpu/gskgpuframe.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/gsk/gpu/gskgpuframe.c b/gsk/gpu/gskgpuframe.c index 4562f3079c..04996069d2 100644 --- a/gsk/gpu/gskgpuframe.c +++ b/gsk/gpu/gskgpuframe.c @@ -473,7 +473,18 @@ gsk_gpu_frame_write_storage_buffer (GskGpuFrame *self, gsk_gpu_frame_ensure_storage_buffer (self); offset = priv->storage_buffer_used; - g_assert (offset + size < gsk_gpu_buffer_get_size (priv->storage_buffer)); + if (offset + size > gsk_gpu_buffer_get_size (priv->storage_buffer)) + { + g_assert (offset > 0); + + gsk_gpu_buffer_unmap (priv->storage_buffer); + g_clear_object (&priv->storage_buffer); + priv->storage_buffer_data = 0; + priv->storage_buffer_used = 0; + gsk_gpu_frame_ensure_storage_buffer (self); + + offset = priv->storage_buffer_used; + } if (size) {