output: add wlr_output_get_primary_formats
This allows compositors to get primary formats without manually calling wlr_output_impl.get_primary_formats. For example, the Sway patch for linux-dmabuf feedback [1] needs this. [1]: https://github.com/swaywm/sway/pull/6313
This commit is contained in:
parent
e93435016e
commit
697a1cd0f5
|
@ -460,6 +460,16 @@ void wlr_output_lock_software_cursors(struct wlr_output *output, bool lock);
|
||||||
*/
|
*/
|
||||||
void wlr_output_render_software_cursors(struct wlr_output *output,
|
void wlr_output_render_software_cursors(struct wlr_output *output,
|
||||||
pixman_region32_t *damage);
|
pixman_region32_t *damage);
|
||||||
|
/**
|
||||||
|
* Get the set of DRM formats suitable for the primary buffer, assuming a
|
||||||
|
* buffer with the specified capabilities.
|
||||||
|
*
|
||||||
|
* NULL is returned if the backend doesn't have any format constraint, ie. all
|
||||||
|
* formats are supported. An empty set is returned if the backend doesn't
|
||||||
|
* support any format.
|
||||||
|
*/
|
||||||
|
const struct wlr_drm_format_set *wlr_output_get_primary_formats(
|
||||||
|
struct wlr_output *output, uint32_t buffer_caps);
|
||||||
|
|
||||||
|
|
||||||
struct wlr_output_cursor *wlr_output_cursor_create(struct wlr_output *output);
|
struct wlr_output_cursor *wlr_output_cursor_create(struct wlr_output *output);
|
||||||
|
|
|
@ -560,16 +560,8 @@ static bool output_basic_test(struct wlr_output *output) {
|
||||||
struct wlr_allocator *allocator = output->allocator;
|
struct wlr_allocator *allocator = output->allocator;
|
||||||
assert(allocator != NULL);
|
assert(allocator != NULL);
|
||||||
|
|
||||||
const struct wlr_drm_format_set *display_formats = NULL;
|
const struct wlr_drm_format_set *display_formats =
|
||||||
if (output->impl->get_primary_formats) {
|
wlr_output_get_primary_formats(output, allocator->buffer_caps);
|
||||||
display_formats =
|
|
||||||
output->impl->get_primary_formats(output, allocator->buffer_caps);
|
|
||||||
if (display_formats == NULL) {
|
|
||||||
wlr_log(WLR_ERROR, "Failed to get primary display formats");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct wlr_drm_format *format = output_pick_format(output, display_formats,
|
struct wlr_drm_format *format = output_pick_format(output, display_formats,
|
||||||
output->pending.render_format);
|
output->pending.render_format);
|
||||||
if (format == NULL) {
|
if (format == NULL) {
|
||||||
|
@ -868,3 +860,21 @@ void wlr_output_damage_whole(struct wlr_output *output) {
|
||||||
|
|
||||||
pixman_region32_fini(&damage);
|
pixman_region32_fini(&damage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const struct wlr_drm_format_set *wlr_output_get_primary_formats(
|
||||||
|
struct wlr_output *output, uint32_t buffer_caps) {
|
||||||
|
if (!output->impl->get_primary_formats) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
const struct wlr_drm_format_set *formats =
|
||||||
|
output->impl->get_primary_formats(output, buffer_caps);
|
||||||
|
if (formats == NULL) {
|
||||||
|
wlr_log(WLR_ERROR, "Failed to get primary display formats");
|
||||||
|
|
||||||
|
static const struct wlr_drm_format_set empty_format_set = {0};
|
||||||
|
return &empty_format_set;
|
||||||
|
}
|
||||||
|
|
||||||
|
return formats;
|
||||||
|
}
|
||||||
|
|
|
@ -51,16 +51,8 @@ static bool output_create_swapchain(struct wlr_output *output,
|
||||||
struct wlr_allocator *allocator = output->allocator;
|
struct wlr_allocator *allocator = output->allocator;
|
||||||
assert(allocator != NULL);
|
assert(allocator != NULL);
|
||||||
|
|
||||||
const struct wlr_drm_format_set *display_formats = NULL;
|
const struct wlr_drm_format_set *display_formats =
|
||||||
if (output->impl->get_primary_formats) {
|
wlr_output_get_primary_formats(output, allocator->buffer_caps);
|
||||||
display_formats =
|
|
||||||
output->impl->get_primary_formats(output, allocator->buffer_caps);
|
|
||||||
if (display_formats == NULL) {
|
|
||||||
wlr_log(WLR_ERROR, "Failed to get primary display formats");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct wlr_drm_format *format = output_pick_format(output, display_formats,
|
struct wlr_drm_format *format = output_pick_format(output, display_formats,
|
||||||
output->render_format);
|
output->render_format);
|
||||||
if (format == NULL) {
|
if (format == NULL) {
|
||||||
|
|
Loading…
Reference in New Issue