output: fallback to XRGB in output_pick_format

This will be necessary for the primary buffer.
master
Simon Ser 4 years ago
parent e5063ef3a3
commit d1c931cbe8

@ -1178,32 +1178,41 @@ static struct wlr_drm_format *output_pick_format(struct wlr_output *output,
return NULL; return NULL;
} }
uint32_t fmt = DRM_FORMAT_ARGB8888; struct wlr_drm_format *format = NULL;
const uint32_t candidates[] = { DRM_FORMAT_ARGB8888, DRM_FORMAT_XRGB8888 };
for (size_t i = 0; i < sizeof(candidates) / sizeof(candidates[0]); i++) {
uint32_t fmt = candidates[i];
const struct wlr_drm_format *render_format =
wlr_drm_format_set_get(render_formats, fmt);
if (render_format == NULL) {
wlr_log(WLR_DEBUG, "Renderer doesn't support format 0x%"PRIX32, fmt);
continue;
}
const struct wlr_drm_format *render_format = if (display_formats != NULL) {
wlr_drm_format_set_get(render_formats, fmt); const struct wlr_drm_format *display_format =
if (render_format == NULL) { wlr_drm_format_set_get(display_formats, fmt);
wlr_log(WLR_DEBUG, "Renderer doesn't support format 0x%"PRIX32, fmt); if (display_format == NULL) {
return NULL; wlr_log(WLR_DEBUG, "Output doesn't support format 0x%"PRIX32, fmt);
} continue;
}
format = wlr_drm_format_intersect(display_format, render_format);
} else {
// The output can display any format
format = wlr_drm_format_dup(render_format);
}
const struct wlr_drm_format *display_format; if (format == NULL) {
if (display_formats != NULL) { wlr_log(WLR_DEBUG, "Failed to intersect display and render "
display_format = wlr_drm_format_set_get(display_formats, fmt); "modifiers for format 0x%"PRIX32, fmt);
if (display_format == NULL) { } else {
wlr_log(WLR_DEBUG, "Output doesn't support format 0x%"PRIX32, fmt); break;
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);
if (format == NULL) { if (format == NULL) {
wlr_log(WLR_DEBUG, "Failed to intersect display and render " wlr_log(WLR_ERROR, "Failed to choose a format for output '%s'",
"modifiers for format 0x%"PRIX32, fmt); output->name);
return NULL; return NULL;
} }

Loading…
Cancel
Save