21 #include "../../SDL_internal.h"
23 #if SDL_VIDEO_DRIVER_VIVANTE
26 #include "../SDL_sysvideo.h"
31 #include "../../events/SDL_events_c.h"
33 #ifdef SDL_INPUT_LINUXEV
34 #include "../../core/linux/SDL_evdev.h"
44 VIVANTE_Available(
void)
85 device->free = VIVANTE_Destroy;
101 #if SDL_VIDEO_OPENGL_EGL
102 device->GL_LoadLibrary = VIVANTE_GLES_LoadLibrary;
103 device->GL_GetProcAddress = VIVANTE_GLES_GetProcAddress;
104 device->GL_UnloadLibrary = VIVANTE_GLES_UnloadLibrary;
105 device->GL_CreateContext = VIVANTE_GLES_CreateContext;
106 device->GL_MakeCurrent = VIVANTE_GLES_MakeCurrent;
107 device->GL_SetSwapInterval = VIVANTE_GLES_SetSwapInterval;
108 device->GL_GetSwapInterval = VIVANTE_GLES_GetSwapInterval;
109 device->GL_SwapWindow = VIVANTE_GLES_SwapWindow;
110 device->GL_DeleteContext = VIVANTE_GLES_DeleteContext;
114 device->Vulkan_LoadLibrary = VIVANTE_Vulkan_LoadLibrary;
115 device->Vulkan_UnloadLibrary = VIVANTE_Vulkan_UnloadLibrary;
116 device->Vulkan_GetInstanceExtensions = VIVANTE_Vulkan_GetInstanceExtensions;
117 device->Vulkan_CreateSurface = VIVANTE_Vulkan_CreateSurface;
127 "Vivante EGL Video Driver",
137 VIVANTE_AddVideoDisplays(
_THIS)
143 int pitch = 0,
bpp = 0;
152 #if SDL_VIDEO_DRIVER_VIVANTE_VDK
153 data->native_display = vdkGetDisplay(videodata->vdk_private);
155 vdkGetDisplayInfo(
data->native_display, ¤t_mode.
w, ¤t_mode.
h, &
pixels, &pitch, &
bpp);
157 data->native_display = videodata->fbGetDisplayByIndex(0);
159 videodata->fbGetDisplayInfo(
data->native_display, ¤t_mode.
w, ¤t_mode.
h, &
pixels, &pitch, &
bpp);
176 display.
name = VIVANTE_GetDisplayName(
_this);
189 #
if SDL_VIDEO_DRIVER_VIVANTE_VDK
190 videodata->vdk_private = vdkInitialize();
191 if (!videodata->vdk_private) {
202 #define LOAD_FUNC(NAME) \
203 videodata->NAME = SDL_LoadFunction(videodata->egl_handle, #NAME); \
204 if (!videodata->NAME) return -1;
206 LOAD_FUNC(fbGetDisplay);
207 LOAD_FUNC(fbGetDisplayByIndex);
208 LOAD_FUNC(fbGetDisplayGeometry);
209 LOAD_FUNC(fbGetDisplayInfo);
210 LOAD_FUNC(fbDestroyDisplay);
211 LOAD_FUNC(fbCreateWindow);
212 LOAD_FUNC(fbGetWindowGeometry);
213 LOAD_FUNC(fbGetWindowInfo);
214 LOAD_FUNC(fbDestroyWindow);
217 if (VIVANTE_SetupPlatform(
_this) < 0) {
221 if (VIVANTE_AddVideoDisplays(
_this) < 0) {
225 VIVANTE_UpdateDisplayScale(
_this);
227 #ifdef SDL_INPUT_LINUXEV
228 if (SDL_EVDEV_Init() < 0) {
245 VIVANTE_CleanupPlatform(
_this);
247 #if SDL_VIDEO_DRIVER_VIVANTE_VDK
248 if (videodata->vdk_private) {
249 vdkExit(videodata->vdk_private);
250 videodata->vdk_private =
NULL;
291 #if SDL_VIDEO_DRIVER_VIVANTE_VDK
296 if (!
data->native_window) {
297 return SDL_SetError(
"VIVANTE: Can't create native window");
300 #if SDL_VIDEO_OPENGL_EGL
302 data->egl_surface = SDL_EGL_CreateSurface(
_this,
data->native_window);
304 return SDL_SetError(
"VIVANTE: Can't create EGL surface");
323 #if SDL_VIDEO_OPENGL_EGL
325 SDL_EGL_DestroySurface(
_this,
data->egl_surface);
329 if (
data->native_window) {
330 #if SDL_VIDEO_DRIVER_VIVANTE_VDK
331 vdkDestroyWindow(
data->native_window);
333 videodata->fbDestroyWindow(
data->native_window);
345 #if SDL_VIDEO_DRIVER_VIVANTE_VDK
347 vdkSetWindowTitle(
data->native_window,
window->title);
366 #if SDL_VIDEO_DRIVER_VIVANTE_VDK
368 vdkShowWindow(
data->native_window);
377 #if SDL_VIDEO_DRIVER_VIVANTE_VDK
379 vdkHideWindow(
data->native_window);
395 info->
info.vivante.
display = displaydata->native_display;
410 #ifdef SDL_INPUT_LINUXEV