For all patches except 5: Reviewed-by: Marek Olšák <[email protected]>
For patch 5: Acked-by: Marek Olšák <[email protected]> Marek On Fri, Jun 30, 2017 at 2:45 PM, Nicolai Hähnle <[email protected]> wrote: > From: Nicolai Hähnle <[email protected]> > > 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%) > > -- > 2.9.3 > _______________________________________________ > mesa-dev mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
