| #!/usr/bin/env python3 |
| |
| # Copyright 2021 Collabora, Ltd. |
| # |
| # 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 the rights to use, copy, modify, merge, publish, |
| # distribute, sublicense, 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 |
| # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
| # 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. |
| |
| # Helper script that reads drm_fourcc.h and writes a static table with the |
| # simpler format token modifiers |
| |
| import sys |
| import re |
| |
| filename = sys.argv[1] |
| towrite = sys.argv[2] |
| |
| fm_re = { |
| 'intel': r'^#define I915_FORMAT_MOD_(\w+)', |
| 'others': r'^#define DRM_FORMAT_MOD_((?:ARM|SAMSUNG|QCOM|VIVANTE|NVIDIA|BROADCOM|ALLWINNER)\w+)\s', |
| 'vendors': r'^#define DRM_FORMAT_MOD_VENDOR_(\w+)' |
| } |
| |
| def print_fm_intel(f, f_mod): |
| f.write(' {{ DRM_MODIFIER_INTEL({}, {}) }},\n'.format(f_mod, f_mod)) |
| |
| # generic write func |
| def print_fm(f, vendor, mod, f_name): |
| f.write(' {{ DRM_MODIFIER({}, {}, {}) }},\n'.format(vendor, mod, f_name)) |
| |
| with open(filename, "r") as f: |
| data = f.read() |
| for k, v in fm_re.items(): |
| fm_re[k] = re.findall(v, data, flags=re.M) |
| |
| with open(towrite, "w") as f: |
| f.write('''\ |
| /* AUTOMATICALLY GENERATED by gen_table_fourcc.py. You should modify |
| that script instead of adding here entries manually! */ |
| static const struct drmFormatModifierInfo drm_format_modifier_table[] = { |
| ''') |
| f.write(' { DRM_MODIFIER_INVALID(NONE, INVALID) },\n') |
| f.write(' { DRM_MODIFIER_LINEAR(NONE, LINEAR) },\n') |
| |
| for entry in fm_re['intel']: |
| print_fm_intel(f, entry) |
| |
| for entry in fm_re['others']: |
| (vendor, mod) = entry.split('_', 1) |
| if vendor == 'ARM' and (mod == 'TYPE_AFBC' or mod == 'TYPE_MISC' or mod == 'TYPE_AFRC'): |
| continue |
| print_fm(f, vendor, mod, mod) |
| |
| f.write('''\ |
| }; |
| ''') |
| |
| f.write('''\ |
| static const struct drmFormatModifierVendorInfo drm_format_modifier_vendor_table[] = { |
| ''') |
| |
| for entry in fm_re['vendors']: |
| f.write(" {{ DRM_FORMAT_MOD_VENDOR_{}, \"{}\" }},\n".format(entry, entry)) |
| |
| f.write('''\ |
| }; |
| ''') |