aboutsummaryrefslogtreecommitdiff
path: root/include/backend/drm/renderer.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/backend/drm/renderer.h')
-rw-r--r--include/backend/drm/renderer.h56
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