1*7688df22SAndroid Build Coastguard Worker#!/usr/bin/env python3 2*7688df22SAndroid Build Coastguard Worker 3*7688df22SAndroid Build Coastguard Worker# Copyright 2021 Collabora, Ltd. 4*7688df22SAndroid Build Coastguard Worker# 5*7688df22SAndroid Build Coastguard Worker# Permission is hereby granted, free of charge, to any person obtaining 6*7688df22SAndroid Build Coastguard Worker# a copy of this software and associated documentation files (the 7*7688df22SAndroid Build Coastguard Worker# "Software"), to deal in the Software without restriction, including 8*7688df22SAndroid Build Coastguard Worker# without limitation the rights to use, copy, modify, merge, publish, 9*7688df22SAndroid Build Coastguard Worker# distribute, sublicense, and/or sell copies of the Software, and to 10*7688df22SAndroid Build Coastguard Worker# permit persons to whom the Software is furnished to do so, subject to 11*7688df22SAndroid Build Coastguard Worker# the following conditions: 12*7688df22SAndroid Build Coastguard Worker# 13*7688df22SAndroid Build Coastguard Worker# The above copyright notice and this permission notice (including the 14*7688df22SAndroid Build Coastguard Worker# next paragraph) shall be included in all copies or substantial 15*7688df22SAndroid Build Coastguard Worker# portions of the Software. 16*7688df22SAndroid Build Coastguard Worker# 17*7688df22SAndroid Build Coastguard Worker# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18*7688df22SAndroid Build Coastguard Worker# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19*7688df22SAndroid Build Coastguard Worker# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20*7688df22SAndroid Build Coastguard Worker# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 21*7688df22SAndroid Build Coastguard Worker# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 22*7688df22SAndroid Build Coastguard Worker# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 23*7688df22SAndroid Build Coastguard Worker# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24*7688df22SAndroid Build Coastguard Worker# SOFTWARE. 25*7688df22SAndroid Build Coastguard Worker 26*7688df22SAndroid Build Coastguard Worker# Helper script that reads drm_fourcc.h and writes a static table with the 27*7688df22SAndroid Build Coastguard Worker# simpler format token modifiers 28*7688df22SAndroid Build Coastguard Worker 29*7688df22SAndroid Build Coastguard Workerimport sys 30*7688df22SAndroid Build Coastguard Workerimport re 31*7688df22SAndroid Build Coastguard Worker 32*7688df22SAndroid Build Coastguard Workerfilename = sys.argv[1] 33*7688df22SAndroid Build Coastguard Workertowrite = sys.argv[2] 34*7688df22SAndroid Build Coastguard Worker 35*7688df22SAndroid Build Coastguard Workerfm_re = { 36*7688df22SAndroid Build Coastguard Worker 'intel': r'^#define I915_FORMAT_MOD_(\w+)', 37*7688df22SAndroid Build Coastguard Worker 'others': r'^#define DRM_FORMAT_MOD_((?:ARM|SAMSUNG|QCOM|VIVANTE|NVIDIA|BROADCOM|ALLWINNER)\w+)\s', 38*7688df22SAndroid Build Coastguard Worker 'vendors': r'^#define DRM_FORMAT_MOD_VENDOR_(\w+)' 39*7688df22SAndroid Build Coastguard Worker} 40*7688df22SAndroid Build Coastguard Worker 41*7688df22SAndroid Build Coastguard Workerdef print_fm_intel(f, f_mod): 42*7688df22SAndroid Build Coastguard Worker f.write(' {{ DRM_MODIFIER_INTEL({}, {}) }},\n'.format(f_mod, f_mod)) 43*7688df22SAndroid Build Coastguard Worker 44*7688df22SAndroid Build Coastguard Worker# generic write func 45*7688df22SAndroid Build Coastguard Workerdef print_fm(f, vendor, mod, f_name): 46*7688df22SAndroid Build Coastguard Worker f.write(' {{ DRM_MODIFIER({}, {}, {}) }},\n'.format(vendor, mod, f_name)) 47*7688df22SAndroid Build Coastguard Worker 48*7688df22SAndroid Build Coastguard Workerwith open(filename, "r") as f: 49*7688df22SAndroid Build Coastguard Worker data = f.read() 50*7688df22SAndroid Build Coastguard Worker for k, v in fm_re.items(): 51*7688df22SAndroid Build Coastguard Worker fm_re[k] = re.findall(v, data, flags=re.M) 52*7688df22SAndroid Build Coastguard Worker 53*7688df22SAndroid Build Coastguard Workerwith open(towrite, "w") as f: 54*7688df22SAndroid Build Coastguard Worker f.write('''\ 55*7688df22SAndroid Build Coastguard Worker/* AUTOMATICALLY GENERATED by gen_table_fourcc.py. You should modify 56*7688df22SAndroid Build Coastguard Worker that script instead of adding here entries manually! */ 57*7688df22SAndroid Build Coastguard Workerstatic const struct drmFormatModifierInfo drm_format_modifier_table[] = { 58*7688df22SAndroid Build Coastguard Worker''') 59*7688df22SAndroid Build Coastguard Worker f.write(' { DRM_MODIFIER_INVALID(NONE, INVALID) },\n') 60*7688df22SAndroid Build Coastguard Worker f.write(' { DRM_MODIFIER_LINEAR(NONE, LINEAR) },\n') 61*7688df22SAndroid Build Coastguard Worker 62*7688df22SAndroid Build Coastguard Worker for entry in fm_re['intel']: 63*7688df22SAndroid Build Coastguard Worker print_fm_intel(f, entry) 64*7688df22SAndroid Build Coastguard Worker 65*7688df22SAndroid Build Coastguard Worker for entry in fm_re['others']: 66*7688df22SAndroid Build Coastguard Worker (vendor, mod) = entry.split('_', 1) 67*7688df22SAndroid Build Coastguard Worker if vendor == 'ARM' and (mod == 'TYPE_AFBC' or mod == 'TYPE_MISC' or mod == 'TYPE_AFRC'): 68*7688df22SAndroid Build Coastguard Worker continue 69*7688df22SAndroid Build Coastguard Worker print_fm(f, vendor, mod, mod) 70*7688df22SAndroid Build Coastguard Worker 71*7688df22SAndroid Build Coastguard Worker f.write('''\ 72*7688df22SAndroid Build Coastguard Worker}; 73*7688df22SAndroid Build Coastguard Worker''') 74*7688df22SAndroid Build Coastguard Worker 75*7688df22SAndroid Build Coastguard Worker f.write('''\ 76*7688df22SAndroid Build Coastguard Workerstatic const struct drmFormatModifierVendorInfo drm_format_modifier_vendor_table[] = { 77*7688df22SAndroid Build Coastguard Worker''') 78*7688df22SAndroid Build Coastguard Worker 79*7688df22SAndroid Build Coastguard Worker for entry in fm_re['vendors']: 80*7688df22SAndroid Build Coastguard Worker f.write(" {{ DRM_FORMAT_MOD_VENDOR_{}, \"{}\" }},\n".format(entry, entry)) 81*7688df22SAndroid Build Coastguard Worker 82*7688df22SAndroid Build Coastguard Worker f.write('''\ 83*7688df22SAndroid Build Coastguard Worker}; 84*7688df22SAndroid Build Coastguard Worker''') 85