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