[PATCH 46/72] drm: generalized framebuffer-based surface operations
"Enrico Weigelt, metux IT consult" <[email protected]>
| Newsgroups | gmane.comp.lib.cairo |
|---|---|
| Message-ID | <[email protected]> |
Several driver specific backend functions just proxy to the underlying image surface, which then renders directly into the framebuffer. These functions dont need t be driver specific and thus can be generalized. Signed-off-by: Enrico Weigelt, metux IT consult <[email protected]> --- src/drm/cairo-drm-intel-surface.c | 80 ++------------------------------ src/drm/cairo-drm-private.h | 46 ++++++++++++++++++ src/drm/cairo-drm-radeon-surface.c | 80 ++------------------------------ src/drm/cairo-drm-surface.c | 95 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 151 insertions(+), 150 deletions(-) diff --git a/src/drm/cairo-drm-intel-surface.c b/src/drm/cairo-drm-intel-surface.c index 3a20e27..5be9952 100644 --- a/src/drm/cairo-drm-intel-surface.c +++ b/src/drm/cairo-drm-intel-surface.c @@ -147,76 +147,6 @@ intel_surface_flush (void *abstract_surface, unsigned flags) return status; } -static cairo_int_status_t -intel_surface_paint (void *abstract_surface, - cairo_operator_t op, - const cairo_pattern_t *source, - const cairo_clip_t *clip) -{ - return _cairo_surface_paint (_cairo_drm_surface_map_to_image (abstract_surface), - op, source, clip); -} - -static cairo_int_status_t -intel_surface_mask (void *abstract_surface, - cairo_operator_t op, - const cairo_pattern_t *source, - const cairo_pattern_t *mask, - const cairo_clip_t *clip) -{ - return _cairo_surface_mask (_cairo_drm_surface_map_to_image (abstract_surface), - op, source, mask, clip); -} - -static cairo_int_status_t -intel_surface_stroke (void *abstract_surface, - cairo_operator_t op, - const cairo_pattern_t *source, - const cairo_path_fixed_t *path, - const cairo_stroke_style_t *stroke_style, - const cairo_matrix_t *ctm, - const cairo_matrix_t *ctm_inverse, - double tolerance, - cairo_antialias_t antialias, - const cairo_clip_t *clip) -{ - return _cairo_surface_stroke (_cairo_drm_surface_map_to_image (abstract_surface), - op, source, path, stroke_style, ctm, ctm_inverse, - tolerance, antialias, clip); -} - -static cairo_int_status_t -intel_surface_fill (void *abstract_surface, - cairo_operator_t op, - const cairo_pattern_t *source, - const cairo_path_fixed_t *path, - cairo_fill_rule_t fill_rule, - double tolerance, - cairo_antialias_t antialias, - const cairo_clip_t *clip) -{ - return _cairo_surface_fill (_cairo_drm_surface_map_to_image (abstract_surface), - op, source, path, fill_rule, - tolerance, antialias, clip); -} - -static cairo_int_status_t -intel_surface_glyphs (void *abstract_surface, - cairo_operator_t op, - const cairo_pattern_t *source, - cairo_glyph_t *glyphs, - int num_glyphs, - cairo_scaled_font_t *scaled_font, - const cairo_clip_t *clip) -{ - return _cairo_surface_show_text_glyphs (_cairo_drm_surface_map_to_image (abstract_surface), - op, source, - NULL, 0, - glyphs, num_glyphs, - NULL, 0, 0, - scaled_font, clip); -} - static const cairo_surface_backend_t intel_surface_backend = { .type = CAIRO_SURFACE_TYPE_DRM, .create_context = _cairo_default_context_create, @@ -227,11 +157,11 @@ static const cairo_surface_backend_t intel_surface_backend = { .get_extents = _cairo_drm_surface_get_extents, .get_font_options = _cairo_drm_surface_get_font_options, .flush = intel_surface_flush, - .paint = intel_surface_paint, - .mask = intel_surface_mask, - .stroke = intel_surface_stroke, - .fill = intel_surface_fill, - .show_glyphs = intel_surface_glyphs, + .paint = _cairo_drm_dumb_surface_paint, + .mask = _cairo_drm_dumb_surface_mask, + .stroke = _cairo_drm_dumb_surface_stroke, + .fill = _cairo_drm_dumb_surface_fill, + .show_glyphs = _cairo_drm_dumb_surface_glyphs, }; void diff --git a/src/drm/cairo-drm-private.h b/src/drm/cairo-drm-private.h index b7fd9bd..53d826a 100644 --- a/src/drm/cairo-drm-private.h +++ b/src/drm/cairo-drm-private.h @@ -320,6 +320,52 @@ _cairo_drm_device_fini (cairo_drm_device_t *device); cairo_private cairo_surface_t * _cairo_drm_surface_map_to_image (void *abstract_surface); +/* default / dumb framebuffer backend ops */ + +cairo_private cairo_int_status_t +_cairo_drm_dumb_surface_paint (void *abstract_surface, + cairo_operator_t op, + const cairo_pattern_t *source, + const cairo_clip_t *clip); + +cairo_private cairo_int_status_t +_cairo_drm_dumb_surface_mask (void *abstract_surface, + cairo_operator_t op, + const cairo_pattern_t *source, + const cairo_pattern_t *mask, + const cairo_clip_t *clip); + +cairo_private cairo_int_status_t +_cairo_drm_dumb_surface_stroke (void *abstract_surface, + cairo_operator_t op, + const cairo_pattern_t *source, + const cairo_path_fixed_t *path, + const cairo_stroke_style_t *stroke_style, + const cairo_matrix_t *ctm, + const cairo_matrix_t *ctm_inverse, + double tolerance, + cairo_antialias_t antialias, + const cairo_clip_t *clip); + +cairo_private cairo_int_status_t +_cairo_drm_dumb_surface_fill (void *abstract_surface, + cairo_operator_t op, + const cairo_pattern_t *source, + const cairo_path_fixed_t *path, + cairo_fill_rule_t fill_rule, + double tolerance, + cairo_antialias_t antialias, + const cairo_clip_t *clip); + +cairo_private cairo_int_status_t +_cairo_drm_dumb_surface_glyphs (void *abstract_surface, + cairo_operator_t op, + const cairo_pattern_t *source, + cairo_glyph_t *glyphs, + int num_glyphs, + cairo_scaled_font_t *scaled_font, + const cairo_clip_t *clip); + /* h/w specific backends */ cairo_private cairo_drm_device_t * diff --git a/src/drm/cairo-drm-radeon-surface.c b/src/drm/cairo-drm-radeon-surface.c index c941e87..a794612 100644 --- a/src/drm/cairo-drm-radeon-surface.c +++ b/src/drm/cairo-drm-radeon-surface.c @@ -137,76 +137,6 @@ radeon_surface_flush (void *abstract_surface, return status; } -static cairo_int_status_t -radeon_surface_paint (void *abstract_surface, - cairo_operator_t op, - const cairo_pattern_t *source, - const cairo_clip_t *clip) -{ - return _cairo_surface_paint (_cairo_drm_surface_map_to_image (abstract_surface), - op, source, clip); -} - -static cairo_int_status_t -radeon_surface_mask (void *abstract_surface, - cairo_operator_t op, - const cairo_pattern_t *source, - const cairo_pattern_t *mask, - const cairo_clip_t *clip) -{ - return _cairo_surface_mask (_cairo_drm_surface_map_to_image (abstract_surface), - op, source, mask, clip); -} - -static cairo_int_status_t -radeon_surface_stroke (void *abstract_surface, - cairo_operator_t op, - const cairo_pattern_t *source, - const cairo_path_fixed_t *path, - const cairo_stroke_style_t *stroke_style, - const cairo_matrix_t *ctm, - const cairo_matrix_t *ctm_inverse, - double tolerance, - cairo_antialias_t antialias, - const cairo_clip_t *clip) -{ - return _cairo_surface_stroke (_cairo_drm_surface_map_to_image (abstract_surface), - op, source, path, stroke_style, ctm, ctm_inverse, - tolerance, antialias, clip); -} - -static cairo_int_status_t -radeon_surface_fill (void *abstract_surface, - cairo_operator_t op, - const cairo_pattern_t *source, - const cairo_path_fixed_t *path, - cairo_fill_rule_t fill_rule, - double tolerance, - cairo_antialias_t antialias, - const cairo_clip_t *clip) -{ - return _cairo_surface_fill (_cairo_drm_surface_map_to_image (abstract_surface), - op, source, path, fill_rule, - tolerance, antialias, clip); -} - -static cairo_int_status_t -radeon_surface_glyphs (void *abstract_surface, - cairo_operator_t op, - const cairo_pattern_t *source, - cairo_glyph_t *glyphs, - int num_glyphs, - cairo_scaled_font_t *scaled_font, - const cairo_clip_t *clip) -{ - return _cairo_surface_show_text_glyphs (_cairo_drm_surface_map_to_image (abstract_surface), - op, source, - NULL, 0, - glyphs, num_glyphs, - NULL, 0, 0, - scaled_font, clip); -} - static const cairo_surface_backend_t radeon_surface_backend = { .type = CAIRO_SURFACE_TYPE_DRM, .create_context = _cairo_default_context_create, @@ -217,11 +147,11 @@ static const cairo_surface_backend_t radeon_surface_backend = { .get_extents = _cairo_drm_surface_get_extents, .get_font_options = _cairo_drm_surface_get_font_options, .flush = radeon_surface_flush, - .paint = radeon_surface_paint, - .mask = radeon_surface_mask, - .stroke = radeon_surface_stroke, - .fill = radeon_surface_fill, - .show_glyphs = radeon_surface_glyphs, + .paint = _cairo_drm_dumb_surface_paint, + .mask = _cairo_drm_dumb_surface_mask, + .stroke = _cairo_drm_dumb_surface_stroke, + .fill = _cairo_drm_dumb_surface_fill, + .show_glyphs = _cairo_drm_dumb_surface_glyphs, }; static void diff --git a/src/drm/cairo-drm-surface.c b/src/drm/cairo-drm-surface.c index c93fb94..ee86745 100644 --- a/src/drm/cairo-drm-surface.c +++ b/src/drm/cairo-drm-surface.c @@ -406,3 +406,98 @@ _cairo_drm_surface_map_to_image (void *abstract_surface) return surface->fallback; } + +/* drm surface default callbacks - operating on dumb framebuffer */ + +cairo_int_status_t +_cairo_drm_dumb_surface_paint (void *abstract_surface, + cairo_operator_t op, + const cairo_pattern_t *source, + const cairo_clip_t *clip) +{ + return _cairo_surface_paint (_cairo_drm_surface_map_to_image (abstract_surface), + op, + source, + clip); +} + +cairo_int_status_t +_cairo_drm_dumb_surface_mask (void *abstract_surface, + cairo_operator_t op, + const cairo_pattern_t *source, + const cairo_pattern_t *mask, + const cairo_clip_t *clip) +{ + return _cairo_surface_mask (_cairo_drm_surface_map_to_image (abstract_surface), + op, + source, + mask, + clip); +} + +cairo_int_status_t +_cairo_drm_dumb_surface_stroke (void *abstract_surface, + cairo_operator_t op, + const cairo_pattern_t *source, + const cairo_path_fixed_t *path, + const cairo_stroke_style_t *stroke_style, + const cairo_matrix_t *ctm, + const cairo_matrix_t *ctm_inverse, + double tolerance, + cairo_antialias_t antialias, + const cairo_clip_t *clip) +{ + return _cairo_surface_stroke (_cairo_drm_surface_map_to_image (abstract_surface), + op, + source, + path, + stroke_style, + ctm, + ctm_inverse, + tolerance, + antialias, + clip); +} + +cairo_int_status_t +_cairo_drm_dumb_surface_fill (void *abstract_surface, + cairo_operator_t op, + const cairo_pattern_t *source, + const cairo_path_fixed_t *path, + cairo_fill_rule_t fill_rule, + double tolerance, + cairo_antialias_t antialias, + const cairo_clip_t *clip) +{ + return _cairo_surface_fill (_cairo_drm_surface_map_to_image (abstract_surface), + op, + source, + path, + fill_rule, + tolerance, + antialias, + clip); +} + +cairo_int_status_t +_cairo_drm_dumb_surface_glyphs (void *abstract_surface, + cairo_operator_t op, + const cairo_pattern_t *source, + cairo_glyph_t *glyphs, + int num_glyphs, + cairo_scaled_font_t *scaled_font, + const cairo_clip_t *clip) +{ + return _cairo_surface_show_text_glyphs (_cairo_drm_surface_map_to_image (abstract_surface), + op, + source, + NULL, + 0, + glyphs, + num_glyphs, + NULL, + 0, + 0, + scaled_font, + clip); +} -- 2.6.4.442.g545299f -- cairo mailing list [email protected] http://lists.cairographics.org/mailman/listinfo/cairo