SDL_kmsdrmvideo.h
Go to the documentation of this file.
/*
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"
#ifndef __SDL_KMSDRMVIDEO_H__
#define __SDL_KMSDRMVIDEO_H__
#include "../SDL_sysvideo.h"
#include <fcntl.h>
#include <unistd.h>
#include <poll.h>
#include <xf86drm.h>
#include <xf86drmMode.h>
#include <gbm.h>
#if SDL_VIDEO_OPENGL_EGL
#include <EGL/egl.h>
#endif
typedef struct SDL_VideoData
{
int devindex; /* device index that was passed on creation */
int drm_fd; /* DRM file desc */
struct gbm_device *gbm;
drmEventContext drm_evctx; /* DRM event context */
struct pollfd drm_pollfd; /* pollfd containing DRM file desc */
drmModeCrtc *saved_crtc; /* Saved CRTC to restore on quit */
uint32_t saved_conn_id; /* Saved DRM connector ID */
uint32_t crtc_id; /* CRTC in use */
} SDL_VideoData;
typedef struct SDL_DisplayData
{
uint32_t encoder_id;
uint32_t crtc_id;
drmModeModeInfo cur_mode;
} SDL_DisplayData;
typedef struct SDL_WindowData
{
struct gbm_surface *gs;
struct gbm_bo *current_bo;
struct gbm_bo *next_bo;
SDL_bool waiting_for_flip;
SDL_bool crtc_ready;
SDL_bool double_buffer;
#if SDL_VIDEO_OPENGL_EGL
EGLSurface egl_surface;
#endif
} SDL_WindowData;
typedef struct KMSDRM_FBInfo
{
int drm_fd; /* DRM file desc */
uint32_t fb_id; /* DRM framebuffer ID */
} KMSDRM_FBInfo;
/* Helper functions */
KMSDRM_FBInfo *KMSDRM_FBFromBO(_THIS, struct gbm_bo *bo);
SDL_bool KMSDRM_WaitPageFlip(_THIS, SDL_WindowData *wdata, int timeout);
/****************************************************************************/
/* SDL_VideoDevice functions declaration */
/****************************************************************************/
/* Display and window functions */
int KMSDRM_VideoInit(_THIS);
void KMSDRM_VideoQuit(_THIS);
void KMSDRM_GetDisplayModes(_THIS, SDL_VideoDisplay * display);
int KMSDRM_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode);
int KMSDRM_CreateWindow(_THIS, SDL_Window * window);
int KMSDRM_CreateWindowFrom(_THIS, SDL_Window * window, const void *data);
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);
void KMSDRM_DestroyWindow(_THIS, SDL_Window * window);
/* Window manager function */
SDL_bool KMSDRM_GetWindowWMInfo(_THIS, SDL_Window * window,
struct SDL_SysWMinfo *info);
/* OpenGL/OpenGL ES functions */
int KMSDRM_GLES_LoadLibrary(_THIS, const char *path);
void *KMSDRM_GLES_GetProcAddress(_THIS, const char *proc);
void KMSDRM_GLES_UnloadLibrary(_THIS);
SDL_GLContext KMSDRM_GLES_CreateContext(_THIS, SDL_Window * window);
int KMSDRM_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context);
int KMSDRM_GLES_SetSwapInterval(_THIS, int interval);
int KMSDRM_GLES_GetSwapInterval(_THIS);
int KMSDRM_GLES_SwapWindow(_THIS, SDL_Window * window);
void KMSDRM_GLES_DeleteContext(_THIS, SDL_GLContext context);
#endif /* __SDL_KMSDRMVIDEO_H__ */
/* vi: set ts=4 sw=4 expandtab: */
KMSDRM_SetDisplayMode
int KMSDRM_SetDisplayMode(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode)
KMSDRM_GLES_GetSwapInterval
int KMSDRM_GLES_GetSwapInterval(_THIS)
SDL_WindowData::double_buffer
SDL_bool double_buffer
Definition: SDL_kmsdrmvideo.h:67
SDL_VideoData::drm_fd
int drm_fd
Definition: SDL_kmsdrmvideo.h:42
SDL_DisplayData::cur_mode
drmModeModeInfo cur_mode
Definition: SDL_kmsdrmvideo.h:56
KMSDRM_SetWindowSize
void KMSDRM_SetWindowSize(_THIS, SDL_Window *window)
KMSDRM_GLES_GetProcAddress
void * KMSDRM_GLES_GetProcAddress(_THIS, const char *proc)
SDL_WindowData::waiting_for_flip
SDL_bool waiting_for_flip
Definition: SDL_kmsdrmvideo.h:65
EGLSurface
void * EGLSurface
Definition: egl.h:59
SDL_VideoData::drm_pollfd
struct pollfd drm_pollfd
Definition: SDL_kmsdrmvideo.h:45
SDL_WindowData::current_bo
struct gbm_bo * current_bo
Definition: SDL_kmsdrmvideo.h:63
SDL_VideoData::display
struct wl_display * display
Definition: SDL_waylandvideo.h:40
KMSDRM_MaximizeWindow
void KMSDRM_MaximizeWindow(_THIS, SDL_Window *window)
SDL_Surface
A collection of pixels used in software blitting.
Definition: SDL_surface.h:69
SDL_DisplayMode
The structure that defines a display mode.
Definition: SDL_video.h:53
KMSDRM_CreateWindowFrom
int KMSDRM_CreateWindowFrom(_THIS, SDL_Window *window, const void *data)
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1974
KMSDRM_GLES_SetSwapInterval
int KMSDRM_GLES_SetSwapInterval(_THIS, int interval)
KMSDRM_GLES_LoadLibrary
int KMSDRM_GLES_LoadLibrary(_THIS, const char *path)
SDL_DisplayData::crtc_id
uint32_t crtc_id
Definition: SDL_kmsdrmvideo.h:55
KMSDRM_GLES_UnloadLibrary
void KMSDRM_GLES_UnloadLibrary(_THIS)
KMSDRM_GLES_CreateContext
SDL_GLContext KMSDRM_GLES_CreateContext(_THIS, SDL_Window *window)
KMSDRM_CreateWindow
int KMSDRM_CreateWindow(_THIS, SDL_Window *window)
SDL_DisplayData
Definition: SDL_cocoamodes.h:26
SDL_WindowData
Definition: SDL_androidwindow.h:35
egl.h
KMSDRM_SetWindowGrab
void KMSDRM_SetWindowGrab(_THIS, SDL_Window *window, SDL_bool grabbed)
SDL_GLContext
void * SDL_GLContext
An opaque handle to an OpenGL context.
Definition: SDL_video.h:175
SDL_SysWMinfo
Definition: SDL_syswm.h:194
KMSDRM_VideoInit
int KMSDRM_VideoInit(_THIS)
_THIS
#define _THIS
Definition: SDL_alsa_audio.h:31
KMSDRM_GLES_MakeCurrent
int KMSDRM_GLES_MakeCurrent(_THIS, SDL_Window *window, SDL_GLContext context)
KMSDRM_FBInfo
Definition: SDL_kmsdrmvideo.h:73
mode
GLenum mode
Definition: SDL_opengl_glext.h:1122
SDL_VideoData::drm_evctx
drmEventContext drm_evctx
Definition: SDL_kmsdrmvideo.h:44
KMSDRM_RestoreWindow
void KMSDRM_RestoreWindow(_THIS, SDL_Window *window)
SDL_WindowData::crtc_ready
SDL_bool crtc_ready
Definition: SDL_kmsdrmvideo.h:66
KMSDRM_SetWindowIcon
void KMSDRM_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon)
KMSDRM_HideWindow
void KMSDRM_HideWindow(_THIS, SDL_Window *window)
SDL_VideoDisplay
Definition: SDL_sysvideo.h:125
SDL_VideoData::gbm
struct gbm_device * gbm
Definition: SDL_kmsdrmvideo.h:43
SDL_VideoData::devindex
int devindex
Definition: SDL_kmsdrmvideo.h:41
KMSDRM_GetWindowWMInfo
SDL_bool KMSDRM_GetWindowWMInfo(_THIS, SDL_Window *window, struct SDL_SysWMinfo *info)
KMSDRM_WaitPageFlip
SDL_bool KMSDRM_WaitPageFlip(_THIS, SDL_WindowData *wdata, int timeout)
SDL_bool
SDL_bool
Definition: SDL_stdinc.h:139
uint32_t
unsigned int uint32_t
Definition: SDL_config_windows.h:63
KMSDRM_SetWindowPosition
void KMSDRM_SetWindowPosition(_THIS, SDL_Window *window)
SDL_VideoData::crtc_id
uint32_t crtc_id
Definition: SDL_kmsdrmvideo.h:48
KMSDRM_RaiseWindow
void KMSDRM_RaiseWindow(_THIS, SDL_Window *window)
window
EGLSurface EGLNativeWindowType * window
Definition: eglext.h:1025
KMSDRM_GLES_DeleteContext
void KMSDRM_GLES_DeleteContext(_THIS, SDL_GLContext context)
SDL_WindowData::gs
struct gbm_surface * gs
Definition: SDL_kmsdrmvideo.h:62
SDL_Window
The type used to identify a window.
Definition: SDL_sysvideo.h:73
timeout
GLbitfield GLuint64 timeout
Definition: SDL_opengl_glext.h:1483
KMSDRM_MinimizeWindow
void KMSDRM_MinimizeWindow(_THIS, SDL_Window *window)
KMSDRM_SetWindowTitle
void KMSDRM_SetWindowTitle(_THIS, SDL_Window *window)
KMSDRM_GetDisplayModes
void KMSDRM_GetDisplayModes(_THIS, SDL_VideoDisplay *display)
SDL_VideoData
Definition: SDL_androidvideo.h:35
SDL_WindowData::next_bo
struct gbm_bo * next_bo
Definition: SDL_kmsdrmvideo.h:64
path
GLsizei const GLchar *const * path
Definition: SDL_opengl_glext.h:3730
KMSDRM_FBFromBO
KMSDRM_FBInfo * KMSDRM_FBFromBO(_THIS, struct gbm_bo *bo)
SDL_DisplayData::encoder_id
uint32_t encoder_id
Definition: SDL_kmsdrmvideo.h:54
KMSDRM_GLES_SwapWindow
int KMSDRM_GLES_SwapWindow(_THIS, SDL_Window *window)
KMSDRM_ShowWindow
void KMSDRM_ShowWindow(_THIS, SDL_Window *window)
SDL_VideoData::context
EGLContext context
Definition: SDL_waylandvideo.h:56
SDL_VideoData::saved_crtc
drmModeCrtc * saved_crtc
Definition: SDL_kmsdrmvideo.h:46
KMSDRM_VideoQuit
void KMSDRM_VideoQuit(_THIS)
SDL_VideoData::saved_conn_id
uint32_t saved_conn_id
Definition: SDL_kmsdrmvideo.h:47
KMSDRM_FBInfo::drm_fd
int drm_fd
Definition: SDL_kmsdrmvideo.h:75
KMSDRM_FBInfo::fb_id
uint32_t fb_id
Definition: SDL_kmsdrmvideo.h:76
KMSDRM_DestroyWindow
void KMSDRM_DestroyWindow(_THIS, SDL_Window *window)