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 " essl_extension_becomes_core_in: Optional. ESSL level where symbols from this", 25 " extension have become core.", 26 " glsl_extension: Optional. Name of the GLSL extension where this variable is from.", 27 " value: Optional. String that has one valid value: 'resources'. Denotes that the", 28 " value of the variable should be based on the field of ShBuiltInResources", 29 " with the same name as the variable.", 30 " class: Optional. To be used for interface block or struct definitions. Valid", 31 " values are 'TStructure' or 'TInterfaceBlock'.", 32 " fields: Optional. Object to be used for storing fields of interface block and", 33 " struct definitions. Maps field names to field types.", 34 " suffix: Optional. Suffix to give C++ variables storing the properties of this", 35 " variable a unique name that doesn't conflict with C++ keywords.", 36 " Each type can have the following properties:", 37 " basic: Basic type as in the TBasicType enum without the Ebt prefix.", 38 " precision: Precision as in TPrecision enum without the Ebp prefix.", 39 " qualifier: Optional. Qualifier as in the TQualifier enum without the Evq prefix.", 40 " primarySize: Optional. Vector size or matrix column count.", 41 " secondarySize: Optional. Matrix row count.", 42 " Any group, variable or type can have the property 'comment'." 43 ], 44 "variables":{ 45 "gl_DepthRangeParameters":{ 46 "class":"TStructure", 47 "essl_level":"COMMON_BUILTINS", 48 "fields":{ 49 "near":{ 50 "basic":"Float", 51 "precision":"High" 52 }, 53 "far":{ 54 "basic":"Float", 55 "precision":"High" 56 }, 57 "diff":{ 58 "basic":"Float", 59 "precision":"High" 60 } 61 } 62 }, 63 "gl_DepthRange":{ 64 "essl_level":"COMMON_BUILTINS", 65 "initDynamicType":"TType *{type_name} = new TType(gl_DepthRangeParameters, false); {type_name}->setQualifier(EvqUniform);" 66 } 67 }, 68 "subgroups":{ 69 "OESSampleVariables":{ 70 "variables":{ 71 "gl_NumSamples":{ 72 "essl_level":"ESSL3_BUILTINS", 73 "essl_extension":"OES_sample_variables", 74 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 75 "type":{ 76 "basic":"Int", 77 "precision":"Low", 78 "qualifier":"Uniform" 79 } 80 } 81 } 82 } 83 } 84 }, 85 "Constants":{ 86 "variables":{ 87 "gl_MaxVertexAttribs":{ 88 "essl_level":"COMMON_BUILTINS", 89 "type":{ 90 "basic":"Int", 91 "precision":"Medium", 92 "qualifier":"Const" 93 }, 94 "value":"resources" 95 }, 96 "gl_MaxVertexUniformVectors":{ 97 "essl_level":"COMMON_BUILTINS", 98 "type":{ 99 "basic":"Int", 100 "precision":"Medium", 101 "qualifier":"Const" 102 }, 103 "value":"resources" 104 }, 105 "gl_MaxVertexTextureImageUnits":{ 106 "essl_level":"COMMON_BUILTINS", 107 "type":{ 108 "basic":"Int", 109 "precision":"Medium", 110 "qualifier":"Const" 111 }, 112 "value":"resources" 113 }, 114 "gl_MaxCombinedTextureImageUnits":{ 115 "essl_level":"COMMON_BUILTINS", 116 "type":{ 117 "basic":"Int", 118 "precision":"Medium", 119 "qualifier":"Const" 120 }, 121 "value":"resources" 122 }, 123 "gl_MaxTextureImageUnits":{ 124 "essl_level":"COMMON_BUILTINS", 125 "type":{ 126 "basic":"Int", 127 "precision":"Medium", 128 "qualifier":"Const" 129 }, 130 "value":"resources" 131 }, 132 "gl_MaxFragmentUniformVectors":{ 133 "essl_level":"COMMON_BUILTINS", 134 "type":{ 135 "basic":"Int", 136 "precision":"Medium", 137 "qualifier":"Const" 138 }, 139 "value":"resources" 140 }, 141 "gl_MaxVaryingVectors":{ 142 "essl_level":"ESSL1_BUILTINS", 143 "type":{ 144 "basic":"Int", 145 "precision":"Medium", 146 "qualifier":"Const" 147 }, 148 "value":"resources" 149 }, 150 "gl_MaxDrawBuffers":{ 151 "essl_level":"COMMON_BUILTINS", 152 "type":{ 153 "basic":"Int", 154 "precision":"Medium", 155 "qualifier":"Const" 156 }, 157 "value":"resources" 158 }, 159 "gl_MaxDualSourceDrawBuffersEXT":{ 160 "essl_level":"COMMON_BUILTINS", 161 "type":{ 162 "basic":"Int", 163 "precision":"Medium", 164 "qualifier":"Const" 165 }, 166 "essl_extension":"EXT_blend_func_extended", 167 "value":"resources", 168 "valueKey":"MaxDualSourceDrawBuffers" 169 }, 170 "gl_MaxVertexOutputVectors":{ 171 "essl_level":"ESSL3_BUILTINS", 172 "type":{ 173 "basic":"Int", 174 "precision":"Medium", 175 "qualifier":"Const" 176 }, 177 "value":"resources" 178 }, 179 "gl_MaxFragmentInputVectors":{ 180 "essl_level":"ESSL3_BUILTINS", 181 "type":{ 182 "basic":"Int", 183 "precision":"Medium", 184 "qualifier":"Const" 185 }, 186 "value":"resources" 187 }, 188 "gl_MinProgramTexelOffset":{ 189 "essl_level":"ESSL3_BUILTINS", 190 "type":{ 191 "basic":"Int", 192 "precision":"Medium", 193 "qualifier":"Const" 194 }, 195 "value":"resources" 196 }, 197 "gl_MaxProgramTexelOffset":{ 198 "essl_level":"ESSL3_BUILTINS", 199 "type":{ 200 "basic":"Int", 201 "precision":"Medium", 202 "qualifier":"Const" 203 }, 204 "value":"resources" 205 }, 206 "gl_MaxImageUnits":{ 207 "essl_level":"ESSL3_1_BUILTINS", 208 "type":{ 209 "basic":"Int", 210 "precision":"Medium", 211 "qualifier":"Const" 212 }, 213 "value":"resources" 214 }, 215 "gl_MaxVertexImageUniforms":{ 216 "essl_level":"ESSL3_1_BUILTINS", 217 "type":{ 218 "basic":"Int", 219 "precision":"Medium", 220 "qualifier":"Const" 221 }, 222 "value":"resources" 223 }, 224 "gl_MaxFragmentImageUniforms":{ 225 "essl_level":"ESSL3_1_BUILTINS", 226 "type":{ 227 "basic":"Int", 228 "precision":"Medium", 229 "qualifier":"Const" 230 }, 231 "value":"resources" 232 }, 233 "gl_MaxComputeImageUniforms":{ 234 "essl_level":"ESSL3_1_BUILTINS", 235 "type":{ 236 "basic":"Int", 237 "precision":"Medium", 238 "qualifier":"Const" 239 }, 240 "value":"resources" 241 }, 242 "gl_MaxCombinedImageUniforms":{ 243 "essl_level":"ESSL3_1_BUILTINS", 244 "type":{ 245 "basic":"Int", 246 "precision":"Medium", 247 "qualifier":"Const" 248 }, 249 "value":"resources" 250 }, 251 "gl_MaxCombinedShaderOutputResources":{ 252 "essl_level":"ESSL3_1_BUILTINS", 253 "type":{ 254 "basic":"Int", 255 "precision":"Medium", 256 "qualifier":"Const" 257 }, 258 "value":"resources" 259 }, 260 "gl_MaxComputeWorkGroupCount":{ 261 "essl_level":"ESSL3_1_BUILTINS", 262 "type":{ 263 "basic":"Int", 264 "precision":"High", 265 "qualifier":"Const", 266 "primarySize":3 267 }, 268 "value":"resources" 269 }, 270 "gl_MaxComputeWorkGroupSize":{ 271 "essl_level":"ESSL3_1_BUILTINS", 272 "type":{ 273 "basic":"Int", 274 "precision":"High", 275 "qualifier":"Const", 276 "primarySize":3 277 }, 278 "value":"resources" 279 }, 280 "gl_MaxComputeUniformComponents":{ 281 "essl_level":"ESSL3_1_BUILTINS", 282 "type":{ 283 "basic":"Int", 284 "precision":"Medium", 285 "qualifier":"Const" 286 }, 287 "value":"resources" 288 }, 289 "gl_MaxComputeTextureImageUnits":{ 290 "essl_level":"ESSL3_1_BUILTINS", 291 "type":{ 292 "basic":"Int", 293 "precision":"Medium", 294 "qualifier":"Const" 295 }, 296 "value":"resources" 297 }, 298 "gl_MaxComputeAtomicCounters":{ 299 "essl_level":"ESSL3_1_BUILTINS", 300 "type":{ 301 "basic":"Int", 302 "precision":"Medium", 303 "qualifier":"Const" 304 }, 305 "value":"resources" 306 }, 307 "gl_MaxComputeAtomicCounterBuffers":{ 308 "essl_level":"ESSL3_1_BUILTINS", 309 "type":{ 310 "basic":"Int", 311 "precision":"Medium", 312 "qualifier":"Const" 313 }, 314 "value":"resources" 315 }, 316 "gl_MaxVertexAtomicCounters":{ 317 "essl_level":"ESSL3_1_BUILTINS", 318 "type":{ 319 "basic":"Int", 320 "precision":"Medium", 321 "qualifier":"Const" 322 }, 323 "value":"resources" 324 }, 325 "gl_MaxFragmentAtomicCounters":{ 326 "essl_level":"ESSL3_1_BUILTINS", 327 "type":{ 328 "basic":"Int", 329 "precision":"Medium", 330 "qualifier":"Const" 331 }, 332 "value":"resources" 333 }, 334 "gl_MaxCombinedAtomicCounters":{ 335 "essl_level":"ESSL3_1_BUILTINS", 336 "type":{ 337 "basic":"Int", 338 "precision":"Medium", 339 "qualifier":"Const" 340 }, 341 "value":"resources" 342 }, 343 "gl_MaxAtomicCounterBindings":{ 344 "essl_level":"ESSL3_1_BUILTINS", 345 "type":{ 346 "basic":"Int", 347 "precision":"Medium", 348 "qualifier":"Const" 349 }, 350 "value":"resources" 351 }, 352 "gl_MaxVertexAtomicCounterBuffers":{ 353 "essl_level":"ESSL3_1_BUILTINS", 354 "type":{ 355 "basic":"Int", 356 "precision":"Medium", 357 "qualifier":"Const" 358 }, 359 "value":"resources" 360 }, 361 "gl_MaxFragmentAtomicCounterBuffers":{ 362 "essl_level":"ESSL3_1_BUILTINS", 363 "type":{ 364 "basic":"Int", 365 "precision":"Medium", 366 "qualifier":"Const" 367 }, 368 "value":"resources" 369 }, 370 "gl_MaxCombinedAtomicCounterBuffers":{ 371 "essl_level":"ESSL3_1_BUILTINS", 372 "type":{ 373 "basic":"Int", 374 "precision":"Medium", 375 "qualifier":"Const" 376 }, 377 "value":"resources" 378 }, 379 "gl_MaxAtomicCounterBufferSize":{ 380 "essl_level":"ESSL3_1_BUILTINS", 381 "type":{ 382 "basic":"Int", 383 "precision":"Medium", 384 "qualifier":"Const" 385 }, 386 "value":"resources" 387 } 388 }, 389 "subgroups":{ 390 "EXTGeometryShader":{ 391 "variables":{ 392 "gl_MaxGeometryInputComponents":{ 393 "essl_level":"ESSL3_1_BUILTINS", 394 "type":{ 395 "basic":"Int", 396 "precision":"Medium", 397 "qualifier":"Const" 398 }, 399 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 400 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 401 "value":"resources" 402 }, 403 "gl_MaxGeometryOutputComponents":{ 404 "essl_level":"ESSL3_1_BUILTINS", 405 "type":{ 406 "basic":"Int", 407 "precision":"Medium", 408 "qualifier":"Const" 409 }, 410 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 411 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 412 "value":"resources" 413 }, 414 "gl_MaxGeometryImageUniforms":{ 415 "essl_level":"ESSL3_1_BUILTINS", 416 "type":{ 417 "basic":"Int", 418 "precision":"Medium", 419 "qualifier":"Const" 420 }, 421 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 422 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 423 "value":"resources" 424 }, 425 "gl_MaxGeometryTextureImageUnits":{ 426 "essl_level":"ESSL3_1_BUILTINS", 427 "type":{ 428 "basic":"Int", 429 "precision":"Medium", 430 "qualifier":"Const" 431 }, 432 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 433 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 434 "value":"resources" 435 }, 436 "gl_MaxGeometryOutputVertices":{ 437 "essl_level":"ESSL3_1_BUILTINS", 438 "type":{ 439 "basic":"Int", 440 "precision":"Medium", 441 "qualifier":"Const" 442 }, 443 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 444 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 445 "value":"resources" 446 }, 447 "gl_MaxGeometryTotalOutputComponents":{ 448 "essl_level":"ESSL3_1_BUILTINS", 449 "type":{ 450 "basic":"Int", 451 "precision":"Medium", 452 "qualifier":"Const" 453 }, 454 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 455 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 456 "value":"resources" 457 }, 458 "gl_MaxGeometryUniformComponents":{ 459 "essl_level":"ESSL3_1_BUILTINS", 460 "type":{ 461 "basic":"Int", 462 "precision":"Medium", 463 "qualifier":"Const" 464 }, 465 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 466 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 467 "value":"resources" 468 }, 469 "gl_MaxGeometryAtomicCounters":{ 470 "essl_level":"ESSL3_1_BUILTINS", 471 "type":{ 472 "basic":"Int", 473 "precision":"Medium", 474 "qualifier":"Const" 475 }, 476 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 477 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 478 "value":"resources" 479 }, 480 "gl_MaxGeometryAtomicCounterBuffers":{ 481 "essl_level":"ESSL3_1_BUILTINS", 482 "type":{ 483 "basic":"Int", 484 "precision":"Medium", 485 "qualifier":"Const" 486 }, 487 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 488 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 489 "value":"resources" 490 } 491 } 492 }, 493 "EXTTessellationShader":{ 494 "variables":{ 495 "gl_MaxTessControlInputComponents":{ 496 "essl_level":"ESSL3_1_BUILTINS", 497 "type":{ 498 "basic":"Int", 499 "precision":"Medium", 500 "qualifier":"Const" 501 }, 502 "essl_extension":"EXT_tessellation_shader", 503 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 504 "value":"resources" 505 }, 506 "gl_MaxTessControlOutputComponents":{ 507 "essl_level":"ESSL3_1_BUILTINS", 508 "type":{ 509 "basic":"Int", 510 "precision":"Medium", 511 "qualifier":"Const" 512 }, 513 "essl_extension":"EXT_tessellation_shader", 514 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 515 "value":"resources" 516 }, 517 "gl_MaxTessControlTextureImageUnits":{ 518 "essl_level":"ESSL3_1_BUILTINS", 519 "type":{ 520 "basic":"Int", 521 "precision":"Medium", 522 "qualifier":"Const" 523 }, 524 "essl_extension":"EXT_tessellation_shader", 525 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 526 "value":"resources" 527 }, 528 "gl_MaxTessControlUniformComponents":{ 529 "essl_level":"ESSL3_1_BUILTINS", 530 "type":{ 531 "basic":"Int", 532 "precision":"Medium", 533 "qualifier":"Const" 534 }, 535 "essl_extension":"EXT_tessellation_shader", 536 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 537 "value":"resources" 538 }, 539 "gl_MaxTessControlTotalOutputComponents":{ 540 "essl_level":"ESSL3_1_BUILTINS", 541 "type":{ 542 "basic":"Int", 543 "precision":"Medium", 544 "qualifier":"Const" 545 }, 546 "essl_extension":"EXT_tessellation_shader", 547 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 548 "value":"resources" 549 }, 550 "gl_MaxTessControlImageUniforms":{ 551 "essl_level":"ESSL3_1_BUILTINS", 552 "type":{ 553 "basic":"Int", 554 "precision":"Medium", 555 "qualifier":"Const" 556 }, 557 "essl_extension":"EXT_tessellation_shader", 558 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 559 "value":"resources" 560 }, 561 "gl_MaxTessControlAtomicCounters":{ 562 "essl_level":"ESSL3_1_BUILTINS", 563 "type":{ 564 "basic":"Int", 565 "precision":"Medium", 566 "qualifier":"Const" 567 }, 568 "essl_extension":"EXT_tessellation_shader", 569 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 570 "value":"resources" 571 }, 572 "gl_MaxTessControlAtomicCounterBuffers":{ 573 "essl_level":"ESSL3_1_BUILTINS", 574 "type":{ 575 "basic":"Int", 576 "precision":"Medium", 577 "qualifier":"Const" 578 }, 579 "essl_extension":"EXT_tessellation_shader", 580 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 581 "value":"resources" 582 }, 583 "gl_MaxTessPatchComponents":{ 584 "essl_level":"ESSL3_1_BUILTINS", 585 "type":{ 586 "basic":"Int", 587 "precision":"Medium", 588 "qualifier":"Const" 589 }, 590 "essl_extension":"EXT_tessellation_shader", 591 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 592 "value":"resources" 593 }, 594 "gl_MaxPatchVertices":{ 595 "essl_level":"ESSL3_1_BUILTINS", 596 "type":{ 597 "basic":"Int", 598 "precision":"Medium", 599 "qualifier":"Const" 600 }, 601 "essl_extension":"EXT_tessellation_shader", 602 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 603 "value":"resources" 604 }, 605 "gl_MaxTessGenLevel":{ 606 "essl_level":"ESSL3_1_BUILTINS", 607 "type":{ 608 "basic":"Int", 609 "precision":"Medium", 610 "qualifier":"Const" 611 }, 612 "essl_extension":"EXT_tessellation_shader", 613 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 614 "value":"resources" 615 }, 616 "gl_MaxTessEvaluationInputComponents":{ 617 "essl_level":"ESSL3_1_BUILTINS", 618 "type":{ 619 "basic":"Int", 620 "precision":"Medium", 621 "qualifier":"Const" 622 }, 623 "essl_extension":"EXT_tessellation_shader", 624 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 625 "value":"resources" 626 }, 627 "gl_MaxTessEvaluationOutputComponents":{ 628 "essl_level":"ESSL3_1_BUILTINS", 629 "type":{ 630 "basic":"Int", 631 "precision":"Medium", 632 "qualifier":"Const" 633 }, 634 "essl_extension":"EXT_tessellation_shader", 635 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 636 "value":"resources" 637 }, 638 "gl_MaxTessEvaluationTextureImageUnits":{ 639 "essl_level":"ESSL3_1_BUILTINS", 640 "type":{ 641 "basic":"Int", 642 "precision":"Medium", 643 "qualifier":"Const" 644 }, 645 "essl_extension":"EXT_tessellation_shader", 646 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 647 "value":"resources" 648 }, 649 "gl_MaxTessEvaluationUniformComponents":{ 650 "essl_level":"ESSL3_1_BUILTINS", 651 "type":{ 652 "basic":"Int", 653 "precision":"Medium", 654 "qualifier":"Const" 655 }, 656 "essl_extension":"EXT_tessellation_shader", 657 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 658 "value":"resources" 659 }, 660 "gl_MaxTessEvaluationImageUniforms":{ 661 "essl_level":"ESSL3_1_BUILTINS", 662 "type":{ 663 "basic":"Int", 664 "precision":"Medium", 665 "qualifier":"Const" 666 }, 667 "essl_extension":"EXT_tessellation_shader", 668 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 669 "value":"resources" 670 }, 671 "gl_MaxTessEvaluationAtomicCounters":{ 672 "essl_level":"ESSL3_1_BUILTINS", 673 "type":{ 674 "basic":"Int", 675 "precision":"Medium", 676 "qualifier":"Const" 677 }, 678 "essl_extension":"EXT_tessellation_shader", 679 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 680 "value":"resources" 681 }, 682 "gl_MaxTessEvaluationAtomicCounterBuffers":{ 683 "essl_level":"ESSL3_1_BUILTINS", 684 "type":{ 685 "basic":"Int", 686 "precision":"Medium", 687 "qualifier":"Const" 688 }, 689 "essl_extension":"EXT_tessellation_shader", 690 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 691 "value":"resources" 692 } 693 } 694 }, 695 "OESSampleVariables":{ 696 "variables":{ 697 "gl_MaxSamples":{ 698 "essl_level":"ESSL3_BUILTINS", 699 "type":{ 700 "basic":"Int", 701 "precision":"Medium", 702 "qualifier":"Const" 703 }, 704 "essl_extension":"OES_sample_variables", 705 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 706 "value":"resources" 707 } 708 } 709 }, 710 "APPLEClipDistance":{ 711 "variables":{ 712 "gl_MaxClipDistances":{ 713 "essl_level":"COMMON_BUILTINS", 714 "type":{ 715 "basic":"Int", 716 "precision":"Medium", 717 "qualifier":"Const" 718 }, 719 "essl_extension":"APPLE_clip_distance", 720 "value":"resources", 721 "suffix": "APPLE" 722 } 723 } 724 }, 725 "EXTClipCullDistance":{ 726 "variables":{ 727 "gl_MaxCullDistances":{ 728 "essl_level":"ESSL3_BUILTINS", 729 "type":{ 730 "basic":"Int", 731 "precision":"Medium", 732 "qualifier":"Const" 733 }, 734 "essl_extension":"EXT_clip_cull_distance", 735 "value":"resources", 736 "suffix": "EXT" 737 }, 738 "gl_MaxCombinedClipAndCullDistances":{ 739 "essl_level":"ESSL3_BUILTINS", 740 "type":{ 741 "basic":"Int", 742 "precision":"Medium", 743 "qualifier":"Const" 744 }, 745 "essl_extension":"EXT_clip_cull_distance", 746 "value":"resources", 747 "suffix": "EXT" 748 } 749 } 750 } 751 } 752 }, 753 "FragShader":{ 754 "shader_type": "FRAGMENT", 755 "variables":{ 756 "gl_FragCoord":{ 757 "essl_level":"ESSL1_BUILTINS", 758 "type":{ 759 "basic":"Float", 760 "precision":"Medium", 761 "qualifier":"FragCoord", 762 "primarySize":4 763 } 764 }, 765 "gl_FrontFacing":{ 766 "essl_level":"COMMON_BUILTINS", 767 "type":{ 768 "basic":"Bool", 769 "qualifier":"FrontFacing" 770 } 771 }, 772 "gl_PointCoord":{ 773 "essl_level":"COMMON_BUILTINS", 774 "type":{ 775 "basic":"Float", 776 "precision":"Medium", 777 "qualifier":"PointCoord", 778 "primarySize":2 779 } 780 }, 781 "gl_FragColor":{ 782 "essl_level":"ESSL1_BUILTINS", 783 "type":{ 784 "basic":"Float", 785 "precision":"Medium", 786 "qualifier":"FragColor", 787 "primarySize":4 788 } 789 }, 790 "gl_FragData":{ 791 "essl_level":"ESSL1_BUILTINS", 792 "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); }}" 793 }, 794 "gl_FragDepth":{ 795 "essl_level":"ESSL3_BUILTINS", 796 "type":{ 797 "basic":"Float", 798 "precision":"High", 799 "qualifier":"FragDepth" 800 } 801 }, 802 "gl_HelperInvocation":{ 803 "essl_level":"ESSL3_1_BUILTINS", 804 "type":{ 805 "basic":"Bool", 806 "qualifier":"HelperInvocation" 807 } 808 } 809 }, 810 "subgroups":{ 811 "ES300":{ 812 "variables":{ 813 "gl_FragCoord":{ 814 "essl_level":"ESSL3_BUILTINS", 815 "suffix":"300", 816 "type":{ 817 "basic":"Float", 818 "precision":"High", 819 "qualifier":"FragCoord", 820 "primarySize":4 821 } 822 } 823 } 824 }, 825 "EXTBlendFuncExtended":{ 826 "variables":{ 827 "gl_SecondaryFragColorEXT":{ 828 "essl_level":"ESSL1_BUILTINS", 829 "essl_extension":"EXT_blend_func_extended", 830 "type":{ 831 "basic":"Float", 832 "precision":"Medium", 833 "qualifier":"SecondaryFragColorEXT", 834 "primarySize":4 835 } 836 }, 837 "gl_SecondaryFragDataEXT":{ 838 "essl_level":"ESSL1_BUILTINS", 839 "essl_extension":"EXT_blend_func_extended", 840 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqSecondaryFragDataEXT, 4, 1); {type_name}->makeArray(resources.MaxDualSourceDrawBuffers);" 841 } 842 } 843 }, 844 "EXTFragDepth":{ 845 "variables":{ 846 "gl_FragDepthEXT":{ 847 "essl_level":"ESSL1_BUILTINS", 848 "essl_extension":"EXT_frag_depth", 849 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, resources.FragmentPrecisionHigh ? EbpHigh : EbpMedium, EvqFragDepth, 1);" 850 } 851 } 852 }, 853 "EXTShaderFramebufferFetch":{ 854 "variables":{ 855 "gl_LastFragData":{ 856 "essl_level":"ESSL1_BUILTINS", 857 "essl_extension":"EXT_shader_framebuffer_fetch, EXT_shader_framebuffer_fetch_non_coherent", 858 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqLastFragData, 4, 1); {type_name}->makeArray(resources.MaxDrawBuffers);" 859 } 860 } 861 }, 862 "NVShaderFramebufferFetch":{ 863 "variables":{ 864 "gl_LastFragColor":{ 865 "essl_level":"ESSL1_BUILTINS", 866 "essl_extension":"NV_shader_framebuffer_fetch", 867 "type":{ 868 "basic":"Float", 869 "precision":"Medium", 870 "qualifier":"LastFragColor", 871 "primarySize":4 872 } 873 }, 874 "gl_LastFragData":{ 875 "essl_level":"ESSL1_BUILTINS", 876 "suffix":"NV", 877 "essl_extension":"NV_shader_framebuffer_fetch", 878 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqLastFragData, 4, 1); {type_name}->makeArray(resources.MaxDrawBuffers);" 879 } 880 } 881 }, 882 "ARMShaderFramebufferFetch":{ 883 "variables":{ 884 "gl_LastFragColorARM":{ 885 "essl_level":"ESSL1_BUILTINS", 886 "essl_extension":"ARM_shader_framebuffer_fetch", 887 "type":{ 888 "basic":"Float", 889 "precision":"Medium", 890 "qualifier":"LastFragColor", 891 "primarySize":4 892 } 893 } 894 } 895 }, 896 "GeometryShaderSupported":{ 897 "variables":{ 898 "gl_PrimitiveID":{ 899 "essl_level":"ESSL3_1_BUILTINS", 900 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 901 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 902 "type":{ 903 "basic":"Int", 904 "precision":"High", 905 "qualifier":"PrimitiveID" 906 } 907 }, 908 "gl_Layer":{ 909 "essl_level":"ESSL3_1_BUILTINS", 910 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 911 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 912 "type":{ 913 "basic":"Int", 914 "precision":"High", 915 "qualifier":"Layer" 916 } 917 } 918 } 919 }, 920 "OESSampleVariables":{ 921 "variables":{ 922 "gl_SampleID":{ 923 "essl_level":"ESSL3_BUILTINS", 924 "essl_extension":"OES_sample_variables", 925 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 926 "type":{ 927 "basic":"Int", 928 "precision":"Low", 929 "qualifier":"SampleID" 930 } 931 }, 932 "gl_SamplePosition":{ 933 "essl_level":"ESSL3_BUILTINS", 934 "essl_extension":"OES_sample_variables", 935 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 936 "type":{ 937 "basic":"Float", 938 "precision":"Medium", 939 "primarySize":2, 940 "qualifier":"SamplePosition" 941 } 942 }, 943 "gl_SampleMaskIn":{ 944 "essl_level":"ESSL3_BUILTINS", 945 "essl_extension":"OES_sample_variables", 946 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 947 "initDynamicType":"TType *{type_name} = new TType(EbtInt, EbpHigh, EvqSampleMaskIn, 1); {type_name}->makeArray((resources.MaxSamples+31)/32);" 948 }, 949 "gl_SampleMask":{ 950 "essl_level":"ESSL3_BUILTINS", 951 "essl_extension":"OES_sample_variables", 952 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 953 "initDynamicType":"TType *{type_name} = new TType(EbtInt, EbpHigh, EvqSampleMask, 1); {type_name}->makeArray((resources.MaxSamples+31)/32);" 954 } 955 } 956 }, 957 "EXTClipCullDistance":{ 958 "variables":{ 959 "gl_CullDistance":{ 960 "essl_level":"ESSL3_BUILTINS", 961 "essl_extension":"EXT_clip_cull_distance", 962 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqCullDistance, 1); {type_name}->makeArray(resources.MaxCullDistances);" 963 }, 964 "gl_ClipDistance":{ 965 "essl_level":"ESSL3_BUILTINS", 966 "essl_extension":"EXT_clip_cull_distance", 967 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqClipDistance, 1); {type_name}->makeArray(resources.MaxClipDistances);" 968 } 969 } 970 } 971 } 972 }, 973 "VertexShader":{ 974 "shader_type": "VERTEX", 975 "variables":{ 976 "gl_Position":{ 977 "essl_level":"COMMON_BUILTINS", 978 "type":{ 979 "basic":"Float", 980 "precision":"High", 981 "qualifier":"Position", 982 "primarySize":4 983 } 984 }, 985 "gl_PointSize":{ 986 "essl_level":"ESSL1_BUILTINS", 987 "type":{ 988 "basic":"Float", 989 "precision":"Medium", 990 "qualifier":"PointSize" 991 } 992 }, 993 "gl_InstanceID":{ 994 "essl_level":"ESSL3_BUILTINS", 995 "type":{ 996 "basic":"Int", 997 "precision":"High", 998 "qualifier":"InstanceID" 999 } 1000 }, 1001 "gl_InstanceIndex":{ 1002 "essl_level":"GLSL_BUILTINS", 1003 "type":{ 1004 "basic":"Int", 1005 "precision":"High", 1006 "qualifier":"InstanceID", 1007 "comment": "In GLSL 450 used by Vulkan" 1008 } 1009 }, 1010 "gl_VertexID":{ 1011 "essl_level":"ESSL3_BUILTINS", 1012 "type":{ 1013 "basic":"Int", 1014 "precision":"High", 1015 "qualifier":"VertexID" 1016 } 1017 }, 1018 "gl_VertexIndex":{ 1019 "essl_level":"GLSL_BUILTINS", 1020 "type":{ 1021 "basic":"Int", 1022 "precision":"High", 1023 "qualifier":"VertexID", 1024 "comment": "In GLSL 450 used by Vulkan" 1025 } 1026 }, 1027 "gl_ViewportIndex":{ 1028 "comment":"For internal use by ANGLE - not exposed to the parser.", 1029 "essl_level":"GLSL_BUILTINS", 1030 "type":{ 1031 "basic":"Int", 1032 "precision":"High", 1033 "qualifier":"ViewportIndex" 1034 } 1035 }, 1036 "gl_Layer":{ 1037 "suffix":"VS", 1038 "comment":"gl_Layer exists in other shader stages in ESSL, but not in vertex shader so far.", 1039 "essl_level":"GLSL_BUILTINS", 1040 "type":{ 1041 "basic":"Int", 1042 "precision":"High", 1043 "qualifier":"Layer" 1044 } 1045 } 1046 }, 1047 "subgroups":{ 1048 "ES300":{ 1049 "variables":{ 1050 "gl_PointSize":{ 1051 "essl_level":"ESSL3_BUILTINS", 1052 "suffix":"300", 1053 "type":{ 1054 "basic":"Float", 1055 "precision":"High", 1056 "qualifier":"PointSize" 1057 } 1058 } 1059 } 1060 }, 1061 "ANGLEMultiDraw":{ 1062 "subgroups":{ 1063 "ESSL3":{ 1064 "variables":{ 1065 "gl_DrawID":{ 1066 "essl_level":"COMMON_BUILTINS", 1067 "essl_extension":"ANGLE_multi_draw", 1068 "type":{ 1069 "basic":"Int", 1070 "precision":"High", 1071 "qualifier":"DrawID" 1072 } 1073 } 1074 } 1075 } 1076 } 1077 }, 1078 "ANGLEBaseVertexBaseInstance":{ 1079 "subgroups":{ 1080 "ESSL3":{ 1081 "variables":{ 1082 "gl_BaseVertex":{ 1083 "essl_level":"ESSL3_BUILTINS", 1084 "essl_extension":"ANGLE_base_vertex_base_instance_shader_builtin", 1085 "type":{ 1086 "basic":"Int", 1087 "precision":"High", 1088 "qualifier":"Uniform" 1089 } 1090 }, 1091 "gl_BaseInstance":{ 1092 "essl_level":"ESSL3_BUILTINS", 1093 "essl_extension":"ANGLE_base_vertex_base_instance_shader_builtin", 1094 "type":{ 1095 "basic":"Int", 1096 "precision":"High", 1097 "qualifier":"Uniform" 1098 } 1099 }, 1100 "angle_BaseVertex":{ 1101 "essl_level":"COMMON_BUILTINS", 1102 "essl_extension":"ANGLE_base_vertex_base_instance_shader_builtin", 1103 "type":{ 1104 "basic":"Int", 1105 "precision":"High", 1106 "qualifier":"Uniform" 1107 } 1108 }, 1109 "angle_BaseInstance":{ 1110 "essl_level":"COMMON_BUILTINS", 1111 "essl_extension":"ANGLE_base_vertex_base_instance_shader_builtin", 1112 "type":{ 1113 "basic":"Int", 1114 "precision":"High", 1115 "qualifier":"Uniform" 1116 } 1117 } 1118 } 1119 } 1120 } 1121 }, 1122 "APPLEClipDistance":{ 1123 "variables":{ 1124 "gl_ClipDistance":{ 1125 "essl_level":"COMMON_BUILTINS", 1126 "essl_extension":"APPLE_clip_distance", 1127 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqClipDistance, 1); {type_name}->makeArray(resources.MaxClipDistances);", 1128 "suffix": "APPLE" 1129 } 1130 } 1131 }, 1132 "EXTClipCullDistance":{ 1133 "variables":{ 1134 "gl_CullDistance":{ 1135 "essl_level":"ESSL3_BUILTINS", 1136 "essl_extension":"EXT_clip_cull_distance", 1137 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqCullDistance, 1); {type_name}->makeArray(resources.MaxCullDistances);", 1138 "suffix": "EXT" 1139 } 1140 } 1141 } 1142 } 1143 }, 1144 "ComputeShader":{ 1145 "shader_type": "COMPUTE", 1146 "variables":{ 1147 "gl_NumWorkGroups":{ 1148 "essl_level":"ESSL3_1_BUILTINS", 1149 "type":{ 1150 "basic":"UInt", 1151 "precision":"Undefined", 1152 "qualifier":"NumWorkGroups", 1153 "primarySize":3 1154 } 1155 }, 1156 "gl_WorkGroupSize":{ 1157 "essl_level":"ESSL3_1_BUILTINS", 1158 "type":{ 1159 "basic":"UInt", 1160 "precision":"Undefined", 1161 "qualifier":"WorkGroupSize", 1162 "primarySize":3 1163 } 1164 }, 1165 "gl_WorkGroupID":{ 1166 "essl_level":"ESSL3_1_BUILTINS", 1167 "type":{ 1168 "basic":"UInt", 1169 "precision":"Undefined", 1170 "qualifier":"WorkGroupID", 1171 "primarySize":3 1172 } 1173 }, 1174 "gl_LocalInvocationID":{ 1175 "essl_level":"ESSL3_1_BUILTINS", 1176 "type":{ 1177 "basic":"UInt", 1178 "precision":"Undefined", 1179 "qualifier":"LocalInvocationID", 1180 "primarySize":3 1181 } 1182 }, 1183 "gl_GlobalInvocationID":{ 1184 "essl_level":"ESSL3_1_BUILTINS", 1185 "type":{ 1186 "basic":"UInt", 1187 "precision":"Undefined", 1188 "qualifier":"GlobalInvocationID", 1189 "primarySize":3 1190 } 1191 }, 1192 "gl_LocalInvocationIndex":{ 1193 "essl_level":"ESSL3_1_BUILTINS", 1194 "type":{ 1195 "basic":"UInt", 1196 "precision":"Undefined", 1197 "qualifier":"LocalInvocationIndex" 1198 } 1199 } 1200 } 1201 }, 1202 "GeometryShader":{ 1203 "shader_type": "GEOMETRY_EXT", 1204 "variables":{ 1205 "gl_PrimitiveIDIn":{ 1206 "essl_level":"ESSL3_1_BUILTINS", 1207 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 1208 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1209 "type":{ 1210 "basic":"Int", 1211 "precision":"High", 1212 "qualifier":"PrimitiveIDIn" 1213 } 1214 }, 1215 "gl_InvocationID":{ 1216 "essl_level":"ESSL3_1_BUILTINS", 1217 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 1218 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1219 "type":{ 1220 "basic":"Int", 1221 "precision":"High", 1222 "qualifier":"InvocationID" 1223 } 1224 }, 1225 "gl_PrimitiveID":{ 1226 "suffix":"GS", 1227 "essl_level":"ESSL3_1_BUILTINS", 1228 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 1229 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1230 "type":{ 1231 "basic":"Int", 1232 "precision":"High", 1233 "qualifier":"PrimitiveID" 1234 } 1235 }, 1236 "gl_Layer":{ 1237 "suffix":"GS", 1238 "essl_level":"ESSL3_1_BUILTINS", 1239 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 1240 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1241 "type":{ 1242 "basic":"Int", 1243 "precision":"High", 1244 "qualifier":"Layer" 1245 } 1246 }, 1247 "gl_PerVertex":{ 1248 "essl_level":"ESSL3_1_BUILTINS", 1249 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 1250 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1251 "class":"TInterfaceBlock", 1252 "fields":{ 1253 "gl_Position":{ 1254 "basic":"Float", 1255 "precision":"High", 1256 "qualifier":"Position", 1257 "primarySize":4 1258 } 1259 } 1260 }, 1261 "gl_in":{ 1262 "essl_level":"ESSL3_1_BUILTINS", 1263 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 1264 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1265 "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexIn, TLayoutQualifier::Create()); {type_name}->makeArray(0u);", 1266 "comment":"The array size of gl_in is undefined until we get a valid input primitive declaration." 1267 } 1268 }, 1269 "subgroups":{ 1270 "Out":{ 1271 "variables":{ 1272 "gl_PerVertex":{ 1273 "suffix":"OutBlock", 1274 "essl_level":"ESSL3_1_BUILTINS", 1275 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 1276 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1277 "private":true, 1278 "class":"TInterfaceBlock", 1279 "fields":{ 1280 "gl_Position":{ 1281 "basic":"Float", 1282 "precision":"High", 1283 "qualifier":"Position", 1284 "primarySize":4 1285 } 1286 } 1287 }, 1288 "gl_Position":{ 1289 "suffix":"GS", 1290 "essl_level":"ESSL3_1_BUILTINS", 1291 "essl_extension":"EXT_geometry_shader, OES_geometry_shader", 1292 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1293 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutBlock{ext_or_core_suffix});" 1294 } 1295 } 1296 } 1297 } 1298 }, 1299 "TessellationControlShader":{ 1300 "shader_type": "TESS_CONTROL_EXT", 1301 "variables":{ 1302 "gl_PatchVerticesIn":{ 1303 "suffix":"TCS", 1304 "essl_level":"ESSL3_1_BUILTINS", 1305 "essl_extension":"EXT_tessellation_shader", 1306 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1307 "type":{ 1308 "basic":"Int", 1309 "precision":"High", 1310 "qualifier":"PatchVerticesIn" 1311 } 1312 }, 1313 "gl_InvocationID":{ 1314 "suffix":"TCS", 1315 "essl_level":"ESSL3_1_BUILTINS", 1316 "essl_extension":"EXT_tessellation_shader", 1317 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1318 "type":{ 1319 "basic":"Int", 1320 "precision":"High", 1321 "qualifier":"InvocationID" 1322 } 1323 }, 1324 "gl_PrimitiveID":{ 1325 "suffix":"TCS", 1326 "essl_level":"ESSL3_1_BUILTINS", 1327 "essl_extension":"EXT_tessellation_shader", 1328 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1329 "type":{ 1330 "basic":"Int", 1331 "precision":"High", 1332 "qualifier":"PrimitiveID" 1333 } 1334 }, 1335 "gl_TessLevelOuter":{ 1336 "suffix":"TCS", 1337 "essl_level":"ESSL3_1_BUILTINS", 1338 "essl_extension":"EXT_tessellation_shader", 1339 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1340 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelOuter, 1); {type_name}->makeArray(4u);" 1341 }, 1342 "gl_TessLevelInner":{ 1343 "suffix":"TCS", 1344 "essl_level":"ESSL3_1_BUILTINS", 1345 "essl_extension":"EXT_tessellation_shader", 1346 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1347 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelInner, 1); {type_name}->makeArray(2u);" 1348 }, 1349 "gl_PerVertex":{ 1350 "suffix":"TCS", 1351 "essl_level":"ESSL3_1_BUILTINS", 1352 "essl_extension":"EXT_tessellation_shader", 1353 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1354 "class":"TInterfaceBlock", 1355 "fields":{ 1356 "gl_Position":{ 1357 "basic":"Float", 1358 "precision":"High", 1359 "qualifier":"Position", 1360 "primarySize":4 1361 } 1362 } 1363 }, 1364 "gl_in":{ 1365 "suffix":"TCS", 1366 "essl_level":"ESSL3_1_BUILTINS", 1367 "essl_extension":"EXT_tessellation_shader", 1368 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1369 "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexIn, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);" 1370 }, 1371 "gl_out":{ 1372 "suffix":"TCS", 1373 "essl_level":"ESSL3_1_BUILTINS", 1374 "essl_extension":"EXT_tessellation_shader", 1375 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1376 "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexOut, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);" 1377 }, 1378 "gl_BoundingBox":{ 1379 "suffix":"TCS", 1380 "essl_level":"ESSL3_2_BUILTINS", 1381 "essl_extension":"EXT_tessellation_shader", 1382 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1383 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqBoundingBox, 4); {type_name}->makeArray(2u);" 1384 } 1385 }, 1386 "subgroups":{ 1387 "Out":{ 1388 "variables":{ 1389 "gl_PerVertex":{ 1390 "suffix":"OutTcsBlock", 1391 "essl_level":"ESSL3_1_BUILTINS", 1392 "essl_extension":"EXT_tessellation_shader", 1393 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1394 "private":true, 1395 "class":"TInterfaceBlock", 1396 "fields":{ 1397 "gl_Position":{ 1398 "basic":"Float", 1399 "precision":"High", 1400 "qualifier":"Position", 1401 "primarySize":4 1402 } 1403 } 1404 }, 1405 "gl_Position":{ 1406 "suffix":"TCS", 1407 "essl_level":"ESSL3_1_BUILTINS", 1408 "essl_extension":"EXT_tessellation_shader", 1409 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1410 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutTcsBlock{ext_or_core_suffix});" 1411 } 1412 } 1413 }, 1414 "EXTPrimitiveBoundingBox":{ 1415 "variables":{ 1416 "gl_BoundingBoxEXT":{ 1417 "suffix":"TCS", 1418 "essl_level":"ESSL3_1_BUILTINS", 1419 "essl_extension":"EXT_tessellation_shader", 1420 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1421 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqBoundingBox, 4); {type_name}->makeArray(2u);" 1422 } 1423 } 1424 }, 1425 "OESPrimitiveBoundingBox":{ 1426 "variables":{ 1427 "gl_BoundingBoxOES":{ 1428 "suffix":"TCS", 1429 "essl_level":"ESSL3_1_BUILTINS", 1430 "essl_extension":"EXT_tessellation_shader", 1431 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1432 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqBoundingBox, 4); {type_name}->makeArray(2u);" 1433 } 1434 } 1435 } 1436 } 1437 }, 1438 "TessellationEvaluationShader":{ 1439 "shader_type": "TESS_EVALUATION_EXT", 1440 "variables":{ 1441 "gl_PatchVerticesIn":{ 1442 "suffix":"TES", 1443 "essl_level":"ESSL3_1_BUILTINS", 1444 "essl_extension":"EXT_tessellation_shader", 1445 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1446 "type":{ 1447 "basic":"Int", 1448 "precision":"High", 1449 "qualifier":"PatchVerticesIn" 1450 } 1451 }, 1452 "gl_PrimitiveID":{ 1453 "suffix":"TES", 1454 "essl_level":"ESSL3_1_BUILTINS", 1455 "essl_extension":"EXT_tessellation_shader", 1456 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1457 "type":{ 1458 "basic":"Int", 1459 "precision":"High", 1460 "qualifier":"PrimitiveID" 1461 } 1462 }, 1463 "gl_TessCoord":{ 1464 "essl_level":"ESSL3_1_BUILTINS", 1465 "type":{ 1466 "basic":"Float", 1467 "precision":"High", 1468 "primarySize":3, 1469 "qualifier":"TessCoord" 1470 } 1471 }, 1472 "gl_TessLevelOuter":{ 1473 "suffix":"TES", 1474 "essl_level":"ESSL3_1_BUILTINS", 1475 "essl_extension":"EXT_tessellation_shader", 1476 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1477 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelOuter, 1); {type_name}->makeArray(4u);" 1478 }, 1479 "gl_TessLevelInner":{ 1480 "suffix":"TES", 1481 "essl_level":"ESSL3_1_BUILTINS", 1482 "essl_extension":"EXT_tessellation_shader", 1483 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1484 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelInner, 1); {type_name}->makeArray(2u);" 1485 }, 1486 "gl_PerVertex":{ 1487 "suffix":"TES", 1488 "essl_level":"ESSL3_1_BUILTINS", 1489 "essl_extension":"EXT_tessellation_shader", 1490 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1491 "class":"TInterfaceBlock", 1492 "fields":{ 1493 "gl_Position":{ 1494 "basic":"Float", 1495 "precision":"High", 1496 "qualifier":"Position", 1497 "primarySize":4 1498 } 1499 } 1500 }, 1501 "gl_in":{ 1502 "suffix":"TES", 1503 "essl_level":"ESSL3_1_BUILTINS", 1504 "essl_extension":"EXT_tessellation_shader", 1505 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1506 "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexIn, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);" 1507 }, 1508 "gl_out":{ 1509 "suffix":"TES", 1510 "essl_level":"ESSL3_1_BUILTINS", 1511 "essl_extension":"EXT_tessellation_shader", 1512 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1513 "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexOut, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);" 1514 } 1515 }, 1516 "subgroups":{ 1517 "Out":{ 1518 "variables":{ 1519 "gl_PerVertex":{ 1520 "suffix":"OutTesBlock", 1521 "essl_level":"ESSL3_1_BUILTINS", 1522 "essl_extension":"EXT_tessellation_shader", 1523 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1524 "private":true, 1525 "class":"TInterfaceBlock", 1526 "fields":{ 1527 "gl_Position":{ 1528 "basic":"Float", 1529 "precision":"High", 1530 "qualifier":"Position", 1531 "primarySize":4 1532 } 1533 } 1534 }, 1535 "gl_Position":{ 1536 "suffix":"TES", 1537 "essl_level":"ESSL3_1_BUILTINS", 1538 "essl_extension":"EXT_tessellation_shader", 1539 "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS", 1540 "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutTesBlock{ext_or_core_suffix});" 1541 } 1542 } 1543 } 1544 } 1545 }, 1546 "Multiview":{ 1547 "shader_type": "NOT_COMPUTE", 1548 "subgroups":{ 1549 "ESSL3":{ 1550 "variables":{ 1551 "gl_ViewID_OVR":{ 1552 "essl_level":"ESSL3_BUILTINS", 1553 "essl_extension":"OVR_multiview", 1554 "type":{ 1555 "basic":"UInt", 1556 "precision":"High", 1557 "qualifier":"ViewIDOVR" 1558 } 1559 } 1560 } 1561 } 1562 } 1563 } 1564} 1565