1{ 2 "General":{ 3 "comment":[ 4 " Copyright 2018 The ANGLE Project Authors. All rights reserved.", 5 " Use of this source code is governed by a BSD-style license that can be", 6 " found in the LICENSE file.", 7 "", 8 " The schema of this JSON file is as follows:", 9 "", 10 " The top-level object contains variable groups. Each group can have the following", 11 " properties:", 12 " variables: Object mapping variable names to variable properties.", 13 " subgroups: Object with more groups that fall under the top-level group.", 14 " shader_type: The type of shader this variable is supported in", 15 " Each variable can have the following properties:", 16 " essl_level: ESSL symbol table level where the variable is contained.", 17 " glsl_level: GLSL symbol table level where the variable is contained.", 18 " type: Object with properties of the type. Can be substituted with initDynamicType.", 19 " initDynamicType: Template string with C++ code for initializing a TType * with the", 20 " name {type_name}. The name will be replaced when generating code.", 21 " May refer to names of previously listed structs or interface", 22 " blocks.", 23 " essl_extension: Optional. Name of the ESSL extension where this variable is from.", 24 " glsl_extension: Optional. Name of the GLSL extension where this variable is from.", 25 " value: Optional. String that has one valid value: 'resources'. Denotes that the", 26 " value of the variable should be based on the field of ShBuiltInResources", 27 " with the same name as the variable.", 28 " class: Optional. To be used for interface block or struct definitions. Valid", 29 " values are 'TStructure' or 'TInterfaceBlock'.", 30 " fields: Optional. Object to be used for storing fields of interface block and", 31 " struct definitions. Maps field names to field types.", 32 " suffix: Optional. Suffix to give C++ variables storing the properties of this", 33 " variable a unique name that doesn't conflict with C++ keywords.", 34 " Each type can have the following properties:", 35 " basic: Basic type as in the TBasicType enum without the Ebt prefix.", 36 " precision: Precision as in TPrecision enum without the Ebp prefix.", 37 " qualifier: Optional. Qualifier as in the TQualifier enum without the Evq prefix.", 38 " primarySize: Optional. Vector size or matrix column count.", 39 " secondarySize: Optional. Matrix row count.", 40 " Any group, variable or type can have the property 'comment'." 41 ], 42 "variables":{ 43 "gl_DepthRangeParameters":{ 44 "class":"TStructure", 45 "essl_level":"COMMON_BUILTINS", 46 "fields":{ 47 "near":{ 48 "basic":"Float", 49 "precision":"High" 50 }, 51 "far":{ 52 "basic":"Float", 53 "precision":"High" 54 }, 55 "diff":{ 56 "basic":"Float", 57 "precision":"High" 58 } 59 } 60 }, 61 "gl_DepthRange":{ 62 "essl_level":"COMMON_BUILTINS", 63 "initDynamicType":"TType *{type_name} = new TType(gl_DepthRangeParameters, false); {type_name}->setQualifier(EvqUniform);" 64 } 65 } 66 }, 67 "Constants":{ 68 "variables":{ 69 "gl_MaxVertexAttribs":{ 70 "essl_level":"COMMON_BUILTINS", 71 "type":{ 72 "basic":"Int", 73 "precision":"Medium", 74 "qualifier":"Const" 75 }, 76 "value":"resources" 77 }, 78 "gl_MaxVertexUniformVectors":{ 79 "essl_level":"COMMON_BUILTINS", 80 "type":{ 81 "basic":"Int", 82 "precision":"Medium", 83 "qualifier":"Const" 84 }, 85 "value":"resources" 86 }, 87 "gl_MaxVertexTextureImageUnits":{ 88 "essl_level":"COMMON_BUILTINS", 89 "type":{ 90 "basic":"Int", 91 "precision":"Medium", 92 "qualifier":"Const" 93 }, 94 "value":"resources" 95 }, 96 "gl_MaxCombinedTextureImageUnits":{ 97 "essl_level":"COMMON_BUILTINS", 98 "type":{ 99 "basic":"Int", 100 "precision":"Medium", 101 "qualifier":"Const" 102 }, 103 "value":"resources" 104 }, 105 "gl_MaxTextureImageUnits":{ 106 "essl_level":"COMMON_BUILTINS", 107 "type":{ 108 "basic":"Int", 109 "precision":"Medium", 110 "qualifier":"Const" 111 }, 112 "value":"resources" 113 }, 114 "gl_MaxFragmentUniformVectors":{ 115 "essl_level":"COMMON_BUILTINS", 116 "type":{ 117 "basic":"Int", 118 "precision":"Medium", 119 "qualifier":"Const" 120 }, 121 "value":"resources" 122 }, 123 "gl_MaxVaryingVectors":{ 124 "essl_level":"ESSL1_BUILTINS", 125 "type":{ 126 "basic":"Int", 127 "precision":"Medium", 128 "qualifier":"Const" 129 }, 130 "value":"resources" 131 }, 132 "gl_MaxDrawBuffers":{ 133 "essl_level":"COMMON_BUILTINS", 134 "type":{ 135 "basic":"Int", 136 "precision":"Medium", 137 "qualifier":"Const" 138 }, 139 "value":"resources" 140 }, 141 "gl_MaxDualSourceDrawBuffersEXT":{ 142 "essl_level":"COMMON_BUILTINS", 143 "type":{ 144 "basic":"Int", 145 "precision":"Medium", 146 "qualifier":"Const" 147 }, 148 "essl_extension":"EXT_blend_func_extended", 149 "value":"resources", 150 "valueKey":"MaxDualSourceDrawBuffers" 151 }, 152 "gl_MaxVertexOutputVectors":{ 153 "essl_level":"ESSL3_BUILTINS", 154 "type":{ 155 "basic":"Int", 156 "precision":"Medium", 157 "qualifier":"Const" 158 }, 159 "value":"resources" 160 }, 161 "gl_MaxFragmentInputVectors":{ 162 "essl_level":"ESSL3_BUILTINS", 163 "type":{ 164 "basic":"Int", 165 "precision":"Medium", 166 "qualifier":"Const" 167 }, 168 "value":"resources" 169 }, 170 "gl_MinProgramTexelOffset":{ 171 "essl_level":"ESSL3_BUILTINS", 172 "type":{ 173 "basic":"Int", 174 "precision":"Medium", 175 "qualifier":"Const" 176 }, 177 "value":"resources" 178 }, 179 "gl_MaxProgramTexelOffset":{ 180 "essl_level":"ESSL3_BUILTINS", 181 "type":{ 182 "basic":"Int", 183 "precision":"Medium", 184 "qualifier":"Const" 185 }, 186 "value":"resources" 187 }, 188 "gl_MaxImageUnits":{ 189 "essl_level":"ESSL3_1_BUILTINS", 190 "type":{ 191 "basic":"Int", 192 "precision":"Medium", 193 "qualifier":"Const" 194 }, 195 "value":"resources" 196 }, 197 "gl_MaxVertexImageUniforms":{ 198 "essl_level":"ESSL3_1_BUILTINS", 199 "type":{ 200 "basic":"Int", 201 "precision":"Medium", 202 "qualifier":"Const" 203 }, 204 "value":"resources" 205 }, 206 "gl_MaxFragmentImageUniforms":{ 207 "essl_level":"ESSL3_1_BUILTINS", 208 "type":{ 209 "basic":"Int", 210 "precision":"Medium", 211 "qualifier":"Const" 212 }, 213 "value":"resources" 214 }, 215 "gl_MaxComputeImageUniforms":{ 216 "essl_level":"ESSL3_1_BUILTINS", 217 "type":{ 218 "basic":"Int", 219 "precision":"Medium", 220 "qualifier":"Const" 221 }, 222 "value":"resources" 223 }, 224 "gl_MaxCombinedImageUniforms":{ 225 "essl_level":"ESSL3_1_BUILTINS", 226 "type":{ 227 "basic":"Int", 228 "precision":"Medium", 229 "qualifier":"Const" 230 }, 231 "value":"resources" 232 }, 233 "gl_MaxCombinedShaderOutputResources":{ 234 "essl_level":"ESSL3_1_BUILTINS", 235 "type":{ 236 "basic":"Int", 237 "precision":"Medium", 238 "qualifier":"Const" 239 }, 240 "value":"resources" 241 }, 242 "gl_MaxComputeWorkGroupCount":{ 243 "essl_level":"ESSL3_1_BUILTINS", 244 "type":{ 245 "basic":"Int", 246 "precision":"High", 247 "qualifier":"Const", 248 "primarySize":3 249 }, 250 "value":"resources" 251 }, 252 "gl_MaxComputeWorkGroupSize":{ 253 "essl_level":"ESSL3_1_BUILTINS", 254 "type":{ 255 "basic":"Int", 256 "precision":"High", 257 "qualifier":"Const", 258 "primarySize":3 259 }, 260 "value":"resources" 261 }, 262 "gl_MaxComputeUniformComponents":{ 263 "essl_level":"ESSL3_1_BUILTINS", 264 "type":{ 265 "basic":"Int", 266 "precision":"Medium", 267 "qualifier":"Const" 268 }, 269 "value":"resources" 270 }, 271 "gl_MaxComputeTextureImageUnits":{ 272 "essl_level":"ESSL3_1_BUILTINS", 273 "type":{ 274 "basic":"Int", 275 "precision":"Medium", 276 "qualifier":"Const" 277 }, 278 "value":"resources" 279 }, 280 "gl_MaxComputeAtomicCounters":{ 281 "essl_level":"ESSL3_1_BUILTINS", 282 "type":{ 283 "basic":"Int", 284 "precision":"Medium", 285 "qualifier":"Const" 286 }, 287 "value":"resources" 288 }, 289 "gl_MaxComputeAtomicCounterBuffers":{ 290 "essl_level":"ESSL3_1_BUILTINS", 291 "type":{ 292 "basic":"Int", 293 "precision":"Medium", 294 "qualifier":"Const" 295 }, 296 "value":"resources" 297 }, 298 "gl_MaxVertexAtomicCounters":{ 299 "essl_level":"ESSL3_1_BUILTINS", 300 "type":{ 301 "basic":"Int", 302 "precision":"Medium", 303 "qualifier":"Const" 304 }, 305 "value":"resources" 306 }, 307 "gl_MaxFragmentAtomicCounters":{ 308 "essl_level":"ESSL3_1_BUILTINS", 309 "type":{ 310 "basic":"Int", 311 "precision":"Medium", 312 "qualifier":"Const" 313 }, 314 "value":"resources" 315 }, 316 "gl_MaxCombinedAtomicCounters":{ 317 "essl_level":"ESSL3_1_BUILTINS", 318 "type":{ 319 "basic":"Int", 320 "precision":"Medium", 321 "qualifier":"Const" 322 }, 323 "value":"resources" 324 }, 325 "gl_MaxAtomicCounterBindings":{ 326 "essl_level":"ESSL3_1_BUILTINS", 327 "type":{ 328 "basic":"Int", 329 "precision":"Medium", 330 "qualifier":"Const" 331 }, 332 "value":"resources" 333 }, 334 "gl_MaxVertexAtomicCounterBuffers":{ 335 "essl_level":"ESSL3_1_BUILTINS", 336 "type":{ 337 "basic":"Int", 338 "precision":"Medium", 339 "qualifier":"Const" 340 }, 341 "value":"resources" 342 }, 343 "gl_MaxFragmentAtomicCounterBuffers":{ 344 "essl_level":"ESSL3_1_BUILTINS", 345 "type":{ 346 "basic":"Int", 347 "precision":"Medium", 348 "qualifier":"Const" 349 }, 350 "value":"resources" 351 }, 352 "gl_MaxCombinedAtomicCounterBuffers":{ 353 "essl_level":"ESSL3_1_BUILTINS", 354 "type":{ 355 "basic":"Int", 356 "precision":"Medium", 357 "qualifier":"Const" 358 }, 359 "value":"resources" 360 }, 361 "gl_MaxAtomicCounterBufferSize":{ 362 "essl_level":"ESSL3_1_BUILTINS", 363 "type":{ 364 "basic":"Int", 365 "precision":"Medium", 366 "qualifier":"Const" 367 }, 368 "value":"resources" 369 } 370 }, 371 "subgroups":{ 372 "EXTGeometryShader":{ 373 "variables":{ 374 "gl_MaxGeometryInputComponents":{ 375 "essl_level":"ESSL3_1_BUILTINS", 376 "type":{ 377 "basic":"Int", 378 "precision":"Medium", 379 "qualifier":"Const" 380 }, 381 "essl_extension":"EXT_geometry_shader", 382 "value":"resources" 383 }, 384 "gl_MaxGeometryOutputComponents":{ 385 "essl_level":"ESSL3_1_BUILTINS", 386 "type":{ 387 "basic":"Int", 388 "precision":"Medium", 389 "qualifier":"Const" 390 }, 391 "essl_extension":"EXT_geometry_shader", 392 "value":"resources" 393 }, 394 "gl_MaxGeometryImageUniforms":{ 395 "essl_level":"ESSL3_1_BUILTINS", 396 "type":{ 397 "basic":"Int", 398 "precision":"Medium", 399 "qualifier":"Const" 400 }, 401 "essl_extension":"EXT_geometry_shader", 402 "value":"resources" 403 }, 404 "gl_MaxGeometryTextureImageUnits":{ 405 "essl_level":"ESSL3_1_BUILTINS", 406 "type":{ 407 "basic":"Int", 408 "precision":"Medium", 409 "qualifier":"Const" 410 }, 411 "essl_extension":"EXT_geometry_shader", 412 "value":"resources" 413 }, 414 "gl_MaxGeometryOutputVertices":{ 415 "essl_level":"ESSL3_1_BUILTINS", 416 "type":{ 417 "basic":"Int", 418 "precision":"Medium", 419 "qualifier":"Const" 420 }, 421 "essl_extension":"EXT_geometry_shader", 422 "value":"resources" 423 }, 424 "gl_MaxGeometryTotalOutputComponents":{ 425 "essl_level":"ESSL3_1_BUILTINS", 426 "type":{ 427 "basic":"Int", 428 "precision":"Medium", 429 "qualifier":"Const" 430 }, 431 "essl_extension":"EXT_geometry_shader", 432 "value":"resources" 433 }, 434 "gl_MaxGeometryUniformComponents":{ 435 "essl_level":"ESSL3_1_BUILTINS", 436 "type":{ 437 "basic":"Int", 438 "precision":"Medium", 439 "qualifier":"Const" 440 }, 441 "essl_extension":"EXT_geometry_shader", 442 "value":"resources" 443 }, 444 "gl_MaxGeometryAtomicCounters":{ 445 "essl_level":"ESSL3_1_BUILTINS", 446 "type":{ 447 "basic":"Int", 448 "precision":"Medium", 449 "qualifier":"Const" 450 }, 451 "essl_extension":"EXT_geometry_shader", 452 "value":"resources" 453 }, 454 "gl_MaxGeometryAtomicCounterBuffers":{ 455 "essl_level":"ESSL3_1_BUILTINS", 456 "type":{ 457 "basic":"Int", 458 "precision":"Medium", 459 "qualifier":"Const" 460 }, 461 "essl_extension":"EXT_geometry_shader", 462 "value":"resources" 463 } 464 } 465 } 466 } 467 }, 468 "FragShader":{ 469 "shader_type": "FRAGMENT", 470 "variables":{ 471 "gl_FragCoord":{ 472 "essl_level":"COMMON_BUILTINS", 473 "type":{ 474 "basic":"Float", 475 "precision":"Medium", 476 "qualifier":"FragCoord", 477 "primarySize":4 478 } 479 }, 480 "gl_FrontFacing":{ 481 "essl_level":"COMMON_BUILTINS", 482 "type":{ 483 "basic":"Bool", 484 "qualifier":"FrontFacing" 485 } 486 }, 487 "gl_PointCoord":{ 488 "essl_level":"COMMON_BUILTINS", 489 "type":{ 490 "basic":"Float", 491 "precision":"Medium", 492 "qualifier":"PointCoord", 493 "primarySize":2 494 } 495 }, 496 "gl_FragColor":{ 497 "essl_level":"ESSL1_BUILTINS", 498 "type":{ 499 "basic":"Float", 500 "precision":"Medium", 501 "qualifier":"FragColor", 502 "primarySize":4 503 } 504 }, 505 "gl_FragData":{ 506 "essl_level":"ESSL1_BUILTINS", 507 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqFragData, 4); if (spec != SH_WEBGL2_SPEC && spec != SH_WEBGL3_SPEC) {{ {type_name}->makeArray(resources.MaxDrawBuffers); }} else {{ {type_name}->makeArray(1u); }}" 508 }, 509 "gl_FragDepth":{ 510 "essl_level":"ESSL3_BUILTINS", 511 "type":{ 512 "basic":"Float", 513 "precision":"High", 514 "qualifier":"FragDepth" 515 } 516 }, 517 "gl_HelperInvocation":{ 518 "essl_level":"ESSL3_1_BUILTINS", 519 "type":{ 520 "basic":"Bool", 521 "qualifier":"HelperInvocation" 522 } 523 } 524 }, 525 "subgroups":{ 526 "EXTBlendFuncExtended":{ 527 "variables":{ 528 "gl_SecondaryFragColorEXT":{ 529 "essl_level":"ESSL1_BUILTINS", 530 "essl_extension":"EXT_blend_func_extended", 531 "type":{ 532 "basic":"Float", 533 "precision":"Medium", 534 "qualifier":"SecondaryFragColorEXT", 535 "primarySize":4 536 } 537 }, 538 "gl_SecondaryFragDataEXT":{ 539 "essl_level":"ESSL1_BUILTINS", 540 "essl_extension":"EXT_blend_func_extended", 541 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqSecondaryFragDataEXT, 4, 1); {type_name}->makeArray(resources.MaxDualSourceDrawBuffers);" 542 } 543 } 544 }, 545 "EXTFragDepth":{ 546 "variables":{ 547 "gl_FragDepthEXT":{ 548 "essl_level":"ESSL1_BUILTINS", 549 "essl_extension":"EXT_frag_depth", 550 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, resources.FragmentPrecisionHigh ? EbpHigh : EbpMedium, EvqFragDepthEXT, 1);" 551 } 552 } 553 }, 554 "EXTShaderFramebufferFetch":{ 555 "variables":{ 556 "gl_LastFragData":{ 557 "essl_level":"ESSL1_BUILTINS", 558 "essl_extension":"EXT_shader_framebuffer_fetch", 559 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqLastFragData, 4, 1); {type_name}->makeArray(resources.MaxDrawBuffers);" 560 } 561 } 562 }, 563 "NVShaderFramebufferFetch":{ 564 "variables":{ 565 "gl_LastFragColor":{ 566 "essl_level":"ESSL1_BUILTINS", 567 "essl_extension":"NV_shader_framebuffer_fetch", 568 "type":{ 569 "basic":"Float", 570 "precision":"Medium", 571 "qualifier":"LastFragColor", 572 "primarySize":4 573 } 574 }, 575 "gl_LastFragData":{ 576 "essl_level":"ESSL1_BUILTINS", 577 "suffix":"NV", 578 "essl_extension":"NV_shader_framebuffer_fetch", 579 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqLastFragData, 4, 1); {type_name}->makeArray(resources.MaxDrawBuffers);" 580 } 581 } 582 }, 583 "ARMShaderFramebufferFetch":{ 584 "variables":{ 585 "gl_LastFragColorARM":{ 586 "essl_level":"ESSL1_BUILTINS", 587 "essl_extension":"ARM_shader_framebuffer_fetch", 588 "type":{ 589 "basic":"Float", 590 "precision":"Medium", 591 "qualifier":"LastFragColor", 592 "primarySize":4 593 } 594 } 595 } 596 }, 597 "GeometryShaderSupported":{ 598 "variables":{ 599 "gl_PrimitiveID":{ 600 "essl_level":"ESSL3_1_BUILTINS", 601 "essl_extension":"EXT_geometry_shader", 602 "type":{ 603 "basic":"Int", 604 "precision":"High", 605 "qualifier":"PrimitiveID" 606 } 607 }, 608 "gl_Layer":{ 609 "essl_level":"ESSL3_1_BUILTINS", 610 "essl_extension":"EXT_geometry_shader", 611 "type":{ 612 "basic":"Int", 613 "precision":"High", 614 "qualifier":"Layer" 615 } 616 } 617 } 618 } 619 } 620 }, 621 "VertexShader":{ 622 "shader_type": "VERTEX", 623 "variables":{ 624 "gl_Position":{ 625 "essl_level":"COMMON_BUILTINS", 626 "type":{ 627 "basic":"Float", 628 "precision":"High", 629 "qualifier":"Position", 630 "primarySize":4 631 } 632 }, 633 "gl_PointSize":{ 634 "essl_level":"COMMON_BUILTINS", 635 "type":{ 636 "basic":"Float", 637 "precision":"Medium", 638 "qualifier":"PointSize" 639 } 640 }, 641 "gl_InstanceID":{ 642 "essl_level":"ESSL3_BUILTINS", 643 "type":{ 644 "basic":"Int", 645 "precision":"High", 646 "qualifier":"InstanceID" 647 } 648 }, 649 "gl_InstanceIndex":{ 650 "essl_level":"GLSL_BUILTINS", 651 "type":{ 652 "basic":"Int", 653 "precision":"High", 654 "qualifier":"InstanceID", 655 "comment": "In GLSL 450 used by Vulkan" 656 } 657 }, 658 "gl_VertexID":{ 659 "essl_level":"ESSL3_BUILTINS", 660 "type":{ 661 "basic":"Int", 662 "precision":"High", 663 "qualifier":"VertexID" 664 } 665 }, 666 "gl_VertexIndex":{ 667 "essl_level":"GLSL_BUILTINS", 668 "type":{ 669 "basic":"Int", 670 "precision":"High", 671 "qualifier":"VertexID", 672 "comment": "In GLSL 450 used by Vulkan" 673 } 674 }, 675 "gl_ViewportIndex":{ 676 "comment":"For internal use by ANGLE - not exposed to the parser.", 677 "essl_level":"GLSL_BUILTINS", 678 "type":{ 679 "basic":"Int", 680 "precision":"High", 681 "qualifier":"ViewportIndex" 682 } 683 }, 684 "gl_Layer":{ 685 "suffix":"VS", 686 "comment":"gl_Layer exists in other shader stages in ESSL, but not in vertex shader so far.", 687 "essl_level":"GLSL_BUILTINS", 688 "type":{ 689 "basic":"Int", 690 "precision":"High", 691 "qualifier":"Layer" 692 } 693 } 694 }, 695 "subgroups":{ 696 "ANGLEMultiDraw":{ 697 "subgroups":{ 698 "ESSL3":{ 699 "variables":{ 700 "gl_DrawID":{ 701 "essl_level":"COMMON_BUILTINS", 702 "essl_extension":"ANGLE_multi_draw", 703 "type":{ 704 "basic":"Int", 705 "precision":"High", 706 "qualifier":"DrawID" 707 } 708 } 709 } 710 } 711 } 712 }, 713 "ANGLEBaseVertexBaseInstance":{ 714 "subgroups":{ 715 "ESSL3":{ 716 "variables":{ 717 "gl_BaseVertex":{ 718 "essl_level":"ESSL3_BUILTINS", 719 "essl_extension":"ANGLE_base_vertex_base_instance", 720 "type":{ 721 "basic":"Int", 722 "precision":"High", 723 "qualifier":"BaseVertex" 724 } 725 }, 726 "gl_BaseInstance":{ 727 "essl_level":"ESSL3_BUILTINS", 728 "essl_extension":"ANGLE_base_vertex_base_instance", 729 "type":{ 730 "basic":"Int", 731 "precision":"High", 732 "qualifier":"BaseInstance" 733 } 734 }, 735 "angle_BaseVertex":{ 736 "essl_level":"COMMON_BUILTINS", 737 "essl_extension":"ANGLE_base_vertex_base_instance", 738 "type":{ 739 "basic":"Int", 740 "precision":"High", 741 "qualifier":"BaseVertex" 742 } 743 }, 744 "angle_BaseInstance":{ 745 "essl_level":"COMMON_BUILTINS", 746 "essl_extension":"ANGLE_base_vertex_base_instance", 747 "type":{ 748 "basic":"Int", 749 "precision":"High", 750 "qualifier":"BaseInstance" 751 } 752 } 753 } 754 } 755 } 756 }, 757 "APPLEClipDistance":{ 758 "variables":{ 759 "gl_ClipDistance":{ 760 "essl_level":"COMMON_BUILTINS", 761 "essl_extension":"APPLE_clip_distance", 762 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqClipDistance, 1); {type_name}->makeArray(resources.MaxClipDistances);" 763 }, 764 "gl_MaxClipDistances":{ 765 "essl_level":"COMMON_BUILTINS", 766 "type":{ 767 "basic":"Int", 768 "precision":"Medium", 769 "qualifier":"Const" 770 }, 771 "essl_extension":"APPLE_clip_distance", 772 "value":"resources" 773 } 774 } 775 } 776 } 777 }, 778 "ComputeShader":{ 779 "shader_type": "COMPUTE", 780 "variables":{ 781 "gl_NumWorkGroups":{ 782 "essl_level":"ESSL3_1_BUILTINS", 783 "type":{ 784 "basic":"UInt", 785 "precision":"Undefined", 786 "qualifier":"NumWorkGroups", 787 "primarySize":3 788 } 789 }, 790 "gl_WorkGroupSize":{ 791 "essl_level":"ESSL3_1_BUILTINS", 792 "type":{ 793 "basic":"UInt", 794 "precision":"Undefined", 795 "qualifier":"WorkGroupSize", 796 "primarySize":3 797 } 798 }, 799 "gl_WorkGroupID":{ 800 "essl_level":"ESSL3_1_BUILTINS", 801 "type":{ 802 "basic":"UInt", 803 "precision":"Undefined", 804 "qualifier":"WorkGroupID", 805 "primarySize":3 806 } 807 }, 808 "gl_LocalInvocationID":{ 809 "essl_level":"ESSL3_1_BUILTINS", 810 "type":{ 811 "basic":"UInt", 812 "precision":"Undefined", 813 "qualifier":"LocalInvocationID", 814 "primarySize":3 815 } 816 }, 817 "gl_GlobalInvocationID":{ 818 "essl_level":"ESSL3_1_BUILTINS", 819 "type":{ 820 "basic":"UInt", 821 "precision":"Undefined", 822 "qualifier":"GlobalInvocationID", 823 "primarySize":3 824 } 825 }, 826 "gl_LocalInvocationIndex":{ 827 "essl_level":"ESSL3_1_BUILTINS", 828 "type":{ 829 "basic":"UInt", 830 "precision":"Undefined", 831 "qualifier":"LocalInvocationIndex" 832 } 833 } 834 } 835 }, 836 "GeometryShader":{ 837 "shader_type": "GEOMETRY_EXT", 838 "variables":{ 839 "gl_PrimitiveIDIn":{ 840 "essl_level":"ESSL3_1_BUILTINS", 841 "essl_extension":"EXT_geometry_shader", 842 "type":{ 843 "basic":"Int", 844 "precision":"High", 845 "qualifier":"PrimitiveIDIn" 846 } 847 }, 848 "gl_InvocationID":{ 849 "essl_level":"ESSL3_1_BUILTINS", 850 "essl_extension":"EXT_geometry_shader", 851 "type":{ 852 "basic":"Int", 853 "precision":"High", 854 "qualifier":"InvocationID" 855 } 856 }, 857 "gl_PrimitiveID":{ 858 "suffix":"GS", 859 "essl_level":"ESSL3_1_BUILTINS", 860 "essl_extension":"EXT_geometry_shader", 861 "type":{ 862 "basic":"Int", 863 "precision":"High", 864 "qualifier":"PrimitiveID" 865 } 866 }, 867 "gl_Layer":{ 868 "suffix":"GS", 869 "essl_level":"ESSL3_1_BUILTINS", 870 "essl_extension":"EXT_geometry_shader", 871 "type":{ 872 "basic":"Int", 873 "precision":"High", 874 "qualifier":"Layer" 875 } 876 }, 877 "gl_PerVertex":{ 878 "essl_level":"ESSL3_1_BUILTINS", 879 "essl_extension":"EXT_geometry_shader", 880 "class":"TInterfaceBlock", 881 "fields":{ 882 "gl_Position":{ 883 "basic":"Float", 884 "precision":"High", 885 "qualifier":"Position", 886 "primarySize":4 887 } 888 } 889 }, 890 "gl_in":{ 891 "essl_level":"ESSL3_1_BUILTINS", 892 "essl_extension":"EXT_geometry_shader", 893 "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexIn, TLayoutQualifier::Create()); {type_name}->makeArray(0u);", 894 "comment":"The array size of gl_in is undefined until we get a valid input primitive declaration." 895 } 896 }, 897 "subgroups":{ 898 "Out":{ 899 "variables":{ 900 "gl_PerVertex":{ 901 "suffix":"OutBlock", 902 "essl_level":"ESSL3_1_BUILTINS", 903 "essl_extension":"EXT_geometry_shader", 904 "private":true, 905 "class":"TInterfaceBlock", 906 "fields":{ 907 "gl_Position":{ 908 "basic":"Float", 909 "precision":"High", 910 "qualifier":"Position", 911 "primarySize":4 912 } 913 } 914 }, 915 "gl_Position":{ 916 "suffix":"GS", 917 "essl_level":"ESSL3_1_BUILTINS", 918 "essl_extension":"EXT_geometry_shader", 919 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutBlock);" 920 } 921 } 922 } 923 } 924 }, 925 "Multiview":{ 926 "shader_type": "NOT_COMPUTE", 927 "subgroups":{ 928 "ESSL3":{ 929 "variables":{ 930 "gl_ViewID_OVR":{ 931 "essl_level":"ESSL3_BUILTINS", 932 "essl_extension":"OVR_multiview", 933 "type":{ 934 "basic":"UInt", 935 "precision":"High", 936 "qualifier":"ViewIDOVR" 937 } 938 } 939 } 940 } 941 } 942 } 943} 944