[PATCH 38/71] 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 0c61ca0f2..3000f2ac3 100644
--- a/src/drm/cairo-drm-intel-surface.c
+++ b/src/drm/cairo-drm-intel-surface.c
@@ -146,76 +146,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,
@@ -226,11 +156,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_surface_paint,
+    .mask			= _cairo_drm_surface_mask,
+    .stroke			= _cairo_drm_surface_stroke,
+    .fill			= _cairo_drm_surface_fill,
+    .show_glyphs		= _cairo_drm_surface_glyphs,
 };
 
 void
diff --git a/src/drm/cairo-drm-private.h b/src/drm/cairo-drm-private.h
index b7fd9bdf9..3917447bd 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_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_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_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_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_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 c941e877b..72d222af8 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_surface_paint,
+    .mask			= _cairo_drm_surface_mask,
+    .stroke			= _cairo_drm_surface_stroke,
+    .fill			= _cairo_drm_surface_fill,
+    .show_glyphs		= _cairo_drm_surface_glyphs,
 };
 
 static void
diff --git a/src/drm/cairo-drm-surface.c b/src/drm/cairo-drm-surface.c
index c93fb94f9..217eb5797 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_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_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_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_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_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.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.