Lines Matching full:plane

74 drm_plane_state *virtio_gpu_plane_duplicate_state(struct drm_plane *plane)  in virtio_gpu_plane_duplicate_state()  argument
78 if (WARN_ON(!plane->state)) in virtio_gpu_plane_duplicate_state()
85 __drm_atomic_helper_plane_duplicate_state(plane, &new->base); in virtio_gpu_plane_duplicate_state()
98 static int virtio_gpu_plane_atomic_check(struct drm_plane *plane, in virtio_gpu_plane_atomic_check() argument
102 plane); in virtio_gpu_plane_atomic_check()
104 plane); in virtio_gpu_plane_atomic_check()
105 bool is_cursor = plane->type == DRM_PLANE_TYPE_CURSOR; in virtio_gpu_plane_atomic_check()
113 * Ignore damage clips if the framebuffer attached to the plane's state in virtio_gpu_plane_atomic_check()
114 * has changed since the last plane update (page-flip). In this case, a in virtio_gpu_plane_atomic_check()
115 * full plane update should happen because uploads are done per-buffer. in virtio_gpu_plane_atomic_check()
180 static void virtio_gpu_panic_resource_flush(struct drm_plane *plane, in virtio_gpu_panic_resource_flush() argument
184 struct drm_device *dev = plane->dev; in virtio_gpu_panic_resource_flush()
189 vgfb = to_virtio_gpu_framebuffer(plane->state->fb); in virtio_gpu_panic_resource_flush()
197 static void virtio_gpu_resource_flush(struct drm_plane *plane, in virtio_gpu_resource_flush() argument
201 struct drm_device *dev = plane->dev; in virtio_gpu_resource_flush()
207 vgfb = to_virtio_gpu_framebuffer(plane->state->fb); in virtio_gpu_resource_flush()
208 vgplane_st = to_virtio_gpu_plane_state(plane->state); in virtio_gpu_resource_flush()
231 static void virtio_gpu_primary_plane_update(struct drm_plane *plane, in virtio_gpu_primary_plane_update() argument
235 plane); in virtio_gpu_primary_plane_update()
236 struct drm_device *dev = plane->dev; in virtio_gpu_primary_plane_update()
242 if (plane->state->crtc) in virtio_gpu_primary_plane_update()
243 output = drm_crtc_to_virtio_gpu_output(plane->state->crtc); in virtio_gpu_primary_plane_update()
249 if (!plane->state->fb || !output->crtc.state->active) { in virtio_gpu_primary_plane_update()
252 plane->state->src_w >> 16, in virtio_gpu_primary_plane_update()
253 plane->state->src_h >> 16, in virtio_gpu_primary_plane_update()
259 if (!drm_atomic_helper_damage_merged(old_state, plane->state, &rect)) in virtio_gpu_primary_plane_update()
262 bo = gem_to_virtio_gpu_obj(plane->state->fb->obj[0]); in virtio_gpu_primary_plane_update()
264 virtio_gpu_update_dumb_bo(vgdev, plane->state, &rect); in virtio_gpu_primary_plane_update()
266 if (plane->state->fb != old_state->fb || in virtio_gpu_primary_plane_update()
267 plane->state->src_w != old_state->src_w || in virtio_gpu_primary_plane_update()
268 plane->state->src_h != old_state->src_h || in virtio_gpu_primary_plane_update()
269 plane->state->src_x != old_state->src_x || in virtio_gpu_primary_plane_update()
270 plane->state->src_y != old_state->src_y || in virtio_gpu_primary_plane_update()
275 plane->state->crtc_w, plane->state->crtc_h, in virtio_gpu_primary_plane_update()
276 plane->state->crtc_x, plane->state->crtc_y, in virtio_gpu_primary_plane_update()
277 plane->state->src_w >> 16, in virtio_gpu_primary_plane_update()
278 plane->state->src_h >> 16, in virtio_gpu_primary_plane_update()
279 plane->state->src_x >> 16, in virtio_gpu_primary_plane_update()
280 plane->state->src_y >> 16); in virtio_gpu_primary_plane_update()
285 plane->state->fb, in virtio_gpu_primary_plane_update()
286 plane->state->src_w >> 16, in virtio_gpu_primary_plane_update()
287 plane->state->src_h >> 16, in virtio_gpu_primary_plane_update()
288 plane->state->src_x >> 16, in virtio_gpu_primary_plane_update()
289 plane->state->src_y >> 16); in virtio_gpu_primary_plane_update()
293 plane->state->src_w >> 16, in virtio_gpu_primary_plane_update()
294 plane->state->src_h >> 16, in virtio_gpu_primary_plane_update()
295 plane->state->src_x >> 16, in virtio_gpu_primary_plane_update()
296 plane->state->src_y >> 16); in virtio_gpu_primary_plane_update()
300 virtio_gpu_resource_flush(plane, in virtio_gpu_primary_plane_update()
307 static int virtio_gpu_prepare_imported_obj(struct drm_plane *plane, in virtio_gpu_prepare_imported_obj() argument
311 struct virtio_gpu_device *vgdev = plane->dev->dev_private; in virtio_gpu_prepare_imported_obj()
345 static int virtio_gpu_plane_prepare_fb(struct drm_plane *plane, in virtio_gpu_plane_prepare_fb() argument
348 struct drm_device *dev = plane->dev; in virtio_gpu_plane_prepare_fb()
363 drm_gem_plane_helper_prepare_fb(plane, new_state); in virtio_gpu_plane_prepare_fb()
365 if (!bo || (plane->type == DRM_PLANE_TYPE_PRIMARY && !bo->guest_blob)) in virtio_gpu_plane_prepare_fb()
378 ret = virtio_gpu_prepare_imported_obj(plane, new_state, obj); in virtio_gpu_plane_prepare_fb()
404 static void virtio_gpu_plane_cleanup_fb(struct drm_plane *plane, in virtio_gpu_plane_cleanup_fb() argument
424 static void virtio_gpu_cursor_plane_update(struct drm_plane *plane, in virtio_gpu_cursor_plane_update() argument
428 plane); in virtio_gpu_cursor_plane_update()
429 struct drm_device *dev = plane->dev; in virtio_gpu_cursor_plane_update()
437 if (plane->state->crtc) in virtio_gpu_cursor_plane_update()
438 output = drm_crtc_to_virtio_gpu_output(plane->state->crtc); in virtio_gpu_cursor_plane_update()
444 if (plane->state->fb) { in virtio_gpu_cursor_plane_update()
445 vgfb = to_virtio_gpu_framebuffer(plane->state->fb); in virtio_gpu_cursor_plane_update()
446 vgplane_st = to_virtio_gpu_plane_state(plane->state); in virtio_gpu_cursor_plane_update()
453 if (bo && bo->dumb && (plane->state->fb != old_state->fb)) { in virtio_gpu_cursor_plane_update()
464 plane->state->crtc_w, in virtio_gpu_cursor_plane_update()
465 plane->state->crtc_h, in virtio_gpu_cursor_plane_update()
471 if (plane->state->fb != old_state->fb) { in virtio_gpu_cursor_plane_update()
473 plane->state->crtc_x, in virtio_gpu_cursor_plane_update()
474 plane->state->crtc_y, in virtio_gpu_cursor_plane_update()
475 plane->state->hotspot_x, in virtio_gpu_cursor_plane_update()
476 plane->state->hotspot_y); in virtio_gpu_cursor_plane_update()
480 if (plane->state->fb) { in virtio_gpu_cursor_plane_update()
482 cpu_to_le32(plane->state->hotspot_x); in virtio_gpu_cursor_plane_update()
484 cpu_to_le32(plane->state->hotspot_y); in virtio_gpu_cursor_plane_update()
491 plane->state->crtc_x, in virtio_gpu_cursor_plane_update()
492 plane->state->crtc_y); in virtio_gpu_cursor_plane_update()
496 output->cursor.pos.x = cpu_to_le32(plane->state->crtc_x); in virtio_gpu_cursor_plane_update()
497 output->cursor.pos.y = cpu_to_le32(plane->state->crtc_y); in virtio_gpu_cursor_plane_update()
501 static int virtio_drm_get_scanout_buffer(struct drm_plane *plane, in virtio_drm_get_scanout_buffer() argument
506 if (!plane->state || !plane->state->fb || !plane->state->visible) in virtio_drm_get_scanout_buffer()
509 bo = gem_to_virtio_gpu_obj(plane->state->fb->obj[0]); in virtio_drm_get_scanout_buffer()
517 sb->format = plane->state->fb->format; in virtio_drm_get_scanout_buffer()
518 sb->height = plane->state->fb->height; in virtio_drm_get_scanout_buffer()
519 sb->width = plane->state->fb->width; in virtio_drm_get_scanout_buffer()
520 sb->pitch[0] = plane->state->fb->pitches[0]; in virtio_drm_get_scanout_buffer()
524 static void virtio_panic_flush(struct drm_plane *plane) in virtio_panic_flush() argument
527 struct drm_device *dev = plane->dev; in virtio_panic_flush()
533 rect.x2 = plane->state->fb->width; in virtio_panic_flush()
534 rect.y2 = plane->state->fb->height; in virtio_panic_flush()
536 bo = gem_to_virtio_gpu_obj(plane->state->fb->obj[0]); in virtio_panic_flush()
539 if (virtio_gpu_panic_update_dumb_bo(vgdev, plane->state, in virtio_panic_flush()
544 virtio_gpu_panic_resource_flush(plane, in virtio_panic_flush()
545 plane->state->src_x >> 16, in virtio_panic_flush()
546 plane->state->src_y >> 16, in virtio_panic_flush()
547 plane->state->src_w >> 16, in virtio_panic_flush()
548 plane->state->src_h >> 16); in virtio_panic_flush()
573 struct drm_plane *plane; in virtio_gpu_plane_init() local
587 plane = drmm_universal_plane_alloc(dev, struct drm_plane, dev, in virtio_gpu_plane_init()
590 if (IS_ERR(plane)) in virtio_gpu_plane_init()
591 return plane; in virtio_gpu_plane_init()
593 drm_plane_helper_add(plane, funcs); in virtio_gpu_plane_init()
596 drm_plane_enable_fb_damage_clips(plane); in virtio_gpu_plane_init()
598 return plane; in virtio_gpu_plane_init()