Browse Source

Fix software rendering in the mir backend. The window assumed hardware buffer, which caused testdrawchessboard to fail to mmap a buffer.

Brandon Schaefer 11 years ago
parent
commit
44a0f1d9cd

+ 2 - 0
src/video/mir/SDL_mirframebuffer.c

@@ -56,6 +56,8 @@ MIR_CreateWindowFramebuffer(_THIS, SDL_Window* window, Uint32* format,
     MIR_Window* mir_window;
     MirSurfaceParameters surfaceparm;
 
+    mir_data->software = SDL_TRUE;
+
     if (MIR_CreateWindow(_this, window) < 0)
         return SDL_SetError("Failed to created a mir window.");
 

+ 1 - 0
src/video/mir/SDL_mirvideo.c

@@ -273,6 +273,7 @@ MIR_VideoInit(_THIS)
     MIR_Data* mir_data = _this->driverdata;
 
     mir_data->connection = MIR_mir_connect_sync(NULL, __PRETTY_FUNCTION__);
+    mir_data->software = SDL_FALSE;
 
     if (!MIR_mir_connection_is_valid(mir_data->connection))
         return SDL_SetError("Failed to connect to the Mir Server");

+ 2 - 0
src/video/mir/SDL_mirvideo.h

@@ -32,6 +32,8 @@
 typedef struct
 {
     MirConnection* connection;
+    SDL_bool software;
+    
 } MIR_Data;
 
 #endif /* _SDL_mirvideo_h_ */

+ 3 - 0
src/video/mir/SDL_mirwindow.c

@@ -99,6 +99,9 @@ MIR_CreateWindow(_THIS, SDL_Window* window)
     mir_data = _this->driverdata;
     window->driverdata = mir_window;
 
+    if (mir_data->software)
+        surfaceparm.buffer_usage = mir_buffer_usage_software;
+
     if (window->x == SDL_WINDOWPOS_UNDEFINED)
         window->x = 0;
 

+ 1 - 0
src/video/mir/SDL_mirwindow.h

@@ -34,6 +34,7 @@
 typedef struct {
     SDL_Window* sdl_window;
     MIR_Data* mir_data;
+    bool software;
 
     MirSurface* surface;
     EGLSurface egl_surface;