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