diff --git a/CMakeLists.txt b/CMakeLists.txt index 4705c714e..6d60cec3d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -430,6 +430,7 @@ dep_option(SDL_WAYLAND_LIBDECOR "Use client-side window decorations on Waylan dep_option(SDL_WAYLAND_LIBDECOR_SHARED "Dynamically load libdecor support" ON "SDL_WAYLAND_LIBDECOR;SDL_WAYLAND_SHARED" OFF) dep_option(SDL_WAYLAND_QT_TOUCH "QtWayland server support for Wayland video driver" ON "SDL_WAYLAND" OFF) set_option(SDL_RPI "Use Raspberry Pi video driver" ${UNIX_SYS}) +set_option(SDL_ROCKCHIP "Use ROCKCHIP Hardware Acceleration video driver" ${UNIX_SYS}) set_option(SDL_COCOA "Use Cocoa video driver" ${APPLE}) set_option(SDL_DIRECTX "Use DirectX for Windows audio/video" ${WINDOWS}) set_option(SDL_XINPUT "Use Xinput for Windows" ${WINDOWS}) @@ -1388,6 +1389,8 @@ elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU) if(SDL_VIDEO) # Need to check for Raspberry PI first and add platform specific compiler flags, otherwise the test for GLES fails! CheckRPI() + # Need to check for ROCKCHIP platform and get rid of "Can't window GBM/EGL surfaces on window creation." + CheckROCKCHIP() CheckX11() # Need to check for EGL first because KMSDRM and Wayland depends on it. CheckEGL() diff --git a/cmake/sdlchecks.cmake b/cmake/sdlchecks.cmake index 39e788687..84a104c35 100644 --- a/cmake/sdlchecks.cmake +++ b/cmake/sdlchecks.cmake @@ -675,7 +675,7 @@ macro(CheckGLX) check_c_source_compiles(" #include int main(int argc, char** argv) { return 0; }" HAVE_OPENGL_GLX) - if(HAVE_OPENGL_GLX) + if(HAVE_OPENGL_GLX AND NOT HAVE_ROCKCHIP) set(SDL_VIDEO_OPENGL_GLX 1) endif() endif() @@ -1115,6 +1115,21 @@ macro(CheckRPI) endif() endmacro() +# Requires: +# - n/a +macro(CheckROCKCHIP) + if(SDL_ROCKCHIP) + pkg_check_modules(VIDEO_ROCKCHIP mali) + if (VIDEO_ROCKCHIP_FOUND) + set(HAVE_ROCKCHIP TRUE) + endif() + if(SDL_VIDEO AND HAVE_ROCKCHIP) + set(HAVE_SDL_VIDEO TRUE) + set(SDL_VIDEO_DRIVER_ROCKCHIP 1) + endif() + endif() +endmacro() + # Requires: # - EGL # - PkgCheckModules diff --git a/include/build_config/SDL_build_config.h.cmake b/include/build_config/SDL_build_config.h.cmake index 6ffea5ae0..96eb44e51 100644 --- a/include/build_config/SDL_build_config.h.cmake +++ b/include/build_config/SDL_build_config.h.cmake @@ -393,6 +393,7 @@ #cmakedefine SDL_VIDEO_DRIVER_WINRT @SDL_VIDEO_DRIVER_WINRT@ #cmakedefine SDL_VIDEO_DRIVER_WAYLAND @SDL_VIDEO_DRIVER_WAYLAND@ #cmakedefine SDL_VIDEO_DRIVER_RPI @SDL_VIDEO_DRIVER_RPI@ +#cmakedefine SDL_VIDEO_DRIVER_ROCKCHIP @SDL_VIDEO_DRIVER_ROCKCHIP@ #cmakedefine SDL_VIDEO_DRIVER_VIVANTE @SDL_VIDEO_DRIVER_VIVANTE@ #cmakedefine SDL_VIDEO_DRIVER_VIVANTE_VDK @SDL_VIDEO_DRIVER_VIVANTE_VDK@ #cmakedefine SDL_VIDEO_DRIVER_RISCOS @SDL_VIDEO_DRIVER_RISCOS@ diff --git a/src/video/kmsdrm/SDL_kmsdrmopengles.c b/src/video/kmsdrm/SDL_kmsdrmopengles.c index 54873527e..8d3bb3785 100644 --- a/src/video/kmsdrm/SDL_kmsdrmopengles.c +++ b/src/video/kmsdrm/SDL_kmsdrmopengles.c @@ -37,8 +37,9 @@ void KMSDRM_GLES_DefaultProfileConfig(_THIS, int *mask, int *major, int *minor) { /* if SDL was _also_ built with the Raspberry Pi driver (so we're - definitely a Pi device), default to GLES2. */ -#if SDL_VIDEO_DRIVER_RPI + definitely a Pi device) or with the ROCKCHIP video driver + (it's a ROCKCHIP device), default to GLES2. */ +#if defined(SDL_VIDEO_DRIVER_RPI) || defined(SDL_VIDEO_DRIVER_ROCKCHIP) *mask = SDL_GL_CONTEXT_PROFILE_ES; *major = 2; *minor = 0; diff --git a/src/video/kmsdrm/SDL_kmsdrmvideo.c b/src/video/kmsdrm/SDL_kmsdrmvideo.c index 33ea8a1f2..30d0187ab 100644 --- a/src/video/kmsdrm/SDL_kmsdrmvideo.c +++ b/src/video/kmsdrm/SDL_kmsdrmvideo.c @@ -302,7 +302,9 @@ static SDL_VideoDevice *KMSDRM_CreateDevice(void) return device; cleanup: - SDL_free(device); + if (device) { + SDL_free(device); + } if (viddata) { SDL_free(viddata);