render: remove wl_drm support from wlr_renderer
Everything needs to go through the unified wlr_buffer interface now. If necessary, there are two ways support for EGL_WL_bind_wayland_display could be restored by compositors: - Either by using GBM to convert back EGL Wayland buffers to DMA-BUFs, then wrap the DMA-BUF into a wlr_buffer. - Or by wrapping the EGL Wayland buffer into a special wlr_buffer that doesn't implement any wlr_buffer_impl hook, and special-case that buffer type in the renderer.
This commit is contained in:
parent
4e07d4cbf9
commit
e5b5592a95
|
@ -30,12 +30,8 @@ struct wlr_renderer_impl {
|
||||||
const float matrix[static 9], float alpha);
|
const float matrix[static 9], float alpha);
|
||||||
void (*render_quad_with_matrix)(struct wlr_renderer *renderer,
|
void (*render_quad_with_matrix)(struct wlr_renderer *renderer,
|
||||||
const float color[static 4], const float matrix[static 9]);
|
const float color[static 4], const float matrix[static 9]);
|
||||||
const uint32_t *(*get_shm_texture_formats)(struct wlr_renderer *renderer,
|
const uint32_t *(*get_shm_texture_formats)(
|
||||||
size_t *len);
|
struct wlr_renderer *renderer, size_t *len);
|
||||||
bool (*resource_is_wl_drm_buffer)(struct wlr_renderer *renderer,
|
|
||||||
struct wl_resource *resource);
|
|
||||||
void (*wl_drm_buffer_get_size)(struct wlr_renderer *renderer,
|
|
||||||
struct wl_resource *buffer, int *width, int *height);
|
|
||||||
const struct wlr_drm_format_set *(*get_dmabuf_texture_formats)(
|
const struct wlr_drm_format_set *(*get_dmabuf_texture_formats)(
|
||||||
struct wlr_renderer *renderer);
|
struct wlr_renderer *renderer);
|
||||||
const struct wlr_drm_format_set *(*get_render_formats)(
|
const struct wlr_drm_format_set *(*get_render_formats)(
|
||||||
|
@ -45,8 +41,6 @@ struct wlr_renderer_impl {
|
||||||
uint32_t *flags, uint32_t stride, uint32_t width, uint32_t height,
|
uint32_t *flags, uint32_t stride, uint32_t width, uint32_t height,
|
||||||
uint32_t src_x, uint32_t src_y, uint32_t dst_x, uint32_t dst_y,
|
uint32_t src_x, uint32_t src_y, uint32_t dst_x, uint32_t dst_y,
|
||||||
void *data);
|
void *data);
|
||||||
struct wlr_texture *(*texture_from_wl_drm)(struct wlr_renderer *renderer,
|
|
||||||
struct wl_resource *data);
|
|
||||||
void (*destroy)(struct wlr_renderer *renderer);
|
void (*destroy)(struct wlr_renderer *renderer);
|
||||||
bool (*init_wl_display)(struct wlr_renderer *renderer,
|
bool (*init_wl_display)(struct wlr_renderer *renderer,
|
||||||
struct wl_display *wl_display);
|
struct wl_display *wl_display);
|
||||||
|
|
|
@ -80,16 +80,6 @@ void wlr_render_quad_with_matrix(struct wlr_renderer *r,
|
||||||
*/
|
*/
|
||||||
const uint32_t *wlr_renderer_get_shm_texture_formats(
|
const uint32_t *wlr_renderer_get_shm_texture_formats(
|
||||||
struct wlr_renderer *r, size_t *len);
|
struct wlr_renderer *r, size_t *len);
|
||||||
/**
|
|
||||||
* Returns true if this wl_buffer is a wl_drm buffer.
|
|
||||||
*/
|
|
||||||
bool wlr_renderer_resource_is_wl_drm_buffer(struct wlr_renderer *renderer,
|
|
||||||
struct wl_resource *buffer);
|
|
||||||
/**
|
|
||||||
* Gets the width and height of a wl_drm buffer.
|
|
||||||
*/
|
|
||||||
void wlr_renderer_wl_drm_buffer_get_size(struct wlr_renderer *renderer,
|
|
||||||
struct wl_resource *buffer, int *width, int *height);
|
|
||||||
/**
|
/**
|
||||||
* Get the DMA-BUF formats supporting sampling usage. Buffers allocated with
|
* Get the DMA-BUF formats supporting sampling usage. Buffers allocated with
|
||||||
* a format from this list may be imported via wlr_texture_from_dmabuf.
|
* a format from this list may be imported via wlr_texture_from_dmabuf.
|
||||||
|
|
|
@ -159,22 +159,6 @@ const uint32_t *wlr_renderer_get_shm_texture_formats(struct wlr_renderer *r,
|
||||||
return r->impl->get_shm_texture_formats(r, len);
|
return r->impl->get_shm_texture_formats(r, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wlr_renderer_resource_is_wl_drm_buffer(struct wlr_renderer *r,
|
|
||||||
struct wl_resource *resource) {
|
|
||||||
if (!r->impl->resource_is_wl_drm_buffer) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return r->impl->resource_is_wl_drm_buffer(r, resource);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wlr_renderer_wl_drm_buffer_get_size(struct wlr_renderer *r,
|
|
||||||
struct wl_resource *buffer, int *width, int *height) {
|
|
||||||
if (!r->impl->wl_drm_buffer_get_size) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
return r->impl->wl_drm_buffer_get_size(r, buffer, width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
const struct wlr_drm_format_set *wlr_renderer_get_dmabuf_texture_formats(
|
const struct wlr_drm_format_set *wlr_renderer_get_dmabuf_texture_formats(
|
||||||
struct wlr_renderer *r) {
|
struct wlr_renderer *r) {
|
||||||
if (!r->impl->get_dmabuf_texture_formats) {
|
if (!r->impl->get_dmabuf_texture_formats) {
|
||||||
|
|
|
@ -45,14 +45,6 @@ struct wlr_texture *wlr_texture_from_pixels(struct wlr_renderer *renderer,
|
||||||
return texture;
|
return texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct wlr_texture *wlr_texture_from_wl_drm(struct wlr_renderer *renderer,
|
|
||||||
struct wl_resource *data) {
|
|
||||||
if (!renderer->impl->texture_from_wl_drm) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return renderer->impl->texture_from_wl_drm(renderer, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct wlr_texture *wlr_texture_from_dmabuf(struct wlr_renderer *renderer,
|
struct wlr_texture *wlr_texture_from_dmabuf(struct wlr_renderer *renderer,
|
||||||
struct wlr_dmabuf_attributes *attribs) {
|
struct wlr_dmabuf_attributes *attribs) {
|
||||||
struct wlr_dmabuf_buffer *buffer = dmabuf_buffer_create(attribs);
|
struct wlr_dmabuf_buffer *buffer = dmabuf_buffer_create(attribs);
|
||||||
|
|
|
@ -112,10 +112,6 @@ bool wlr_resource_get_buffer_size(struct wl_resource *resource,
|
||||||
if (shm_buf != NULL) {
|
if (shm_buf != NULL) {
|
||||||
*width = wl_shm_buffer_get_width(shm_buf);
|
*width = wl_shm_buffer_get_width(shm_buf);
|
||||||
*height = wl_shm_buffer_get_height(shm_buf);
|
*height = wl_shm_buffer_get_height(shm_buf);
|
||||||
} else if (wlr_renderer_resource_is_wl_drm_buffer(renderer,
|
|
||||||
resource)) {
|
|
||||||
wlr_renderer_wl_drm_buffer_get_size(renderer, resource,
|
|
||||||
width, height);
|
|
||||||
} else if (wlr_dmabuf_v1_resource_is_buffer(resource)) {
|
} else if (wlr_dmabuf_v1_resource_is_buffer(resource)) {
|
||||||
struct wlr_dmabuf_v1_buffer *dmabuf =
|
struct wlr_dmabuf_v1_buffer *dmabuf =
|
||||||
wlr_dmabuf_v1_buffer_from_buffer_resource(resource);
|
wlr_dmabuf_v1_buffer_from_buffer_resource(resource);
|
||||||
|
@ -240,8 +236,6 @@ struct wlr_client_buffer *wlr_client_buffer_import(
|
||||||
// The renderer is responsible for releasing the buffer when
|
// The renderer is responsible for releasing the buffer when
|
||||||
// appropriate
|
// appropriate
|
||||||
resource_released = true;
|
resource_released = true;
|
||||||
} else if (wlr_renderer_resource_is_wl_drm_buffer(renderer, resource)) {
|
|
||||||
texture = wlr_texture_from_wl_drm(renderer, resource);
|
|
||||||
} else if (wlr_dmabuf_v1_resource_is_buffer(resource)) {
|
} else if (wlr_dmabuf_v1_resource_is_buffer(resource)) {
|
||||||
struct wlr_dmabuf_v1_buffer *dmabuf =
|
struct wlr_dmabuf_v1_buffer *dmabuf =
|
||||||
wlr_dmabuf_v1_buffer_from_buffer_resource(resource);
|
wlr_dmabuf_v1_buffer_from_buffer_resource(resource);
|
||||||
|
|
Loading…
Reference in New Issue