mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-10-29 05:40:12 -04:00
render: unify getter for texture formats
Instead of having separate getters for shm formats and DMA-BUF formats, use the same pattern as wlr_output_impl.get_primary_formats with a single function which takes buffer caps as input.
This commit is contained in:
parent
c63275d75e
commit
85c1eda721
12 changed files with 78 additions and 67 deletions
|
|
@ -150,16 +150,13 @@ const struct wlr_gles2_pixel_format *get_gles2_format_from_gl(
|
|||
return NULL;
|
||||
}
|
||||
|
||||
const uint32_t *get_gles2_shm_formats(const struct wlr_gles2_renderer *renderer,
|
||||
size_t *len) {
|
||||
static uint32_t shm_formats[sizeof(formats) / sizeof(formats[0])];
|
||||
size_t j = 0;
|
||||
void get_gles2_shm_formats(const struct wlr_gles2_renderer *renderer,
|
||||
struct wlr_drm_format_set *out) {
|
||||
for (size_t i = 0; i < sizeof(formats) / sizeof(formats[0]); i++) {
|
||||
if (!is_gles2_pixel_format_supported(renderer, &formats[i])) {
|
||||
continue;
|
||||
}
|
||||
shm_formats[j++] = formats[i].drm_format;
|
||||
wlr_drm_format_set_add(out, formats[i].drm_format, DRM_FORMAT_MOD_INVALID);
|
||||
wlr_drm_format_set_add(out, formats[i].drm_format, DRM_FORMAT_MOD_LINEAR);
|
||||
}
|
||||
*len = j;
|
||||
return shm_formats;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -165,16 +165,16 @@ error_buffer:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static const uint32_t *gles2_get_shm_texture_formats(
|
||||
struct wlr_renderer *wlr_renderer, size_t *len) {
|
||||
static const struct wlr_drm_format_set *gles2_get_texture_formats(
|
||||
struct wlr_renderer *wlr_renderer, uint32_t buffer_caps) {
|
||||
struct wlr_gles2_renderer *renderer = gles2_get_renderer(wlr_renderer);
|
||||
return get_gles2_shm_formats(renderer, len);
|
||||
}
|
||||
|
||||
static const struct wlr_drm_format_set *gles2_get_dmabuf_texture_formats(
|
||||
struct wlr_renderer *wlr_renderer) {
|
||||
struct wlr_gles2_renderer *renderer = gles2_get_renderer(wlr_renderer);
|
||||
return wlr_egl_get_dmabuf_texture_formats(renderer->egl);
|
||||
if (buffer_caps & WLR_BUFFER_CAP_DMABUF) {
|
||||
return wlr_egl_get_dmabuf_texture_formats(renderer->egl);
|
||||
} else if (buffer_caps & WLR_BUFFER_CAP_DATA_PTR) {
|
||||
return &renderer->shm_texture_formats;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static const struct wlr_drm_format_set *gles2_get_render_formats(
|
||||
|
|
@ -234,6 +234,8 @@ static void gles2_destroy(struct wlr_renderer *wlr_renderer) {
|
|||
wlr_egl_unset_current(renderer->egl);
|
||||
wlr_egl_destroy(renderer->egl);
|
||||
|
||||
wlr_drm_format_set_finish(&renderer->shm_texture_formats);
|
||||
|
||||
if (renderer->drm_fd >= 0) {
|
||||
close(renderer->drm_fd);
|
||||
}
|
||||
|
|
@ -356,8 +358,7 @@ static void gles2_render_timer_destroy(struct wlr_render_timer *wlr_timer) {
|
|||
|
||||
static const struct wlr_renderer_impl renderer_impl = {
|
||||
.destroy = gles2_destroy,
|
||||
.get_shm_texture_formats = gles2_get_shm_texture_formats,
|
||||
.get_dmabuf_texture_formats = gles2_get_dmabuf_texture_formats,
|
||||
.get_texture_formats = gles2_get_texture_formats,
|
||||
.get_render_formats = gles2_get_render_formats,
|
||||
.get_drm_fd = gles2_get_drm_fd,
|
||||
.get_render_buffer_caps = gles2_get_render_buffer_caps,
|
||||
|
|
@ -684,6 +685,8 @@ struct wlr_renderer *wlr_gles2_renderer_create(struct wlr_egl *egl) {
|
|||
|
||||
wlr_egl_unset_current(renderer->egl);
|
||||
|
||||
get_gles2_shm_formats(renderer, &renderer->shm_texture_formats);
|
||||
|
||||
return &renderer->wlr_renderer;
|
||||
|
||||
error:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue