[Mesa-dev] [PATCH 3/4] pipe-loader: remove config from pipe_loader_create_screen

Dieter Nützel Dieter at nuetzel-hh.de
Fri Aug 4 00:48:34 UTC 2017


Am 03.08.2017 15:44, schrieb Nicolai Hähnle:
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
> 
> The config passed into the screen should be independent from the state
> tracker, because at least in the case of radeonsi, the screen structure
> can be shared between different state trackers.
> 
> Incidentally, this also fixes crashes that were recently introduced.

For the series:

Tested-by: Dieter Nützel <Dieter at nuetzel-hh.de>

on RX580

This one fixed sigfault with 'vdpau', finally.
But have to delete this line, too:

diff --git a/src/gallium/targets/opencl/Makefile.am 
b/src/gallium/targets/opencl/Makefile.am
index e88fa0fd38..c9d2be7afd 100644
--- a/src/gallium/targets/opencl/Makefile.am
+++ b/src/gallium/targets/opencl/Makefile.am
@@ -19,7 +19,6 @@ lib at OPENCL_LIBNAME@_la_LIBADD = \
         $(top_builddir)/src/gallium/state_trackers/clover/libclover.la \
         $(top_builddir)/src/gallium/auxiliary/libgallium.la \
         $(top_builddir)/src/util/libmesautil.la \
-       $(top_builddir)/src/util/libxmlconfig.la \
         $(EXPAT_LIBS) \
         $(LIBELF_LIBS) \
         $(DLOPEN_LIBS) \

Cheers,
Dieter

Back from vacation ;-)

> Fixes: a35a9e7c ("gallium: add driconf options to pipe_screen_config")
> Cc: Jan Vesely <jan.vesely at rutgers.edu>
> ---
>  src/gallium/auxiliary/pipe-loader/pipe_loader.c   | 9 +++++----
>  src/gallium/auxiliary/pipe-loader/pipe_loader.h   | 5 +----
>  src/gallium/auxiliary/vl/vl_winsys_dri.c          | 2 +-
>  src/gallium/auxiliary/vl/vl_winsys_dri3.c         | 2 +-
>  src/gallium/auxiliary/vl/vl_winsys_drm.c          | 2 +-
>  src/gallium/state_trackers/clover/core/device.cpp | 2 +-
>  src/gallium/state_trackers/dri/dri2.c             | 8 ++------
>  src/gallium/state_trackers/dri/drisw.c            | 3 +--
>  src/gallium/state_trackers/xa/xa_tracker.c        | 2 +-
>  src/gallium/targets/d3dadapter9/drm.c             | 4 ++--
>  src/gallium/tests/trivial/compute.c               | 2 +-
>  src/gallium/tests/trivial/quad-tex.c              | 2 +-
>  src/gallium/tests/trivial/tri.c                   | 2 +-
>  13 files changed, 19 insertions(+), 26 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader.c
> b/src/gallium/auxiliary/pipe-loader/pipe_loader.c
> index 6d9acebdb68..926db49fd24 100644
> --- a/src/gallium/auxiliary/pipe-loader/pipe_loader.c
> +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader.c
> @@ -123,13 +123,14 @@ pipe_loader_get_driinfo_xml(const char 
> *driver_name)
>  }
> 
>  struct pipe_screen *
> -pipe_loader_create_screen(struct pipe_loader_device *dev,
> -                          struct pipe_screen_config *config)
> +pipe_loader_create_screen(struct pipe_loader_device *dev)
>  {
> +   struct pipe_screen_config config;
> +
>     pipe_loader_load_options(dev);
> -   config->options = &dev->option_cache;
> +   config.options = &dev->option_cache;
> 
> -   return dev->ops->create_screen(dev, config);
> +   return dev->ops->create_screen(dev, &config);
>  }
> 
>  struct util_dl_library *
> diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader.h
> b/src/gallium/auxiliary/pipe-loader/pipe_loader.h
> index b6e81cf3915..b50114310b4 100644
> --- a/src/gallium/auxiliary/pipe-loader/pipe_loader.h
> +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader.h
> @@ -86,12 +86,9 @@ pipe_loader_probe(struct pipe_loader_device **devs,
> int ndev);
>   * Create a pipe_screen for the specified device.
>   *
>   * \param dev Device the screen will be created for.
> - * \param config Configuration options. The lifetime of this structure 
> and its
> - *               elements may be limited to the duration of this call.
>   */
>  struct pipe_screen *
> -pipe_loader_create_screen(struct pipe_loader_device *dev,
> -                          struct pipe_screen_config *config);
> +pipe_loader_create_screen(struct pipe_loader_device *dev);
> 
>  /**
>   * Query the configuration parameters for the specified device.
> diff --git a/src/gallium/auxiliary/vl/vl_winsys_dri.c
> b/src/gallium/auxiliary/vl/vl_winsys_dri.c
> index 7a0fc3c3bf2..b4fb47ea8e4 100644
> --- a/src/gallium/auxiliary/vl/vl_winsys_dri.c
> +++ b/src/gallium/auxiliary/vl/vl_winsys_dri.c
> @@ -406,7 +406,7 @@ vl_dri2_screen_create(Display *display, int screen)
>        goto free_authenticate;
> 
>     if (pipe_loader_drm_probe_fd(&scrn->base.dev, fd))
> -      scrn->base.pscreen = pipe_loader_create_screen(scrn->base.dev, 
> NULL);
> +      scrn->base.pscreen = pipe_loader_create_screen(scrn->base.dev);
> 
>     if (!scrn->base.pscreen)
>        goto release_pipe;
> diff --git a/src/gallium/auxiliary/vl/vl_winsys_dri3.c
> b/src/gallium/auxiliary/vl/vl_winsys_dri3.c
> index fbb729ae176..8251087f3f9 100644
> --- a/src/gallium/auxiliary/vl/vl_winsys_dri3.c
> +++ b/src/gallium/auxiliary/vl/vl_winsys_dri3.c
> @@ -817,7 +817,7 @@ vl_dri3_screen_create(Display *display, int screen)
>     free(geom_reply);
> 
>     if (pipe_loader_drm_probe_fd(&scrn->base.dev, fd))
> -      scrn->base.pscreen = pipe_loader_create_screen(scrn->base.dev, 
> NULL);
> +      scrn->base.pscreen = pipe_loader_create_screen(scrn->base.dev);
> 
>     if (!scrn->base.pscreen)
>        goto release_pipe;
> diff --git a/src/gallium/auxiliary/vl/vl_winsys_drm.c
> b/src/gallium/auxiliary/vl/vl_winsys_drm.c
> index 07ce380ef55..df8809c501c 100644
> --- a/src/gallium/auxiliary/vl/vl_winsys_drm.c
> +++ b/src/gallium/auxiliary/vl/vl_winsys_drm.c
> @@ -52,7 +52,7 @@ vl_drm_screen_create(int fd)
>        goto free_screen;
> 
>     if (pipe_loader_drm_probe_fd(&vscreen->dev, new_fd))
> -      vscreen->pscreen = pipe_loader_create_screen(vscreen->dev, 
> NULL);
> +      vscreen->pscreen = pipe_loader_create_screen(vscreen->dev);
> 
>     if (!vscreen->pscreen)
>        goto release_pipe;
> diff --git a/src/gallium/state_trackers/clover/core/device.cpp
> b/src/gallium/state_trackers/clover/core/device.cpp
> index bd07670f384..8dfba1ad9fd 100644
> --- a/src/gallium/state_trackers/clover/core/device.cpp
> +++ b/src/gallium/state_trackers/clover/core/device.cpp
> @@ -42,7 +42,7 @@ namespace {
> 
>  device::device(clover::platform &platform, pipe_loader_device *ldev) :
>     platform(platform), ldev(ldev) {
> -   pipe = pipe_loader_create_screen(ldev, NULL);
> +   pipe = pipe_loader_create_screen(ldev);
>     if (!pipe || !pipe->get_param(pipe, PIPE_CAP_COMPUTE)) {
>        if (pipe)
>           pipe->destroy(pipe);
> diff --git a/src/gallium/state_trackers/dri/dri2.c
> b/src/gallium/state_trackers/dri/dri2.c
> index 0f36e1bf894..3555107856c 100644
> --- a/src/gallium/state_trackers/dri/dri2.c
> +++ b/src/gallium/state_trackers/dri/dri2.c
> @@ -2071,11 +2071,9 @@ dri2_init_screen(__DRIscreen * sPriv)
> 
> 
>     if (pipe_loader_drm_probe_fd(&screen->dev, fd)) {
> -      struct pipe_screen_config config = {};
> -
>        dri_init_options(screen);
> 
> -      pscreen = pipe_loader_create_screen(screen->dev, &config);
> +      pscreen = pipe_loader_create_screen(screen->dev);
>     }
> 
>     if (!pscreen)
> @@ -2166,12 +2164,10 @@ dri_kms_init_screen(__DRIscreen * sPriv)
>     if (screen->fd < 0 || (fd = fcntl(screen->fd, F_DUPFD_CLOEXEC, 3)) 
> < 0)
>        goto free_screen;
> 
> -   struct pipe_screen_config config = {};
> -
>     dri_init_options(screen);
> 
>     if (pipe_loader_sw_probe_kms(&screen->dev, fd))
> -      pscreen = pipe_loader_create_screen(screen->dev, &config);
> +      pscreen = pipe_loader_create_screen(screen->dev);
> 
>     if (!pscreen)
>         goto release_pipe;
> diff --git a/src/gallium/state_trackers/dri/drisw.c
> b/src/gallium/state_trackers/dri/drisw.c
> index ad40e2f837b..46ec95c6906 100644
> --- a/src/gallium/state_trackers/dri/drisw.c
> +++ b/src/gallium/state_trackers/dri/drisw.c
> @@ -401,10 +401,9 @@ drisw_init_screen(__DRIscreen * sPriv)
>     sPriv->extensions = drisw_screen_extensions;
> 
>     if (pipe_loader_sw_probe_dri(&screen->dev, &drisw_lf)) {
> -      struct pipe_screen_config config;
>        dri_init_options(screen);
> 
> -      pscreen = pipe_loader_create_screen(screen->dev, &config);
> +      pscreen = pipe_loader_create_screen(screen->dev);
>     }
> 
>     if (!pscreen)
> diff --git a/src/gallium/state_trackers/xa/xa_tracker.c
> b/src/gallium/state_trackers/xa/xa_tracker.c
> index d4114ab5591..03a3abf6835 100644
> --- a/src/gallium/state_trackers/xa/xa_tracker.c
> +++ b/src/gallium/state_trackers/xa/xa_tracker.c
> @@ -162,7 +162,7 @@ xa_tracker_create(int drm_fd)
>  	goto out_no_fd;
> 
>      if (pipe_loader_drm_probe_fd(&xa->dev, fd))
> -	xa->screen = pipe_loader_create_screen(xa->dev, NULL);
> +	xa->screen = pipe_loader_create_screen(xa->dev);
> 
>      if (!xa->screen)
>  	goto out_no_screen;
> diff --git a/src/gallium/targets/d3dadapter9/drm.c
> b/src/gallium/targets/d3dadapter9/drm.c
> index e6e71448a28..9c5bd8a15b2 100644
> --- a/src/gallium/targets/d3dadapter9/drm.c
> +++ b/src/gallium/targets/d3dadapter9/drm.c
> @@ -229,7 +229,7 @@ drm_create_adapter( int fd,
>          return D3DERR_DRIVERINTERNALERROR;
>      }
> 
> -    ctx->base.hal = pipe_loader_create_screen(ctx->dev, NULL);
> +    ctx->base.hal = pipe_loader_create_screen(ctx->dev);
>      if (!ctx->base.hal) {
>          ERR("Unable to load requested driver.\n");
>          drm_destroy(&ctx->base);
> @@ -312,7 +312,7 @@ drm_create_adapter( int fd,
> 
>      /* wrap it to create a software screen that can share resources */
>      if (pipe_loader_sw_probe_wrapped(&ctx->swdev, ctx->base.hal))
> -        ctx->base.ref = pipe_loader_create_screen(ctx->swdev, NULL);
> +        ctx->base.ref = pipe_loader_create_screen(ctx->swdev);
> 
>      if (!ctx->base.ref) {
>          ERR("Couldn't wrap drm screen to swrast screen. Software 
> devices "
> diff --git a/src/gallium/tests/trivial/compute.c
> b/src/gallium/tests/trivial/compute.c
> index 49fefd84b4b..443451e13d2 100644
> --- a/src/gallium/tests/trivial/compute.c
> +++ b/src/gallium/tests/trivial/compute.c
> @@ -76,7 +76,7 @@ static void init_ctx(struct context *ctx)
>          ret = pipe_loader_probe(&ctx->dev, 1);
>          assert(ret);
> 
> -        ctx->screen = pipe_loader_create_screen(ctx->dev, NULL);
> +        ctx->screen = pipe_loader_create_screen(ctx->dev);
>          assert(ctx->screen);
> 
>          ctx->pipe = ctx->screen->context_create(ctx->screen, NULL, 0);
> diff --git a/src/gallium/tests/trivial/quad-tex.c
> b/src/gallium/tests/trivial/quad-tex.c
> index f6232d5dc3a..2ee544a4129 100644
> --- a/src/gallium/tests/trivial/quad-tex.c
> +++ b/src/gallium/tests/trivial/quad-tex.c
> @@ -96,7 +96,7 @@ static void init_prog(struct program *p)
>  	assert(ret);
> 
>  	/* init a pipe screen */
> -	p->screen = pipe_loader_create_screen(p->dev, NULL);
> +	p->screen = pipe_loader_create_screen(p->dev);
>  	assert(p->screen);
> 
>  	/* create the pipe driver context and cso context */
> diff --git a/src/gallium/tests/trivial/tri.c 
> b/src/gallium/tests/trivial/tri.c
> index b45a408d425..a2031696f02 100644
> --- a/src/gallium/tests/trivial/tri.c
> +++ b/src/gallium/tests/trivial/tri.c
> @@ -91,7 +91,7 @@ static void init_prog(struct program *p)
>  	assert(ret);
> 
>  	/* init a pipe screen */
> -	p->screen = pipe_loader_create_screen(p->dev, NULL);
> +	p->screen = pipe_loader_create_screen(p->dev);
>  	assert(p->screen);
> 
>  	/* create the pipe driver context and cso context */


More information about the mesa-dev mailing list