Commit 35c08f43 authored by Maarten Lankhorst's avatar Maarten Lankhorst

drm/i915: Calculate visibility in check_plane correctly regardless of dpms.

When the crtc is configured but not active we currently clip to (0,0)x(0,0).
This results in differences in calculations depending on dpms setting.
When the crtc is enabled but not active run check_plane as if it were on,
but afterwards set plane_state->visible = false for the checks.
Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: default avatarMika Kahola <mika.kahola@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1447945645-32005-13-git-send-email-maarten.lankhorst@linux.intel.com
parent 1a617b77
...@@ -152,9 +152,9 @@ static int intel_plane_atomic_check(struct drm_plane *plane, ...@@ -152,9 +152,9 @@ static int intel_plane_atomic_check(struct drm_plane *plane,
intel_state->clip.x1 = 0; intel_state->clip.x1 = 0;
intel_state->clip.y1 = 0; intel_state->clip.y1 = 0;
intel_state->clip.x2 = intel_state->clip.x2 =
crtc_state->base.active ? crtc_state->pipe_src_w : 0; crtc_state->base.enable ? crtc_state->pipe_src_w : 0;
intel_state->clip.y2 = intel_state->clip.y2 =
crtc_state->base.active ? crtc_state->pipe_src_h : 0; crtc_state->base.enable ? crtc_state->pipe_src_h : 0;
if (state->fb && intel_rotation_90_or_270(state->rotation)) { if (state->fb && intel_rotation_90_or_270(state->rotation)) {
if (!(state->fb->modifier[0] == I915_FORMAT_MOD_Y_TILED || if (!(state->fb->modifier[0] == I915_FORMAT_MOD_Y_TILED ||
......
...@@ -11873,8 +11873,13 @@ int intel_plane_atomic_calc_changes(struct drm_crtc_state *crtc_state, ...@@ -11873,8 +11873,13 @@ int intel_plane_atomic_calc_changes(struct drm_crtc_state *crtc_state,
if (!was_crtc_enabled && WARN_ON(was_visible)) if (!was_crtc_enabled && WARN_ON(was_visible))
was_visible = false; was_visible = false;
if (!is_crtc_enabled && WARN_ON(visible)) /*
visible = false; * Visibility is calculated as if the crtc was on, but
* after scaler setup everything depends on it being off
* when the crtc isn't active.
*/
if (!is_crtc_enabled)
to_intel_plane_state(plane_state)->visible = visible = false;
if (!was_visible && !visible) if (!was_visible && !visible)
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment