[Mesa-dev] [PATCH] gallium: introduce load_pipe_screen()
Rob Clark
robdclark at gmail.com
Thu Feb 18 17:47:32 UTC 2016
On Thu, Feb 18, 2016 at 11:48 AM, Emil Velikov <emil.l.velikov at gmail.com> wrote:
> Hi Rob,
>
> On 10 February 2016 at 22:56, Rob Herring <robh at kernel.org> wrote:
>> Introduce load_pipe_screen() public entry point for other code which
>> dlopen()'s gralloc_dri.so for purposes of loading a pipe_screen. This way
>> drm_gralloc can avoid static linking of each gallium winsys and driver,
>> and avoid duplicated logic to figure out which pipe driver to load.
>>
>> This is based on Rob Clark's work. I moved it into pipe_loader which seems
>> to be a better spot.
>>
> As Rob C might have mentioned it, I'm not at all a fan of this.
> Although unless (until?) Android fixes their runtime to honour
> --dynamic-list(s) we can keep it in. Please ensure it's Android
> specific (add a bunch of ifdef ANDROID guards) add a few
> notes/warnings "hack: we need this for android because..."
I know you weren't a fan.. but IMHO we need to do *something* to
simplify the "give me a pipe_screen, kthx" problem.. and ideally make
the mega-driver vs non-mega-driver cases more similar. I seem to
remember you had a counter-proposal somewhere but lost track of the
state of that..
BR,
-R
>> Signed-off-by: Rob Herring <robh at kernel.org>
>> ---
>> src/gallium/auxiliary/pipe-loader/pipe_loader.h | 3 +++
>> src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c | 9 +++++++++
>> src/gallium/state_trackers/dri/dri2.c | 4 +---
>> src/gallium/targets/dri/dri.sym | 1 +
>> 4 files changed, 14 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader.h b/src/gallium/auxiliary/pipe-loader/pipe_loader.h
>> index 690d088..19d269f 100644
>> --- a/src/gallium/auxiliary/pipe-loader/pipe_loader.h
>> +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader.h
>> @@ -180,6 +180,9 @@ pipe_loader_drm_probe(struct pipe_loader_device **devs, int ndev);
>> bool
>> pipe_loader_drm_probe_fd(struct pipe_loader_device **dev, int fd);
>>
>> +struct pipe_screen *
>> +load_pipe_screen(struct pipe_loader_device **dev, int fd);
>> +
>> #ifdef __cplusplus
>> }
>> #endif
>> diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c b/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c
>> index 994a284..b7e0ac7 100644
>> --- a/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c
>> +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c
>> @@ -306,3 +306,12 @@ static const struct pipe_loader_ops pipe_loader_drm_ops = {
>> .configuration = pipe_loader_drm_configuration,
>> .release = pipe_loader_drm_release
>> };
>> +
>> +PUBLIC struct pipe_screen *load_pipe_screen(struct pipe_loader_device **dev, int fd)
>> +{
>> + struct pipe_screen *pscreen = NULL;
>> + if (pipe_loader_drm_probe_fd(dev, fd)) {
>> + pscreen = pipe_loader_create_screen(*dev);
>> + }
>> + return pscreen;
>> +}
>> diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c
>> index a11a6cb..29aaa96 100644
>> --- a/src/gallium/state_trackers/dri/dri2.c
>> +++ b/src/gallium/state_trackers/dri/dri2.c
>> @@ -1461,9 +1461,7 @@ dri2_init_screen(__DRIscreen * sPriv)
>> if (screen->fd < 0 || (fd = dup(screen->fd)) < 0)
>> goto fail;
>>
>> - if (pipe_loader_drm_probe_fd(&screen->dev, fd))
>> - pscreen = pipe_loader_create_screen(screen->dev);
>> -
>> + pscreen = load_pipe_screen(&screen->dev, screen->fd);
>> if (!pscreen)
>> goto fail;
>>
>> diff --git a/src/gallium/targets/dri/dri.sym b/src/gallium/targets/dri/dri.sym
>> index 1fdf18b..1d86c88 100644
>> --- a/src/gallium/targets/dri/dri.sym
>> +++ b/src/gallium/targets/dri/dri.sym
>
> Can we wire (use) this into the Android build. Iirc Rob C mentioned
> that things did work on his end.
>
> Thanks
> Emil
More information about the mesa-dev
mailing list