From f91f38b79af2bcd091da7347e83066dea679a1bd Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Wed, 25 May 2022 15:55:41 +0200 Subject: [PATCH] backend/drm: remove wlr_drm_surface.{width,height} This information is stored in wlr_swapchain, no need to duplicate it. --- backend/drm/renderer.c | 52 ++++++++++++++++------------------ include/backend/drm/renderer.h | 6 +--- 2 files changed, 25 insertions(+), 33 deletions(-) diff --git a/backend/drm/renderer.c b/backend/drm/renderer.c index 792de938..60155313 100644 --- a/backend/drm/renderer.c +++ b/backend/drm/renderer.c @@ -48,31 +48,6 @@ void finish_drm_renderer(struct wlr_drm_renderer *renderer) { wlr_renderer_destroy(renderer->wlr_rend); } -bool init_drm_surface(struct wlr_drm_surface *surf, - struct wlr_drm_renderer *renderer, uint32_t width, uint32_t height, - const struct wlr_drm_format *drm_format) { - if (surf->width == width && surf->height == height) { - return true; - } - - surf->renderer = renderer; - surf->width = width; - surf->height = height; - - wlr_swapchain_destroy(surf->swapchain); - surf->swapchain = NULL; - - surf->swapchain = wlr_swapchain_create(renderer->allocator, width, height, - drm_format); - if (surf->swapchain == NULL) { - wlr_log(WLR_ERROR, "Failed to create swapchain"); - memset(surf, 0, sizeof(*surf)); - return false; - } - - return true; -} - static void finish_drm_surface(struct wlr_drm_surface *surf) { if (!surf || !surf->renderer) { return; @@ -83,12 +58,33 @@ static void finish_drm_surface(struct wlr_drm_surface *surf) { memset(surf, 0, sizeof(*surf)); } +bool init_drm_surface(struct wlr_drm_surface *surf, + struct wlr_drm_renderer *renderer, int width, int height, + const struct wlr_drm_format *drm_format) { + if (surf->swapchain->width == width && surf->swapchain->height == height) { + return true; + } + + finish_drm_surface(surf); + + surf->swapchain = wlr_swapchain_create(renderer->allocator, width, height, + drm_format); + if (surf->swapchain == NULL) { + wlr_log(WLR_ERROR, "Failed to create swapchain"); + return false; + } + + surf->renderer = renderer; + + return true; +} + struct wlr_buffer *drm_surface_blit(struct wlr_drm_surface *surf, struct wlr_buffer *buffer) { struct wlr_renderer *renderer = surf->renderer->wlr_rend; - if (surf->width != (uint32_t)buffer->width || - surf->height != (uint32_t)buffer->height) { + if (surf->swapchain->width != buffer->width || + surf->swapchain->height != buffer->height) { wlr_log(WLR_ERROR, "Surface size doesn't match buffer size"); return NULL; } @@ -106,7 +102,7 @@ struct wlr_buffer *drm_surface_blit(struct wlr_drm_surface *surf, float mat[9]; wlr_matrix_identity(mat); - wlr_matrix_scale(mat, surf->width, surf->height); + wlr_matrix_scale(mat, surf->swapchain->width, surf->swapchain->height); if (!wlr_renderer_begin_with_buffer(renderer, dst)) { wlr_buffer_unlock(dst); diff --git a/include/backend/drm/renderer.h b/include/backend/drm/renderer.h index 52a2a053..77ed4127 100644 --- a/include/backend/drm/renderer.h +++ b/include/backend/drm/renderer.h @@ -19,10 +19,6 @@ struct wlr_drm_renderer { struct wlr_drm_surface { struct wlr_drm_renderer *renderer; - - uint32_t width; - uint32_t height; - struct wlr_swapchain *swapchain; }; @@ -40,7 +36,7 @@ bool init_drm_renderer(struct wlr_drm_backend *drm, void finish_drm_renderer(struct wlr_drm_renderer *renderer); bool init_drm_surface(struct wlr_drm_surface *surf, - struct wlr_drm_renderer *renderer, uint32_t width, uint32_t height, + struct wlr_drm_renderer *renderer, int width, int height, const struct wlr_drm_format *drm_format); bool drm_fb_import(struct wlr_drm_fb **fb, struct wlr_drm_backend *drm,