diff mbox

[i-g-t,3/6] lib/igt_fb: Add igt_cairo_image_surface_create_from_png()

Message ID 20170921143933.14618-3-ville.syrjala@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ville Syrjälä Sept. 21, 2017, 2:39 p.m. UTC
From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Raw usage of cairo_image_surface_create_from_png() doesn't work
since it doesn't know about IGT_DATADIR and IGT_SRCDIR. Let's extract
the helper from igt_paint_image() that uses igt_fopen_data() +
cairo_image_surface_create_from_png_stream() and call it
igt_cairo_image_surface_create_from_png_file().

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 lib/igt_fb.c | 21 ++++++++++++++-------
 lib/igt_fb.h |  1 +
 2 files changed, 15 insertions(+), 7 deletions(-)

Comments

Petri Latvala Sept. 22, 2017, 9:52 a.m. UTC | #1
On Thu, Sep 21, 2017 at 05:39:30PM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Raw usage of cairo_image_surface_create_from_png() doesn't work
> since it doesn't know about IGT_DATADIR and IGT_SRCDIR. Let's extract
> the helper from igt_paint_image() that uses igt_fopen_data() +
> cairo_image_surface_create_from_png_stream() and call it
> igt_cairo_image_surface_create_from_png_file().


s/from_png_file/from_png/


> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Thanks for fixing this.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92248
(Not sure if this patch fixes it yet or if CI switch to make install -deployment is also needed)
kms_plane_fitting doesn't seem to have a separate bug report.

Reviewed-by: Petri Latvala <petri.latvala@intel.com>






> ---
>  lib/igt_fb.c | 21 ++++++++++++++-------
>  lib/igt_fb.h |  1 +
>  2 files changed, 15 insertions(+), 7 deletions(-)
> 
> diff --git a/lib/igt_fb.c b/lib/igt_fb.c
> index 95434a699dcf..d4eaed71acef 100644
> --- a/lib/igt_fb.c
> +++ b/lib/igt_fb.c
> @@ -583,6 +583,18 @@ stdio_read_func(void *closure, unsigned char* data, unsigned int size)
>  	return CAIRO_STATUS_SUCCESS;
>  }
>  
> +cairo_surface_t *igt_cairo_image_surface_create_from_png(const char *filename)
> +{
> +	cairo_surface_t *image;
> +	FILE *f;
> +
> +	f = igt_fopen_data(filename);
> +	image = cairo_image_surface_create_from_png_stream(&stdio_read_func, f);
> +	fclose(f);
> +
> +	return image;
> +}
> +
>  /**
>   * igt_paint_image:
>   * @cr: cairo drawing context
> @@ -601,11 +613,8 @@ void igt_paint_image(cairo_t *cr, const char *filename,
>  	cairo_surface_t *image;
>  	int img_width, img_height;
>  	double scale_x, scale_y;
> -	FILE* f;
> -
> -	f = igt_fopen_data(filename);
>  
> -	image = cairo_image_surface_create_from_png_stream(&stdio_read_func, f);
> +	image = igt_cairo_image_surface_create_from_png(filename);
>  	igt_assert(cairo_surface_status(image) == CAIRO_STATUS_SUCCESS);
>  
>  	img_width = cairo_image_surface_get_width(image);
> @@ -624,8 +633,6 @@ void igt_paint_image(cairo_t *cr, const char *filename,
>  	cairo_surface_destroy(image);
>  
>  	cairo_restore(cr);
> -
> -	fclose(f);
>  }
>  
>  /**
> @@ -877,7 +884,7 @@ unsigned int igt_create_image_fb(int fd, int width, int height,
>  	uint32_t fb_id;
>  	cairo_t *cr;
>  
> -	image = cairo_image_surface_create_from_png(filename);
> +	image = igt_cairo_image_surface_create_from_png(filename);
>  	igt_assert(cairo_surface_status(image) == CAIRO_STATUS_SUCCESS);
>  	if (width == 0)
>  		width = cairo_image_surface_get_width(image);
> diff --git a/lib/igt_fb.h b/lib/igt_fb.h
> index a193a1e7572d..3f549036abc5 100644
> --- a/lib/igt_fb.h
> +++ b/lib/igt_fb.h
> @@ -136,6 +136,7 @@ uint64_t igt_fb_tiling_to_mod(uint64_t tiling);
>  
>  /* cairo-based painting */
>  cairo_surface_t *igt_get_cairo_surface(int fd, struct igt_fb *fb);
> +cairo_surface_t *igt_cairo_image_surface_create_from_png(const char *filename);
>  cairo_t *igt_get_cairo_ctx(int fd, struct igt_fb *fb);
>  void igt_paint_color(cairo_t *cr, int x, int y, int w, int h,
>  			 double r, double g, double b);
> -- 
> 2.13.5
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Ville Syrjälä Sept. 22, 2017, 12:05 p.m. UTC | #2
On Fri, Sep 22, 2017 at 12:52:59PM +0300, Petri Latvala wrote:
> On Thu, Sep 21, 2017 at 05:39:30PM +0300, Ville Syrjala wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > 
> > Raw usage of cairo_image_surface_create_from_png() doesn't work
> > since it doesn't know about IGT_DATADIR and IGT_SRCDIR. Let's extract
> > the helper from igt_paint_image() that uses igt_fopen_data() +
> > cairo_image_surface_create_from_png_stream() and call it
> > igt_cairo_image_surface_create_from_png_file().
> 
> 
> s/from_png_file/from_png/

Argh, still one left. My brain kept subconsciously adding the _file()
(to match the _stream() I suppose). In fact at one point I was scratching
my head for quite a while wondering why it wasn't compiling...

> 
> 
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Thanks for fixing this.
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92248
> (Not sure if this patch fixes it yet or if CI switch to make install -deployment is also needed)

Hmm. The asserts I see there seem to be about display commits failing.

> kms_plane_fitting doesn't seem to have a separate bug report.

I'm pretty sure such a bug report did exist in the past. But I
wasn't able to find it either. I guess it was closed for some reason.

> 
> Reviewed-by: Petri Latvala <petri.latvala@intel.com>

Thanks.

> 
> 
> 
> 
> 
> 
> > ---
> >  lib/igt_fb.c | 21 ++++++++++++++-------
> >  lib/igt_fb.h |  1 +
> >  2 files changed, 15 insertions(+), 7 deletions(-)
> > 
> > diff --git a/lib/igt_fb.c b/lib/igt_fb.c
> > index 95434a699dcf..d4eaed71acef 100644
> > --- a/lib/igt_fb.c
> > +++ b/lib/igt_fb.c
> > @@ -583,6 +583,18 @@ stdio_read_func(void *closure, unsigned char* data, unsigned int size)
> >  	return CAIRO_STATUS_SUCCESS;
> >  }
> >  
> > +cairo_surface_t *igt_cairo_image_surface_create_from_png(const char *filename)
> > +{
> > +	cairo_surface_t *image;
> > +	FILE *f;
> > +
> > +	f = igt_fopen_data(filename);
> > +	image = cairo_image_surface_create_from_png_stream(&stdio_read_func, f);
> > +	fclose(f);
> > +
> > +	return image;
> > +}
> > +
> >  /**
> >   * igt_paint_image:
> >   * @cr: cairo drawing context
> > @@ -601,11 +613,8 @@ void igt_paint_image(cairo_t *cr, const char *filename,
> >  	cairo_surface_t *image;
> >  	int img_width, img_height;
> >  	double scale_x, scale_y;
> > -	FILE* f;
> > -
> > -	f = igt_fopen_data(filename);
> >  
> > -	image = cairo_image_surface_create_from_png_stream(&stdio_read_func, f);
> > +	image = igt_cairo_image_surface_create_from_png(filename);
> >  	igt_assert(cairo_surface_status(image) == CAIRO_STATUS_SUCCESS);
> >  
> >  	img_width = cairo_image_surface_get_width(image);
> > @@ -624,8 +633,6 @@ void igt_paint_image(cairo_t *cr, const char *filename,
> >  	cairo_surface_destroy(image);
> >  
> >  	cairo_restore(cr);
> > -
> > -	fclose(f);
> >  }
> >  
> >  /**
> > @@ -877,7 +884,7 @@ unsigned int igt_create_image_fb(int fd, int width, int height,
> >  	uint32_t fb_id;
> >  	cairo_t *cr;
> >  
> > -	image = cairo_image_surface_create_from_png(filename);
> > +	image = igt_cairo_image_surface_create_from_png(filename);
> >  	igt_assert(cairo_surface_status(image) == CAIRO_STATUS_SUCCESS);
> >  	if (width == 0)
> >  		width = cairo_image_surface_get_width(image);
> > diff --git a/lib/igt_fb.h b/lib/igt_fb.h
> > index a193a1e7572d..3f549036abc5 100644
> > --- a/lib/igt_fb.h
> > +++ b/lib/igt_fb.h
> > @@ -136,6 +136,7 @@ uint64_t igt_fb_tiling_to_mod(uint64_t tiling);
> >  
> >  /* cairo-based painting */
> >  cairo_surface_t *igt_get_cairo_surface(int fd, struct igt_fb *fb);
> > +cairo_surface_t *igt_cairo_image_surface_create_from_png(const char *filename);
> >  cairo_t *igt_get_cairo_ctx(int fd, struct igt_fb *fb);
> >  void igt_paint_color(cairo_t *cr, int x, int y, int w, int h,
> >  			 double r, double g, double b);
> > -- 
> > 2.13.5
> > 
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Petri Latvala Sept. 22, 2017, 12:33 p.m. UTC | #3
On Fri, Sep 22, 2017 at 03:05:44PM +0300, Ville Syrjälä wrote:
> On Fri, Sep 22, 2017 at 12:52:59PM +0300, Petri Latvala wrote:
> > On Thu, Sep 21, 2017 at 05:39:30PM +0300, Ville Syrjala wrote:
> > > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > 
> > > Raw usage of cairo_image_surface_create_from_png() doesn't work
> > > since it doesn't know about IGT_DATADIR and IGT_SRCDIR. Let's extract
> > > the helper from igt_paint_image() that uses igt_fopen_data() +
> > > cairo_image_surface_create_from_png_stream() and call it
> > > igt_cairo_image_surface_create_from_png_file().
> > 
> > 
> > s/from_png_file/from_png/
> 
> Argh, still one left. My brain kept subconsciously adding the _file()
> (to match the _stream() I suppose). In fact at one point I was scratching
> my head for quite a while wondering why it wasn't compiling...
> 
> > 
> > 
> > > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > 
> > Thanks for fixing this.
> > 
> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92248
> > (Not sure if this patch fixes it yet or if CI switch to make install -deployment is also needed)
> 
> Hmm. The asserts I see there seem to be about display commits failing.


Oh, gah. The bug report has changed meaning. I was looking at the
original description that had

Failed assertion: cairo_surface_status(image) == CAIRO_STATUS_SUCCESS



> 
> > kms_plane_fitting doesn't seem to have a separate bug report.
> 
> I'm pretty sure such a bug report did exist in the past. But I
> wasn't able to find it either. I guess it was closed for some reason.

(For those following along, I did search for kms_panel_fitting too,
not just that brainfart of a misname.)

I suppose kms_panel_fitting failure is bundled up in #92248 along with
kms_plane_scaling.
diff mbox

Patch

diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index 95434a699dcf..d4eaed71acef 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -583,6 +583,18 @@  stdio_read_func(void *closure, unsigned char* data, unsigned int size)
 	return CAIRO_STATUS_SUCCESS;
 }
 
+cairo_surface_t *igt_cairo_image_surface_create_from_png(const char *filename)
+{
+	cairo_surface_t *image;
+	FILE *f;
+
+	f = igt_fopen_data(filename);
+	image = cairo_image_surface_create_from_png_stream(&stdio_read_func, f);
+	fclose(f);
+
+	return image;
+}
+
 /**
  * igt_paint_image:
  * @cr: cairo drawing context
@@ -601,11 +613,8 @@  void igt_paint_image(cairo_t *cr, const char *filename,
 	cairo_surface_t *image;
 	int img_width, img_height;
 	double scale_x, scale_y;
-	FILE* f;
-
-	f = igt_fopen_data(filename);
 
-	image = cairo_image_surface_create_from_png_stream(&stdio_read_func, f);
+	image = igt_cairo_image_surface_create_from_png(filename);
 	igt_assert(cairo_surface_status(image) == CAIRO_STATUS_SUCCESS);
 
 	img_width = cairo_image_surface_get_width(image);
@@ -624,8 +633,6 @@  void igt_paint_image(cairo_t *cr, const char *filename,
 	cairo_surface_destroy(image);
 
 	cairo_restore(cr);
-
-	fclose(f);
 }
 
 /**
@@ -877,7 +884,7 @@  unsigned int igt_create_image_fb(int fd, int width, int height,
 	uint32_t fb_id;
 	cairo_t *cr;
 
-	image = cairo_image_surface_create_from_png(filename);
+	image = igt_cairo_image_surface_create_from_png(filename);
 	igt_assert(cairo_surface_status(image) == CAIRO_STATUS_SUCCESS);
 	if (width == 0)
 		width = cairo_image_surface_get_width(image);
diff --git a/lib/igt_fb.h b/lib/igt_fb.h
index a193a1e7572d..3f549036abc5 100644
--- a/lib/igt_fb.h
+++ b/lib/igt_fb.h
@@ -136,6 +136,7 @@  uint64_t igt_fb_tiling_to_mod(uint64_t tiling);
 
 /* cairo-based painting */
 cairo_surface_t *igt_get_cairo_surface(int fd, struct igt_fb *fb);
+cairo_surface_t *igt_cairo_image_surface_create_from_png(const char *filename);
 cairo_t *igt_get_cairo_ctx(int fd, struct igt_fb *fb);
 void igt_paint_color(cairo_t *cr, int x, int y, int w, int h,
 			 double r, double g, double b);