Re: [Mesa-dev] [PATCH] gallium: Check pipe_screen::resource_changed before dereferencing it

2018-07-12 Thread Lucas Stach
Am Donnerstag, den 12.07.2018, 16:33 +0200 schrieb Michel Dänzer:
> > From: Michel Dänzer 
> 
> It's optional, only implemented by the etnaviv driver so far.
> 
> Fixes: 501d0edeca32 "st/mesa: call resource_changed when binding a
>  EGLImage to a texture"
> Fixes: a37cf630b4d1 "gallium: add pipe_screen::resource_changed callback
>  wrappers"
> Signed-off-by: Michel Dänzer 

Urgh, thanks for fixing this up.

Reviewed-by: Lucas Stach 

> ---
>  src/gallium/auxiliary/driver_ddebug/dd_screen.c | 3 ++-
>  src/gallium/auxiliary/driver_rbug/rbug_screen.c | 3 ++-
>  src/gallium/auxiliary/driver_trace/tr_screen.c  | 3 ++-
>  src/mesa/state_tracker/st_cb_eglimage.c | 3 ++-
>  4 files changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/driver_ddebug/dd_screen.c 
> b/src/gallium/auxiliary/driver_ddebug/dd_screen.c
> index 5b2be28a969..5f922d884fe 100644
> --- a/src/gallium/auxiliary/driver_ddebug/dd_screen.c
> +++ b/src/gallium/auxiliary/driver_ddebug/dd_screen.c
> @@ -284,7 +284,8 @@ dd_screen_resource_changed(struct pipe_screen *_screen,
>  {
> struct pipe_screen *screen = dd_screen(_screen)->screen;
>  
> -   screen->resource_changed(screen, res);
> +   if (screen->resource_changed)
> +  screen->resource_changed(screen, res);
>  }
>  
>  static void
> diff --git a/src/gallium/auxiliary/driver_rbug/rbug_screen.c 
> b/src/gallium/auxiliary/driver_rbug/rbug_screen.c
> index 2477edbadf0..a1a77add734 100644
> --- a/src/gallium/auxiliary/driver_rbug/rbug_screen.c
> +++ b/src/gallium/auxiliary/driver_rbug/rbug_screen.c
> @@ -222,7 +222,8 @@ rbug_screen_resource_changed(struct pipe_screen *_screen,
> struct pipe_screen *screen = rb_screen->screen;
> struct pipe_resource *resource = rb_resource->resource;
>  
> -   screen->resource_changed(screen, resource);
> +   if (screen->resource_changed)
> +  screen->resource_changed(screen, resource);
>  }
>  
>  static void
> diff --git a/src/gallium/auxiliary/driver_trace/tr_screen.c 
> b/src/gallium/auxiliary/driver_trace/tr_screen.c
> index d5a81249b51..704b2a3c72d 100644
> --- a/src/gallium/auxiliary/driver_trace/tr_screen.c
> +++ b/src/gallium/auxiliary/driver_trace/tr_screen.c
> @@ -444,7 +444,8 @@ trace_screen_resource_changed(struct pipe_screen *_screen,
> trace_dump_arg(ptr, screen);
> trace_dump_arg(ptr, resource);
>  
> -   screen->resource_changed(screen, resource);
> +   if (screen->resource_changed)
> +  screen->resource_changed(screen, resource);
>  
> trace_dump_call_end();
>  }
> diff --git a/src/mesa/state_tracker/st_cb_eglimage.c 
> b/src/mesa/state_tracker/st_cb_eglimage.c
> index 4f33cb4bb06..0db2efc01cf 100644
> --- a/src/mesa/state_tracker/st_cb_eglimage.c
> +++ b/src/mesa/state_tracker/st_cb_eglimage.c
> @@ -229,7 +229,8 @@ st_bind_egl_image(struct gl_context *ctx,
> pipe_resource_reference(>pt, stimg->texture);
> st_texture_release_all_sampler_views(st, stObj);
> pipe_resource_reference(>pt, stObj->pt);
> -   st->pipe->screen->resource_changed(st->pipe->screen, stImage->pt);
> +   if (st->pipe->screen->resource_changed)
> +  st->pipe->screen->resource_changed(st->pipe->screen, stImage->pt);
>  
> stObj->surface_format = stimg->format;
> stObj->level_override = stimg->level;
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] gallium: Check pipe_screen::resource_changed before dereferencing it

2018-07-12 Thread Michel Dänzer
From: Michel Dänzer 

It's optional, only implemented by the etnaviv driver so far.

Fixes: 501d0edeca32 "st/mesa: call resource_changed when binding a
 EGLImage to a texture"
Fixes: a37cf630b4d1 "gallium: add pipe_screen::resource_changed callback
 wrappers"
Signed-off-by: Michel Dänzer 
---
 src/gallium/auxiliary/driver_ddebug/dd_screen.c | 3 ++-
 src/gallium/auxiliary/driver_rbug/rbug_screen.c | 3 ++-
 src/gallium/auxiliary/driver_trace/tr_screen.c  | 3 ++-
 src/mesa/state_tracker/st_cb_eglimage.c | 3 ++-
 4 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/gallium/auxiliary/driver_ddebug/dd_screen.c 
b/src/gallium/auxiliary/driver_ddebug/dd_screen.c
index 5b2be28a969..5f922d884fe 100644
--- a/src/gallium/auxiliary/driver_ddebug/dd_screen.c
+++ b/src/gallium/auxiliary/driver_ddebug/dd_screen.c
@@ -284,7 +284,8 @@ dd_screen_resource_changed(struct pipe_screen *_screen,
 {
struct pipe_screen *screen = dd_screen(_screen)->screen;
 
-   screen->resource_changed(screen, res);
+   if (screen->resource_changed)
+  screen->resource_changed(screen, res);
 }
 
 static void
diff --git a/src/gallium/auxiliary/driver_rbug/rbug_screen.c 
b/src/gallium/auxiliary/driver_rbug/rbug_screen.c
index 2477edbadf0..a1a77add734 100644
--- a/src/gallium/auxiliary/driver_rbug/rbug_screen.c
+++ b/src/gallium/auxiliary/driver_rbug/rbug_screen.c
@@ -222,7 +222,8 @@ rbug_screen_resource_changed(struct pipe_screen *_screen,
struct pipe_screen *screen = rb_screen->screen;
struct pipe_resource *resource = rb_resource->resource;
 
-   screen->resource_changed(screen, resource);
+   if (screen->resource_changed)
+  screen->resource_changed(screen, resource);
 }
 
 static void
diff --git a/src/gallium/auxiliary/driver_trace/tr_screen.c 
b/src/gallium/auxiliary/driver_trace/tr_screen.c
index d5a81249b51..704b2a3c72d 100644
--- a/src/gallium/auxiliary/driver_trace/tr_screen.c
+++ b/src/gallium/auxiliary/driver_trace/tr_screen.c
@@ -444,7 +444,8 @@ trace_screen_resource_changed(struct pipe_screen *_screen,
trace_dump_arg(ptr, screen);
trace_dump_arg(ptr, resource);
 
-   screen->resource_changed(screen, resource);
+   if (screen->resource_changed)
+  screen->resource_changed(screen, resource);
 
trace_dump_call_end();
 }
diff --git a/src/mesa/state_tracker/st_cb_eglimage.c 
b/src/mesa/state_tracker/st_cb_eglimage.c
index 4f33cb4bb06..0db2efc01cf 100644
--- a/src/mesa/state_tracker/st_cb_eglimage.c
+++ b/src/mesa/state_tracker/st_cb_eglimage.c
@@ -229,7 +229,8 @@ st_bind_egl_image(struct gl_context *ctx,
pipe_resource_reference(>pt, stimg->texture);
st_texture_release_all_sampler_views(st, stObj);
pipe_resource_reference(>pt, stObj->pt);
-   st->pipe->screen->resource_changed(st->pipe->screen, stImage->pt);
+   if (st->pipe->screen->resource_changed)
+  st->pipe->screen->resource_changed(st->pipe->screen, stImage->pt);
 
stObj->surface_format = stimg->format;
stObj->level_override = stimg->level;
-- 
2.18.0

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev