[PATCH 36/71] drm: generalized *_bo_map functions

"Enrico Weigelt, metux IT consult" <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
Signed-off-by: Enrico Weigelt, metux IT consult <[email protected]>
---
 src/drm/cairo-drm-intel-private.h  | 8 +++++++-
 src/drm/cairo-drm-intel.c          | 6 +++++-
 src/drm/cairo-drm-private.h        | 1 +
 src/drm/cairo-drm-radeon-private.h | 8 +++++++-
 src/drm/cairo-drm-radeon.c         | 6 +++++-
 5 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/src/drm/cairo-drm-intel-private.h b/src/drm/cairo-drm-intel-private.h
index 3e5373327..4d3b7c1c6 100644
--- a/src/drm/cairo-drm-intel-private.h
+++ b/src/drm/cairo-drm-intel-private.h
@@ -346,7 +346,13 @@ intel_bo_read (const intel_device_t *dev,
 	       void *data);
 
 cairo_private void *
-intel_bo_map (const intel_device_t *dev, intel_bo_t *bo);
+_cairo_drm_intel_bo_map (const cairo_drm_device_t *dev, cairo_drm_bo_t *bo);
+
+static inline void *
+intel_bo_map (const intel_device_t *dev, intel_bo_t *bo)
+{
+    return dev->base.bo.map (&dev->base, &bo->base);
+}
 
 cairo_private cairo_status_t
 intel_bo_init (const intel_device_t *dev,
diff --git a/src/drm/cairo-drm-intel.c b/src/drm/cairo-drm-intel.c
index 86876e667..515eec91c 100644
--- a/src/drm/cairo-drm-intel.c
+++ b/src/drm/cairo-drm-intel.c
@@ -155,8 +155,11 @@ intel_bo_read (const intel_device_t *device,
 }
 
 void *
-intel_bo_map (const intel_device_t *device, intel_bo_t *bo)
+_cairo_drm_intel_bo_map (const cairo_drm_device_t *drm_dev, cairo_drm_bo_t *drm_bo)
 {
+    const intel_device_t *device = _cairo_drm_device_cast_intel_const (drm_dev);
+    intel_bo_t *bo = _cairo_drm_bo_cast_intel (drm_bo);
+
     struct drm_i915_gem_set_domain set_domain;
     uint32_t domain;
     int ret;
@@ -718,6 +721,7 @@ intel_device_init (intel_device_t *device, int fd)
     device->gradient_cache.size = 0;
 
     device->base.bo.release = intel_bo_release;
+    device->base.bo.map     = _cairo_drm_intel_bo_map;
 
     return CAIRO_STATUS_SUCCESS;
 }
diff --git a/src/drm/cairo-drm-private.h b/src/drm/cairo-drm-private.h
index 800d1598c..90cd54c94 100644
--- a/src/drm/cairo-drm-private.h
+++ b/src/drm/cairo-drm-private.h
@@ -92,6 +92,7 @@ typedef cairo_surface_t *
 
 typedef struct _cairo_drm_bo_backend {
     void (*release) (cairo_drm_device_t *device, cairo_drm_bo_t *bo);
+    void *(*map)    (const cairo_drm_device_t *device, cairo_drm_bo_t *bo);
 } cairo_drm_bo_backend_t;
 
 typedef struct _cairo_drm_device_backend {
diff --git a/src/drm/cairo-drm-radeon-private.h b/src/drm/cairo-drm-radeon-private.h
index 561518c8b..c2234fc20 100644
--- a/src/drm/cairo-drm-radeon-private.h
+++ b/src/drm/cairo-drm-radeon-private.h
@@ -175,7 +175,13 @@ cairo_private void
 radeon_bo_wait (const radeon_device_t *dev, radeon_bo_t *bo);
 
 cairo_private void *
-radeon_bo_map (const radeon_device_t *dev, radeon_bo_t *bo);
+_cairo_drm_radeon_bo_map (const cairo_drm_device_t *dev, cairo_drm_bo_t *bo);
+
+static inline void *
+radeon_bo_map (const radeon_device_t *dev, radeon_bo_t *bo)
+{
+    return dev->base.bo.map (&dev->base, &bo->base);
+}
 
 cairo_private cairo_drm_bo_t *
 radeon_bo_create (radeon_device_t *dev,
diff --git a/src/drm/cairo-drm-radeon.c b/src/drm/cairo-drm-radeon.c
index 409c75e58..2ef53d16d 100644
--- a/src/drm/cairo-drm-radeon.c
+++ b/src/drm/cairo-drm-radeon.c
@@ -138,12 +138,15 @@ radeon_bo_wait (const radeon_device_t *device, radeon_bo_t *bo)
 }
 
 void *
-radeon_bo_map (const radeon_device_t *device, radeon_bo_t *bo)
+_cairo_drm_radeon_bo_map (const cairo_drm_device_t *drm_dev, cairo_drm_bo_t *drm_bo)
 {
     struct drm_radeon_gem_mmap mmap_arg;
     void *ptr;
     int ret;
 
+    const radeon_device_t* device = _cairo_drm_device_cast_radeon_const (drm_dev);
+    radeon_bo_t *bo = _cairo_drm_bo_cast_radeon (drm_bo);
+
     assert (bo->base.mapped == NULL);
 
     memset (&mmap_arg, 0, sizeof (mmap_arg));
@@ -294,6 +297,7 @@ radeon_device_init (radeon_device_t *device, int fd)
     _cairo_freepool_init (&device->base.bo_pool, sizeof (radeon_bo_t));
 
     device->base.bo.release = radeon_bo_release;
+    device->base.bo.map     = _cairo_drm_radeon_bo_map;
 
     return CAIRO_STATUS_SUCCESS;
 }
-- 
2.11.0.rc0.7.gbe5a750

-- 
cairo mailing list
[email protected]
https://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.