drm/vmwgfx: Try to fix plane clipping
Try to fix the code to actually clip the plane to the crtc bounds instead of the user provided crtc coordinates (which would be a no-op since those are exactly the coordinates before clipping). Cc: VMware Graphics <linux-graphics-maintainer@vmware.com> Cc: Sinclair Yeh <syeh@vmware.com> Cc: Thomas Hellstrom <thellstrom@vmware.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20171101182920.14386-4-ville.syrjala@linux.intel.com Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Reviewed-by: Sinclair Yeh <syeh@vmware.com>
This commit is contained in:
Родитель
13dd5b62ce
Коммит
58a275aa95
|
@ -441,21 +441,24 @@ vmw_du_cursor_plane_atomic_update(struct drm_plane *plane,
|
||||||
int vmw_du_primary_plane_atomic_check(struct drm_plane *plane,
|
int vmw_du_primary_plane_atomic_check(struct drm_plane *plane,
|
||||||
struct drm_plane_state *state)
|
struct drm_plane_state *state)
|
||||||
{
|
{
|
||||||
|
struct drm_crtc_state *crtc_state = NULL;
|
||||||
struct drm_framebuffer *new_fb = state->fb;
|
struct drm_framebuffer *new_fb = state->fb;
|
||||||
struct drm_rect clip = {
|
struct drm_rect clip = {};
|
||||||
.x1 = state->crtc_x,
|
|
||||||
.y1 = state->crtc_y,
|
|
||||||
.x2 = state->crtc_x + state->crtc_w,
|
|
||||||
.y2 = state->crtc_y + state->crtc_h,
|
|
||||||
};
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (state->crtc)
|
||||||
|
crtc_state = drm_atomic_get_new_crtc_state(state->state, state->crtc);
|
||||||
|
|
||||||
|
if (crtc_state && crtc_state->enable) {
|
||||||
|
clip.x2 = crtc_state->adjusted_mode.hdisplay;
|
||||||
|
clip.y2 = crtc_state->adjusted_mode.vdisplay;
|
||||||
|
}
|
||||||
|
|
||||||
ret = drm_plane_helper_check_state(state, &clip,
|
ret = drm_plane_helper_check_state(state, &clip,
|
||||||
DRM_PLANE_HELPER_NO_SCALING,
|
DRM_PLANE_HELPER_NO_SCALING,
|
||||||
DRM_PLANE_HELPER_NO_SCALING,
|
DRM_PLANE_HELPER_NO_SCALING,
|
||||||
false, true);
|
false, true);
|
||||||
|
|
||||||
|
|
||||||
if (!ret && new_fb) {
|
if (!ret && new_fb) {
|
||||||
struct drm_crtc *crtc = state->crtc;
|
struct drm_crtc *crtc = state->crtc;
|
||||||
struct vmw_connector_state *vcs;
|
struct vmw_connector_state *vcs;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче