diff options
Diffstat (limited to 'include/backend/drm/renderer.h')
-rw-r--r-- | include/backend/drm/renderer.h | 56 |
1 files changed, 36 insertions, 20 deletions
diff --git a/include/backend/drm/renderer.h b/include/backend/drm/renderer.h index 567cf95e..bfccf9d5 100644 --- a/include/backend/drm/renderer.h +++ b/include/backend/drm/renderer.h @@ -10,6 +10,7 @@ struct wlr_drm_backend; struct wlr_drm_plane; +struct wlr_buffer; struct wlr_drm_renderer { int fd; @@ -29,33 +30,48 @@ struct wlr_drm_surface { struct gbm_surface *gbm; EGLSurface egl; +}; + +enum wlr_drm_fb_type { + WLR_DRM_FB_TYPE_NONE, + WLR_DRM_FB_TYPE_SURFACE, + WLR_DRM_FB_TYPE_WLR_BUFFER +}; + +struct wlr_drm_fb { + enum wlr_drm_fb_type type; + struct gbm_bo *bo; + + struct wlr_drm_surface *mgpu_surf; + struct gbm_bo *mgpu_bo; - struct gbm_bo *front; - struct gbm_bo *back; + union { + struct wlr_drm_surface *surf; + struct wlr_buffer *wlr_buf; + }; }; bool init_drm_renderer(struct wlr_drm_backend *drm, struct wlr_drm_renderer *renderer, wlr_renderer_create_func_t create_render); 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, - uint32_t format, struct wlr_drm_format_set *set, uint32_t flags); - -bool init_drm_plane_surfaces(struct wlr_drm_plane *plane, - struct wlr_drm_backend *drm, int32_t width, uint32_t height, - uint32_t format, bool with_modifiers); - -void finish_drm_surface(struct wlr_drm_surface *surf); -bool make_drm_surface_current(struct wlr_drm_surface *surf, int *buffer_age); -struct gbm_bo *swap_drm_surface_buffers(struct wlr_drm_surface *surf, - pixman_region32_t *damage); -struct gbm_bo *get_drm_surface_front(struct wlr_drm_surface *surf); -void post_drm_surface(struct wlr_drm_surface *surf); -struct gbm_bo *copy_drm_surface_mgpu(struct wlr_drm_surface *dest, - struct gbm_bo *src); -struct gbm_bo *import_gbm_bo(struct wlr_drm_renderer *renderer, - struct wlr_dmabuf_attributes *attribs); +bool drm_surface_make_current(struct wlr_drm_surface *surf, int *buffer_age); bool export_drm_bo(struct gbm_bo *bo, struct wlr_dmabuf_attributes *attribs); +void drm_fb_clear(struct wlr_drm_fb *fb); +bool drm_fb_lock_surface(struct wlr_drm_fb *fb, struct wlr_drm_surface *surf); +bool drm_fb_import_wlr(struct wlr_drm_fb *fb, struct wlr_drm_renderer *renderer, + struct wlr_buffer *buf, struct wlr_drm_format_set *set); + +void drm_fb_move(struct wlr_drm_fb *new, struct wlr_drm_fb *old); + +bool drm_surface_render_black_frame(struct wlr_drm_surface *surf); +struct gbm_bo *drm_fb_acquire(struct wlr_drm_fb *fb, struct wlr_drm_backend *drm, + struct wlr_drm_surface *mgpu); + +bool drm_plane_init_surface(struct wlr_drm_plane *plane, + struct wlr_drm_backend *drm, int32_t width, uint32_t height, + uint32_t format, uint32_t flags, bool with_modifiers); +void drm_plane_finish_surface(struct wlr_drm_plane *plane); + #endif |