Commit 936e71e3 authored by Ville Syrjälä's avatar Ville Syrjälä Committed by Sean Paul

drm/i915: Use drm_plane_state.{src,dst,visible}

Replace the private drm_rects/flags in intel_plane_state
with the ones now living in drm_plane_state.
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarSean Paul <seanpaul@chromium.org>
Link: http://patchwork.freedesktop.org/patch/msgid/1469549224-1860-5-git-send-email-ville.syrjala@linux.intel.com
parent df86af91
...@@ -139,14 +139,14 @@ static int intel_plane_atomic_check(struct drm_plane *plane, ...@@ -139,14 +139,14 @@ static int intel_plane_atomic_check(struct drm_plane *plane,
* we want to keep another copy internal to our driver that we can * we want to keep another copy internal to our driver that we can
* clip/modify ourselves. * clip/modify ourselves.
*/ */
intel_state->src.x1 = state->src_x; intel_state->base.src.x1 = state->src_x;
intel_state->src.y1 = state->src_y; intel_state->base.src.y1 = state->src_y;
intel_state->src.x2 = state->src_x + state->src_w; intel_state->base.src.x2 = state->src_x + state->src_w;
intel_state->src.y2 = state->src_y + state->src_h; intel_state->base.src.y2 = state->src_y + state->src_h;
intel_state->dst.x1 = state->crtc_x; intel_state->base.dst.x1 = state->crtc_x;
intel_state->dst.y1 = state->crtc_y; intel_state->base.dst.y1 = state->crtc_y;
intel_state->dst.x2 = state->crtc_x + state->crtc_w; intel_state->base.dst.x2 = state->crtc_x + state->crtc_w;
intel_state->dst.y2 = state->crtc_y + state->crtc_h; intel_state->base.dst.y2 = state->crtc_y + state->crtc_h;
/* Clip all planes to CRTC size, or 0x0 if CRTC is disabled */ /* Clip all planes to CRTC size, or 0x0 if CRTC is disabled */
intel_state->clip.x1 = 0; intel_state->clip.x1 = 0;
...@@ -180,7 +180,7 @@ static int intel_plane_atomic_check(struct drm_plane *plane, ...@@ -180,7 +180,7 @@ static int intel_plane_atomic_check(struct drm_plane *plane,
} }
} }
intel_state->visible = false; intel_state->base.visible = false;
ret = intel_plane->check_plane(plane, crtc_state, intel_state); ret = intel_plane->check_plane(plane, crtc_state, intel_state);
if (ret) if (ret)
return ret; return ret;
...@@ -196,7 +196,7 @@ static void intel_plane_atomic_update(struct drm_plane *plane, ...@@ -196,7 +196,7 @@ static void intel_plane_atomic_update(struct drm_plane *plane,
to_intel_plane_state(plane->state); to_intel_plane_state(plane->state);
struct drm_crtc *crtc = plane->state->crtc ?: old_state->crtc; struct drm_crtc *crtc = plane->state->crtc ?: old_state->crtc;
if (intel_state->visible) if (intel_state->base.visible)
intel_plane->update_plane(plane, intel_plane->update_plane(plane,
to_intel_crtc_state(crtc->state), to_intel_crtc_state(crtc->state),
intel_state); intel_state);
......
...@@ -2565,7 +2565,7 @@ intel_find_initial_plane_obj(struct intel_crtc *intel_crtc, ...@@ -2565,7 +2565,7 @@ intel_find_initial_plane_obj(struct intel_crtc *intel_crtc,
* simplest solution is to just disable the primary plane now and * simplest solution is to just disable the primary plane now and
* pretend the BIOS never had it enabled. * pretend the BIOS never had it enabled.
*/ */
to_intel_plane_state(plane_state)->visible = false; to_intel_plane_state(plane_state)->base.visible = false;
crtc_state->plane_mask &= ~(1 << drm_plane_index(primary)); crtc_state->plane_mask &= ~(1 << drm_plane_index(primary));
intel_pre_disable_primary_noatomic(&intel_crtc->base); intel_pre_disable_primary_noatomic(&intel_crtc->base);
intel_plane->disable_plane(primary, &intel_crtc->base); intel_plane->disable_plane(primary, &intel_crtc->base);
...@@ -2583,14 +2583,14 @@ intel_find_initial_plane_obj(struct intel_crtc *intel_crtc, ...@@ -2583,14 +2583,14 @@ intel_find_initial_plane_obj(struct intel_crtc *intel_crtc,
plane_state->crtc_w = fb->width; plane_state->crtc_w = fb->width;
plane_state->crtc_h = fb->height; plane_state->crtc_h = fb->height;
intel_state->src.x1 = plane_state->src_x; intel_state->base.src.x1 = plane_state->src_x;
intel_state->src.y1 = plane_state->src_y; intel_state->base.src.y1 = plane_state->src_y;
intel_state->src.x2 = plane_state->src_x + plane_state->src_w; intel_state->base.src.x2 = plane_state->src_x + plane_state->src_w;
intel_state->src.y2 = plane_state->src_y + plane_state->src_h; intel_state->base.src.y2 = plane_state->src_y + plane_state->src_h;
intel_state->dst.x1 = plane_state->crtc_x; intel_state->base.dst.x1 = plane_state->crtc_x;
intel_state->dst.y1 = plane_state->crtc_y; intel_state->base.dst.y1 = plane_state->crtc_y;
intel_state->dst.x2 = plane_state->crtc_x + plane_state->crtc_w; intel_state->base.dst.x2 = plane_state->crtc_x + plane_state->crtc_w;
intel_state->dst.y2 = plane_state->crtc_y + plane_state->crtc_h; intel_state->base.dst.y2 = plane_state->crtc_y + plane_state->crtc_h;
obj = intel_fb_obj(fb); obj = intel_fb_obj(fb);
if (obj->tiling_mode != I915_TILING_NONE) if (obj->tiling_mode != I915_TILING_NONE)
...@@ -2618,8 +2618,8 @@ static void i9xx_update_primary_plane(struct drm_plane *primary, ...@@ -2618,8 +2618,8 @@ static void i9xx_update_primary_plane(struct drm_plane *primary,
i915_reg_t reg = DSPCNTR(plane); i915_reg_t reg = DSPCNTR(plane);
unsigned int rotation = plane_state->base.rotation; unsigned int rotation = plane_state->base.rotation;
int cpp = drm_format_plane_cpp(fb->pixel_format, 0); int cpp = drm_format_plane_cpp(fb->pixel_format, 0);
int x = plane_state->src.x1 >> 16; int x = plane_state->base.src.x1 >> 16;
int y = plane_state->src.y1 >> 16; int y = plane_state->base.src.y1 >> 16;
dspcntr = DISPPLANE_GAMMA_ENABLE; dspcntr = DISPPLANE_GAMMA_ENABLE;
...@@ -2748,8 +2748,8 @@ static void ironlake_update_primary_plane(struct drm_plane *primary, ...@@ -2748,8 +2748,8 @@ static void ironlake_update_primary_plane(struct drm_plane *primary,
i915_reg_t reg = DSPCNTR(plane); i915_reg_t reg = DSPCNTR(plane);
unsigned int rotation = plane_state->base.rotation; unsigned int rotation = plane_state->base.rotation;
int cpp = drm_format_plane_cpp(fb->pixel_format, 0); int cpp = drm_format_plane_cpp(fb->pixel_format, 0);
int x = plane_state->src.x1 >> 16; int x = plane_state->base.src.x1 >> 16;
int y = plane_state->src.y1 >> 16; int y = plane_state->base.src.y1 >> 16;
dspcntr = DISPPLANE_GAMMA_ENABLE; dspcntr = DISPPLANE_GAMMA_ENABLE;
dspcntr |= DISPLAY_PLANE_ENABLE; dspcntr |= DISPLAY_PLANE_ENABLE;
...@@ -2987,14 +2987,14 @@ static void skylake_update_primary_plane(struct drm_plane *plane, ...@@ -2987,14 +2987,14 @@ static void skylake_update_primary_plane(struct drm_plane *plane,
int x_offset, y_offset; int x_offset, y_offset;
u32 surf_addr; u32 surf_addr;
int scaler_id = plane_state->scaler_id; int scaler_id = plane_state->scaler_id;
int src_x = plane_state->src.x1 >> 16; int src_x = plane_state->base.src.x1 >> 16;
int src_y = plane_state->src.y1 >> 16; int src_y = plane_state->base.src.y1 >> 16;
int src_w = drm_rect_width(&plane_state->src) >> 16; int src_w = drm_rect_width(&plane_state->base.src) >> 16;
int src_h = drm_rect_height(&plane_state->src) >> 16; int src_h = drm_rect_height(&plane_state->base.src) >> 16;
int dst_x = plane_state->dst.x1; int dst_x = plane_state->base.dst.x1;
int dst_y = plane_state->dst.y1; int dst_y = plane_state->base.dst.y1;
int dst_w = drm_rect_width(&plane_state->dst); int dst_w = drm_rect_width(&plane_state->base.dst);
int dst_h = drm_rect_height(&plane_state->dst); int dst_h = drm_rect_height(&plane_state->base.dst);
plane_ctl = PLANE_CTL_ENABLE | plane_ctl = PLANE_CTL_ENABLE |
PLANE_CTL_PIPE_GAMMA_ENABLE | PLANE_CTL_PIPE_GAMMA_ENABLE |
...@@ -3009,7 +3009,7 @@ static void skylake_update_primary_plane(struct drm_plane *plane, ...@@ -3009,7 +3009,7 @@ static void skylake_update_primary_plane(struct drm_plane *plane,
fb->pixel_format); fb->pixel_format);
surf_addr = intel_plane_obj_offset(to_intel_plane(plane), obj, 0); surf_addr = intel_plane_obj_offset(to_intel_plane(plane), obj, 0);
WARN_ON(drm_rect_width(&plane_state->src) == 0); WARN_ON(drm_rect_width(&plane_state->base.src) == 0);
if (intel_rotation_90_or_270(rotation)) { if (intel_rotation_90_or_270(rotation)) {
int cpp = drm_format_plane_cpp(fb->pixel_format, 0); int cpp = drm_format_plane_cpp(fb->pixel_format, 0);
...@@ -3098,7 +3098,7 @@ static void intel_update_primary_planes(struct drm_device *dev) ...@@ -3098,7 +3098,7 @@ static void intel_update_primary_planes(struct drm_device *dev)
drm_modeset_lock_crtc(crtc, &plane->base); drm_modeset_lock_crtc(crtc, &plane->base);
plane_state = to_intel_plane_state(plane->base.state); plane_state = to_intel_plane_state(plane->base.state);
if (plane_state->visible) if (plane_state->base.visible)
plane->update_plane(&plane->base, plane->update_plane(&plane->base,
to_intel_crtc_state(crtc->state), to_intel_crtc_state(crtc->state),
plane_state); plane_state);
...@@ -4273,7 +4273,7 @@ static int skl_update_scaler_plane(struct intel_crtc_state *crtc_state, ...@@ -4273,7 +4273,7 @@ static int skl_update_scaler_plane(struct intel_crtc_state *crtc_state,
struct drm_framebuffer *fb = plane_state->base.fb; struct drm_framebuffer *fb = plane_state->base.fb;
int ret; int ret;
bool force_detach = !fb || !plane_state->visible; bool force_detach = !fb || !plane_state->base.visible;
DRM_DEBUG_KMS("Updating scaler for [PLANE:%d:%s] scaler_user index %u.%u\n", DRM_DEBUG_KMS("Updating scaler for [PLANE:%d:%s] scaler_user index %u.%u\n",
intel_plane->base.base.id, intel_plane->base.name, intel_plane->base.base.id, intel_plane->base.name,
...@@ -4283,10 +4283,10 @@ static int skl_update_scaler_plane(struct intel_crtc_state *crtc_state, ...@@ -4283,10 +4283,10 @@ static int skl_update_scaler_plane(struct intel_crtc_state *crtc_state,
drm_plane_index(&intel_plane->base), drm_plane_index(&intel_plane->base),
&plane_state->scaler_id, &plane_state->scaler_id,
plane_state->base.rotation, plane_state->base.rotation,
drm_rect_width(&plane_state->src) >> 16, drm_rect_width(&plane_state->base.src) >> 16,
drm_rect_height(&plane_state->src) >> 16, drm_rect_height(&plane_state->base.src) >> 16,
drm_rect_width(&plane_state->dst), drm_rect_width(&plane_state->base.dst),
drm_rect_height(&plane_state->dst)); drm_rect_height(&plane_state->base.dst));
if (ret || plane_state->scaler_id < 0) if (ret || plane_state->scaler_id < 0)
return ret; return ret;
...@@ -4584,9 +4584,9 @@ static void intel_post_plane_update(struct intel_crtc_state *old_crtc_state) ...@@ -4584,9 +4584,9 @@ static void intel_post_plane_update(struct intel_crtc_state *old_crtc_state)
intel_fbc_post_update(crtc); intel_fbc_post_update(crtc);
if (primary_state->visible && if (primary_state->base.visible &&
(needs_modeset(&pipe_config->base) || (needs_modeset(&pipe_config->base) ||
!old_primary_state->visible)) !old_primary_state->base.visible))
intel_post_enable_primary(&crtc->base); intel_post_enable_primary(&crtc->base);
} }
} }
...@@ -4612,8 +4612,8 @@ static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state) ...@@ -4612,8 +4612,8 @@ static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state)
intel_fbc_pre_update(crtc, pipe_config, primary_state); intel_fbc_pre_update(crtc, pipe_config, primary_state);
if (old_primary_state->visible && if (old_primary_state->base.visible &&
(modeset || !primary_state->visible)) (modeset || !primary_state->base.visible))
intel_pre_disable_primary(&crtc->base); intel_pre_disable_primary(&crtc->base);
} }
...@@ -6298,13 +6298,13 @@ static void intel_crtc_disable_noatomic(struct drm_crtc *crtc) ...@@ -6298,13 +6298,13 @@ static void intel_crtc_disable_noatomic(struct drm_crtc *crtc)
if (!intel_crtc->active) if (!intel_crtc->active)
return; return;
if (to_intel_plane_state(crtc->primary->state)->visible) { if (to_intel_plane_state(crtc->primary->state)->base.visible) {
WARN_ON(intel_crtc->flip_work); WARN_ON(intel_crtc->flip_work);
intel_pre_disable_primary_noatomic(crtc); intel_pre_disable_primary_noatomic(crtc);
intel_crtc_disable_planes(crtc, 1 << drm_plane_index(crtc->primary)); intel_crtc_disable_planes(crtc, 1 << drm_plane_index(crtc->primary));
to_intel_plane_state(crtc->primary->state)->visible = false; to_intel_plane_state(crtc->primary->state)->base.visible = false;
} }
dev_priv->display.crtc_disable(crtc); dev_priv->display.crtc_disable(crtc);
...@@ -10178,7 +10178,7 @@ static void i845_update_cursor(struct drm_crtc *crtc, u32 base, ...@@ -10178,7 +10178,7 @@ static void i845_update_cursor(struct drm_crtc *crtc, u32 base,
struct intel_crtc *intel_crtc = to_intel_crtc(crtc); struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
uint32_t cntl = 0, size = 0; uint32_t cntl = 0, size = 0;
if (plane_state && plane_state->visible) { if (plane_state && plane_state->base.visible) {
unsigned int width = plane_state->base.crtc_w; unsigned int width = plane_state->base.crtc_w;
unsigned int height = plane_state->base.crtc_h; unsigned int height = plane_state->base.crtc_h;
unsigned int stride = roundup_pow_of_two(width) * 4; unsigned int stride = roundup_pow_of_two(width) * 4;
...@@ -10242,7 +10242,7 @@ static void i9xx_update_cursor(struct drm_crtc *crtc, u32 base, ...@@ -10242,7 +10242,7 @@ static void i9xx_update_cursor(struct drm_crtc *crtc, u32 base,
int pipe = intel_crtc->pipe; int pipe = intel_crtc->pipe;
uint32_t cntl = 0; uint32_t cntl = 0;
if (plane_state && plane_state->visible) { if (plane_state && plane_state->base.visible) {
cntl = MCURSOR_GAMMA_ENABLE; cntl = MCURSOR_GAMMA_ENABLE;
switch (plane_state->base.crtc_w) { switch (plane_state->base.crtc_w) {
case 64: case 64:
...@@ -11826,7 +11826,7 @@ static bool intel_wm_need_update(struct drm_plane *plane, ...@@ -11826,7 +11826,7 @@ static bool intel_wm_need_update(struct drm_plane *plane,
struct intel_plane_state *cur = to_intel_plane_state(plane->state); struct intel_plane_state *cur = to_intel_plane_state(plane->state);
/* Update watermarks on tiling or size changes. */ /* Update watermarks on tiling or size changes. */
if (new->visible != cur->visible) if (new->base.visible != cur->base.visible)
return true; return true;
if (!cur->base.fb || !new->base.fb) if (!cur->base.fb || !new->base.fb)
...@@ -11834,10 +11834,10 @@ static bool intel_wm_need_update(struct drm_plane *plane, ...@@ -11834,10 +11834,10 @@ static bool intel_wm_need_update(struct drm_plane *plane,
if (cur->base.fb->modifier[0] != new->base.fb->modifier[0] || if (cur->base.fb->modifier[0] != new->base.fb->modifier[0] ||
cur->base.rotation != new->base.rotation || cur->base.rotation != new->base.rotation ||
drm_rect_width(&new->src) != drm_rect_width(&cur->src) || drm_rect_width(&new->base.src) != drm_rect_width(&cur->base.src) ||
drm_rect_height(&new->src) != drm_rect_height(&cur->src) || drm_rect_height(&new->base.src) != drm_rect_height(&cur->base.src) ||
drm_rect_width(&new->dst) != drm_rect_width(&cur->dst) || drm_rect_width(&new->base.dst) != drm_rect_width(&cur->base.dst) ||
drm_rect_height(&new->dst) != drm_rect_height(&cur->dst)) drm_rect_height(&new->base.dst) != drm_rect_height(&cur->base.dst))
return true; return true;
return false; return false;
...@@ -11845,10 +11845,10 @@ static bool intel_wm_need_update(struct drm_plane *plane, ...@@ -11845,10 +11845,10 @@ static bool intel_wm_need_update(struct drm_plane *plane,
static bool needs_scaling(struct intel_plane_state *state) static bool needs_scaling(struct intel_plane_state *state)
{ {
int src_w = drm_rect_width(&state->src) >> 16; int src_w = drm_rect_width(&state->base.src) >> 16;
int src_h = drm_rect_height(&state->src) >> 16; int src_h = drm_rect_height(&state->base.src) >> 16;
int dst_w = drm_rect_width(&state->dst); int dst_w = drm_rect_width(&state->base.dst);
int dst_h = drm_rect_height(&state->dst); int dst_h = drm_rect_height(&state->base.dst);
return (src_w != dst_w || src_h != dst_h); return (src_w != dst_w || src_h != dst_h);
} }
...@@ -11879,8 +11879,8 @@ int intel_plane_atomic_calc_changes(struct drm_crtc_state *crtc_state, ...@@ -11879,8 +11879,8 @@ int intel_plane_atomic_calc_changes(struct drm_crtc_state *crtc_state,
return ret; return ret;
} }
was_visible = old_plane_state->visible; was_visible = old_plane_state->base.visible;
visible = to_intel_plane_state(plane_state)->visible; visible = to_intel_plane_state(plane_state)->base.visible;
if (!was_crtc_enabled && WARN_ON(was_visible)) if (!was_crtc_enabled && WARN_ON(was_visible))
was_visible = false; was_visible = false;
...@@ -11896,7 +11896,7 @@ int intel_plane_atomic_calc_changes(struct drm_crtc_state *crtc_state, ...@@ -11896,7 +11896,7 @@ int intel_plane_atomic_calc_changes(struct drm_crtc_state *crtc_state,
* only combine the results from all planes in the current place? * only combine the results from all planes in the current place?
*/ */
if (!is_crtc_enabled) if (!is_crtc_enabled)
to_intel_plane_state(plane_state)->visible = visible = false; to_intel_plane_state(plane_state)->base.visible = visible = false;
if (!was_visible && !visible) if (!was_visible && !visible)
return 0; return 0;
...@@ -12301,12 +12301,13 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc, ...@@ -12301,12 +12301,13 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
drm_get_format_name(fb->pixel_format)); drm_get_format_name(fb->pixel_format));
DRM_DEBUG_KMS("\tscaler:%d src %dx%d+%d+%d dst %dx%d+%d+%d\n", DRM_DEBUG_KMS("\tscaler:%d src %dx%d+%d+%d dst %dx%d+%d+%d\n",
state->scaler_id, state->scaler_id,
state->src.x1 >> 16, state->src.y1 >> 16, state->base.src.x1 >> 16,
drm_rect_width(&state->src) >> 16, state->base.src.y1 >> 16,
drm_rect_height(&state->src) >> 16, drm_rect_width(&state->base.src) >> 16,
state->dst.x1, state->dst.y1, drm_rect_height(&state->base.src) >> 16,
drm_rect_width(&state->dst), state->base.dst.x1, state->base.dst.y1,
drm_rect_height(&state->dst)); drm_rect_width(&state->base.dst),
drm_rect_height(&state->base.dst));
} }
} }
...@@ -14141,12 +14142,14 @@ intel_check_primary_plane(struct drm_plane *plane, ...@@ -14141,12 +14142,14 @@ intel_check_primary_plane(struct drm_plane *plane,
can_position = true; can_position = true;
} }
return drm_plane_helper_check_update(plane, crtc, fb, &state->src, return drm_plane_helper_check_update(plane, crtc, fb,
&state->dst, &state->clip, &state->base.src,
&state->base.dst,
&state->base.clip,
state->base.rotation, state->base.rotation,
min_scale, max_scale, min_scale, max_scale,
can_position, true, can_position, true,
&state->visible); &state->base.visible);
} }
static void intel_begin_crtc_commit(struct drm_crtc *crtc, static void intel_begin_crtc_commit(struct drm_crtc *crtc,
...@@ -14333,12 +14336,13 @@ intel_check_cursor_plane(struct drm_plane *plane, ...@@ -14333,12 +14336,13 @@ intel_check_cursor_plane(struct drm_plane *plane,
unsigned stride; unsigned stride;
int ret; int ret;
ret = drm_plane_helper_check_update(plane, crtc, fb, &state->src, ret = drm_plane_helper_check_update(plane, crtc, fb, &state->base.src,
&state->dst, &state->clip, &state->base.dst,
&state->base.clip,
state->base.rotation, state->base.rotation,
DRM_PLANE_HELPER_NO_SCALING, DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING, DRM_PLANE_HELPER_NO_SCALING,
true, true, &state->visible); true, true, &state->base.visible);
if (ret) if (ret)
return ret; return ret;
...@@ -14375,7 +14379,7 @@ intel_check_cursor_plane(struct drm_plane *plane, ...@@ -14375,7 +14379,7 @@ intel_check_cursor_plane(struct drm_plane *plane,
* Refuse the put the cursor into that compromised position. * Refuse the put the cursor into that compromised position.
*/ */
if (IS_CHERRYVIEW(plane->dev) && pipe == PIPE_C && if (IS_CHERRYVIEW(plane->dev) && pipe == PIPE_C &&
state->visible && state->base.crtc_x < 0) { state->base.visible && state->base.crtc_x < 0) {
DRM_DEBUG_KMS("CHV cursor C not allowed to straddle the left screen edge\n"); DRM_DEBUG_KMS("CHV cursor C not allowed to straddle the left screen edge\n");
return -EINVAL; return -EINVAL;
} }
...@@ -15825,7 +15829,7 @@ static void intel_sanitize_crtc(struct intel_crtc *crtc) ...@@ -15825,7 +15829,7 @@ static void intel_sanitize_crtc(struct intel_crtc *crtc)
* Temporarily change the plane mapping and disable everything * Temporarily change the plane mapping and disable everything
* ... */ * ... */
plane = crtc->plane; plane = crtc->plane;
to_intel_plane_state(crtc->base.primary->state)->visible = true; to_intel_plane_state(crtc->base.primary->state)->base.visible = true;
crtc->plane = !plane; crtc->plane = !plane;
intel_crtc_disable_noatomic(&crtc->base); intel_crtc_disable_noatomic(&crtc->base);
crtc->plane = plane; crtc->plane = plane;
...@@ -15952,10 +15956,10 @@ static void readout_plane_state(struct intel_crtc *crtc) ...@@ -15952,10 +15956,10 @@ static void readout_plane_state(struct intel_crtc *crtc)
struct intel_plane_state *plane_state = struct intel_plane_state *plane_state =
to_intel_plane_state(primary->state); to_intel_plane_state(primary->state);
plane_state->visible = crtc->active && plane_state->base.visible = crtc->active &&
primary_get_hw_state(to_intel_plane(primary)); primary_get_hw_state(to_intel_plane(primary));
if (plane_state->visible) if (plane_state->base.visible)
crtc->base.state->plane_mask |= 1 << drm_plane_index(primary); crtc->base.state->plane_mask |= 1 << drm_plane_index(primary);
} }
......
...@@ -338,10 +338,7 @@ struct intel_atomic_state { ...@@ -338,10 +338,7 @@ struct intel_atomic_state {
struct intel_plane_state { struct intel_plane_state {
struct drm_plane_state base; struct drm_plane_state base;
struct drm_rect src;
struct drm_rect dst;
struct drm_rect clip; struct drm_rect clip;
bool visible;
/* /*
* scaler_id * scaler_id
......
...@@ -494,7 +494,7 @@ static bool multiple_pipes_ok(struct intel_crtc *crtc, ...@@ -494,7 +494,7 @@ static bool multiple_pipes_ok(struct intel_crtc *crtc,
if (!no_fbc_on_multiple_pipes(dev_priv)) if (!no_fbc_on_multiple_pipes(dev_priv))
return true; return true;
if (plane_state->visible) if (plane_state->base.visible)
fbc->visible_pipes_mask |= (1 << pipe); fbc->visible_pipes_mask |= (1 << pipe);
else else
fbc->visible_pipes_mask &= ~(1 << pipe); fbc->visible_pipes_mask &= ~(1 << pipe);
...@@ -725,9 +725,9 @@ static void intel_fbc_update_state_cache(struct intel_crtc *crtc, ...@@ -725,9 +725,9 @@ static void intel_fbc_update_state_cache(struct intel_crtc *crtc,
ilk_pipe_pixel_rate(crtc_state); ilk_pipe_pixel_rate(crtc_state);
cache->plane.rotation = plane_state->base.rotation; cache->plane.rotation = plane_state->base.rotation;
cache->plane.src_w = drm_rect_width(&plane_state->src) >> 16; cache->plane.src_w = drm_rect_width(&plane_state->base.src) >> 16;
cache->plane.src_h = drm_rect_height(&plane_state->src) >> 16; cache->plane.src_h = drm_rect_height(&plane_state->base.src) >> 16;
cache->plane.visible = plane_state->visible; cache->plane.visible = plane_state->base.visible;
if (!cache->plane.visible) if (!cache->plane.visible)
return; return;
...@@ -1050,7 +1050,7 @@ void intel_fbc_choose_crtc(struct drm_i915_private *dev_priv, ...@@ -1050,7 +1050,7 @@ void intel_fbc_choose_crtc(struct drm_i915_private *dev_priv,
struct intel_plane_state *intel_plane_state = struct intel_plane_state *intel_plane_state =
to_intel_plane_state(plane_state); to_intel_plane_state(plane_state);
if (!intel_plane_state->visible) if (!intel_plane_state->base.visible)
continue; continue;
for_each_crtc_in_state(state, crtc, crtc_state, j) { for_each_crtc_in_state(state, crtc, crtc_state, j) {
...@@ -1212,7 +1212,7 @@ void intel_fbc_init_pipe_state(struct drm_i915_private *dev_priv) ...@@ -1212,7 +1212,7 @@ void intel_fbc_init_pipe_state(struct drm_i915_private *dev_priv)
for_each_intel_crtc(&dev_priv->drm, crtc) for_each_intel_crtc(&dev_priv->drm, crtc)
if (intel_crtc_active(&crtc->base) && if (intel_crtc_active(&crtc->base) &&
to_intel_plane_state(crtc->base.primary->state)->visible) to_intel_plane_state(crtc->base.primary->state)->base.visible)
dev_priv->fbc.visible_pipes_mask |= (1 << crtc->pipe); dev_priv->fbc.visible_pipes_mask |= (1 << crtc->pipe);
} }
......
...@@ -960,7 +960,7 @@ static uint16_t vlv_compute_wm_level(struct intel_plane *plane, ...@@ -960,7 +960,7 @@ static uint16_t vlv_compute_wm_level(struct intel_plane *plane,
if (dev_priv->wm.pri_latency[level] == 0) if (dev_priv->wm.pri_latency[level] == 0)
return USHRT_MAX; return USHRT_MAX;
if (!state->visible) if (!state->base.visible)
return 0; return 0;
cpp = drm_format_plane_cpp(state->base.fb->pixel_format, 0); cpp = drm_format_plane_cpp(state->base.fb->pixel_format, 0);
...@@ -1002,7 +1002,7 @@ static void vlv_compute_fifo(struct intel_crtc *crtc) ...@@ -1002,7 +1002,7 @@ static void vlv_compute_fifo(struct intel_crtc *crtc)
if (plane->base.type == DRM_PLANE_TYPE_CURSOR) if (plane->base.type == DRM_PLANE_TYPE_CURSOR)
continue; continue;
if (state->visible) { if (state->base.visible) {
wm_state->num_active_planes++; wm_state->num_active_planes++;
total_rate += drm_format_plane_cpp(state->base.fb->pixel_format, 0); total_rate += drm_format_plane_cpp(state->base.fb->pixel_format, 0);
} }
...@@ -1018,7 +1018,7 @@ static void vlv_compute_fifo(struct intel_crtc *crtc) ...@@ -1018,7 +1018,7 @@ static void vlv_compute_fifo(struct intel_crtc *crtc)
continue; continue;
} }
if (!state->visible) { if (!state->base.visible) {
plane->wm.fifo_size = 0; plane->wm.fifo_size = 0;
continue; continue;
} }
...@@ -1118,7 +1118,7 @@ static void vlv_compute_wm(struct intel_crtc *crtc) ...@@ -1118,7 +1118,7 @@ static void vlv_compute_wm(struct intel_crtc *crtc)
struct intel_plane_state *state = struct intel_plane_state *state =
to_intel_plane_state(plane->base.state); to_intel_plane_state(plane->base.state);
if (!state->visible) if (!state->base.visible)
continue; continue;
/* normal watermarks */ /* normal watermarks */
...@@ -1767,7 +1767,7 @@ static uint32_t ilk_compute_pri_wm(const struct intel_crtc_state *cstate, ...@@ -1767,7 +1767,7 @@ static uint32_t ilk_compute_pri_wm(const struct intel_crtc_state *cstate,
drm_format_plane_cpp(pstate->base.fb->pixel_format, 0) : 0; drm_format_plane_cpp(pstate->base.fb->pixel_format, 0) : 0;
uint32_t method1, method2; uint32_t method1, method2;
if (!cstate->base.active || !pstate->visible) if (!cstate->base.active || !pstate->base.visible)
return 0; return 0;
method1 = ilk_wm_method1(ilk_pipe_pixel_rate(cstate), cpp, mem_value); method1 = ilk_wm_method1(ilk_pipe_pixel_rate(cstate), cpp, mem_value);
...@@ -1777,7 +1777,7 @@ static uint32_t ilk_compute_pri_wm(const struct intel_crtc_state *cstate, ...@@ -1777,7 +1777,7 @@ static uint32_t ilk_compute_pri_wm(const struct intel_crtc_state *cstate,
method2 = ilk_wm_method2(ilk_pipe_pixel_rate(cstate), method2 = ilk_wm_method2(ilk_pipe_pixel_rate(cstate),
cstate->base.adjusted_mode.crtc_htotal, cstate->base.adjusted_mode.crtc_htotal,
drm_rect_width(&pstate->dst), drm_rect_width(&pstate->base.dst),
cpp, mem_value); cpp, mem_value);
return min(method1, method2); return min(method1, method2);
...@@ -1795,13 +1795,13 @@ static uint32_t ilk_compute_spr_wm(const struct intel_crtc_state *cstate, ...@@ -1795,13 +1795,13 @@ static uint32_t ilk_compute_spr_wm(const struct intel_crtc_state *cstate,
drm_format_plane_cpp(pstate->base.fb->pixel_format, 0) : 0; drm_format_plane_cpp(pstate->base.fb->pixel_format, 0) : 0;
uint32_t method1, method2; uint32_t method1, method2;
if (!cstate->base.active || !pstate->visible) if (!cstate->base.active || !pstate->base.visible)
return 0; return 0;
method1 = ilk_wm_method1(ilk_pipe_pixel_rate(cstate), cpp, mem_value); method1 = ilk_wm_method1(ilk_pipe_pixel_rate(cstate), cpp, mem_value);
method2 = ilk_wm_method2(ilk_pipe_pixel_rate(cstate), method2 = ilk_wm_method2(ilk_pipe_pixel_rate(cstate),
cstate->base.adjusted_mode.crtc_htotal, cstate->base.adjusted_mode.crtc_htotal,
drm_rect_width(&pstate->dst), drm_rect_width(&pstate->base.dst),
cpp, mem_value); cpp, mem_value);
return min(method1, method2); return min(method1, method2);
} }
...@@ -1820,7 +1820,7 @@ static uint32_t ilk_compute_cur_wm(const struct intel_crtc_state *cstate, ...@@ -1820,7 +1820,7 @@ static uint32_t ilk_compute_cur_wm(const struct intel_crtc_state *cstate,
* this is necessary to avoid flickering. * this is necessary to avoid flickering.
*/ */
int cpp = 4; int cpp = 4;
int width = pstate->visible ? pstate->base.crtc_w : 64; int width = pstate->base.visible ? pstate->base.crtc_w : 64;
if (!cstate->base.active) if (!cstate->base.active)
return 0; return 0;
...@@ -1838,10 +1838,10 @@ static uint32_t ilk_compute_fbc_wm(const struct intel_crtc_state *cstate, ...@@ -1838,10 +1838,10 @@ static uint32_t ilk_compute_fbc_wm(const struct intel_crtc_state *cstate,
int cpp = pstate->base.fb ? int cpp = pstate->base.fb ?
drm_format_plane_cpp(pstate->base.fb->pixel_format, 0) : 0; drm_format_plane_cpp(pstate->base.fb->pixel_format, 0) : 0;
if (!cstate->base.active || !pstate->visible) if (!cstate->base.active || !pstate->base.visible)
return 0; return 0;
return ilk_wm_fbc(pri_val, drm_rect_width(&pstate->dst), cpp); return ilk_wm_fbc(pri_val, drm_rect_width(&pstate->base.dst), cpp);
} }
static unsigned int ilk_display_fifo_size(const struct drm_device *dev) static unsigned int ilk_display_fifo_size(const struct drm_device *dev)
...@@ -2358,10 +2358,10 @@ static int ilk_compute_pipe_wm(struct intel_crtc_state *cstate) ...@@ -2358,10 +2358,10 @@ static int ilk_compute_pipe_wm(struct intel_crtc_state *cstate)
pipe_wm->pipe_enabled = cstate->base.active; pipe_wm->pipe_enabled = cstate->base.active;
if (sprstate) { if (sprstate) {
pipe_wm->sprites_enabled = sprstate->visible; pipe_wm->sprites_enabled = sprstate->base.visible;
pipe_wm->sprites_scaled = sprstate->visible && pipe_wm->sprites_scaled = sprstate->base.visible &&
(drm_rect_width(&sprstate->dst) != drm_rect_width(&sprstate->src) >> 16 || (drm_rect_width(&sprstate->base.dst) != drm_rect_width(&sprstate->base.src) >> 16 ||
drm_rect_height(&sprstate->dst) != drm_rect_height(&sprstate->src) >> 16); drm_rect_height(&sprstate->base.dst) != drm_rect_height(&sprstate->base.src) >> 16);
} }
usable_level = max_level; usable_level = max_level;
...@@ -2996,14 +2996,14 @@ skl_plane_downscale_amount(const struct intel_plane_state *pstate) ...@@ -2996,14 +2996,14 @@ skl_plane_downscale_amount(const struct intel_plane_state *pstate)
uint32_t downscale_h, downscale_w; uint32_t downscale_h, downscale_w;
uint32_t src_w, src_h, dst_w, dst_h; uint32_t src_w, src_h, dst_w, dst_h;
if (WARN_ON(!pstate->visible)) if (WARN_ON(!pstate->base.visible))
return DRM_PLANE_HELPER_NO_SCALING; return DRM_PLANE_HELPER_NO_SCALING;
/* n.b., src is 16.16 fixed point, dst is whole integer */ /* n.b., src is 16.16 fixed point, dst is whole integer */
src_w = drm_rect_width(&pstate->src); src_w = drm_rect_width(&pstate->base.src);
src_h = drm_rect_height(&pstate->src); src_h = drm_rect_height(&pstate->base.src);
dst_w = drm_rect_width(&pstate->dst); dst_w = drm_rect_width(&pstate->base.dst);
dst_h = drm_rect_height(&pstate->dst); dst_h = drm_rect_height(&pstate->base.dst);
if (intel_rotation_90_or_270(pstate->base.rotation)) if (intel_rotation_90_or_270(pstate->base.rotation))
swap(dst_w, dst_h); swap(dst_w, dst_h);
...@@ -3025,15 +3025,15 @@ skl_plane_relative_data_rate(const struct intel_crtc_state *cstate, ...@@ -3025,15 +3025,15 @@ skl_plane_relative_data_rate(const struct intel_crtc_state *cstate,
uint32_t width = 0, height = 0; uint32_t width = 0, height = 0;
unsigned format = fb ? fb->pixel_format : DRM_FORMAT_XRGB8888; unsigned format = fb ? fb->pixel_format : DRM_FORMAT_XRGB8888;
if (!intel_pstate->visible) if (!intel_pstate->base.visible)
return 0; return 0;
if (pstate->plane->type == DRM_PLANE_TYPE_CURSOR) if (pstate->plane->type == DRM_PLANE_TYPE_CURSOR)
return 0; return 0;
if (y && format != DRM_FORMAT_NV12) if (y && format != DRM_FORMAT_NV12)
return 0; return 0;
width = drm_rect_width(&intel_pstate->src) >> 16; width = drm_rect_width(&intel_pstate->base.src) >> 16;
height = drm_rect_height(&intel_pstate->src) >> 16; height = drm_rect_height(&intel_pstate->base.src) >> 16;
if (intel_rotation_90_or_270(pstate->rotation)) if (intel_rotation_90_or_270(pstate->rotation))
swap(width, height); swap(width, height);
...@@ -3134,8 +3134,8 @@ skl_ddb_min_alloc(const struct drm_plane_state *pstate, ...@@ -3134,8 +3134,8 @@ skl_ddb_min_alloc(const struct drm_plane_state *pstate,
fb->modifier[0] != I915_FORMAT_MOD_Yf_TILED) fb->modifier[0] != I915_FORMAT_MOD_Yf_TILED)
return 8; return 8;
src_w = drm_rect_width(&intel_pstate->src) >> 16; src_w = drm_rect_width(&intel_pstate->base.src) >> 16;
src_h = drm_rect_height(&intel_pstate->src) >> 16; src_h = drm_rect_height(&intel_pstate->base.src) >> 16;
if (intel_rotation_90_or_270(pstate->rotation)) if (intel_rotation_90_or_270(pstate->rotation))
swap(src_w, src_h); swap(src_w, src_h);
...@@ -3226,7 +3226,7 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, ...@@ -3226,7 +3226,7 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate,
if (intel_plane->pipe != pipe) if (intel_plane->pipe != pipe)
continue; continue;
if (!to_intel_plane_state(pstate)->visible) { if (!to_intel_plane_state(pstate)->base.visible) {
minimum[id] = 0; minimum[id] = 0;
y_minimum[id] = 0; y_minimum[id] = 0;
continue; continue;
...@@ -3363,7 +3363,7 @@ static uint32_t skl_adjusted_plane_pixel_rate(const struct intel_crtc_state *cst ...@@ -3363,7 +3363,7 @@ static uint32_t skl_adjusted_plane_pixel_rate(const struct intel_crtc_state *cst
uint64_t pixel_rate; uint64_t pixel_rate;
/* Shouldn't reach here on disabled planes... */ /* Shouldn't reach here on disabled planes... */
if (WARN_ON(!pstate->visible)) if (WARN_ON(!pstate->base.visible))
return 0; return 0;
/* /*
...@@ -3399,13 +3399,13 @@ static int skl_compute_plane_wm(const struct drm_i915_private *dev_priv, ...@@ -3399,13 +3399,13 @@ static int skl_compute_plane_wm(const struct drm_i915_private *dev_priv,
uint32_t width = 0, height = 0; uint32_t width = 0, height = 0;
uint32_t plane_pixel_rate; uint32_t plane_pixel_rate;
if (latency == 0 || !cstate->base.active || !intel_pstate->visible) { if (latency == 0 || !cstate->base.active || !intel_pstate->base.visible) {
*enabled = false; *enabled = false;
return 0; return 0;
} }
width = drm_rect_width(&intel_pstate->src) >> 16; width = drm_rect_width(&intel_pstate->base.src) >> 16;
height = drm_rect_height(&intel_pstate->src) >> 16; height = drm_rect_height(&intel_pstate->base.src) >> 16;
if (intel_rotation_90_or_270(pstate->rotation)) if (intel_rotation_90_or_270(pstate->rotation))
swap(width, height); swap(width, height);
......
...@@ -211,14 +211,14 @@ skl_update_plane(struct drm_plane *drm_plane, ...@@ -211,14 +211,14 @@ skl_update_plane(struct drm_plane *drm_plane,
u32 tile_height, plane_offset, plane_size; u32 tile_height, plane_offset, plane_size;
unsigned int rotation = plane_state->base.rotation; unsigned int rotation = plane_state->base.rotation;
int x_offset, y_offset; int x_offset, y_offset;
int crtc_x = plane_state->dst.x1; int crtc_x = plane_state->base.dst.x1;
int crtc_y = plane_state->dst.y1; int crtc_y = plane_state->base.dst.y1;
uint32_t crtc_w = drm_rect_width(&plane_state->dst); uint32_t crtc_w = drm_rect_width(&plane_state->base.dst);
uint32_t crtc_h = drm_rect_height(&plane_state->dst); uint32_t crtc_h = drm_rect_height(&plane_state->base.dst);
uint32_t x = plane_state->src.x1 >> 16; uint32_t x = plane_state->base.src.x1 >> 16;
uint32_t y = plane_state->src.y1 >> 16; uint32_t y = plane_state->base.src.y1 >> 16;
uint32_t src_w = drm_rect_width(&plane_state->src) >> 16; uint32_t src_w = drm_rect_width(&plane_state->base.src) >> 16;
uint32_t src_h = drm_rect_height(&plane_state->src) >> 16; uint32_t src_h = drm_rect_height(&plane_state->base.src) >> 16;
plane_ctl = PLANE_CTL_ENABLE | plane_ctl = PLANE_CTL_ENABLE |
PLANE_CTL_PIPE_GAMMA_ENABLE | PLANE_CTL_PIPE_GAMMA_ENABLE |
...@@ -370,14 +370,14 @@ vlv_update_plane(struct drm_plane *dplane, ...@@ -370,14 +370,14 @@ vlv_update_plane(struct drm_plane *dplane,
unsigned int rotation = dplane->state->rotation; unsigned int rotation = dplane->state->rotation;
int cpp = drm_format_plane_cpp(fb->pixel_format, 0); int cpp = drm_format_plane_cpp(fb->pixel_format, 0);
const struct drm_intel_sprite_colorkey *key = &plane_state->ckey; const struct drm_intel_sprite_colorkey *key = &plane_state->ckey;
int crtc_x = plane_state->dst.x1; int crtc_x = plane_state->base.dst.x1;
int crtc_y = plane_state->dst.y1; int crtc_y = plane_state->base.dst.y1;
uint32_t crtc_w = drm_rect_width(&plane_state->dst); uint32_t crtc_w = drm_rect_width(&plane_state->base.dst);
uint32_t crtc_h = drm_rect_height(&plane_state->dst); uint32_t crtc_h = drm_rect_height(&plane_state->base.dst);
uint32_t x = plane_state->src.x1 >> 16; uint32_t x = plane_state->base.src.x1 >> 16;
uint32_t y = plane_state->src.y1 >> 16; uint32_t y = plane_state->base.src.y1 >> 16;
uint32_t src_w = drm_rect_width(&plane_state->src) >> 16; uint32_t src_w = drm_rect_width(&plane_state->base.src) >> 16;
uint32_t src_h = drm_rect_height(&plane_state->src) >> 16; uint32_t src_h = drm_rect_height(&plane_state->base.src) >> 16;
sprctl = SP_ENABLE; sprctl = SP_ENABLE;
...@@ -512,14 +512,14 @@ ivb_update_plane(struct drm_plane *plane, ...@@ -512,14 +512,14 @@ ivb_update_plane(struct drm_plane *plane,
unsigned int rotation = plane_state->base.rotation; unsigned int rotation = plane_state->base.rotation;
int cpp = drm_format_plane_cpp(fb->pixel_format, 0); int cpp = drm_format_plane_cpp(fb->pixel_format, 0);
const struct drm_intel_sprite_colorkey *key = &plane_state->ckey; const struct drm_intel_sprite_colorkey *key = &plane_state->ckey;
int crtc_x = plane_state->dst.x1; int crtc_x = plane_state->base.dst.x1;
int crtc_y = plane_state->dst.y1; int crtc_y = plane_state->base.dst.y1;
uint32_t crtc_w = drm_rect_width(&plane_state->dst); uint32_t crtc_w = drm_rect_width(&plane_state->base.dst);
uint32_t crtc_h = drm_rect_height(&plane_state->dst); uint32_t crtc_h = drm_rect_height(&plane_state->base.dst);
uint32_t x = plane_state->src.x1 >> 16; uint32_t x = plane_state->base.src.x1 >> 16;
uint32_t y = plane_state->src.y1 >> 16; uint32_t y = plane_state->base.src.y1 >> 16;
uint32_t src_w = drm_rect_width(&plane_state->src) >> 16; uint32_t src_w = drm_rect_width(&plane_state->base.src) >> 16;
uint32_t src_h = drm_rect_height(&plane_state->src) >> 16; uint32_t src_h = drm_rect_height(&plane_state->base.src) >> 16;
sprctl = SPRITE_ENABLE; sprctl = SPRITE_ENABLE;
...@@ -653,14 +653,14 @@ ilk_update_plane(struct drm_plane *plane, ...@@ -653,14 +653,14 @@ ilk_update_plane(struct drm_plane *plane,
unsigned int rotation = plane_state->base.rotation; unsigned int rotation = plane_state->base.rotation;
int cpp = drm_format_plane_cpp(fb->pixel_format, 0); int cpp = drm_format_plane_cpp(fb->pixel_format, 0);
const struct drm_intel_sprite_colorkey *key = &plane_state->ckey; const struct drm_intel_sprite_colorkey *key = &plane_state->ckey;
int crtc_x = plane_state->dst.x1; int crtc_x = plane_state->base.dst.x1;
int crtc_y = plane_state->dst.y1; int crtc_y = plane_state->base.dst.y1;
uint32_t crtc_w = drm_rect_width(&plane_state->dst); uint32_t crtc_w = drm_rect_width(&plane_state->base.dst);
uint32_t crtc_h = drm_rect_height(&plane_state->dst); uint32_t crtc_h = drm_rect_height(&plane_state->base.dst);
uint32_t x = plane_state->src.x1 >> 16; uint32_t x = plane_state->base.src.x1 >> 16;
uint32_t y = plane_state->src.y1 >> 16; uint32_t y = plane_state->base.src.y1 >> 16;
uint32_t src_w = drm_rect_width(&plane_state->src) >> 16; uint32_t src_w = drm_rect_width(&plane_state->base.src) >> 16;
uint32_t src_h = drm_rect_height(&plane_state->src) >> 16; uint32_t src_h = drm_rect_height(&plane_state->base.src) >> 16;
dvscntr = DVS_ENABLE; dvscntr = DVS_ENABLE;
...@@ -778,15 +778,15 @@ intel_check_sprite_plane(struct drm_plane *plane, ...@@ -778,15 +778,15 @@ intel_check_sprite_plane(struct drm_plane *plane,
int crtc_x, crtc_y; int crtc_x, crtc_y;
unsigned int crtc_w, crtc_h; unsigned int crtc_w, crtc_h;
uint32_t src_x, src_y, src_w, src_h; uint32_t src_x, src_y, src_w, src_h;
struct drm_rect *src = &state->src; struct drm_rect *src = &state->base.src;
struct drm_rect *dst = &state->dst; struct drm_rect *dst = &state->base.dst;
const struct drm_rect *clip = &state->clip; const struct drm_rect *clip = &state->clip;
int hscale, vscale; int hscale, vscale;
int max_scale, min_scale; int max_scale, min_scale;
bool can_scale; bool can_scale;
if (!fb) { if (!fb) {
state->visible = false; state->base.visible = false;
return 0; return 0;
} }
...@@ -834,14 +834,14 @@ intel_check_sprite_plane(struct drm_plane *plane, ...@@ -834,14 +834,14 @@ intel_check_sprite_plane(struct drm_plane *plane,
vscale = drm_rect_calc_vscale_relaxed(src, dst, min_scale, max_scale); vscale = drm_rect_calc_vscale_relaxed(src, dst, min_scale, max_scale);
BUG_ON(vscale < 0); BUG_ON(vscale < 0);
state->visible = drm_rect_clip_scaled(src, dst, clip, hscale, vscale); state->base.visible = drm_rect_clip_scaled(src, dst, clip, hscale, vscale);
crtc_x = dst->x1; crtc_x = dst->x1;
crtc_y = dst->y1; crtc_y = dst->y1;
crtc_w = drm_rect_width(dst); crtc_w = drm_rect_width(dst);
crtc_h = drm_rect_height(dst); crtc_h = drm_rect_height(dst);
if (state->visible) { if (state->base.visible) {
/* check again in case clipping clamped the results */ /* check again in case clipping clamped the results */
hscale = drm_rect_calc_hscale(src, dst, min_scale, max_scale); hscale = drm_rect_calc_hscale(src, dst, min_scale, max_scale);
if (hscale < 0) { if (hscale < 0) {
...@@ -898,12 +898,12 @@ intel_check_sprite_plane(struct drm_plane *plane, ...@@ -898,12 +898,12 @@ intel_check_sprite_plane(struct drm_plane *plane,
crtc_w &= ~1; crtc_w &= ~1;
if (crtc_w == 0) if (crtc_w == 0)
state->visible = false; state->base.visible = false;
} }
} }
/* Check size restrictions when scaling */ /* Check size restrictions when scaling */
if (state->visible && (src_w != crtc_w || src_h != crtc_h)) { if (state->base.visible && (src_w != crtc_w || src_h != crtc_h)) {
unsigned int width_bytes; unsigned int width_bytes;
int cpp = drm_format_plane_cpp(fb->pixel_format, 0); int cpp = drm_format_plane_cpp(fb->pixel_format, 0);
...@@ -912,10 +912,10 @@ intel_check_sprite_plane(struct drm_plane *plane, ...@@ -912,10 +912,10 @@ intel_check_sprite_plane(struct drm_plane *plane,
/* FIXME interlacing min height is 6 */ /* FIXME interlacing min height is 6 */
if (crtc_w < 3 || crtc_h < 3) if (crtc_w < 3 || crtc_h < 3)
state->visible = false; state->base.visible = false;
if (src_w < 3 || src_h < 3) if (src_w < 3 || src_h < 3)
state->visible = false; state->base.visible = false;
width_bytes = ((src_x * cpp) & 63) + src_w * cpp; width_bytes = ((src_x * cpp) & 63) + src_w * cpp;
...@@ -926,7 +926,7 @@ intel_check_sprite_plane(struct drm_plane *plane, ...@@ -926,7 +926,7 @@ intel_check_sprite_plane(struct drm_plane *plane,
} }
} }
if (state->visible) { if (state->base.visible) {
src->x1 = src_x << 16; src->x1 = src_x << 16;
src->x2 = (src_x + src_w) << 16; src->x2 = (src_x + src_w) << 16;
src->y1 = src_y << 16; src->y1 = src_y << 16;
......
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