[Mesa-dev] [RFC 0/7] Common pipe screen ref counting

Christian König deathsimple at vodafone.de
Fri Jun 17 18:10:44 UTC 2016


Clearly a good idea to move this into common code, but there is just one 
important thing you are missing here.

We intentional export the *_winsys_create() in the created libraries to 
have only one global file descriptor for all libraries. See the 
following files as well:
src/gallium/targets/vdpau/vdpau.sym
src/gallium/targets/dri-vdpau.dyn
src/gallium/targets/dri/dri.sym

I'm not sure if that is needed any more or will keep working if you 
change the code like this.

Regards,
Christian.

Am 17.06.2016 um 19:45 schrieb Rob Herring:
> I needed to add screen ref counting to vc4 driver, so rather than yet
> another copy of the same fd hashing and ref counting code, I implemented
> it in the pipe-loader. AFAICT, the pipe-loader is the only place the
> winsys create screen functions are called and seemed to be the best
> location to put this. The tricky part is the destroy path and not
> freeing the screen before reference counting. I think I found all the
> callers of pipe_screen->destroy.
>
> This is tested on virgl and freedreno on Android and radeon is build
> tested only.
>
> Rob
>
> Rob Herring (7):
>    gallium: move pipe_screen destroy into pipe-loader
>    pipe-loader-drm: Add common pipe_screen refcounting
>    Revert "virgl: reuse screen when fd is already open"
>    Revert "virgl: mark function as static"
>    nouveau: remove screen ref counting
>    freedreno: remove screen ref counting
>    radeon: remove screen ref counting
>
>   src/gallium/auxiliary/pipe-loader/pipe_loader.h    |  1 +
>   .../auxiliary/pipe-loader/pipe_loader_drm.c        | 71 ++++++++++++++++-
>   src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c |  6 ++
>   src/gallium/auxiliary/target-helpers/drm_helper.h  |  7 +-
>   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/drivers/freedreno/freedreno_screen.c   |  1 -
>   src/gallium/drivers/freedreno/freedreno_screen.h   | 10 ---
>   src/gallium/drivers/nouveau/nouveau_screen.h       |  2 -
>   src/gallium/drivers/r300/r300_screen.c             |  3 -
>   src/gallium/drivers/r600/r600_pipe.c               |  6 --
>   src/gallium/drivers/radeon/radeon_winsys.h         |  8 --
>   src/gallium/drivers/radeonsi/si_pipe.c             |  6 --
>   src/gallium/drivers/virgl/virgl_screen.c           |  1 -
>   src/gallium/drivers/virgl/virgl_screen.h           |  6 --
>   src/gallium/include/pipe/p_screen.h                |  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 -
>   src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c      | 66 +---------------
>   src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h      |  1 -
>   .../winsys/freedreno/drm/freedreno_drm_winsys.c    | 89 +---------------------
>   .../winsys/nouveau/drm/nouveau_drm_winsys.c        | 84 +-------------------
>   src/gallium/winsys/radeon/drm/radeon_drm_winsys.c  | 80 +------------------
>   src/gallium/winsys/virgl/drm/virgl_drm_public.h    |  4 +-
>   src/gallium/winsys/virgl/drm/virgl_drm_winsys.c    | 89 +---------------------
>   30 files changed, 95 insertions(+), 462 deletions(-)
>



More information about the mesa-dev mailing list