xref: /aosp_15_r20/external/deqp/modules/gles2/scripts/gen-swizzles.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 sys
24*35238bceSAndroid Build Coastguard Workerimport random
25*35238bceSAndroid Build Coastguard Workerimport operator
26*35238bceSAndroid Build Coastguard Workerimport itertools
27*35238bceSAndroid Build Coastguard Worker
28*35238bceSAndroid Build Coastguard Workerfrom genutil import *
29*35238bceSAndroid Build Coastguard Worker
30*35238bceSAndroid Build Coastguard Workerrandom.seed(1234567)
31*35238bceSAndroid Build Coastguard Workerindices = xrange(sys.maxint)
32*35238bceSAndroid Build Coastguard Worker
33*35238bceSAndroid Build Coastguard Worker# Swizzles:
34*35238bceSAndroid Build Coastguard Worker# - vector components
35*35238bceSAndroid Build Coastguard Worker#   * int, float, bool vectors
36*35238bceSAndroid Build Coastguard Worker#   * .xyzw, .rgba, .stpq
37*35238bceSAndroid Build Coastguard Worker#   * illegal to mix
38*35238bceSAndroid Build Coastguard Worker#   * not allowed for scalar types
39*35238bceSAndroid Build Coastguard Worker#   * legal to chain: vec4.rgba.xyzw.stpq
40*35238bceSAndroid Build Coastguard Worker#   * illegal to select more than 4 components
41*35238bceSAndroid Build Coastguard Worker#
42*35238bceSAndroid Build Coastguard Worker# Subscripts:
43*35238bceSAndroid Build Coastguard Worker# - array-like indexing with [] operator
44*35238bceSAndroid Build Coastguard Worker#   * vectors, matrices
45*35238bceSAndroid Build Coastguard Worker# - read & write
46*35238bceSAndroid Build Coastguard Worker# - vectors components
47*35238bceSAndroid Build Coastguard Worker#   * [] accessor
48*35238bceSAndroid Build Coastguard Worker# - matrix columns
49*35238bceSAndroid Build Coastguard Worker#   * [] accessor
50*35238bceSAndroid Build Coastguard Worker#   * note: mat4[0].x = 1.0; vs mat4[0][0] = 1.0; ??
51*35238bceSAndroid Build Coastguard Worker#   * out-of-bounds accesses
52*35238bceSAndroid Build Coastguard Worker
53*35238bceSAndroid Build Coastguard Worker#
54*35238bceSAndroid Build Coastguard Worker# - vector swizzles
55*35238bceSAndroid Build Coastguard Worker#   * all vector types (bvec2..4, ivec2..4, vec2..4)
56*35238bceSAndroid Build Coastguard Worker#   * all precisions (lowp, mediump, highp)
57*35238bceSAndroid Build Coastguard Worker#   * all component names (xyzw, rgba, stpq)
58*35238bceSAndroid Build Coastguard Worker#   * broadcast each, reverse, N random
59*35238bceSAndroid Build Coastguard Worker# - component-masked writes
60*35238bceSAndroid Build Coastguard Worker#   * all vector types (bvec2..4, ivec2..4, vec2..4)
61*35238bceSAndroid Build Coastguard Worker#   * all precisions (lowp, mediump, highp)
62*35238bceSAndroid Build Coastguard Worker#   * all component names (xyzw, rgba, stpq)
63*35238bceSAndroid Build Coastguard Worker#   * all possible subsets
64*35238bceSAndroid Build Coastguard Worker#   * all input types (attribute, varying, uniform, tmp)
65*35238bceSAndroid Build Coastguard Worker#   -> a few hundred cases
66*35238bceSAndroid Build Coastguard Worker# - concatenated swizzles
67*35238bceSAndroid Build Coastguard Worker
68*35238bceSAndroid Build Coastguard Worker#
69*35238bceSAndroid Build Coastguard WorkerVECTOR_TYPES = [ "vec2", "vec3", "vec4", "ivec2", "ivec3", "ivec4", "bvec2", "bvec3", "bvec4" ]
70*35238bceSAndroid Build Coastguard WorkerPRECISION_TYPES = [ "lowp", "mediump", "highp" ]
71*35238bceSAndroid Build Coastguard WorkerINPUT_TYPES = [ "uniform", "varying", "attribute", "tmp" ]
72*35238bceSAndroid Build Coastguard WorkerSWIZZLE_NAMES = [ "xyzw", "stpq", "rgba" ]
73*35238bceSAndroid Build Coastguard Worker
74*35238bceSAndroid Build Coastguard Workerdef getDataTypeScalarSize (dt):
75*35238bceSAndroid Build Coastguard Worker    return {
76*35238bceSAndroid Build Coastguard Worker        "float": 1,
77*35238bceSAndroid Build Coastguard Worker        "vec2": 2,
78*35238bceSAndroid Build Coastguard Worker        "vec3": 3,
79*35238bceSAndroid Build Coastguard Worker        "vec4": 4,
80*35238bceSAndroid Build Coastguard Worker        "int": 1,
81*35238bceSAndroid Build Coastguard Worker        "ivec2": 2,
82*35238bceSAndroid Build Coastguard Worker        "ivec3": 3,
83*35238bceSAndroid Build Coastguard Worker        "ivec4": 4,
84*35238bceSAndroid Build Coastguard Worker        "bool": 1,
85*35238bceSAndroid Build Coastguard Worker        "bvec2": 2,
86*35238bceSAndroid Build Coastguard Worker        "bvec3": 3,
87*35238bceSAndroid Build Coastguard Worker        "bvec4": 4,
88*35238bceSAndroid Build Coastguard Worker        "mat2": 4,
89*35238bceSAndroid Build Coastguard Worker        "mat3": 9,
90*35238bceSAndroid Build Coastguard Worker        "mat4": 16
91*35238bceSAndroid Build Coastguard Worker    }[dt]
92*35238bceSAndroid Build Coastguard Worker
93*35238bceSAndroid Build Coastguard Workerif False:
94*35238bceSAndroid Build Coastguard Worker    class Combinations:
95*35238bceSAndroid Build Coastguard Worker        def __init__(self, *args):
96*35238bceSAndroid Build Coastguard Worker            self.lists = list(args)
97*35238bceSAndroid Build Coastguard Worker            self.numLists = len(args)
98*35238bceSAndroid Build Coastguard Worker            self.numCombinations = reduce(operator.mul, map(len, self.lists), 1)
99*35238bceSAndroid Build Coastguard Worker            print(self.lists)
100*35238bceSAndroid Build Coastguard Worker            print(self.numCombinations)
101*35238bceSAndroid Build Coastguard Worker
102*35238bceSAndroid Build Coastguard Worker        def iterate(self):
103*35238bceSAndroid Build Coastguard Worker            return [tuple(map(lambda x: x[0], self.lists))]
104*35238bceSAndroid Build Coastguard Worker
105*35238bceSAndroid Build Coastguard Worker    combinations = Combinations(INPUT_TYPES, VECTOR_TYPES, PRECISION_TYPES)
106*35238bceSAndroid Build Coastguard Worker    print(combinations.iterate())
107*35238bceSAndroid Build Coastguard Worker    for (inputType, dataType, precision) in combinations.iterate():
108*35238bceSAndroid Build Coastguard Worker        scalarSize = getDataTypeScalarSize(dataType)
109*35238bceSAndroid Build Coastguard Worker        print(inputType, precision, dataType)
110*35238bceSAndroid Build Coastguard Worker
111*35238bceSAndroid Build Coastguard Workerdef getSwizzlesForWidth(width):
112*35238bceSAndroid Build Coastguard Worker    if (width == 2):
113*35238bceSAndroid Build Coastguard Worker        return [(0,), (0,0), (0,1), (1,0), (1,0,1), (0,1,0,0), (1,1,1,1)]
114*35238bceSAndroid Build Coastguard Worker    elif (width == 3):
115*35238bceSAndroid Build Coastguard Worker        return [(0,), (2,), (0,2), (2,2), (0,1,2), (2,1,0), (0,0,0), (2,2,2), (2,2,1), (1,0,1), (0,2,0), (0,1,1,0), (2,2,2,2)]
116*35238bceSAndroid Build Coastguard Worker    elif (width == 4):
117*35238bceSAndroid Build Coastguard Worker        return [(0,), (3,), (3,0), (3,2), (3,3,3), (1,1,3), (3,2,1), (0,1,2,3), (3,2,1,0), (0,0,0,0), (1,1,1,1), (3,3,3,3), (3,2,2,3), (3,3,3,1), (0,1,0,0), (2,2,3,2)]
118*35238bceSAndroid Build Coastguard Worker    else:
119*35238bceSAndroid Build Coastguard Worker        assert False
120*35238bceSAndroid Build Coastguard Worker
121*35238bceSAndroid Build Coastguard Worker# Templates.
122*35238bceSAndroid Build Coastguard Worker
123*35238bceSAndroid Build Coastguard Workers_swizzleCaseTemplate = """
124*35238bceSAndroid Build Coastguard Workercase ${{NAME}}
125*35238bceSAndroid Build Coastguard Worker    values
126*35238bceSAndroid Build Coastguard Worker    {
127*35238bceSAndroid Build Coastguard Worker        ${{VALUES}}
128*35238bceSAndroid Build Coastguard Worker    }
129*35238bceSAndroid Build Coastguard Worker
130*35238bceSAndroid Build Coastguard Worker    both ""
131*35238bceSAndroid Build Coastguard Worker        precision mediump float;
132*35238bceSAndroid Build Coastguard Worker
133*35238bceSAndroid Build Coastguard Worker        ${DECLARATIONS}
134*35238bceSAndroid Build Coastguard Worker
135*35238bceSAndroid Build Coastguard Worker        void main()
136*35238bceSAndroid Build Coastguard Worker        {
137*35238bceSAndroid Build Coastguard Worker            ${SETUP}
138*35238bceSAndroid Build Coastguard Worker            ${{OP}}
139*35238bceSAndroid Build Coastguard Worker            ${OUTPUT}
140*35238bceSAndroid Build Coastguard Worker        }
141*35238bceSAndroid Build Coastguard Worker    ""
142*35238bceSAndroid Build Coastguard Workerend
143*35238bceSAndroid Build Coastguard Worker"""[1:]
144*35238bceSAndroid Build Coastguard Worker
145*35238bceSAndroid Build Coastguard Workers_simpleIllegalCaseTemplate = """
146*35238bceSAndroid Build Coastguard Workercase ${{NAME}}
147*35238bceSAndroid Build Coastguard Worker    expect compile_fail
148*35238bceSAndroid Build Coastguard Worker    values {}
149*35238bceSAndroid Build Coastguard Worker
150*35238bceSAndroid Build Coastguard Worker    both ""
151*35238bceSAndroid Build Coastguard Worker        precision mediump float;
152*35238bceSAndroid Build Coastguard Worker        precision mediump int;
153*35238bceSAndroid Build Coastguard Worker
154*35238bceSAndroid Build Coastguard Worker        ${DECLARATIONS}
155*35238bceSAndroid Build Coastguard Worker
156*35238bceSAndroid Build Coastguard Worker        void main()
157*35238bceSAndroid Build Coastguard Worker        {
158*35238bceSAndroid Build Coastguard Worker            ${SETUP}
159*35238bceSAndroid Build Coastguard Worker            ${{OP}}
160*35238bceSAndroid Build Coastguard Worker            ${OUTPUT}
161*35238bceSAndroid Build Coastguard Worker        }
162*35238bceSAndroid Build Coastguard Worker    ""
163*35238bceSAndroid Build Coastguard Workerend
164*35238bceSAndroid Build Coastguard Worker"""[1:]
165*35238bceSAndroid Build Coastguard Worker
166*35238bceSAndroid Build Coastguard Workerclass SwizzleCase(ShaderCase):
167*35238bceSAndroid Build Coastguard Worker    def __init__(self, name, precision, dataType, swizzle, inputs, outputs):
168*35238bceSAndroid Build Coastguard Worker        self.name = name
169*35238bceSAndroid Build Coastguard Worker        self.precision = precision
170*35238bceSAndroid Build Coastguard Worker        self.dataType = dataType
171*35238bceSAndroid Build Coastguard Worker        self.swizzle = swizzle
172*35238bceSAndroid Build Coastguard Worker        self.inputs = inputs
173*35238bceSAndroid Build Coastguard Worker        self.outputs = outputs
174*35238bceSAndroid Build Coastguard Worker        self.op = "out0 = in0.%s;" % swizzle
175*35238bceSAndroid Build Coastguard Worker
176*35238bceSAndroid Build Coastguard Worker    def __str__(self):
177*35238bceSAndroid Build Coastguard Worker        params = {
178*35238bceSAndroid Build Coastguard Worker            "NAME": self.name,
179*35238bceSAndroid Build Coastguard Worker            "VALUES": genValues(self.inputs, self.outputs),
180*35238bceSAndroid Build Coastguard Worker            "OP": self.op
181*35238bceSAndroid Build Coastguard Worker        }
182*35238bceSAndroid Build Coastguard Worker        return fillTemplate(s_swizzleCaseTemplate, params)
183*35238bceSAndroid Build Coastguard Worker
184*35238bceSAndroid Build Coastguard Worker# CASE DECLARATIONS
185*35238bceSAndroid Build Coastguard Worker
186*35238bceSAndroid Build Coastguard WorkerinFloat = [Scalar(x) for x in [0.0, 1.0, 2.0, 3.5, -0.5, -20.125, 36.8125]]
187*35238bceSAndroid Build Coastguard WorkerinInt = [Scalar(x) for x in [0, 1, 2, 5, 8, 11, -12, -66, -192, 255]]
188*35238bceSAndroid Build Coastguard WorkerinBool = [Scalar(x) for x in [True, False]]
189*35238bceSAndroid Build Coastguard Worker
190*35238bceSAndroid Build Coastguard WorkerinVec4 = [Vec4(0.0, 0.5, 0.75, 0.825), Vec4(1.0, 1.25, 1.125, 1.75),
191*35238bceSAndroid Build Coastguard Worker           Vec4(-0.5, -2.25, -4.875, 9.0), Vec4(-32.0, 64.0, -51.0, 24.0),
192*35238bceSAndroid Build Coastguard Worker           Vec4(-0.75, -1.0/31.0, 1.0/19.0, 1.0/4.0)]
193*35238bceSAndroid Build Coastguard WorkerinVec3 = toVec3(inVec4)
194*35238bceSAndroid Build Coastguard WorkerinVec2 = toVec2(inVec4)
195*35238bceSAndroid Build Coastguard WorkerinIVec4 = toIVec4(inVec4)
196*35238bceSAndroid Build Coastguard WorkerinIVec3 = toIVec3(inVec4)
197*35238bceSAndroid Build Coastguard WorkerinIVec2 = toIVec2(inVec4)
198*35238bceSAndroid Build Coastguard WorkerinBVec4 = [Vec4(True, False, False, True), Vec4(False, False, False, True), Vec4(False, True, False, False), Vec4(True, True, True, True), Vec4(False, False, False, False)]
199*35238bceSAndroid Build Coastguard WorkerinBVec3 = toBVec3(inBVec4)
200*35238bceSAndroid Build Coastguard WorkerinBVec2 = toBVec2(inBVec4)
201*35238bceSAndroid Build Coastguard Worker
202*35238bceSAndroid Build Coastguard Worker# \todo [petri] Enable large values when epsilon adapts to the values.
203*35238bceSAndroid Build Coastguard WorkerinMat4 = [Mat4(1.0, 0.0, 0.0, 0.0,  0.0, 1.0, 0.0, 0.0,  0.0, 0.0, 1.0, 0.0,  0.0, 0.0, 0.0, 1.0),
204*35238bceSAndroid Build Coastguard Worker           Mat4(6.5, 12.5, -0.75, 9.975,  32.0, 1.0/48.0, -8.425, -6.542,  1.0/8.0, 1.0/16.0, 1.0/32.0, 1.0/64.0,  -6.725, -0.5, -0.0125, 9.975),
205*35238bceSAndroid Build Coastguard Worker           #Mat4(128.0, 256.0, -512.0, -1024.0,  2048.0, -4096.0, 8192.0, -8192.0,  192.0, -384.0, 768.0, -1536.0,  8192.0, -8192.0, 6144.0, -6144.0)
206*35238bceSAndroid Build Coastguard Worker           ]
207*35238bceSAndroid Build Coastguard WorkerinMat3 = [Mat3(1.0, 0.0, 0.0,  0.0, 1.0, 0.0,  0.0, 0.0, 1.0),
208*35238bceSAndroid Build Coastguard Worker           Mat3(6.5, 12.5, -0.75,  32.0, 1.0/32.0, 1.0/64.0,  1.0/8.0, 1.0/16.0, 1.0/32.0),
209*35238bceSAndroid Build Coastguard Worker           #Mat3(-18.725, -0.5, -0.0125,  19.975, -0.25, -17.75,  9.25, 65.125, -21.425),
210*35238bceSAndroid Build Coastguard Worker           #Mat3(128.0, -4096.0, -8192.0,  192.0, 768.0, -1536.0,  8192.0, 6144.0, -6144.0)
211*35238bceSAndroid Build Coastguard Worker           ]
212*35238bceSAndroid Build Coastguard WorkerinMat2 = [Mat2(1.0, 0.0,  0.0, 1.0),
213*35238bceSAndroid Build Coastguard Worker           Mat2(6.5, 12.5,  -0.75, 9.975),
214*35238bceSAndroid Build Coastguard Worker           Mat2(6.5, 12.5,  -0.75, 9.975),
215*35238bceSAndroid Build Coastguard Worker           Mat2(8.0, 16.0,  -24.0, -16.0),
216*35238bceSAndroid Build Coastguard Worker           Mat2(1.0/8.0, 1.0/16.0,  1.0/32.0, 1.0/64.0),
217*35238bceSAndroid Build Coastguard Worker           Mat2(-18.725, -0.5,  -0.0125, 19.975),
218*35238bceSAndroid Build Coastguard Worker           #Mat2(128.0, -4096.0,  192.0, -1536.0),
219*35238bceSAndroid Build Coastguard Worker           #Mat2(-1536.0, 8192.0,  6144.0, -6144.0)
220*35238bceSAndroid Build Coastguard Worker           ]
221*35238bceSAndroid Build Coastguard Worker
222*35238bceSAndroid Build Coastguard WorkerINPUTS = {
223*35238bceSAndroid Build Coastguard Worker    "float": inFloat,
224*35238bceSAndroid Build Coastguard Worker    "vec2": inVec2,
225*35238bceSAndroid Build Coastguard Worker    "vec3": inVec3,
226*35238bceSAndroid Build Coastguard Worker    "vec4": inVec4,
227*35238bceSAndroid Build Coastguard Worker    "int": inInt,
228*35238bceSAndroid Build Coastguard Worker    "ivec2": inIVec2,
229*35238bceSAndroid Build Coastguard Worker    "ivec3": inIVec3,
230*35238bceSAndroid Build Coastguard Worker    "ivec4": inIVec4,
231*35238bceSAndroid Build Coastguard Worker    "bool": inBool,
232*35238bceSAndroid Build Coastguard Worker    "bvec2": inBVec2,
233*35238bceSAndroid Build Coastguard Worker    "bvec3": inBVec3,
234*35238bceSAndroid Build Coastguard Worker    "bvec4": inBVec4,
235*35238bceSAndroid Build Coastguard Worker    "mat2": inMat2,
236*35238bceSAndroid Build Coastguard Worker    "mat3": inMat3,
237*35238bceSAndroid Build Coastguard Worker    "mat4": inMat4
238*35238bceSAndroid Build Coastguard Worker}
239*35238bceSAndroid Build Coastguard Worker
240*35238bceSAndroid Build Coastguard Workerdef genConversionCases(inValueList, convFuncList):
241*35238bceSAndroid Build Coastguard Worker    combinations = list(itertools.product(inValueList, convFuncList))
242*35238bceSAndroid Build Coastguard Worker    return [ConversionCase(inValues, convFunc) for (inValues, convFunc) in combinations]
243*35238bceSAndroid Build Coastguard Worker
244*35238bceSAndroid Build Coastguard WorkerallCases = []
245*35238bceSAndroid Build Coastguard Worker
246*35238bceSAndroid Build Coastguard Worker# Vector swizzles.
247*35238bceSAndroid Build Coastguard Worker
248*35238bceSAndroid Build Coastguard WorkervectorSwizzleCases = []
249*35238bceSAndroid Build Coastguard Worker
250*35238bceSAndroid Build Coastguard Worker# \todo [petri] Uses fixed precision.
251*35238bceSAndroid Build Coastguard Workerfor dataType in VECTOR_TYPES:
252*35238bceSAndroid Build Coastguard Worker    scalarSize = getDataTypeScalarSize(dataType)
253*35238bceSAndroid Build Coastguard Worker    precision = "mediump"
254*35238bceSAndroid Build Coastguard Worker    for swizzleComponents in SWIZZLE_NAMES:
255*35238bceSAndroid Build Coastguard Worker        for swizzleIndices in getSwizzlesForWidth(scalarSize):
256*35238bceSAndroid Build Coastguard Worker            swizzle = "".join(map(lambda x: swizzleComponents[x], swizzleIndices))
257*35238bceSAndroid Build Coastguard Worker            #print("%s %s .%s" % (precision, dataType, swizzle))
258*35238bceSAndroid Build Coastguard Worker            caseName = "%s_%s_%s" % (precision, dataType, swizzle)
259*35238bceSAndroid Build Coastguard Worker            inputs = INPUTS[dataType]
260*35238bceSAndroid Build Coastguard Worker            outputs = map(lambda x: x.swizzle(swizzleIndices), inputs)
261*35238bceSAndroid Build Coastguard Worker            outType = outputs[0].typeString()
262*35238bceSAndroid Build Coastguard Worker            vectorSwizzleCases.append(SwizzleCase(caseName, precision, dataType, swizzle, [("%s in0" % dataType, inputs)], [("%s out0" % outType, outputs)]))
263*35238bceSAndroid Build Coastguard Worker
264*35238bceSAndroid Build Coastguard Worker# ??
265*35238bceSAndroid Build Coastguard Worker#for dataType in VECTOR_TYPES:
266*35238bceSAndroid Build Coastguard Worker#    scalarSize = getDataTypeScalarSize(dataType)
267*35238bceSAndroid Build Coastguard Worker#    for precision in PRECISION_TYPES:
268*35238bceSAndroid Build Coastguard Worker#        for swizzleIndices in getSwizzlesForWidth(scalarSize):
269*35238bceSAndroid Build Coastguard Worker#            swizzle = "".join(map(lambda x: "xyzw"[x], swizzleIndices))
270*35238bceSAndroid Build Coastguard Worker#            #print("%s %s .%s" % (precision, dataType, swizzle))
271*35238bceSAndroid Build Coastguard Worker#            caseName = "%s_%s_%s" % (precision, dataType, swizzle)
272*35238bceSAndroid Build Coastguard Worker#            inputs = INPUTS[dataType]
273*35238bceSAndroid Build Coastguard Worker#            outputs = map(lambda x: x.swizzle(swizzleIndices), inputs)
274*35238bceSAndroid Build Coastguard Worker#            vectorSwizzleCases.append(SwizzleCase(caseName, precision, dataType, swizzle, [("in0", inputs)], [("out0", outputs)]))
275*35238bceSAndroid Build Coastguard Worker
276*35238bceSAndroid Build Coastguard WorkerallCases.append(CaseGroup("vector_swizzles", "Vector Swizzles", vectorSwizzleCases))
277*35238bceSAndroid Build Coastguard Worker
278*35238bceSAndroid Build Coastguard Worker# Swizzles:
279*35238bceSAndroid Build Coastguard Worker# - vector components
280*35238bceSAndroid Build Coastguard Worker#   * int, float, bool vectors
281*35238bceSAndroid Build Coastguard Worker#   * .xyzw, .rgba, .stpq
282*35238bceSAndroid Build Coastguard Worker#   * illegal to mix
283*35238bceSAndroid Build Coastguard Worker#   * not allowed for scalar types
284*35238bceSAndroid Build Coastguard Worker#   * legal to chain: vec4.rgba.xyzw.stpq
285*35238bceSAndroid Build Coastguard Worker#   * illegal to select more than 4 components
286*35238bceSAndroid Build Coastguard Worker
287*35238bceSAndroid Build Coastguard Worker# TODO: precisions!!
288*35238bceSAndroid Build Coastguard Worker
289*35238bceSAndroid Build Coastguard Worker#allCases.append(CaseGroup("vector_swizzles", "Vector Swizzles",
290*35238bceSAndroid Build Coastguard Worker#    genSwizzleCase([inVec2, inVec3, inVec4],
291*35238bceSAndroid Build Coastguard Worker
292*35238bceSAndroid Build Coastguard Worker# Main program.
293*35238bceSAndroid Build Coastguard Worker
294*35238bceSAndroid Build Coastguard Workerif __name__ == "__main__":
295*35238bceSAndroid Build Coastguard Worker    print("Generating shader case files.")
296*35238bceSAndroid Build Coastguard Worker    writeAllCases("swizzles.test", allCases)
297