return false;
}
+static bool
+drm_output_plane_has_valid_format(struct drm_plane *plane,
+ struct drm_output_state *state,
+ struct drm_fb *fb)
+{
+ unsigned int i;
+
+ if (!fb)
+ return false;
+
+ /* Check whether the format is supported */
+ for (i = 0; i < plane->count_formats; i++) {
+ unsigned int j;
+
+ if (plane->formats[i].format != fb->format->format)
+ continue;
+
+ if (fb->modifier == DRM_FORMAT_MOD_INVALID)
+ return true;
+
+ for (j = 0; j < plane->formats[i].count_modifiers; j++) {
+ if (plane->formats[i].modifiers[j] == fb->modifier)
+ return true;
+ }
+ }
+
+ return false;
+}
+
static struct drm_plane_state *
drm_output_prepare_overlay_view(struct drm_output_state *output_state,
struct weston_view *ev,
struct drm_plane *p;
struct drm_plane_state *state = NULL;
struct drm_fb *fb;
- unsigned int i;
int ret;
enum {
NO_PLANES,
if (availability == NO_PLANES)
availability = NO_PLANES_WITH_FORMAT;
- /* Check whether the format is supported */
- for (i = 0; i < p->count_formats; i++) {
- unsigned int j;
-
- if (p->formats[i].format != fb->format->format)
- continue;
-
- if (fb->modifier == DRM_FORMAT_MOD_INVALID)
- break;
-
- for (j = 0; j < p->formats[i].count_modifiers; j++) {
- if (p->formats[i].modifiers[j] == fb->modifier)
- break;
- }
- if (j != p->formats[i].count_modifiers)
- break;
- }
- if (i == p->count_formats) {
- drm_plane_state_put_back(state);
- state = NULL;
+ if (!drm_output_plane_has_valid_format(p, output_state, fb))
continue;
- }
-
- if (availability == NO_PLANES_WITH_FORMAT)
- availability = NO_PLANES_ACCEPTED;
state->ev = ev;
state->output = output;