cache->plane.pixel_blend_mode = plane_state->hw.pixel_blend_mode;
 
        cache->fb.format = fb->format;
-       cache->fb.stride = fb->pitches[0];
        cache->fb.modifier = fb->modifier;
 
+       /* FIXME is this correct? */
+       cache->fb.stride = plane_state->color_plane[0].stride;
+       if (drm_rotation_90_or_270(plane_state->hw.rotation))
+               cache->fb.stride *= fb->format->cpp[0];
+
        /* FBC1 compression interval: arbitrary choice of 1 second */
        cache->interval = drm_mode_vrefresh(&crtc_state->hw.adjusted_mode);
 
                return false;
        }
 
+       if (!pixel_format_is_valid(dev_priv, cache->fb.format->format)) {
+               fbc->no_fbc_reason = "pixel format is invalid";
+               return false;
+       }
+
        if (!rotation_is_valid(dev_priv, cache->fb.format->format,
                               cache->plane.rotation)) {
                fbc->no_fbc_reason = "rotation unsupported";
                return false;
        }
 
-       if (!pixel_format_is_valid(dev_priv, cache->fb.format->format)) {
-               fbc->no_fbc_reason = "pixel format is invalid";
-               return false;
-       }
-
        if (cache->plane.pixel_blend_mode != DRM_MODE_BLEND_PIXEL_NONE &&
            cache->fb.format->has_alpha) {
                fbc->no_fbc_reason = "per-pixel alpha blending is incompatible with FBC";