xref: /aosp_15_r20/external/deqp/modules/gles31/scripts/gen-uniform-blocks.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 Workerfrom genutil import *
24*35238bceSAndroid Build Coastguard Worker
25*35238bceSAndroid Build Coastguard WorkerallCases = []
26*35238bceSAndroid Build Coastguard Worker
27*35238bceSAndroid Build Coastguard WorkerVERTEX = "VERTEX"
28*35238bceSAndroid Build Coastguard WorkerFRAGMENT = "FRAGMENT"
29*35238bceSAndroid Build Coastguard Worker
30*35238bceSAndroid Build Coastguard WorkerCASE_FRAGMENT_SHADER_TEMPLATE = """
31*35238bceSAndroid Build Coastguard Workercase ${{NAME}}
32*35238bceSAndroid Build Coastguard Worker    version 310 es
33*35238bceSAndroid Build Coastguard Worker    expect ${{EXPECT}}
34*35238bceSAndroid Build Coastguard Worker
35*35238bceSAndroid Build Coastguard Worker    vertex ""
36*35238bceSAndroid Build Coastguard Worker        #version 310 es
37*35238bceSAndroid Build Coastguard Worker        precision highp float;
38*35238bceSAndroid Build Coastguard Worker
39*35238bceSAndroid Build Coastguard Worker        in vec4 a_pos;
40*35238bceSAndroid Build Coastguard Worker
41*35238bceSAndroid Build Coastguard Worker        void main()
42*35238bceSAndroid Build Coastguard Worker        {
43*35238bceSAndroid Build Coastguard Worker            gl_Position = a_pos;
44*35238bceSAndroid Build Coastguard Worker        }
45*35238bceSAndroid Build Coastguard Worker    ""
46*35238bceSAndroid Build Coastguard Worker
47*35238bceSAndroid Build Coastguard Worker    fragment ""
48*35238bceSAndroid Build Coastguard Worker        ${{SOURCE}}
49*35238bceSAndroid Build Coastguard Worker    ""
50*35238bceSAndroid Build Coastguard Workerend"""[1:]
51*35238bceSAndroid Build Coastguard Worker
52*35238bceSAndroid Build Coastguard WorkerCASE_VERTEX_SHADER_TEMPLATE = """
53*35238bceSAndroid Build Coastguard Workercase ${{NAME}}
54*35238bceSAndroid Build Coastguard Worker    version 310 es
55*35238bceSAndroid Build Coastguard Worker    expect ${{EXPECT}}
56*35238bceSAndroid Build Coastguard Worker
57*35238bceSAndroid Build Coastguard Worker    vertex ""
58*35238bceSAndroid Build Coastguard Worker        ${{SOURCE}}
59*35238bceSAndroid Build Coastguard Worker    ""
60*35238bceSAndroid Build Coastguard Worker
61*35238bceSAndroid Build Coastguard Worker    fragment ""
62*35238bceSAndroid Build Coastguard Worker        #version 310 es
63*35238bceSAndroid Build Coastguard Worker        precision highp float;
64*35238bceSAndroid Build Coastguard Worker
65*35238bceSAndroid Build Coastguard Worker        layout(location=0) out vec4 o_color;
66*35238bceSAndroid Build Coastguard Worker
67*35238bceSAndroid Build Coastguard Worker        void main()
68*35238bceSAndroid Build Coastguard Worker        {
69*35238bceSAndroid Build Coastguard Worker            o_color = vec4(1.0);
70*35238bceSAndroid Build Coastguard Worker        }
71*35238bceSAndroid Build Coastguard Worker    ""
72*35238bceSAndroid Build Coastguard Workerend"""[1:]
73*35238bceSAndroid Build Coastguard Worker
74*35238bceSAndroid Build Coastguard Workerclass UniformBlockCase(ShaderCase):
75*35238bceSAndroid Build Coastguard Worker    def __init__(self, name, shaderType, source, valid):
76*35238bceSAndroid Build Coastguard Worker        self.name = name
77*35238bceSAndroid Build Coastguard Worker        self.shaderType = shaderType
78*35238bceSAndroid Build Coastguard Worker        self.source = source
79*35238bceSAndroid Build Coastguard Worker        self.valid = valid
80*35238bceSAndroid Build Coastguard Worker
81*35238bceSAndroid Build Coastguard Worker    def __str__(self):
82*35238bceSAndroid Build Coastguard Worker        if self.shaderType == FRAGMENT:
83*35238bceSAndroid Build Coastguard Worker            sourceParams = {
84*35238bceSAndroid Build Coastguard Worker                "OUTPUT": "o_color",
85*35238bceSAndroid Build Coastguard Worker                "OUTPUT_DECLARATION": "layout(location=0) out vec4 o_color;"
86*35238bceSAndroid Build Coastguard Worker            }
87*35238bceSAndroid Build Coastguard Worker
88*35238bceSAndroid Build Coastguard Worker            source = fillTemplate(self.source, sourceParams)
89*35238bceSAndroid Build Coastguard Worker
90*35238bceSAndroid Build Coastguard Worker            testCaseParams = {
91*35238bceSAndroid Build Coastguard Worker                "NAME": self.name,
92*35238bceSAndroid Build Coastguard Worker                "SOURCE": source,
93*35238bceSAndroid Build Coastguard Worker                "EXPECT": ("build_successful" if self.valid else "compile_fail")
94*35238bceSAndroid Build Coastguard Worker            }
95*35238bceSAndroid Build Coastguard Worker
96*35238bceSAndroid Build Coastguard Worker            return fillTemplate(CASE_FRAGMENT_SHADER_TEMPLATE, testCaseParams)
97*35238bceSAndroid Build Coastguard Worker        elif self.shaderType == VERTEX:
98*35238bceSAndroid Build Coastguard Worker            sourceParams = {
99*35238bceSAndroid Build Coastguard Worker                "OUTPUT": "gl_Position",
100*35238bceSAndroid Build Coastguard Worker                "OUTPUT_DECLARATION": ""
101*35238bceSAndroid Build Coastguard Worker            }
102*35238bceSAndroid Build Coastguard Worker
103*35238bceSAndroid Build Coastguard Worker            source = fillTemplate(self.source, sourceParams)
104*35238bceSAndroid Build Coastguard Worker
105*35238bceSAndroid Build Coastguard Worker            testCaseParams = {
106*35238bceSAndroid Build Coastguard Worker                "NAME": self.name,
107*35238bceSAndroid Build Coastguard Worker                "SOURCE": source,
108*35238bceSAndroid Build Coastguard Worker                "EXPECT": ("build_successful" if self.valid else "compile_fail")
109*35238bceSAndroid Build Coastguard Worker            }
110*35238bceSAndroid Build Coastguard Worker
111*35238bceSAndroid Build Coastguard Worker            return fillTemplate(CASE_VERTEX_SHADER_TEMPLATE, testCaseParams)
112*35238bceSAndroid Build Coastguard Worker
113*35238bceSAndroid Build Coastguard Worker        assert False
114*35238bceSAndroid Build Coastguard Worker
115*35238bceSAndroid Build Coastguard Workerdef createCases(name, source, valid):
116*35238bceSAndroid Build Coastguard Worker    return [UniformBlockCase(name + "_vertex", VERTEX, source, valid),
117*35238bceSAndroid Build Coastguard Worker            UniformBlockCase(name + "_fragment", FRAGMENT, source, valid)]
118*35238bceSAndroid Build Coastguard Worker
119*35238bceSAndroid Build Coastguard WorkerrepeatShaderTemplate = """
120*35238bceSAndroid Build Coastguard Worker#version 310 es
121*35238bceSAndroid Build Coastguard Workerprecision highp float;
122*35238bceSAndroid Build Coastguard Worker
123*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
124*35238bceSAndroid Build Coastguard Worker
125*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
126*35238bceSAndroid Build Coastguard Worker{
127*35238bceSAndroid Build Coastguard Worker    uniform vec4 uniformMember;
128*35238bceSAndroid Build Coastguard Worker} uniformBlock;
129*35238bceSAndroid Build Coastguard Worker
130*35238bceSAndroid Build Coastguard Workervoid main()
131*35238bceSAndroid Build Coastguard Worker{
132*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
133*35238bceSAndroid Build Coastguard Worker}"""[1:]
134*35238bceSAndroid Build Coastguard Worker
135*35238bceSAndroid Build Coastguard WorkerlayoutQualifierShaderTemplate = """
136*35238bceSAndroid Build Coastguard Worker#version 310 es
137*35238bceSAndroid Build Coastguard Workerprecision highp float;
138*35238bceSAndroid Build Coastguard Worker
139*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
140*35238bceSAndroid Build Coastguard Worker
141*35238bceSAndroid Build Coastguard Workerlayout(%s) uniform UniformBlock
142*35238bceSAndroid Build Coastguard Worker{
143*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
144*35238bceSAndroid Build Coastguard Worker} uniformBlock;
145*35238bceSAndroid Build Coastguard Worker
146*35238bceSAndroid Build Coastguard Workervoid main()
147*35238bceSAndroid Build Coastguard Worker{
148*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
149*35238bceSAndroid Build Coastguard Worker}"""[1:]
150*35238bceSAndroid Build Coastguard Worker
151*35238bceSAndroid Build Coastguard WorkerlayoutGlobalQualifierShaderTemplate = """
152*35238bceSAndroid Build Coastguard Worker#version 310 es
153*35238bceSAndroid Build Coastguard Workerprecision highp float;
154*35238bceSAndroid Build Coastguard Worker
155*35238bceSAndroid Build Coastguard Workerlayout(%s) uniform;
156*35238bceSAndroid Build Coastguard Worker
157*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
158*35238bceSAndroid Build Coastguard Worker
159*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
160*35238bceSAndroid Build Coastguard Worker{
161*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
162*35238bceSAndroid Build Coastguard Worker} uniformBlock;
163*35238bceSAndroid Build Coastguard Worker
164*35238bceSAndroid Build Coastguard Workervoid main()
165*35238bceSAndroid Build Coastguard Worker{
166*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
167*35238bceSAndroid Build Coastguard Worker}"""[1:]
168*35238bceSAndroid Build Coastguard Worker
169*35238bceSAndroid Build Coastguard WorkerlayoutMemberQualifierShaderTemplate = """
170*35238bceSAndroid Build Coastguard Worker#version 310 es
171*35238bceSAndroid Build Coastguard Workerprecision highp float;
172*35238bceSAndroid Build Coastguard Worker
173*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
174*35238bceSAndroid Build Coastguard Worker
175*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
176*35238bceSAndroid Build Coastguard Worker{
177*35238bceSAndroid Build Coastguard Worker    layout(%s) mat4 uniformMember;
178*35238bceSAndroid Build Coastguard Worker} uniformBlock;
179*35238bceSAndroid Build Coastguard Worker
180*35238bceSAndroid Build Coastguard Workervoid main()
181*35238bceSAndroid Build Coastguard Worker{
182*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember[0];
183*35238bceSAndroid Build Coastguard Worker}"""[1:]
184*35238bceSAndroid Build Coastguard Worker
185*35238bceSAndroid Build Coastguard WorkerlayoutMemberVec4QualifierShaderTemplate = """
186*35238bceSAndroid Build Coastguard Worker#version 310 es
187*35238bceSAndroid Build Coastguard Workerprecision highp float;
188*35238bceSAndroid Build Coastguard Worker
189*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
190*35238bceSAndroid Build Coastguard Worker
191*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
192*35238bceSAndroid Build Coastguard Worker{
193*35238bceSAndroid Build Coastguard Worker    layout(%s) vec4 uniformMember;
194*35238bceSAndroid Build Coastguard Worker} uniformBlock;
195*35238bceSAndroid Build Coastguard Worker
196*35238bceSAndroid Build Coastguard Workervoid main()
197*35238bceSAndroid Build Coastguard Worker{
198*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
199*35238bceSAndroid Build Coastguard Worker}"""[1:]
200*35238bceSAndroid Build Coastguard Worker
201*35238bceSAndroid Build Coastguard WorkernoInstanceNameShaderTemplate = """
202*35238bceSAndroid Build Coastguard Worker#version 310 es
203*35238bceSAndroid Build Coastguard Workerprecision highp float;
204*35238bceSAndroid Build Coastguard Worker
205*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
206*35238bceSAndroid Build Coastguard Worker
207*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
208*35238bceSAndroid Build Coastguard Worker{
209*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
210*35238bceSAndroid Build Coastguard Worker};
211*35238bceSAndroid Build Coastguard Worker
212*35238bceSAndroid Build Coastguard Workervoid main()
213*35238bceSAndroid Build Coastguard Worker{
214*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformMember;
215*35238bceSAndroid Build Coastguard Worker}"""[1:]
216*35238bceSAndroid Build Coastguard Worker
217*35238bceSAndroid Build Coastguard WorkersameVariableAndInstanceNameShaderTemplate = """
218*35238bceSAndroid Build Coastguard Worker#version 310 es
219*35238bceSAndroid Build Coastguard Workerprecision highp float;
220*35238bceSAndroid Build Coastguard Worker
221*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
222*35238bceSAndroid Build Coastguard Worker
223*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
224*35238bceSAndroid Build Coastguard Worker{
225*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
226*35238bceSAndroid Build Coastguard Worker} uniformBlock;
227*35238bceSAndroid Build Coastguard Worker
228*35238bceSAndroid Build Coastguard Workervoid main()
229*35238bceSAndroid Build Coastguard Worker{
230*35238bceSAndroid Build Coastguard Worker    vec4 uniformBlock = vec4(0.0);
231*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock;
232*35238bceSAndroid Build Coastguard Worker}"""[1:]
233*35238bceSAndroid Build Coastguard Worker
234*35238bceSAndroid Build Coastguard WorkersameVariableAndBlockNameShaderTemplate = """
235*35238bceSAndroid Build Coastguard Worker#version 310 es
236*35238bceSAndroid Build Coastguard Workerprecision highp float;
237*35238bceSAndroid Build Coastguard Worker
238*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
239*35238bceSAndroid Build Coastguard Worker
240*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
241*35238bceSAndroid Build Coastguard Worker{
242*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
243*35238bceSAndroid Build Coastguard Worker} uniformBlock;
244*35238bceSAndroid Build Coastguard Worker
245*35238bceSAndroid Build Coastguard Workervoid main()
246*35238bceSAndroid Build Coastguard Worker{
247*35238bceSAndroid Build Coastguard Worker    vec4 UniformBlock = vec4(0.0);
248*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = UniformBlock + uniformBlock.uniformMember;
249*35238bceSAndroid Build Coastguard Worker}"""[1:]
250*35238bceSAndroid Build Coastguard Worker
251*35238bceSAndroid Build Coastguard WorkerrepeatedBlockShaderTemplate = """
252*35238bceSAndroid Build Coastguard Worker#version 310 es
253*35238bceSAndroid Build Coastguard Workerprecision highp float;
254*35238bceSAndroid Build Coastguard Worker
255*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
256*35238bceSAndroid Build Coastguard Worker
257*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
258*35238bceSAndroid Build Coastguard Worker{
259*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
260*35238bceSAndroid Build Coastguard Worker} uniformBlockA;
261*35238bceSAndroid Build Coastguard Worker
262*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
263*35238bceSAndroid Build Coastguard Worker{
264*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
265*35238bceSAndroid Build Coastguard Worker} uniformBlockB;
266*35238bceSAndroid Build Coastguard Worker
267*35238bceSAndroid Build Coastguard Workervoid main()
268*35238bceSAndroid Build Coastguard Worker{
269*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlockA.uniformMember + uniformBlockB.uniformMember;
270*35238bceSAndroid Build Coastguard Worker}"""[1:]
271*35238bceSAndroid Build Coastguard Worker
272*35238bceSAndroid Build Coastguard WorkerrepeatedBlockNoInstanceNameShaderTemplate = """
273*35238bceSAndroid Build Coastguard Worker#version 310 es
274*35238bceSAndroid Build Coastguard Workerprecision highp float;
275*35238bceSAndroid Build Coastguard Worker
276*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
277*35238bceSAndroid Build Coastguard Worker
278*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
279*35238bceSAndroid Build Coastguard Worker{
280*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
281*35238bceSAndroid Build Coastguard Worker} uniformBlock;
282*35238bceSAndroid Build Coastguard Worker
283*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
284*35238bceSAndroid Build Coastguard Worker{
285*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
286*35238bceSAndroid Build Coastguard Worker};
287*35238bceSAndroid Build Coastguard Worker
288*35238bceSAndroid Build Coastguard Workervoid main()
289*35238bceSAndroid Build Coastguard Worker{
290*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember + uniformMember;
291*35238bceSAndroid Build Coastguard Worker}"""[1:]
292*35238bceSAndroid Build Coastguard Worker
293*35238bceSAndroid Build Coastguard WorkerstructMemberShaderTemplate = """
294*35238bceSAndroid Build Coastguard Worker#version 310 es
295*35238bceSAndroid Build Coastguard Workerprecision highp float;
296*35238bceSAndroid Build Coastguard Worker
297*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
298*35238bceSAndroid Build Coastguard Worker
299*35238bceSAndroid Build Coastguard Workerstruct Struct
300*35238bceSAndroid Build Coastguard Worker{
301*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
302*35238bceSAndroid Build Coastguard Worker};
303*35238bceSAndroid Build Coastguard Worker
304*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
305*35238bceSAndroid Build Coastguard Worker{
306*35238bceSAndroid Build Coastguard Worker    Struct st;
307*35238bceSAndroid Build Coastguard Worker} uniformBlock;
308*35238bceSAndroid Build Coastguard Worker
309*35238bceSAndroid Build Coastguard Workervoid main()
310*35238bceSAndroid Build Coastguard Worker{
311*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.st.uniformMember;
312*35238bceSAndroid Build Coastguard Worker}"""[1:]
313*35238bceSAndroid Build Coastguard Worker
314*35238bceSAndroid Build Coastguard WorkerlayoutStructMemberQualifierShaderTemplate = """
315*35238bceSAndroid Build Coastguard Worker#version 310 es
316*35238bceSAndroid Build Coastguard Workerprecision highp float;
317*35238bceSAndroid Build Coastguard Worker
318*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
319*35238bceSAndroid Build Coastguard Worker
320*35238bceSAndroid Build Coastguard Workerstruct Struct
321*35238bceSAndroid Build Coastguard Worker{
322*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
323*35238bceSAndroid Build Coastguard Worker};
324*35238bceSAndroid Build Coastguard Worker
325*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
326*35238bceSAndroid Build Coastguard Worker{
327*35238bceSAndroid Build Coastguard Worker    layout(%s) Struct st;
328*35238bceSAndroid Build Coastguard Worker} uniformBlock;
329*35238bceSAndroid Build Coastguard Worker
330*35238bceSAndroid Build Coastguard Workervoid main()
331*35238bceSAndroid Build Coastguard Worker{
332*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.st.uniformMember;
333*35238bceSAndroid Build Coastguard Worker}"""[1:]
334*35238bceSAndroid Build Coastguard Worker
335*35238bceSAndroid Build Coastguard WorkerlongIdentifierBlockNameShaderTemplate = ("""
336*35238bceSAndroid Build Coastguard Worker#version 310 es
337*35238bceSAndroid Build Coastguard Workerprecision highp float;
338*35238bceSAndroid Build Coastguard Worker
339*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
340*35238bceSAndroid Build Coastguard Worker
341*35238bceSAndroid Build Coastguard Worker// Total of 1024 characters
342*35238bceSAndroid Build Coastguard Workeruniform """ + ("a" * 1024) + """
343*35238bceSAndroid Build Coastguard Worker{
344*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
345*35238bceSAndroid Build Coastguard Worker} uniformBlock;
346*35238bceSAndroid Build Coastguard Worker
347*35238bceSAndroid Build Coastguard Workervoid main()
348*35238bceSAndroid Build Coastguard Worker{
349*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
350*35238bceSAndroid Build Coastguard Worker}""")[1:]
351*35238bceSAndroid Build Coastguard Worker
352*35238bceSAndroid Build Coastguard WorkerlongIdentifierInstanceNameShaderTemplate = ("""
353*35238bceSAndroid Build Coastguard Worker#version 310 es
354*35238bceSAndroid Build Coastguard Workerprecision highp float;
355*35238bceSAndroid Build Coastguard Worker
356*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
357*35238bceSAndroid Build Coastguard Worker
358*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
359*35238bceSAndroid Build Coastguard Worker{
360*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
361*35238bceSAndroid Build Coastguard Worker} """ + ("a" * 1024) + """;
362*35238bceSAndroid Build Coastguard Worker// Total of 1024 characters
363*35238bceSAndroid Build Coastguard Worker
364*35238bceSAndroid Build Coastguard Workervoid main()
365*35238bceSAndroid Build Coastguard Worker{
366*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = """ + ("a" * 1024) + """.uniformMember;
367*35238bceSAndroid Build Coastguard Worker}""")[1:]
368*35238bceSAndroid Build Coastguard Worker
369*35238bceSAndroid Build Coastguard WorkerunderscoreIdentifierInstanceNameShaderTemplate = ("""
370*35238bceSAndroid Build Coastguard Worker#version 310 es
371*35238bceSAndroid Build Coastguard Workerprecision highp float;
372*35238bceSAndroid Build Coastguard Worker
373*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
374*35238bceSAndroid Build Coastguard Worker
375*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
376*35238bceSAndroid Build Coastguard Worker{
377*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
378*35238bceSAndroid Build Coastguard Worker} _;
379*35238bceSAndroid Build Coastguard Worker
380*35238bceSAndroid Build Coastguard Workervoid main()
381*35238bceSAndroid Build Coastguard Worker{
382*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = _.uniformMember;
383*35238bceSAndroid Build Coastguard Worker}""")[1:]
384*35238bceSAndroid Build Coastguard Worker
385*35238bceSAndroid Build Coastguard WorkerunderscoreIdentifierBlockNameShaderTemplate = ("""
386*35238bceSAndroid Build Coastguard Worker#version 310 es
387*35238bceSAndroid Build Coastguard Workerprecision highp float;
388*35238bceSAndroid Build Coastguard Worker
389*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
390*35238bceSAndroid Build Coastguard Worker
391*35238bceSAndroid Build Coastguard Workeruniform _
392*35238bceSAndroid Build Coastguard Worker{
393*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
394*35238bceSAndroid Build Coastguard Worker} uniformBlock;
395*35238bceSAndroid Build Coastguard Worker
396*35238bceSAndroid Build Coastguard Workervoid main()
397*35238bceSAndroid Build Coastguard Worker{
398*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
399*35238bceSAndroid Build Coastguard Worker}""")[1:]
400*35238bceSAndroid Build Coastguard Worker
401*35238bceSAndroid Build Coastguard WorkervalidCases = (createCases("repeat_interface_qualifier", repeatShaderTemplate, True)
402*35238bceSAndroid Build Coastguard Worker            + sum([createCases("layout_%s" % qualifier, layoutQualifierShaderTemplate % qualifier, True)
403*35238bceSAndroid Build Coastguard Worker                        for qualifier in ["shared", "packed", "std140", "row_major", "column_major"]], [])
404*35238bceSAndroid Build Coastguard Worker            + createCases("layout_all", layoutQualifierShaderTemplate % "shared, packed, std140, row_major, column_major", True)
405*35238bceSAndroid Build Coastguard Worker            + createCases("layout_all_8_times", layoutQualifierShaderTemplate % str.join(", ", ["shared", "packed", "std140", "row_major", "column_major"] * 8), True)
406*35238bceSAndroid Build Coastguard Worker            + sum([createCases("global_layout_%s" % qualifier, layoutGlobalQualifierShaderTemplate % qualifier, True)
407*35238bceSAndroid Build Coastguard Worker                        for qualifier in ["shared", "packed", "std140", "row_major", "column_major"]], [])
408*35238bceSAndroid Build Coastguard Worker            + createCases("global_layout_all", layoutGlobalQualifierShaderTemplate % "shared, packed, std140, row_major, column_major", True)
409*35238bceSAndroid Build Coastguard Worker            + createCases("global_layout_all_8_times", layoutGlobalQualifierShaderTemplate % str.join(", ", ["shared", "packed", "std140", "row_major", "column_major"] * 8), True)
410*35238bceSAndroid Build Coastguard Worker            + sum([createCases("member_layout_%s" % qualifier, layoutMemberQualifierShaderTemplate % qualifier, True)
411*35238bceSAndroid Build Coastguard Worker                        for qualifier in ["row_major", "column_major"]], [])
412*35238bceSAndroid Build Coastguard Worker            + sum([createCases("member_layout_%s_vec4" % qualifier, layoutMemberVec4QualifierShaderTemplate % qualifier, True)
413*35238bceSAndroid Build Coastguard Worker                        for qualifier in ["row_major", "column_major"]], [])
414*35238bceSAndroid Build Coastguard Worker            + createCases("member_layout_all", layoutMemberQualifierShaderTemplate % "row_major, column_major", True)
415*35238bceSAndroid Build Coastguard Worker            + createCases("member_layout_all_8_times", layoutMemberQualifierShaderTemplate % str.join(", ", ["row_major", "column_major"] * 8), True)
416*35238bceSAndroid Build Coastguard Worker            + createCases("no_instance_name", noInstanceNameShaderTemplate, True)
417*35238bceSAndroid Build Coastguard Worker            + createCases("same_variable_and_block_name", sameVariableAndBlockNameShaderTemplate, True)
418*35238bceSAndroid Build Coastguard Worker            + createCases("same_variable_and_instance_name", sameVariableAndInstanceNameShaderTemplate, True)
419*35238bceSAndroid Build Coastguard Worker            + createCases("struct_member", structMemberShaderTemplate, True)
420*35238bceSAndroid Build Coastguard Worker            + sum([createCases("struct_member_layout_%s" % qualifier, layoutStructMemberQualifierShaderTemplate % qualifier, True)
421*35238bceSAndroid Build Coastguard Worker                        for qualifier in ["row_major", "column_major"]], [])
422*35238bceSAndroid Build Coastguard Worker            + createCases("struct_member_layout_all", layoutStructMemberQualifierShaderTemplate % "row_major, column_major", True)
423*35238bceSAndroid Build Coastguard Worker            + createCases("struct_member_layout_all_8_times", layoutStructMemberQualifierShaderTemplate % str.join(", ", ["row_major", "column_major"] * 8), True)
424*35238bceSAndroid Build Coastguard Worker            + createCases("long_block_name", longIdentifierBlockNameShaderTemplate, True)
425*35238bceSAndroid Build Coastguard Worker            + createCases("long_instance_name", longIdentifierInstanceNameShaderTemplate, True)
426*35238bceSAndroid Build Coastguard Worker            + createCases("underscore_block_name", underscoreIdentifierBlockNameShaderTemplate, True)
427*35238bceSAndroid Build Coastguard Worker            + createCases("underscore_instance_name", underscoreIdentifierInstanceNameShaderTemplate, True))
428*35238bceSAndroid Build Coastguard Worker
429*35238bceSAndroid Build Coastguard WorkerinvalidMemberInterfaceQualifierShaderTemplate = """
430*35238bceSAndroid Build Coastguard Worker#version 310 es
431*35238bceSAndroid Build Coastguard Workerprecision highp float;
432*35238bceSAndroid Build Coastguard Worker
433*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
434*35238bceSAndroid Build Coastguard Worker
435*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
436*35238bceSAndroid Build Coastguard Worker{
437*35238bceSAndroid Build Coastguard Worker    %s vec4 uniformMember;
438*35238bceSAndroid Build Coastguard Worker} uniformBlock;
439*35238bceSAndroid Build Coastguard Worker
440*35238bceSAndroid Build Coastguard Workervoid main()
441*35238bceSAndroid Build Coastguard Worker{
442*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
443*35238bceSAndroid Build Coastguard Worker}"""[1:]
444*35238bceSAndroid Build Coastguard Worker
445*35238bceSAndroid Build Coastguard WorkerconflictingInstanceNamesShaderTemplate = """
446*35238bceSAndroid Build Coastguard Worker#version 310 es
447*35238bceSAndroid Build Coastguard Workerprecision highp float;
448*35238bceSAndroid Build Coastguard Worker
449*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
450*35238bceSAndroid Build Coastguard Worker
451*35238bceSAndroid Build Coastguard Workeruniform UniformBlockA
452*35238bceSAndroid Build Coastguard Worker{
453*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
454*35238bceSAndroid Build Coastguard Worker} uniformBlock;
455*35238bceSAndroid Build Coastguard Worker
456*35238bceSAndroid Build Coastguard Workeruniform UniformBlockB
457*35238bceSAndroid Build Coastguard Worker{
458*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
459*35238bceSAndroid Build Coastguard Worker} uniformBlock;
460*35238bceSAndroid Build Coastguard Worker
461*35238bceSAndroid Build Coastguard Workervoid main()
462*35238bceSAndroid Build Coastguard Worker{
463*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
464*35238bceSAndroid Build Coastguard Worker}"""[1:]
465*35238bceSAndroid Build Coastguard Worker
466*35238bceSAndroid Build Coastguard WorkerconflictingFunctionAndInstanceNameShaderTemplate = """
467*35238bceSAndroid Build Coastguard Worker#version 310 es
468*35238bceSAndroid Build Coastguard Workerprecision highp float;
469*35238bceSAndroid Build Coastguard Worker
470*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
471*35238bceSAndroid Build Coastguard Worker
472*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
473*35238bceSAndroid Build Coastguard Worker{
474*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
475*35238bceSAndroid Build Coastguard Worker} uniformBlock;
476*35238bceSAndroid Build Coastguard Worker
477*35238bceSAndroid Build Coastguard Workerfloat uniformBlock (float x)
478*35238bceSAndroid Build Coastguard Worker{
479*35238bceSAndroid Build Coastguard Worker    return x;
480*35238bceSAndroid Build Coastguard Worker}
481*35238bceSAndroid Build Coastguard Worker
482*35238bceSAndroid Build Coastguard Workervoid main()
483*35238bceSAndroid Build Coastguard Worker{
484*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
485*35238bceSAndroid Build Coastguard Worker}"""[1:]
486*35238bceSAndroid Build Coastguard Worker
487*35238bceSAndroid Build Coastguard WorkerconflictingFunctionAndBlockNameShaderTemplate = """
488*35238bceSAndroid Build Coastguard Worker#version 310 es
489*35238bceSAndroid Build Coastguard Workerprecision highp float;
490*35238bceSAndroid Build Coastguard Worker
491*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
492*35238bceSAndroid Build Coastguard Worker
493*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
494*35238bceSAndroid Build Coastguard Worker{
495*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
496*35238bceSAndroid Build Coastguard Worker} uniformBlock;
497*35238bceSAndroid Build Coastguard Worker
498*35238bceSAndroid Build Coastguard Workerfloat UniformBlock (float x)
499*35238bceSAndroid Build Coastguard Worker{
500*35238bceSAndroid Build Coastguard Worker    return x;
501*35238bceSAndroid Build Coastguard Worker}
502*35238bceSAndroid Build Coastguard Worker
503*35238bceSAndroid Build Coastguard Workervoid main()
504*35238bceSAndroid Build Coastguard Worker{
505*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
506*35238bceSAndroid Build Coastguard Worker}"""[1:]
507*35238bceSAndroid Build Coastguard Worker
508*35238bceSAndroid Build Coastguard WorkerconflictingVariableAndInstanceNameShaderTemplate = """
509*35238bceSAndroid Build Coastguard Worker#version 310 es
510*35238bceSAndroid Build Coastguard Workerprecision highp float;
511*35238bceSAndroid Build Coastguard Worker
512*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
513*35238bceSAndroid Build Coastguard Worker
514*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
515*35238bceSAndroid Build Coastguard Worker{
516*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
517*35238bceSAndroid Build Coastguard Worker} uniformBlock;
518*35238bceSAndroid Build Coastguard Worker
519*35238bceSAndroid Build Coastguard Worker%s vec4 uniformBlock;
520*35238bceSAndroid Build Coastguard Worker
521*35238bceSAndroid Build Coastguard Workervoid main()
522*35238bceSAndroid Build Coastguard Worker{
523*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
524*35238bceSAndroid Build Coastguard Worker}"""[1:]
525*35238bceSAndroid Build Coastguard Worker
526*35238bceSAndroid Build Coastguard WorkerconflictingVariableAndBlockNameShaderTemplate = """
527*35238bceSAndroid Build Coastguard Worker#version 310 es
528*35238bceSAndroid Build Coastguard Workerprecision highp float;
529*35238bceSAndroid Build Coastguard Worker
530*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
531*35238bceSAndroid Build Coastguard Worker
532*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
533*35238bceSAndroid Build Coastguard Worker{
534*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
535*35238bceSAndroid Build Coastguard Worker} uniformBlock;
536*35238bceSAndroid Build Coastguard Worker
537*35238bceSAndroid Build Coastguard Worker%s vec4 UniformBlock;
538*35238bceSAndroid Build Coastguard Worker
539*35238bceSAndroid Build Coastguard Workervoid main()
540*35238bceSAndroid Build Coastguard Worker{
541*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
542*35238bceSAndroid Build Coastguard Worker}"""[1:]
543*35238bceSAndroid Build Coastguard Worker
544*35238bceSAndroid Build Coastguard Worker
545*35238bceSAndroid Build Coastguard WorkermatchingInstanceAndBlockNameShaderTemplate = """
546*35238bceSAndroid Build Coastguard Worker#version 310 es
547*35238bceSAndroid Build Coastguard Workerprecision highp float;
548*35238bceSAndroid Build Coastguard Worker
549*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
550*35238bceSAndroid Build Coastguard Worker
551*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
552*35238bceSAndroid Build Coastguard Worker{
553*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
554*35238bceSAndroid Build Coastguard Worker} UniformBlock;
555*35238bceSAndroid Build Coastguard Worker
556*35238bceSAndroid Build Coastguard Workervoid main()
557*35238bceSAndroid Build Coastguard Worker{
558*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = UniformBlock.uniformMember;
559*35238bceSAndroid Build Coastguard Worker}"""[1:]
560*35238bceSAndroid Build Coastguard Worker
561*35238bceSAndroid Build Coastguard WorkerreferenceUsingBlockNameShaderTemplate = """
562*35238bceSAndroid Build Coastguard Worker#version 310 es
563*35238bceSAndroid Build Coastguard Workerprecision highp float;
564*35238bceSAndroid Build Coastguard Worker
565*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
566*35238bceSAndroid Build Coastguard Worker
567*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
568*35238bceSAndroid Build Coastguard Worker{
569*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
570*35238bceSAndroid Build Coastguard Worker} uniformBlock;
571*35238bceSAndroid Build Coastguard Worker
572*35238bceSAndroid Build Coastguard Workervoid main()
573*35238bceSAndroid Build Coastguard Worker{
574*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = UniformBlock.uniformMember;
575*35238bceSAndroid Build Coastguard Worker}"""[1:]
576*35238bceSAndroid Build Coastguard Worker
577*35238bceSAndroid Build Coastguard WorkeremptyBlockShaderTemplate = """
578*35238bceSAndroid Build Coastguard Worker#version 310 es
579*35238bceSAndroid Build Coastguard Workerprecision highp float;
580*35238bceSAndroid Build Coastguard Worker
581*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
582*35238bceSAndroid Build Coastguard Worker
583*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
584*35238bceSAndroid Build Coastguard Worker{
585*35238bceSAndroid Build Coastguard Worker} uniformBlock;
586*35238bceSAndroid Build Coastguard Worker
587*35238bceSAndroid Build Coastguard Workervoid main()
588*35238bceSAndroid Build Coastguard Worker{
589*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = vec4(0.0);
590*35238bceSAndroid Build Coastguard Worker}"""[1:]
591*35238bceSAndroid Build Coastguard Worker
592*35238bceSAndroid Build Coastguard WorkeremptyLayoutShaderTemplate = """
593*35238bceSAndroid Build Coastguard Worker#version 310 es
594*35238bceSAndroid Build Coastguard Workerprecision highp float;
595*35238bceSAndroid Build Coastguard Worker
596*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
597*35238bceSAndroid Build Coastguard Worker
598*35238bceSAndroid Build Coastguard Workerlayout() uniform UniformBlock
599*35238bceSAndroid Build Coastguard Worker{
600*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
601*35238bceSAndroid Build Coastguard Worker} uniformBlock;
602*35238bceSAndroid Build Coastguard Worker
603*35238bceSAndroid Build Coastguard Workervoid main()
604*35238bceSAndroid Build Coastguard Worker{
605*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
606*35238bceSAndroid Build Coastguard Worker}"""[1:]
607*35238bceSAndroid Build Coastguard Worker
608*35238bceSAndroid Build Coastguard WorkeremptyGlobalLayoutShaderTemplate = """
609*35238bceSAndroid Build Coastguard Worker#version 310 es
610*35238bceSAndroid Build Coastguard Workerprecision highp float;
611*35238bceSAndroid Build Coastguard Worker
612*35238bceSAndroid Build Coastguard Workerlayout() uniform;
613*35238bceSAndroid Build Coastguard Worker
614*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
615*35238bceSAndroid Build Coastguard Worker
616*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
617*35238bceSAndroid Build Coastguard Worker{
618*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
619*35238bceSAndroid Build Coastguard Worker} uniformBlock;
620*35238bceSAndroid Build Coastguard Worker
621*35238bceSAndroid Build Coastguard Workervoid main()
622*35238bceSAndroid Build Coastguard Worker{
623*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
624*35238bceSAndroid Build Coastguard Worker}"""[1:]
625*35238bceSAndroid Build Coastguard Worker
626*35238bceSAndroid Build Coastguard WorkeremptyMemberLayoutShaderTemplate = """
627*35238bceSAndroid Build Coastguard Worker#version 310 es
628*35238bceSAndroid Build Coastguard Workerprecision highp float;
629*35238bceSAndroid Build Coastguard Worker
630*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
631*35238bceSAndroid Build Coastguard Worker
632*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
633*35238bceSAndroid Build Coastguard Worker{
634*35238bceSAndroid Build Coastguard Worker    layout() vec4 uniformMember;
635*35238bceSAndroid Build Coastguard Worker} uniformBlock;
636*35238bceSAndroid Build Coastguard Worker
637*35238bceSAndroid Build Coastguard Workervoid main()
638*35238bceSAndroid Build Coastguard Worker{
639*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
640*35238bceSAndroid Build Coastguard Worker}"""[1:]
641*35238bceSAndroid Build Coastguard Worker
642*35238bceSAndroid Build Coastguard WorkerinvalidMemberLayoutShaderTemplate = """
643*35238bceSAndroid Build Coastguard Worker#version 310 es
644*35238bceSAndroid Build Coastguard Workerprecision highp float;
645*35238bceSAndroid Build Coastguard Worker
646*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
647*35238bceSAndroid Build Coastguard Worker
648*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
649*35238bceSAndroid Build Coastguard Worker{
650*35238bceSAndroid Build Coastguard Worker    layout(%s) vec4 uniformMember;
651*35238bceSAndroid Build Coastguard Worker} uniformBlock;
652*35238bceSAndroid Build Coastguard Worker
653*35238bceSAndroid Build Coastguard Workervoid main()
654*35238bceSAndroid Build Coastguard Worker{
655*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
656*35238bceSAndroid Build Coastguard Worker}"""[1:]
657*35238bceSAndroid Build Coastguard Worker
658*35238bceSAndroid Build Coastguard WorkerstructureDefinitionShaderTemplate = """
659*35238bceSAndroid Build Coastguard Worker#version 310 es
660*35238bceSAndroid Build Coastguard Workerprecision highp float;
661*35238bceSAndroid Build Coastguard Worker
662*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
663*35238bceSAndroid Build Coastguard Worker
664*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
665*35238bceSAndroid Build Coastguard Worker{
666*35238bceSAndroid Build Coastguard Worker    struct A
667*35238bceSAndroid Build Coastguard Worker    {
668*35238bceSAndroid Build Coastguard Worker        vec4 uniformMember;
669*35238bceSAndroid Build Coastguard Worker    } a;
670*35238bceSAndroid Build Coastguard Worker} uniformBlock;
671*35238bceSAndroid Build Coastguard Worker
672*35238bceSAndroid Build Coastguard Workervoid main()
673*35238bceSAndroid Build Coastguard Worker{
674*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.a.uniformMember;
675*35238bceSAndroid Build Coastguard Worker}"""[1:]
676*35238bceSAndroid Build Coastguard Worker
677*35238bceSAndroid Build Coastguard WorkersamplerShaderTemplate = """
678*35238bceSAndroid Build Coastguard Worker#version 310 es
679*35238bceSAndroid Build Coastguard Workerprecision highp float;
680*35238bceSAndroid Build Coastguard Worker
681*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
682*35238bceSAndroid Build Coastguard Worker
683*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
684*35238bceSAndroid Build Coastguard Worker{
685*35238bceSAndroid Build Coastguard Worker    sampler2D sampler;
686*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
687*35238bceSAndroid Build Coastguard Worker} uniformBlock;
688*35238bceSAndroid Build Coastguard Worker
689*35238bceSAndroid Build Coastguard Workervoid main()
690*35238bceSAndroid Build Coastguard Worker{
691*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
692*35238bceSAndroid Build Coastguard Worker}"""[1:]
693*35238bceSAndroid Build Coastguard Worker
694*35238bceSAndroid Build Coastguard WorkermissingBlockNameShaderTemplate = """
695*35238bceSAndroid Build Coastguard Worker#version 310 es
696*35238bceSAndroid Build Coastguard Workerprecision highp float;
697*35238bceSAndroid Build Coastguard Worker
698*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
699*35238bceSAndroid Build Coastguard Worker
700*35238bceSAndroid Build Coastguard Workeruniform
701*35238bceSAndroid Build Coastguard Worker{
702*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
703*35238bceSAndroid Build Coastguard Worker} uniformBlock;
704*35238bceSAndroid Build Coastguard Worker
705*35238bceSAndroid Build Coastguard Workervoid main()
706*35238bceSAndroid Build Coastguard Worker{
707*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
708*35238bceSAndroid Build Coastguard Worker}"""[1:]
709*35238bceSAndroid Build Coastguard Worker
710*35238bceSAndroid Build Coastguard WorkerinvalidNumberBlockNameShaderTemplate = """
711*35238bceSAndroid Build Coastguard Worker#version 310 es
712*35238bceSAndroid Build Coastguard Workerprecision highp float;
713*35238bceSAndroid Build Coastguard Worker
714*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
715*35238bceSAndroid Build Coastguard Worker
716*35238bceSAndroid Build Coastguard Workeruniform 0UniformBlock
717*35238bceSAndroid Build Coastguard Worker{
718*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
719*35238bceSAndroid Build Coastguard Worker} uniformBlock;
720*35238bceSAndroid Build Coastguard Worker
721*35238bceSAndroid Build Coastguard Workervoid main()
722*35238bceSAndroid Build Coastguard Worker{
723*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
724*35238bceSAndroid Build Coastguard Worker}"""[1:]
725*35238bceSAndroid Build Coastguard Worker
726*35238bceSAndroid Build Coastguard WorkerinvalidHashBlockNameShaderTemplate = """
727*35238bceSAndroid Build Coastguard Worker#version 310 es
728*35238bceSAndroid Build Coastguard Workerprecision highp float;
729*35238bceSAndroid Build Coastguard Worker
730*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
731*35238bceSAndroid Build Coastguard Worker
732*35238bceSAndroid Build Coastguard Workeruniform #UniformBlock
733*35238bceSAndroid Build Coastguard Worker{
734*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
735*35238bceSAndroid Build Coastguard Worker} uniformBlock;
736*35238bceSAndroid Build Coastguard Worker
737*35238bceSAndroid Build Coastguard Workervoid main()
738*35238bceSAndroid Build Coastguard Worker{
739*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
740*35238bceSAndroid Build Coastguard Worker}"""[1:]
741*35238bceSAndroid Build Coastguard Worker
742*35238bceSAndroid Build Coastguard WorkerinvalidDollarBlockNameShaderTemplate = """
743*35238bceSAndroid Build Coastguard Worker#version 310 es
744*35238bceSAndroid Build Coastguard Workerprecision highp float;
745*35238bceSAndroid Build Coastguard Worker
746*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
747*35238bceSAndroid Build Coastguard Worker
748*35238bceSAndroid Build Coastguard Workeruniform $UniformBlock
749*35238bceSAndroid Build Coastguard Worker{
750*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
751*35238bceSAndroid Build Coastguard Worker} uniformBlock;
752*35238bceSAndroid Build Coastguard Worker
753*35238bceSAndroid Build Coastguard Workervoid main()
754*35238bceSAndroid Build Coastguard Worker{
755*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
756*35238bceSAndroid Build Coastguard Worker}"""[1:]
757*35238bceSAndroid Build Coastguard Worker
758*35238bceSAndroid Build Coastguard WorkerinvalidIdentifierBlockNameShaderTemplate = """
759*35238bceSAndroid Build Coastguard Worker#version 310 es
760*35238bceSAndroid Build Coastguard Workerprecision highp float;
761*35238bceSAndroid Build Coastguard Worker
762*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
763*35238bceSAndroid Build Coastguard Worker
764*35238bceSAndroid Build Coastguard Workeruniform gl_UniformBlock
765*35238bceSAndroid Build Coastguard Worker{
766*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
767*35238bceSAndroid Build Coastguard Worker} uniformBlock;
768*35238bceSAndroid Build Coastguard Worker
769*35238bceSAndroid Build Coastguard Workervoid main()
770*35238bceSAndroid Build Coastguard Worker{
771*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
772*35238bceSAndroid Build Coastguard Worker}"""[1:]
773*35238bceSAndroid Build Coastguard Worker
774*35238bceSAndroid Build Coastguard WorkertooLongIdentifierBlockNameShaderTemplate = ("""
775*35238bceSAndroid Build Coastguard Worker#version 310 es
776*35238bceSAndroid Build Coastguard Workerprecision highp float;
777*35238bceSAndroid Build Coastguard Worker
778*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
779*35238bceSAndroid Build Coastguard Worker
780*35238bceSAndroid Build Coastguard Worker// Total of 1025 characters
781*35238bceSAndroid Build Coastguard Workeruniform """ + ("a" * 1025) + """
782*35238bceSAndroid Build Coastguard Worker{
783*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
784*35238bceSAndroid Build Coastguard Worker} uniformBlock;
785*35238bceSAndroid Build Coastguard Worker
786*35238bceSAndroid Build Coastguard Workervoid main()
787*35238bceSAndroid Build Coastguard Worker{
788*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = uniformBlock.uniformMember;
789*35238bceSAndroid Build Coastguard Worker}""")[1:]
790*35238bceSAndroid Build Coastguard Worker
791*35238bceSAndroid Build Coastguard WorkerinvalidNumberInstanceNameShaderTemplate = """
792*35238bceSAndroid Build Coastguard Worker#version 310 es
793*35238bceSAndroid Build Coastguard Workerprecision highp float;
794*35238bceSAndroid Build Coastguard Worker
795*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
796*35238bceSAndroid Build Coastguard Worker
797*35238bceSAndroid Build Coastguard Workeruniform UniformInstance
798*35238bceSAndroid Build Coastguard Worker{
799*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
800*35238bceSAndroid Build Coastguard Worker} 0uniformBlock;
801*35238bceSAndroid Build Coastguard Worker
802*35238bceSAndroid Build Coastguard Workervoid main()
803*35238bceSAndroid Build Coastguard Worker{
804*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = 0uniformBlock.uniformMember;
805*35238bceSAndroid Build Coastguard Worker}"""[1:]
806*35238bceSAndroid Build Coastguard Worker
807*35238bceSAndroid Build Coastguard WorkerinvalidHashInstanceNameShaderTemplate = """
808*35238bceSAndroid Build Coastguard Worker#version 310 es
809*35238bceSAndroid Build Coastguard Workerprecision highp float;
810*35238bceSAndroid Build Coastguard Worker
811*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
812*35238bceSAndroid Build Coastguard Worker
813*35238bceSAndroid Build Coastguard Workeruniform UniformInstance
814*35238bceSAndroid Build Coastguard Worker{
815*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
816*35238bceSAndroid Build Coastguard Worker} #uniformBlock;
817*35238bceSAndroid Build Coastguard Worker
818*35238bceSAndroid Build Coastguard Workervoid main()
819*35238bceSAndroid Build Coastguard Worker{
820*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = #uniformBlock.uniformMember;
821*35238bceSAndroid Build Coastguard Worker}"""[1:]
822*35238bceSAndroid Build Coastguard Worker
823*35238bceSAndroid Build Coastguard WorkerinvalidDollarInstanceNameShaderTemplate = """
824*35238bceSAndroid Build Coastguard Worker#version 310 es
825*35238bceSAndroid Build Coastguard Workerprecision highp float;
826*35238bceSAndroid Build Coastguard Worker
827*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
828*35238bceSAndroid Build Coastguard Worker
829*35238bceSAndroid Build Coastguard Workeruniform UniformInstance
830*35238bceSAndroid Build Coastguard Worker{
831*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
832*35238bceSAndroid Build Coastguard Worker} $uniformBlock;
833*35238bceSAndroid Build Coastguard Worker
834*35238bceSAndroid Build Coastguard Workervoid main()
835*35238bceSAndroid Build Coastguard Worker{
836*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = $uniformBlock.uniformMember;
837*35238bceSAndroid Build Coastguard Worker}"""[1:]
838*35238bceSAndroid Build Coastguard Worker
839*35238bceSAndroid Build Coastguard WorkerinvalidIdentifierInstanceNameShaderTemplate = """
840*35238bceSAndroid Build Coastguard Worker#version 310 es
841*35238bceSAndroid Build Coastguard Workerprecision highp float;
842*35238bceSAndroid Build Coastguard Worker
843*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
844*35238bceSAndroid Build Coastguard Worker
845*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
846*35238bceSAndroid Build Coastguard Worker{
847*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
848*35238bceSAndroid Build Coastguard Worker} gl_uniformBlock;
849*35238bceSAndroid Build Coastguard Worker
850*35238bceSAndroid Build Coastguard Workervoid main()
851*35238bceSAndroid Build Coastguard Worker{
852*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = gl_uniformBlock.uniformMember;
853*35238bceSAndroid Build Coastguard Worker}"""[1:]
854*35238bceSAndroid Build Coastguard Worker
855*35238bceSAndroid Build Coastguard WorkertooLongIdentifierInstanceNameShaderTemplate = ("""
856*35238bceSAndroid Build Coastguard Worker#version 310 es
857*35238bceSAndroid Build Coastguard Workerprecision highp float;
858*35238bceSAndroid Build Coastguard Worker
859*35238bceSAndroid Build Coastguard Worker${{OUTPUT_DECLARATION}}
860*35238bceSAndroid Build Coastguard Worker
861*35238bceSAndroid Build Coastguard Workeruniform UniformBlock
862*35238bceSAndroid Build Coastguard Worker{
863*35238bceSAndroid Build Coastguard Worker    vec4 uniformMember;
864*35238bceSAndroid Build Coastguard Worker} """ + ("a" * 1025) + """;
865*35238bceSAndroid Build Coastguard Worker// Total of 1025 characters
866*35238bceSAndroid Build Coastguard Worker
867*35238bceSAndroid Build Coastguard Workervoid main()
868*35238bceSAndroid Build Coastguard Worker{
869*35238bceSAndroid Build Coastguard Worker    ${{OUTPUT}} = """ + ("a" * 1025) + """.uniformMember;
870*35238bceSAndroid Build Coastguard Worker}""")[1:]
871*35238bceSAndroid Build Coastguard Worker
872*35238bceSAndroid Build Coastguard WorkerinvalidCases = (
873*35238bceSAndroid Build Coastguard Worker            sum([createCases("member_%s_interface_qualifier" % qualifier, invalidMemberInterfaceQualifierShaderTemplate % qualifier, False)
874*35238bceSAndroid Build Coastguard Worker                    for qualifier in ["in", "out", "buffer", "attribute", "varying"]], [])
875*35238bceSAndroid Build Coastguard Worker            + createCases("conflicting_instance_names", conflictingInstanceNamesShaderTemplate, False)
876*35238bceSAndroid Build Coastguard Worker            + createCases("conflicting_function_and_instance_name", conflictingFunctionAndInstanceNameShaderTemplate, False)
877*35238bceSAndroid Build Coastguard Worker            + createCases("conflicting_function_and_block_name", conflictingFunctionAndBlockNameShaderTemplate, False)
878*35238bceSAndroid Build Coastguard Worker            + sum([createCases("conflicting_%s_and_instance_name" % qualifier, conflictingVariableAndInstanceNameShaderTemplate % qualifier, False)
879*35238bceSAndroid Build Coastguard Worker                    for qualifier in ["uniform", "in", "out"]], [])
880*35238bceSAndroid Build Coastguard Worker            + sum([createCases("conflicting_%s_and_block_name" % qualifier, conflictingVariableAndBlockNameShaderTemplate % qualifier, False)
881*35238bceSAndroid Build Coastguard Worker                    for qualifier in ["uniform", "in", "out"]], [])
882*35238bceSAndroid Build Coastguard Worker            + createCases("matching_instance_and_block_name", matchingInstanceAndBlockNameShaderTemplate, False)
883*35238bceSAndroid Build Coastguard Worker            + createCases("reference_using_block_name", referenceUsingBlockNameShaderTemplate, False)
884*35238bceSAndroid Build Coastguard Worker            + createCases("empty_block", emptyBlockShaderTemplate, False)
885*35238bceSAndroid Build Coastguard Worker            + createCases("empty_layout", emptyLayoutShaderTemplate, False)
886*35238bceSAndroid Build Coastguard Worker            + createCases("empty_member_layout", emptyMemberLayoutShaderTemplate, False)
887*35238bceSAndroid Build Coastguard Worker            + createCases("empty_global_layout", emptyGlobalLayoutShaderTemplate, False)
888*35238bceSAndroid Build Coastguard Worker            + createCases("structure_definition", structureDefinitionShaderTemplate, False)
889*35238bceSAndroid Build Coastguard Worker            + sum([createCases("member_layout_%s" % qualifier, invalidMemberLayoutShaderTemplate % qualifier, False)
890*35238bceSAndroid Build Coastguard Worker                    for qualifier in ["shared", "packed", "std140" "std430",]], [])
891*35238bceSAndroid Build Coastguard Worker            + createCases("missing_block_name", missingBlockNameShaderTemplate, False)
892*35238bceSAndroid Build Coastguard Worker            + createCases("invalid_number_block_name", invalidNumberBlockNameShaderTemplate, False)
893*35238bceSAndroid Build Coastguard Worker            + createCases("invalid_identifier_block_name", invalidIdentifierBlockNameShaderTemplate, False)
894*35238bceSAndroid Build Coastguard Worker            + createCases("invalid_hash_block_name", invalidHashBlockNameShaderTemplate, False)
895*35238bceSAndroid Build Coastguard Worker            + createCases("invalid_dollar_block_name", invalidDollarBlockNameShaderTemplate, False)
896*35238bceSAndroid Build Coastguard Worker            + createCases("too_long_block_name", tooLongIdentifierBlockNameShaderTemplate, False)
897*35238bceSAndroid Build Coastguard Worker            + createCases("invalid_number_instance_name", invalidNumberInstanceNameShaderTemplate, False)
898*35238bceSAndroid Build Coastguard Worker            + createCases("invalid_identifier_instance_name", invalidIdentifierInstanceNameShaderTemplate, False)
899*35238bceSAndroid Build Coastguard Worker            + createCases("invalid_hash_instance_name", invalidHashInstanceNameShaderTemplate, False)
900*35238bceSAndroid Build Coastguard Worker            + createCases("invalid_dollar_instance_name", invalidDollarInstanceNameShaderTemplate, False)
901*35238bceSAndroid Build Coastguard Worker            + createCases("repeated_block", repeatedBlockShaderTemplate, False)
902*35238bceSAndroid Build Coastguard Worker            + createCases("repeated_block_no_instance_name", repeatedBlockNoInstanceNameShaderTemplate, False)
903*35238bceSAndroid Build Coastguard Worker            + sum([createCases("layout_%s" % qualifier, layoutQualifierShaderTemplate % qualifier, False)
904*35238bceSAndroid Build Coastguard Worker                        for qualifier in ["std430"]], [])
905*35238bceSAndroid Build Coastguard Worker            + sum([createCases("global_layout_%s" % qualifier, layoutGlobalQualifierShaderTemplate % qualifier, False)
906*35238bceSAndroid Build Coastguard Worker                        for qualifier in ["std430"]], [])
907*35238bceSAndroid Build Coastguard Worker        )
908*35238bceSAndroid Build Coastguard Worker
909*35238bceSAndroid Build Coastguard WorkerallCases.append(CaseGroup("valid", "Valid uniform interface block syntax tests.", validCases))
910*35238bceSAndroid Build Coastguard WorkerallCases.append(CaseGroup("invalid", "Invalid uniform interface block syntax tests.", invalidCases))
911*35238bceSAndroid Build Coastguard Worker
912*35238bceSAndroid Build Coastguard Workerif __name__ == "__main__":
913*35238bceSAndroid Build Coastguard Worker    print("Generating shader case files.")
914*35238bceSAndroid Build Coastguard Worker    writeAllCases("uniform_block.test", allCases)
915