From 1a638b6fd6060cac4bc6f165d4544d76ea28e09f Mon Sep 17 00:00:00 2001 From: Robert Bragg Date: Mon, 23 Jan 2012 15:37:51 +0000 Subject: [PATCH] kms: Adds api to get at the kms file descriptor This adds a cogl_kms_renderer_get_kms_fd() function that lets developers access the kms file descriptor being used for controlling the kernel mode setting. Reviewed-by: Neil Roberts --- cogl/Makefile.am | 2 ++ cogl/cogl-kms-renderer.h | 51 +++++++++++++++++++++++++++++++ cogl/cogl.h | 3 ++ cogl/winsys/cogl-winsys-egl-kms.c | 15 +++++++++ 4 files changed, 71 insertions(+) create mode 100644 cogl/cogl-kms-renderer.h diff --git a/cogl/Makefile.am b/cogl/Makefile.am index 0c223b860..8cfe317dc 100644 --- a/cogl/Makefile.am +++ b/cogl/Makefile.am @@ -397,6 +397,8 @@ cogl_sources_c += \ $(srcdir)/winsys/cogl-winsys-egl-wayland-private.h endif if SUPPORT_EGL_PLATFORM_KMS +cogl_public_h += \ + $(srcdir)/cogl-kms-renderer.h cogl_sources_c += \ $(srcdir)/winsys/cogl-winsys-egl-kms.c \ $(srcdir)/winsys/cogl-winsys-egl-kms-private.h diff --git a/cogl/cogl-kms-renderer.h b/cogl/cogl-kms-renderer.h new file mode 100644 index 000000000..68d126ebf --- /dev/null +++ b/cogl/cogl-kms-renderer.h @@ -0,0 +1,51 @@ +/* + * Cogl + * + * An object oriented GL/GLES Abstraction/Utility Layer + * + * Copyright (C) 2011 Intel Corporation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#if !defined(__COGL_H_INSIDE__) && !defined(CLUTTER_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __COGL_KMS_RENDERER_H__ +#define __COGL_KMS_RENDERER_H__ + +#include +#include + +G_BEGIN_DECLS + +/** + * cogl_kms_renderer_get_kms_fd: + * @renderer: A #CoglRenderer + * + * Queries the file descriptor Cogl is using internally for + * communicating with the kms driver. + * + * Return value: The kms file descriptor or -1 if no kms file + * desriptor has been opened by Cogl. + * Stability: unstable + */ +int +cogl_kms_renderer_get_kms_fd (CoglRenderer *renderer); + +G_END_DECLS +#endif /* __COGL_KMS_RENDERER_H__ */ diff --git a/cogl/cogl.h b/cogl/cogl.h index 5a8691b25..ab46eeb05 100644 --- a/cogl/cogl.h +++ b/cogl/cogl.h @@ -98,6 +98,9 @@ typedef struct _CoglFramebuffer CoglFramebuffer; #include #include #include +#if defined (COGL_HAS_EGL_PLATFORM_KMS_SUPPORT) +#include +#endif #if defined (COGL_HAS_EGL_PLATFORM_WAYLAND_SUPPORT) #include #endif diff --git a/cogl/winsys/cogl-winsys-egl-kms.c b/cogl/winsys/cogl-winsys-egl-kms.c index ec1d02bd9..b39c45dd4 100644 --- a/cogl/winsys/cogl-winsys-egl-kms.c +++ b/cogl/winsys/cogl-winsys-egl-kms.c @@ -565,3 +565,18 @@ _cogl_winsys_egl_kms_get_vtable (void) return &vtable; } + +int +cogl_kms_renderer_get_kms_fd (CoglRenderer *renderer) +{ + _COGL_RETURN_VAL_IF_FAIL (cogl_is_renderer (renderer), -1); + + if (renderer->connected) + { + CoglRendererEGL *egl_renderer = renderer->winsys; + CoglRendererKMS *kms_renderer = egl_renderer->platform; + return kms_renderer->fd; + } + else + return -1; +}