[Mesa-dev] [PATCH 00/16]: Allow Gallium drivers to support driver-specific drirc options

Nicolai Hähnle nicolai.haehnle at amd.com
Mon Jul 31 14:01:43 UTC 2017


On 31.07.2017 16:00, Nicolai Hähnle wrote:
> So, this series has been on my hard disk for quite some time, although 
> nothing has really changed. Mostly I haven't pushed it out of 
> build-system related fear :)
> 
> So I think what I'm going to do is push the xmlconfig move first in a 
> while, and then wait a bit if there's any fall-out from it. If there 
> isn't, I'm going to push the rest over the next day or two.

Obviously, that would be including Emil's Android-related fixes.

If anybody wants to give it a spin before, the freshly rebased version 
is at https://cgit.freedesktop.org/~nh/mesa/log/?h=driconf

Cheers,
Nicolai


> 
> Cheers,
> Nicolai
> 
> 
> On 30.06.2017 14:45, Nicolai Hähnle wrote:
>> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>>
>> Hi all,
>>
>> This is a big change to the drirc/xmlconfig framework, mostly on the
>> Gallium side.
>>
>> The non-Gallium changes are:
>> - xmlconfig is moved to src/util to better reflect how it is used going
>>    forward
>> - some glx/dri glue code
>>
>>
>> Problem Statement
>> -----------------
>> We want to allow Gallium drivers to define and use their own drirc
>> configuration options. This allows us to provide some more opportunities
>> for performance tuning.
>>
>> This involves making the xmlconfig functions available to the Gallium
>> drivers, but also allowing them to specify their own option definitions.
>>
>> There are two related types of XML in the drirc/xmlconfig framework:
>> - the driconf XML is stored in the drirc file and contains settings
>> - the driinfo XML describes available options and default values;
>>    it is used inside the driver during drirc parsing, and is also
>>    exported and used by the DriConf GUI (via the xdriinfo app)
>>
>> (The DriConf GUI tool has issues, but the fundamental principle of how it
>> interacts with Mesa is sound, so this series doesn't change that.)
>>
>>
>> Additional Goals
>> ----------------
>> 1. Allow non-OpenGL state trackers to define their own config options.
>>     In particular, Nine should be easy to hook up after this series.
>> 2. The full driinfo XML for the driver and all supported state trackers
>>     should be provided by glXGetDriverConfig (and hence xdriinfo).
>> 3. Ensure consistent initialization of driver options in radeonsi. Since
>>     radeonsi has only a single pipe_screen per process and device, this
>>     means that the config must be loaded e.g. when some video state 
>> tracker
>>     initializes before OpenGL.
>> 4. Make adding new options painless both for the state tracker and for 
>> the
>>     driver.
>> 5. Parse the drirc XML only once per process in the normal case.
>> 6. Store only one copy of the driinfo XML per driver.
>>
>>
>> Solution
>> --------
>> 1. The driinfo XML is optionally specified by the pipe driver, by means
>>     of the drm_driver_descriptor, via a DRM_CONF_XML_OPTIONS query.
>>     If the pipe driver doesn't specify it, the pipe loader provides the
>>     default.
>> 2. Parse the drirc XML in the pipe_loader and make the result 
>> available to
>>     both the driver and the state tracker.
>> 3. Add a tool that merges DRI_CONF_xxx macro definition groups at 
>> build time,
>>     so that we don't have redundant definitions of state-tracker options.
>> 4. Define a v2 of the DRI_ConfigOptions extension that allows us to 
>> forward
>>     the driver-specific driinfo XML.
>>
>> Patches 1-5 are the non-Gallium parts.
>>
>> Patches 6-14 prepare the pipe loader and related infrastructure.
>>
>> Patches 15-16 setup the custom driinfo XML for radeonsi and add a first
>> driver-specific config option.
>>
>> I iterated over the design a couple of times and am now fairly happy with
>> it. One thing that's bound to be messy is the build system changes.
>> The Android.mk and SCons changes are basically best guesses. If anybody
>> wants to try the series, especially for build failures, please do. You 
>> can
>> get it here: https://cgit.freedesktop.org/~nh/mesa/log/?h=driconf
>>
>> Please review!
>> Thanks,
>> Nicolai
>> -- 
>>   configure.ac                                       |   2 +-
>>   include/GL/internal/dri_interface.h                |  20 +-
>>   src/gallium/Automake.inc                           |   2 +
>>   src/gallium/auxiliary/pipe-loader/Makefile.am      |   1 +
>>   src/gallium/auxiliary/pipe-loader/Makefile.sources |   3 +-
>>   .../auxiliary/pipe-loader/driinfo_gallium.h        |  34 ++++
>>   src/gallium/auxiliary/pipe-loader/pipe_loader.c    |  61 +++++-
>>   src/gallium/auxiliary/pipe-loader/pipe_loader.h    |  37 +++-
>>   .../auxiliary/pipe-loader/pipe_loader_drm.c        | 130 ++++++------
>>   .../auxiliary/pipe-loader/pipe_loader_priv.h       |  17 +-
>>   src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c |   5 +-
>>   src/gallium/auxiliary/target-helpers/drm_helper.h  | 106 +++++++---
>>   .../auxiliary/target-helpers/drm_helper_public.h   |  34 ++--
>>   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/drivers/r300/r300_public.h             |   4 +-
>>   src/gallium/drivers/r300/r300_screen.c             |   3 +-
>>   src/gallium/drivers/r600/r600_pipe.c               |   5 +-
>>   src/gallium/drivers/r600/r600_public.h             |   4 +-
>>   src/gallium/drivers/radeonsi/Makefile.am           |  13 ++
>>   src/gallium/drivers/radeonsi/Makefile.sources      |   4 +
>>   src/gallium/drivers/radeonsi/driinfo_radeonsi.h    |   4 +
>>   src/gallium/drivers/radeonsi/si_pipe.c             |   8 +-
>>   src/gallium/drivers/radeonsi/si_public.h           |   2 +-
>>   src/gallium/include/pipe/p_screen.h                |  10 +
>>   src/gallium/include/state_tracker/drm_driver.h     |   6 +-
>>   src/gallium/state_trackers/clover/core/device.cpp  |   2 +-
>>   src/gallium/state_trackers/dri/Makefile.am         |   2 +-
>>   src/gallium/state_trackers/dri/dri2.c              |  28 +--
>>   src/gallium/state_trackers/dri/dri_context.c       |   3 +-
>>   src/gallium/state_trackers/dri/dri_screen.c        |  83 +-------
>>   src/gallium/state_trackers/dri/dri_screen.h        |  10 +-
>>   src/gallium/state_trackers/dri/drisw.c             |   6 +-
>>   src/gallium/state_trackers/xa/xa_tracker.c         |   2 +-
>>   src/gallium/targets/d3dadapter9/Makefile.am        |   1 -
>>   src/gallium/targets/d3dadapter9/drm.c              |   8 +-
>>   src/gallium/targets/pipe-loader/Makefile.am        |   1 +
>>   src/gallium/targets/pipe-loader/pipe_i915.c        |   2 +-
>>   src/gallium/targets/pipe-loader/pipe_msm.c         |   2 +-
>>   src/gallium/targets/pipe-loader/pipe_nouveau.c     |   2 +-
>>   src/gallium/targets/pipe-loader/pipe_r300.c        |   2 +-
>>   src/gallium/targets/pipe-loader/pipe_r600.c        |   2 +-
>>   src/gallium/targets/pipe-loader/pipe_radeonsi.c    |  11 +-
>>   src/gallium/targets/pipe-loader/pipe_vmwgfx.c      |   2 +-
>>   src/gallium/tests/trivial/compute.c                |   2 +-
>>   src/gallium/tests/trivial/quad-tex.c               |   2 +-
>>   src/gallium/tests/trivial/tri.c                    |   2 +-
>>   src/gallium/winsys/amdgpu/drm/amdgpu_public.h      |   5 +-
>>   src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c      |   4 +-
>>   src/gallium/winsys/radeon/drm/radeon_drm_public.h  |   5 +-
>>   src/gallium/winsys/radeon/drm/radeon_drm_winsys.c  |   4 +-
>>   src/glx/dri_glx.c                                  | 113 +++++++++--
>>   src/loader/Makefile.am                             |   4 +-
>>   src/loader/loader.c                                |   4 +-
>>   src/mesa/drivers/SConscript                        |   1 -
>>   src/mesa/drivers/dri/Makefile.am                   |   2 +-
>>   src/mesa/drivers/dri/common/Android.mk             |  48 +----
>>   src/mesa/drivers/dri/common/Makefile.am            |  12 +-
>>   src/mesa/drivers/dri/common/Makefile.sources       |   4 -
>>   src/mesa/drivers/dri/common/SConscript             |   7 +-
>>   src/mesa/drivers/dri/common/dri_util.c             |   2 +-
>>   src/mesa/drivers/dri/common/dri_util.h             |   2 +-
>>   src/mesa/drivers/dri/i915/Makefile.am              |   2 +-
>>   src/mesa/drivers/dri/i915/intel_screen.c           |   2 +-
>>   src/mesa/drivers/dri/i915/intel_screen.h           |   2 +-
>>   src/mesa/drivers/dri/i965/Makefile.am              |   2 +-
>>   src/mesa/drivers/dri/i965/intel_screen.c           |   2 +-
>>   src/mesa/drivers/dri/i965/intel_screen.h           |   2 +-
>>   src/mesa/drivers/dri/r200/Makefile.am              |   2 +-
>>   src/mesa/drivers/dri/r200/r200_context.c           |   2 +-
>>   src/mesa/drivers/dri/r200/r200_state_init.c        |   2 +-
>>   src/mesa/drivers/dri/r200/r200_tex.c               |   2 +-
>>   src/mesa/drivers/dri/radeon/Makefile.am            |   2 +-
>>   .../drivers/dri/radeon/radeon_common_context.c     |   2 +-
>>   src/mesa/drivers/dri/radeon/radeon_context.c       |   2 +-
>>   src/mesa/drivers/dri/radeon/radeon_screen.c        |   2 +-
>>   src/mesa/drivers/dri/radeon/radeon_screen.h        |   2 +-
>>   src/mesa/drivers/dri/radeon/radeon_state_init.c    |   2 +-
>>   src/mesa/drivers/dri/radeon/radeon_tex.c           |   2 +-
>>   src/mesa/drivers/dri/radeon/radeon_texture.c       |   2 +-
>>   src/mesa/drivers/dri/swrast/Makefile.am            |   2 +-
>>   src/util/Android.mk                                |  47 ++++-
>>   src/util/Makefile.am                               |  20 +-
>>   src/util/Makefile.sources                          |   4 +
>>   src/util/SConscript                                |  16 +-
>>   src/{mesa/drivers/dri/common => util}/drirc        |   0
>>   src/util/merge_driinfo.py                          | 222 
>> +++++++++++++++++++++
>>   src/{mesa/drivers/dri/common => util}/xmlconfig.c  |  10 +-
>>   src/{mesa/drivers/dri/common => util}/xmlconfig.h  |   0
>>   src/{mesa/drivers/dri/common => util}/xmlpool.h    |   0
>>   .../drivers/dri/common => util}/xmlpool/.gitignore |   0
>>   .../dri/common => util}/xmlpool/Makefile.am        |   0
>>   .../drivers/dri/common => util}/xmlpool/SConscript |   0
>>   .../drivers/dri/common => util}/xmlpool/ca.po      |   0
>>   .../drivers/dri/common => util}/xmlpool/de.po      |   0
>>   .../drivers/dri/common => util}/xmlpool/es.po      |   0
>>   .../drivers/dri/common => util}/xmlpool/fr.po      |   0
>>   .../dri/common => util}/xmlpool/gen_xmlpool.py     |   0
>>   .../drivers/dri/common => util}/xmlpool/nl.po      |   0
>>   .../drivers/dri/common => util}/xmlpool/sv.po      |   0
>>   .../dri/common => util}/xmlpool/t_options.h        |   9 +
>>   102 files changed, 907 insertions(+), 372 deletions(-)
>>   create mode 100644 src/gallium/auxiliary/pipe-loader/driinfo_gallium.h
>>   create mode 100644 src/gallium/drivers/radeonsi/driinfo_radeonsi.h
>>   rename src/{mesa/drivers/dri/common => util}/drirc (100%)
>>   create mode 100644 src/util/merge_driinfo.py
>>   rename src/{mesa/drivers/dri/common => util}/xmlconfig.c (99%)
>>   rename src/{mesa/drivers/dri/common => util}/xmlconfig.h (100%)
>>   rename src/{mesa/drivers/dri/common => util}/xmlpool.h (100%)
>>   rename src/{mesa/drivers/dri/common => util}/xmlpool/.gitignore (100%)
>>   rename src/{mesa/drivers/dri/common => util}/xmlpool/Makefile.am (100%)
>>   rename src/{mesa/drivers/dri/common => util}/xmlpool/SConscript (100%)
>>   rename src/{mesa/drivers/dri/common => util}/xmlpool/ca.po (100%)
>>   rename src/{mesa/drivers/dri/common => util}/xmlpool/de.po (100%)
>>   rename src/{mesa/drivers/dri/common => util}/xmlpool/es.po (100%)
>>   rename src/{mesa/drivers/dri/common => util}/xmlpool/fr.po (100%)
>>   rename src/{mesa/drivers/dri/common => util}/xmlpool/gen_xmlpool.py 
>> (100%)
>>   rename src/{mesa/drivers/dri/common => util}/xmlpool/nl.po (100%)
>>   rename src/{mesa/drivers/dri/common => util}/xmlpool/sv.po (100%)
>>   rename src/{mesa/drivers/dri/common => util}/xmlpool/t_options.h (98%)
>>
> 
> 



More information about the mesa-dev mailing list