if (bo->dumb)
                virtio_gpu_update_dumb_bo(vgdev, bo, plane->state);
 
-       DRM_DEBUG("handle 0x%x, crtc %dx%d+%d+%d, src %dx%d+%d+%d\n",
-                 bo->hw_res_handle,
-                 plane->state->crtc_w, plane->state->crtc_h,
-                 plane->state->crtc_x, plane->state->crtc_y,
-                 plane->state->src_w >> 16,
-                 plane->state->src_h >> 16,
-                 plane->state->src_x >> 16,
-                 plane->state->src_y >> 16);
-       virtio_gpu_cmd_set_scanout(vgdev, output->index,
-                                  bo->hw_res_handle,
-                                  plane->state->src_w >> 16,
-                                  plane->state->src_h >> 16,
-                                  plane->state->src_x >> 16,
-                                  plane->state->src_y >> 16);
+       if (plane->state->fb != old_state->fb ||
+           plane->state->src_w != old_state->src_w ||
+           plane->state->src_h != old_state->src_h ||
+           plane->state->src_x != old_state->src_x ||
+           plane->state->src_y != old_state->src_y) {
+               DRM_DEBUG("handle 0x%x, crtc %dx%d+%d+%d, src %dx%d+%d+%d\n",
+                         bo->hw_res_handle,
+                         plane->state->crtc_w, plane->state->crtc_h,
+                         plane->state->crtc_x, plane->state->crtc_y,
+                         plane->state->src_w >> 16,
+                         plane->state->src_h >> 16,
+                         plane->state->src_x >> 16,
+                         plane->state->src_y >> 16);
+               virtio_gpu_cmd_set_scanout(vgdev, output->index,
+                                          bo->hw_res_handle,
+                                          plane->state->src_w >> 16,
+                                          plane->state->src_h >> 16,
+                                          plane->state->src_x >> 16,
+                                          plane->state->src_y >> 16);
+       }
+
        virtio_gpu_cmd_resource_flush(vgdev, bo->hw_res_handle,
                                      plane->state->src_x >> 16,
                                      plane->state->src_y >> 16,