Mesa (main): genxml: reduce amount of generated code

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jan 19 11:14:41 UTC 2022


Module: Mesa
Branch: main
Commit: 51f6288a2d2fa78e723b99a90133f5ebd782bc4a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=51f6288a2d2fa78e723b99a90133f5ebd782bc4a

Author: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Date:   Sat Jan  8 13:52:27 2022 +0200

genxml: reduce amount of generated code

$ wc -l build/src/intel/genxml/genX_bits.h

250581 build/src/intel/genxml/genX_bits.h (before)
5748 build/src/intel/genxml/genX_bits.h   (after)

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Reviewed-by: Caio Oliveira <caio.oliveira at intel.com>
Acked-by: Kenneth Graunke <kenneth at whitecape.org>
Acked-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14469>

---

 src/intel/genxml/gen_bits_header.py | 24 +++++++++++++++++++++---
 src/intel/genxml/meson.build        | 33 ++++++++++++++++++++++++++++++++-
 2 files changed, 53 insertions(+), 4 deletions(-)

diff --git a/src/intel/genxml/gen_bits_header.py b/src/intel/genxml/gen_bits_header.py
index f70b97ad9c3..f6ddc569ce1 100644
--- a/src/intel/genxml/gen_bits_header.py
+++ b/src/intel/genxml/gen_bits_header.py
@@ -104,20 +104,23 @@ ${item.token_name}_${prop}(const struct intel_device_info *devinfo)
 extern "C" {
 #endif
 % for _, container in sorted(containers.items(), key=itemgetter(0)):
+%  if container.allowed:
 
 /* ${container.name} */
 
 ${emit_per_gen_prop_func(container, 'length', True)}
 
-% for _, field in sorted(container.fields.items(), key=itemgetter(0)):
+%   for _, field in sorted(container.fields.items(), key=itemgetter(0)):
+%    if field.allowed:
 
 /* ${container.name}::${field.name} */
 
 ${emit_per_gen_prop_func(field, 'bits', False)}
 
 ${emit_per_gen_prop_func(field, 'start', False)}
-
-% endfor
+%    endif
+%   endfor
+%  endif
 % endfor
 
 #ifdef __cplusplus
@@ -159,6 +162,7 @@ class Container(object):
         self.token_name = safe_name(name)
         self.length_by_gen = {}
         self.fields = {}
+        self.allowed = False
 
     def add_gen(self, gen, xml_attrs):
         assert isinstance(gen, Gen)
@@ -202,6 +206,7 @@ class Field(object):
         self.token_name = safe_name('_'.join([container.name, self.name]))
         self.bits_by_gen = {}
         self.start_by_gen = {}
+        self.allowed = False
 
     def add_gen(self, gen, xml_attrs):
         assert isinstance(gen, Gen)
@@ -299,6 +304,9 @@ def parse_args():
                    help='If unset, then CPP_GUARD is derived from OUTPUT.')
     p.add_argument('--engines', nargs='?', type=str, default='render',
                    help="Comma-separated list of engines whose instructions should be parsed (default: %(default)s)")
+    p.add_argument('--include-symbols', type=str, action='store',
+                   help='List of instruction/structures to generate',
+                   required=True)
     p.add_argument('xml_sources', metavar='XML_SOURCE', nargs='+')
 
     pargs = p.parse_args()
@@ -330,6 +338,16 @@ def main():
         p.engines = set(engines)
         p.parse(source)
 
+    included_symbols_list = pargs.include_symbols.split(',')
+    for _name_field in included_symbols_list:
+        name_field = _name_field.split('::')
+        container = containers[name_field[0]]
+        container.allowed = True
+        if len(name_field) > 1:
+            field = container.get_field(name_field[1])
+            assert field
+            field.allowed = True
+
     with open(pargs.output, 'w') as f:
         f.write(TEMPLATE.render(containers=containers, guard=pargs.cpp_guard))
 
diff --git a/src/intel/genxml/meson.build b/src/intel/genxml/meson.build
index d351f1900aa..4202c138a36 100644
--- a/src/intel/genxml/meson.build
+++ b/src/intel/genxml/meson.build
@@ -40,11 +40,42 @@ genX_xml_h = custom_target(
   capture : true,
 )
 
+genX_bits_included_symbols = [
+  # instructions
+  'MI_BATCH_BUFFER_START::Batch Buffer Start Address',
+  'MI_REPORT_PERF_COUNT::Memory Address',
+  'MI_STORE_DATA_IMM::Address',
+  'MI_STORE_DATA_IMM::Immediate Data',
+  'MI_STORE_REGISTER_MEM::Memory Address',
+  '3DSTATE_DEPTH_BUFFER::Surface Base Address',
+  '3DSTATE_DEPTH_BUFFER::Surface Pitch',
+  '3DSTATE_STENCIL_BUFFER::Surface Base Address',
+  '3DSTATE_STENCIL_BUFFER::Surface Pitch',
+  '3DSTATE_HIER_DEPTH_BUFFER::Surface Base Address',
+  '3DSTATE_HIER_DEPTH_BUFFER::Surface Pitch',
+  '3DSTATE_CLEAR_PARAMS',
+  '3DSTATE_SO_BUFFER::Surface Base Address',
+  '3DSTATE_SO_BUFFER::Stream Offset',
+  # structures
+  'RENDER_SURFACE_STATE::Surface Base Address',
+  'RENDER_SURFACE_STATE::Surface Pitch',
+  'RENDER_SURFACE_STATE::Auxiliary Surface Base Address',
+  'RENDER_SURFACE_STATE::Auxiliary Surface Pitch',
+  'RENDER_SURFACE_STATE::Clear Value Address',
+  'RENDER_SURFACE_STATE::Red Clear Color',
+  'RENDER_SURFACE_STATE::Green Clear Color',
+  'RENDER_SURFACE_STATE::Blue Clear Color',
+  'RENDER_SURFACE_STATE::Alpha Clear Color',
+  'CLEAR_COLOR',
+  'VERTEX_BUFFER_STATE::Buffer Starting Address',
+]
+
 genX_bits_h = custom_target(
   'genX_bits.h',
   input : ['gen_bits_header.py', gen_xml_files],
   output : 'genX_bits.h',
-  command : [prog_python, '@INPUT@', '-o', '@OUTPUT@'],
+  command : [prog_python, '@INPUT@', '-o', '@OUTPUT@',
+             '--include-symbols', ','.join(genX_bits_included_symbols)],
 )
 
 gen_xml_pack = []



More information about the mesa-commit mailing list