From 44a0f1d9cd219ee9e0cf7292f07b6ef311a322fc Mon Sep 17 00:00:00 2001 From: Brandon Schaefer Date: Fri, 2 May 2014 12:33:19 -0700 Subject: [PATCH] Fix software rendering in the mir backend. The window assumed hardware buffer, which caused testdrawchessboard to fail to mmap a buffer. --- src/video/mir/SDL_mirframebuffer.c | 2 ++ src/video/mir/SDL_mirvideo.c | 1 + src/video/mir/SDL_mirvideo.h | 2 ++ src/video/mir/SDL_mirwindow.c | 3 +++ src/video/mir/SDL_mirwindow.h | 1 + 5 files changed, 9 insertions(+) diff --git a/src/video/mir/SDL_mirframebuffer.c b/src/video/mir/SDL_mirframebuffer.c index f8b46649a9f14..212c4a788e5eb 100644 --- a/src/video/mir/SDL_mirframebuffer.c +++ b/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."); diff --git a/src/video/mir/SDL_mirvideo.c b/src/video/mir/SDL_mirvideo.c index 8ffd1726073de..490e05718d571 100644 --- a/src/video/mir/SDL_mirvideo.c +++ b/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"); diff --git a/src/video/mir/SDL_mirvideo.h b/src/video/mir/SDL_mirvideo.h index edeca01a4b1d9..5a46d09c0c7e0 100644 --- a/src/video/mir/SDL_mirvideo.h +++ b/src/video/mir/SDL_mirvideo.h @@ -32,6 +32,8 @@ typedef struct { MirConnection* connection; + SDL_bool software; + } MIR_Data; #endif /* _SDL_mirvideo_h_ */ diff --git a/src/video/mir/SDL_mirwindow.c b/src/video/mir/SDL_mirwindow.c index d233db47ffdce..2359c5129a16a 100644 --- a/src/video/mir/SDL_mirwindow.c +++ b/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; diff --git a/src/video/mir/SDL_mirwindow.h b/src/video/mir/SDL_mirwindow.h index 411c1485f543f..39d5e7444e2ce 100644 --- a/src/video/mir/SDL_mirwindow.h +++ b/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;