mirror of
https://github.com/brl/mutter.git
synced 2024-11-26 01:50:42 -05:00
cogl: Move CoglOnscreen struct to C file
That means all sub types need to use helper methods, so make them do that too. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1514>
This commit is contained in:
parent
b55b26661f
commit
d0831cbbcd
@ -55,26 +55,6 @@ typedef struct _CoglOnscreenQueuedDirty
|
|||||||
CoglOnscreenDirtyInfo info;
|
CoglOnscreenDirtyInfo info;
|
||||||
} CoglOnscreenQueuedDirty;
|
} CoglOnscreenQueuedDirty;
|
||||||
|
|
||||||
struct _CoglOnscreen
|
|
||||||
{
|
|
||||||
CoglFramebuffer parent;
|
|
||||||
|
|
||||||
CoglList frame_closures;
|
|
||||||
|
|
||||||
gboolean resizable;
|
|
||||||
CoglList resize_closures;
|
|
||||||
|
|
||||||
CoglList dirty_closures;
|
|
||||||
|
|
||||||
int64_t frame_counter;
|
|
||||||
int64_t swap_frame_counter; /* frame counter at last all to
|
|
||||||
* cogl_onscreen_swap_region() or
|
|
||||||
* cogl_onscreen_swap_buffers() */
|
|
||||||
GQueue pending_frame_infos;
|
|
||||||
|
|
||||||
void *winsys;
|
|
||||||
};
|
|
||||||
|
|
||||||
COGL_EXPORT void
|
COGL_EXPORT void
|
||||||
_cogl_framebuffer_winsys_update_size (CoglFramebuffer *framebuffer,
|
_cogl_framebuffer_winsys_update_size (CoglFramebuffer *framebuffer,
|
||||||
int width, int height);
|
int width, int height);
|
||||||
@ -101,4 +81,20 @@ _cogl_onscreen_queue_dirty (CoglOnscreen *onscreen,
|
|||||||
void
|
void
|
||||||
_cogl_onscreen_queue_full_dirty (CoglOnscreen *onscreen);
|
_cogl_onscreen_queue_full_dirty (CoglOnscreen *onscreen);
|
||||||
|
|
||||||
|
COGL_EXPORT void
|
||||||
|
cogl_onscreen_set_winsys (CoglOnscreen *onscreen,
|
||||||
|
gpointer winsys);
|
||||||
|
|
||||||
|
COGL_EXPORT gpointer
|
||||||
|
cogl_onscreen_get_winsys (CoglOnscreen *onscreen);
|
||||||
|
|
||||||
|
COGL_EXPORT CoglFrameInfo *
|
||||||
|
cogl_onscreen_peek_head_frame_info (CoglOnscreen *onscreen);
|
||||||
|
|
||||||
|
COGL_EXPORT CoglFrameInfo *
|
||||||
|
cogl_onscreen_peek_tail_frame_info (CoglOnscreen *onscreen);
|
||||||
|
|
||||||
|
COGL_EXPORT CoglFrameInfo *
|
||||||
|
cogl_onscreen_pop_head_frame_info (CoglOnscreen *onscreen);
|
||||||
|
|
||||||
#endif /* __COGL_ONSCREEN_PRIVATE_H */
|
#endif /* __COGL_ONSCREEN_PRIVATE_H */
|
||||||
|
@ -42,6 +42,26 @@
|
|||||||
#include "cogl-poll-private.h"
|
#include "cogl-poll-private.h"
|
||||||
#include "cogl-gtype-private.h"
|
#include "cogl-gtype-private.h"
|
||||||
|
|
||||||
|
struct _CoglOnscreen
|
||||||
|
{
|
||||||
|
CoglFramebuffer parent;
|
||||||
|
|
||||||
|
CoglList frame_closures;
|
||||||
|
|
||||||
|
gboolean resizable;
|
||||||
|
CoglList resize_closures;
|
||||||
|
|
||||||
|
CoglList dirty_closures;
|
||||||
|
|
||||||
|
int64_t frame_counter;
|
||||||
|
int64_t swap_frame_counter; /* frame counter at last all to
|
||||||
|
* cogl_onscreen_swap_region() or
|
||||||
|
* cogl_onscreen_swap_buffers() */
|
||||||
|
GQueue pending_frame_infos;
|
||||||
|
|
||||||
|
void *winsys;
|
||||||
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE (CoglOnscreen, cogl_onscreen, COGL_TYPE_FRAMEBUFFER)
|
G_DEFINE_TYPE (CoglOnscreen, cogl_onscreen, COGL_TYPE_FRAMEBUFFER)
|
||||||
|
|
||||||
static gpointer
|
static gpointer
|
||||||
@ -465,6 +485,24 @@ cogl_onscreen_add_frame_info (CoglOnscreen *onscreen,
|
|||||||
g_queue_push_tail (&onscreen->pending_frame_infos, info);
|
g_queue_push_tail (&onscreen->pending_frame_infos, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CoglFrameInfo *
|
||||||
|
cogl_onscreen_peek_head_frame_info (CoglOnscreen *onscreen)
|
||||||
|
{
|
||||||
|
return g_queue_peek_head (&onscreen->pending_frame_infos);
|
||||||
|
}
|
||||||
|
|
||||||
|
CoglFrameInfo *
|
||||||
|
cogl_onscreen_peek_tail_frame_info (CoglOnscreen *onscreen)
|
||||||
|
{
|
||||||
|
return g_queue_peek_tail (&onscreen->pending_frame_infos);
|
||||||
|
}
|
||||||
|
|
||||||
|
CoglFrameInfo *
|
||||||
|
cogl_onscreen_pop_head_frame_info (CoglOnscreen *onscreen)
|
||||||
|
{
|
||||||
|
return g_queue_pop_head (&onscreen->pending_frame_infos);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef COGL_HAS_X11_SUPPORT
|
#ifdef COGL_HAS_X11_SUPPORT
|
||||||
uint32_t
|
uint32_t
|
||||||
cogl_x11_onscreen_get_window_xid (CoglOnscreen *onscreen)
|
cogl_x11_onscreen_get_window_xid (CoglOnscreen *onscreen)
|
||||||
@ -643,3 +681,16 @@ cogl_onscreen_get_frame_counter (CoglOnscreen *onscreen)
|
|||||||
{
|
{
|
||||||
return onscreen->frame_counter;
|
return onscreen->frame_counter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_onscreen_set_winsys (CoglOnscreen *onscreen,
|
||||||
|
gpointer winsys)
|
||||||
|
{
|
||||||
|
onscreen->winsys = winsys;
|
||||||
|
}
|
||||||
|
|
||||||
|
gpointer
|
||||||
|
cogl_onscreen_get_winsys (CoglOnscreen *onscreen)
|
||||||
|
{
|
||||||
|
return onscreen->winsys;
|
||||||
|
}
|
||||||
|
@ -84,7 +84,7 @@ find_onscreen_for_xid (CoglContext *context, uint32_t xid)
|
|||||||
if (!COGL_IS_ONSCREEN (framebuffer))
|
if (!COGL_IS_ONSCREEN (framebuffer))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
egl_onscreen = COGL_ONSCREEN (framebuffer)->winsys;
|
egl_onscreen = cogl_onscreen_get_winsys (COGL_ONSCREEN (framebuffer));
|
||||||
xlib_onscreen = egl_onscreen->platform;
|
xlib_onscreen = egl_onscreen->platform;
|
||||||
if (xlib_onscreen->xwin == (Window)xid)
|
if (xlib_onscreen->xwin == (Window)xid)
|
||||||
return COGL_ONSCREEN (framebuffer);
|
return COGL_ONSCREEN (framebuffer);
|
||||||
@ -102,7 +102,7 @@ flush_pending_resize_notifications_cb (void *data,
|
|||||||
if (COGL_IS_ONSCREEN (framebuffer))
|
if (COGL_IS_ONSCREEN (framebuffer))
|
||||||
{
|
{
|
||||||
CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
|
CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
|
||||||
CoglOnscreenEGL *egl_onscreen = onscreen->winsys;
|
CoglOnscreenEGL *egl_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
|
|
||||||
if (egl_onscreen->pending_resize_notify)
|
if (egl_onscreen->pending_resize_notify)
|
||||||
{
|
{
|
||||||
@ -144,7 +144,7 @@ notify_resize (CoglContext *context,
|
|||||||
if (!onscreen)
|
if (!onscreen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
egl_onscreen = onscreen->winsys;
|
egl_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
|
|
||||||
_cogl_framebuffer_winsys_update_size (framebuffer, width, height);
|
_cogl_framebuffer_winsys_update_size (framebuffer, width, height);
|
||||||
|
|
||||||
@ -420,7 +420,7 @@ _cogl_winsys_egl_onscreen_init (CoglOnscreen *onscreen,
|
|||||||
CoglXlibRenderer *xlib_renderer =
|
CoglXlibRenderer *xlib_renderer =
|
||||||
_cogl_xlib_renderer_get_data (renderer);
|
_cogl_xlib_renderer_get_data (renderer);
|
||||||
CoglOnscreenXlib *xlib_onscreen;
|
CoglOnscreenXlib *xlib_onscreen;
|
||||||
CoglOnscreenEGL *egl_onscreen = onscreen->winsys;
|
CoglOnscreenEGL *egl_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
Window xwin;
|
Window xwin;
|
||||||
|
|
||||||
/* FIXME: We need to explicitly Select for ConfigureNotify events.
|
/* FIXME: We need to explicitly Select for ConfigureNotify events.
|
||||||
@ -518,7 +518,7 @@ _cogl_winsys_egl_onscreen_deinit (CoglOnscreen *onscreen)
|
|||||||
CoglXlibRenderer *xlib_renderer =
|
CoglXlibRenderer *xlib_renderer =
|
||||||
_cogl_xlib_renderer_get_data (renderer);
|
_cogl_xlib_renderer_get_data (renderer);
|
||||||
CoglXlibTrapState old_state;
|
CoglXlibTrapState old_state;
|
||||||
CoglOnscreenEGL *egl_onscreen = onscreen->winsys;
|
CoglOnscreenEGL *egl_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
CoglOnscreenXlib *xlib_onscreen = egl_onscreen->platform;
|
CoglOnscreenXlib *xlib_onscreen = egl_onscreen->platform;
|
||||||
|
|
||||||
_cogl_xlib_renderer_trap_errors (renderer, &old_state);
|
_cogl_xlib_renderer_trap_errors (renderer, &old_state);
|
||||||
@ -549,7 +549,7 @@ _cogl_winsys_onscreen_set_visibility (CoglOnscreen *onscreen,
|
|||||||
CoglRenderer *renderer = context->display->renderer;
|
CoglRenderer *renderer = context->display->renderer;
|
||||||
CoglXlibRenderer *xlib_renderer =
|
CoglXlibRenderer *xlib_renderer =
|
||||||
_cogl_xlib_renderer_get_data (renderer);
|
_cogl_xlib_renderer_get_data (renderer);
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
CoglOnscreenXlib *xlib_onscreen = onscreen_egl->platform;
|
CoglOnscreenXlib *xlib_onscreen = onscreen_egl->platform;
|
||||||
|
|
||||||
if (visibility)
|
if (visibility)
|
||||||
@ -566,7 +566,7 @@ _cogl_winsys_onscreen_set_resizable (CoglOnscreen *onscreen,
|
|||||||
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
||||||
CoglXlibRenderer *xlib_renderer =
|
CoglXlibRenderer *xlib_renderer =
|
||||||
_cogl_xlib_renderer_get_data (context->display->renderer);
|
_cogl_xlib_renderer_get_data (context->display->renderer);
|
||||||
CoglOnscreenEGL *egl_onscreen = onscreen->winsys;
|
CoglOnscreenEGL *egl_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
CoglOnscreenXlib *xlib_onscreen = egl_onscreen->platform;
|
CoglOnscreenXlib *xlib_onscreen = egl_onscreen->platform;
|
||||||
|
|
||||||
XSizeHints *size_hints = XAllocSizeHints ();
|
XSizeHints *size_hints = XAllocSizeHints ();
|
||||||
@ -600,7 +600,7 @@ _cogl_winsys_onscreen_set_resizable (CoglOnscreen *onscreen,
|
|||||||
static uint32_t
|
static uint32_t
|
||||||
_cogl_winsys_onscreen_x11_get_window_xid (CoglOnscreen *onscreen)
|
_cogl_winsys_onscreen_x11_get_window_xid (CoglOnscreen *onscreen)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *egl_onscreen = onscreen->winsys;
|
CoglOnscreenEGL *egl_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
CoglOnscreenXlib *xlib_onscreen = egl_onscreen->platform;
|
CoglOnscreenXlib *xlib_onscreen = egl_onscreen->platform;
|
||||||
|
|
||||||
return xlib_onscreen->xwin;
|
return xlib_onscreen->xwin;
|
||||||
|
@ -599,6 +599,7 @@ _cogl_winsys_onscreen_init (CoglOnscreen *onscreen,
|
|||||||
EGLConfig egl_config;
|
EGLConfig egl_config;
|
||||||
EGLint config_count = 0;
|
EGLint config_count = 0;
|
||||||
EGLBoolean status;
|
EGLBoolean status;
|
||||||
|
CoglOnscreenEGL *winsys;
|
||||||
|
|
||||||
g_return_val_if_fail (egl_display->egl_context, FALSE);
|
g_return_val_if_fail (egl_display->egl_context, FALSE);
|
||||||
|
|
||||||
@ -629,14 +630,15 @@ _cogl_winsys_onscreen_init (CoglOnscreen *onscreen,
|
|||||||
cogl_framebuffer_update_samples_per_pixel (framebuffer, samples);
|
cogl_framebuffer_update_samples_per_pixel (framebuffer, samples);
|
||||||
}
|
}
|
||||||
|
|
||||||
onscreen->winsys = g_slice_new0 (CoglOnscreenEGL);
|
winsys = g_slice_new0 (CoglOnscreenEGL);
|
||||||
|
cogl_onscreen_set_winsys (onscreen, winsys);
|
||||||
|
|
||||||
if (egl_renderer->platform_vtable->onscreen_init &&
|
if (egl_renderer->platform_vtable->onscreen_init &&
|
||||||
!egl_renderer->platform_vtable->onscreen_init (onscreen,
|
!egl_renderer->platform_vtable->onscreen_init (onscreen,
|
||||||
egl_config,
|
egl_config,
|
||||||
error))
|
error))
|
||||||
{
|
{
|
||||||
g_slice_free (CoglOnscreenEGL, onscreen->winsys);
|
g_slice_free (CoglOnscreenEGL, winsys);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -651,7 +653,7 @@ _cogl_winsys_onscreen_deinit (CoglOnscreen *onscreen)
|
|||||||
CoglDisplayEGL *egl_display = context->display->winsys;
|
CoglDisplayEGL *egl_display = context->display->winsys;
|
||||||
CoglRenderer *renderer = context->display->renderer;
|
CoglRenderer *renderer = context->display->renderer;
|
||||||
CoglRendererEGL *egl_renderer = renderer->winsys;
|
CoglRendererEGL *egl_renderer = renderer->winsys;
|
||||||
CoglOnscreenEGL *egl_onscreen = onscreen->winsys;
|
CoglOnscreenEGL *egl_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
|
|
||||||
/* If we never successfully allocated then there's nothing to do */
|
/* If we never successfully allocated then there's nothing to do */
|
||||||
if (egl_onscreen == NULL)
|
if (egl_onscreen == NULL)
|
||||||
@ -683,8 +685,8 @@ _cogl_winsys_onscreen_deinit (CoglOnscreen *onscreen)
|
|||||||
if (egl_renderer->platform_vtable->onscreen_deinit)
|
if (egl_renderer->platform_vtable->onscreen_deinit)
|
||||||
egl_renderer->platform_vtable->onscreen_deinit (onscreen);
|
egl_renderer->platform_vtable->onscreen_deinit (onscreen);
|
||||||
|
|
||||||
g_slice_free (CoglOnscreenEGL, onscreen->winsys);
|
g_slice_free (CoglOnscreenEGL, cogl_onscreen_get_winsys (onscreen));
|
||||||
onscreen->winsys = NULL;
|
cogl_onscreen_set_winsys (onscreen, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -693,7 +695,7 @@ bind_onscreen_with_context (CoglOnscreen *onscreen,
|
|||||||
{
|
{
|
||||||
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
||||||
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
||||||
CoglOnscreenEGL *egl_onscreen = onscreen->winsys;
|
CoglOnscreenEGL *egl_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
|
|
||||||
gboolean status = _cogl_winsys_egl_make_current (context->display,
|
gboolean status = _cogl_winsys_egl_make_current (context->display,
|
||||||
egl_onscreen->egl_surface,
|
egl_onscreen->egl_surface,
|
||||||
@ -737,7 +739,7 @@ _cogl_winsys_onscreen_get_buffer_age (CoglOnscreen *onscreen)
|
|||||||
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
||||||
CoglRenderer *renderer = context->display->renderer;
|
CoglRenderer *renderer = context->display->renderer;
|
||||||
CoglRendererEGL *egl_renderer = renderer->winsys;
|
CoglRendererEGL *egl_renderer = renderer->winsys;
|
||||||
CoglOnscreenEGL *egl_onscreen = onscreen->winsys;
|
CoglOnscreenEGL *egl_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
CoglDisplayEGL *egl_display = context->display->winsys;
|
CoglDisplayEGL *egl_display = context->display->winsys;
|
||||||
EGLSurface surface = egl_onscreen->egl_surface;
|
EGLSurface surface = egl_onscreen->egl_surface;
|
||||||
static gboolean warned = FALSE;
|
static gboolean warned = FALSE;
|
||||||
@ -776,7 +778,7 @@ _cogl_winsys_onscreen_swap_region (CoglOnscreen *onscreen,
|
|||||||
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
||||||
CoglRenderer *renderer = context->display->renderer;
|
CoglRenderer *renderer = context->display->renderer;
|
||||||
CoglRendererEGL *egl_renderer = renderer->winsys;
|
CoglRendererEGL *egl_renderer = renderer->winsys;
|
||||||
CoglOnscreenEGL *egl_onscreen = onscreen->winsys;
|
CoglOnscreenEGL *egl_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
int framebuffer_height = cogl_framebuffer_get_height (framebuffer);
|
int framebuffer_height = cogl_framebuffer_get_height (framebuffer);
|
||||||
int *rectangles = g_alloca (sizeof (int) * n_rectangles * 4);
|
int *rectangles = g_alloca (sizeof (int) * n_rectangles * 4);
|
||||||
int i;
|
int i;
|
||||||
@ -817,7 +819,7 @@ _cogl_winsys_onscreen_swap_buffers_with_damage (CoglOnscreen *onscreen,
|
|||||||
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
||||||
CoglRenderer *renderer = context->display->renderer;
|
CoglRenderer *renderer = context->display->renderer;
|
||||||
CoglRendererEGL *egl_renderer = renderer->winsys;
|
CoglRendererEGL *egl_renderer = renderer->winsys;
|
||||||
CoglOnscreenEGL *egl_onscreen = onscreen->winsys;
|
CoglOnscreenEGL *egl_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
|
|
||||||
COGL_TRACE_BEGIN_SCOPED (CoglOnscreenEGLSwapBuffersWithDamage,
|
COGL_TRACE_BEGIN_SCOPED (CoglOnscreenEGLSwapBuffersWithDamage,
|
||||||
"Onscreen (eglSwapBuffers)");
|
"Onscreen (eglSwapBuffers)");
|
||||||
|
@ -182,7 +182,7 @@ find_onscreen_for_xid (CoglContext *context, uint32_t xid)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Does the GLXEvent have the GLXDrawable or the X Window? */
|
/* Does the GLXEvent have the GLXDrawable or the X Window? */
|
||||||
xlib_onscreen = COGL_ONSCREEN (framebuffer)->winsys;
|
xlib_onscreen = cogl_onscreen_get_winsys (COGL_ONSCREEN (framebuffer));
|
||||||
if (xlib_onscreen != NULL && xlib_onscreen->xwin == (Window)xid)
|
if (xlib_onscreen != NULL && xlib_onscreen->xwin == (Window)xid)
|
||||||
return COGL_ONSCREEN (framebuffer);
|
return COGL_ONSCREEN (framebuffer);
|
||||||
}
|
}
|
||||||
@ -334,7 +334,7 @@ flush_pending_notifications_cb (void *data,
|
|||||||
if (COGL_IS_ONSCREEN (framebuffer))
|
if (COGL_IS_ONSCREEN (framebuffer))
|
||||||
{
|
{
|
||||||
CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
|
CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
|
||||||
CoglOnscreenGLX *glx_onscreen = onscreen->winsys;
|
CoglOnscreenGLX *glx_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
|
|
||||||
while (glx_onscreen->pending_sync_notify > 0 ||
|
while (glx_onscreen->pending_sync_notify > 0 ||
|
||||||
glx_onscreen->pending_complete_notify > 0 ||
|
glx_onscreen->pending_complete_notify > 0 ||
|
||||||
@ -342,18 +342,18 @@ flush_pending_notifications_cb (void *data,
|
|||||||
{
|
{
|
||||||
if (glx_onscreen->pending_sync_notify > 0)
|
if (glx_onscreen->pending_sync_notify > 0)
|
||||||
{
|
{
|
||||||
CoglFrameInfo *info =
|
CoglFrameInfo *info;
|
||||||
g_queue_peek_head (&onscreen->pending_frame_infos);
|
|
||||||
|
|
||||||
|
info = cogl_onscreen_peek_head_frame_info (onscreen);
|
||||||
_cogl_onscreen_notify_frame_sync (onscreen, info);
|
_cogl_onscreen_notify_frame_sync (onscreen, info);
|
||||||
glx_onscreen->pending_sync_notify--;
|
glx_onscreen->pending_sync_notify--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (glx_onscreen->pending_complete_notify > 0)
|
if (glx_onscreen->pending_complete_notify > 0)
|
||||||
{
|
{
|
||||||
CoglFrameInfo *info =
|
CoglFrameInfo *info;
|
||||||
g_queue_pop_head (&onscreen->pending_frame_infos);
|
|
||||||
|
|
||||||
|
info = cogl_onscreen_pop_head_frame_info (onscreen);
|
||||||
_cogl_onscreen_notify_complete (onscreen, info);
|
_cogl_onscreen_notify_complete (onscreen, info);
|
||||||
cogl_object_unref (info);
|
cogl_object_unref (info);
|
||||||
glx_onscreen->pending_complete_notify--;
|
glx_onscreen->pending_complete_notify--;
|
||||||
@ -388,7 +388,7 @@ flush_pending_notifications_idle (void *user_data)
|
|||||||
static void
|
static void
|
||||||
set_sync_pending (CoglOnscreen *onscreen)
|
set_sync_pending (CoglOnscreen *onscreen)
|
||||||
{
|
{
|
||||||
CoglOnscreenGLX *glx_onscreen = onscreen->winsys;
|
CoglOnscreenGLX *glx_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
||||||
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
||||||
CoglRenderer *renderer = context->display->renderer;
|
CoglRenderer *renderer = context->display->renderer;
|
||||||
@ -412,7 +412,7 @@ set_sync_pending (CoglOnscreen *onscreen)
|
|||||||
static void
|
static void
|
||||||
set_complete_pending (CoglOnscreen *onscreen)
|
set_complete_pending (CoglOnscreen *onscreen)
|
||||||
{
|
{
|
||||||
CoglOnscreenGLX *glx_onscreen = onscreen->winsys;
|
CoglOnscreenGLX *glx_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
||||||
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
||||||
CoglRenderer *renderer = context->display->renderer;
|
CoglRenderer *renderer = context->display->renderer;
|
||||||
@ -441,7 +441,7 @@ notify_swap_buffers (CoglContext *context, GLXBufferSwapComplete *swap_event)
|
|||||||
|
|
||||||
if (!onscreen)
|
if (!onscreen)
|
||||||
return;
|
return;
|
||||||
glx_onscreen = onscreen->winsys;
|
glx_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
|
|
||||||
/* We only want to notify that the swap is complete when the
|
/* We only want to notify that the swap is complete when the
|
||||||
application calls cogl_context_dispatch so instead of immediately
|
application calls cogl_context_dispatch so instead of immediately
|
||||||
@ -450,7 +450,7 @@ notify_swap_buffers (CoglContext *context, GLXBufferSwapComplete *swap_event)
|
|||||||
|
|
||||||
if (swap_event->ust != 0)
|
if (swap_event->ust != 0)
|
||||||
{
|
{
|
||||||
CoglFrameInfo *info = g_queue_peek_head (&onscreen->pending_frame_infos);
|
CoglFrameInfo *info = cogl_onscreen_peek_head_frame_info (onscreen);
|
||||||
|
|
||||||
info->presentation_time =
|
info->presentation_time =
|
||||||
ust_to_nanoseconds (context->display->renderer,
|
ust_to_nanoseconds (context->display->renderer,
|
||||||
@ -464,7 +464,7 @@ notify_swap_buffers (CoglContext *context, GLXBufferSwapComplete *swap_event)
|
|||||||
static void
|
static void
|
||||||
update_output (CoglOnscreen *onscreen)
|
update_output (CoglOnscreen *onscreen)
|
||||||
{
|
{
|
||||||
CoglOnscreenXlib *xlib_onscreen = onscreen->winsys;
|
CoglOnscreenXlib *xlib_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
||||||
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
||||||
CoglDisplay *display = context->display;
|
CoglDisplay *display = context->display;
|
||||||
@ -504,8 +504,8 @@ notify_resize (CoglContext *context,
|
|||||||
if (!onscreen)
|
if (!onscreen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
glx_onscreen = onscreen->winsys;
|
glx_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
xlib_onscreen = onscreen->winsys;
|
xlib_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
|
|
||||||
_cogl_framebuffer_winsys_update_size (framebuffer,
|
_cogl_framebuffer_winsys_update_size (framebuffer,
|
||||||
configure_event->width,
|
configure_event->width,
|
||||||
@ -1249,6 +1249,7 @@ _cogl_winsys_onscreen_init (CoglOnscreen *onscreen,
|
|||||||
const CoglFramebufferConfig *config;
|
const CoglFramebufferConfig *config;
|
||||||
GLXFBConfig fbconfig;
|
GLXFBConfig fbconfig;
|
||||||
GError *fbconfig_error = NULL;
|
GError *fbconfig_error = NULL;
|
||||||
|
CoglOnscreenGLX *winsys;
|
||||||
|
|
||||||
g_return_val_if_fail (glx_display->glx_context, FALSE);
|
g_return_val_if_fail (glx_display->glx_context, FALSE);
|
||||||
|
|
||||||
@ -1347,9 +1348,10 @@ _cogl_winsys_onscreen_init (CoglOnscreen *onscreen,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onscreen->winsys = g_slice_new0 (CoglOnscreenGLX);
|
winsys = g_slice_new0 (CoglOnscreenGLX);
|
||||||
xlib_onscreen = onscreen->winsys;
|
cogl_onscreen_set_winsys (onscreen, winsys);
|
||||||
glx_onscreen = onscreen->winsys;
|
xlib_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
|
glx_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
|
|
||||||
xlib_onscreen->xwin = xwin;
|
xlib_onscreen->xwin = xwin;
|
||||||
|
|
||||||
@ -1395,8 +1397,8 @@ _cogl_winsys_onscreen_deinit (CoglOnscreen *onscreen)
|
|||||||
_cogl_xlib_renderer_get_data (context->display->renderer);
|
_cogl_xlib_renderer_get_data (context->display->renderer);
|
||||||
CoglGLXRenderer *glx_renderer = context->display->renderer->winsys;
|
CoglGLXRenderer *glx_renderer = context->display->renderer->winsys;
|
||||||
CoglXlibTrapState old_state;
|
CoglXlibTrapState old_state;
|
||||||
CoglOnscreenXlib *xlib_onscreen = onscreen->winsys;
|
CoglOnscreenXlib *xlib_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
CoglOnscreenGLX *glx_onscreen = onscreen->winsys;
|
CoglOnscreenGLX *glx_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
GLXDrawable drawable;
|
GLXDrawable drawable;
|
||||||
|
|
||||||
/* If we never successfully allocated then there's nothing to do */
|
/* If we never successfully allocated then there's nothing to do */
|
||||||
@ -1452,8 +1454,8 @@ _cogl_winsys_onscreen_deinit (CoglOnscreen *onscreen)
|
|||||||
|
|
||||||
_cogl_xlib_renderer_untrap_errors (context->display->renderer, &old_state);
|
_cogl_xlib_renderer_untrap_errors (context->display->renderer, &old_state);
|
||||||
|
|
||||||
g_slice_free (CoglOnscreenGLX, onscreen->winsys);
|
g_slice_free (CoglOnscreenGLX, cogl_onscreen_get_winsys (onscreen));
|
||||||
onscreen->winsys = NULL;
|
cogl_onscreen_set_winsys (onscreen, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1466,8 +1468,8 @@ _cogl_winsys_onscreen_bind (CoglOnscreen *onscreen)
|
|||||||
CoglXlibRenderer *xlib_renderer =
|
CoglXlibRenderer *xlib_renderer =
|
||||||
_cogl_xlib_renderer_get_data (context->display->renderer);
|
_cogl_xlib_renderer_get_data (context->display->renderer);
|
||||||
CoglGLXRenderer *glx_renderer = context->display->renderer->winsys;
|
CoglGLXRenderer *glx_renderer = context->display->renderer->winsys;
|
||||||
CoglOnscreenXlib *xlib_onscreen = onscreen->winsys;
|
CoglOnscreenXlib *xlib_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
CoglOnscreenGLX *glx_onscreen = onscreen->winsys;
|
CoglOnscreenGLX *glx_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
CoglXlibTrapState old_state;
|
CoglXlibTrapState old_state;
|
||||||
GLXDrawable drawable;
|
GLXDrawable drawable;
|
||||||
|
|
||||||
@ -1551,11 +1553,11 @@ _cogl_winsys_wait_for_vblank (CoglOnscreen *onscreen)
|
|||||||
|
|
||||||
if (glx_display->can_vblank_wait)
|
if (glx_display->can_vblank_wait)
|
||||||
{
|
{
|
||||||
CoglFrameInfo *info = g_queue_peek_tail (&onscreen->pending_frame_infos);
|
CoglFrameInfo *info = cogl_onscreen_peek_tail_frame_info (onscreen);
|
||||||
|
|
||||||
if (glx_renderer->glXWaitForMsc)
|
if (glx_renderer->glXWaitForMsc)
|
||||||
{
|
{
|
||||||
CoglOnscreenGLX *glx_onscreen = onscreen->winsys;
|
CoglOnscreenGLX *glx_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
Drawable drawable = glx_onscreen->glxwin;
|
Drawable drawable = glx_onscreen->glxwin;
|
||||||
int64_t ust;
|
int64_t ust;
|
||||||
int64_t msc;
|
int64_t msc;
|
||||||
@ -1606,8 +1608,8 @@ _cogl_winsys_onscreen_get_buffer_age (CoglOnscreen *onscreen)
|
|||||||
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
||||||
CoglXlibRenderer *xlib_renderer = _cogl_xlib_renderer_get_data (context->display->renderer);
|
CoglXlibRenderer *xlib_renderer = _cogl_xlib_renderer_get_data (context->display->renderer);
|
||||||
CoglGLXRenderer *glx_renderer = context->display->renderer->winsys;
|
CoglGLXRenderer *glx_renderer = context->display->renderer->winsys;
|
||||||
CoglOnscreenGLX *glx_onscreen = onscreen->winsys;
|
CoglOnscreenGLX *glx_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
CoglOnscreenXlib *xlib_onscreen = onscreen->winsys;
|
CoglOnscreenXlib *xlib_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
GLXDrawable drawable = glx_onscreen->glxwin ? glx_onscreen->glxwin : xlib_onscreen->xwin;
|
GLXDrawable drawable = glx_onscreen->glxwin ? glx_onscreen->glxwin : xlib_onscreen->xwin;
|
||||||
unsigned int age;
|
unsigned int age;
|
||||||
|
|
||||||
@ -1623,7 +1625,7 @@ static void
|
|||||||
set_frame_info_output (CoglOnscreen *onscreen,
|
set_frame_info_output (CoglOnscreen *onscreen,
|
||||||
CoglOutput *output)
|
CoglOutput *output)
|
||||||
{
|
{
|
||||||
CoglFrameInfo *info = g_queue_peek_tail (&onscreen->pending_frame_infos);
|
CoglFrameInfo *info = cogl_onscreen_peek_tail_frame_info (onscreen);
|
||||||
|
|
||||||
if (output)
|
if (output)
|
||||||
{
|
{
|
||||||
@ -1646,8 +1648,8 @@ _cogl_winsys_onscreen_swap_region (CoglOnscreen *onscreen,
|
|||||||
_cogl_xlib_renderer_get_data (context->display->renderer);
|
_cogl_xlib_renderer_get_data (context->display->renderer);
|
||||||
CoglGLXRenderer *glx_renderer = context->display->renderer->winsys;
|
CoglGLXRenderer *glx_renderer = context->display->renderer->winsys;
|
||||||
CoglGLXDisplay *glx_display = context->display->winsys;
|
CoglGLXDisplay *glx_display = context->display->winsys;
|
||||||
CoglOnscreenXlib *xlib_onscreen = onscreen->winsys;
|
CoglOnscreenXlib *xlib_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
CoglOnscreenGLX *glx_onscreen = onscreen->winsys;
|
CoglOnscreenGLX *glx_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
GLXDrawable drawable =
|
GLXDrawable drawable =
|
||||||
glx_onscreen->glxwin ? glx_onscreen->glxwin : xlib_onscreen->xwin;
|
glx_onscreen->glxwin ? glx_onscreen->glxwin : xlib_onscreen->xwin;
|
||||||
uint32_t end_frame_vsync_counter = 0;
|
uint32_t end_frame_vsync_counter = 0;
|
||||||
@ -1854,8 +1856,8 @@ _cogl_winsys_onscreen_swap_buffers_with_damage (CoglOnscreen *onscreen,
|
|||||||
_cogl_xlib_renderer_get_data (context->display->renderer);
|
_cogl_xlib_renderer_get_data (context->display->renderer);
|
||||||
CoglGLXRenderer *glx_renderer = context->display->renderer->winsys;
|
CoglGLXRenderer *glx_renderer = context->display->renderer->winsys;
|
||||||
CoglGLXDisplay *glx_display = context->display->winsys;
|
CoglGLXDisplay *glx_display = context->display->winsys;
|
||||||
CoglOnscreenXlib *xlib_onscreen = onscreen->winsys;
|
CoglOnscreenXlib *xlib_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
CoglOnscreenGLX *glx_onscreen = onscreen->winsys;
|
CoglOnscreenGLX *glx_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
gboolean have_counter;
|
gboolean have_counter;
|
||||||
GLXDrawable drawable;
|
GLXDrawable drawable;
|
||||||
|
|
||||||
@ -1923,7 +1925,7 @@ _cogl_winsys_onscreen_swap_buffers_with_damage (CoglOnscreen *onscreen,
|
|||||||
static uint32_t
|
static uint32_t
|
||||||
_cogl_winsys_onscreen_x11_get_window_xid (CoglOnscreen *onscreen)
|
_cogl_winsys_onscreen_x11_get_window_xid (CoglOnscreen *onscreen)
|
||||||
{
|
{
|
||||||
CoglOnscreenXlib *xlib_onscreen = onscreen->winsys;
|
CoglOnscreenXlib *xlib_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
return xlib_onscreen->xwin;
|
return xlib_onscreen->xwin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1935,7 +1937,7 @@ _cogl_winsys_onscreen_set_visibility (CoglOnscreen *onscreen,
|
|||||||
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
||||||
CoglXlibRenderer *xlib_renderer =
|
CoglXlibRenderer *xlib_renderer =
|
||||||
_cogl_xlib_renderer_get_data (context->display->renderer);
|
_cogl_xlib_renderer_get_data (context->display->renderer);
|
||||||
CoglOnscreenXlib *xlib_onscreen = onscreen->winsys;
|
CoglOnscreenXlib *xlib_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
|
|
||||||
if (visibility)
|
if (visibility)
|
||||||
XMapWindow (xlib_renderer->xdpy, xlib_onscreen->xwin);
|
XMapWindow (xlib_renderer->xdpy, xlib_onscreen->xwin);
|
||||||
@ -1951,7 +1953,7 @@ _cogl_winsys_onscreen_set_resizable (CoglOnscreen *onscreen,
|
|||||||
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
||||||
CoglXlibRenderer *xlib_renderer =
|
CoglXlibRenderer *xlib_renderer =
|
||||||
_cogl_xlib_renderer_get_data (context->display->renderer);
|
_cogl_xlib_renderer_get_data (context->display->renderer);
|
||||||
CoglOnscreenXlib *xlib_onscreen = onscreen->winsys;
|
CoglOnscreenXlib *xlib_onscreen = cogl_onscreen_get_winsys (onscreen);
|
||||||
|
|
||||||
XSizeHints *size_hints = XAllocSizeHints ();
|
XSizeHints *size_hints = XAllocSizeHints ();
|
||||||
|
|
||||||
|
@ -341,7 +341,7 @@ get_supported_egl_modifiers (CoglOnscreen *onscreen,
|
|||||||
MetaCrtcKms *crtc_kms,
|
MetaCrtcKms *crtc_kms,
|
||||||
uint32_t format)
|
uint32_t format)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaRendererNative *renderer_native = onscreen_native->renderer_native;
|
MetaRendererNative *renderer_native = onscreen_native->renderer_native;
|
||||||
MetaEgl *egl = meta_onscreen_native_get_egl (onscreen_native);
|
MetaEgl *egl = meta_onscreen_native_get_egl (onscreen_native);
|
||||||
@ -389,7 +389,7 @@ static GArray *
|
|||||||
get_supported_modifiers (CoglOnscreen *onscreen,
|
get_supported_modifiers (CoglOnscreen *onscreen,
|
||||||
uint32_t format)
|
uint32_t format)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaCrtcKms *crtc_kms = META_CRTC_KMS (onscreen_native->crtc);
|
MetaCrtcKms *crtc_kms = META_CRTC_KMS (onscreen_native->crtc);
|
||||||
MetaGpu *gpu;
|
MetaGpu *gpu;
|
||||||
@ -407,7 +407,7 @@ get_supported_modifiers (CoglOnscreen *onscreen,
|
|||||||
static GArray *
|
static GArray *
|
||||||
get_supported_kms_formats (CoglOnscreen *onscreen)
|
get_supported_kms_formats (CoglOnscreen *onscreen)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaCrtcKms *crtc_kms = META_CRTC_KMS (onscreen_native->crtc);
|
MetaCrtcKms *crtc_kms = META_CRTC_KMS (onscreen_native->crtc);
|
||||||
|
|
||||||
@ -442,7 +442,7 @@ init_secondary_gpu_state_gpu_copy_mode (MetaRendererNative *renderer_nat
|
|||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaEgl *egl = meta_onscreen_native_get_egl (onscreen_native);
|
MetaEgl *egl = meta_onscreen_native_get_egl (onscreen_native);
|
||||||
int width, height;
|
int width, height;
|
||||||
@ -600,7 +600,7 @@ init_secondary_gpu_state_cpu_copy_mode (MetaRendererNative *renderer_nat
|
|||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state;
|
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state;
|
||||||
MetaGpuKms *gpu_kms;
|
MetaGpuKms *gpu_kms;
|
||||||
@ -665,7 +665,7 @@ init_secondary_gpu_state (MetaRendererNative *renderer_native,
|
|||||||
CoglOnscreen *onscreen,
|
CoglOnscreen *onscreen,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaGpu *gpu = meta_crtc_get_gpu (onscreen_native->crtc);
|
MetaGpu *gpu = meta_crtc_get_gpu (onscreen_native->crtc);
|
||||||
MetaRendererNativeGpuData *renderer_gpu_data;
|
MetaRendererNativeGpuData *renderer_gpu_data;
|
||||||
@ -712,7 +712,7 @@ meta_renderer_native_disconnect (CoglRenderer *cogl_renderer)
|
|||||||
static void
|
static void
|
||||||
free_current_secondary_bo (CoglOnscreen *onscreen)
|
free_current_secondary_bo (CoglOnscreen *onscreen)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state;
|
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state;
|
||||||
|
|
||||||
@ -726,7 +726,7 @@ free_current_secondary_bo (CoglOnscreen *onscreen)
|
|||||||
static void
|
static void
|
||||||
free_current_bo (CoglOnscreen *onscreen)
|
free_current_bo (CoglOnscreen *onscreen)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
|
|
||||||
g_clear_object (&onscreen_native->gbm.current_fb);
|
g_clear_object (&onscreen_native->gbm.current_fb);
|
||||||
@ -738,9 +738,10 @@ meta_onscreen_native_notify_frame_complete (CoglOnscreen *onscreen)
|
|||||||
{
|
{
|
||||||
CoglFrameInfo *info;
|
CoglFrameInfo *info;
|
||||||
|
|
||||||
g_assert (onscreen->pending_frame_infos.length == 1);
|
info = cogl_onscreen_pop_head_frame_info (onscreen);
|
||||||
|
|
||||||
|
g_assert (!cogl_onscreen_peek_head_frame_info (onscreen));
|
||||||
|
|
||||||
info = g_queue_pop_head (&onscreen->pending_frame_infos);
|
|
||||||
_cogl_onscreen_notify_frame_sync (onscreen, info);
|
_cogl_onscreen_notify_frame_sync (onscreen, info);
|
||||||
_cogl_onscreen_notify_complete (onscreen, info);
|
_cogl_onscreen_notify_complete (onscreen, info);
|
||||||
cogl_object_unref (info);
|
cogl_object_unref (info);
|
||||||
@ -993,7 +994,7 @@ meta_renderer_native_egl_cleanup_context (CoglDisplay *cogl_display)
|
|||||||
static void
|
static void
|
||||||
swap_secondary_drm_fb (CoglOnscreen *onscreen)
|
swap_secondary_drm_fb (CoglOnscreen *onscreen)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state;
|
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state;
|
||||||
|
|
||||||
@ -1009,7 +1010,7 @@ swap_secondary_drm_fb (CoglOnscreen *onscreen)
|
|||||||
static void
|
static void
|
||||||
meta_onscreen_native_swap_drm_fb (CoglOnscreen *onscreen)
|
meta_onscreen_native_swap_drm_fb (CoglOnscreen *onscreen)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
|
|
||||||
if (!onscreen_native->gbm.next_fb)
|
if (!onscreen_native->gbm.next_fb)
|
||||||
@ -1056,14 +1057,14 @@ notify_view_crtc_presented (MetaRendererView *view,
|
|||||||
CoglFramebuffer *framebuffer =
|
CoglFramebuffer *framebuffer =
|
||||||
clutter_stage_view_get_onscreen (stage_view);
|
clutter_stage_view_get_onscreen (stage_view);
|
||||||
CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
|
CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaRendererNative *renderer_native = onscreen_native->renderer_native;
|
MetaRendererNative *renderer_native = onscreen_native->renderer_native;
|
||||||
CoglFrameInfo *frame_info;
|
CoglFrameInfo *frame_info;
|
||||||
MetaCrtc *crtc;
|
MetaCrtc *crtc;
|
||||||
MetaRendererNativeGpuData *renderer_gpu_data;
|
MetaRendererNativeGpuData *renderer_gpu_data;
|
||||||
|
|
||||||
frame_info = g_queue_peek_tail (&onscreen->pending_frame_infos);
|
frame_info = cogl_onscreen_peek_head_frame_info (onscreen);
|
||||||
|
|
||||||
crtc = META_CRTC (meta_crtc_kms_from_kms_crtc (kms_crtc));
|
crtc = META_CRTC (meta_crtc_kms_from_kms_crtc (kms_crtc));
|
||||||
maybe_update_frame_info (crtc, frame_info, time_ns);
|
maybe_update_frame_info (crtc, frame_info, time_ns);
|
||||||
@ -1123,7 +1124,7 @@ page_flip_feedback_ready (MetaKmsCrtc *kms_crtc,
|
|||||||
CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
|
CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
|
||||||
CoglFrameInfo *frame_info;
|
CoglFrameInfo *frame_info;
|
||||||
|
|
||||||
frame_info = g_queue_peek_tail (&onscreen->pending_frame_infos);
|
frame_info = cogl_onscreen_peek_head_frame_info (onscreen);
|
||||||
frame_info->flags |= COGL_FRAME_INFO_FLAG_SYMBOLIC;
|
frame_info->flags |= COGL_FRAME_INFO_FLAG_SYMBOLIC;
|
||||||
|
|
||||||
meta_onscreen_native_notify_frame_complete (onscreen);
|
meta_onscreen_native_notify_frame_complete (onscreen);
|
||||||
@ -1232,7 +1233,7 @@ dummy_power_save_page_flip (CoglOnscreen *onscreen)
|
|||||||
|
|
||||||
meta_onscreen_native_swap_drm_fb (onscreen);
|
meta_onscreen_native_swap_drm_fb (onscreen);
|
||||||
|
|
||||||
frame_info = g_queue_peek_tail (&onscreen->pending_frame_infos);
|
frame_info = cogl_onscreen_peek_tail_frame_info (onscreen);
|
||||||
frame_info->flags |= COGL_FRAME_INFO_FLAG_SYMBOLIC;
|
frame_info->flags |= COGL_FRAME_INFO_FLAG_SYMBOLIC;
|
||||||
meta_onscreen_native_notify_frame_complete (onscreen);
|
meta_onscreen_native_notify_frame_complete (onscreen);
|
||||||
}
|
}
|
||||||
@ -1255,7 +1256,7 @@ dummy_power_save_page_flip_cb (gpointer user_data)
|
|||||||
static void
|
static void
|
||||||
queue_dummy_power_save_page_flip (CoglOnscreen *onscreen)
|
queue_dummy_power_save_page_flip (CoglOnscreen *onscreen)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaRendererNative *renderer_native = onscreen_native->renderer_native;
|
MetaRendererNative *renderer_native = onscreen_native->renderer_native;
|
||||||
const unsigned int timeout_ms = 100;
|
const unsigned int timeout_ms = 100;
|
||||||
@ -1279,7 +1280,7 @@ meta_onscreen_native_flip_crtc (CoglOnscreen *onscreen,
|
|||||||
MetaCrtc *crtc,
|
MetaCrtc *crtc,
|
||||||
MetaKmsPageFlipListenerFlag flags)
|
MetaKmsPageFlipListenerFlag flags)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaRendererNative *renderer_native = onscreen_native->renderer_native;
|
MetaRendererNative *renderer_native = onscreen_native->renderer_native;
|
||||||
MetaGpuKms *render_gpu = onscreen_native->render_gpu;
|
MetaGpuKms *render_gpu = onscreen_native->render_gpu;
|
||||||
@ -1342,7 +1343,7 @@ static void
|
|||||||
meta_onscreen_native_set_crtc_mode (CoglOnscreen *onscreen,
|
meta_onscreen_native_set_crtc_mode (CoglOnscreen *onscreen,
|
||||||
MetaRendererNativeGpuData *renderer_gpu_data)
|
MetaRendererNativeGpuData *renderer_gpu_data)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaCrtcKms *crtc_kms = META_CRTC_KMS (onscreen_native->crtc);
|
MetaCrtcKms *crtc_kms = META_CRTC_KMS (onscreen_native->crtc);
|
||||||
MetaKmsCrtc *kms_crtc = meta_crtc_kms_get_kms_crtc (crtc_kms);
|
MetaKmsCrtc *kms_crtc = meta_crtc_kms_get_kms_crtc (crtc_kms);
|
||||||
@ -1380,7 +1381,7 @@ static gboolean
|
|||||||
import_shared_framebuffer (CoglOnscreen *onscreen,
|
import_shared_framebuffer (CoglOnscreen *onscreen,
|
||||||
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state)
|
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaGpuKms *gpu_kms;
|
MetaGpuKms *gpu_kms;
|
||||||
MetaKmsDevice *kms_device;
|
MetaKmsDevice *kms_device;
|
||||||
@ -1456,7 +1457,7 @@ copy_shared_framebuffer_gpu (CoglOnscreen *onscreen,
|
|||||||
MetaRendererNativeGpuData *renderer_gpu_data,
|
MetaRendererNativeGpuData *renderer_gpu_data,
|
||||||
gboolean *egl_context_changed)
|
gboolean *egl_context_changed)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaRendererNative *renderer_native = renderer_gpu_data->renderer_native;
|
MetaRendererNative *renderer_native = renderer_gpu_data->renderer_native;
|
||||||
MetaEgl *egl = meta_renderer_native_get_egl (renderer_native);
|
MetaEgl *egl = meta_renderer_native_get_egl (renderer_native);
|
||||||
@ -1630,7 +1631,7 @@ copy_shared_framebuffer_primary_gpu (CoglOnscreen *onscre
|
|||||||
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state)
|
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state)
|
||||||
{
|
{
|
||||||
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaRendererNative *renderer_native = onscreen_native->renderer_native;
|
MetaRendererNative *renderer_native = onscreen_native->renderer_native;
|
||||||
MetaRendererNativeGpuData *primary_gpu_data;
|
MetaRendererNativeGpuData *primary_gpu_data;
|
||||||
@ -1770,7 +1771,7 @@ copy_shared_framebuffer_cpu (CoglOnscreen *onscreen,
|
|||||||
static void
|
static void
|
||||||
update_secondary_gpu_state_pre_swap_buffers (CoglOnscreen *onscreen)
|
update_secondary_gpu_state_pre_swap_buffers (CoglOnscreen *onscreen)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state;
|
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state;
|
||||||
|
|
||||||
@ -1825,7 +1826,7 @@ static void
|
|||||||
update_secondary_gpu_state_post_swap_buffers (CoglOnscreen *onscreen,
|
update_secondary_gpu_state_post_swap_buffers (CoglOnscreen *onscreen,
|
||||||
gboolean *egl_context_changed)
|
gboolean *egl_context_changed)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaRendererNative *renderer_native = onscreen_native->renderer_native;
|
MetaRendererNative *renderer_native = onscreen_native->renderer_native;
|
||||||
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state;
|
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state;
|
||||||
@ -1865,7 +1866,7 @@ retry:
|
|||||||
static void
|
static void
|
||||||
ensure_crtc_modes (CoglOnscreen *onscreen)
|
ensure_crtc_modes (CoglOnscreen *onscreen)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
||||||
CoglContext *cogl_context = cogl_framebuffer_get_context (framebuffer);
|
CoglContext *cogl_context = cogl_framebuffer_get_context (framebuffer);
|
||||||
@ -1897,7 +1898,7 @@ kms_device_from_view (MetaRendererView *view)
|
|||||||
CoglFramebuffer *framebuffer =
|
CoglFramebuffer *framebuffer =
|
||||||
clutter_stage_view_get_onscreen (CLUTTER_STAGE_VIEW (view));
|
clutter_stage_view_get_onscreen (CLUTTER_STAGE_VIEW (view));
|
||||||
CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
|
CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaCrtcKms *crtc_kms = META_CRTC_KMS (onscreen_native->crtc);
|
MetaCrtcKms *crtc_kms = META_CRTC_KMS (onscreen_native->crtc);
|
||||||
MetaKmsCrtc *kms_crtc = meta_crtc_kms_get_kms_crtc (crtc_kms);
|
MetaKmsCrtc *kms_crtc = meta_crtc_kms_get_kms_crtc (crtc_kms);
|
||||||
@ -1911,7 +1912,7 @@ gpu_from_view (MetaRendererView *view)
|
|||||||
CoglFramebuffer *framebuffer =
|
CoglFramebuffer *framebuffer =
|
||||||
clutter_stage_view_get_onscreen (CLUTTER_STAGE_VIEW (view));
|
clutter_stage_view_get_onscreen (CLUTTER_STAGE_VIEW (view));
|
||||||
CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
|
CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
|
|
||||||
return meta_crtc_get_gpu (onscreen_native->crtc);
|
return meta_crtc_get_gpu (onscreen_native->crtc);
|
||||||
@ -2063,7 +2064,7 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen,
|
|||||||
MetaMonitorManager *monitor_manager =
|
MetaMonitorManager *monitor_manager =
|
||||||
meta_backend_get_monitor_manager (backend);
|
meta_backend_get_monitor_manager (backend);
|
||||||
MetaKms *kms = meta_backend_native_get_kms (backend_native);
|
MetaKms *kms = meta_backend_native_get_kms (backend_native);
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaGpuKms *render_gpu = onscreen_native->render_gpu;
|
MetaGpuKms *render_gpu = onscreen_native->render_gpu;
|
||||||
MetaKmsDevice *render_kms_device = meta_gpu_kms_get_kms_device (render_gpu);
|
MetaKmsDevice *render_kms_device = meta_gpu_kms_get_kms_device (render_gpu);
|
||||||
@ -2303,7 +2304,7 @@ meta_onscreen_native_is_buffer_scanout_compatible (CoglOnscreen *onscreen,
|
|||||||
uint64_t drm_modifier,
|
uint64_t drm_modifier,
|
||||||
uint32_t stride)
|
uint32_t stride)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
const MetaCrtcConfig *crtc_config;
|
const MetaCrtcConfig *crtc_config;
|
||||||
MetaDrmBuffer *fb;
|
MetaDrmBuffer *fb;
|
||||||
@ -2348,7 +2349,7 @@ meta_onscreen_native_direct_scanout (CoglOnscreen *onscreen,
|
|||||||
gpointer user_data,
|
gpointer user_data,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaGpuKms *render_gpu = onscreen_native->render_gpu;
|
MetaGpuKms *render_gpu = onscreen_native->render_gpu;
|
||||||
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
||||||
@ -2467,7 +2468,7 @@ meta_renderer_native_init_egl_context (CoglContext *cogl_context,
|
|||||||
static gboolean
|
static gboolean
|
||||||
should_surface_be_sharable (CoglOnscreen *onscreen)
|
should_surface_be_sharable (CoglOnscreen *onscreen)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
|
|
||||||
if (META_GPU_KMS (meta_crtc_get_gpu (onscreen_native->crtc)) ==
|
if (META_GPU_KMS (meta_crtc_get_gpu (onscreen_native->crtc)) ==
|
||||||
@ -2485,7 +2486,7 @@ meta_renderer_native_create_surface_gbm (CoglOnscreen *onscreen,
|
|||||||
EGLSurface *egl_surface,
|
EGLSurface *egl_surface,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaRendererNative *renderer_native = onscreen_native->renderer_native;
|
MetaRendererNative *renderer_native = onscreen_native->renderer_native;
|
||||||
MetaEgl *egl = meta_onscreen_native_get_egl (onscreen_native);
|
MetaEgl *egl = meta_onscreen_native_get_egl (onscreen_native);
|
||||||
@ -2576,7 +2577,7 @@ meta_renderer_native_create_surface_egl_device (CoglOnscreen *onscreen,
|
|||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
CoglContext *cogl_context = cogl_framebuffer_get_context (framebuffer);
|
CoglContext *cogl_context = cogl_framebuffer_get_context (framebuffer);
|
||||||
CoglDisplay *cogl_display = cogl_context->display;
|
CoglDisplay *cogl_display = cogl_context->display;
|
||||||
@ -2671,8 +2672,8 @@ meta_renderer_native_init_onscreen (CoglOnscreen *onscreen,
|
|||||||
|
|
||||||
g_return_val_if_fail (cogl_display_egl->egl_context, FALSE);
|
g_return_val_if_fail (cogl_display_egl->egl_context, FALSE);
|
||||||
|
|
||||||
onscreen->winsys = g_slice_new0 (CoglOnscreenEGL);
|
onscreen_egl = g_slice_new0 (CoglOnscreenEGL);
|
||||||
onscreen_egl = onscreen->winsys;
|
cogl_onscreen_set_winsys (onscreen, onscreen_egl);
|
||||||
|
|
||||||
onscreen_native = g_slice_new0 (MetaOnscreenNative);
|
onscreen_native = g_slice_new0 (MetaOnscreenNative);
|
||||||
onscreen_egl->platform = onscreen_native;
|
onscreen_egl->platform = onscreen_native;
|
||||||
@ -2695,7 +2696,7 @@ meta_onscreen_native_allocate (CoglOnscreen *onscreen,
|
|||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
MetaOnscreenNative *onscreen_native = onscreen_egl->platform;
|
||||||
MetaRendererNativeGpuData *renderer_gpu_data;
|
MetaRendererNativeGpuData *renderer_gpu_data;
|
||||||
struct gbm_surface *gbm_surface;
|
struct gbm_surface *gbm_surface;
|
||||||
@ -2764,7 +2765,7 @@ meta_onscreen_native_allocate (CoglOnscreen *onscreen,
|
|||||||
static void
|
static void
|
||||||
destroy_egl_surface (CoglOnscreen *onscreen)
|
destroy_egl_surface (CoglOnscreen *onscreen)
|
||||||
{
|
{
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
|
|
||||||
if (onscreen_egl->egl_surface != EGL_NO_SURFACE)
|
if (onscreen_egl->egl_surface != EGL_NO_SURFACE)
|
||||||
{
|
{
|
||||||
@ -2790,7 +2791,7 @@ meta_renderer_native_release_onscreen (CoglOnscreen *onscreen)
|
|||||||
CoglContext *cogl_context = cogl_framebuffer_get_context (framebuffer);
|
CoglContext *cogl_context = cogl_framebuffer_get_context (framebuffer);
|
||||||
CoglDisplay *cogl_display = cogl_context_get_display (cogl_context);
|
CoglDisplay *cogl_display = cogl_context_get_display (cogl_context);
|
||||||
CoglDisplayEGL *cogl_display_egl = cogl_display->winsys;
|
CoglDisplayEGL *cogl_display_egl = cogl_display->winsys;
|
||||||
CoglOnscreenEGL *onscreen_egl = onscreen->winsys;
|
CoglOnscreenEGL *onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
MetaOnscreenNative *onscreen_native;
|
MetaOnscreenNative *onscreen_native;
|
||||||
MetaRendererNative *renderer_native;
|
MetaRendererNative *renderer_native;
|
||||||
MetaRendererNativeGpuData *renderer_gpu_data;
|
MetaRendererNativeGpuData *renderer_gpu_data;
|
||||||
@ -2859,8 +2860,8 @@ meta_renderer_native_release_onscreen (CoglOnscreen *onscreen)
|
|||||||
secondary_gpu_state_free);
|
secondary_gpu_state_free);
|
||||||
|
|
||||||
g_slice_free (MetaOnscreenNative, onscreen_native);
|
g_slice_free (MetaOnscreenNative, onscreen_native);
|
||||||
g_slice_free (CoglOnscreenEGL, onscreen->winsys);
|
g_slice_free (CoglOnscreenEGL, cogl_onscreen_get_winsys (onscreen));
|
||||||
onscreen->winsys = NULL;
|
cogl_onscreen_set_winsys (onscreen, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const CoglWinsysEGLVtable
|
static const CoglWinsysEGLVtable
|
||||||
@ -2912,7 +2913,7 @@ meta_renderer_native_create_onscreen (MetaRendererNative *renderer_native,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
onscreen_egl = onscreen->winsys;
|
onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
onscreen_native = onscreen_egl->platform;
|
onscreen_native = onscreen_egl->platform;
|
||||||
onscreen_native->renderer_native = renderer_native;
|
onscreen_native->renderer_native = renderer_native;
|
||||||
onscreen_native->render_gpu = render_gpu;
|
onscreen_native->render_gpu = render_gpu;
|
||||||
@ -3036,7 +3037,7 @@ meta_onscreen_native_set_view (CoglOnscreen *onscreen,
|
|||||||
CoglOnscreenEGL *onscreen_egl;
|
CoglOnscreenEGL *onscreen_egl;
|
||||||
MetaOnscreenNative *onscreen_native;
|
MetaOnscreenNative *onscreen_native;
|
||||||
|
|
||||||
onscreen_egl = onscreen->winsys;
|
onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
onscreen_native = onscreen_egl->platform;
|
onscreen_native = onscreen_egl->platform;
|
||||||
onscreen_native->view = view;
|
onscreen_native->view = view;
|
||||||
}
|
}
|
||||||
@ -3209,7 +3210,7 @@ meta_renderer_native_create_view (MetaRenderer *renderer,
|
|||||||
g_object_unref (onscreen);
|
g_object_unref (onscreen);
|
||||||
|
|
||||||
/* Ensure we don't point to stale surfaces when creating the offscreen */
|
/* Ensure we don't point to stale surfaces when creating the offscreen */
|
||||||
onscreen_egl = onscreen->winsys;
|
onscreen_egl = cogl_onscreen_get_winsys (onscreen);
|
||||||
cogl_display_egl = cogl_display->winsys;
|
cogl_display_egl = cogl_display->winsys;
|
||||||
_cogl_winsys_egl_make_current (cogl_display,
|
_cogl_winsys_egl_make_current (cogl_display,
|
||||||
onscreen_egl->egl_surface,
|
onscreen_egl->egl_surface,
|
||||||
|
Loading…
Reference in New Issue
Block a user