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