From e547e55be079b612a8b81b18cdca09f3c523f939 Mon Sep 17 00:00:00 2001 From: Mariusz Bialonczyk Date: Thu, 2 Aug 2018 23:41:59 +0200 Subject: multi-gpu: do not flip screens on secondary GPU All screens on secondary GPU in multiple GPU configurations was flipped 180. The flipped screens was always on secondary card (the primary card was always correct). Tested on nouveau with: WLR_DRM_DEVICES=/dev/dri/card1:/dev/dri/card2 WLR_DRM_DEVICES=/dev/dri/card2:/dev/dri/card1 The commit is fixing this problem. Now all screens are "normal". --- backend/drm/renderer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'backend/drm/renderer.c') diff --git a/backend/drm/renderer.c b/backend/drm/renderer.c index 38e6315d..b5485327 100644 --- a/backend/drm/renderer.c +++ b/backend/drm/renderer.c @@ -238,7 +238,7 @@ struct gbm_bo *copy_drm_surface_mgpu(struct wlr_drm_surface *dest, assert(tex); float mat[9]; - wlr_matrix_projection(mat, 1, 1, WL_OUTPUT_TRANSFORM_FLIPPED_180); + wlr_matrix_projection(mat, 1, 1, WL_OUTPUT_TRANSFORM_NORMAL); struct wlr_renderer *renderer = dest->renderer->wlr_rend; wlr_renderer_begin(renderer, dest->width, dest->height); -- cgit v1.2.3 From 1a2b3445dcd2c53fa5a1e315e436f5814c8765e6 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Sat, 4 Aug 2018 17:02:53 +1200 Subject: Remove unused data from gbm_bo userdata These aren't used anymore and crashes when the gbm_bo tries to get destroyed (e.g. on hotplug). --- backend/drm/renderer.c | 37 ++++++++++--------------------------- 1 file changed, 10 insertions(+), 27 deletions(-) (limited to 'backend/drm/renderer.c') diff --git a/backend/drm/renderer.c b/backend/drm/renderer.c index b5485327..fa7d090e 100644 --- a/backend/drm/renderer.c +++ b/backend/drm/renderer.c @@ -188,46 +188,29 @@ bool export_drm_bo(struct gbm_bo *bo, struct wlr_dmabuf_attributes *attribs) { return true; } -struct tex { - struct wlr_egl *egl; - EGLImageKHR img; - struct wlr_texture *tex; -}; - -static void free_eglimage(struct gbm_bo *bo, void *data) { - struct tex *tex = data; - - wlr_egl_destroy_image(tex->egl, tex->img); - wlr_texture_destroy(tex->tex); - free(tex); +static void free_tex(struct gbm_bo *bo, void *data) { + struct wlr_texture *tex = data; + wlr_texture_destroy(tex); } static struct wlr_texture *get_tex_for_bo(struct wlr_drm_renderer *renderer, struct gbm_bo *bo) { - struct tex *tex = gbm_bo_get_user_data(bo); - if (tex != NULL) { - return tex->tex; - } - - tex = calloc(1, sizeof(struct tex)); - if (tex == NULL) { - return NULL; + struct wlr_texture *tex = gbm_bo_get_user_data(bo); + if (tex) { + return tex; } struct wlr_dmabuf_attributes attribs; if (!export_drm_bo(bo, &attribs)) { - free(tex); return NULL; } - tex->tex = wlr_texture_from_dmabuf(renderer->wlr_rend, &attribs); - if (tex->tex == NULL) { - free(tex); - return NULL; + tex = wlr_texture_from_dmabuf(renderer->wlr_rend, &attribs); + if (tex) { + gbm_bo_set_user_data(bo, tex, free_tex); } - gbm_bo_set_user_data(bo, tex, free_eglimage); - return tex->tex; + return tex; } struct gbm_bo *copy_drm_surface_mgpu(struct wlr_drm_surface *dest, -- cgit v1.2.3