mali-fbdev support / debian package changes
* mali-fbdev support from https://github.com/mihailescu2m/libsdl2-2.0.2-dfsg1 with changes for newer SDL
This commit is contained in:
parent
3de856fc76
commit
b5e5778aab
16 changed files with 620 additions and 11 deletions
|
@ -339,6 +339,7 @@ set_option(VIDEO_COCOA "Use Cocoa video driver" ${APPLE})
|
|||
set_option(DIRECTX "Use DirectX for Windows audio/video" ${WINDOWS})
|
||||
set_option(WASAPI "Use the Windows WASAPI audio driver" ${WINDOWS})
|
||||
set_option(RENDER_D3D "Enable the Direct3D render driver" ${WINDOWS})
|
||||
set_option(VIDEO_MALI "Use Mali EGL video driver" ${UNIX_SYS})
|
||||
set_option(VIDEO_VIVANTE "Use Vivante EGL video driver" ${UNIX_SYS})
|
||||
dep_option(VIDEO_VULKAN "Enable Vulkan support" ON "ANDROID OR APPLE OR LINUX OR WINDOWS" OFF)
|
||||
set_option(VIDEO_KMSDRM "Use KMS DRM video driver" ${UNIX_SYS})
|
||||
|
@ -1004,6 +1005,7 @@ elseif(UNIX AND NOT APPLE AND NOT ANDROID)
|
|||
CheckWayland()
|
||||
CheckVivante()
|
||||
CheckKMSDRM()
|
||||
CheckMali()
|
||||
endif()
|
||||
|
||||
if(UNIX)
|
||||
|
|
|
@ -778,6 +778,29 @@ macro(CheckVivante)
|
|||
endif(VIDEO_VIVANTE)
|
||||
endmacro(CheckVivante)
|
||||
|
||||
# Requires:
|
||||
# - n/a
|
||||
macro(CheckMali)
|
||||
if(VIDEO_MALI)
|
||||
check_c_source_compiles("
|
||||
#define LINUX
|
||||
#define EGL_API_FB
|
||||
#include <EGL/egl.h>
|
||||
int main(int argc, char** argv) {}" HAVE_VIDEO_MALI_EGL_FB)
|
||||
if(HAVE_VIDEO_MALI_EGL_FB)
|
||||
set(HAVE_VIDEO_MALI TRUE)
|
||||
set(HAVE_SDL_VIDEO TRUE)
|
||||
|
||||
file(GLOB MALI_SOURCES ${SDL2_SOURCE_DIR}/src/video/mali-fbdev/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${MALI_SOURCES})
|
||||
set(SDL_VIDEO_DRIVER_MALI 1)
|
||||
set(SDL_CFLAGS "${SDL_CFLAGS} -DLINUX -DEGL_API_FB")
|
||||
list(APPEND EXTRA_LIBS EGL)
|
||||
endif(HAVE_VIDEO_MALI_EGL_MALI)
|
||||
endif(VIDEO_MALI)
|
||||
endmacro(CheckMali)
|
||||
|
||||
|
||||
# Requires:
|
||||
# - nada
|
||||
macro(CheckOpenGLX11)
|
||||
|
|
53
configure
vendored
53
configure
vendored
|
@ -846,6 +846,7 @@ enable_video_x11_scrnsaver
|
|||
enable_video_x11_xshape
|
||||
enable_video_x11_vm
|
||||
enable_video_vivante
|
||||
enable_video_mali
|
||||
enable_video_cocoa
|
||||
enable_render_metal
|
||||
enable_video_directfb
|
||||
|
@ -1598,6 +1599,7 @@ Optional Features:
|
|||
enable X11 XShape support [[default=yes]]
|
||||
--enable-video-x11-vm use X11 VM extension for fullscreen [[default=yes]]
|
||||
--enable-video-vivante use Vivante EGL video driver [[default=yes]]
|
||||
--enable-video-mali use Mali EGL video driver [[default=yes]]
|
||||
--enable-video-cocoa use Cocoa video driver [[default=yes]]
|
||||
--enable-render-metal enable the Metal render driver [[default=yes]]
|
||||
--enable-video-directfb use DirectFB video driver [[default=no]]
|
||||
|
@ -21229,6 +21231,56 @@ $as_echo "#define SDL_VIDEO_DRIVER_VIVANTE_VDK 1" >>confdefs.h
|
|||
fi
|
||||
}
|
||||
|
||||
CheckMaliVideo()
|
||||
{
|
||||
# Check whether --enable-video-mali was given.
|
||||
if test "${enable_video_mali+set}" = set; then :
|
||||
enableval=$enable_video_mali;
|
||||
else
|
||||
enable_video_mali=yes
|
||||
fi
|
||||
|
||||
if test x$enable_video = xyes -a x$enable_video_mali = xyes; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Mali FB API" >&5
|
||||
$as_echo_n "checking for Mali FB API... " >&6; }
|
||||
have_mali_egl=no
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
#define LINUX
|
||||
#define EGL_API_FB
|
||||
#include <EGL/egl.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_compile "$LINENO"; then :
|
||||
|
||||
have_mali_egl=yes
|
||||
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_mali_egl" >&5
|
||||
$as_echo "$have_mali_egl" >&6; }
|
||||
|
||||
if test x$have_mali_egl = xyes; then
|
||||
|
||||
$as_echo "#define SDL_VIDEO_DRIVER_MALI 1" >>confdefs.h
|
||||
|
||||
EXTRA_CFLAGS="$EXTRA_CFLAGS -DLINUX -DEGL_API_FB"
|
||||
SOURCES="$SOURCES $srcdir/src/video/mali-fbdev/*.c"
|
||||
SUMMARY_video="${SUMMARY_video} mali"
|
||||
have_video=yes
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
CheckHaikuVideo()
|
||||
{
|
||||
if test x$enable_video = xyes; then
|
||||
|
@ -24072,6 +24124,7 @@ case "$host" in
|
|||
CheckLinuxVersion
|
||||
CheckRPATH
|
||||
CheckVivanteVideo
|
||||
CheckMaliVideo
|
||||
|
||||
# Set up files for the audio library
|
||||
if test x$enable_audio = xyes; then
|
||||
|
|
30
configure.in
30
configure.in
|
@ -2037,6 +2037,35 @@ AC_HELP_STRING([--enable-video-vivante], [use Vivante EGL video driver [[default
|
|||
fi
|
||||
}
|
||||
|
||||
dnl Set up the Mali video driver if enabled
|
||||
CheckMaliVideo()
|
||||
{
|
||||
AC_ARG_ENABLE(video-mali,
|
||||
AC_HELP_STRING([--enable-video-mali], [use Mali EGL video driver [[default=yes]]]),
|
||||
, enable_video_mali=yes)
|
||||
if test x$enable_video = xyes -a x$enable_video_mali = xyes; then
|
||||
AC_MSG_CHECKING(for Mali FB API)
|
||||
have_mali_egl=no
|
||||
AC_TRY_COMPILE([
|
||||
#define LINUX
|
||||
#define EGL_API_FB
|
||||
#include <EGL/egl.h>
|
||||
],[
|
||||
],[
|
||||
have_mali_egl=yes
|
||||
])
|
||||
AC_MSG_RESULT($have_mali_egl)
|
||||
|
||||
if test x$have_mali_egl = xyes; then
|
||||
AC_DEFINE(SDL_VIDEO_DRIVER_MALI, 1, [ ])
|
||||
EXTRA_CFLAGS="$EXTRA_CFLAGS -DLINUX -DEGL_API_FB"
|
||||
SOURCES="$SOURCES $srcdir/src/video/mali-fbdev/*.c"
|
||||
SUMMARY_video="${SUMMARY_video} mali"
|
||||
have_video=yes
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
dnl Set up the Haiku video driver if enabled
|
||||
CheckHaikuVideo()
|
||||
{
|
||||
|
@ -3446,6 +3475,7 @@ case "$host" in
|
|||
CheckLinuxVersion
|
||||
CheckRPATH
|
||||
CheckVivanteVideo
|
||||
CheckMaliVideo
|
||||
|
||||
# Set up files for the audio library
|
||||
if test x$enable_audio = xyes; then
|
||||
|
|
17
debian/control
vendored
17
debian/control
vendored
|
@ -13,8 +13,6 @@ Build-Depends: debhelper (>= 9),
|
|||
dpkg-dev (>= 1.16.1~),
|
||||
fcitx-libs-dev [linux-any],
|
||||
libasound2-dev [linux-any],
|
||||
libgl1-mesa-dev,
|
||||
libpulse-dev,
|
||||
libudev-dev [linux-any],
|
||||
libdbus-1-dev [linux-any],
|
||||
libibus-1.0-dev[linux-any],
|
||||
|
@ -30,16 +28,16 @@ Build-Depends: debhelper (>= 9),
|
|||
libxxf86vm-dev
|
||||
Homepage: http://www.libsdl.org/
|
||||
|
||||
Package: libsdl2
|
||||
Package: libsdl2-2.0-0
|
||||
Architecture: any
|
||||
Multi-Arch: same
|
||||
Pre-Depends: ${misc:Pre-Depends}
|
||||
Depends: ${misc:Depends},
|
||||
${shlibs:Depends},
|
||||
libudev0 [linux-any],
|
||||
libudev0 | libudev1 [linux-any],
|
||||
libdbus-1-3 [linux-any]
|
||||
Conflicts: libsdl-1.3-0
|
||||
Replaces: libsdl-1.3-0
|
||||
Conflicts: libsdl-1.3-0, libsdl2
|
||||
Replaces: libsdl-1.3-0, libsdl2
|
||||
Description: Simple DirectMedia Layer
|
||||
SDL is a library that allows programs portable low level access to
|
||||
a video framebuffer, audio output, mouse, and keyboard.
|
||||
|
@ -51,9 +49,10 @@ Section: libdevel
|
|||
Architecture: any
|
||||
Multi-Arch: same
|
||||
Depends: ${misc:Depends},
|
||||
libsdl2 (= ${binary:Version}),
|
||||
libsdl2-2.0-0 (= ${binary:Version}),
|
||||
libc6-dev,
|
||||
libgl1-mesa-dev
|
||||
libgl1-mesa-dev,
|
||||
libx11-dev
|
||||
Conflicts: libsdl-1.3-dev
|
||||
Replaces: libsdl-1.3-dev
|
||||
Description: Simple DirectMedia Layer development files
|
||||
|
@ -68,7 +67,7 @@ Section: debug
|
|||
Architecture: any
|
||||
Multi-Arch: same
|
||||
Depends: ${misc:Depends},
|
||||
libsdl2 (= ${binary:Version}),
|
||||
libsdl2-2.0-0 (= ${binary:Version}),
|
||||
Description: Simple DirectMedia Layer debug files
|
||||
SDL is a library that allows programs portable low level access to a video
|
||||
framebuffer, audio output, mouse, and keyboard.
|
||||
|
|
4
debian/rules
vendored
4
debian/rules
vendored
|
@ -6,7 +6,9 @@ DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
|
|||
confflags = --disable-rpath --disable-video-directfb \
|
||||
--disable-nas --disable-esd --disable-arts \
|
||||
--disable-alsa-shared --disable-pulseaudio-shared \
|
||||
--disable-x11-shared
|
||||
--disable-x11-shared --disable-video-opengl --enable-video-opengles --enable-video-mali \
|
||||
--disable-esd --disable-pulseaudio \
|
||||
--disable-input-tslib
|
||||
|
||||
%:
|
||||
dh $@ --parallel
|
||||
|
|
|
@ -328,6 +328,7 @@
|
|||
#cmakedefine SDL_VIDEO_DRIVER_RPI @SDL_VIDEO_DRIVER_RPI@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_VIVANTE @SDL_VIDEO_DRIVER_VIVANTE@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_VIVANTE_VDK @SDL_VIDEO_DRIVER_VIVANTE_VDK@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_MALI @SDL_VIDEO_DRIVER_MALI@
|
||||
|
||||
#cmakedefine SDL_VIDEO_DRIVER_KMSDRM @SDL_VIDEO_DRIVER_KMSDRM@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC @SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC@
|
||||
|
|
|
@ -337,6 +337,7 @@
|
|||
#undef SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC_GBM
|
||||
#undef SDL_VIDEO_DRIVER_ANDROID
|
||||
#undef SDL_VIDEO_DRIVER_EMSCRIPTEN
|
||||
#undef SDL_VIDEO_DRIVER_MALI
|
||||
#undef SDL_VIDEO_DRIVER_X11_DYNAMIC
|
||||
#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT
|
||||
#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
#define DEFAULT_OGL_ES_PVR ( vc4 ? "libGLES_CM.so.1" : "libbrcmGLESv2.so" )
|
||||
#define DEFAULT_OGL_ES ( vc4 ? "libGLESv1_CM.so.1" : "libbrcmGLESv2.so" )
|
||||
|
||||
#elif SDL_VIDEO_DRIVER_ANDROID || SDL_VIDEO_DRIVER_VIVANTE
|
||||
#elif SDL_VIDEO_DRIVER_ANDROID || SDL_VIDEO_DRIVER_MALI || SDL_VIDEO_DRIVER_VIVANTE
|
||||
/* Android */
|
||||
#define DEFAULT_EGL "libEGL.so"
|
||||
#define DEFAULT_OGL_ES2 "libGLESv2.so"
|
||||
|
|
|
@ -416,6 +416,7 @@ extern VideoBootStrap Android_bootstrap;
|
|||
extern VideoBootStrap PSP_bootstrap;
|
||||
extern VideoBootStrap RPI_bootstrap;
|
||||
extern VideoBootStrap KMSDRM_bootstrap;
|
||||
extern VideoBootStrap MALI_bootstrap;
|
||||
extern VideoBootStrap DUMMY_bootstrap;
|
||||
extern VideoBootStrap Wayland_bootstrap;
|
||||
extern VideoBootStrap NACL_bootstrap;
|
||||
|
|
|
@ -97,6 +97,9 @@ static VideoBootStrap *bootstrap[] = {
|
|||
#if SDL_VIDEO_DRIVER_PSP
|
||||
&PSP_bootstrap,
|
||||
#endif
|
||||
#if SDL_VIDEO_DRIVER_MALI
|
||||
&MALI_bootstrap,
|
||||
#endif
|
||||
#if SDL_VIDEO_DRIVER_KMSDRM
|
||||
&KMSDRM_bootstrap,
|
||||
#endif
|
||||
|
|
43
src/video/mali-fbdev/SDL_maliopengles.c
Normal file
43
src/video/mali-fbdev/SDL_maliopengles.c
Normal file
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#if SDL_VIDEO_DRIVER_MALI && SDL_VIDEO_OPENGL_EGL
|
||||
|
||||
#include "SDL_maliopengles.h"
|
||||
#include "SDL_malivideo.h"
|
||||
|
||||
/* EGL implementation of SDL OpenGL support */
|
||||
|
||||
int
|
||||
MALI_GLES_LoadLibrary(_THIS, const char *path)
|
||||
{
|
||||
return SDL_EGL_LoadLibrary(_this, path, EGL_DEFAULT_DISPLAY, 0);
|
||||
}
|
||||
|
||||
SDL_EGL_CreateContext_impl(MALI)
|
||||
SDL_EGL_SwapWindow_impl(MALI)
|
||||
SDL_EGL_MakeCurrent_impl(MALI)
|
||||
|
||||
#endif /* SDL_VIDEO_DRIVER_MALI && SDL_VIDEO_OPENGL_EGL */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
|
48
src/video/mali-fbdev/SDL_maliopengles.h
Normal file
48
src/video/mali-fbdev/SDL_maliopengles.h
Normal file
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#ifndef _SDL_maliopengles_h
|
||||
#define _SDL_maliopengles_h
|
||||
|
||||
#if SDL_VIDEO_DRIVER_MALI && SDL_VIDEO_OPENGL_EGL
|
||||
|
||||
#include "../SDL_sysvideo.h"
|
||||
#include "../SDL_egl_c.h"
|
||||
|
||||
/* OpenGLES functions */
|
||||
#define MALI_GLES_GetAttribute SDL_EGL_GetAttribute
|
||||
#define MALI_GLES_GetProcAddress SDL_EGL_GetProcAddress
|
||||
#define MALI_GLES_UnloadLibrary SDL_EGL_UnloadLibrary
|
||||
#define MALI_GLES_SetSwapInterval SDL_EGL_SetSwapInterval
|
||||
#define MALI_GLES_GetSwapInterval SDL_EGL_GetSwapInterval
|
||||
#define MALI_GLES_DeleteContext SDL_EGL_DeleteContext
|
||||
|
||||
extern int MALI_GLES_LoadLibrary(_THIS, const char *path);
|
||||
extern SDL_GLContext MALI_GLES_CreateContext(_THIS, SDL_Window * window);
|
||||
extern int MALI_GLES_SwapWindow(_THIS, SDL_Window * window);
|
||||
extern int MALI_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context);
|
||||
|
||||
#endif /* SDL_VIDEO_DRIVER_MALI && SDL_VIDEO_OPENGL_EGL */
|
||||
|
||||
#endif /* _SDL_maliopengles_h */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
323
src/video/mali-fbdev/SDL_malivideo.c
Normal file
323
src/video/mali-fbdev/SDL_malivideo.c
Normal file
|
@ -0,0 +1,323 @@
|
|||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#if SDL_VIDEO_DRIVER_MALI
|
||||
|
||||
/* SDL internals */
|
||||
#include "../SDL_sysvideo.h"
|
||||
#include "SDL_version.h"
|
||||
#include "SDL_syswm.h"
|
||||
#include "SDL_loadso.h"
|
||||
#include "SDL_events.h"
|
||||
#include "../../events/SDL_events_c.h"
|
||||
|
||||
#ifdef SDL_INPUT_LINUXEV
|
||||
#include "../../core/linux/SDL_evdev.h"
|
||||
#endif
|
||||
|
||||
#include "SDL_malivideo.h"
|
||||
#include "SDL_maliopengles.h"
|
||||
|
||||
|
||||
static int
|
||||
MALI_Available(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
MALI_Destroy(SDL_VideoDevice * device)
|
||||
{
|
||||
if (device->driverdata != NULL) {
|
||||
SDL_free(device->driverdata);
|
||||
device->driverdata = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static SDL_VideoDevice *
|
||||
MALI_Create()
|
||||
{
|
||||
SDL_VideoDevice *device;
|
||||
|
||||
/* Initialize SDL_VideoDevice structure */
|
||||
device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice));
|
||||
if (device == NULL) {
|
||||
SDL_OutOfMemory();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
device->driverdata = NULL;
|
||||
|
||||
/* Setup amount of available displays and current display */
|
||||
device->num_displays = 0;
|
||||
|
||||
/* Set device free function */
|
||||
device->free = MALI_Destroy;
|
||||
|
||||
/* Setup all functions which we can handle */
|
||||
device->VideoInit = MALI_VideoInit;
|
||||
device->VideoQuit = MALI_VideoQuit;
|
||||
device->GetDisplayModes = MALI_GetDisplayModes;
|
||||
device->SetDisplayMode = MALI_SetDisplayMode;
|
||||
device->CreateSDLWindow = MALI_CreateWindow;
|
||||
device->SetWindowTitle = MALI_SetWindowTitle;
|
||||
device->SetWindowPosition = MALI_SetWindowPosition;
|
||||
device->SetWindowSize = MALI_SetWindowSize;
|
||||
device->ShowWindow = MALI_ShowWindow;
|
||||
device->HideWindow = MALI_HideWindow;
|
||||
device->DestroyWindow = MALI_DestroyWindow;
|
||||
device->GetWindowWMInfo = MALI_GetWindowWMInfo;
|
||||
|
||||
device->GL_LoadLibrary = MALI_GLES_LoadLibrary;
|
||||
device->GL_GetProcAddress = MALI_GLES_GetProcAddress;
|
||||
device->GL_UnloadLibrary = MALI_GLES_UnloadLibrary;
|
||||
device->GL_CreateContext = MALI_GLES_CreateContext;
|
||||
device->GL_MakeCurrent = MALI_GLES_MakeCurrent;
|
||||
device->GL_SetSwapInterval = MALI_GLES_SetSwapInterval;
|
||||
device->GL_GetSwapInterval = MALI_GLES_GetSwapInterval;
|
||||
device->GL_SwapWindow = MALI_GLES_SwapWindow;
|
||||
device->GL_DeleteContext = MALI_GLES_DeleteContext;
|
||||
|
||||
device->PumpEvents = MALI_PumpEvents;
|
||||
|
||||
return device;
|
||||
}
|
||||
|
||||
VideoBootStrap MALI_bootstrap = {
|
||||
"mali",
|
||||
"Mali EGL Video Driver",
|
||||
MALI_Available,
|
||||
MALI_Create
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
/* SDL Video and Display initialization/handling functions */
|
||||
/*****************************************************************************/
|
||||
|
||||
int
|
||||
MALI_VideoInit(_THIS)
|
||||
{
|
||||
SDL_VideoDisplay display;
|
||||
SDL_DisplayMode current_mode;
|
||||
SDL_DisplayData *data;
|
||||
struct fb_var_screeninfo vinfo;
|
||||
int fd;
|
||||
|
||||
data = (SDL_DisplayData *) SDL_calloc(1, sizeof(SDL_DisplayData));
|
||||
if (data == NULL) {
|
||||
return SDL_OutOfMemory();
|
||||
}
|
||||
|
||||
fd = open("/dev/fb0", O_RDWR, 0);
|
||||
if (fd < 0) {
|
||||
return SDL_SetError("mali-fbdev: Could not open framebuffer device");
|
||||
}
|
||||
|
||||
if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) < 0) {
|
||||
MALI_VideoQuit(_this);
|
||||
return SDL_SetError("mali-fbdev: Could not get framebuffer information");
|
||||
}
|
||||
/* Enable triple buffering */
|
||||
/*
|
||||
vinfo.yres_virtual = vinfo.yres * 3;
|
||||
if (ioctl(fd, FBIOPUT_VSCREENINFO, vinfo) == -1) {
|
||||
printf("mali-fbdev: Error setting VSCREENINFO\n");
|
||||
}
|
||||
*/
|
||||
close(fd);
|
||||
system("setterm -cursor off");
|
||||
|
||||
data->native_display.width = vinfo.xres;
|
||||
data->native_display.height = vinfo.yres;
|
||||
|
||||
SDL_zero(current_mode);
|
||||
current_mode.w = vinfo.xres;
|
||||
current_mode.h = vinfo.yres;
|
||||
/* FIXME: Is there a way to tell the actual refresh rate? */
|
||||
current_mode.refresh_rate = 60;
|
||||
/* 32 bpp for default */
|
||||
//current_mode.format = SDL_PIXELFORMAT_ABGR8888;
|
||||
current_mode.format = SDL_PIXELFORMAT_RGBX8888;
|
||||
|
||||
current_mode.driverdata = NULL;
|
||||
|
||||
SDL_zero(display);
|
||||
display.desktop_mode = current_mode;
|
||||
display.current_mode = current_mode;
|
||||
display.driverdata = data;
|
||||
|
||||
SDL_AddVideoDisplay(&display);
|
||||
|
||||
#ifdef SDL_INPUT_LINUXEV
|
||||
if (SDL_EVDEV_Init() < 0) {
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
MALI_VideoQuit(_THIS)
|
||||
{
|
||||
/* Clear the framebuffer and ser cursor on again */
|
||||
int fd = open("/dev/tty", O_RDWR);
|
||||
ioctl(fd, VT_ACTIVATE, 5);
|
||||
ioctl(fd, VT_ACTIVATE, 1);
|
||||
close(fd);
|
||||
system("setterm -cursor on");
|
||||
|
||||
#ifdef SDL_INPUT_LINUXEV
|
||||
SDL_EVDEV_Quit();
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
MALI_GetDisplayModes(_THIS, SDL_VideoDisplay * display)
|
||||
{
|
||||
/* Only one display mode available, the current one */
|
||||
SDL_AddDisplayMode(display, &display->current_mode);
|
||||
}
|
||||
|
||||
int
|
||||
MALI_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
MALI_CreateWindow(_THIS, SDL_Window * window)
|
||||
{
|
||||
SDL_WindowData *windowdata;
|
||||
SDL_DisplayData *displaydata;
|
||||
|
||||
displaydata = SDL_GetDisplayDriverData(0);
|
||||
|
||||
/* Allocate window internal data */
|
||||
windowdata = (SDL_WindowData *) SDL_calloc(1, sizeof(SDL_WindowData));
|
||||
if (windowdata == NULL) {
|
||||
return SDL_OutOfMemory();
|
||||
}
|
||||
|
||||
/* Windows have one size for now */
|
||||
window->w = displaydata->native_display.width;
|
||||
window->h = displaydata->native_display.height;
|
||||
|
||||
/* OpenGL ES is the law here */
|
||||
window->flags |= SDL_WINDOW_OPENGL;
|
||||
|
||||
if (!_this->egl_data) {
|
||||
if (SDL_GL_LoadLibrary(NULL) < 0) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
windowdata->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType) &displaydata->native_display);
|
||||
|
||||
if (windowdata->egl_surface == EGL_NO_SURFACE) {
|
||||
MALI_VideoQuit(_this);
|
||||
return SDL_SetError("mali-fbdev: Can't create EGL window surface");
|
||||
}
|
||||
|
||||
/* Setup driver data for this window */
|
||||
window->driverdata = windowdata;
|
||||
|
||||
/* One window, it always has focus */
|
||||
SDL_SetMouseFocus(window);
|
||||
SDL_SetKeyboardFocus(window);
|
||||
|
||||
/* Window has been successfully created */
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
MALI_DestroyWindow(_THIS, SDL_Window * window)
|
||||
{
|
||||
SDL_WindowData *data;
|
||||
|
||||
data = window->driverdata;
|
||||
if (data) {
|
||||
if (data->egl_surface != EGL_NO_SURFACE) {
|
||||
SDL_EGL_DestroySurface(_this, data->egl_surface);
|
||||
data->egl_surface = EGL_NO_SURFACE;
|
||||
}
|
||||
SDL_free(data);
|
||||
}
|
||||
window->driverdata = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
MALI_SetWindowTitle(_THIS, SDL_Window * window)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
MALI_SetWindowPosition(_THIS, SDL_Window * window)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
MALI_SetWindowSize(_THIS, SDL_Window * window)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
MALI_ShowWindow(_THIS, SDL_Window * window)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
MALI_HideWindow(_THIS, SDL_Window * window)
|
||||
{
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* SDL Window Manager function */
|
||||
/*****************************************************************************/
|
||||
SDL_bool
|
||||
MALI_GetWindowWMInfo(_THIS, SDL_Window * window, struct SDL_SysWMinfo *info)
|
||||
{
|
||||
if (info->version.major <= SDL_MAJOR_VERSION) {
|
||||
return SDL_TRUE;
|
||||
} else {
|
||||
SDL_SetError("application not compiled with SDL %d.%d\n",
|
||||
SDL_MAJOR_VERSION, SDL_MINOR_VERSION);
|
||||
}
|
||||
|
||||
/* Failed to get window manager information */
|
||||
return SDL_FALSE;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* SDL event functions */
|
||||
/*****************************************************************************/
|
||||
void MALI_PumpEvents(_THIS)
|
||||
{
|
||||
#ifdef SDL_INPUT_LINUXEV
|
||||
SDL_EVDEV_Poll();
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* SDL_VIDEO_DRIVER_MALI */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
|
80
src/video/mali-fbdev/SDL_malivideo.h
Normal file
80
src/video/mali-fbdev/SDL_malivideo.h
Normal file
|
@ -0,0 +1,80 @@
|
|||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef _SDL_malivideo_h
|
||||
#define _SDL_malivideo_h
|
||||
|
||||
#include "../../SDL_internal.h"
|
||||
#include "../SDL_sysvideo.h"
|
||||
|
||||
#include "SDL_egl.h"
|
||||
|
||||
#include <EGL/egl.h>
|
||||
#include <linux/vt.h>
|
||||
#include <linux/fb.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <stropts.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef struct SDL_DisplayData
|
||||
{
|
||||
struct {
|
||||
unsigned short width;
|
||||
unsigned short height;
|
||||
} native_display;
|
||||
} SDL_DisplayData;
|
||||
|
||||
typedef struct SDL_WindowData
|
||||
{
|
||||
EGLSurface egl_surface;
|
||||
} SDL_WindowData;
|
||||
|
||||
/****************************************************************************/
|
||||
/* SDL_VideoDevice functions declaration */
|
||||
/****************************************************************************/
|
||||
|
||||
/* Display and window functions */
|
||||
int MALI_VideoInit(_THIS);
|
||||
void MALI_VideoQuit(_THIS);
|
||||
void MALI_GetDisplayModes(_THIS, SDL_VideoDisplay * display);
|
||||
int MALI_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode);
|
||||
int MALI_CreateWindow(_THIS, SDL_Window * window);
|
||||
void MALI_SetWindowTitle(_THIS, SDL_Window * window);
|
||||
void MALI_SetWindowPosition(_THIS, SDL_Window * window);
|
||||
void MALI_SetWindowSize(_THIS, SDL_Window * window);
|
||||
void MALI_ShowWindow(_THIS, SDL_Window * window);
|
||||
void MALI_HideWindow(_THIS, SDL_Window * window);
|
||||
void MALI_DestroyWindow(_THIS, SDL_Window * window);
|
||||
|
||||
/* Window manager function */
|
||||
SDL_bool MALI_GetWindowWMInfo(_THIS, SDL_Window * window,
|
||||
struct SDL_SysWMinfo *info);
|
||||
|
||||
/* Event functions */
|
||||
void MALI_PumpEvents(_THIS);
|
||||
|
||||
#endif /* _SDL_malivideo_h */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue