[cairo] [PATCH v8 17/71] drm: typecasting helpers
Enrico Weigelt, metux IT consult
enrico.weigelt at gr13.net
Thu Jun 30 15:45:55 UTC 2016
Signed-off-by: Enrico Weigelt, metux IT consult <enrico.weigelt at gr13.net>
---
src/drm/cairo-drm-i915-glyphs.c | 4 +-
src/drm/cairo-drm-i915-private.h | 39 +++++++++++++++-
src/drm/cairo-drm-i915-shader.c | 25 +++++-----
src/drm/cairo-drm-i915-surface.c | 40 ++++++++--------
src/drm/cairo-drm-i965-glyphs.c | 2 +-
src/drm/cairo-drm-i965-private.h | 27 +++++++++++
src/drm/cairo-drm-i965-shader.c | 44 ++++++++---------
src/drm/cairo-drm-i965-surface.c | 12 ++---
src/drm/cairo-drm-intel-private.h | 57 ++++++++++++++++++++--
src/drm/cairo-drm-intel-surface.c | 34 ++++++++------
src/drm/cairo-drm-intel.c | 4 +-
src/drm/cairo-drm-private.h | 46 ++++++++++++++++++
src/drm/cairo-drm-radeon-private.h | 96 ++++++++++++++++++++++++++++++++++++++
src/drm/cairo-drm-radeon-surface.c | 33 ++++---------
src/drm/cairo-drm-radeon.c | 8 ++--
src/drm/cairo-drm-surface.c | 4 +-
src/drm/cairo-drm.c | 10 ++--
17 files changed, 363 insertions(+), 122 deletions(-)
diff --git a/src/drm/cairo-drm-i915-glyphs.c b/src/drm/cairo-drm-i915-glyphs.c
index 3b0efc2..9800f1c 100644
--- a/src/drm/cairo-drm-i915-glyphs.c
+++ b/src/drm/cairo-drm-i915-glyphs.c
@@ -218,7 +218,7 @@ i915_surface_mask_internal (i915_surface_t *dst,
1. / mask->intel.drm.width,
1. / mask->intel.drm.height);
- shader.mask.base.bo = intel_bo_reference (to_intel_bo (mask->intel.drm.bo));
+ shader.mask.base.bo = i915_surface_get_bo_ref (mask);
shader.mask.base.offset[0] = 0;
shader.mask.base.map[0] = mask->map0;
shader.mask.base.map[1] = mask->map1;
@@ -283,7 +283,7 @@ i915_surface_glyphs (void *abstract_surface,
cairo_clip_t *clip,
int *num_remaining)
{
- i915_surface_t *surface = abstract_surface;
+ i915_surface_t *surface = _cairo_abstract_surface_cast_i915 (abstract_surface);
i915_surface_t *mask = NULL;
i915_device_t *device;
i915_shader_t shader;
diff --git a/src/drm/cairo-drm-i915-private.h b/src/drm/cairo-drm-i915-private.h
index c750cf4..f040587 100644
--- a/src/drm/cairo-drm-i915-private.h
+++ b/src/drm/cairo-drm-i915-private.h
@@ -764,6 +764,39 @@ struct i915_surface {
uint32_t stencil_offset;
};
+static inline i915_surface_t *
+_cairo_abstract_surface_cast_i915 (cairo_surface_t* surface)
+{
+ return cairo_container_of (
+ cairo_abstract_surface_cast_intel (surface),
+ i915_surface_t,
+ intel);
+}
+
+static inline i915_device_t *
+_cairo_intel_device_cast_i915 (intel_device_t *device)
+{
+ return cairo_container_of (device, i915_device_t, intel);
+}
+
+static inline i915_device_t *
+_cairo_device_cast_i915 (void *device)
+{
+ return _cairo_intel_device_cast_i915 (_cairo_device_cast_intel (device));
+}
+
+static inline intel_bo_t *
+i915_surface_get_bo (const i915_surface_t *surface)
+{
+ return _cairo_intel_surface_get_bo (&surface->intel);
+}
+
+static inline intel_bo_t *
+i915_surface_get_bo_ref (const i915_surface_t *surface)
+{
+ return intel_bo_reference (i915_surface_get_bo (surface));
+}
+
typedef enum {
NONE = 0,
YUV_I420,
@@ -1031,8 +1064,10 @@ BUF_tiling (uint32_t tiling)
}
#define OUT_DWORD(dword) i915_batch_emit_dword (device, dword)
-#define OUT_RELOC(surface, read, write) i915_batch_emit_reloc (device, to_intel_bo (surface->intel.drm.bo), surface->offset, read, write, FALSE)
-#define OUT_RELOC_FENCED(surface, read, write) i915_batch_emit_reloc (device, to_intel_bo (surface->intel.drm.bo), surface->offset, read, write, TRUE)
+#define OUT_RELOC(surface, read, write) \
+ i915_batch_emit_reloc (device, i915_surface_get_bo (surface), surface->offset, read, write, FALSE)
+#define OUT_RELOC_FENCED(surface, read, write) \
+ i915_batch_emit_reloc (device, i915_surface_get_bo (surface), surface->offset, read, write, TRUE)
#define FS_LOCALS \
uint32_t *_shader_start
diff --git a/src/drm/cairo-drm-i915-shader.c b/src/drm/cairo-drm-i915-shader.c
index 65e75c5..370c86d 100644
--- a/src/drm/cairo-drm-i915-shader.c
+++ b/src/drm/cairo-drm-i915-shader.c
@@ -44,7 +44,7 @@
static cairo_status_t
i915_packed_pixel_surface_finish (void *abstract_surface)
{
- i915_packed_pixel_surface_t *surface = abstract_surface;
+ i915_packed_pixel_surface_t *surface = _cairo_abstract_surface_cast_i915 (abstract_surface);
i915_device_t *device;
device = i915_device_acquire (&surface->device->intel.base);
@@ -1306,7 +1306,7 @@ i915_surface_clone (i915_device_t *device,
return clone->intel.drm.base.status;
status = intel_bo_put_image (&device->intel,
- to_intel_bo (clone->intel.drm.bo),
+ i915_surface_get_bo (clone),
image,
0, 0,
image->width, image->height,
@@ -1345,7 +1345,7 @@ i915_surface_clone_subimage (i915_device_t *device,
return clone->intel.drm.base.status;
status = intel_bo_put_image (&device->intel,
- to_intel_bo (clone->intel.drm.bo),
+ i915_surface_get_bo (clone),
image,
extents->x, extents->y,
extents->width, extents->height,
@@ -1380,7 +1380,8 @@ i915_surface_render_pattern (i915_device_t *device,
return clone->intel.drm.base.status;
ptr = intel_bo_map (&device->intel,
- to_intel_bo (clone->intel.drm.bo));
+ i915_surface_get_bo (clone));
+
if (unlikely (ptr == NULL)) {
cairo_surface_destroy (&clone->intel.drm.base);
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
@@ -1516,7 +1517,7 @@ i915_shader_acquire_surface (i915_shader_t *shader,
/* XXX blt subimage and cache snapshot */
- if (to_intel_bo (s->intel.drm.bo)->batch_write_domain) {
+ if (i915_surface_get_bo (s)->batch_write_domain) {
/* XXX pipelined flush of RENDER/TEXTURE cache */
}
@@ -1525,7 +1526,7 @@ i915_shader_acquire_surface (i915_shader_t *shader,
surface_width = sub->extents.width;
surface_height = sub->extents.height;
- src->base.bo = intel_bo_reference (to_intel_bo (s->intel.drm.bo));
+ src->base.bo = i915_surface_get_bo_ref (s);
src->base.n_samplers = 1;
x = sub->extents.x;
@@ -1563,7 +1564,7 @@ i915_shader_acquire_surface (i915_shader_t *shader,
surface_width = s->intel.drm.width;
surface_height = s->intel.drm.height;
- src->base.bo = intel_bo_reference (to_intel_bo (s->intel.drm.bo));
+ src->base.bo = i915_surface_get_bo_ref (s);
src->base.n_samplers = 1;
src->base.offset[0] = s->offset;
src->base.map[0] = s->map0;
@@ -1653,7 +1654,7 @@ i915_shader_acquire_surface (i915_shader_t *shader,
src->type.fragment = FS_TEXTURE;
src->surface.pixel = NONE;
- src->base.bo = intel_bo_reference (to_intel_bo (s->intel.drm.bo));
+ src->base.bo = i915_surface_get_bo_ref (s);
src->base.n_samplers = 1;
src->base.offset[0] = s->offset;
src->base.map[0] = s->map0;
@@ -2400,7 +2401,7 @@ i915_set_dst (i915_device_t *device, i915_surface_t *dst)
if (device->current_target != dst) {
intel_bo_t *bo;
- bo = to_intel_bo (dst->intel.drm.bo);
+ bo = i915_surface_get_bo (dst);
assert (bo != NULL);
OUT_DWORD (_3DSTATE_BUF_INFO_CMD);
@@ -2520,7 +2521,7 @@ i915_shader_set_clip (i915_shader_t *shader,
channel->surface.pixel = NONE;
s = (i915_surface_t *) clip_surface;
- channel->base.bo = to_intel_bo (s->intel.drm.bo);
+ channel->base.bo = i915_surface_get_bo (s);
channel->base.n_samplers = 1;
channel->base.offset[0] = s->offset;
channel->base.map[0] = s->map0;
@@ -2549,7 +2550,7 @@ i915_shader_check_aperture (i915_shader_t *shader,
uint32_t n = 0;
if (shader->target != device->current_target)
- bo_array[n++] = to_intel_bo (shader->target->intel.drm.bo);
+ bo_array[n++] = i915_surface_get_bo (shader->target);
if (shader->source.base.bo != NULL)
bo_array[n++] = shader->source.base.bo;
@@ -2638,7 +2639,7 @@ i915_shader_setup_dst (i915_shader_t *shader)
channel->surface.pixel = NONE;
s = shader->target;
- channel->base.bo = to_intel_bo (s->intel.drm.bo);
+ channel->base.bo = i915_surface_get_bo (s);
channel->base.n_samplers = 1;
channel->base.offset[0] = s->offset;
channel->base.map[0] = s->map0;
diff --git a/src/drm/cairo-drm-i915-surface.c b/src/drm/cairo-drm-i915-surface.c
index cdbf258..1db6e5f 100644
--- a/src/drm/cairo-drm-i915-surface.c
+++ b/src/drm/cairo-drm-i915-surface.c
@@ -652,7 +652,7 @@ i915_surface_create_similar (void *abstract_other,
static cairo_status_t
i915_surface_finish (void *abstract_surface)
{
- i915_surface_t *surface = abstract_surface;
+ i915_surface_t *surface = _cairo_abstract_surface_cast_i915 (abstract_surface);
i915_device_t *device = i915_device (surface);
if (surface->stencil != NULL) {
@@ -701,7 +701,7 @@ i915_surface_batch_flush (i915_surface_t *surface)
assert (surface->intel.drm.fallback == NULL);
- bo = to_intel_bo (surface->intel.drm.bo);
+ bo = i915_surface_get_bo (surface);
if (bo == NULL || bo->batch_write_domain == 0)
return CAIRO_STATUS_SUCCESS;
@@ -719,7 +719,7 @@ static cairo_status_t
i915_surface_flush (void *abstract_surface,
unsigned flags)
{
- i915_surface_t *surface = abstract_surface;
+ i915_surface_t *surface = _cairo_abstract_surface_cast_i915 (abstract_surface);
cairo_status_t status;
if (flags)
@@ -1042,8 +1042,8 @@ i915_blt (i915_surface_t *src,
cairo_status_t status;
int br13, cmd;
- bo_array[0] = to_intel_bo (dst->intel.drm.bo);
- bo_array[1] = to_intel_bo (src->intel.drm.bo);
+ bo_array[0] = i915_surface_get_bo (dst);
+ bo_array[1] = i915_surface_get_bo (src);
status = i915_surface_fallback_flush (src);
if (unlikely (status))
@@ -1139,7 +1139,7 @@ i915_clear_boxes (i915_surface_t *dst,
i915_device_t *device = i915_device (dst);
const struct _cairo_boxes_chunk *chunk;
cairo_status_t status;
- intel_bo_t *bo_array[1] = { to_intel_bo (dst->intel.drm.bo) };
+ intel_bo_t *bo_array[1] = { i915_surface_get_bo (dst) };
int cmd, br13, clear = 0, i;
cmd = XY_COLOR_BLT_CMD;
@@ -1308,7 +1308,7 @@ i915_blt_boxes (i915_surface_t *dst,
ty = _cairo_lround (pattern->matrix.y0);
device = i915_device (dst);
- if (to_intel_bo (src->intel.drm.bo)->tiling == I915_TILING_Y) {
+ if (i915_surface_get_bo (src)->tiling == I915_TILING_Y) {
cairo_rectangle_int_t extents;
_cairo_boxes_extents (boxes, &extents);
@@ -1324,8 +1324,8 @@ i915_blt_boxes (i915_surface_t *dst,
ty = -extents.y;
}
- bo_array[0] = to_intel_bo (dst->intel.drm.bo);
- bo_array[1] = to_intel_bo (src->intel.drm.bo);
+ bo_array[0] = i915_surface_get_bo (dst);
+ bo_array[1] = i915_surface_get_bo (src);
status = cairo_device_acquire (&device->intel.base.base);
if (unlikely (status))
@@ -1437,7 +1437,7 @@ _upload_image_inplace (i915_surface_t *surface,
}
device = i915_device (surface);
- bo = to_intel_bo (surface->intel.drm.bo);
+ bo = i915_surface_get_bo (surface);
if (bo->exec != NULL || ! intel_bo_is_inactive (&device->intel, bo)) {
intel_bo_t *new_bo;
cairo_bool_t need_clear = FALSE;
@@ -1659,7 +1659,7 @@ i915_surface_clear (i915_surface_t *dst)
{
i915_device_t *device;
cairo_status_t status;
- intel_bo_t *bo_array[1] = { to_intel_bo (dst->intel.drm.bo) };
+ intel_bo_t *bo_array[1] = { i915_surface_get_bo (dst) };
device = i915_device (dst);
status = cairo_device_acquire (&device->intel.base.base);
@@ -1877,7 +1877,7 @@ i915_surface_fill_with_alpha (void *abstract_dst,
cairo_clip_t *clip,
double opacity)
{
- i915_surface_t *dst = abstract_dst;
+ i915_surface_t *dst = _cairo_abstract_surface_cast_i915 (abstract_dst);
cairo_composite_rectangles_t extents;
composite_polygon_info_t info;
cairo_box_t boxes_stack[32], *clip_boxes = boxes_stack;
@@ -2473,7 +2473,7 @@ i915_surface_create_internal (cairo_drm_device_t *base_dev,
}
size = stride * height;
- bo = intel_bo_create (to_intel_device (&base_dev->base),
+ bo = intel_bo_create (_cairo_drm_device_cast_intel (base_dev),
i915_tiling_size (tiling, size), size,
gpu_target, tiling, stride);
if (bo == NULL) {
@@ -2553,15 +2553,15 @@ i915_surface_create_for_name (cairo_drm_device_t *base_dev,
surface->map1 = (surface->intel.drm.stride/4 - 1) << MS4_PITCH_SHIFT;
surface->intel.drm.bo =
- &intel_bo_create_for_name (to_intel_device (&base_dev->base),
+ &intel_bo_create_for_name (_cairo_drm_device_cast_intel (base_dev),
name)->base;
if (unlikely (surface->intel.drm.bo == NULL)) {
free (surface);
return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
}
- to_intel_bo (surface->intel.drm.bo)->stride = stride;
+ i915_surface_get_bo (surface)->stride = stride;
- surface->map0 |= MS3_tiling (to_intel_bo (surface->intel.drm.bo)->tiling);
+ surface->map0 |= MS3_tiling (i915_surface_get_bo (surface)->tiling);
}
return &surface->intel.drm.base;
@@ -2647,7 +2647,7 @@ i915_surface_create_from_cacheable_image_internal (i915_device_t *device,
return surface;
status = intel_bo_put_image (&device->intel,
- to_intel_bo (surface->intel.drm.bo),
+ i915_surface_get_bo (surface),
image,
0, 0,
width, height,
@@ -2795,14 +2795,14 @@ i915_surface_create_from_cacheable_image (cairo_drm_device_t *device,
static cairo_status_t
i915_surface_enable_scan_out (void *abstract_surface)
{
- i915_surface_t *surface = abstract_surface;
+ i915_surface_t *surface = _cairo_abstract_surface_cast_i915 (abstract_surface);
intel_bo_t *bo;
cairo_status_t status;
if (unlikely (surface->intel.drm.bo == NULL))
return _cairo_error (CAIRO_STATUS_INVALID_SIZE);
- bo = to_intel_bo (surface->intel.drm.bo);
+ bo = i915_surface_get_bo (surface);
if (bo->tiling == I915_TILING_Y) {
status = i915_surface_batch_flush (surface);
if (unlikely (status))
@@ -2854,7 +2854,7 @@ i915_device_throttle (cairo_drm_device_t *device)
static void
i915_device_destroy (void *data)
{
- i915_device_t *device = data;
+ i915_device_t *device = _cairo_device_cast_i915 (data);
if (device->last_vbo)
intel_bo_destroy (&device->intel, device->last_vbo);
diff --git a/src/drm/cairo-drm-i965-glyphs.c b/src/drm/cairo-drm-i965-glyphs.c
index c66a63d..0ae52c7 100644
--- a/src/drm/cairo-drm-i965-glyphs.c
+++ b/src/drm/cairo-drm-i965-glyphs.c
@@ -157,7 +157,7 @@ i965_surface_mask_internal (i965_surface_t *dst,
1. / mask->intel.drm.width,
1. / mask->intel.drm.height);
- shader.mask.base.bo = to_intel_bo (mask->intel.drm.bo);
+ shader.mask.base.bo = i965_surface_get_bo (mask);
shader.mask.base.format = mask->intel.drm.format;
shader.mask.base.width = mask->intel.drm.width;
shader.mask.base.height = mask->intel.drm.height;
diff --git a/src/drm/cairo-drm-i965-private.h b/src/drm/cairo-drm-i965-private.h
index 79568a6..7bb1985 100644
--- a/src/drm/cairo-drm-i965-private.h
+++ b/src/drm/cairo-drm-i965-private.h
@@ -315,6 +315,33 @@ struct i965_surface {
uint32_t offset;
};
+static inline i965_surface_t*
+cairo_abstract_surface_cast_i965 (cairo_surface_t *surface)
+{
+ return cairo_container_of (
+ cairo_abstract_surface_cast_intel (surface),
+ i965_surface_t,
+ intel);
+}
+
+static inline i965_device_t *
+_cairo_intel_device_cast_i965 (intel_device_t *device)
+{
+ return container_of (device, intel_device_t, intel);
+}
+
+static inline i965_device_t *
+_cairo_device_cast_i965 (void *device)
+{
+ return _cairo_intel_device_cast_i965 (_cairo_device_cast_intel (device));
+}
+
+static inline intel_bo_t *
+i965_surface_get_bo (const i965_surface_t *surface)
+{
+ return _cairo_intel_surface_get_bo (surface->intel);
+}
+
struct i965_pending_relocation {
uint32_t offset;
uint32_t read_domains;
diff --git a/src/drm/cairo-drm-i965-shader.c b/src/drm/cairo-drm-i965-shader.c
index eed5f5f..eb8ea00 100644
--- a/src/drm/cairo-drm-i965-shader.c
+++ b/src/drm/cairo-drm-i965-shader.c
@@ -264,7 +264,7 @@ i965_surface_clone (i965_device_t *device,
return clone->intel.drm.base.status;
status = intel_bo_put_image (&device->intel,
- to_intel_bo (clone->intel.drm.bo),
+ _cairo_intel_surface_get_bo (&(clone->intel)),
image,
0, 0,
image->width, image->height,
@@ -308,8 +308,8 @@ i965_surface_clone_subimage (i965_device_t *device,
if (unlikely (clone->intel.drm.base.status))
return clone->intel.drm.base.status;
- status = intel_bo_put_image (to_intel_device (clone->intel.drm.base.device),
- to_intel_bo (clone->intel.drm.bo),
+ status = intel_bo_put_image (_cairo_intel_surface_get_device (&(clone->intel)),
+ _cairo_intel_surface_get_bo (&(clone->intel.drm.bo)),
image,
extents->x, extents->y,
extents->width, extents->height,
@@ -420,12 +420,12 @@ i965_shader_acquire_surface (i965_shader_t *shader,
return status;
}
- if (to_intel_bo (s->intel.drm.bo)->batch_write_domain)
+ if (_cairo_intel_surface_get_bo (&(s->intel))->batch_write_domain)
i965_pipelined_flush (i965_device (s));
src->type.fragment = FS_SURFACE;
- src->base.bo = to_intel_bo (s->intel.drm.bo);
+ src->base.bo = i965_surface_get_bo (s);
src->base.format = s->intel.drm.format;
src->base.content = s->intel.drm.base.content;
src->base.width = sub->extents.width;
@@ -472,7 +472,7 @@ i965_shader_acquire_surface (i965_shader_t *shader,
i965_pipelined_flush (i965_device (s));
src->type.fragment = FS_SURFACE;
- src->base.bo = to_intel_bo (clone->intel.drm.bo);
+ src->base.bo = i965_surface_get_bo (clone);
src->base.format = clone->intel.drm.format;
src->base.content = clone->intel.drm.base.content;
src->base.width = clone->intel.drm.width;
@@ -494,12 +494,12 @@ i965_shader_acquire_surface (i965_shader_t *shader,
return status;
}
- if (to_intel_bo (s->intel.drm.bo)->batch_write_domain)
+ if (i965_surface_get_bo (s)->batch_write_domain)
i965_pipelined_flush (i965_device (s));
src->type.fragment = FS_SURFACE;
- src->base.bo = to_intel_bo (s->intel.drm.bo);
+ src->base.bo = i965_surface_get_bo (s);
src->base.format = s->intel.drm.format;
src->base.content = s->intel.drm.base.content;
src->base.width = s->intel.drm.width;
@@ -536,7 +536,7 @@ i965_shader_acquire_surface (i965_shader_t *shader,
i965_pipelined_flush (i965_device (s));
src->type.fragment = FS_SURFACE;
- src->base.bo = to_intel_bo (clone->intel.drm.bo);
+ src->base.bo = i965_surface_get_bo (clone);
src->base.format = clone->intel.drm.format;
src->base.content = clone->intel.drm.base.content;
src->base.width = clone->intel.drm.width;
@@ -562,7 +562,7 @@ i965_shader_acquire_surface (i965_shader_t *shader,
shader->target->intel.drm.base.backend);
if (s != NULL) {
i965_device_t *device = i965_device (shader->target);
- intel_bo_t *bo = to_intel_bo (s->intel.drm.bo);
+ intel_bo_t *bo = i965_surface_get_bo (s);
if (bo->purgeable &&
! intel_bo_madvise (&device->intel, bo, I915_MADV_WILLNEED))
@@ -599,12 +599,12 @@ i965_shader_acquire_surface (i965_shader_t *shader,
return status;
/* XXX? */
- //intel_bo_mark_purgeable (to_intel_bo (s->intel.drm.bo), TRUE);
+ //intel_bo_mark_purgeable (i965_surface_get_bo (s), TRUE);
}
src->type.fragment = FS_SURFACE;
- src->base.bo = to_intel_bo (s->intel.drm.bo);
+ src->base.bo = i965_surface_get_bo (s);
src->base.content = s->intel.drm.base.content;
src->base.format = s->intel.drm.format;
src->base.width = s->intel.drm.width;
@@ -741,7 +741,7 @@ i965_shader_set_clip (i965_shader_t *shader,
assert (clip_surface->type == CAIRO_SURFACE_TYPE_DRM);
s = (i965_surface_t *) clip_surface;
- if (to_intel_bo (s->intel.drm.bo)->batch_write_domain)
+ if (i965_surface_get_bo (s-)->batch_write_domain)
i965_pipelined_flush (i965_device (s));
channel = &shader->clip;
@@ -749,7 +749,7 @@ i965_shader_set_clip (i965_shader_t *shader,
channel->type.vertex = VS_NONE;
channel->type.fragment = FS_SURFACE;
- channel->base.bo = to_intel_bo (s->intel.drm.bo);
+ channel->base.bo = i965_surface_get_bo (s);
channel->base.content = CAIRO_CONTENT_ALPHA;
channel->base.format = CAIRO_FORMAT_A8;
channel->base.width = s->intel.drm.width;
@@ -774,25 +774,25 @@ i965_shader_check_aperture (i965_shader_t *shader,
uint32_t size = device->exec.gtt_size;
if (shader->target != device->target) {
- const intel_bo_t *bo = to_intel_bo (shader->target->intel.drm.bo);
+ const intel_bo_t *bo = i965_surface_get_bo (shader->target);
if (bo->exec == NULL)
size += bo->base.size;
}
if (shader->source.base.bo != NULL && shader->source.base.bo != device->source) {
- const intel_bo_t *bo = to_intel_bo (shader->target->intel.drm.bo);
+ const intel_bo_t *bo = i965_surface_get_bo (shader->target);
if (bo->exec == NULL)
size += bo->base.size;
}
if (shader->mask.base.bo != NULL && shader->mask.base.bo != device->mask) {
- const intel_bo_t *bo = to_intel_bo (shader->target->intel.drm.bo);
+ const intel_bo_t *bo = i965_surface_get_bo (shader->target);
if (bo->exec == NULL)
size += bo->base.size;
}
if (shader->clip.base.bo != NULL && shader->clip.base.bo != device->clip) {
- const intel_bo_t *bo = to_intel_bo (shader->target->intel.drm.bo);
+ const intel_bo_t *bo = i965_surface_get_bo (shader->target);
if (bo->exec == NULL)
size += bo->base.size;
}
@@ -832,7 +832,7 @@ i965_shader_setup_dst (i965_shader_t *shader)
if (unlikely (clone->intel.drm.base.status))
return clone->intel.drm.base.status;
- if (to_intel_bo (s->intel.drm.bo)->batch_write_domain)
+ if (i965_surface_get_bo (s)->batch_write_domain)
i965_pipelined_flush (i965_device (s));
channel = &shader->dst;
@@ -842,7 +842,7 @@ i965_shader_setup_dst (i965_shader_t *shader)
channel->type.pattern = PATTERN_SURFACE;
/* swap buffer objects */
- channel->base.bo = to_intel_bo (s->intel.drm.bo);
+ channel->base.bo = i965_surface_get_bo (s);
s->intel.drm.bo = ((cairo_drm_surface_t *) clone)->bo;
((cairo_drm_surface_t *) clone)->bo = &channel->base.bo->base;
@@ -1426,7 +1426,7 @@ create_wm_kernel (i965_device_t *device,
brw_compile_init (&compile, device->is_g4x);
if (key.entry.hash == FS_CONSTANT &&
- to_intel_bo (shader->target->intel.drm.bo)->tiling)
+ i965_surface_get_bo (shader->target)->tiling)
{
struct brw_instruction *insn;
@@ -2207,7 +2207,7 @@ emit_binding_table (i965_device_t *device,
shader->target->stream = device->surface.serial;
shader->target->offset = emit_surface_state (device,
TRUE,
- to_intel_bo (shader->target->intel.drm.bo),
+ i965_surface_get_bo (shader->target),
shader->target->intel.drm.format,
shader->target->intel.drm.width,
shader->target->intel.drm.height,
diff --git a/src/drm/cairo-drm-i965-surface.c b/src/drm/cairo-drm-i965-surface.c
index 04050ef..e6ce1f1 100644
--- a/src/drm/cairo-drm-i965-surface.c
+++ b/src/drm/cairo-drm-i965-surface.c
@@ -707,7 +707,7 @@ i965_surface_flush (void *abstract_surface, unsigned flags)
/* Forgo flushing on finish as the user cannot access the surface directly. */
if (! surface->intel.drm.base.finished &&
- to_intel_bo (surface->intel.drm.bo)->exec != NULL)
+ i965_surface_get_bo (surface)->exec != NULL)
{
status = cairo_device_acquire (surface->intel.drm.base.device);
if (likely (status == CAIRO_STATUS_SUCCESS)) {
@@ -1094,7 +1094,7 @@ i965_surface_paint (void *abstract_dst,
const cairo_pattern_t *source,
cairo_clip_t *clip)
{
- i965_surface_t *dst = abstract_dst;
+ i965_surface_t *dst = cairo_abstract_surface_cast_i965(abstract_dst);
cairo_composite_rectangles_t extents;
cairo_boxes_t boxes;
cairo_box_t *clip_boxes = boxes.boxes_embedded;
@@ -1588,7 +1588,7 @@ i965_surface_create_internal (cairo_drm_device_t *base_dev,
assert (height <= I965_MAX_SIZE);
size = stride * height;
- bo = intel_bo_create (to_intel_device (&base_dev->base),
+ bo = intel_bo_create (_cairo_drm_device_cast_intel (base_dev),
size, size,
gpu_target, tiling, stride);
if (bo == NULL) {
@@ -1685,7 +1685,7 @@ i965_surface_enable_scan_out (void *abstract_surface)
if (unlikely (surface->intel.drm.bo == NULL))
return _cairo_error (CAIRO_STATUS_INVALID_SIZE);
- bo = to_intel_bo (surface->intel.drm.bo);
+ bo = i965_surface_get_bo (surface);
if (bo->tiling != I915_TILING_X) {
i965_device_t *device = i965_device (surface);
cairo_surface_pattern_t pattern;
@@ -1720,7 +1720,7 @@ i965_surface_enable_scan_out (void *abstract_surface)
/* swap buffer objects */
surface->intel.drm.bo = ((cairo_drm_surface_t *) clone)->bo;
((cairo_drm_surface_t *) clone)->bo = &bo->base;
- bo = to_intel_bo (surface->intel.drm.bo);
+ bo = i965_surface_get_bo (surface);
cairo_surface_destroy (clone);
}
@@ -1768,7 +1768,7 @@ _i965_device_throttle (cairo_drm_device_t *device)
static void
_i965_device_destroy (void *base)
{
- i965_device_t *device = base;
+ i965_device_t *device = _cairo_device_cast_i965 (base);
i965_device_reset (device);
i965_general_state_reset (device);
diff --git a/src/drm/cairo-drm-intel-private.h b/src/drm/cairo-drm-intel-private.h
index 0cfded1..4ba36a8 100644
--- a/src/drm/cairo-drm-intel-private.h
+++ b/src/drm/cairo-drm-intel-private.h
@@ -183,6 +183,15 @@ typedef struct _intel_surface {
cairo_cache_entry_t snapshot_cache_entry;
} intel_surface_t;
+static inline intel_surface_t*
+cairo_abstract_surface_cast_intel(cairo_surface_t* surface)
+{
+ return cairo_container_of(
+ _cairo_abstract_surface_cast_drm(surface),
+ intel_surface_t,
+ drm);
+}
+
typedef void (*intel_reset_context_func_t) (void *device);
typedef struct _intel_device {
@@ -214,21 +223,59 @@ typedef struct _intel_device {
} intel_device_t;
static inline intel_device_t *
-to_intel_device (cairo_device_t *base)
+_cairo_drm_device_cast_intel (cairo_drm_device_t *device)
+{
+ return cairo_container_of (
+ device,
+ intel_device_t,
+ base);
+}
+
+static inline const intel_device_t *
+_cairo_drm_device_cast_intel_const (const cairo_drm_device_t *device)
+{
+ return cairo_container_of (
+ device,
+ const intel_device_t,
+ base);
+}
+
+static inline intel_device_t *
+_cairo_device_cast_intel (cairo_device_t *device)
+{
+ return _cairo_drm_device_cast_intel (
+ _cairo_device_cast_drm (device));
+}
+
+static inline const intel_device_t *
+_cairo_device_cast_intel_const (const cairo_device_t *device)
+{
+ return _cairo_drm_device_cast_intel_const (
+ _cairo_device_cast_drm_const (device));
+}
+
+static inline intel_bo_t *
+_cairo_drm_bo_cast_intel (cairo_drm_bo_t *bo)
+{
+ return cairo_container_of (bo, intel_bo_t, base);
+}
+
+static inline intel_device_t *
+_cairo_intel_surface_get_device (intel_surface_t *surface)
{
- return (intel_device_t *) base;
+ return _cairo_device_cast_intel (surface->drm.base.device);
}
static inline intel_bo_t *
-to_intel_bo (cairo_drm_bo_t *base)
+_cairo_intel_surface_get_bo (const intel_surface_t *surface)
{
- return (intel_bo_t *) base;
+ return _cairo_drm_bo_cast_intel (surface->drm.bo);
}
static inline intel_bo_t *
intel_bo_reference (intel_bo_t *bo)
{
- return to_intel_bo (cairo_drm_bo_reference (&bo->base));
+ return _cairo_drm_bo_cast_intel (cairo_drm_bo_reference (&bo->base));
}
cairo_private cairo_bool_t
diff --git a/src/drm/cairo-drm-intel-surface.c b/src/drm/cairo-drm-intel-surface.c
index 1235720..9965aa3 100644
--- a/src/drm/cairo-drm-intel-surface.c
+++ b/src/drm/cairo-drm-intel-surface.c
@@ -53,10 +53,11 @@ intel_surface_create_similar (void *abstract_surface,
cairo_status_t
intel_surface_finish (void *abstract_surface)
{
- intel_surface_t *surface = abstract_surface;
+ intel_surface_t *surface = cairo_abstract_surface_cast_intel(abstract_surface);
+
+ intel_bo_in_flight_add (_cairo_intel_surface_get_device (surface),
+ _cairo_intel_surface_get_bo (surface));
- intel_bo_in_flight_add (to_intel_device (surface->drm.base.device),
- to_intel_bo (surface->drm.bo));
return _cairo_drm_surface_finish (&surface->drm);
}
@@ -72,7 +73,7 @@ intel_surface_acquire_source_image (void *abstract_surface,
cairo_image_surface_t **image_out,
void **image_extra)
{
- intel_surface_t *surface = abstract_surface;
+ intel_surface_t *surface = cairo_abstract_surface_cast_intel(abstract_surface);
cairo_surface_t *image;
cairo_status_t status;
void *ptr;
@@ -93,8 +94,9 @@ intel_surface_acquire_source_image (void *abstract_surface,
return status;
}
- ptr = intel_bo_map (to_intel_device (surface->drm.base.device),
- to_intel_bo (surface->drm.bo));
+ ptr = intel_bo_map (_cairo_intel_surface_get_device (surface),
+ _cairo_intel_surface_get_bo (surface));
+
if (unlikely (ptr == NULL))
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
@@ -125,7 +127,7 @@ intel_surface_release_source_image (void *abstract_surface,
cairo_surface_t *
intel_surface_map_to_image (void *abstract_surface)
{
- intel_surface_t *surface = abstract_surface;
+ intel_surface_t *surface = cairo_abstract_surface_cast_intel(abstract_surface);
if (surface->drm.fallback == NULL) {
cairo_surface_t *image;
@@ -138,8 +140,9 @@ intel_surface_map_to_image (void *abstract_surface)
return _cairo_surface_create_in_error (status);
}
- ptr = intel_bo_map (to_intel_device (surface->drm.base.device),
- to_intel_bo (surface->drm.bo));
+ ptr = intel_bo_map (_cairo_intel_surface_get_device (surface),
+ _cairo_intel_surface_get_bo (surface));
+
if (unlikely (ptr == NULL))
return _cairo_surface_create_in_error (CAIRO_STATUS_NO_MEMORY);
@@ -160,7 +163,7 @@ intel_surface_map_to_image (void *abstract_surface)
cairo_status_t
intel_surface_flush (void *abstract_surface, unsigned flags)
{
- intel_surface_t *surface = abstract_surface;
+ intel_surface_t *surface = cairo_abstract_surface_cast_intel(abstract_surface);
cairo_status_t status;
if (flags)
@@ -323,7 +326,7 @@ intel_surface_create (cairo_drm_device_t *device,
height = (height + 1) & -2;
surface->drm.stride =
cairo_format_stride_for_width (surface->drm.format, width);
- surface->drm.bo = &intel_bo_create (to_intel_device (&device->base),
+ surface->drm.bo = &intel_bo_create (_cairo_drm_device_cast_intel (device),
surface->drm.stride * height,
surface->drm.stride * height,
TRUE, I915_TILING_NONE, surface->drm.stride)->base;
@@ -371,8 +374,9 @@ intel_surface_create_for_name (cairo_drm_device_t *device,
if (width && height) {
surface->drm.stride = stride;
- surface->drm.bo = &intel_bo_create_for_name (to_intel_device (&device->base),
+ surface->drm.bo = &intel_bo_create_for_name (_cairo_drm_device_cast_intel (device),
name)->base;
+
if (unlikely (surface->drm.bo == NULL)) {
status = _cairo_drm_surface_finish (&surface->drm);
free (surface);
@@ -387,12 +391,12 @@ intel_surface_create_for_name (cairo_drm_device_t *device,
static cairo_status_t
intel_surface_enable_scan_out (void *abstract_surface)
{
- intel_surface_t *surface = abstract_surface;
+ intel_surface_t *surface = cairo_abstract_surface_cast_intel(abstract_surface);
if (unlikely (surface->drm.bo == NULL))
return _cairo_error (CAIRO_STATUS_INVALID_SIZE);
- to_intel_bo (surface->drm.bo)->tiling = I915_TILING_X;
+ _cairo_intel_surface_get_bo (surface)->tiling = I915_TILING_X;
return CAIRO_STATUS_SUCCESS;
}
@@ -400,7 +404,7 @@ intel_surface_enable_scan_out (void *abstract_surface)
static cairo_int_status_t
intel_device_throttle (cairo_drm_device_t *device)
{
- intel_throttle (to_intel_device (&device->base));
+ intel_throttle (_cairo_drm_device_cast_intel (device));
return CAIRO_STATUS_SUCCESS;
}
diff --git a/src/drm/cairo-drm-intel.c b/src/drm/cairo-drm-intel.c
index b5459d9..c70f6d2 100644
--- a/src/drm/cairo-drm-intel.c
+++ b/src/drm/cairo-drm-intel.c
@@ -493,8 +493,8 @@ FAIL:
static void
intel_bo_release (void *_dev, void *_bo)
{
- intel_device_t *device = _dev;
- intel_bo_t *bo = _bo;
+ intel_device_t *device = _cairo_drm_device_cast_intel(_dev);
+ intel_bo_t *bo = _cairo_drm_bo_cast_intel(_bo);
if (bo->virtual != NULL)
intel_bo_unmap (bo);
diff --git a/src/drm/cairo-drm-private.h b/src/drm/cairo-drm-private.h
index 4ba8f5b..e2d2cea 100644
--- a/src/drm/cairo-drm-private.h
+++ b/src/drm/cairo-drm-private.h
@@ -142,6 +142,46 @@ typedef struct _cairo_drm_surface {
uint32_t map_count;
} cairo_drm_surface_t;
+/* cast from abstract void* pointer */
+static inline cairo_drm_device_t*
+_cairo_abstract_device_cast_drm(cairo_device_t* dev)
+{
+ return cairo_container_of(
+ dev,
+ cairo_drm_device_t,
+ base);
+}
+
+static inline cairo_drm_surface_t*
+_cairo_abstract_surface_cast_drm(cairo_surface_t* surface)
+{
+ return cairo_container_of(surface, cairo_drm_surface_t, base);
+}
+
+static inline cairo_drm_surface_t*
+_cairo_surface_cast_drm (cairo_surface_t* surface)
+{
+ return cairo_container_of (surface, cairo_drm_surface_t, base);
+}
+
+static inline const cairo_drm_surface_t*
+_cairo_surface_cast_drm_const (const cairo_surface_t* surface)
+{
+ return cairo_container_of (surface, const cairo_drm_surface_t, base);
+}
+
+static inline cairo_drm_device_t*
+_cairo_device_cast_drm(cairo_device_t *device)
+{
+ return cairo_container_of (device, cairo_drm_device_t, base);
+}
+
+static inline const cairo_drm_device_t*
+_cairo_device_cast_drm_const(const cairo_device_t *device)
+{
+ return cairo_container_of (device, const cairo_drm_device_t, base);
+}
+
static inline cairo_drm_bo_t *
cairo_drm_bo_reference (cairo_drm_bo_t *bo)
{
@@ -149,6 +189,12 @@ cairo_drm_bo_reference (cairo_drm_bo_t *bo)
return bo;
}
+static inline cairo_drm_device_t *
+_cairo_drm_surface_get_device (cairo_drm_surface_t *surface)
+{
+ return _cairo_device_cast_drm(surface->base.device);
+}
+
static cairo_always_inline void
cairo_drm_bo_destroy (cairo_device_t *abstract_device,
cairo_drm_bo_t *bo)
diff --git a/src/drm/cairo-drm-radeon-private.h b/src/drm/cairo-drm-radeon-private.h
index 0768528..107f55b 100644
--- a/src/drm/cairo-drm-radeon-private.h
+++ b/src/drm/cairo-drm-radeon-private.h
@@ -53,6 +53,102 @@ typedef struct _radeon_device {
uint64_t gart_limit;
} radeon_device_t;
+typedef struct _radeon_surface {
+ cairo_drm_surface_t base;
+} radeon_surface_t;
+
+/* cast void* to radeon_device_t* */
+static inline radeon_surface_t *
+_cairo_abstract_surface_cast_radeon (cairo_surface_t *surface)
+{
+ return cairo_container_of (
+ _cairo_abstract_surface_cast_drm (surface),
+ radeon_surface_t,
+ base);
+}
+
+/* cast cairo_drm_device_t* to radeon_device_t* */
+static inline radeon_surface_t *
+_cairo_drm_surface_cast_radeon (cairo_drm_surface_t *surface)
+{
+ return cairo_container_of (surface, radeon_surface_t, base);
+}
+
+/* cast const cairo_drm_device_t* to const radeon_device_t* */
+static inline const radeon_surface_t *
+_cairo_drm_surface_cast_radeon_const (const cairo_drm_surface_t *surface)
+{
+ return cairo_container_of (surface, const radeon_surface_t, base);
+}
+
+/* cast cairo_device_t to radeon_device_t */
+static inline radeon_surface_t *
+_cairo_surface_cast_radeon (cairo_surface_t *surface)
+{
+ return _cairo_drm_surface_cast_radeon (
+ _cairo_surface_cast_drm (surface));
+}
+
+/* cast const cairo_device_t* to const radeon_device_t* */
+static inline const radeon_surface_t *
+_cairo_surface_cast_radeon_cast (const cairo_surface_t *surface)
+{
+ return _cairo_drm_surface_cast_radeon_const (
+ _cairo_surface_cast_drm_const (surface));
+}
+
+static inline radeon_device_t *
+_cairo_drm_device_cast_radeon (cairo_drm_device_t *device)
+{
+ return cairo_container_of (device, radeon_device_t, base);
+}
+
+static inline const radeon_device_t *
+_cairo_drm_device_cast_radeon_const (const cairo_drm_device_t *device)
+{
+ return cairo_container_of (device, const radeon_device_t, base);
+}
+
+static inline radeon_device_t *
+_cairo_device_cast_radeon (cairo_device_t *device)
+{
+ return _cairo_drm_device_cast_radeon (
+ _cairo_device_cast_drm (device));
+}
+
+static inline const radeon_device_t *
+_cairo_device_cast_radeon_const (const cairo_device_t *device)
+{
+ return _cairo_drm_device_cast_radeon_const (
+ _cairo_device_cast_drm_const (device));
+}
+
+static inline radeon_bo_t *
+_cairo_drm_bo_cast_radeon (cairo_drm_bo_t *bo)
+{
+ return cairo_container_of (bo, radeon_bo_t, base);
+}
+
+static inline const radeon_bo_t *
+_cairo_drm_bo_cast_radeon_const (const cairo_drm_bo_t *bo)
+{
+ return cairo_container_of (bo, const radeon_bo_t, base);
+}
+
+/* get radeon device from radeon surface */
+static inline radeon_device_t *
+_cairo_radeon_surface_get_device (const radeon_surface_t *surface)
+{
+ return _cairo_device_cast_radeon (surface->base.base.device);
+}
+
+/* get radeon bo from radeon surface */
+static inline radeon_bo_t *
+_cairo_radeon_surface_get_bo (const radeon_surface_t *surface)
+{
+ return _cairo_drm_bo_cast_radeon (surface->base.bo);
+}
+
cairo_private cairo_status_t
radeon_device_init (radeon_device_t *device, int fd);
diff --git a/src/drm/cairo-drm-radeon-surface.c b/src/drm/cairo-drm-radeon-surface.c
index 528aab7..cb245f3 100644
--- a/src/drm/cairo-drm-radeon-surface.c
+++ b/src/drm/cairo-drm-radeon-surface.c
@@ -44,22 +44,6 @@
#define MAX_SIZE 2048
-typedef struct _radeon_surface {
- cairo_drm_surface_t base;
-} radeon_surface_t;
-
-static inline radeon_device_t *
-to_radeon_device (cairo_device_t *device)
-{
- return (radeon_device_t *) device;
-}
-
-static inline radeon_bo_t *
-to_radeon_bo (cairo_drm_bo_t *bo)
-{
- return (radeon_bo_t *) bo;
-}
-
static cairo_surface_t *
radeon_surface_create_similar (void *abstract_surface,
cairo_content_t content,
@@ -105,8 +89,8 @@ radeon_surface_acquire_source_image (void *abstract_surface,
return status;
}
- image = radeon_bo_get_image (to_radeon_device (surface->base.base.device),
- to_radeon_bo (surface->base.bo),
+ image = radeon_bo_get_image (_cairo_radeon_surface_get_device (surface),
+ _cairo_radeon_surface_get_bo (surface),
&surface->base);
status = image->status;
if (unlikely (status))
@@ -142,8 +126,9 @@ radeon_surface_map_to_image (radeon_surface_t *surface)
return _cairo_surface_create_in_error (status);
}
- ptr = radeon_bo_map (to_radeon_device (surface->base.base.device),
- to_radeon_bo (surface->base.bo));
+ ptr = radeon_bo_map (_cairo_radeon_surface_get_device (surface),
+ _cairo_radeon_surface_get_bo (surface));
+
if (unlikely (ptr == NULL))
return _cairo_surface_create_in_error (CAIRO_STATUS_NO_MEMORY);
@@ -167,7 +152,7 @@ static cairo_status_t
radeon_surface_flush (void *abstract_surface,
unsigned flags)
{
- radeon_surface_t *surface = abstract_surface;
+ radeon_surface_t *surface = _cairo_surface_cast_radeon(abstract_surface);
cairo_status_t status;
if (flags)
@@ -326,7 +311,7 @@ radeon_surface_create_internal (cairo_drm_device_t *device,
surface->base.stride =
cairo_format_stride_for_width (surface->base.format, width);
- surface->base.bo = radeon_bo_create (to_radeon_device (&device->base),
+ surface->base.bo = radeon_bo_create (_cairo_drm_device_cast_radeon (device),
surface->base.stride * height,
RADEON_GEM_DOMAIN_GTT);
@@ -393,7 +378,7 @@ radeon_surface_create_for_name (cairo_drm_device_t *device,
if (width && height) {
surface->base.stride = stride;
- surface->base.bo = radeon_bo_create_for_name (to_radeon_device (&device->base),
+ surface->base.bo = radeon_bo_create_for_name (_cairo_drm_device_cast_radeon(device),
name);
if (unlikely (surface->base.bo == NULL)) {
@@ -409,7 +394,7 @@ radeon_surface_create_for_name (cairo_drm_device_t *device,
static void
radeon_device_destroy (void *data)
{
- radeon_device_t *device = data;
+ radeon_device_t *device = _cairo_device_cast_radeon (data);
radeon_device_fini (device);
diff --git a/src/drm/cairo-drm-radeon.c b/src/drm/cairo-drm-radeon.c
index 8bc91bf..842994d 100644
--- a/src/drm/cairo-drm-radeon.c
+++ b/src/drm/cairo-drm-radeon.c
@@ -255,8 +255,8 @@ radeon_bo_create_for_name (radeon_device_t *device,
static void
radeon_bo_release (void *_dev, void *_bo)
{
- radeon_device_t *device = _dev;
- radeon_bo_t *bo = _bo;
+ radeon_device_t *device = _cairo_device_cast_radeon(_dev);
+ radeon_bo_t *bo = _cairo_drm_bo_cast_radeon(_bo);
_cairo_drm_bo_close (&device->base, &bo->base);
_cairo_freepool_free (&device->bo_pool, bo);
@@ -271,10 +271,10 @@ radeon_bo_get_image (const radeon_device_t *device,
uint8_t *dst;
int size, row;
- image = (cairo_image_surface_t *)
+ image = _cairo_surface_cast_image (
cairo_image_surface_create (surface->format,
surface->width,
- surface->height);
+ surface->height));
if (unlikely (image->base.status))
return &image->base;
diff --git a/src/drm/cairo-drm-surface.c b/src/drm/cairo-drm-surface.c
index 8c4dd0e..ee514dd 100644
--- a/src/drm/cairo-drm-surface.c
+++ b/src/drm/cairo-drm-surface.c
@@ -76,7 +76,7 @@ cairo_bool_t
_cairo_drm_surface_get_extents (void *abstract_surface,
cairo_rectangle_int_t *rectangle)
{
- cairo_drm_surface_t *surface = abstract_surface;
+ cairo_drm_surface_t *surface = _cairo_abstract_surface_cast_drm(abstract_surface);
rectangle->x = 0;
rectangle->y = 0;
@@ -233,7 +233,7 @@ cairo_drm_surface_get_handle (cairo_surface_t *abstract_surface)
cairo_int_status_t
_cairo_drm_surface_flink (void *abstract_surface)
{
- cairo_drm_surface_t *surface = abstract_surface;
+ cairo_drm_surface_t *surface = _cairo_abstract_surface_cast_drm(abstract_surface);
return _cairo_drm_bo_flink ((cairo_drm_device_t *) surface->base.device,
surface->bo);
diff --git a/src/drm/cairo-drm.c b/src/drm/cairo-drm.c
index ad8c827..3f79d35 100644
--- a/src/drm/cairo-drm.c
+++ b/src/drm/cairo-drm.c
@@ -63,7 +63,7 @@ get_udev_property(struct udev_device *device, const char *name)
static void
_device_flush (void *abstract_device)
{
- cairo_drm_device_t *device = abstract_device;
+ cairo_drm_device_t *device = _cairo_abstract_device_cast_drm(abstract_device);
device->device.flush (device);
}
@@ -71,7 +71,7 @@ _device_flush (void *abstract_device)
static void
_device_finish (void *abstract_device)
{
- cairo_drm_device_t *device = abstract_device;
+ cairo_drm_device_t *device = _cairo_abstract_device_cast_drm(abstract_device);
CAIRO_MUTEX_LOCK (_cairo_drm_device_mutex);
if (device->prev != NULL)
@@ -93,7 +93,7 @@ _device_finish (void *abstract_device)
static void
_device_destroy (void *abstract_device)
{
- cairo_drm_device_t *device = abstract_device;
+ cairo_drm_device_t *device = _cairo_abstract_device_cast_drm(abstract_device);
device->device.destroy (device);
}
@@ -344,7 +344,7 @@ _cairo_drm_device_reset_static_data (void)
int
cairo_drm_device_get_fd (cairo_device_t *abstract_device)
{
- cairo_drm_device_t *device = (cairo_drm_device_t *) abstract_device;
+ cairo_drm_device_t *device = _cairo_abstract_device_cast_drm(abstract_device);
if (device->base.status)
return -1;
@@ -362,7 +362,7 @@ _cairo_drm_device_fini (cairo_drm_device_t *device)
void
cairo_drm_device_throttle (cairo_device_t *abstract_device)
{
- cairo_drm_device_t *device = (cairo_drm_device_t *) abstract_device;
+ cairo_drm_device_t *device = _cairo_abstract_device_cast_drm(abstract_device);
cairo_status_t status;
if (unlikely (device->base.status))
--
2.6.4.442.g545299f
More information about the cairo
mailing list