Commit c26946e9f2d03222e38399a2cf3ba5fbefddfa61

Sam Lantinga 2017-09-01T12:54:38

Fixed bug 3792 - [KMS/DRM] Wrong GBM format Romain Tisserand Using KMS/DRM driver from WIP SDL2.0.6 on Linux/ARM SoC RockChip RK3328 (ARM Mali 450 MP2 GPU). The current code is using GBM_BO_FORMAT_XRGB8888 as GBM buffer format specifier. The Mali driver (it has been confirmed some other vendor implementations too) expects GBM_FORMAT_XRGB8888. The Mesa implementation is actually handling both values as the same, but it's not implemented like this into every gbm.h vendor header. https://github.com/ideak/mesa/blob/master/src/gbm/backends/dri/gbm_dri.c So with stock SDL2 on my card (Mali vendor implementation), it does not work, eglCreateWindowSurface fails, and gbm_is_format_supported fails too (with the BO variant). It runs fine with GBM_FORMAT_XRGB8888. Here is a link of the gbm.h from Mali user-space driver : https://github.com/rockchip-linux/libmali/blob/rockchip/include/gbm.h

1
2
3
4
5
6
7
8
9
10
11
12
13
diff --git a/src/video/kmsdrm/SDL_kmsdrmvideo.c b/src/video/kmsdrm/SDL_kmsdrmvideo.c
index 16a0737..63376f2 100644
--- a/src/video/kmsdrm/SDL_kmsdrmvideo.c
+++ b/src/video/kmsdrm/SDL_kmsdrmvideo.c
@@ -500,7 +500,7 @@ KMSDRM_CreateWindow(_THIS, SDL_Window * window)
     /* 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_BO_FORMAT_XRGB8888;
+    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)) {