[mutter] cogl/onscreen: Make swap_buffer/region CoglOnscreen class vfuncs
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] cogl/onscreen: Make swap_buffer/region CoglOnscreen class vfuncs
- Date: Sat, 30 Jan 2021 09:39:49 +0000 (UTC)
commit fe72876b203576619cbafab475f899e662b36bad
Author: Jonas Ã…dahl <jadahl gmail com>
Date: Mon Oct 19 21:47:41 2020 +0200
cogl/onscreen: Make swap_buffer/region CoglOnscreen class vfuncs
No need to go via the "winsys" vtable.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1514>
cogl/cogl/cogl-onscreen.c | 29 ++++++++++++++---------------
cogl/cogl/cogl-onscreen.h | 13 +++++++++++++
cogl/cogl/winsys/cogl-onscreen-egl.c | 29 +++++++++++++++++------------
cogl/cogl/winsys/cogl-onscreen-egl.h | 14 --------------
cogl/cogl/winsys/cogl-onscreen-glx.c | 29 +++++++++++++++++------------
cogl/cogl/winsys/cogl-onscreen-glx.h | 14 --------------
cogl/cogl/winsys/cogl-winsys-egl.c | 3 ---
cogl/cogl/winsys/cogl-winsys-glx.c | 3 ---
cogl/cogl/winsys/cogl-winsys-private.h | 14 --------------
src/backends/native/meta-onscreen-native.c | 20 ++++++++++++--------
src/backends/native/meta-onscreen-native.h | 6 ------
src/backends/native/meta-renderer-native.c | 4 ----
12 files changed, 73 insertions(+), 105 deletions(-)
---
diff --git a/cogl/cogl/cogl-onscreen.c b/cogl/cogl/cogl-onscreen.c
index eff4521dd2..d61a3a4886 100644
--- a/cogl/cogl/cogl-onscreen.c
+++ b/cogl/cogl/cogl-onscreen.c
@@ -310,7 +310,7 @@ cogl_onscreen_swap_buffers_with_damage (CoglOnscreen *onscreen,
{
CoglOnscreenPrivate *priv = cogl_onscreen_get_instance_private (onscreen);
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
- const CoglWinsysVtable *winsys;
+ CoglOnscreenClass *klass = COGL_ONSCREEN_GET_CLASS (onscreen);
g_return_if_fail (COGL_IS_ONSCREEN (framebuffer));
@@ -322,11 +322,12 @@ cogl_onscreen_swap_buffers_with_damage (CoglOnscreen *onscreen,
if (G_UNLIKELY (COGL_DEBUG_ENABLED (COGL_DEBUG_SYNC_FRAME)))
cogl_framebuffer_finish (framebuffer);
- winsys = _cogl_framebuffer_get_winsys (framebuffer);
- winsys->onscreen_swap_buffers_with_damage (onscreen,
- rectangles, n_rectangles,
- info,
- user_data);
+ klass->swap_buffers_with_damage (onscreen,
+ rectangles,
+ n_rectangles,
+ info,
+ user_data);
+
cogl_framebuffer_discard_buffers (framebuffer,
COGL_BUFFER_BIT_COLOR |
COGL_BUFFER_BIT_DEPTH |
@@ -366,7 +367,7 @@ cogl_onscreen_swap_region (CoglOnscreen *onscreen,
{
CoglOnscreenPrivate *priv = cogl_onscreen_get_instance_private (onscreen);
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
- const CoglWinsysVtable *winsys;
+ CoglOnscreenClass *klass = COGL_ONSCREEN_GET_CLASS (onscreen);
g_return_if_fail (COGL_IS_ONSCREEN (framebuffer));
@@ -378,17 +379,15 @@ cogl_onscreen_swap_region (CoglOnscreen *onscreen,
if (G_UNLIKELY (COGL_DEBUG_ENABLED (COGL_DEBUG_SYNC_FRAME)))
cogl_framebuffer_finish (framebuffer);
- winsys = _cogl_framebuffer_get_winsys (framebuffer);
-
/* This should only be called if the winsys advertises
COGL_WINSYS_FEATURE_SWAP_REGION */
- g_return_if_fail (winsys->onscreen_swap_region != NULL);
+ g_return_if_fail (klass->swap_region);
- winsys->onscreen_swap_region (COGL_ONSCREEN (framebuffer),
- rectangles,
- n_rectangles,
- info,
- user_data);
+ klass->swap_region (onscreen,
+ rectangles,
+ n_rectangles,
+ info,
+ user_data);
cogl_framebuffer_discard_buffers (framebuffer,
COGL_BUFFER_BIT_COLOR |
diff --git a/cogl/cogl/cogl-onscreen.h b/cogl/cogl/cogl-onscreen.h
index a815d7cb40..6a134dc90c 100644
--- a/cogl/cogl/cogl-onscreen.h
+++ b/cogl/cogl/cogl-onscreen.h
@@ -57,6 +57,19 @@ struct _CoglOnscreenClass
{
/*< private >*/
CoglFramebufferClass parent_class;
+
+ void (* swap_buffers_with_damage) (CoglOnscreen *onscreen,
+ const int *rectangles,
+ int n_rectangles,
+ CoglFrameInfo *info,
+ gpointer user_data);
+
+ void (* swap_region) (CoglOnscreen *onscreen,
+ const int *rectangles,
+ int n_rectangles,
+ CoglFrameInfo *info,
+ gpointer user_data);
+
};
#define COGL_SCANOUT_ERROR (cogl_scanout_error_quark ())
diff --git a/cogl/cogl/winsys/cogl-onscreen-egl.c b/cogl/cogl/winsys/cogl-onscreen-egl.c
index 6262c652e3..7e4807ed45 100644
--- a/cogl/cogl/winsys/cogl-onscreen-egl.c
+++ b/cogl/cogl/winsys/cogl-onscreen-egl.c
@@ -208,12 +208,12 @@ _cogl_winsys_onscreen_egl_get_buffer_age (CoglOnscreen *onscreen)
return age;
}
-void
-_cogl_winsys_onscreen_egl_swap_region (CoglOnscreen *onscreen,
- const int *user_rectangles,
- int n_rectangles,
- CoglFrameInfo *info,
- gpointer user_data)
+static void
+cogl_onscreen_egl_swap_region (CoglOnscreen *onscreen,
+ const int *user_rectangles,
+ int n_rectangles,
+ CoglFrameInfo *info,
+ gpointer user_data)
{
CoglOnscreenEgl *onscreen_egl = COGL_ONSCREEN_EGL (onscreen);
CoglOnscreenEglPrivate *priv =
@@ -252,12 +252,12 @@ _cogl_winsys_onscreen_egl_swap_region (CoglOnscreen *onscreen,
g_warning ("Error reported by eglSwapBuffersRegion");
}
-void
-_cogl_winsys_onscreen_egl_swap_buffers_with_damage (CoglOnscreen *onscreen,
- const int *rectangles,
- int n_rectangles,
- CoglFrameInfo *info,
- gpointer user_data)
+static void
+cogl_onscreen_egl_swap_buffers_with_damage (CoglOnscreen *onscreen,
+ const int *rectangles,
+ int n_rectangles,
+ CoglFrameInfo *info,
+ gpointer user_data)
{
CoglOnscreenEgl *onscreen_egl = COGL_ONSCREEN_EGL (onscreen);
CoglOnscreenEglPrivate *priv =
@@ -354,6 +354,11 @@ static void
cogl_onscreen_egl_class_init (CoglOnscreenEglClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ CoglOnscreenClass *onscreen_class = COGL_ONSCREEN_CLASS (klass);
object_class->dispose = cogl_onscreen_egl_dispose;
+
+ onscreen_class->swap_buffers_with_damage =
+ cogl_onscreen_egl_swap_buffers_with_damage;
+ onscreen_class->swap_region = cogl_onscreen_egl_swap_region;
}
diff --git a/cogl/cogl/winsys/cogl-onscreen-egl.h b/cogl/cogl/winsys/cogl-onscreen-egl.h
index fab854a693..b464405d28 100644
--- a/cogl/cogl/winsys/cogl-onscreen-egl.h
+++ b/cogl/cogl/winsys/cogl-onscreen-egl.h
@@ -47,20 +47,6 @@ _cogl_winsys_onscreen_egl_bind (CoglOnscreen *onscreen);
int
_cogl_winsys_onscreen_egl_get_buffer_age (CoglOnscreen *onscreen);
-void
-_cogl_winsys_onscreen_egl_swap_region (CoglOnscreen *onscreen,
- const int *user_rectangles,
- int n_rectangles,
- CoglFrameInfo *info,
- gpointer user_data);
-
-void
-_cogl_winsys_onscreen_egl_swap_buffers_with_damage (CoglOnscreen *onscreen,
- const int *rectangles,
- int n_rectangles,
- CoglFrameInfo *info,
- gpointer user_data);
-
COGL_EXPORT void
cogl_onscreen_egl_set_platform (CoglOnscreenEgl *onscreen_egl,
gpointer platform);
diff --git a/cogl/cogl/winsys/cogl-onscreen-glx.c b/cogl/cogl/winsys/cogl-onscreen-glx.c
index 24ee9cddcb..882e793d1e 100644
--- a/cogl/cogl/winsys/cogl-onscreen-glx.c
+++ b/cogl/cogl/winsys/cogl-onscreen-glx.c
@@ -661,12 +661,12 @@ set_complete_pending (CoglOnscreen *onscreen)
onscreen_glx->pending_complete_notify++;
}
-void
-_cogl_winsys_onscreen_glx_swap_region (CoglOnscreen *onscreen,
- const int *user_rectangles,
- int n_rectangles,
- CoglFrameInfo *info,
- gpointer user_data)
+static void
+cogl_onscreen_glx_swap_region (CoglOnscreen *onscreen,
+ const int *user_rectangles,
+ int n_rectangles,
+ CoglFrameInfo *info,
+ gpointer user_data)
{
CoglOnscreenGlx *onscreen_glx = COGL_ONSCREEN_GLX (onscreen);
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
@@ -871,12 +871,12 @@ _cogl_winsys_onscreen_glx_swap_region (CoglOnscreen *onscreen,
}
}
-void
-_cogl_winsys_onscreen_glx_swap_buffers_with_damage (CoglOnscreen *onscreen,
- const int *rectangles,
- int n_rectangles,
- CoglFrameInfo *info,
- gpointer user_data)
+static void
+cogl_onscreen_glx_swap_buffers_with_damage (CoglOnscreen *onscreen,
+ const int *rectangles,
+ int n_rectangles,
+ CoglFrameInfo *info,
+ gpointer user_data)
{
CoglOnscreenGlx *onscreen_glx = COGL_ONSCREEN_GLX (onscreen);
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
@@ -1154,8 +1154,13 @@ cogl_onscreen_glx_class_init (CoglOnscreenGlxClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
CoglFramebufferClass *framebuffer_class = COGL_FRAMEBUFFER_CLASS (klass);
+ CoglOnscreenClass *onscreen_class = COGL_ONSCREEN_CLASS (klass);
object_class->dispose = cogl_onscreen_glx_dispose;
framebuffer_class->allocate = cogl_onscreen_glx_allocate;
+
+ onscreen_class->swap_buffers_with_damage =
+ cogl_onscreen_glx_swap_buffers_with_damage;
+ onscreen_class->swap_region = cogl_onscreen_glx_swap_region;
}
diff --git a/cogl/cogl/winsys/cogl-onscreen-glx.h b/cogl/cogl/winsys/cogl-onscreen-glx.h
index 8b10e39692..e5e9a1f2fc 100644
--- a/cogl/cogl/winsys/cogl-onscreen-glx.h
+++ b/cogl/cogl/winsys/cogl-onscreen-glx.h
@@ -47,20 +47,6 @@ _cogl_winsys_onscreen_glx_bind (CoglOnscreen *onscreen);
int
_cogl_winsys_onscreen_glx_get_buffer_age (CoglOnscreen *onscreen);
-void
-_cogl_winsys_onscreen_glx_swap_region (CoglOnscreen *onscreen,
- const int *user_rectangles,
- int n_rectangles,
- CoglFrameInfo *info,
- gpointer user_data);
-
-void
-_cogl_winsys_onscreen_glx_swap_buffers_with_damage (CoglOnscreen *onscreen,
- const int *rectangles,
- int n_rectangles,
- CoglFrameInfo *info,
- gpointer user_data);
-
uint32_t
_cogl_winsys_onscreen_glx_get_window_xid (CoglOnscreen *onscreen);
diff --git a/cogl/cogl/winsys/cogl-winsys-egl.c b/cogl/cogl/winsys/cogl-winsys-egl.c
index 8a563aca35..5149b4eb63 100644
--- a/cogl/cogl/winsys/cogl-winsys-egl.c
+++ b/cogl/cogl/winsys/cogl-winsys-egl.c
@@ -637,9 +637,6 @@ static CoglWinsysVtable _cogl_winsys_vtable =
.context_init = _cogl_winsys_context_init,
.context_deinit = _cogl_winsys_context_deinit,
.onscreen_bind = _cogl_winsys_onscreen_egl_bind,
- .onscreen_swap_buffers_with_damage =
- _cogl_winsys_onscreen_egl_swap_buffers_with_damage,
- .onscreen_swap_region = _cogl_winsys_onscreen_egl_swap_region,
.onscreen_get_buffer_age = _cogl_winsys_onscreen_egl_get_buffer_age,
#if defined(EGL_KHR_fence_sync) || defined(EGL_KHR_reusable_sync)
diff --git a/cogl/cogl/winsys/cogl-winsys-glx.c b/cogl/cogl/winsys/cogl-winsys-glx.c
index 97d92e0cdd..5561b13d2e 100644
--- a/cogl/cogl/winsys/cogl-winsys-glx.c
+++ b/cogl/cogl/winsys/cogl-winsys-glx.c
@@ -1470,9 +1470,6 @@ static CoglWinsysVtable _cogl_winsys_vtable =
.context_deinit = _cogl_winsys_context_deinit,
.context_get_clock_time = _cogl_winsys_get_clock_time,
.onscreen_bind = _cogl_winsys_onscreen_glx_bind,
- .onscreen_swap_buffers_with_damage =
- _cogl_winsys_onscreen_glx_swap_buffers_with_damage,
- .onscreen_swap_region = _cogl_winsys_onscreen_glx_swap_region,
.onscreen_get_buffer_age = _cogl_winsys_onscreen_glx_get_buffer_age,
.onscreen_x11_get_window_xid =
_cogl_winsys_onscreen_glx_get_window_xid,
diff --git a/cogl/cogl/winsys/cogl-winsys-private.h b/cogl/cogl/winsys/cogl-winsys-private.h
index 95ff65237b..d6a235710c 100644
--- a/cogl/cogl/winsys/cogl-winsys-private.h
+++ b/cogl/cogl/winsys/cogl-winsys-private.h
@@ -107,13 +107,6 @@ typedef struct _CoglWinsysVtable
void
(*onscreen_bind) (CoglOnscreen *onscreen);
- void
- (*onscreen_swap_buffers_with_damage) (CoglOnscreen *onscreen,
- const int *rectangles,
- int n_rectangles,
- CoglFrameInfo *info,
- gpointer user_data);
-
gboolean
(*onscreen_direct_scanout) (CoglOnscreen *onscreen,
CoglScanout *scanout,
@@ -130,13 +123,6 @@ typedef struct _CoglWinsysVtable
int64_t
(*context_get_clock_time) (CoglContext *context);
- void
- (*onscreen_swap_region) (CoglOnscreen *onscreen,
- const int *rectangles,
- int n_rectangles,
- CoglFrameInfo *info,
- gpointer user_data);
-
void
(*onscreen_set_resizable) (CoglOnscreen *onscreen, gboolean resizable);
diff --git a/src/backends/native/meta-onscreen-native.c b/src/backends/native/meta-onscreen-native.c
index e21d905450..5f3a3d9824 100644
--- a/src/backends/native/meta-onscreen-native.c
+++ b/src/backends/native/meta-onscreen-native.c
@@ -955,7 +955,7 @@ ensure_crtc_modes (CoglOnscreen *onscreen)
meta_onscreen_native_set_crtc_mode (onscreen, renderer_gpu_data);
}
-void
+static void
meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen,
const int *rectangles,
int n_rectangles,
@@ -979,7 +979,7 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen,
MetaGpuKms *render_gpu = onscreen_native->render_gpu;
MetaKmsDevice *render_kms_device = meta_gpu_kms_get_kms_device (render_gpu);
ClutterFrame *frame = user_data;
- const CoglWinsysVtable *parent_vtable;
+ CoglOnscreenClass *parent_class;
gboolean egl_context_changed = FALSE;
gboolean use_modifiers;
MetaPowerSave power_save_mode;
@@ -996,12 +996,12 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen,
update_secondary_gpu_state_pre_swap_buffers (onscreen);
- parent_vtable = meta_get_renderer_native_parent_vtable ();
- parent_vtable->onscreen_swap_buffers_with_damage (onscreen,
- rectangles,
- n_rectangles,
- frame_info,
- user_data);
+ parent_class = COGL_ONSCREEN_CLASS (meta_onscreen_native_parent_class);
+ parent_class->swap_buffers_with_damage (onscreen,
+ rectangles,
+ n_rectangles,
+ frame_info,
+ user_data);
renderer_gpu_data = meta_renderer_native_get_gpu_data (renderer_native,
render_gpu);
@@ -2104,8 +2104,12 @@ meta_onscreen_native_class_init (MetaOnscreenNativeClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
CoglFramebufferClass *framebuffer_class = COGL_FRAMEBUFFER_CLASS (klass);
+ CoglOnscreenClass *onscreen_class = COGL_ONSCREEN_CLASS (klass);
object_class->dispose = meta_onscreen_native_dispose;
framebuffer_class->allocate = meta_onscreen_native_allocate;
+
+ onscreen_class->swap_buffers_with_damage =
+ meta_onscreen_native_swap_buffers_with_damage;
}
diff --git a/src/backends/native/meta-onscreen-native.h b/src/backends/native/meta-onscreen-native.h
index 92892d63dc..ef0849899a 100644
--- a/src/backends/native/meta-onscreen-native.h
+++ b/src/backends/native/meta-onscreen-native.h
@@ -35,12 +35,6 @@ G_DECLARE_FINAL_TYPE (MetaOnscreenNative, meta_onscreen_native,
void meta_renderer_native_release_onscreen (CoglOnscreen *onscreen);
-void meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen,
- const int *rectangles,
- int n_rectangles,
- CoglFrameInfo *frame_info,
- gpointer user_data);
-
gboolean meta_onscreen_native_direct_scanout (CoglOnscreen *onscreen,
CoglScanout *scanout,
CoglFrameInfo *frame_info,
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
index eda59a69cc..62f780e182 100644
--- a/src/backends/native/meta-renderer-native.c
+++ b/src/backends/native/meta-renderer-native.c
@@ -940,10 +940,6 @@ get_native_cogl_winsys_vtable (CoglRenderer *cogl_renderer)
vtable.renderer_disconnect = meta_renderer_native_disconnect;
vtable.renderer_create_dma_buf = meta_renderer_native_create_dma_buf;
- /* The KMS winsys doesn't support swap region */
- vtable.onscreen_swap_region = NULL;
- vtable.onscreen_swap_buffers_with_damage =
- meta_onscreen_native_swap_buffers_with_damage;
vtable.onscreen_direct_scanout = meta_onscreen_native_direct_scanout;
vtable.context_get_clock_time = meta_renderer_native_get_clock_time;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]