diff options
author | Dave Airlie <airlied@redhat.com> | 2013-07-26 10:49:52 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2013-09-03 15:11:26 +1000 |
commit | 4e0d50a43cdfa53e9ae810d10702701efa3eb98d (patch) | |
tree | c9fde3fe81dfdfc0eae9632a5de5a1862ac5e488 | |
parent | 265e24e89146f2dbf56509654fac38b2106ecb50 (diff) |
virgl: add dumb annotation
to decide how to update screen
-rw-r--r-- | drivers/gpu/drm/virgl/virgl_drv.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/virgl/virgl_dumb.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/virgl/virgl_fb.c | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/virgl/virgl_object.c | 1 |
4 files changed, 9 insertions, 4 deletions
diff --git a/drivers/gpu/drm/virgl/virgl_drv.h b/drivers/gpu/drm/virgl/virgl_drv.h index 230ddabe2237..be79c6acc6a3 100644 --- a/drivers/gpu/drm/virgl/virgl_drv.h +++ b/drivers/gpu/drm/virgl/virgl_drv.h @@ -75,6 +75,7 @@ struct virgl_bo { struct drm_gem_object gem_base; struct sg_table *sgt; uint32_t res_handle; /* used for backing dumb objects */ + bool dumb; }; #define gem_to_virgl_bo(gobj) container_of((gobj), struct virgl_bo, gem_base) diff --git a/drivers/gpu/drm/virgl/virgl_dumb.c b/drivers/gpu/drm/virgl/virgl_dumb.c index 54c423ae7c98..e8d092d699ff 100644 --- a/drivers/gpu/drm/virgl/virgl_dumb.c +++ b/drivers/gpu/drm/virgl/virgl_dumb.c @@ -52,6 +52,7 @@ int virgl_mode_dumb_create(struct drm_file *file_priv, if (r) return r; + qobj->dumb = true; args->pitch = pitch; args->handle = handle; return 0; diff --git a/drivers/gpu/drm/virgl/virgl_fb.c b/drivers/gpu/drm/virgl/virgl_fb.c index 66e95418fa63..4fbe689e4789 100644 --- a/drivers/gpu/drm/virgl/virgl_fb.c +++ b/drivers/gpu/drm/virgl/virgl_fb.c @@ -171,10 +171,12 @@ int virgl_3d_surface_dirty(struct virgl_framebuffer *qfb, struct drm_clip_rect * bottom = max_t(int, bottom, (int)clips_ptr->y2); } - if (qfb->obj) - virgl_dirty_update(qfb, left, top, right - left, bottom - top); - else - virgl_3d_dirty_front(qdev, qfb, left, top, right - left, bottom - top); + if (qfb->obj) { + struct virgl_bo *qobj = gem_to_virgl_bo(qfb->obj); + if (qobj->dumb) + return virgl_dirty_update(qfb, left, top, right - left, bottom - top); + } + virgl_3d_dirty_front(qdev, qfb, left, top, right - left, bottom - top); return 0; } diff --git a/drivers/gpu/drm/virgl/virgl_object.c b/drivers/gpu/drm/virgl/virgl_object.c index f5759444f424..e0e64b2b5f0f 100644 --- a/drivers/gpu/drm/virgl/virgl_object.c +++ b/drivers/gpu/drm/virgl/virgl_object.c @@ -94,6 +94,7 @@ int virgl_bo_create(struct virgl_device *qdev, bo->gem_base.driver_private = NULL; bo->type = domain; bo->pin_count = 0; + bo->dumb = false; INIT_LIST_HEAD(&bo->list); virgl_ttm_placement_from_domain(bo, domain); |