summaryrefslogtreecommitdiff
path: root/Source/3rdParty/SDL2/src/video/kmsdrm/SDL_kmsdrmvideo.c
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-03-19 23:06:27 +0800
committerchai <chaifix@163.com>2019-03-19 23:06:27 +0800
commit1497dccd63a84b7ee2b229b1ad9c5c02718f2a78 (patch)
treef8d1bff50da13e126d08c7345653e002e293202d /Source/3rdParty/SDL2/src/video/kmsdrm/SDL_kmsdrmvideo.c
parent5e2a973516e0729b225da9de0b03015dc5854ac4 (diff)
*rename
Diffstat (limited to 'Source/3rdParty/SDL2/src/video/kmsdrm/SDL_kmsdrmvideo.c')
-rw-r--r--Source/3rdParty/SDL2/src/video/kmsdrm/SDL_kmsdrmvideo.c739
1 files changed, 0 insertions, 739 deletions
diff --git a/Source/3rdParty/SDL2/src/video/kmsdrm/SDL_kmsdrmvideo.c b/Source/3rdParty/SDL2/src/video/kmsdrm/SDL_kmsdrmvideo.c
deleted file mode 100644
index bacbe0c..0000000
--- a/Source/3rdParty/SDL2/src/video/kmsdrm/SDL_kmsdrmvideo.c
+++ /dev/null
@@ -1,739 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2018 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_KMSDRM
-
-/* SDL internals */
-#include "../SDL_sysvideo.h"
-#include "SDL_syswm.h"
-#include "SDL_log.h"
-#include "SDL_hints.h"
-#include "../../events/SDL_mouse_c.h"
-#include "../../events/SDL_keyboard_c.h"
-
-#ifdef SDL_INPUT_LINUXEV
-#include "../../core/linux/SDL_evdev.h"
-#endif
-
-/* KMS/DRM declarations */
-#include "SDL_kmsdrmvideo.h"
-#include "SDL_kmsdrmevents.h"
-#include "SDL_kmsdrmopengles.h"
-#include "SDL_kmsdrmmouse.h"
-#include "SDL_kmsdrmdyn.h"
-#include <sys/stat.h>
-#include <dirent.h>
-#include <errno.h>
-
-#define KMSDRM_DRI_PATH "/dev/dri/"
-
-static int
-check_modestting(int devindex)
-{
- SDL_bool available = SDL_FALSE;
- char device[512];
- int drm_fd;
-
- SDL_snprintf(device, sizeof (device), "%scard%d", KMSDRM_DRI_PATH, devindex);
-
- drm_fd = open(device, O_RDWR | O_CLOEXEC);
- if (drm_fd >= 0) {
- if (SDL_KMSDRM_LoadSymbols()) {
- drmModeRes *resources = KMSDRM_drmModeGetResources(drm_fd);
- if (resources != NULL) {
- available = SDL_TRUE;
- KMSDRM_drmModeFreeResources(resources);
- }
- SDL_KMSDRM_UnloadSymbols();
- }
- close(drm_fd);
- }
-
- return available;
-}
-
-static int get_dricount(void)
-{
- int devcount = 0;
- struct dirent *res;
- struct stat sb;
- DIR *folder;
-
- if (!(stat(KMSDRM_DRI_PATH, &sb) == 0
- && S_ISDIR(sb.st_mode))) {
- printf("The path %s cannot be opened or is not available\n",
- KMSDRM_DRI_PATH);
- return 0;
- }
-
- if (access(KMSDRM_DRI_PATH, F_OK) == -1) {
- printf("The path %s cannot be opened\n",
- KMSDRM_DRI_PATH);
- return 0;
- }
-
- folder = opendir(KMSDRM_DRI_PATH);
- if (folder) {
- while ((res = readdir(folder))) {
- if (res->d_type == DT_CHR) {
- devcount++;
- }
- }
- closedir(folder);
- }
-
- return devcount;
-}
-
-static int
-get_driindex(void)
-{
- const int devcount = get_dricount();
- int i;
-
- for (i = 0; i < devcount; i++) {
- if (check_modestting(i)) {
- return i;
- }
- }
-
- return -ENOENT;
-}
-
-static int
-KMSDRM_Available(void)
-{
- int ret = -ENOENT;
-
- ret = get_driindex();
- if (ret >= 0)
- return 1;
-
- return ret;
-}
-
-static void
-KMSDRM_Destroy(SDL_VideoDevice * device)
-{
- if (device->driverdata != NULL) {
- SDL_free(device->driverdata);
- device->driverdata = NULL;
- }
-
- SDL_free(device);
- SDL_KMSDRM_UnloadSymbols();
-}
-
-static SDL_VideoDevice *
-KMSDRM_Create(int devindex)
-{
- SDL_VideoDevice *device;
- SDL_VideoData *vdata;
-
- if (!devindex || (devindex > 99)) {
- devindex = get_driindex();
- }
-
- if (devindex < 0) {
- SDL_SetError("devindex (%d) must be between 0 and 99.\n", devindex);
- return NULL;
- }
-
- if (!SDL_KMSDRM_LoadSymbols()) {
- return NULL;
- }
-
- /* Initialize SDL_VideoDevice structure */
- device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice));
- if (device == NULL) {
- SDL_OutOfMemory();
- return NULL;
- }
-
- /* Initialize internal data */
- vdata = (SDL_VideoData *) SDL_calloc(1, sizeof(SDL_VideoData));
- if (vdata == NULL) {
- SDL_OutOfMemory();
- goto cleanup;
- }
- vdata->devindex = devindex;
- vdata->drm_fd = -1;
-
- device->driverdata = vdata;
-
- /* Setup amount of available displays and current display */
- device->num_displays = 0;
-
- /* Set device free function */
- device->free = KMSDRM_Destroy;
-
- /* Setup all functions which we can handle */
- device->VideoInit = KMSDRM_VideoInit;
- device->VideoQuit = KMSDRM_VideoQuit;
- device->GetDisplayModes = KMSDRM_GetDisplayModes;
- device->SetDisplayMode = KMSDRM_SetDisplayMode;
- device->CreateSDLWindow = KMSDRM_CreateWindow;
- device->CreateSDLWindowFrom = KMSDRM_CreateWindowFrom;
- device->SetWindowTitle = KMSDRM_SetWindowTitle;
- device->SetWindowIcon = KMSDRM_SetWindowIcon;
- device->SetWindowPosition = KMSDRM_SetWindowPosition;
- device->SetWindowSize = KMSDRM_SetWindowSize;
- device->ShowWindow = KMSDRM_ShowWindow;
- device->HideWindow = KMSDRM_HideWindow;
- device->RaiseWindow = KMSDRM_RaiseWindow;
- device->MaximizeWindow = KMSDRM_MaximizeWindow;
- device->MinimizeWindow = KMSDRM_MinimizeWindow;
- device->RestoreWindow = KMSDRM_RestoreWindow;
- device->SetWindowGrab = KMSDRM_SetWindowGrab;
- device->DestroyWindow = KMSDRM_DestroyWindow;
- device->GetWindowWMInfo = KMSDRM_GetWindowWMInfo;
-#if SDL_VIDEO_OPENGL_EGL
- device->GL_LoadLibrary = KMSDRM_GLES_LoadLibrary;
- device->GL_GetProcAddress = KMSDRM_GLES_GetProcAddress;
- device->GL_UnloadLibrary = KMSDRM_GLES_UnloadLibrary;
- device->GL_CreateContext = KMSDRM_GLES_CreateContext;
- device->GL_MakeCurrent = KMSDRM_GLES_MakeCurrent;
- device->GL_SetSwapInterval = KMSDRM_GLES_SetSwapInterval;
- device->GL_GetSwapInterval = KMSDRM_GLES_GetSwapInterval;
- device->GL_SwapWindow = KMSDRM_GLES_SwapWindow;
- device->GL_DeleteContext = KMSDRM_GLES_DeleteContext;
-#endif
-
- device->PumpEvents = KMSDRM_PumpEvents;
-
- return device;
-
-cleanup:
- if (device != NULL)
- SDL_free(device);
- if (vdata != NULL)
- SDL_free(vdata);
- return NULL;
-}
-
-VideoBootStrap KMSDRM_bootstrap = {
- "KMSDRM",
- "KMS/DRM Video Driver",
- KMSDRM_Available,
- KMSDRM_Create
-};
-
-
-static void
-KMSDRM_FBDestroyCallback(struct gbm_bo *bo, void *data)
-{
- KMSDRM_FBInfo *fb_info = (KMSDRM_FBInfo *)data;
-
- if (fb_info && fb_info->drm_fd > 0 && fb_info->fb_id != 0) {
- KMSDRM_drmModeRmFB(fb_info->drm_fd, fb_info->fb_id);
- SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Delete DRM FB %u", fb_info->fb_id);
- }
-
- free(fb_info);
-}
-
-KMSDRM_FBInfo *
-KMSDRM_FBFromBO(_THIS, struct gbm_bo *bo)
-{
- uint32_t w, h, stride, handle;
- int ret;
- SDL_VideoData *vdata = ((SDL_VideoData *)_this->driverdata);
- KMSDRM_FBInfo *fb_info;
-
- fb_info = (KMSDRM_FBInfo *)KMSDRM_gbm_bo_get_user_data(bo);
- if (fb_info != NULL) {
- /* Have a previously used framebuffer, return it */
- return fb_info;
- }
-
- /* Here a new DRM FB must be created */
- fb_info = (KMSDRM_FBInfo *)SDL_calloc(1, sizeof(KMSDRM_FBInfo));
- if (fb_info == NULL) {
- SDL_OutOfMemory();
- return NULL;
- }
- fb_info->drm_fd = vdata->drm_fd;
-
- w = KMSDRM_gbm_bo_get_width(bo);
- h = KMSDRM_gbm_bo_get_height(bo);
- stride = KMSDRM_gbm_bo_get_stride(bo);
- handle = KMSDRM_gbm_bo_get_handle(bo).u32;
-
- ret = KMSDRM_drmModeAddFB(vdata->drm_fd, w, h, 24, 32, stride, handle, &fb_info->fb_id);
- if (ret < 0) {
- free(fb_info);
- return NULL;
- }
- SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "New DRM FB (%u): %ux%u, stride %u from BO %p", fb_info->fb_id, w, h, stride, (void *)bo);
-
- /* Associate our DRM framebuffer with this buffer object */
- KMSDRM_gbm_bo_set_user_data(bo, fb_info, KMSDRM_FBDestroyCallback);
- return fb_info;
-}
-
-SDL_bool
-KMSDRM_WaitPageFlip(_THIS, SDL_WindowData *wdata, int timeout) {
- SDL_VideoData *vdata = ((SDL_VideoData *)_this->driverdata);
-
- while (wdata->waiting_for_flip) {
- vdata->drm_pollfd.revents = 0;
- if (poll(&vdata->drm_pollfd, 1, timeout) < 0) {
- SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "DRM poll error");
- return SDL_FALSE;
- }
-
- if (vdata->drm_pollfd.revents & (POLLHUP | POLLERR)) {
- SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "DRM poll hup or error");
- return SDL_FALSE;
- }
-
- if (vdata->drm_pollfd.revents & POLLIN) {
- /* Page flip? If so, drmHandleEvent will unset wdata->waiting_for_flip */
- KMSDRM_drmHandleEvent(vdata->drm_fd, &vdata->drm_evctx);
- } else {
- /* Timed out and page flip didn't happen */
- SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Dropping frame while waiting_for_flip");
- return SDL_FALSE;
- }
- }
- return SDL_TRUE;
-}
-
-static void
-KMSDRM_FlipHandler(int fd, unsigned int frame, unsigned int sec, unsigned int usec, void *data)
-{
- *((SDL_bool *) data) = SDL_FALSE;
-}
-
-
-/*****************************************************************************/
-/* SDL Video and Display initialization/handling functions */
-/* _this is a SDL_VideoDevice * */
-/*****************************************************************************/
-int
-KMSDRM_VideoInit(_THIS)
-{
- int i;
- int ret = 0;
- char *devname;
- SDL_VideoData *vdata = ((SDL_VideoData *)_this->driverdata);
- drmModeRes *resources = NULL;
- drmModeConnector *connector = NULL;
- drmModeEncoder *encoder = NULL;
- SDL_DisplayMode current_mode;
- SDL_VideoDisplay display;
-
- /* Allocate display internal data */
- SDL_DisplayData *data = (SDL_DisplayData *) SDL_calloc(1, sizeof(SDL_DisplayData));
- if (data == NULL) {
- return SDL_OutOfMemory();
- }
-
- SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "KMSDRM_VideoInit()");
-
- /* Open /dev/dri/cardNN */
- devname = (char *) SDL_calloc(1, 16);
- if (devname == NULL) {
- ret = SDL_OutOfMemory();
- goto cleanup;
- }
- SDL_snprintf(devname, 16, "/dev/dri/card%d", vdata->devindex);
- vdata->drm_fd = open(devname, O_RDWR | O_CLOEXEC);
- SDL_free(devname);
-
- if (vdata->drm_fd < 0) {
- ret = SDL_SetError("Could not open /dev/dri/card%d.", vdata->devindex);
- goto cleanup;
- }
- SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Opened DRM FD (%d)", vdata->drm_fd);
-
- vdata->gbm = KMSDRM_gbm_create_device(vdata->drm_fd);
- if (vdata->gbm == NULL) {
- ret = SDL_SetError("Couldn't create gbm device.");
- goto cleanup;
- }
-
- /* Find the first available connector with modes */
- resources = KMSDRM_drmModeGetResources(vdata->drm_fd);
- if (!resources) {
- ret = SDL_SetError("drmModeGetResources(%d) failed", vdata->drm_fd);
- goto cleanup;
- }
-
- for (i = 0; i < resources->count_connectors; i++) {
- connector = KMSDRM_drmModeGetConnector(vdata->drm_fd, resources->connectors[i]);
- if (connector == NULL)
- continue;
-
- if (connector->connection == DRM_MODE_CONNECTED &&
- connector->count_modes > 0) {
- SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Found connector %d with %d modes.",
- connector->connector_id, connector->count_modes);
- vdata->saved_conn_id = connector->connector_id;
- break;
- }
-
- KMSDRM_drmModeFreeConnector(connector);
- connector = NULL;
- }
-
- if (i == resources->count_connectors) {
- ret = SDL_SetError("No currently active connector found.");
- goto cleanup;
- }
-
- for (i = 0; i < resources->count_encoders; i++) {
- encoder = KMSDRM_drmModeGetEncoder(vdata->drm_fd, resources->encoders[i]);
-
- if (encoder == NULL)
- continue;
-
- if (encoder->encoder_id == connector->encoder_id) {
- SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Found encoder %d.", encoder->encoder_id);
- data->encoder_id = encoder->encoder_id;
- break;
- }
-
- KMSDRM_drmModeFreeEncoder(encoder);
- encoder = NULL;
- }
-
- if (i == resources->count_encoders) {
- ret = SDL_SetError("No connected encoder found.");
- goto cleanup;
- }
-
- vdata->saved_crtc = KMSDRM_drmModeGetCrtc(vdata->drm_fd, encoder->crtc_id);
- if (vdata->saved_crtc == NULL) {
- ret = SDL_SetError("No CRTC found.");
- goto cleanup;
- }
- SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Saved crtc_id %u, fb_id %u, (%u,%u), %ux%u",
- vdata->saved_crtc->crtc_id, vdata->saved_crtc->buffer_id, vdata->saved_crtc->x,
- vdata->saved_crtc->y, vdata->saved_crtc->width, vdata->saved_crtc->height);
- data->crtc_id = encoder->crtc_id;
- data->cur_mode = vdata->saved_crtc->mode;
- vdata->crtc_id = encoder->crtc_id;
-
- SDL_zero(current_mode);
-
- current_mode.w = vdata->saved_crtc->mode.hdisplay;
- current_mode.h = vdata->saved_crtc->mode.vdisplay;
- current_mode.refresh_rate = vdata->saved_crtc->mode.vrefresh;
-
- /* FIXME ?
- drmModeFB *fb = drmModeGetFB(vdata->drm_fd, vdata->saved_crtc->buffer_id);
- current_mode.format = drmToSDLPixelFormat(fb->bpp, fb->depth);
- drmModeFreeFB(fb);
- */
- current_mode.format = SDL_PIXELFORMAT_ARGB8888;
-
- current_mode.driverdata = NULL;
-
- SDL_zero(display);
- display.desktop_mode = current_mode;
- display.current_mode = current_mode;
-
- display.driverdata = data;
- /* SDL_VideoQuit will later SDL_free(display.driverdata) */
- SDL_AddVideoDisplay(&display);
-
- /* Setup page flip handler */
- vdata->drm_pollfd.fd = vdata->drm_fd;
- vdata->drm_pollfd.events = POLLIN;
- vdata->drm_evctx.version = DRM_EVENT_CONTEXT_VERSION;
- vdata->drm_evctx.page_flip_handler = KMSDRM_FlipHandler;
-
-#ifdef SDL_INPUT_LINUXEV
- SDL_EVDEV_Init();
-#endif
-
- KMSDRM_InitMouse(_this);
-
-cleanup:
- if (encoder != NULL)
- KMSDRM_drmModeFreeEncoder(encoder);
- if (connector != NULL)
- KMSDRM_drmModeFreeConnector(connector);
- if (resources != NULL)
- KMSDRM_drmModeFreeResources(resources);
-
- if (ret != 0) {
- /* Error (complete) cleanup */
- SDL_free(data);
- if(vdata->saved_crtc != NULL) {
- KMSDRM_drmModeFreeCrtc(vdata->saved_crtc);
- vdata->saved_crtc = NULL;
- }
- if (vdata->gbm != NULL) {
- KMSDRM_gbm_device_destroy(vdata->gbm);
- vdata->gbm = NULL;
- }
- if (vdata->drm_fd >= 0) {
- close(vdata->drm_fd);
- vdata->drm_fd = -1;
- }
- }
- return ret;
-}
-
-void
-KMSDRM_VideoQuit(_THIS)
-{
- SDL_VideoData *vdata = ((SDL_VideoData *)_this->driverdata);
-
- SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "KMSDRM_VideoQuit()");
-
- if (_this->gl_config.driver_loaded) {
- SDL_GL_UnloadLibrary();
- }
-
- if(vdata->saved_crtc != NULL) {
- if(vdata->drm_fd > 0 && vdata->saved_conn_id > 0) {
- /* Restore saved CRTC settings */
- drmModeCrtc *crtc = vdata->saved_crtc;
- if(KMSDRM_drmModeSetCrtc(vdata->drm_fd, crtc->crtc_id, crtc->buffer_id,
- crtc->x, crtc->y, &vdata->saved_conn_id, 1,
- &crtc->mode) != 0) {
- SDL_LogWarn(SDL_LOG_CATEGORY_VIDEO, "Could not restore original CRTC mode");
- }
- }
- KMSDRM_drmModeFreeCrtc(vdata->saved_crtc);
- vdata->saved_crtc = NULL;
- }
- if (vdata->gbm != NULL) {
- KMSDRM_gbm_device_destroy(vdata->gbm);
- vdata->gbm = NULL;
- }
- if (vdata->drm_fd >= 0) {
- close(vdata->drm_fd);
- SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Closed DRM FD %d", vdata->drm_fd);
- vdata->drm_fd = -1;
- }
-#ifdef SDL_INPUT_LINUXEV
- SDL_EVDEV_Quit();
-#endif
-}
-
-void
-KMSDRM_GetDisplayModes(_THIS, SDL_VideoDisplay * display)
-{
- /* Only one display mode available, the current one */
- SDL_AddDisplayMode(display, &display->current_mode);
-}
-
-int
-KMSDRM_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)
-{
- return 0;
-}
-
-int
-KMSDRM_CreateWindow(_THIS, SDL_Window * window)
-{
- SDL_WindowData *wdata;
- SDL_VideoDisplay *display;
- SDL_VideoData *vdata = ((SDL_VideoData *)_this->driverdata);
- Uint32 surface_fmt, surface_flags;
-
- /* Allocate window internal data */
- wdata = (SDL_WindowData *) SDL_calloc(1, sizeof(SDL_WindowData));
- if (wdata == NULL) {
- SDL_OutOfMemory();
- goto error;
- }
-
- wdata->waiting_for_flip = SDL_FALSE;
- display = SDL_GetDisplayForWindow(window);
-
- /* Windows have one size for now */
- window->w = display->desktop_mode.w;
- window->h = display->desktop_mode.h;
-
- /* Maybe you didn't ask for a fullscreen OpenGL window, but that's what you get */
- window->flags |= (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_OPENGL);
-
- surface_fmt = GBM_FORMAT_XRGB8888;
- surface_flags = GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING;
-
- if (!KMSDRM_gbm_device_is_format_supported(vdata->gbm, surface_fmt, surface_flags)) {
- SDL_LogWarn(SDL_LOG_CATEGORY_VIDEO, "GBM surface format not supported. Trying anyway.");
- }
- wdata->gs = KMSDRM_gbm_surface_create(vdata->gbm, window->w, window->h, surface_fmt, surface_flags);
-
-#if SDL_VIDEO_OPENGL_EGL
- if (!_this->egl_data) {
- if (SDL_GL_LoadLibrary(NULL) < 0) {
- goto error;
- }
- }
- wdata->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType) wdata->gs);
-
- if (wdata->egl_surface == EGL_NO_SURFACE) {
- SDL_SetError("Could not create EGL window surface");
- goto error;
- }
-#endif /* SDL_VIDEO_OPENGL_EGL */
-
- /* In case we want low-latency, double-buffer video, we take note here */
- wdata->double_buffer = SDL_FALSE;
- if (SDL_GetHintBoolean(SDL_HINT_VIDEO_DOUBLE_BUFFER, SDL_FALSE)) {
- wdata->double_buffer = SDL_TRUE;
- }
-
- /* Window is created, but we have yet to set up CRTC to one of the GBM buffers if we want
- drmModePageFlip to work, and we can't do it until EGL is completely setup, because we
- need to do eglSwapBuffers so we can get a valid GBM buffer object to call
- drmModeSetCrtc on it. */
- wdata->crtc_ready = SDL_FALSE;
-
- /* Setup driver data for this window */
- window->driverdata = wdata;
-
- /* One window, it always has focus */
- SDL_SetMouseFocus(window);
- SDL_SetKeyboardFocus(window);
-
- /* Window has been successfully created */
- return 0;
-
-error:
- if (wdata != NULL) {
-#if SDL_VIDEO_OPENGL_EGL
- if (wdata->egl_surface != EGL_NO_SURFACE)
- SDL_EGL_DestroySurface(_this, wdata->egl_surface);
-#endif /* SDL_VIDEO_OPENGL_EGL */
- if (wdata->gs != NULL)
- KMSDRM_gbm_surface_destroy(wdata->gs);
- SDL_free(wdata);
- }
- return -1;
-}
-
-void
-KMSDRM_DestroyWindow(_THIS, SDL_Window * window)
-{
- SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
- if(data) {
- /* Wait for any pending page flips and unlock buffer */
- KMSDRM_WaitPageFlip(_this, data, -1);
- if (data->crtc_bo != NULL) {
- KMSDRM_gbm_surface_release_buffer(data->gs, data->crtc_bo);
- data->crtc_bo = NULL;
- }
- if (data->next_bo != NULL) {
- KMSDRM_gbm_surface_release_buffer(data->gs, data->next_bo);
- data->next_bo = NULL;
- }
- if (data->current_bo != NULL) {
- KMSDRM_gbm_surface_release_buffer(data->gs, data->current_bo);
- data->current_bo = NULL;
- }
-#if SDL_VIDEO_OPENGL_EGL
- SDL_EGL_MakeCurrent(_this, EGL_NO_SURFACE, EGL_NO_CONTEXT);
- if (data->egl_surface != EGL_NO_SURFACE) {
- SDL_EGL_DestroySurface(_this, data->egl_surface);
- }
-#endif /* SDL_VIDEO_OPENGL_EGL */
- if (data->gs != NULL) {
- KMSDRM_gbm_surface_destroy(data->gs);
- data->gs = NULL;
- }
- SDL_free(data);
- window->driverdata = NULL;
- }
-}
-
-int
-KMSDRM_CreateWindowFrom(_THIS, SDL_Window * window, const void *data)
-{
- return -1;
-}
-
-void
-KMSDRM_SetWindowTitle(_THIS, SDL_Window * window)
-{
-}
-void
-KMSDRM_SetWindowIcon(_THIS, SDL_Window * window, SDL_Surface * icon)
-{
-}
-void
-KMSDRM_SetWindowPosition(_THIS, SDL_Window * window)
-{
-}
-void
-KMSDRM_SetWindowSize(_THIS, SDL_Window * window)
-{
-}
-void
-KMSDRM_ShowWindow(_THIS, SDL_Window * window)
-{
-}
-void
-KMSDRM_HideWindow(_THIS, SDL_Window * window)
-{
-}
-void
-KMSDRM_RaiseWindow(_THIS, SDL_Window * window)
-{
-}
-void
-KMSDRM_MaximizeWindow(_THIS, SDL_Window * window)
-{
-}
-void
-KMSDRM_MinimizeWindow(_THIS, SDL_Window * window)
-{
-}
-void
-KMSDRM_RestoreWindow(_THIS, SDL_Window * window)
-{
-}
-void
-KMSDRM_SetWindowGrab(_THIS, SDL_Window * window, SDL_bool grabbed)
-{
-
-}
-
-/*****************************************************************************/
-/* SDL Window Manager function */
-/*****************************************************************************/
-SDL_bool
-KMSDRM_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);
- return SDL_FALSE;
- }
-
- /* Failed to get window manager information */
- return SDL_FALSE;
-}
-
-#endif /* SDL_VIDEO_DRIVER_KMSDRM */
-
-/* vi: set ts=4 sw=4 expandtab: */