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