summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gallium/auxiliary/pipe-loader/pipe_loader.c37
-rw-r--r--src/gallium/auxiliary/target-helpers/drm_helper.h8
-rw-r--r--src/gallium/drivers/iris/Android.mk11
-rw-r--r--src/gallium/drivers/iris/driinfo_iris.h4
-rw-r--r--src/gallium/drivers/iris/meson.build14
-rw-r--r--src/gallium/drivers/radeonsi/Android.mk11
-rw-r--r--src/gallium/drivers/radeonsi/driinfo_radeonsi.h4
-rw-r--r--src/gallium/drivers/radeonsi/meson.build14
-rw-r--r--src/gallium/drivers/v3d/meson.build12
-rw-r--r--src/gallium/drivers/virgl/Android.mk7
-rw-r--r--src/gallium/drivers/virgl/meson.build14
-rw-r--r--src/gallium/include/frontend/drm_driver.h5
-rw-r--r--src/util/merge_driinfo.py268
13 files changed, 34 insertions, 375 deletions
diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader.c b/src/gallium/auxiliary/pipe-loader/pipe_loader.c
index ede92e50263..0629d2fd80b 100644
--- a/src/gallium/auxiliary/pipe-loader/pipe_loader.c
+++ b/src/gallium/auxiliary/pipe-loader/pipe_loader.c
@@ -52,9 +52,7 @@ static int (*backends[])(struct pipe_loader_device **, int) = {
};
const char gallium_driinfo_xml[] =
- DRI_CONF_BEGIN
#include "driinfo_gallium.h"
- DRI_CONF_END
;
int
@@ -93,26 +91,39 @@ pipe_loader_load_options(struct pipe_loader_device *dev)
if (dev->option_info.info)
return;
- const char *xml_options = dev->ops->get_driconf_xml(dev);
- if (!xml_options)
- xml_options = gallium_driinfo_xml;
-
- driParseOptionInfo(&dev->option_info, xml_options);
- driParseConfigFiles(&dev->option_cache, &dev->option_info, 0,
- dev->driver_name, NULL, NULL, 0, NULL, 0);
+ const char *driver_xml = dev->ops->get_driconf_xml(dev);
+
+ char *xml_options;
+ int ret = asprintf(&xml_options, "%s%s%s%s",
+ DRI_CONF_BEGIN,
+ gallium_driinfo_xml,
+ driver_xml ? driver_xml : "",
+ DRI_CONF_END);
+ if (ret >= 0) {
+ driParseOptionInfo(&dev->option_info, xml_options);
+ driParseConfigFiles(&dev->option_cache, &dev->option_info, 0,
+ dev->driver_name, NULL, NULL, 0, NULL, 0);
+ free(xml_options);
+ }
}
char *
pipe_loader_get_driinfo_xml(const char *driver_name)
{
#ifdef HAVE_LIBDRM
- char *xml = pipe_loader_drm_get_driinfo_xml(driver_name);
+ char *driver_xml = pipe_loader_drm_get_driinfo_xml(driver_name);
#else
- char *xml = NULL;
+ char *driver_xml = NULL;
#endif
- if (!xml)
- xml = strdup(gallium_driinfo_xml);
+ char *xml;
+ int ret = asprintf(&xml, "%s%s%s%s",
+ DRI_CONF_BEGIN,
+ gallium_driinfo_xml,
+ driver_xml ? driver_xml : "",
+ DRI_CONF_END);
+ if (ret < 0)
+ xml = NULL;
return xml;
}
diff --git a/src/gallium/auxiliary/target-helpers/drm_helper.h b/src/gallium/auxiliary/target-helpers/drm_helper.h
index 15e442e009d..8e1bd970b68 100644
--- a/src/gallium/auxiliary/target-helpers/drm_helper.h
+++ b/src/gallium/auxiliary/target-helpers/drm_helper.h
@@ -93,7 +93,7 @@ pipe_iris_create_screen(int fd, const struct pipe_screen_config *config)
}
const char *iris_driconf_xml =
- #include "iris/iris_driinfo.h"
+ #include "iris/driinfo_iris.h"
;
DRM_DRIVER_DESCRIPTOR(iris, &iris_driconf_xml)
@@ -120,7 +120,7 @@ DRM_DRIVER_DESCRIPTOR_STUB(nouveau)
#if defined(GALLIUM_VC4) || defined(GALLIUM_V3D)
const char *v3d_driconf_xml =
- #include "v3d/v3d_driinfo.h"
+ #include "v3d/driinfo_v3d.h"
;
#endif
@@ -195,7 +195,7 @@ pipe_radeonsi_create_screen(int fd, const struct pipe_screen_config *config)
}
const char *radeonsi_driconf_xml =
- #include "radeonsi/si_driinfo.h"
+ #include "radeonsi/driinfo_radeonsi.h"
;
DRM_DRIVER_DESCRIPTOR(radeonsi, &radeonsi_driconf_xml)
@@ -257,7 +257,7 @@ pipe_virtio_gpu_create_screen(int fd, const struct pipe_screen_config *config)
}
const char *virgl_driconf_xml =
- #include "virgl/virgl_driinfo.h"
+ #include "virgl/virgl_driinfo.h.in"
;
DRM_DRIVER_DESCRIPTOR(virtio_gpu, &virgl_driconf_xml)
diff --git a/src/gallium/drivers/iris/Android.mk b/src/gallium/drivers/iris/Android.mk
index cb80265c35f..e3f86b71677 100644
--- a/src/gallium/drivers/iris/Android.mk
+++ b/src/gallium/drivers/iris/Android.mk
@@ -151,17 +151,6 @@ intermediates := $(call local-generated-sources-dir)
LOCAL_GENERATED_SOURCES := $(addprefix $(intermediates)/iris/,$(GENERATED_SOURCES))
-GEN_DRIINFO_INPUTS := \
- $(MESA_TOP)/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h \
- $(LOCAL_PATH)/driinfo_iris.h
-
-MERGE_DRIINFO := $(MESA_TOP)/src/util/merge_driinfo.py
-
-$(intermediates)/iris/iris_driinfo.h: $(MERGE_DRIINFO) $(GEN_DRIINFO_INPUTS)
- @mkdir -p $(dir $@)
- @echo "Gen Header: $(PRIVATE_MODULE) <= $(notdir $(@))"
- $(hide) $(MESA_PYTHON2) $(MERGE_DRIINFO) $(GEN_DRIINFO_INPUTS) > $@ || ($(RM) $@; false)
-
LOCAL_EXPORT_C_INCLUDE_DIRS := $(intermediates)
LOCAL_SRC_FILES := \
diff --git a/src/gallium/drivers/iris/driinfo_iris.h b/src/gallium/drivers/iris/driinfo_iris.h
index b1153bc8313..012086bd263 100644
--- a/src/gallium/drivers/iris/driinfo_iris.h
+++ b/src/gallium/drivers/iris/driinfo_iris.h
@@ -7,11 +7,7 @@ DRI_CONF_SECTION_DEBUG
DRI_CONF_SECTION_END
DRI_CONF_SECTION_PERFORMANCE
-
-//= BEGIN VERBATIM
DRI_CONF_OPT_BEGIN_V(bo_reuse, enum, 1, "0:1")
DRI_CONF_DESC("Buffer object reuse")
DRI_CONF_OPT_END
-//= END VERBATIM
-
DRI_CONF_SECTION_END
diff --git a/src/gallium/drivers/iris/meson.build b/src/gallium/drivers/iris/meson.build
index a6712d2fe64..f3e2480c94f 100644
--- a/src/gallium/drivers/iris/meson.build
+++ b/src/gallium/drivers/iris/meson.build
@@ -55,17 +55,6 @@ files_libiris = files(
'iris_disk_cache.c',
)
-iris_driinfo_h = custom_target(
- 'iris_driinfo.h',
- input : files(
- '../../../util/merge_driinfo.py',
- '../../auxiliary/pipe-loader/driinfo_gallium.h', 'driinfo_iris.h'
- ),
- output : 'iris_driinfo.h',
- command : [prog_python, '@INPUT@'],
- capture : true,
-)
-
iris_gen_libs = []
foreach v : ['80', '90', '100', '110', '120']
iris_gen_libs += static_library(
@@ -83,7 +72,7 @@ endforeach
libiris = static_library(
'iris',
- [files_libiris, gen_xml_pack, iris_driinfo_h],
+ [files_libiris, gen_xml_pack],
include_directories : [
inc_src, inc_include, inc_gallium, inc_gallium_aux, inc_intel,
inc_gallium_drivers,
@@ -102,6 +91,5 @@ libiris = static_library(
driver_iris = declare_dependency(
compile_args : '-DGALLIUM_IRIS',
- sources : iris_driinfo_h,
link_with : [libiris, libiriswinsys],
)
diff --git a/src/gallium/drivers/radeonsi/Android.mk b/src/gallium/drivers/radeonsi/Android.mk
index 6ced1b4caa9..abe572301a2 100644
--- a/src/gallium/drivers/radeonsi/Android.mk
+++ b/src/gallium/drivers/radeonsi/Android.mk
@@ -55,17 +55,6 @@ intermediates := $(call local-generated-sources-dir)
LOCAL_GENERATED_SOURCES := $(MESA_GEN_NIR_H)
LOCAL_GENERATED_SOURCES += $(addprefix $(intermediates)/radeonsi/,$(GENERATED_SOURCES))
-GEN_DRIINFO_INPUTS := \
- $(MESA_TOP)/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h \
- $(LOCAL_PATH)/driinfo_radeonsi.h
-
-MERGE_DRIINFO := $(MESA_TOP)/src/util/merge_driinfo.py
-
-$(intermediates)/radeonsi/si_driinfo.h: $(MERGE_DRIINFO) $(GEN_DRIINFO_INPUTS)
- @mkdir -p $(dir $@)
- @echo "Gen Header: $(PRIVATE_MODULE) <= $(notdir $(@))"
- $(hide) $(MESA_PYTHON2) $(MERGE_DRIINFO) $(GEN_DRIINFO_INPUTS) > $@ || ($(RM) $@; false)
-
LOCAL_C_INCLUDES += $(intermediates)/radeonsi
LOCAL_EXPORT_C_INCLUDE_DIRS := $(intermediates)
diff --git a/src/gallium/drivers/radeonsi/driinfo_radeonsi.h b/src/gallium/drivers/radeonsi/driinfo_radeonsi.h
index 25d1d35f6a9..4fab058b735 100644
--- a/src/gallium/drivers/radeonsi/driinfo_radeonsi.h
+++ b/src/gallium/drivers/radeonsi/driinfo_radeonsi.h
@@ -7,14 +7,10 @@ DRI_CONF_RADEONSI_ZERO_ALL_VRAM_ALLOCS("false")
DRI_CONF_SECTION_END
DRI_CONF_SECTION_DEBUG
-
-//= BEGIN VERBATIM
#define OPT_BOOL(name, dflt, description) \
DRI_CONF_OPT_BEGIN_B(radeonsi_##name, #dflt) \
DRI_CONF_DESC(description) \
DRI_CONF_OPT_END
#include "radeonsi/si_debug_options.h"
-//= END VERBATIM
-
DRI_CONF_SECTION_END
diff --git a/src/gallium/drivers/radeonsi/meson.build b/src/gallium/drivers/radeonsi/meson.build
index b62647df3fa..51836274f0f 100644
--- a/src/gallium/drivers/radeonsi/meson.build
+++ b/src/gallium/drivers/radeonsi/meson.build
@@ -94,20 +94,9 @@ files_libradeonsi = files(
'../radeon/radeon_winsys.h',
)
-si_driinfo_h = custom_target(
- 'si_driinfo.h',
- input : files(
- '../../../util/merge_driinfo.py',
- '../../auxiliary/pipe-loader/driinfo_gallium.h', 'driinfo_radeonsi.h'
- ),
- output : 'si_driinfo.h',
- command : [prog_python, '@INPUT@'],
- capture : true,
-)
-
libradeonsi = static_library(
'radeonsi',
- [files_libradeonsi, si_driinfo_h, sid_tables_h],
+ [files_libradeonsi, sid_tables_h],
include_directories : [
inc_src, inc_include, inc_gallium, inc_gallium_aux, inc_amd_common, inc_amd_common_llvm,
inc_gallium_drivers,
@@ -119,7 +108,6 @@ libradeonsi = static_library(
driver_radeonsi = declare_dependency(
compile_args : '-DGALLIUM_RADEONSI',
- sources : si_driinfo_h,
link_with : [
libradeonsi, libradeonwinsys, libamdgpuwinsys, libamd_common, libamd_common_llvm, libgalliumvl
],
diff --git a/src/gallium/drivers/v3d/meson.build b/src/gallium/drivers/v3d/meson.build
index 093eb12e01b..033ff402321 100644
--- a/src/gallium/drivers/v3d/meson.build
+++ b/src/gallium/drivers/v3d/meson.build
@@ -47,16 +47,6 @@ files_per_version = files(
'v3dx_state.c',
)
-v3d_driinfo_h = custom_target(
- 'v3d_driinfo.h',
- input : files(
- '../../../util/merge_driinfo.py',
- '../../auxiliary/pipe-loader/driinfo_gallium.h', 'driinfo_v3d.h'
- ),
- output : 'v3d_driinfo.h',
- command : [prog_python, '@INPUT@'],
- capture : true,
-)
v3d_args = ['-DV3D_BUILD_NEON']
dep_v3dv3 = dependency('v3dv3', required: false)
@@ -104,7 +94,6 @@ libv3d = static_library(
[
files_libv3d,
v3d_xml_pack,
- v3d_driinfo_h
],
include_directories : [
inc_src, inc_include, inc_gallium, inc_gallium_aux, inc_broadcom,
@@ -120,6 +109,5 @@ libv3d = static_library(
driver_v3d = declare_dependency(
compile_args : '-DGALLIUM_V3D',
link_with : [libv3d, libv3dwinsys, libbroadcom_cle, libbroadcom_v3d],
- sources : v3d_driinfo_h,
dependencies : idep_nir,
)
diff --git a/src/gallium/drivers/virgl/Android.mk b/src/gallium/drivers/virgl/Android.mk
index 31b8a5b0292..1335dc58953 100644
--- a/src/gallium/drivers/virgl/Android.mk
+++ b/src/gallium/drivers/virgl/Android.mk
@@ -41,13 +41,6 @@ GEN_DRIINFO_INPUTS := \
$(MESA_TOP)/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h \
$(LOCAL_PATH)/virgl_driinfo.h.in
-MERGE_DRIINFO := $(MESA_TOP)/src/util/merge_driinfo.py
-
-$(intermediates)/virgl/virgl_driinfo.h: $(MERGE_DRIINFO) $(GEN_DRIINFO_INPUTS)
- @mkdir -p $(dir $@)
- @echo "Gen Header: $(PRIVATE_MODULE) <= $(notdir $(@))"
- $(hide) $(MESA_PYTHON2) $(MERGE_DRIINFO) $(GEN_DRIINFO_INPUTS) > $@ || ($(RM) $@; false)
-
LOCAL_EXPORT_C_INCLUDE_DIRS := $(intermediates)
include $(GALLIUM_COMMON_MK)
diff --git a/src/gallium/drivers/virgl/meson.build b/src/gallium/drivers/virgl/meson.build
index 00cde5f3fe1..b0ff235d4ce 100644
--- a/src/gallium/drivers/virgl/meson.build
+++ b/src/gallium/drivers/virgl/meson.build
@@ -32,27 +32,15 @@ files_libvirgl = files(
'virgl_tgsi.c',
)
-virgl_driinfo_h = custom_target(
- 'virgl_driinfo.h',
- input : files(
- '../../../util/merge_driinfo.py',
- '../../auxiliary/pipe-loader/driinfo_gallium.h', 'virgl_driinfo.h.in'
- ),
- output : 'virgl_driinfo.h',
- command : [prog_python, '@INPUT@'],
- capture : true,
-)
-
libvirgl = static_library(
'virgl',
- [ files_libvirgl, virgl_driinfo_h ],
+ [ files_libvirgl ],
gnu_symbol_visibility : 'hidden',
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_virtio],
dependencies : dep_libdrm
)
driver_virgl = declare_dependency(
- sources : virgl_driinfo_h,
compile_args : '-DGALLIUM_VIRGL',
link_with : [libvirgl, libvirgldrm, libvirglvtest],
)
diff --git a/src/gallium/include/frontend/drm_driver.h b/src/gallium/include/frontend/drm_driver.h
index a51d02f0e8a..10a9cf007e7 100644
--- a/src/gallium/include/frontend/drm_driver.h
+++ b/src/gallium/include/frontend/drm_driver.h
@@ -19,8 +19,9 @@ struct drm_driver_descriptor
const char *driver_name;
/**
- * Pointer to the XML string describing driver-specific driconf options.
- * Use DRI_CONF_* macros to create the string.
+ * Pointer to the XML string fragment describing driver-specific driconf
+ * options. Use DRI_CONF_* macros to create the string, do not wrap in
+ * DRI_CONF_BEGIN/END.
*/
const char **driconf_xml;
diff --git a/src/util/merge_driinfo.py b/src/util/merge_driinfo.py
deleted file mode 100644
index ff993923c58..00000000000
--- a/src/util/merge_driinfo.py
+++ /dev/null
@@ -1,268 +0,0 @@
-#
-# Copyright 2017 Advanced Micro Devices, Inc.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-# THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
-# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-# USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-"""
-usage: merge_driinfo.py <list of input files>
-
-Generates a source file which contains the DRI_CONF_xxx macros for generating
-the driinfo XML that describes the available DriConf options for a driver and
-its supported gallium frontends, based on the merged information from the input
-files.
-"""
-
-from __future__ import print_function
-
-import mako.template
-import re
-import sys
-
-
-# Some regexps used during input parsing
-RE_section_begin = re.compile(r'DRI_CONF_SECTION_(.*)')
-RE_option = re.compile(r'DRI_CONF_(.*)\((.*)\)')
-
-
-class Option(object):
- """
- Represent a config option as:
- * name: the xxx part of the DRI_CONF_xxx macro
- * defaults: the defaults parameters that are passed into the macro
- """
- def __init__(self, name, defaults):
- self.name = name
- self.defaults = defaults
-
-
-class Verbatim(object):
- """
- Represent a chunk of code that is copied into the result file verbatim.
- """
- def __init__(self):
- self.string = ''
-
-
-class Section(object):
- """
- Represent a config section description as:
- * name: the xxx part of the DRI_CONF_SECTION_xxx macro
- * options: list of options
- """
- def __init__(self, name):
- self.name = name
- self.options = []
-
-
-def parse_inputs(input_filenames):
- success = True
- sections_lists = []
-
- for input_filename in input_filenames:
- with open(input_filename, 'r') as infile:
- sections = []
- sections_lists.append(sections)
-
- section = None
-
- linenum = 0
- verbatim = None
- for line in infile:
- linenum += 1
-
- if line.startswith('//= BEGIN VERBATIM'):
- if verbatim is not None:
- print('{}:{}: nested verbatim'
- .format(input_filename, linenum))
- success = False
- continue
- verbatim = Verbatim()
-
- if verbatim is not None:
- verbatim.string += line
-
- if line.startswith('//= END VERBATIM'):
- if section is None:
- sections.append(verbatim)
- else:
- section.options.append(verbatim)
- verbatim = None
- continue
-
- line = line.strip()
- if not line:
- continue
-
- if line.startswith('//'):
- continue
-
- if line == 'DRI_CONF_SECTION_END':
- if section is None:
- print('{}:{}: no open section'
- .format(input_filename, linenum))
- success = False
- continue
- section = None
- continue
-
- m = RE_section_begin.match(line)
- if m:
- if section is not None:
- print('{}:{}: nested sections are not supported'
- .format(input_filename, linenum))
- success = False
- continue
- if sections is None:
- print('{}:{}: missing DRIINFO line'
- .format(input_filename, linenum))
- success = False
- break # parsing the rest really makes no sense
- section = Section(m.group(1))
- sections.append(section)
- continue
-
- m = RE_option.match(line)
- if m:
- if section is None:
- print('{}:{}: no open section'
- .format(input_filename, linenum))
- success = False
- break
- section.options.append(Option(m.group(1), m.group(2)))
- continue
-
- print('{}:{}: do not understand this line'
- .format(input_filename, linenum))
- success = False
-
- if section is not None:
- print('{}:end-of-file: missing end of section'
- .format(input_filename))
- success = False
-
- if success:
- return sections_lists
- return None
-
-
-def merge_sections(section_list):
- """
- section_list: list of Section objects to be merged, all of the same name
- Return a merged Section object (everything is deeply copied)
- """
- merged_section = Section(section_list[0].name)
-
- for section in section_list:
- assert section.name == merged_section.name
-
- for orig_option in section.options:
- if isinstance(orig_option, Option):
- for merged_option in merged_section.options:
- if not isinstance(merged_option, Option):
- continue
- if orig_option.name == merged_option.name:
- merged_option.defaults = orig_option.defaults
- break
- else:
- merged_section.options.append(Option(orig_option.name, orig_option.defaults))
- else:
- merged_section.options.append(orig_option)
-
- return merged_section
-
-
-def merge_sections_lists(sections_lists):
- """
- sections_lists: list of lists of Section objects to be merged
- Return a merged list of merged Section objects; everything is deeply copied.
- Default values for options in later lists override earlier default values.
- """
- merged_sections = []
-
- for idx,sections in enumerate(sections_lists):
- for base_section in sections:
- if not isinstance(base_section, Section):
- merged_sections.append(base_section)
- continue
-
- original_sections = [base_section]
- for next_sections in sections_lists[idx+1:]:
- for j,section in enumerate(next_sections):
- if section.name == base_section.name:
- original_sections.append(section)
- del next_sections[j]
- break
-
- merged_section = merge_sections(original_sections)
-
- merged_sections.append(merged_section)
-
- return merged_sections
-
-
-def main(input_filenames):
- sections_lists = parse_inputs(input_filenames)
- if sections_lists is None:
- return False
-
- merged_sections_list = merge_sections_lists(sections_lists)
-
- driinfo_h_template = mako.template.Template("""\
-// DO NOT EDIT - this file is automatically generated by merge_driinfo.py
-
-/*
-Use as:
-
-#include "driconf.h"
-
-static const char driinfo_xml[] =
-#include "this_file"
-;
-*/
-
-DRI_CONF_BEGIN
-% for section in sections:
-% if isinstance(section, Section):
- DRI_CONF_SECTION_${section.name}
-% for option in section.options:
-% if isinstance(option, Option):
- DRI_CONF_${option.name}(${option.defaults})
-% else:
-${option.string}
-% endif
-% endfor
- DRI_CONF_SECTION_END
-% else:
-${section.string}
-% endif
-% endfor
-DRI_CONF_END""")
-
- print(driinfo_h_template.render(sections=merged_sections_list, Section=Section, Option=Option))
- return True
-
-
-if __name__ == '__main__':
- if len(sys.argv) <= 1:
- print('Missing arguments')
- sys.exit(1)
-
- if not main(sys.argv[1:]):
- sys.exit(1)