xref: /aosp_15_r20/external/deqp/scripts/khr_util/format.py (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker# -*- coding: utf-8 -*-
2*35238bceSAndroid Build Coastguard Worker
3*35238bceSAndroid Build Coastguard Worker#-------------------------------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker# drawElements Quality Program utilities
5*35238bceSAndroid Build Coastguard Worker# --------------------------------------
6*35238bceSAndroid Build Coastguard Worker#
7*35238bceSAndroid Build Coastguard Worker# Copyright 2015 The Android Open Source Project
8*35238bceSAndroid Build Coastguard Worker#
9*35238bceSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
10*35238bceSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
11*35238bceSAndroid Build Coastguard Worker# You may obtain a copy of the License at
12*35238bceSAndroid Build Coastguard Worker#
13*35238bceSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
14*35238bceSAndroid Build Coastguard Worker#
15*35238bceSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
16*35238bceSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
17*35238bceSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18*35238bceSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
19*35238bceSAndroid Build Coastguard Worker# limitations under the License.
20*35238bceSAndroid Build Coastguard Worker#
21*35238bceSAndroid Build Coastguard Worker#-------------------------------------------------------------------------
22*35238bceSAndroid Build Coastguard Worker
23*35238bceSAndroid Build Coastguard Workerimport os
24*35238bceSAndroid Build Coastguard Workerimport sys
25*35238bceSAndroid Build Coastguard Workerfrom itertools import chain
26*35238bceSAndroid Build Coastguard Worker
27*35238bceSAndroid Build Coastguard WorkerINL_HEADER_TMPL = """\
28*35238bceSAndroid Build Coastguard Worker/* WARNING: This is auto-generated file. Do not modify, since changes will
29*35238bceSAndroid Build Coastguard Worker * be lost! Modify the generating script instead.
30*35238bceSAndroid Build Coastguard Worker *
31*35238bceSAndroid Build Coastguard Worker * Generated from {registryName} revision {revision}.
32*35238bceSAndroid Build Coastguard Worker */\
33*35238bceSAndroid Build Coastguard Worker"""
34*35238bceSAndroid Build Coastguard Worker
35*35238bceSAndroid Build Coastguard Workerdef genInlHeader (registryName, revision):
36*35238bceSAndroid Build Coastguard Worker    return INL_HEADER_TMPL.format(
37*35238bceSAndroid Build Coastguard Worker        registryName = registryName,
38*35238bceSAndroid Build Coastguard Worker        revision = str(revision))
39*35238bceSAndroid Build Coastguard Worker
40*35238bceSAndroid Build Coastguard Workerdef genInlHeaderForSource (registrySource):
41*35238bceSAndroid Build Coastguard Worker    return genInlHeaderForSource(registrySource.getFilename(), registrySource.getRevision())
42*35238bceSAndroid Build Coastguard Worker
43*35238bceSAndroid Build Coastguard Workerdef nextMod (val, mod):
44*35238bceSAndroid Build Coastguard Worker    if val % mod == 0:
45*35238bceSAndroid Build Coastguard Worker        return val + mod
46*35238bceSAndroid Build Coastguard Worker    else:
47*35238bceSAndroid Build Coastguard Worker        return int(val/mod)*mod + mod
48*35238bceSAndroid Build Coastguard Worker
49*35238bceSAndroid Build Coastguard Workerdef indentLines (lines):
50*35238bceSAndroid Build Coastguard Worker    tabSize = 4
51*35238bceSAndroid Build Coastguard Worker
52*35238bceSAndroid Build Coastguard Worker    # Split into columns
53*35238bceSAndroid Build Coastguard Worker    lineColumns = [line.split("\t") for line in lines if line is not None]
54*35238bceSAndroid Build Coastguard Worker    if len(lineColumns) == 0:
55*35238bceSAndroid Build Coastguard Worker        return
56*35238bceSAndroid Build Coastguard Worker
57*35238bceSAndroid Build Coastguard Worker    numColumns = max(len(line) for line in lineColumns)
58*35238bceSAndroid Build Coastguard Worker
59*35238bceSAndroid Build Coastguard Worker    # Figure out max length per column
60*35238bceSAndroid Build Coastguard Worker    columnLengths = [nextMod(max(len(line[ndx]) for line in lineColumns if len(line) > ndx), tabSize) for ndx in range(numColumns)]
61*35238bceSAndroid Build Coastguard Worker
62*35238bceSAndroid Build Coastguard Worker    for line in lineColumns:
63*35238bceSAndroid Build Coastguard Worker        indented = []
64*35238bceSAndroid Build Coastguard Worker        for columnNdx, col in enumerate(line[:-1]):
65*35238bceSAndroid Build Coastguard Worker            colLen = len(col)
66*35238bceSAndroid Build Coastguard Worker            while colLen < columnLengths[columnNdx]:
67*35238bceSAndroid Build Coastguard Worker                col        += "\t"
68*35238bceSAndroid Build Coastguard Worker                colLen     = nextMod(colLen, tabSize)
69*35238bceSAndroid Build Coastguard Worker            indented.append(col)
70*35238bceSAndroid Build Coastguard Worker
71*35238bceSAndroid Build Coastguard Worker        # Append last col
72*35238bceSAndroid Build Coastguard Worker        indented.append(line[-1])
73*35238bceSAndroid Build Coastguard Worker        yield "".join(indented)
74*35238bceSAndroid Build Coastguard Worker
75*35238bceSAndroid Build Coastguard Workerdef readFile (filename):
76*35238bceSAndroid Build Coastguard Worker    f = open(filename, 'rb')
77*35238bceSAndroid Build Coastguard Worker    data = f.read()
78*35238bceSAndroid Build Coastguard Worker    f.close()
79*35238bceSAndroid Build Coastguard Worker    return data
80*35238bceSAndroid Build Coastguard Worker
81*35238bceSAndroid Build Coastguard Workerdef writeFileIfChanged (filename, data):
82*35238bceSAndroid Build Coastguard Worker    if not os.path.exists(filename) or readFile(filename) != data:
83*35238bceSAndroid Build Coastguard Worker        if (sys.version_info < (3, 0)):
84*35238bceSAndroid Build Coastguard Worker            f = open(filename, 'wt')
85*35238bceSAndroid Build Coastguard Worker        else:
86*35238bceSAndroid Build Coastguard Worker            f = open(filename, 'wt', newline='\n')
87*35238bceSAndroid Build Coastguard Worker        f.write(data)
88*35238bceSAndroid Build Coastguard Worker        f.close()
89*35238bceSAndroid Build Coastguard Worker
90*35238bceSAndroid Build Coastguard Workerdef writeLines (filename, lines):
91*35238bceSAndroid Build Coastguard Worker    text = ""
92*35238bceSAndroid Build Coastguard Worker    for line in lines:
93*35238bceSAndroid Build Coastguard Worker        text += line
94*35238bceSAndroid Build Coastguard Worker        text += "\n"
95*35238bceSAndroid Build Coastguard Worker
96*35238bceSAndroid Build Coastguard Worker    writeFileIfChanged(filename, text)
97*35238bceSAndroid Build Coastguard Worker    print(filename)
98*35238bceSAndroid Build Coastguard Worker
99*35238bceSAndroid Build Coastguard Workerdef writeInlFile (filename, header, source):
100*35238bceSAndroid Build Coastguard Worker    writeLines(filename, chain([header], source))
101*35238bceSAndroid Build Coastguard Worker
102*35238bceSAndroid Build Coastguard Workerdef normalizeConstant (constant):
103*35238bceSAndroid Build Coastguard Worker    value = int(constant, base=0)
104*35238bceSAndroid Build Coastguard Worker    if value >= 1 << 63:
105*35238bceSAndroid Build Coastguard Worker        suffix = 'ull'
106*35238bceSAndroid Build Coastguard Worker    elif value >= 1 << 32:
107*35238bceSAndroid Build Coastguard Worker        suffix = 'll'
108*35238bceSAndroid Build Coastguard Worker    elif value >= 1 << 31:
109*35238bceSAndroid Build Coastguard Worker        suffix = 'u'
110*35238bceSAndroid Build Coastguard Worker    else:
111*35238bceSAndroid Build Coastguard Worker        suffix = ''
112*35238bceSAndroid Build Coastguard Worker    return constant + suffix
113*35238bceSAndroid Build Coastguard Worker
114*35238bceSAndroid Build Coastguard Workerdef commandParams (command):
115*35238bceSAndroid Build Coastguard Worker    if len(command.params) > 0:
116*35238bceSAndroid Build Coastguard Worker        return ", ".join(param.declaration for param in command.params)
117*35238bceSAndroid Build Coastguard Worker    else:
118*35238bceSAndroid Build Coastguard Worker        return "void"
119*35238bceSAndroid Build Coastguard Worker
120*35238bceSAndroid Build Coastguard Workerdef commandArgs (command):
121*35238bceSAndroid Build Coastguard Worker    return ", ".join(param.name for param in command.params)
122