output: split output_pick_cursor_format
Introduce output_pick_format that can be re-used for the primary buffer too.
This commit is contained in:
parent
4d603826c8
commit
233a2617cf
|
@ -1008,7 +1008,8 @@ static void output_cursor_update_visible(struct wlr_output_cursor *cursor) {
|
|||
cursor->visible = visible;
|
||||
}
|
||||
|
||||
static struct wlr_drm_format *output_pick_cursor_format(struct wlr_output *output) {
|
||||
static struct wlr_drm_format *output_pick_format(struct wlr_output *output,
|
||||
const struct wlr_drm_format_set *display_formats) {
|
||||
struct wlr_renderer *renderer = wlr_backend_get_renderer(output->backend);
|
||||
struct wlr_allocator *allocator = backend_get_allocator(output->backend);
|
||||
assert(renderer != NULL && allocator != NULL);
|
||||
|
@ -1020,19 +1021,6 @@ static struct wlr_drm_format *output_pick_cursor_format(struct wlr_output *outpu
|
|||
return NULL;
|
||||
}
|
||||
|
||||
const struct wlr_drm_format_set *display_formats;
|
||||
if (output->impl->get_cursor_formats) {
|
||||
display_formats =
|
||||
output->impl->get_cursor_formats(output, allocator->buffer_caps);
|
||||
if (display_formats == NULL) {
|
||||
wlr_log(WLR_ERROR, "Failed to get display formats");
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
// The backend can display any format
|
||||
display_formats = render_formats;
|
||||
}
|
||||
|
||||
uint32_t fmt = DRM_FORMAT_ARGB8888;
|
||||
|
||||
const struct wlr_drm_format *render_format =
|
||||
|
@ -1042,12 +1030,17 @@ static struct wlr_drm_format *output_pick_cursor_format(struct wlr_output *outpu
|
|||
return NULL;
|
||||
}
|
||||
|
||||
const struct wlr_drm_format *display_format =
|
||||
wlr_drm_format_set_get(display_formats, fmt);
|
||||
const struct wlr_drm_format *display_format;
|
||||
if (display_formats != NULL) {
|
||||
display_format = wlr_drm_format_set_get(display_formats, fmt);
|
||||
if (display_format == NULL) {
|
||||
wlr_log(WLR_DEBUG, "Output doesn't support format 0x%"PRIX32, fmt);
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
// The output can display any format
|
||||
display_format = render_format;
|
||||
}
|
||||
|
||||
struct wlr_drm_format *format =
|
||||
wlr_drm_format_intersect(display_format, render_format);
|
||||
|
@ -1060,6 +1053,23 @@ static struct wlr_drm_format *output_pick_cursor_format(struct wlr_output *outpu
|
|||
return format;
|
||||
}
|
||||
|
||||
static struct wlr_drm_format *output_pick_cursor_format(struct wlr_output *output) {
|
||||
struct wlr_allocator *allocator = backend_get_allocator(output->backend);
|
||||
assert(allocator != NULL);
|
||||
|
||||
const struct wlr_drm_format_set *display_formats = NULL;
|
||||
if (output->impl->get_cursor_formats) {
|
||||
display_formats =
|
||||
output->impl->get_cursor_formats(output, allocator->buffer_caps);
|
||||
if (display_formats == NULL) {
|
||||
wlr_log(WLR_ERROR, "Failed to get cursor display formats");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return output_pick_format(output, display_formats);
|
||||
}
|
||||
|
||||
static struct wlr_buffer *render_cursor_buffer(struct wlr_output_cursor *cursor) {
|
||||
struct wlr_output *output = cursor->output;
|
||||
|
||||
|
|
Loading…
Reference in New Issue