summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2013-07-26 10:49:52 +1000
committerDave Airlie <airlied@redhat.com>2013-09-03 15:11:26 +1000
commit4e0d50a43cdfa53e9ae810d10702701efa3eb98d (patch)
treec9fde3fe81dfdfc0eae9632a5de5a1862ac5e488
parent265e24e89146f2dbf56509654fac38b2106ecb50 (diff)
virgl: add dumb annotation
to decide how to update screen
-rw-r--r--drivers/gpu/drm/virgl/virgl_drv.h1
-rw-r--r--drivers/gpu/drm/virgl/virgl_dumb.c1
-rw-r--r--drivers/gpu/drm/virgl/virgl_fb.c10
-rw-r--r--drivers/gpu/drm/virgl/virgl_object.c1
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);