Lines Matching full:plane
72 drm_plane_state *virtio_gpu_plane_duplicate_state(struct drm_plane *plane) in virtio_gpu_plane_duplicate_state() argument
76 if (WARN_ON(!plane->state)) in virtio_gpu_plane_duplicate_state()
83 __drm_atomic_helper_plane_duplicate_state(plane, &new->base); in virtio_gpu_plane_duplicate_state()
96 static int virtio_gpu_plane_atomic_check(struct drm_plane *plane, in virtio_gpu_plane_atomic_check() argument
100 plane); in virtio_gpu_plane_atomic_check()
102 plane); in virtio_gpu_plane_atomic_check()
103 bool is_cursor = plane->type == DRM_PLANE_TYPE_CURSOR; in virtio_gpu_plane_atomic_check()
111 * Ignore damage clips if the framebuffer attached to the plane's state in virtio_gpu_plane_atomic_check()
112 * has changed since the last plane update (page-flip). In this case, a in virtio_gpu_plane_atomic_check()
113 * full plane update should happen because uploads are done per-buffer. in virtio_gpu_plane_atomic_check()
153 static void virtio_gpu_resource_flush(struct drm_plane *plane, in virtio_gpu_resource_flush() argument
157 struct drm_device *dev = plane->dev; in virtio_gpu_resource_flush()
163 vgfb = to_virtio_gpu_framebuffer(plane->state->fb); in virtio_gpu_resource_flush()
164 vgplane_st = to_virtio_gpu_plane_state(plane->state); in virtio_gpu_resource_flush()
187 static void virtio_gpu_primary_plane_update(struct drm_plane *plane, in virtio_gpu_primary_plane_update() argument
191 plane); in virtio_gpu_primary_plane_update()
192 struct drm_device *dev = plane->dev; in virtio_gpu_primary_plane_update()
198 if (plane->state->crtc) in virtio_gpu_primary_plane_update()
199 output = drm_crtc_to_virtio_gpu_output(plane->state->crtc); in virtio_gpu_primary_plane_update()
205 if (!plane->state->fb || !output->crtc.state->active) { in virtio_gpu_primary_plane_update()
208 plane->state->src_w >> 16, in virtio_gpu_primary_plane_update()
209 plane->state->src_h >> 16, in virtio_gpu_primary_plane_update()
215 if (!drm_atomic_helper_damage_merged(old_state, plane->state, &rect)) in virtio_gpu_primary_plane_update()
218 bo = gem_to_virtio_gpu_obj(plane->state->fb->obj[0]); in virtio_gpu_primary_plane_update()
220 virtio_gpu_update_dumb_bo(vgdev, plane->state, &rect); in virtio_gpu_primary_plane_update()
222 if (plane->state->fb != old_state->fb || in virtio_gpu_primary_plane_update()
223 plane->state->src_w != old_state->src_w || in virtio_gpu_primary_plane_update()
224 plane->state->src_h != old_state->src_h || in virtio_gpu_primary_plane_update()
225 plane->state->src_x != old_state->src_x || in virtio_gpu_primary_plane_update()
226 plane->state->src_y != old_state->src_y || in virtio_gpu_primary_plane_update()
231 plane->state->crtc_w, plane->state->crtc_h, in virtio_gpu_primary_plane_update()
232 plane->state->crtc_x, plane->state->crtc_y, in virtio_gpu_primary_plane_update()
233 plane->state->src_w >> 16, in virtio_gpu_primary_plane_update()
234 plane->state->src_h >> 16, in virtio_gpu_primary_plane_update()
235 plane->state->src_x >> 16, in virtio_gpu_primary_plane_update()
236 plane->state->src_y >> 16); in virtio_gpu_primary_plane_update()
241 plane->state->fb, in virtio_gpu_primary_plane_update()
242 plane->state->src_w >> 16, in virtio_gpu_primary_plane_update()
243 plane->state->src_h >> 16, in virtio_gpu_primary_plane_update()
244 plane->state->src_x >> 16, in virtio_gpu_primary_plane_update()
245 plane->state->src_y >> 16); in virtio_gpu_primary_plane_update()
249 plane->state->src_w >> 16, in virtio_gpu_primary_plane_update()
250 plane->state->src_h >> 16, in virtio_gpu_primary_plane_update()
251 plane->state->src_x >> 16, in virtio_gpu_primary_plane_update()
252 plane->state->src_y >> 16); in virtio_gpu_primary_plane_update()
256 virtio_gpu_resource_flush(plane, in virtio_gpu_primary_plane_update()
263 static int virtio_gpu_prepare_imported_obj(struct drm_plane *plane, in virtio_gpu_prepare_imported_obj() argument
267 struct virtio_gpu_device *vgdev = plane->dev->dev_private; in virtio_gpu_prepare_imported_obj()
301 static int virtio_gpu_plane_prepare_fb(struct drm_plane *plane, in virtio_gpu_plane_prepare_fb() argument
304 struct drm_device *dev = plane->dev; in virtio_gpu_plane_prepare_fb()
319 drm_gem_plane_helper_prepare_fb(plane, new_state); in virtio_gpu_plane_prepare_fb()
321 if (!bo || (plane->type == DRM_PLANE_TYPE_PRIMARY && !bo->guest_blob)) in virtio_gpu_plane_prepare_fb()
334 ret = virtio_gpu_prepare_imported_obj(plane, new_state, obj); in virtio_gpu_plane_prepare_fb()
360 static void virtio_gpu_plane_cleanup_fb(struct drm_plane *plane, in virtio_gpu_plane_cleanup_fb() argument
380 static void virtio_gpu_cursor_plane_update(struct drm_plane *plane, in virtio_gpu_cursor_plane_update() argument
384 plane); in virtio_gpu_cursor_plane_update()
385 struct drm_device *dev = plane->dev; in virtio_gpu_cursor_plane_update()
393 if (plane->state->crtc) in virtio_gpu_cursor_plane_update()
394 output = drm_crtc_to_virtio_gpu_output(plane->state->crtc); in virtio_gpu_cursor_plane_update()
400 if (plane->state->fb) { in virtio_gpu_cursor_plane_update()
401 vgfb = to_virtio_gpu_framebuffer(plane->state->fb); in virtio_gpu_cursor_plane_update()
402 vgplane_st = to_virtio_gpu_plane_state(plane->state); in virtio_gpu_cursor_plane_update()
409 if (bo && bo->dumb && (plane->state->fb != old_state->fb)) { in virtio_gpu_cursor_plane_update()
420 plane->state->crtc_w, in virtio_gpu_cursor_plane_update()
421 plane->state->crtc_h, in virtio_gpu_cursor_plane_update()
427 if (plane->state->fb != old_state->fb) { in virtio_gpu_cursor_plane_update()
429 plane->state->crtc_x, in virtio_gpu_cursor_plane_update()
430 plane->state->crtc_y, in virtio_gpu_cursor_plane_update()
431 plane->state->hotspot_x, in virtio_gpu_cursor_plane_update()
432 plane->state->hotspot_y); in virtio_gpu_cursor_plane_update()
436 if (plane->state->fb) { in virtio_gpu_cursor_plane_update()
438 cpu_to_le32(plane->state->hotspot_x); in virtio_gpu_cursor_plane_update()
440 cpu_to_le32(plane->state->hotspot_y); in virtio_gpu_cursor_plane_update()
447 plane->state->crtc_x, in virtio_gpu_cursor_plane_update()
448 plane->state->crtc_y); in virtio_gpu_cursor_plane_update()
452 output->cursor.pos.x = cpu_to_le32(plane->state->crtc_x); in virtio_gpu_cursor_plane_update()
453 output->cursor.pos.y = cpu_to_le32(plane->state->crtc_y); in virtio_gpu_cursor_plane_update()
477 struct drm_plane *plane; in virtio_gpu_plane_init() local
491 plane = drmm_universal_plane_alloc(dev, struct drm_plane, dev, in virtio_gpu_plane_init()
494 if (IS_ERR(plane)) in virtio_gpu_plane_init()
495 return plane; in virtio_gpu_plane_init()
497 drm_plane_helper_add(plane, funcs); in virtio_gpu_plane_init()
500 drm_plane_enable_fb_damage_clips(plane); in virtio_gpu_plane_init()
502 return plane; in virtio_gpu_plane_init()