[Mesa-dev] [PATCH v5 01/12] gallium: move pipe_screen destroy into pipe-loader
Marek Olšák
maraeo at gmail.com
Wed Aug 9 18:32:59 UTC 2017
With Nicolai's comment addressed, patches 1-2 are:
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Marek
On Wed, Aug 9, 2017 at 6:47 PM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> On 08.08.2017 00:58, Rob Herring wrote:
>>
>> In preparation to add reference counting of pipe_screen in the
>> pipe-loader,
>> pipe_loader_release needs to destroy the pipe_screen instead of state
>> trackers.
>
>
> Did you miss Nine?
>
> Cheers,
> Nicolai
>
>
>>
>> Signed-off-by: Rob Herring <robh at kernel.org>
>> Cc: Emil Velikov <emil.l.velikov at gmail.com>
>> ---
>> src/gallium/auxiliary/pipe-loader/pipe_loader.c | 14 ++++++++++++--
>> src/gallium/auxiliary/pipe-loader/pipe_loader.h | 1 +
>> src/gallium/auxiliary/vl/vl_winsys_dri.c | 1 -
>> src/gallium/auxiliary/vl/vl_winsys_dri3.c | 1 -
>> src/gallium/auxiliary/vl/vl_winsys_drm.c | 1 -
>> src/gallium/state_trackers/clover/core/device.cpp | 4 +---
>> src/gallium/state_trackers/dri/dri_screen.c | 3 ---
>> src/gallium/state_trackers/xa/xa_tracker.c | 2 --
>> src/gallium/tests/trivial/compute.c | 1 -
>> src/gallium/tests/trivial/quad-tex.c | 1 -
>> src/gallium/tests/trivial/tri.c | 1 -
>> 11 files changed, 14 insertions(+), 16 deletions(-)
>>
>> diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader.c
>> b/src/gallium/auxiliary/pipe-loader/pipe_loader.c
>> index 926db49fd24b..61e5786a2528 100644
>> --- a/src/gallium/auxiliary/pipe-loader/pipe_loader.c
>> +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader.c
>> @@ -67,13 +67,20 @@ pipe_loader_probe(struct pipe_loader_device **devs,
>> int ndev)
>> return n;
>> }
>> +static void
>> +pipe_loader_release_dev(struct pipe_loader_device *dev)
>> +{
>> + dev->pscreen->destroy(dev->pscreen);
>> + dev->ops->release(&dev);
>> +}
>> +
>> void
>> pipe_loader_release(struct pipe_loader_device **devs, int ndev)
>> {
>> int i;
>> for (i = 0; i < ndev; i++)
>> - devs[i]->ops->release(&devs[i]);
>> + pipe_loader_release_dev(devs[i]);
>> }
>> void
>> @@ -125,12 +132,15 @@ pipe_loader_get_driinfo_xml(const char *driver_name)
>> struct pipe_screen *
>> pipe_loader_create_screen(struct pipe_loader_device *dev)
>> {
>> + struct pipe_screen *pscreen;
>> struct pipe_screen_config config;
>> pipe_loader_load_options(dev);
>> config.options = &dev->option_cache;
>> - return dev->ops->create_screen(dev, &config);
>> + pscreen = dev->ops->create_screen(dev, &config);
>> + dev->pscreen = pscreen;
>> + return pscreen;
>> }
>> 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 b50114310b4a..25cf5616f785 100644
>> --- a/src/gallium/auxiliary/pipe-loader/pipe_loader.h
>> +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader.h
>> @@ -66,6 +66,7 @@ struct pipe_loader_device {
>> char *driver_name;
>> const struct pipe_loader_ops *ops;
>> + struct pipe_screen *pscreen;
>> driOptionCache option_cache;
>> driOptionCache option_info;
>> diff --git a/src/gallium/auxiliary/vl/vl_winsys_dri.c
>> b/src/gallium/auxiliary/vl/vl_winsys_dri.c
>> index b4fb47ea8e46..444fff321eae 100644
>> --- a/src/gallium/auxiliary/vl/vl_winsys_dri.c
>> +++ b/src/gallium/auxiliary/vl/vl_winsys_dri.c
>> @@ -463,7 +463,6 @@ vl_dri2_screen_destroy(struct vl_screen *vscreen)
>> }
>> vl_dri2_destroy_drawable(scrn);
>> - scrn->base.pscreen->destroy(scrn->base.pscreen);
>> pipe_loader_release(&scrn->base.dev, 1);
>> FREE(scrn);
>> }
>> diff --git a/src/gallium/auxiliary/vl/vl_winsys_dri3.c
>> b/src/gallium/auxiliary/vl/vl_winsys_dri3.c
>> index 8251087f3f90..4ed7ef0eacad 100644
>> --- a/src/gallium/auxiliary/vl/vl_winsys_dri3.c
>> +++ b/src/gallium/auxiliary/vl/vl_winsys_dri3.c
>> @@ -732,7 +732,6 @@ vl_dri3_screen_destroy(struct vl_screen *vscreen)
>> xcb_unregister_for_special_event(scrn->conn, scrn->special_event);
>> }
>> scrn->pipe->destroy(scrn->pipe);
>> - scrn->base.pscreen->destroy(scrn->base.pscreen);
>> pipe_loader_release(&scrn->base.dev, 1);
>> FREE(scrn);
>> diff --git a/src/gallium/auxiliary/vl/vl_winsys_drm.c
>> b/src/gallium/auxiliary/vl/vl_winsys_drm.c
>> index df8809c501cb..6bbc87635c78 100644
>> --- a/src/gallium/auxiliary/vl/vl_winsys_drm.c
>> +++ b/src/gallium/auxiliary/vl/vl_winsys_drm.c
>> @@ -81,7 +81,6 @@ vl_drm_screen_destroy(struct vl_screen *vscreen)
>> {
>> assert(vscreen);
>> - vscreen->pscreen->destroy(vscreen->pscreen);
>> pipe_loader_release(&vscreen->dev, 1);
>> FREE(vscreen);
>> }
>> diff --git a/src/gallium/state_trackers/clover/core/device.cpp
>> b/src/gallium/state_trackers/clover/core/device.cpp
>> index 8dfba1ad9fd9..bfdd32c794a1 100644
>> --- a/src/gallium/state_trackers/clover/core/device.cpp
>> +++ b/src/gallium/state_trackers/clover/core/device.cpp
>> @@ -45,14 +45,12 @@ device::device(clover::platform &platform,
>> pipe_loader_device *ldev) :
>> pipe = pipe_loader_create_screen(ldev);
>> if (!pipe || !pipe->get_param(pipe, PIPE_CAP_COMPUTE)) {
>> if (pipe)
>> - pipe->destroy(pipe);
>> + pipe_loader_release(&ldev, 1);
>> throw error(CL_INVALID_DEVICE);
>> }
>> }
>> device::~device() {
>> - if (pipe)
>> - pipe->destroy(pipe);
>> if (ldev)
>> pipe_loader_release(&ldev, 1);
>> }
>> diff --git a/src/gallium/state_trackers/dri/dri_screen.c
>> b/src/gallium/state_trackers/dri/dri_screen.c
>> index 406e97dc2429..01ca2202b4c8 100644
>> --- a/src/gallium/state_trackers/dri/dri_screen.c
>> +++ b/src/gallium/state_trackers/dri/dri_screen.c
>> @@ -428,9 +428,6 @@ dri_destroy_screen_helper(struct dri_screen * screen)
>> if (screen->st_api && screen->st_api->destroy)
>> screen->st_api->destroy(screen->st_api);
>> - if (screen->base.screen)
>> - screen->base.screen->destroy(screen->base.screen);
>> -
>> mtx_destroy(&screen->opencl_func_mutex);
>> }
>> diff --git a/src/gallium/state_trackers/xa/xa_tracker.c
>> b/src/gallium/state_trackers/xa/xa_tracker.c
>> index 03a3abf6835a..fee83afcc66e 100644
>> --- a/src/gallium/state_trackers/xa/xa_tracker.c
>> +++ b/src/gallium/state_trackers/xa/xa_tracker.c
>> @@ -209,7 +209,6 @@ xa_tracker_create(int drm_fd)
>> out_sf_alloc_fail:
>> xa_context_destroy(xa->default_ctx);
>> out_no_pipe:
>> - xa->screen->destroy(xa->screen);
>> out_no_screen:
>> if (xa->dev)
>> pipe_loader_release(&xa->dev, 1);
>> @@ -225,7 +224,6 @@ xa_tracker_destroy(struct xa_tracker *xa)
>> {
>> free(xa->supported_formats);
>> xa_context_destroy(xa->default_ctx);
>> - xa->screen->destroy(xa->screen);
>> pipe_loader_release(&xa->dev, 1);
>> free(xa);
>> }
>> diff --git a/src/gallium/tests/trivial/compute.c
>> b/src/gallium/tests/trivial/compute.c
>> index 443451e13d24..d718906eb7c8 100644
>> --- a/src/gallium/tests/trivial/compute.c
>> +++ b/src/gallium/tests/trivial/compute.c
>> @@ -90,7 +90,6 @@ static void init_ctx(struct context *ctx)
>> static void destroy_ctx(struct context *ctx)
>> {
>> ctx->pipe->destroy(ctx->pipe);
>> - ctx->screen->destroy(ctx->screen);
>> pipe_loader_release(&ctx->dev, 1);
>> FREE(ctx);
>> }
>> diff --git a/src/gallium/tests/trivial/quad-tex.c
>> b/src/gallium/tests/trivial/quad-tex.c
>> index 2ee544a41294..8b8352d5c535 100644
>> --- a/src/gallium/tests/trivial/quad-tex.c
>> +++ b/src/gallium/tests/trivial/quad-tex.c
>> @@ -291,7 +291,6 @@ static void close_prog(struct program *p)
>> pipe_resource_reference(&p->vbuf, NULL);
>> p->pipe->destroy(p->pipe);
>> - p->screen->destroy(p->screen);
>> pipe_loader_release(&p->dev, 1);
>> FREE(p);
>> diff --git a/src/gallium/tests/trivial/tri.c
>> b/src/gallium/tests/trivial/tri.c
>> index a2031696f029..bb053e761b75 100644
>> --- a/src/gallium/tests/trivial/tri.c
>> +++ b/src/gallium/tests/trivial/tri.c
>> @@ -231,7 +231,6 @@ static void close_prog(struct program *p)
>> pipe_resource_reference(&p->vbuf, NULL);
>> p->pipe->destroy(p->pipe);
>> - p->screen->destroy(p->screen);
>> pipe_loader_release(&p->dev, 1);
>> FREE(p);
>>
>
>
> --
> Lerne, wie die Welt wirklich ist,
> Aber vergiss niemals, wie sie sein sollte.
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list